Re: [PATCH v4 1/2] t4013: improve diff-post-processor logic

2 messages, 2 authors, 2020-08-21 · open the first message on its own page

Re: [PATCH v4 1/2] t4013: improve diff-post-processor logic

From: Junio C Hamano <hidden>
Date: 2020-08-20 19:49:18

Đoàn Trần Công Danh  [off-list ref] writes:
From: "brian m. carlson" <redacted>

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.
quoted hunk
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')

Re: [PATCH v4 1/2] t4013: improve diff-post-processor logic

From: Đoàn Trần Công Danh <hidden>
Date: 2020-08-21 12:05:47

On 2020-08-20 12:49:05-0700, Junio C Hamano [off-list ref] wrote:
quoted
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,

-- 
Danh
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help