t4013: improve diff-post-processor logic
From 72f936b1
(t4013: make test hash independent, 2020-02-07),
we started to adjust metadata of git-diff's output in order to
ignore uninteresting metadata which is dependent of underlying hash
algorithm.
However, we forgot to special case all-zero object names, which is
special for missing objects, in consequence, we could't catch
possible future bugs where object names is all-zeros including but
not limited to:
* show intend-to-add entry
* deleted entry
* diff between index and working tree with new file
We also mistakenly munged file-modes as if they were object names
abbreviated to 6 hexadecimal digits.
In addition, in the upcoming change, we would like to test for
customizing the length of abbreviated blob objects on the index line,
which is not supported by current diff-processor logic.
Let's fix the bug for all-zero object names, and file modes.
While we're at it, support abbreviation of object names up to 16 bytes.
Based-on-patch-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
878e727637
commit
fc7e73d7ef
@ -130,27 +130,45 @@ test_expect_success setup '
|
||||
EOF
|
||||
|
||||
process_diffs () {
|
||||
_x04="[0-9a-f][0-9a-f][0-9a-f][0-9a-f]" &&
|
||||
_x07="$_x05[0-9a-f][0-9a-f]" &&
|
||||
sed -e "s/$OID_REGEX/$ZERO_OID/g" \
|
||||
-e "s/From $_x40 /From $ZERO_OID /" \
|
||||
-e "s/from $_x40)/from $ZERO_OID)/" \
|
||||
-e "s/commit $_x40\$/commit $ZERO_OID/" \
|
||||
-e "s/commit $_x40 (/commit $ZERO_OID (/" \
|
||||
-e "s/$_x40 $_x40 $_x40/$ZERO_OID $ZERO_OID $ZERO_OID/" \
|
||||
-e "s/$_x40 $_x40 /$ZERO_OID $ZERO_OID /" \
|
||||
-e "s/^$_x40 $_x40$/$ZERO_OID $ZERO_OID/" \
|
||||
-e "s/^$_x40 /$ZERO_OID /" \
|
||||
-e "s/^$_x40$/$ZERO_OID/" \
|
||||
-e "s/$_x07\.\.$_x07/fffffff..fffffff/g" \
|
||||
-e "s/$_x07,$_x07\.\.$_x07/fffffff,fffffff..fffffff/g" \
|
||||
-e "s/$_x07 $_x07 $_x07/fffffff fffffff fffffff/g" \
|
||||
-e "s/$_x07 $_x07 /fffffff fffffff /g" \
|
||||
-e "s/Merge: $_x07 $_x07/Merge: fffffff fffffff/g" \
|
||||
-e "s/$_x07\.\.\./fffffff.../g" \
|
||||
-e "s/ $_x04\.\.\./ ffff.../g" \
|
||||
-e "s/ $_x04/ ffff/g" \
|
||||
"$1"
|
||||
perl -e '
|
||||
my $oid_length = length($ARGV[0]);
|
||||
my $x40 = "[0-9a-f]{40}";
|
||||
my $xab = "[0-9a-f]{4,16}";
|
||||
my $orx = "[0-9a-f]" x $oid_length;
|
||||
|
||||
sub munge_oid {
|
||||
my ($oid) = @_;
|
||||
my $x;
|
||||
|
||||
return "" unless length $oid;
|
||||
|
||||
if ($oid =~ /^(100644|100755|120000)$/) {
|
||||
return $oid;
|
||||
}
|
||||
|
||||
if ($oid =~ /^0*$/) {
|
||||
$x = "0";
|
||||
} else {
|
||||
$x = "f";
|
||||
}
|
||||
|
||||
if (length($oid) == 40) {
|
||||
return $x x $oid_length;
|
||||
} else {
|
||||
return $x x length($oid);
|
||||
}
|
||||
}
|
||||
|
||||
while (<STDIN>) {
|
||||
s/($orx)/munge_oid($1)/ge;
|
||||
s/From ($x40)( |\))/"From " . munge_oid($1) . $2/ge;
|
||||
s/commit ($x40)($| \(from )($x40?)/"commit " . munge_oid($1) . $2 . munge_oid($3)/ge;
|
||||
s/\b($x40)( |\.\.|$)/munge_oid($1) . $2/ge;
|
||||
s/^($x40)($| )/munge_oid($1) . $2/e;
|
||||
s/($xab)(\.\.|,| |\.\.\.|$)/munge_oid($1) . $2/ge;
|
||||
print;
|
||||
}
|
||||
' "$ZERO_OID" <"$1"
|
||||
}
|
||||
|
||||
V=$(git version | sed -e 's/^git version //' -e 's/\./\\./g')
|
||||
|
Loading…
Reference in New Issue
Block a user