Package: git-gui
Version: 1:2.0.0~rc2-1

Hi,

after cloning a repository with submodules and updating the submodules, starting git gui in a subdirectory fails, because git gui interprets the worktree config entry wrongly:

david@zion:~/tmp$ git clone 
ssh://[email protected]/srv/dasz/git/puppet/dasz-configuration.git
Cloning into 'dasz-configuration'...
remote: Counting objects: 4250, done.
remote: Compressing objects: 100% (1228/1228), done.
remote: Total 4250 (delta 3029), reused 4107 (delta 2938)
Receiving objects: 100% (4250/4250), 442.87 KiB | 0 bytes/s, done.
Resolving deltas: 100% (3029/3029), done.
Checking connectivity... done.
david@zion:~/tmp$ cd dasz-configuration/
david@zion:~/tmp/dasz-configuration$ git submodule init
Submodule 'modules/apache' 
(ssh://[email protected]/srv/dasz/git/puppet/puppet-apache.git) registered for 
path 'modules/apache'
[...]
Submodule 'vagrant/veewee' 
(ssh://[email protected]/srv/dasz/git/puppet/veewee.git) registered for path 
'vagrant/veewee'
david@zion:~/tmp/dasz-configuration$ git submodule update
Cloning into 'modules/apache'...
[...]
Checking connectivity... done.
Submodule path 'modules/xinetd': checked out 
'fb2631b969f314df131e4e84ef8602bf484f5625'
Cloning into 'vagrant/veewee'...
remote: Counting objects: 13942, done.
remote: Compressing objects: 100% (4810/4810), done.
remote: Total 13942 (delta 8988), reused 13882 (delta 8928)
Receiving objects: 100% (13942/13942), 4.16 MiB | 1.62 MiB/s, done.
Resolving deltas: 100% (8988/8988), done.
Checking connectivity... done.
Submodule path 'vagrant/veewee': checked out 
'effeb9c8ad128652305f5405e9904a23a6a6e7d6'
david@zion:~/tmp/dasz-configuration$ cd modules/puppet
david@zion:~/tmp/dasz-configuration/modules/puppet$ cat .git
gitdir: ../../.git/modules/modules/puppet
david@zion:~/tmp/dasz-configuration/modules/puppet$ cat 
../../.git/modules/modules/puppet/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        worktree = ../../../../modules/puppet
[remote "origin"]
        url = ssh://[email protected]/srv/dasz/git/puppet/puppet-puppet.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
david@zion:~/tmp/dasz-configuration/modules/puppet$ git gui

fails with "No working directory ../../../../modules/puppet: couldn't change working directory to "../../../../modules/puppet": no such file or directory".

Running strace reveals that git core utils chdir to the actual .git directory before evaluating worktree, while git gui uses the cwd as root for worktree:
david@zion:~/tmp/dasz-configuration/modules/puppet$ strace -f -e file git 
rev-parse HEAD
execve("/usr/bin/git", ["git", "rev-parse", "HEAD"], [/* 40 vars */]) = 0
[...]
getcwd("/home/david/tmp/dasz-configuration/modules/puppet", 4096) = 50
stat(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat(".git", {st_mode=S_IFREG|0644, st_size=42, ...}) = 0
open(".git", O_RDONLY)                  = 3
access("../../.git/modules/modules/puppet/objects", X_OK) = 0
access("../../.git/modules/modules/puppet/refs", X_OK) = 0
lstat("../../.git/modules/modules/puppet/HEAD", {st_mode=S_IFREG|0644, 
st_size=41, ...}) = 0
open("../../.git/modules/modules/puppet/HEAD", O_RDONLY) = 3
stat("../../.git/modules/modules/puppet", {st_mode=S_IFDIR|0755, st_size=4096, 
...}) = 0
getcwd("/home/david/tmp/dasz-configuration/modules/puppet", 1024) = 50
chdir("../../.git/modules/modules/puppet") = 0
getcwd("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet", 4096) 
= 63
lstat("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet", 
{st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
chdir("/home/david/tmp/dasz-configuration/modules/puppet") = 0
access("/etc/gitconfig", R_OK)          = -1 ENOENT (No such file or directory)
access("/home/david/.config/git/config", R_OK) = -1 ENOENT (No such file or 
directory)
access("/home/david/.gitconfig", R_OK)  = 0
open("/home/david/.gitconfig", O_RDONLY) = 3
access("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet/config", 
R_OK) = 0
open("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet/config", 
O_RDONLY) = 3
chdir("/home/david/tmp/dasz-configuration/modules/puppet") = 0
stat("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet", 
{st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
access("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet/objects",
 X_OK) = 0
access("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet/refs", 
X_OK) = 0
lstat("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet/HEAD", 
{st_mode=S_IFREG|0644, st_size=41, ...}) = 0
open("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet/HEAD", 
O_RDONLY) = 3
access("/etc/gitconfig", R_OK)          = -1 ENOENT (No such file or directory)
access("/home/david/.config/git/config", R_OK) = -1 ENOENT (No such file or 
directory)
access("/home/david/.gitconfig", R_OK)  = 0
open("/home/david/.gitconfig", O_RDONLY) = 3
access("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet/config", 
R_OK) = 0
open("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet/config", 
O_RDONLY) = 3
chdir("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet") = 0
chdir("../../../../modules/puppet")     = 0
getcwd("/home/david/tmp/dasz-configuration/modules/puppet", 4096) = 50
chdir("/home/david/tmp/dasz-configuration/modules/puppet") = 0
stat("/home/david/tmp/dasz-configuration/modules/puppet", 
{st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
getcwd("/home/david/tmp/dasz-configuration/modules/puppet", 1024) = 50
chdir("/home/david/tmp/dasz-configuration/modules/puppet") = 0
getcwd("/home/david/tmp/dasz-configuration/modules/puppet", 4096) = 50
lstat("/home/david/tmp/dasz-configuration/modules/puppet", 
{st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
chdir("/home/david/tmp/dasz-configuration/modules/puppet") = 0
stat("/home/david/tmp/dasz-configuration/.git/modules/modules/puppet", 
{st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
access("/etc/gitconfig", R_OK)          = -1 ENOENT (No such file or directory)
[...]


git gui:

[pid 19166] --- SIGCHLD (Child exited) @ 0 (0) ---
[pid 19166] getcwd("/home/david/tmp/dasz-configuration/modules/puppet", 4097) = 
50
[pid 19166] lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
[pid 19166] lstat("/home/david", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
[pid 19166] lstat("/home/david/tmp", {st_mode=S_IFDIR|0755, st_size=4096, ...}) 
= 0
[pid 19166] lstat("/home/david/tmp/dasz-configuration", {st_mode=S_IFDIR|0755, 
st_size=4096, ...}) = 0
[pid 19166] lstat("/home/david/tmp/dasz-configuration/modules", 
{st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
[pid 19166] readlink("/home/david/tmp/dasz-configuration/modules/puppet", 
0x7fff4a741090, 4096) = -1 EINVAL (Invalid argument)
[pid 19166] readlink("/home/david/tmp/dasz-configuration/modules", 
0x7fff4a741090, 4096) = -1 EINVAL (Invalid argument)
[pid 19166] readlink("/home/david/tmp/dasz-configuration", 0x7fff4a741090, 
4096) = -1 EINVAL (Invalid argument)
[pid 19166] readlink("/home/david/tmp", 0x7fff4a741090, 4096) = -1 EINVAL 
(Invalid argument)
[pid 19166] lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
[pid 19166] lstat("/home/david", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
[pid 19166] lstat("/home/david/modules", 0x7fff4a740e70) = -1 ENOENT (No such 
file or directory)
[pid 19166] access("/home", F_OK)       = 0
[pid 19166] access("/home/david", F_OK) = 0
[pid 19166] access("/home/david/modules", F_OK) = -1 ENOENT (No such file or 
directory)
[pid 19166] lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
[pid 19166] lstat("/home/david", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
[pid 19166] chdir("../../../../modules/puppet") = -1 ENOENT (No such file or 
directory)



Starting git gui in the submodule's real .git directory works.



Regards, David


--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to