Package: pristine-tar
Version: 1.25

In the current version of git, the "git submodule" commands create
submodule repos which do not have .git subdirectories, but instead
have .git files which contain text with a redirection pointer.

This causes "pristine-tar commit" to fail rather mysteriously when it
tries to access files in .git/* directly.  The pristine-tar program
really should be using the appropriate git commands instead.

The "right" way to find the true git subdirectory, following textual
redirects etc, is:

  git rev-parse --git-dir

If not inside a git repo this will give an error status, so it is also
a good way to check if you're inside a git repo.


I should say that "pristine-tar checkout" works even when
"pristine-tar commit" does not, so this is a pretty easy problem to
work around: just make a non-submodule clone of the repo in question,
"pristine-tar commit" there, and push the pristine-tar branch back
into the submodule.

Below:
 - example of non-directory .git in submodule
 - example pristine-tar commit failure in said repo
 - example of how a user can work around problem
(The last of these three is provided for other users who come across
this problem and find this bug report.)

                                        Cheers,

                                        --Barak.
--
Barak A. Pearlmutter
 Hamilton Institute & Dept Comp Sci, NUI Maynooth, Co. Kildare, Ireland
 http://www.bcl.hamilton.ie/~barak/

----------------------------------------------------------------

~/tmp $ echo SHOW THAT GIT SUBMODULES HAVE PLAIN .git FILE
SHOW THAT GIT SUBMODULES HAVE PLAIN .git FILE

~/tmp $ git init foo
Initialized empty Git repository in /var/tmp/barak/tmp/foo/.git/

~/tmp $ cd foo

~/tmp/foo $ echo FOO > fu

~/tmp/foo $ git add fu

~/tmp/foo $ git commit -m 'kung fu'
[master (root-commit) c07cc51] kung fu
 1 file changed, 1 insertion(+)
 create mode 100644 fu

~/tmp/foo $ git submodule add git://github.com/barak/auto6to4.git
Cloning into 'auto6to4'...
remote: Counting objects: 126, done.
remote: Compressing objects: 100% (107/107), done.
remote: Total 126 (delta 50), reused 53 (delta 10)
Receiving objects: 100% (126/126), 24.11 KiB, done.
Resolving deltas: 100% (50/50), done.

~/tmp/foo $ cd auto6to4/

~/tmp/foo/auto6to4 $ ls -lA
total 32
-rwxrwxr-x 1 barak barak 8986 Jul 12 09:54 auto6to4
drwxrwxr-x 3 barak barak 4096 Jul 12 09:54 debian
-rw-rw-r-- 1 barak barak   33 Jul 12 09:54 .git
-rw-rw-r-- 1 barak barak   12 Jul 12 09:54 .gitignore
-rw-rw-r-- 1 barak barak  998 Jul 12 09:54 Makefile
-rw-rw-r-- 1 barak barak 2511 Jul 12 09:54 README

~/tmp/foo/auto6to4 $ cat .git
gitdir: ../.git/modules/auto6to4

~/tmp/foo/auto6to4 $ ls -l ../.git/modules/auto6to4/
total 44
drwxrwxr-x 2 barak barak 4096 Jul 12 09:54 branches
-rw-rw-r-- 1 barak barak  290 Jul 12 09:54 config
-rw-rw-r-- 1 barak barak   73 Jul 12 09:54 description
-rw-rw-r-- 1 barak barak   23 Jul 12 09:54 HEAD
drwxrwxr-x 2 barak barak 4096 Jul 12 09:54 hooks
-rw-rw-r-- 1 barak barak 1336 Jul 12 09:54 index
drwxrwxr-x 2 barak barak 4096 Jul 12 09:54 info
drwxrwxr-x 3 barak barak 4096 Jul 12 09:54 logs
drwxrwxr-x 4 barak barak 4096 Jul 12 09:54 objects
-rw-rw-r-- 1 barak barak  710 Jul 12 09:54 packed-refs
drwxrwxr-x 5 barak barak 4096 Jul 12 09:54 refs

~/tmp/foo/auto6to4 $ cat ../.git/modules/auto6to4/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        worktree = ../../../auto6to4
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git://github.com/barak/auto6to4.git
[branch "master"]
        remote = origin
        merge = refs/heads/master

~/tmp/foo/auto6to4 $ echo SHOW pristine-tar commit COMMAND FAILING
SHOW pristine-tar commit COMMAND FAILING

~/tmp/foo/auto6to4 $ git tag upstream/1.20.1 origin/upstream

~/tmp/foo/auto6to4 $ git archive --format=tgz --prefix=auto6to4-1.20.1/ 
--output ../auto6to4_1.20.1.orig.tar.gz upstream/1.20.1

~/tmp/foo/auto6to4 $ pristine-tar commit ../auto6to4_1.20.1.orig.tar.gz 
upstream/1.20.1
Branch pristine-tar set up to track remote branch pristine-tar from origin.
error: auto6to4_1.20.1.orig.tar.gz.delta: does not exist and --remove not passed
fatal: Unable to process path auto6to4_1.20.1.orig.tar.gz.delta
pristine-tar: command failed: git update-index --add 
auto6to4_1.20.1.orig.tar.gz.delta auto6to4_1.20.1.orig.tar.gz.id

~/tmp/foo/auto6to4 $ echo SHOW HOW TO WORK AROUND THIS PROBLEM
SHOW HOW TO WORK AROUND THIS PROBLEM

~/tmp/foo/auto6to4 $ cd ../..

~/tmp $ git clone foo/auto6to4
Cloning into 'auto6to4'...
done.

~/tmp $ cd auto6to4/

~/tmp/auto6to4 $ ls -lA
total 32
-rwxrwxr-x 1 barak barak 8986 Jul 12 09:59 auto6to4
drwxrwxr-x 3 barak barak 4096 Jul 12 09:59 debian
drwxrwxr-x 8 barak barak 4096 Jul 12 09:59 .git
-rw-rw-r-- 1 barak barak   12 Jul 12 09:59 .gitignore
-rw-rw-r-- 1 barak barak  998 Jul 12 09:59 Makefile
-rw-rw-r-- 1 barak barak 2511 Jul 12 09:59 README

~/tmp/auto6to4 $ ls -l .git
total 44
drwxrwxr-x 2 barak barak 4096 Jul 12 09:59 branches
-rw-rw-r-- 1 barak barak  253 Jul 12 09:59 config
-rw-rw-r-- 1 barak barak   73 Jul 12 09:59 description
-rw-rw-r-- 1 barak barak   23 Jul 12 09:59 HEAD
drwxrwxr-x 2 barak barak 4096 Jul 12 09:59 hooks
-rw-rw-r-- 1 barak barak 1336 Jul 12 09:59 index
drwxrwxr-x 2 barak barak 4096 Jul 12 09:59 info
drwxrwxr-x 3 barak barak 4096 Jul 12 09:59 logs
drwxrwxr-x 4 barak barak 4096 Jul 12 09:59 objects
-rw-rw-r-- 1 barak barak  566 Jul 12 09:59 packed-refs
drwxrwxr-x 5 barak barak 4096 Jul 12 09:59 refs

~/tmp/auto6to4 $ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = /home/barak/tmp/foo/auto6to4
[branch "master"]
        remote = origin
        merge = refs/heads/master

~/tmp/auto6to4 $ pristine-tar commit ../foo/auto6to4_1.20.1.orig.tar.gz 
upstream/1.20.1

~/tmp/auto6to4 $ git push origin pristine-tar



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to