With pristine-tar version 0.5, I've added a new feature: The ability to easily inject enough information into a git repository so that a pristine tarball can later be regenerated from that repository.
If a package's upstream
branch contains the upstream source
corresponding to the tarball to be imported, it's very simple
to use.
joey@kodama:~/src/fbreader> pristine-tar commit ~/lib/debian/unstable/fbreader_0.8.12.orig.tar.gz
pristine-tar: committed fbreader_0.8.12.orig.tar.gz.delta to branch pristine-tar
Otherwise, you also have to specify a tag (or any tree-ish really) where the upstream source can be found.
joey@kodama:~/src/fbreader> pristine-tar commit ~/fbreader_0.8.9.orig.tar.gz upstream/0.8.9
pristine-tar: committed fbreader_0.8.9.orig.tar.gz.delta to branch pristine-tar
Here's what it puts in the pristine-tar branch that it creates. In this example, the delta files are 40-some kilobytes, which is much nicer than if I'd had to check the 2 megabyte tarballs into git directly.
joey@kodama:~/src/fbreader> git checkout pristine-tar
Switched to branch "pristine-tar"
joey@kodama:~/src/fbreader> ls -l
total 104
-rw-r--r-- 1 joey joey 46583 Jan 31 21:26 fbreader_0.8.12.orig.tar.gz.delta
-rw-r--r-- 1 joey joey 40 Jan 31 21:26 fbreader_0.8.12.orig.tar.gz.id
-rw-r--r-- 1 joey joey 45267 Jan 31 21:26 fbreader_0.8.9.orig.tar.gz.delta
-rw-r--r-- 1 joey joey 40 Jan 31 21:26 fbreader_0.8.9.orig.tar.gz.id
Don't forget to push the pristine-tar branch to your server for safekeeping.
joey@kodama:~/src/fbreader> git push origin pristine-tar
Once a tarball's delta is checked in, you can easily and quickly regenerate the original tarball.
joey@kodama:~/src/fbreader> pristine-tar checkout ../fbreader_0.8.12.orig.tar.gz
pristine-tar: successfully generated ../fbreader_0.8.12.orig.tar.gz
Yes, it's really the same file. :-)
joey@kodama:~/src/fbreader> md5sum ~/lib/debian/unstable/fbreader_0.8.12.orig.tar.gz ../fbreader_0.8.12.orig.tar.gz
8045abe1acc75dbdd220400df541f23f /home/joey/lib/debian/unstable/fbreader_0.8.12.orig.tar.gz
8045abe1acc75dbdd220400df541f23f ../fbreader_0.8.12.orig.tar.gz
The above example is from the perspective of a maintainer of a Debian package. But this can also be used by the authors who generate the pristine tarballs in the first place. Check them into git using pristine-tar. Then you can regenerate any tarball you've ever released using just your project's git repository.
joey@kodama:~/src/pristine-tar> pristine-tar commit ../pristine-tar_0.5.tar.gz tags/0.5
pristine-tar: committed pristine-tar_0.5.tar.gz.delta to branch pristine-tar
One word of warning: For pristine-tar to check out the tarball, git needs to be
able to check out the tree that you referred to when you committed it in the
first place. If that was a tag that you've told git to delete, you're SOL. If
it was a branch and the branch has changed in the meantime, that's fine, so
long as git can find the original id that is stored in the .tar.gz.id
file.
I hope that tools like git-import-orig
and git-debimport
can get
support for automatically calling pristine-tar commit
when importing
tarballs into git, and that tools like git-buildpackage
and gitpkg
can
use it to check out the tarballs.