Expand decimal revisions in requests
Requests may either contain the srcmd5 or the decimal revision. So we may need to convert the revision to srcmd5.
This commit is contained in:
parent
d19b324f5e
commit
aadd3f96eb
@ -33,6 +33,7 @@ import osc.conf
|
|||||||
import osc.core
|
import osc.core
|
||||||
import rpm
|
import rpm
|
||||||
import yaml
|
import yaml
|
||||||
|
import re
|
||||||
from urllib import quote_plus
|
from urllib import quote_plus
|
||||||
|
|
||||||
from osclib.memoize import memoize
|
from osclib.memoize import memoize
|
||||||
@ -138,6 +139,13 @@ class UpdateCrawler(object):
|
|||||||
ret[package.get('package')] = package
|
ret[package.get('package')] = package
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def _get_source_package(self, project, package, revision):
|
||||||
|
opts = { 'view': 'info' }
|
||||||
|
if revision:
|
||||||
|
opts['rev'] = revision
|
||||||
|
return self.cached_GET(makeurl(self.apiurl,
|
||||||
|
['source', project, package], opts))
|
||||||
|
|
||||||
def _find_existing_request(self, src_project, src_package, rev, dst_project,
|
def _find_existing_request(self, src_project, src_package, rev, dst_project,
|
||||||
dst_package):
|
dst_package):
|
||||||
"""Create a submit request."""
|
"""Create a submit request."""
|
||||||
@ -152,7 +160,13 @@ class UpdateCrawler(object):
|
|||||||
foundrev = False
|
foundrev = False
|
||||||
for r in reqs:
|
for r in reqs:
|
||||||
for a in r.actions:
|
for a in r.actions:
|
||||||
if a.to_xml().find('source').get('rev') == rev:
|
srcrev = a.src_rev
|
||||||
|
# sometimes requests only contain the decimal revision
|
||||||
|
if re.match(r'^\d+$', srcrev) is not None:
|
||||||
|
xml = ET.fromstring(self._get_source_package(src_project,src_package, srcrev))
|
||||||
|
srcrev = xml.get('verifymd5')
|
||||||
|
logging.debug('rev {}'.format(srcrev))
|
||||||
|
if srcrev == rev:
|
||||||
logging.debug('{}: found existing request {}'.format(dst_package, r.reqid))
|
logging.debug('{}: found existing request {}'.format(dst_package, r.reqid))
|
||||||
foundrev = True
|
foundrev = True
|
||||||
return foundrev
|
return foundrev
|
||||||
@ -205,19 +219,14 @@ class UpdateCrawler(object):
|
|||||||
def follow_link(self, project, package, rev, verifymd5):
|
def follow_link(self, project, package, rev, verifymd5):
|
||||||
#print "follow", project, package, rev
|
#print "follow", project, package, rev
|
||||||
# verify it's still the same package
|
# verify it's still the same package
|
||||||
xml = ET.fromstring(http_GET(makeurl(self.apiurl,
|
xml = ET.fromstring(self._get_source_package(project, package, rev))
|
||||||
['source', project, package],
|
|
||||||
{
|
|
||||||
'rev': rev,
|
|
||||||
'view': 'info'
|
|
||||||
})).read())
|
|
||||||
if xml.get('verifymd5') != verifymd5:
|
if xml.get('verifymd5') != verifymd5:
|
||||||
return None
|
return None
|
||||||
xml = ET.fromstring(http_GET(makeurl(self.apiurl,
|
xml = ET.fromstring(self.cached_GET(makeurl(self.apiurl,
|
||||||
['source', project, package],
|
['source', project, package],
|
||||||
{
|
{
|
||||||
'rev': rev
|
'rev': rev
|
||||||
})).read())
|
})))
|
||||||
linkinfo = xml.find('linkinfo')
|
linkinfo = xml.find('linkinfo')
|
||||||
if not linkinfo is None:
|
if not linkinfo is None:
|
||||||
ret = self.follow_link(linkinfo.get('project'), linkinfo.get('package'), linkinfo.get('srcmd5'), verifymd5)
|
ret = self.follow_link(linkinfo.get('project'), linkinfo.get('package'), linkinfo.get('srcmd5'), verifymd5)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user