Use +sourcefiles URLs where possible

In
https://code.launchpad.net/~cjwatson/launchpad/archive-unambiguous-files-traversals/+merge/345118,
I added support for downloading source package files from Launchpad that
can cope with the situation where different versions of a source package
have the same file name with different contents (normally impossible,
but it can happen with imported archives and due to some old bugs).  Use
this where possible.

LP: #1860456
This commit is contained in:
Colin Watson 2020-01-21 15:09:29 +00:00
parent f8fa865ab2
commit 1e1702e676
2 changed files with 29 additions and 14 deletions

View File

@ -25,6 +25,7 @@ import shutil
import subprocess
import sys
import tempfile
from urllib.parse import quote
import lsb_release
from httplib2 import Http, HttpLib2Error
@ -296,8 +297,10 @@ def orig_needed(upload, workdir, pkg):
h = Http()
for filename in glob.glob(os.path.join(workdir, '%s_%s.orig*' % (pkg.source, version))):
url = ('https://launchpad.net/~%s/+archive/%s/+files/%s'
% (user, ppa, filename))
url = ('https://launchpad.net/~%s/+archive/%s/+sourcefiles/%s/%s/%s'
% (quote(user), quote(ppa), quote(pkg.source),
quote(pkg.version.full_version),
quote(os.path.basename(filename))))
try:
headers, body = h.request(url, 'HEAD')
if (headers.status != 200 or

View File

@ -28,7 +28,7 @@ Approach:
"""
from urllib.error import (URLError, HTTPError)
from urllib.parse import urlparse
from urllib.parse import (quote, urlparse)
from urllib.request import urlopen
import codecs
import hashlib
@ -298,10 +298,16 @@ class SourcePackage(object):
return os.path.join(mirror, 'pool', self.component, group,
self.source, filename)
def _lp_url(self, filename):
"Build a source package URL on Launchpad"
return os.path.join('https://launchpad.net', self.distribution,
'+archive', 'primary', '+files', filename)
def _lp_url(self, filename, source=False):
"Build an archive file URL on Launchpad"
if source:
suffix = '+sourcefiles/%s/%s/%s' % (
quote(self.source), quote(self.version.full_version),
quote(filename))
else:
suffix = '+files/%s' % quote(filename)
return 'https://launchpad.net/%s/+archive/primary/%s' % (
quote(self.distribution), suffix)
def _source_urls(self, name):
"Generator of sources for name"
@ -312,7 +318,7 @@ class SourcePackage(object):
for mirror in self.masters:
if mirror not in self.mirrors:
yield self._mirror_url(mirror, name)
yield self._lp_url(name)
yield self._lp_url(name, source=True)
def _binary_urls(self, name, default_urls):
"Generator of URLs for name"
@ -339,7 +345,7 @@ class SourcePackage(object):
parsed = urlparse(self._dsc_source)
url = self._dsc_source
else:
url = self._lp_url(self.dsc_name)
url = self._lp_url(self.dsc_name, source=True)
self._download_dsc(url)
self._check_dsc()
@ -755,11 +761,17 @@ class PersonalPackageArchiveSourcePackage(UbuntuSourcePackage):
self._team = None
self._ppa = None
def _lp_url(self, filename):
"Build a source package URL on Launchpad"
return os.path.join('https://launchpad.net', '~' + self._ppateam,
'+archive', self.distribution, self._ppaname,
'+files', filename)
def _lp_url(self, filename, source=False):
"Build an archive file URL on Launchpad"
if source:
suffix = '+sourcefiles/%s/%s/%s' % (
quote(self.source), quote(self.version.full_version),
quote(filename))
else:
suffix = '+files/%s' % quote(filename)
return 'https://launchpad.net/~%s/+archive/%s/%s/%s' % (
quote(self._ppateam), quote(self.distribution),
quote(self._ppaname), suffix)
class UbuntuCloudArchiveSourcePackage(PersonalPackageArchiveSourcePackage):