[BUG] Git 2.39.0+ Git.pm ignores Directory=> argument for bare repos

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Recent git versions (2.39.0 through 2.41.0) Git.pm seems to forget its
Directory argument for bare repos. Initial creation of a
Git->repository object will succeed, but subsequent $repo->command()
fails unless the repo is in pwd or is set in the GIT_DIR environment
argument.

  patsy@ultron ~/tmp/repo-test $ git init --bare test1.git
  Initialized empty Git repository in /home/patsy/tmp/repo-test/test1.git/

  # success with 2.38.4
  patsy@ultron ~/tmp/repo-test $ git --version
  git version 2.38.4
  patsy@ultron ~/tmp/repo-test $ perl -MGit -e 'my $repo = Git->repository(Directory=>"/home/patsy/tmp/repo-test/test1.git/")||die "git open failed: $!\n"; $repo->command("rev-list", "--all", "-1"); print "rev-list succeeded\n"'
  rev-list succeeded

  # fail with 2.41.0
  patsy@ultron ~/tmp/repo-test $ git --version
  git version 2.41.0
  patsy@ultron ~/tmp/repo-test $ perl -MGit -e 'my $repo =
  Git->repository(Directory=>"/home/patsy/tmp/repo-test/test1.git/")||die "git open failed: $!\n"; $repo->command("rev-list", "--all", "-1"); print "rev-list succeeded\n"'
  fatal: not a git repository: '/home/patsy/tmp/repo-test'
  rev-list --all -1: command returned error: 128

  # success with 2.41.0 after cd
  patsy@ultron ~/tmp/repo-test $ cd test1.git/
  patsy@ultron ~/tmp/repo-test/test1.git $ perl -MGit -e 'my $repo = Git->repository(Directory=>"/home/patsy/tmp/repo-test/test1.git/")||die "git open failed: $!\n"; $repo->command("rev-list", "--all", "-1"); print "rev-list succeeded\n"'
  rev-list succeeded

  # success with 2.41.0 with GIT_DIR= set
  patsy@ultron ~/tmp/repo-test $
  GIT_DIR=/home/patsy/tmp/repo-test/test1.git/ perl -MGit -e 'my $repo = Git->repository(Directory=>"/home/patsy/tmp/repo-test/test1.git/")||die "git open failed: $!\n"; $repo->command("rev-list", "--all", "-1"); print "rev-list succeeded\n"'
  rev-list succeeded

It seems to be only bare repos that are a problem:

  # success with 2.41.0 for a non-bare repo
  patsy@ultron ~/tmp/repo-test $ git --version
  git version 2.41.0
  patsy@ultron ~/tmp/repo-test $ git init test2
  Initialized empty Git repository in /home/patsy/tmp/repo-test/test2/.git/
  patsy@ultron ~/tmp/repo-test $ perl -MGit -e 'my $repo = Git->repository(Directory=>"/home/patsy/tmp/repo-test/test2")||die "git open failed: $!\n"; $repo->command("rev-list", "--all", "-1"); print "rev-list succeeded\n"'
  rev-list succeeded

When stracing both, I can see that Git.pm does an initial execve of
git rev-parse --is-bare-repository --git-dir, and it *does* cd prior to
that. But running the specified command is done in a new child which
does not chdir first. For non-bare repos, the child executing the
command does chdir.

Thanks,

-- 

Hank Leininger <hlein@xxxxxxxxxxxxx>
9606 3BF9 B593 4CBC E31A  A384 6200 F6E3 781E 3DD7

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux