mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-05-10 16:31:28 +00:00
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:
parent
f8fa865ab2
commit
1e1702e676
@ -25,6 +25,7 @@ import shutil
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
import lsb_release
|
import lsb_release
|
||||||
from httplib2 import Http, HttpLib2Error
|
from httplib2 import Http, HttpLib2Error
|
||||||
@ -296,8 +297,10 @@ def orig_needed(upload, workdir, pkg):
|
|||||||
|
|
||||||
h = Http()
|
h = Http()
|
||||||
for filename in glob.glob(os.path.join(workdir, '%s_%s.orig*' % (pkg.source, version))):
|
for filename in glob.glob(os.path.join(workdir, '%s_%s.orig*' % (pkg.source, version))):
|
||||||
url = ('https://launchpad.net/~%s/+archive/%s/+files/%s'
|
url = ('https://launchpad.net/~%s/+archive/%s/+sourcefiles/%s/%s/%s'
|
||||||
% (user, ppa, filename))
|
% (quote(user), quote(ppa), quote(pkg.source),
|
||||||
|
quote(pkg.version.full_version),
|
||||||
|
quote(os.path.basename(filename))))
|
||||||
try:
|
try:
|
||||||
headers, body = h.request(url, 'HEAD')
|
headers, body = h.request(url, 'HEAD')
|
||||||
if (headers.status != 200 or
|
if (headers.status != 200 or
|
||||||
|
@ -28,7 +28,7 @@ Approach:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from urllib.error import (URLError, HTTPError)
|
from urllib.error import (URLError, HTTPError)
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import (quote, urlparse)
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
import codecs
|
import codecs
|
||||||
import hashlib
|
import hashlib
|
||||||
@ -298,10 +298,16 @@ class SourcePackage(object):
|
|||||||
return os.path.join(mirror, 'pool', self.component, group,
|
return os.path.join(mirror, 'pool', self.component, group,
|
||||||
self.source, filename)
|
self.source, filename)
|
||||||
|
|
||||||
def _lp_url(self, filename):
|
def _lp_url(self, filename, source=False):
|
||||||
"Build a source package URL on Launchpad"
|
"Build an archive file URL on Launchpad"
|
||||||
return os.path.join('https://launchpad.net', self.distribution,
|
if source:
|
||||||
'+archive', 'primary', '+files', filename)
|
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):
|
def _source_urls(self, name):
|
||||||
"Generator of sources for name"
|
"Generator of sources for name"
|
||||||
@ -312,7 +318,7 @@ class SourcePackage(object):
|
|||||||
for mirror in self.masters:
|
for mirror in self.masters:
|
||||||
if mirror not in self.mirrors:
|
if mirror not in self.mirrors:
|
||||||
yield self._mirror_url(mirror, name)
|
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):
|
def _binary_urls(self, name, default_urls):
|
||||||
"Generator of URLs for name"
|
"Generator of URLs for name"
|
||||||
@ -339,7 +345,7 @@ class SourcePackage(object):
|
|||||||
parsed = urlparse(self._dsc_source)
|
parsed = urlparse(self._dsc_source)
|
||||||
url = self._dsc_source
|
url = self._dsc_source
|
||||||
else:
|
else:
|
||||||
url = self._lp_url(self.dsc_name)
|
url = self._lp_url(self.dsc_name, source=True)
|
||||||
self._download_dsc(url)
|
self._download_dsc(url)
|
||||||
|
|
||||||
self._check_dsc()
|
self._check_dsc()
|
||||||
@ -755,11 +761,17 @@ class PersonalPackageArchiveSourcePackage(UbuntuSourcePackage):
|
|||||||
self._team = None
|
self._team = None
|
||||||
self._ppa = None
|
self._ppa = None
|
||||||
|
|
||||||
def _lp_url(self, filename):
|
def _lp_url(self, filename, source=False):
|
||||||
"Build a source package URL on Launchpad"
|
"Build an archive file URL on Launchpad"
|
||||||
return os.path.join('https://launchpad.net', '~' + self._ppateam,
|
if source:
|
||||||
'+archive', self.distribution, self._ppaname,
|
suffix = '+sourcefiles/%s/%s/%s' % (
|
||||||
'+files', filename)
|
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):
|
class UbuntuCloudArchiveSourcePackage(PersonalPackageArchiveSourcePackage):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user