Thanks Pirate Praveen for providing the first actual concrete case in
this thread where pristine-tar had some issue!

I noticed an interesting thing about this case:

± origtargz --download-only
pristine-tar: successfully generated
../node-cacache_17.0.3+~cs10.3.7.orig-npmcli-move-file.tar.gz
pristine-tar: successfully generated
../node-cacache_17.0.3+~cs10.3.7.orig-npmcli-fs.tar.gz
pristine-tar: successfully generated
../node-cacache_17.0.3+~cs10.3.7.orig-infer-owner.tar.gz
pristine-tar: successfully generated
../node-cacache_17.0.3+~cs10.3.7.orig-gar-promisify.tar.gz
pristine-tar: successfully generated
../node-cacache_17.0.3+~cs10.3.7.orig-fs-minipass.tar.gz
fatal: ambiguous argument
'60b4383b8c982ac64553f2754abaefe7ca7ebf79^{tree}': unknown revision or
path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
fatal: not a valid object name: 60b4383b8c982ac64553f2754abaefe7ca7ebf79^{tree}
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
pristine-tar: command failed: git archive --format=tar
60b4383b8c982ac64553f2754abaefe7ca7ebf79\^\{tree\} | (cd
'/tmp/pristine-tar.obWgetreHi' && tar x)

± git show 60b4383b8c982ac64553f2754abaefe7ca7ebf79
fatal: bad object 60b4383b8c982ac64553f2754abaefe7ca7ebf79

± git fetch origin 60b4383b8c982ac64553f2754abaefe7ca7ebf79
fatal: remote error: upload-pack: not our ref
60b4383b8c982ac64553f2754abaefe7ca7ebf79
fatal: the remote end hung up unexpectedly

± gbp export-orig --pristine-tar
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-fs-minipass.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-infer-owner.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-npmcli-move-file.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-npmcli-fs.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-gar-promisify.tar.gz

And then suddenly the git ref has emerged:

± git show a1567ff8077126b7aa8536b779e3e445ba367a49
tree a1567ff8077126b7aa8536b779e3e445ba367a49
.github/
LICENSE.md
README.md
index.js
package.json
test/

± gbp export-orig --pristine-tar
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-fs-minipass.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-infer-owner.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-npmcli-move-file.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-npmcli-fs.tar.gz
gbp:info: Creating
/home/otto/debian/js-team/node-cacache_17.0.3+~cs10.3.7.orig-gar-promisify.tar.gz

Also comparing output with what I manually downloaded from
https://github.com/npm/cacache/releases/tag/v17.0.3
$ sha256sum v17.0.3.tar.gz node-cacache_17.0.3+~cs10.3.7.orig.tar.gz
2daa2c943a9cf316eef10eda6883ac967ca32cc28de9decef147ea42bdc34283  v17.0.3.tar.gz
2daa2c943a9cf316eef10eda6883ac967ca32cc28de9decef147ea42bdc34283
node-cacache_17.0.3+~cs10.3.7.orig.tar.gz

Not sure what happened here. However in the end pristine-tar worked,
and I was able to use it to verify the tarball. Longer notes in
https://pad.debian.net/p/node-cacache-pristine-tar.

There are however a lot of oddities in this package that makes it unusual
- You don't have 'pristine-tar = True' in debian/gbp.conf. You should
have it to enforce it is used and git pulled and git pushed
consistently.
- There is no README.source explaining what this '+~cs10.3.7' thing in
the version is. I assumed you had repackaged something, but then also
was surprised that it actuall was the same as upstream.
- This package consists of the main package and 5 components that are
all mangled together. Is that necessary? I am surpised such a complex
thing actually seems to work


In summary: nothing in this is an argument to stop using pristine-tar
in all packages. I think Theodore Ts'o also laid out pretty well all
the benefits of pristine-tar and why it was originally developed, and
those requirements and benefits still stand. Sure, we can in future
also have other ways to do this in a future debian package format 3.1,
but right now I warmly recommend people use 'pristine-tar = True' in
their gbp.confs.

Reply via email to