Hi,
On Thu, Jan 09, 2025 at 02:16:50PM +0100, Javier Fernández-Sanguino Peña wrote:
> Package: git-buildpackage
> Version: 0.9.36
> Severity: normal
> Tags: patch
> 
> 
> When importing packages that were built and signed a long time ago (>20 
> years),
> gbp import-dsc fails to determine correcly the version for the package (and 
> for
> upstream).
> 
> This prevents me from importing all my old history of packages in one go to
> GIT. I found a workaround by importing manually one DSC file at a time and 
> then
> fixing the git tags manually.
> 
> 
> Take, for example, the following situation. Compartment, which is a package 
> of over 20 years, with the following DSC files:
> 
> jfs@silicio:compartment$ ls -ltr ../*dsc
> -rw-r--r-- 1 jfs jfs  681 ene  6  2003 ../compartment_1.1-2.dsc
> -rw-r--r-- 1 jfs jfs  681 ene  6  2003 ../compartment_1.1-1.dsc
> -rw-r--r-- 1 jfs jfs  682 ene  6  2003 ../compartment_1.1-3.dsc
> -rw-r--r-- 1 jfs jfs  682 may 27  2003 ../compartment_1.1-4.dsc
> -rw-r--r-- 1 jfs jfs  682 oct 28  2003 ../compartment_1.1-5.dsc
> -rw-r--r-- 1 jfs jfs  688 dic 24  2003 ../compartment_1.1.0-1.dsc
> -rw-r--r-- 1 jfs jfs  700 feb 25  2005 ../compartment_1.1.0-2.dsc
> -rw-r--r-- 1 jfs jfs  700 abr 30  2006 ../compartment_1.1.0-3.dsc
> -rw-r--r-- 1 jfs jfs  972 may 31  2008 ../compartment_1.1.0-4.dsc
> -rw-r--r-- 1 jfs jfs 1725 ene  4  2017 ../compartment_1.1.0-5.dsc
> 
> The oldest one uses the format from GnuPG at the time which has a Version: 
> header which is as follows:
> 
> -----BEGIN PGP SIGNED MESSAGE-----
> 
> Format: 1.0
> Source: compartment
> Version: 1.1-1
> Binary: compartment
> Maintainer: Javier Fernandez-Sanguino Pena <j...@computer.org>
> Architecture: any
> Standards-Version: 3.1.0
> Build-Depends: debhelper
> Files:
>  e97310bc577ee033c5c7fa753ba5d7d1 23942 compartment_1.1.orig.tar.gz
>  58cf68a70f34e6df2f6f61ec44ea8ff6 2261 compartment_1.1-1.diff.gz
> 
> -----BEGIN PGP SIGNATURE-----
> Version: 2.6.3ia
> Charset: noconv
> 
> iQCVAwUBPNB9SPtEPvakNq0lAQEm/gQAtdE0pWwH0XWzV4BDm6kumzgIvx+y3HHZ
> 2Erbyv3/9trVmVwaCgCa2XS3hbzCxGqJJU8ysO005BgnKen9rNLfe4rZYzhVbprD
> otIlkhZzkKsDooIRpR862ZVPytAuBxiBymp3pUv5wEh6T/hsmPY57Hd5335W3wsw
> RW+SynTqrC8=
> =+bMW
> -----END PGP SIGNATURE-----
> 
> 
> The dscs from version 1.1.0-2 and later have a PGP signature header with the 
> following content:
> 
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.0 (GNU/Linux)
> 
> iQCVAwUBQh5wrPtEPvakNq0lAQI1oQQAgoaGTvODCDqMbp7aLx4FEb+xhmYWRLYG
> c1TJ5ukhXC57H8rqQsSrNCAopW1QvDKQt/GZZkj+OR9SZib2kKhCEJHYNuSpTQeb
> 5npdKDQLrisWaEd6LOIdKxFSDIgG/20wUayPpg6behqTCnFzdcBI8wjh5CU2JulO
> G7SKvG7D4RI=
> =5vpc
> -----END PGP SIGNATURE-----
> 
> If I try to import them all using import-dscs into a single GIT repository, 
> the following happens:
> 
> jfs@silicio:compartment-test$ gbp import-dscs 
> /home/jfs/debian/security/compartment/*dsc
> gbp:info: Version '1.1.0-2' imported under '/tmp/compartment-test'
> gbp:info: Version '1.1.0-3' imported under '/tmp/compartment-test'
> gbp:info: Version '1.1.0-4' imported under '/tmp/compartment-test'
> gbp:info: Version '1.1.0-5' imported under '/tmp/compartment-test'
> gbp:info: Version '2.6.3ia' imported under '/tmp/compartment-test'
> gbp:warning: Version 2.6.3ia already imported.
> gbp:warning: Version 2.6.3ia already imported.
> gbp:warning: Version 2.6.3ia already imported.
> gbp:warning: Version 2.6.3ia already imported.
> gbp:warning: Version 2.6.3ia already imported.
> gbp:info: Everything imported under /tmp/compartment-test
> 
> 
> And the following is the result on tags:
> 
> jfs@silicio:compartment-test$ git tag
> debian/1.1.0-2
> debian/1.1.0-3
> debian/1.1.0-4
> debian/1.1.0-5
> debian/2.6.3ia
> upstream/1.1.0
> upstream/2.6.3ia
> 
> As you can see, a tag 'debian/2.6.3ia' has been created as well as a
> 'upstream/2.6.3ia'. This appears to be due to import-dsc misinterpreting the 
> Version: header
> used in the PGP signature footer.
> 
> The attached proposed patch skips the section of the DSCs files that contain
> the PGP signature, to avoid the parsing of the headers in that section of the
> DSC file.
> 
> It seems to work find when bulk importing. With this patch, gbp import-dscs 
> now works fine in my case:
> 
> jfs@silicio:compartment-test-fix$ gbp import-dscs 
> /home/jfs/debian/security/compartment/*dsc
> gbp:info: Version '1.1-1' imported under '/tmp/compartment-test-fix'
> gbp:info: Version '1.1-2' imported under '/tmp/compartment-test-fix'
> gbp:info: Version '1.1-3' imported under '/tmp/compartment-test-fix'
> gbp:info: Version '1.1-4' imported under '/tmp/compartment-test-fix'
> gbp:info: Version '1.1-5' imported under '/tmp/compartment-test-fix'
> gbp:info: Version '1.1.0-1' imported under '/tmp/compartment-test-fix'
> gbp:info: Version '1.1.0-2' imported under '/tmp/compartment-test-fix'
> gbp:info: Version '1.1.0-3' imported under '/tmp/compartment-test-fix'
> gbp:info: Version '1.1.0-4' imported under '/tmp/compartment-test-fix'
> gbp:info: Version '1.1.0-5' imported under '/tmp/compartment-test-fix'
> gbp:info: Everything imported under /tmp/compartment-test-fix
> jfs@silicio:compartment-test-fix$ git tag
> debian/1.1-1
> debian/1.1-2
> debian/1.1-3
> debian/1.1-4
> debian/1.1-5
> debian/1.1.0-1
> debian/1.1.0-2
> debian/1.1.0-3
> debian/1.1.0-4
> debian/1.1.0-5
> upstream/1.1
> upstream/1.1.0
> 
> 
> Could you please review and upload this fix to the new release?
> 
> Thanks!
> 
> Javier
> 
> 
> 
> 
> 
> 
> 
> -- System Information:
> Debian Release: trixie/sid
>   APT prefers unstable
>   APT policy: (500, 'unstable')
> Architecture: i386 (i686)
> 
> Kernel: Linux 6.10.12-686-pae (SMP w/4 CPU threads; PREEMPT)
> Locale: LANG=es_ES.UTF-8, LC_CTYPE=es_ES.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 git-buildpackage depends on:
> ii  devscripts        2.24.1
> ii  git               1:2.45.2-1
> ii  man-db            2.13.0-1
> ii  python3           3.12.6-1
> ii  python3-dateutil  2.9.0-3
> ii  python3-yaml      6.0.2-1
> ii  sensible-utils    0.0.24
> 
> Versions of packages git-buildpackage recommends:
> ii  cowbuilder        0.90
> ii  pbuilder          0.231.1
> ii  pristine-tar      1.50+nmu2
> ii  python3-requests  2.32.3+dfsg-1
> 
> Versions of packages git-buildpackage suggests:
> ii  python3-notify2  0.3-5
> ii  sudo             1.9.15p5-3+b1
> ii  unzip            6.0-28
> 
> -- no debconf information

> --- dscfile.py.orig   2025-01-09 14:07:46.436216047 +0100
> +++ dscfile.py        2025-01-09 14:13:22.697862184 +0100
> @@ -95,6 +95,8 @@
>          fromdir = os.path.dirname(self.dscfile)
>  
>          for line in f:
> +            if line.strip() == "-----BEGIN PGP SIGNATURE-----":
> +                break
>              m = self.version_re.match(line)
>              if m:
>                  self.full_version = m.group('version')

Thanks for looking into this. Could you add a test to
tests/12_test_deb.py so we don't break it again in the future?

If you prefer merge requests you can use 
https://salsa.debian.org/agx/git-buildpackage/
which would also run the tests automatically.
Cheers,
 -- Guido

Reply via email to