Message ID | a52d0e59ecd5777f2a1d242a37c6bb6aaafb1ed2.1597926783.git.congdanhqx@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | diff: index-line: respect --abbrev in object's name | expand |
Đoàn Trần Công Danh <congdanhqx@gmail.com> writes: > From: "brian m. carlson" <sandals@crustytoothpaste.net> > > 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 not-exist objects, in consequence, we could't catch "for missing objects" would probably the best, even though "non-existing objects" would also work. > possible future bugs where object names is all-zeros including but s/is/are/ > not limiting to: "not limited to", I think. > * show intend-to-add entry > * deleted entry > * diff between index and working tree with new file > > In addition, in the incoming change, we would like to test for s/incoming/upcoming/? > diff with 10 characters index, which is also not covered by current "test for customizing the length of abbreviated blob object names on the index line"? s/covered/supported/ > diff-processor logic. > > Let's fix the bug for all-zero object names and extend object names' > abbrev to 16 while we're at it. "and support abbreviation of object names up to 16 bytes"? Also while we are at it, we fixed the post-processing not to touch the file modes, which were mistakenly munged in the older code as if they were object names abbreviated to 7 hexdigits. > diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh > index 5f97dd6d65..f6bdfc13fd 100755 > --- a/t/t4013-diff-various.sh > +++ b/t/t4013-diff-various.sh > @@ -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')
On 2020-08-20 12:49:05-0700, Junio C Hamano <gitster@pobox.com> wrote: > > diff-processor logic. > > > > Let's fix the bug for all-zero object names and extend object names' > > abbrev to 16 while we're at it. > > "and support abbreviation of object names up to 16 bytes"? > > Also while we are at it, we fixed the post-processing not to touch > the file modes, which were mistakenly munged in the older code as if > they were object names abbreviated to 7 hexdigits. I've integrated your suggestion into newest series. I think you meant 6 hex-digits here, and I took the liberty to change to 7 digits. Thanks,
Đoàn Trần Công Danh <congdanhqx@gmail.com> writes: > On 2020-08-20 12:49:05-0700, Junio C Hamano <gitster@pobox.com> wrote: >> > diff-processor logic. >> > >> > Let's fix the bug for all-zero object names and extend object names' >> > abbrev to 16 while we're at it. >> >> "and support abbreviation of object names up to 16 bytes"? >> >> Also while we are at it, we fixed the post-processing not to touch >> the file modes, which were mistakenly munged in the older code as if >> they were object names abbreviated to 7 hexdigits. > > I've integrated your suggestion into newest series. > I think you meant 6 hex-digits here, and I took the liberty to change > to 7 digits. Thanks, yeah, 100644 has 6 digits but I somehow couldn't count ;-)
diff with 10 characters index, which is also not covered by current diff-processor logic. Let's fix the bug for all-zero object names and extend object names' abbrev to 16 while we're at it. 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> --- t/t4013-diff-various.sh | 60 ++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh index 5f97dd6d65..f6bdfc13fd 100755 --- a/t/t4013-diff-various.sh +++ b/t/t4013-diff-various.sh @@ -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')
From: "brian m. carlson" <sandals@crustytoothpaste.net> 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 not-exist objects, in consequence, we could't catch possible future bugs where object names is all-zeros including but not limiting to: * show intend-to-add entry * deleted entry * diff between index and working tree with new file In addition, in the incoming change, we would like to test for