Package: ubuntu-dev-tools
Version: 0.203
Severity: normal
Tags: patch upstream
X-Debbugs-Cc: sre4e...@free.fr

Hi,

reverse-depends currently (ubuntu-dev-tools-0.203) crashes when attempting to
display the reverse build dependencies of a package that build-depends on
itself.

Sample output of `reverse-depends -b gradle`:

------------------------------------------------------------------------
Reverse-Build-Depends-Indep
===========================
* simplyhtml
* zeroc-ice

Reverse-Build-Depends
=====================
* asm
* darcula
* freeplane
* gradle
    * simplyhtml
    * zeroc-ice
    * asm
    * darcula
    * freeplane
    * gradle
        * simplyhtml
        * zeroc-ice
        * asm
        * darcula
        * freeplane
        * gradle
            * simplyhtml
            * zeroc-ice
            * asm
            * darcula
            * freeplane
            * gradle
                * simplyhtml
                * zeroc-ice
                * asm
                * darcula
                * freeplane
                * gradle
------------------------------------------------------------------------

 ... and so on until it crashes



Exception report:

------------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/bin/reverse-depends", line 247, in <module>
    main()
  File "/usr/bin/reverse-depends", line 178, in main
    display_verbose(options.package, result)
  File "/usr/bin/reverse-depends", line 221, in display_verbose
    log_package(
  File "/usr/bin/reverse-depends", line 200, in log_package
    log_package(
  File "/usr/bin/reverse-depends", line 200, in log_package
    log_package(
  File "/usr/bin/reverse-depends", line 200, in log_package
    log_package(
  [Previous line repeated 983 more times]
  File "/usr/bin/reverse-depends", line 194, in log_package
    Logger.info(line)
  File "/usr/lib/python3.12/logging/__init__.py", line 1539, in info
    self._log(INFO, msg, args, **kwargs)
  File "/usr/lib/python3.12/logging/__init__.py", line 1684, in _log
    self.handle(record)
  File "/usr/lib/python3.12/logging/__init__.py", line 1700, in handle
    self.callHandlers(record)
  File "/usr/lib/python3.12/logging/__init__.py", line 1762, in callHandlers
    hdlr.handle(record)
  File "/usr/lib/python3.12/logging/__init__.py", line 1028, in handle
    self.emit(record)
  File "/usr/lib/python3.12/logging/__init__.py", line 1160, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/logging/__init__.py", line 999, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/logging/__init__.py", line 706, in format
    s = self.formatMessage(record)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/logging/__init__.py", line 675, in formatMessage
    return self._style.format(record)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/logging/__init__.py", line 464, in format
    return self._format(record)
           ^^^^^^^^^^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded
------------------------------------------------------------------------


Patch:

------------------------------------------------------------------------
--- a/reverse-depends
+++ b/reverse-depends
@@ -183,7 +183,7 @@ def display_verbose(package, values):
         Logger.info("No reverse dependencies found")
         return

-    def log_package(values, package, arch, dependency, offset=0):
+    def log_package(values, package, arch, dependency, visited, offset=0):
         line = f"{'  ' * offset}* {package}"
         if all_archs and set(arch) != all_archs:
             line += f" [{' '.join(sorted(arch))}]"
@@ -192,6 +192,9 @@ def display_verbose(package, values):
                 line += " " * (30 - len(line))
                 line += f"  (for {dependency})"
         Logger.info(line)
+        if package in visited:
+            return
+        visited = visited.copy().add(package)
         data = values.get(package)
         if data:
             offset = offset + 1
@@ -202,6 +205,7 @@ def display_verbose(package, values):
                         rdep["Package"],
                         rdep.get("Architectures", all_archs),
                         rdep.get("Dependency"),
+                        visited,
                         offset,
                     )

@@ -223,6 +227,7 @@ def display_verbose(package, values):
                 rdep["Package"],
                 rdep.get("Architectures", all_archs),
                 rdep.get("Dependency"),
+                {package},
             )
         Logger.info("")

------------------------------------------------------------------------


Best regards,

--
Julien Plissonneau Duquène


-- System Information:
Debian Release: trixie/sid
  APT prefers trixie
  APT policy: (500, 'trixie'), (500, 'testing'), (20, 'unstable'), (10, 
'experimental'), (5, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.11.2-amd64 (SMP w/4 CPU threads; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages ubuntu-dev-tools depends on:
ii  binutils                      2.43.1-5
ii  dctrl-tools                   2.24-3+b1
ii  devscripts                    2.24.3+jpd1
ii  diffstat                      1.66-1
ii  distro-info                   1.12
ii  dpkg-dev                      1.22.11
ii  dput                          1.2.4
ii  lsb-release                   12.1-1
ii  perl                          5.40.0-7
ii  python3                       3.12.6-1
ii  python3-apt                   2.9.0+b1
ii  python3-debian                0.1.49
ii  python3-debianbts             4.1.1
ii  python3-distro-info           1.12
ii  python3-httplib2              0.22.0-1
ii  python3-launchpadlib-desktop  2.0.0-1
ii  python3-lazr.restfulclient    0.14.6-2
ii  python3-ubuntutools           0.203
ii  python3-yaml                  6.0.2-1
ii  sensible-utils                0.0.24
ii  sudo                          1.9.15p5-3+b1
ii  tzdata                        2024a-4

Versions of packages ubuntu-dev-tools recommends:
ii  arch-test                                0.21-1
ii  ca-certificates                          20240203
ii  cowbuilder                               0.90
ii  debian-archive-keyring                   2023.4
ii  debian-keyring                           2024.09.22
ii  debootstrap                              1.0.137
ii  genisoimage                              9:1.1.11-3.5
ii  lintian                                  2.120.0
ii  patch                                    2.7.6-7
ii  pbuilder                                 0.231.1
ii  python3-dns                              4.0.2-2
ii  quilt                                    0.68-1
ii  reportbug                                13.0.2
ii  ubuntu-keyring [ubuntu-archive-keyring]  2023.11.28.1-0.2

Versions of packages ubuntu-dev-tools suggests:
pn  bzr | brz                  <none>
pn  bzr-builddeb | brz-debian  <none>
pn  qemu-user-static           <none>

-- no debconf information

Reply via email to