Re: [PATCH 1/2] Git.pm: fix bare repository search with Directory option
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Sep 13, 2024, 06:05 UTC
- Message-ID
- <ZuPWIzzYda5aVjMa@pks.im>
- In-Reply-To
- <20240912223604.GA650605@coredump.intra.peff.net>
On Thu, Sep 12, 2024 at 06:36:04PM -0400, Jeff King wrote:
Show 29 quoted lines
> diff --git a/perl/Git.pm b/perl/Git.pm
> index aebfe0c6e0..cf1ef0b32a 100644
> --- a/perl/Git.pm
> +++ b/perl/Git.pm
> @@ -197,11 +197,11 @@ sub repository {
> my ($bare, $dir) = split /\n/, $out, 2;
>
> require Cwd;
> - if ($bare ne 'true') {
> - require File::Spec;
> - File::Spec->file_name_is_absolute($dir) or $dir = $opts{Directory} . '/' . $dir;
> - $opts{Repository} = Cwd::abs_path($dir);
> + require File::Spec;
> + File::Spec->file_name_is_absolute($dir) or $dir = $opts{Directory} . '/' . $dir;
> + $opts{Repository} = Cwd::abs_path($dir);
>
> + if ($bare ne 'true') {
> # If --git-dir went ok, this shouldn't die either.
> my $prefix = $search->command_oneline('rev-parse', '--show-prefix');
> $dir = Cwd::abs_path($opts{Directory}) . '/';
> @@ -214,8 +214,6 @@ sub repository {
> $opts{WorkingCopy} = $dir;
> $opts{WorkingSubdir} = $prefix;
>
> - } else {
> - $opts{Repository} = Cwd::abs_path($dir);
> }
>
> delete $opts{Directory};Makes sense. We already knew that the $dir was relative, but only remembered to handle this in case the repository was non-bare. Now both cases use the same code to translate the relative path to an absolute one.
Show 14 quoted lines
> diff --git a/t/t9700-perl-git.sh b/t/t9700-perl-git.sh > index ccc8212d73..4431697122 100755 > --- a/t/t9700-perl-git.sh > +++ b/t/t9700-perl-git.sh > @@ -45,7 +45,8 @@ test_expect_success 'set up test repository' ' > ' > > test_expect_success 'set up bare repository' ' > - git init --bare bare.git > + git init --bare bare.git && > + git -C bare.git --work-tree=. commit --allow-empty -m "bare commit" > ' > > test_expect_success 'use t9700/test.pl to test Git.pm' '
I didn't even know that this hack was possible. I guess the alternative would be to use git-commit-tree(1) with the empty tree ID, but that'd also require us to update branches manually via git-update-ref(1). So... a bit gross, but hey, if it works...
Patrick