From: "Gustavo L. de M. Chaves" <gnustavo@xxxxxxxx> Routine _cmd_exec invokes _setup_git_cmd_env inside the child process before invoking an external git command to set up the environment variables GIT_DIR and GIT_WORK_TREE and, also, to chdir to the repository. But _cmd_exec is only used on Unix. On Windows, it's not used and the main code path is in _command_common_pipe, which didn't prepare the environment like _cmd_exec. Without this environment preparation some git commands, such as "git clone", don't work. We can't use _setup_git_cmd_env in this case because we don't use a forking open like _cmd_exec does and don't get a chance to make such preparations on the child process. So, the preparation is done on _command_common_pipe by setting up localized environment variables and by chdir temporarily just before invoking the external command. Signed-off-by: Gustavo L. de M. Chaves <gnustavo@xxxxxxxx> --- perl/Git.pm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/perl/Git.pm b/perl/Git.pm index 658b602..e14b41a 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -1302,6 +1302,19 @@ sub _command_common_pipe { # warn 'ignoring STDERR option - running w/ ActiveState'; $direction eq '-|' or die 'input pipe for ActiveState not implemented'; + + # Set up repo environment + local $ENV{GIT_DIR} = $self->repo_path() if defined $self && $self->repo_path(); + local $ENV{GIT_WORK_TREE} = $self->wc_path() if defined $self && $self->repo_path() && $self->wc_path(); + + my $cwd = cwd; + + if (defined $self) { + chdir $self->repo_path() if $self->repo_path(); + chdir $self->wc_path() if $self->wc_path(); + chdir $self->wc_subdir() if $self->wc_subdir(); + } + # the strange construction with *ACPIPE is just to # explain the tie below that we want to bind to # a handle class, not scalar. It is not known if @@ -1310,6 +1323,7 @@ sub _command_common_pipe { tie (*ACPIPE, 'Git::activestate_pipe', $cmd, @args); $fh = *ACPIPE; + chdir $cwd; } else { my $pid = open($fh, $direction); if (not defined $pid) { -- 1.7.12.464.g83379df.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html