]> git.ipfire.org Git - thirdparty/git.git/commitdiff
perl: make Git::IndexInfo work with SHA-256
authorbrian m. carlson <sandals@crustytoothpaste.net>
Mon, 22 Jun 2020 18:04:13 +0000 (18:04 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 22 Jun 2020 18:21:07 +0000 (11:21 -0700)
Most of the Git modules, git-svn excepted, don't know anything about the
hash algorithm and mostly work.  However, when we're printing an
all-zero object ID in Git::IndexInfo, we need to know the hash length.

Since we don't want to change the API to have that information passed
in, let's query the config to find the hash algorithm and compute the
right value.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Acked-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
perl/Git/IndexInfo.pm

index a43108c985440db24688d7b053b94d428e6dd1bb..2a7b4908f3e637d3e93462799c91cd75a8221354 100644 (file)
@@ -5,13 +5,15 @@ use Git qw/command_input_pipe command_close_pipe/;
 
 sub new {
        my ($class) = @_;
+       my $hash_algo = Git::config('extensions.objectformat') || 'sha1';
        my ($gui, $ctx) = command_input_pipe(qw/update-index -z --index-info/);
-       bless { gui => $gui, ctx => $ctx, nr => 0}, $class;
+       bless { gui => $gui, ctx => $ctx, nr => 0, hash_algo => $hash_algo}, $class;
 }
 
 sub remove {
        my ($self, $path) = @_;
-       if (print { $self->{gui} } '0 ', 0 x 40, "\t", $path, "\0") {
+       my $length = $self->{hash_algo} eq 'sha256' ? 64 : 40;
+       if (print { $self->{gui} } '0 ', 0 x $length, "\t", $path, "\0") {
                return ++$self->{nr};
        }
        undef;