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]