git-update.py: Support architecture-specific fields

Fixes FS#43356.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2015-01-07 10:41:44 +01:00
parent bf7717ac13
commit b32458cb8a

View file

@ -19,6 +19,20 @@ aur_db_user = config.get('database', 'user')
aur_db_pass = config.get('database', 'password') aur_db_pass = config.get('database', 'password')
aur_db_socket = config.get('database', 'socket') aur_db_socket = config.get('database', 'socket')
def extract_arch_fields(pkginfo, field):
values = []
if field in pkginfo:
for val in pkginfo[field]:
values.append({"value": val, "arch": None})
for arch in ['i686', 'x86_64']:
if field + '_' + arch in pkginfo:
for val in pkginfo[field + '_' + arch]:
values.append({"value": val, "arch": arch})
return values
def save_srcinfo(srcinfo, db, cur, user): def save_srcinfo(srcinfo, db, cur, user):
# Obtain package base ID and previous maintainer. # Obtain package base ID and previous maintainer.
pkgbase = srcinfo._pkgbase['pkgname'] pkgbase = srcinfo._pkgbase['pkgname']
@ -58,40 +72,39 @@ def save_srcinfo(srcinfo, db, cur, user):
pkgid = cur.lastrowid pkgid = cur.lastrowid
# Add package sources. # Add package sources.
for source in pkginfo['source']: for source_info in extract_arch_fields(pkginfo, 'source'):
cur.execute("INSERT INTO PackageSources (PackageID, Source) " + cur.execute("INSERT INTO PackageSources (PackageID, Source, " +
"VALUES (%s, %s)", [pkgid, source]) "SourceArch) VALUES (%s, %s, %s)",
[pkgid, source_info['value'], source_info['arch']])
# Add package dependencies. # Add package dependencies.
for deptype in ('depends', 'makedepends', for deptype in ('depends', 'makedepends',
'checkdepends', 'optdepends'): 'checkdepends', 'optdepends'):
if not deptype in pkginfo:
continue
cur.execute("SELECT ID FROM DependencyTypes WHERE Name = %s", cur.execute("SELECT ID FROM DependencyTypes WHERE Name = %s",
[deptype]) [deptype])
deptypeid = cur.fetchone()[0] deptypeid = cur.fetchone()[0]
for dep in pkginfo[deptype]: for dep_info in extract_arch_fields(pkginfo, deptype):
depname = re.sub(r'(<|=|>).*', '', dep) depname = re.sub(r'(<|=|>).*', '', dep_info['value'])
depcond = dep[len(depname):] depcond = dep_info['value'][len(depname):]
deparch = dep_info['arch']
cur.execute("INSERT INTO PackageDepends (PackageID, " + cur.execute("INSERT INTO PackageDepends (PackageID, " +
"DepTypeID, DepName, DepCondition) " + "DepTypeID, DepName, DepCondition, DepArch) " +
"VALUES (%s, %s, %s, %s)", [pkgid, deptypeid, "VALUES (%s, %s, %s, %s, %s)",
depname, depcond]) [pkgid, deptypeid, depname, depcond, deparch])
# Add package relations (conflicts, provides, replaces). # Add package relations (conflicts, provides, replaces).
for reltype in ('conflicts', 'provides', 'replaces'): for reltype in ('conflicts', 'provides', 'replaces'):
if not reltype in pkginfo:
continue
cur.execute("SELECT ID FROM RelationTypes WHERE Name = %s", cur.execute("SELECT ID FROM RelationTypes WHERE Name = %s",
[reltype]) [reltype])
reltypeid = cur.fetchone()[0] reltypeid = cur.fetchone()[0]
for rel in pkginfo[reltype]: for rel_info in extract_arch_fields(pkginfo, reltype):
relname = re.sub(r'(<|=|>).*', '', rel) relname = re.sub(r'(<|=|>).*', '', rel_info['value'])
relcond = rel[len(relname):] relcond = rel_info['value'][len(relname):]
relarch = rel_info['arch']
cur.execute("INSERT INTO PackageRelations (PackageID, " + cur.execute("INSERT INTO PackageRelations (PackageID, " +
"RelTypeID, RelName, RelCondition) " + "RelTypeID, RelName, RelCondition, RelArch) " +
"VALUES (%s, %s, %s, %s)", [pkgid, reltypeid, "VALUES (%s, %s, %s, %s, %s)",
relname, relcond]) [pkgid, reltypeid, relname, relcond, relarch])
# Add package licenses. # Add package licenses.
if 'license' in pkginfo: if 'license' in pkginfo: