Your message dated Wed, 3 Feb 2021 20:59:34 -0700
with message-id <[email protected]>
and subject line Re: Bug#854010: ubuntu-dev-tools: pull-lp-source not getting 
source pkg for binary name
has caused the Debian Bug report #854010,
regarding ubuntu-dev-tools: pull-lp-source not getting source pkg for binary 
name
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
854010: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=854010
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: ubuntu-dev-tools
Version: 0.158
Severity: normal
Tags: patch
User: [email protected]
Usertags: origin-ubuntu zesty ubuntu-patch

Dear Maintainer,

Calling pull-lp-source with the name of a binary package fails to get the
corresponding source package.

In Ubuntu, this is tracked with bug 1453330:
https://bugs.launchpad.net/ubuntu/+source/ubuntu-dev-tools/+bug/1453330

This patch corrects that so pull-lp-source will correctly lookup the source
package name for any binary package name provided.

Thanks for considering the patch.
diff -Nru ubuntu-dev-tools-0.157/pull-lp-source ubuntu-dev-tools-0.158/pull-lp-source
--- ubuntu-dev-tools-0.157/pull-lp-source	2016-05-09 00:56:05.000000000 -0400
+++ ubuntu-dev-tools-0.158/pull-lp-source	2017-02-02 16:52:52.000000000 -0500
@@ -40,25 +40,36 @@
 from ubuntutools.logger import Logger
 from ubuntutools.misc import split_release_pocket
 
+from launchpadlib.launchpad import Launchpad as LP
 
-def source_package_for(binary, release):
-    """Query DDE to find the source package for a particular binary
-    Should really do this with LP, but it's not possible LP: #597041
-    """
-    url = ('http://dde.debian.net/dde/q/udd/dist/d:ubuntu/r:%s/p:%s/?t=json'
-           % (release, binary))
-    data = None
-    try:
-        data = json.load(urllib2.urlopen(url))['r']
-    except urllib2.URLError, e:
-        Logger.error('Unable to retrieve package information from DDE: '
-                     '%s (%s)', url, str(e))
-    except ValueError, e:
-        Logger.error('Unable to parse JSON response from DDE: '
-                     '%s (%s)', url, str(e))
-    if not data:
+
+def getSPPH(lp, archive, package, version, series, pocket, try_binary=True):
+    params = { 'exact_match': True, 'order_by_date': True, }
+    if pocket:
+        params['pocket'] = pocket
+    if series:
+        params['distro_series'] = series()
+    else:
+        params['version'] = version
+    spphs = archive.getPublishedSources(source_name=package, **params)
+    if spphs:
+        return spphs[0]
+    if not try_binary:
         return None
-    return data[0]['source']
+
+    # Didn't find any, maybe the package is a binary package name
+    if series:
+        del params['distro_series']
+        archs = lp.load(series().architectures_collection_link).entries
+        params['distro_arch_series'] = archs[0]['self_link']
+    bpphs = archive.getPublishedBinaries(binary_name=package, **params)
+    if bpphs:
+        bpph_build = lp.load(bpphs[0].build_link)
+        source_package = bpph_build.source_package_name
+        return getSPPH(lp, archive, source_package, version, series, pocket,
+                       try_binary=False)
+
+    return None
 
 
 def main():
@@ -85,6 +96,7 @@
 
     # Login anonymously to LP
     Launchpad.login_anonymously()
+    lp = LP.login_anonymously("pull-lp-source", "production")
 
     package = str(args[0]).lower()
 
@@ -106,29 +118,25 @@
         (release, pocket) = split_release_pocket(version, default=None)
     except PocketDoesNotExistError, e:
         pass
+
+    distro = Distribution('ubuntu')
+    archive = distro.getArchive()
+
+    series = None
     if release in ubuntu_info.all:
-        archive = Distribution('ubuntu').getArchive()
-        try:
-            spph = archive.getSourcePackage(package, release, pocket)
-        except SeriesNotFoundException, e:
-            Logger.error(str(e))
-            sys.exit(1)
-        except PackageNotFoundException, e:
-            source_package = source_package_for(package, release)
-            if source_package is not None and source_package != package:
-                try:
-                    spph = archive.getSourcePackage(source_package, release,
-                                                    pocket)
-                    package = source_package
-                except PackageNotFoundException:
-                    Logger.error(str(e))
-                    sys.exit(1)
-            else:
-                Logger.error(str(e))
-                sys.exit(1)
+        series = distro.getSeries(release)
 
-        version = spph.getVersion()
-        component = spph.getComponent()
+    spph = getSPPH(lp, archive, package, version, series, pocket)
+    if not spph:
+        Logger.error("Package %s not found in %s", package, release)
+        sys.exit(1)
+
+    if package != spph.source_package_name:
+        Logger.normal("Using source package %s for %s",
+                      spph.source_package_name, package);
+    package = spph.source_package_name
+    version = spph.source_package_version
+    component = spph.component_name
 
     Logger.normal('Downloading %s version %s', package, version)
     srcpkg = UbuntuSourcePackage(package, version, component=component,

--- End Message ---
--- Begin Message ---
Version: 0.175

According to your LP bug, you fixed this in 0.175.

SR

-- 
Stefano Rivera
  http://tumbleweed.org.za/
  +1 415 683 3272

--- End Message ---

Reply via email to