[1/1] deb-dl-dir: do not assume Version being before Source in RC822 headers

Message ID 20250413021119.2577412-2-cedric.hombourger@siemens.com
State New
Headers show
Series deb-dl-dir: do not assume Version being before Source in RC822 headers | expand

Commit Message

Cedric Hombourger April 13, 2025, 2:11 a.m. UTC
Caching of Debian source packages uses "apt-cache dumpavail" to list
sources known to the apt cache and "apt-ftparchive" to list sources
that were downloaded. With the former, the Source field may appear
before the Version field. The awk script used to list source,version
tuples assuming the following order: Package Version [Source] Size.
It now handles the case where Source may appear before Version (as
seen in the "apt-cache dumpavail" output.

Fixes: 40f67049
Reported-by: Srinuvasan A <srinuvasan.a@siemens.com>
Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
---
 meta/classes/deb-dl-dir.bbclass | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Patch

diff --git a/meta/classes/deb-dl-dir.bbclass b/meta/classes/deb-dl-dir.bbclass
index 75877750..af031ced 100644
--- a/meta/classes/deb-dl-dir.bbclass
+++ b/meta/classes/deb-dl-dir.bbclass
@@ -35,8 +35,12 @@  debsrc_source_version_filter() {
     # if <source-version> is not specified then it is <binary-version>.
     # The awk script handles these optional fields. It looks for Size: as a
     # trigger to print the source,version tupple
-    awk '/^Package:/ { s=$2; }
-         /^Version:/ { v=$2; next }
+    #
+    # Notes: Source may appear before Version. We however assume that
+    # Package is the first pattern we will match in a package block
+    # and Size the last.
+    awk '/^Package:/ { s=$2; v="" }
+         /^Version:/ { if (v == "") v=$2 }
          /^Source:/ { s=$2; if ($3 ~ /^\(/) v=substr($3, 2, length($3)-2) }
          /^Size:/ { print s, v}' \
     | sort -u