#966282 devscripts: uscan: support --download-version in git mode

Package:
devscripts
Source:
devscripts
Description:
scripts to make the life of a Debian Package maintainer easier
Submitter:
Jérémy Lal
Date:
2026-04-10 06:59:01 UTC
Severity:
wishlist
Tags:
#966282#5
Date:
2020-07-25 21:30:03 UTC
From:
To:
debian/changelog:
node-formidable (1.2.1+git20200129.8231ea6-1) unstable; urgency=medium

debian/watch:
version=4
opts="mode=git, pgpmode=none, gitmode=full, pretty=1.2.1+git%cd.%h" \
https://github.com/node-formidable/formidable \
HEAD debian uupdate

uscan --download-version 1.2.1+git20200129.8231ea6
uscan: Newest version of node-formidable on remote site is 1.2.1+git20200529.5110ef8, specified download version is 1.2.1+git20200129.8231ea6
Leaving ../node-formidable_1.2.1+git20200529.5110ef8.orig.tar.xz where it is.
uupdate: ../node-formidable-1.2.1+git20200529.5110ef8 directory exists.
uupdate: remove ../node-formidable-1.2.1+git20200529.5110ef8 directory.
uupdate: -> Copy to      node-formidable_1.2.1+git20200529.5110ef8-1.debian.tar.xz

What was expected ?
building tarball of specified version.
--- /etc/devscripts.conf ---
Empty.
--- ~/.devscripts --- DEBSIGN_KEYID=kapouer@melix.org
#966282#8
Date:
2020-07-27 15:41:23 UTC
From:
To:
Control: retitle -1 devscripts: uscan: support --download-version in git mode
Control: severity -1 wishlist

Yes, it's expected.  The manpage mentions that it's a "best effort
feature", and due to the way the git thing works it's kinda of more
tricky than with plain tarballs.

Let's turn this into a wishlist bug.

#966282#17
Date:
2025-03-10 10:57:49 UTC
From:
To:
Hi,

The reported issue can still be reproduced with the current version of
devscripts (2.25.5):

```
$ git clone https://salsa.debian.org/js-team/node-formidable.git
$ cd node-formidable
$ git checkout debian/1.2.1+20200129git8231ea6-1
$ cat debian/watch
version=4
opts="mode=git, gitmode=full, pgpmode=none, pretty=1.2.1+%cdgit%h" \
https://github.com/node-formidable/formidable.git \
HEAD debian uupdate
$ uscan --download-version 1.2.1+20200129git8231ea6
Newest version of node-formidable on remote site is
1.2.1+20241021git152e940, specified download version is
1.2.1+20200129git8231ea6
Successfully symlinked
../node-formidable-1.2.1+20241021git152e940.tar.xz to
../node-formidable_1.2.1+20241021git152e940.orig.tar.xz.
uupdate: debian/source/format is "3.0 (quilt)".
uupdate: Auto-generating
node-formidable_1.2.1+20200129git8231ea6-1.debian.tar.xz
uupdate: -> Copy to
node-formidable_1.2.1+20241021git152e940-1.debian.tar.xz
```

Implementing this can technically be done: it requires some additional
logic in git.pm/git_search to match the requested version against an
exhaustive git log and save the corresponding commit hash to check it
out.

Best regards,

#966282#28
Date:
2026-04-10 06:57:50 UTC
From:
To:
Hello,

There is also a problem with --download-current-version

For example here:

https://debaudit.debian.net/upstream2orig/result/1b30f155239381ac39da24d24fd323039f317a8e09a24d64d781dae7713c9094

$ uscan -v --download-current-version --dehs --destdir=/var/tmp/oc.r76ygf75/uscan

uscan info: The --dehs option enabled.
        STDOUT = XML output for use by other programs
        STDERR = plain text output for human
        Use the redirection of STDOUT to a file to get the clean XML data
uscan info: Scan watch files in .
uscan info: Check debian/watch and debian/changelog in .
uscan info: package="drat-trim" version="0.0~git20240428.effa1dc-3" (as seen in debian/changelog)
uscan info: package="drat-trim" version="0.0~git20240428.effa1dc" (no epoch/revision)
uscan info: ./debian/changelog sets package="drat-trim" version="0.0~git20240428.effa1dc"
uscan info: Process watch file at: debian/watch
    package = drat-trim
    version = 0.0~git20240428.effa1dc
    pkg_dir = .
uscan info: debian/watch isn't formatted in version 5, trying version 4
uscan info: File debian/watch converted into << ==EOF==
Version: 5

Source: https://github.com/marijnheule/drat-trim
Matching-Pattern: HEAD
Mode: git
Pgpmode: none
Update-Script: uupdate

==EOF==
uscan info: Reset watch_version to 4 because default value may change in version 5
uscan info: Parsing mode: git
uscan info: Parsing pgpmode: none
uscan info: Last orig.tar.* tarball version (from debian/changelog): 0.0~git20240428.effa1dc
uscan info: Download the --download-current-version specified version: 0.0~git20240428.effa1dc
Cloning into bare repository '/var/tmp/oc.r76ygf75/uscan/drat-trim-temporary.88.git'...
uscan info: uscan parser results:
    $base               = https://github.com/marijnheule/drat-trim
    $filepattern        = HEAD
    $newfile            = HEAD
    $mangled_newversion = 0.0~git20241125.2e3b2dc
    $newversion         = 0.0~git20241125.2e3b2dc
    $lastversion        = 0.0~git20240428.effa1dc
uscan info: Upstream URL(+tag) to download is identified as    https://github.com/marijnheule/drat-trim HEAD
uscan info: Filename (filenamemangled) for downloaded file: drat-trim-0.0~git20241125.2e3b2dc.tar.gz
Newest version of drat-trim on remote site is 0.0~git20241125.2e3b2dc, specified download version is 0.0~git20240428.effa1dc
uscan info: Downloading upstream package: https://github.com/marijnheule/drat-trim HEAD
uscan info: Successfully downloaded upstream package: https://github.com/marijnheule/drat-trim HEAD
uscan info: Missing OpenPGP signature.
uscan info: New orig.tar.* tarball version (oversionmangled): 0.0~git20241125.2e3b2dc
uscan info: Launch mk-origtargz with options:
   --package drat-trim --version 0.0~git20241125.2e3b2dc --repack --compression gzip --directory /var/tmp/oc.r76ygf75/uscan --copyright-file debian/copyright /var/tmp/oc.r76ygf75/uscan/drat-trim-0.0~git20241125.2e3b2dc.tar.gz
Successfully symlinked /var/tmp/oc.r76ygf75/uscan/drat-trim-0.0~git20241125.2e3b2dc.tar.gz to /var/tmp/oc.r76ygf75/uscan/drat-trim_0.0~git20241125.2e3b2dc.orig.tar.gz.
uscan info: New orig.tar.* tarball version (after mk-origtargz): 0.0~git20241125.2e3b2dc
uscan info: Executing user specified script:
   uupdate -f --verbose -b --upstream-version 0.0~git20241125.2e3b2dc
Fake uupdate running with -f --verbose -b --upstream-version 0.0~git20241125.2e3b2dc
uscan info: Removing git repo (/var/tmp/oc.r76ygf75/uscan/drat-trim-temporary.88.git)
uscan info: Scan finished

Regards,
Fab