Git.pm: Set GIT_WORK_TREE if we set GIT_DIR
Otherwise git will use the current directory as work tree which will lead to unexpected results if we operate in sub directory of the work tree. Signed-off-by: Frank Lichtenheld <flichtenheld@astaro.com> Acked-by: Petr Baudis <pasky@suse.cz> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f01f1099f4
commit
da159c7759
@ -1280,6 +1280,8 @@ sub _cmd_exec {
|
||||
my ($self, @args) = @_;
|
||||
if ($self) {
|
||||
$self->repo_path() and $ENV{'GIT_DIR'} = $self->repo_path();
|
||||
$self->repo_path() and $self->wc_path()
|
||||
and $ENV{'GIT_WORK_TREE'} = $self->wc_path();
|
||||
$self->wc_path() and chdir($self->wc_path());
|
||||
$self->wc_subdir() and chdir($self->wc_subdir());
|
||||
}
|
||||
|
@ -29,6 +29,10 @@ test_expect_success \
|
||||
git add . &&
|
||||
git commit -m "first commit" &&
|
||||
|
||||
echo "new file in subdir 2" > directory2/file2 &&
|
||||
git add . &&
|
||||
git commit -m "commit in directory2" &&
|
||||
|
||||
echo "changed file 1" > file1 &&
|
||||
git commit -a -m "second commit" &&
|
||||
|
||||
|
@ -98,3 +98,16 @@ TODO: {
|
||||
todo_skip 'config after wc_chdir', 1;
|
||||
is($r->config("color.string"), "value", "config after wc_chdir");
|
||||
}
|
||||
|
||||
# Object generation in sub directory
|
||||
chdir("directory2");
|
||||
my $r2 = Git->repository();
|
||||
is($r2->repo_path, $abs_repo_dir . "/.git", "repo_path (2)");
|
||||
is($r2->wc_path, $abs_repo_dir . "/", "wc_path (2)");
|
||||
is($r2->wc_subdir, "directory2/", "wc_subdir initial (2)");
|
||||
|
||||
# commands in sub directory
|
||||
my $last_commit = $r2->command_oneline(qw(rev-parse --verify HEAD));
|
||||
like($last_commit, qr/^[0-9a-fA-F]{40}$/, 'rev-parse returned hash');
|
||||
my $dir_commit = $r2->command_oneline('log', '-n1', '--pretty=format:%H', '.');
|
||||
isnt($last_commit, $dir_commit, 'log . does not show last commit');
|
||||
|
Loading…
Reference in New Issue
Block a user