Merge branch 'fl/git-pm'

* fl/git-pm:
  Git.pm: Always set Repository to absolute path if autodetecting
  Git.pm: Set GIT_WORK_TREE if we set GIT_DIR
maint
Junio C Hamano 2009-05-23 01:38:28 -07:00
commit 9d764f9538
3 changed files with 22 additions and 9 deletions

View File

@ -185,7 +185,7 @@ sub repository {


if ($dir) { if ($dir) {
$dir =~ m#^/# or $dir = $opts{Directory} . '/' . $dir; $dir =~ m#^/# or $dir = $opts{Directory} . '/' . $dir;
$opts{Repository} = $dir; $opts{Repository} = abs_path($dir);


# If --git-dir went ok, this shouldn't die either. # If --git-dir went ok, this shouldn't die either.
my $prefix = $search->command_oneline('rev-parse', '--show-prefix'); my $prefix = $search->command_oneline('rev-parse', '--show-prefix');
@ -1280,6 +1280,8 @@ sub _cmd_exec {
my ($self, @args) = @_; my ($self, @args) = @_;
if ($self) { if ($self) {
$self->repo_path() and $ENV{'GIT_DIR'} = $self->repo_path(); $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_path() and chdir($self->wc_path());
$self->wc_subdir() and chdir($self->wc_subdir()); $self->wc_subdir() and chdir($self->wc_subdir());
} }

View File

@ -29,6 +29,10 @@ test_expect_success \
git add . && git add . &&
git commit -m "first commit" && 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 && echo "changed file 1" > file1 &&
git commit -a -m "second commit" && git commit -a -m "second commit" &&



View File

@ -86,15 +86,22 @@ close TEMPFILE;
unlink $tmpfile; unlink $tmpfile;


# paths # paths
is($r->repo_path, "./.git", "repo_path"); is($r->repo_path, $abs_repo_dir . "/.git", "repo_path");
is($r->wc_path, $abs_repo_dir . "/", "wc_path"); is($r->wc_path, $abs_repo_dir . "/", "wc_path");
is($r->wc_subdir, "", "wc_subdir initial"); is($r->wc_subdir, "", "wc_subdir initial");
$r->wc_chdir("directory1"); $r->wc_chdir("directory1");
is($r->wc_subdir, "directory1", "wc_subdir after wc_chdir"); is($r->wc_subdir, "directory1", "wc_subdir after wc_chdir");
TODO: { is($r->config("test.string"), "value", "config after wc_chdir");
local $TODO = "commands do not work after wc_chdir";
# Failure output is active even in non-verbose mode and thus # Object generation in sub directory
# annoying. Hence we skip these tests as long as they fail. chdir("directory2");
todo_skip 'config after wc_chdir', 1; my $r2 = Git->repository();
is($r->config("color.string"), "value", "config after wc_chdir"); 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');