This is part 2 in the series to make tests hash independent. This series introduces an SHA1 prerequisite which checks if the hash in use is SHA-1, and can be used to skip the test if it is not. Additionally, because NewHash will be 256-bit, I introduced aliases for the test constants $_x40 and $_z40 which will be less confusing when the hash isn't 40 hex characters long. I opted to leave the old names in place for the moment to prevent any potential conflicts with other series and will clean up any stragglers later. To address any concerns that might be present, I do plan to retrofit tests marked with the SHA1 prerequisite and ensure that they are passing or are not applicable (e.g. for pack formats supporting only SHA-1). I agree with concerns that shipping a NewHash-capable Git without a complete, functional testsuite would be a bad idea. Changes from v1: * Amend commit message to indicate that we *will* be updating tests annotated with the SHA1 prerequisite to work with NewHash. * Rename FULL_HEX to OID_REGEX. * Regenerate patch for OID_REGEX. * Update variable name from "link_oid" to "slink_id" for consistency while still preserving alignment. * Restore blank line between tests. tbdiff output below. brian m. carlson (28): t/test-lib: add an SHA1 prerequisite t/test-lib: introduce ZERO_OID t: switch $_z40 to $ZERO_OID t/test-lib: introduce OID_REGEX t: switch $_x40 to $OID_REGEX t0000: annotate with SHA1 prerequisite t1007: annotate with SHA1 prerequisite t1512: skip test if not using SHA-1 t4044: skip test if not using SHA-1 t: skip pack tests if not using SHA-1 t2203: abstract away SHA-1-specific constants t3103: abstract away SHA-1-specific constants t3702: abstract away SHA-1-specific constants t3905: abstract away SHA-1-specific constants t4007: abstract away SHA-1-specific constants t4008: abstract away SHA-1-specific constants t4014: abstract away SHA-1-specific constants t4020: abstract away SHA-1-specific constants t4022: abstract away SHA-1-specific constants t4029: fix test indentation t4029: abstract away SHA-1-specific constants t4030: abstract away SHA-1-specific constants t/lib-diff-alternative: abstract away SHA-1-specific constants t4205: sort log output in a hash-independent way t4042: abstract away SHA-1-specific constants t4045: abstract away SHA-1-specific constants t4208: abstract away SHA-1-specific constants t5300: abstract away SHA-1-specific constants t/diff-lib.sh | 4 +- t/lib-diff-alternative.sh | 12 ++++-- t/t0000-basic.sh | 24 ++++++------ t/t0090-cache-tree.sh | 2 +- t/t1000-read-tree-m-3way.sh | 2 +- t/t1001-read-tree-m-2way.sh | 2 +- t/t1002-read-tree-m-u-2way.sh | 2 +- t/t1006-cat-file.sh | 8 ++-- t/t1007-hash-object.sh | 16 ++++---- t/t1012-read-tree-df.sh | 2 +- t/t1400-update-ref.sh | 2 +- t/t1407-worktree-ref-store.sh | 8 ++-- t/t1450-fsck.sh | 4 +- t/t1501-work-tree.sh | 6 +-- t/t1512-rev-parse-disambiguation.sh | 6 +++ t/t1601-index-bogus.sh | 2 +- t/t1700-split-index.sh | 2 +- t/t2011-checkout-invalid-head.sh | 2 +- t/t2025-worktree-add.sh | 8 ++-- t/t2027-worktree-list.sh | 2 +- t/t2107-update-index-basic.sh | 4 +- t/t2201-add-update-typechange.sh | 16 ++++---- t/t2203-add-intent.sh | 14 +++---- t/t3100-ls-tree-restrict.sh | 2 +- t/t3101-ls-tree-dirname.sh | 2 +- t/t3103-ls-tree-misc.sh | 3 +- t/t3200-branch.sh | 4 +- t/t3510-cherry-pick-sequence.sh | 8 ++-- t/t3702-add-edit.sh | 7 ++-- t/t3905-stash-include-untracked.sh | 11 ++++-- t/t4002-diff-basic.sh | 2 +- t/t4006-diff-mode.sh | 2 +- t/t4007-rename-3.sh | 17 +++++---- t/t4008-diff-break-rewrite.sh | 59 ++++++++++++++++------------- t/t4014-format-patch.sh | 11 +++--- t/t4020-diff-external.sh | 18 +++++---- t/t4022-diff-rewrite.sh | 5 ++- t/t4027-diff-submodule.sh | 6 +-- t/t4029-diff-trailing-space.sh | 38 ++++++++++--------- t/t4030-diff-textconv.sh | 5 ++- t/t4042-diff-textconv-caching.sh | 16 +++++--- t/t4044-diff-index-unique-abbrev.sh | 6 +++ t/t4045-diff-relative.sh | 6 ++- t/t4046-diff-unmerged.sh | 14 +++---- t/t4054-diff-bogus-tree.sh | 12 +++--- t/t4058-diff-duplicates.sh | 12 +++--- t/t4150-am.sh | 4 +- t/t4200-rerere.sh | 2 +- t/t4201-shortlog.sh | 2 +- t/t4205-log-pretty-formats.sh | 8 ++-- t/t4208-log-magic-pathspec.sh | 3 +- t/t5150-request-pull.sh | 2 +- t/t5300-pack-object.sh | 8 ++-- t/t5308-pack-detect-duplicates.sh | 6 +++ t/t5309-pack-delta-cycles.sh | 6 +++ t/t5516-fetch-push.sh | 22 +++++------ t/t5527-fetch-odd-refs.sh | 2 +- t/t5571-pre-push-hook.sh | 8 ++-- t/t6006-rev-list-format.sh | 4 +- t/t6012-rev-list-simplify.sh | 2 +- t/t6111-rev-list-treesame.sh | 2 +- t/t6120-describe.sh | 2 +- t/t6300-for-each-ref.sh | 2 +- t/t6301-for-each-ref-errors.sh | 2 +- t/t7009-filter-branch-null-sha1.sh | 2 +- t/t7011-skip-worktree-reading.sh | 2 +- t/t7064-wtstatus-pv2.sh | 58 ++++++++++++++-------------- t/t7506-status-submodule.sh | 2 +- t/t9010-svn-fe.sh | 14 +++---- t/t9300-fast-import.sh | 6 +-- t/test-lib.sh | 11 +++++- 71 files changed, 331 insertions(+), 267 deletions(-) tbdiff output: 1: 03ad090b53 ! 1: 1a2e23b4f8 t/test-lib: add an SHA1 prerequisite @@ -12,7 +12,7 @@ these cases. These tests, too, will fail with a different hash. Add an SHA1 prerequisite to annotate both of these types of tests and - disable them when we're using a different hash. In the future, we can + disable them when we're using a different hash. In the future, we will create versions of these tests which handle both SHA-1 and NewHash. Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> 2: 6b39476f58 = 2: 809ac7d7c3 t/test-lib: introduce ZERO_OID 3: 45ac938b66 = 3: 1394616579 t: switch $_z40 to $ZERO_OID 4: a8677dbf35 ! 4: adbbf8af80 t/test-lib: introduce OID_REGEX @@ -1,13 +1,13 @@ Author: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> - t/test-lib: introduce FULL_HEX + t/test-lib: introduce OID_REGEX Currently we have a variable, $_x40, which contains a regex that matches a full 40-character hex constant. However, with NewHash, we'll have object IDs that are longer than 40 characters. In such a case, $_x40 - will be a confusing name. Create a $FULL_HEX variable which will always - reflect a regex matching the appropriate object ID, regardless of the - length of the current hash. + will be a confusing name. Create a $OID_REGEX variable which will + always reflect a regex matching the appropriate object ID, regardless of + the length of the current hash. Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> @@ -18,7 +18,7 @@ # Zero SHA-1 _z40=0000000000000000000000000000000000000000 -+FULL_HEX="$_x40" ++OID_REGEX="$_x40" ZERO_OID=$_z40 EMPTY_TREE=4b825dc642cb6eb9a060e54bf8d69288fbee4904 EMPTY_BLOB=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 @@ -27,7 +27,7 @@ u200c=$(printf '\342\200\214') -export _x05 _x35 _x40 _z40 LF u200c EMPTY_TREE EMPTY_BLOB ZERO_OID -+export _x05 _x35 _x40 _z40 LF u200c EMPTY_TREE EMPTY_BLOB ZERO_OID FULL_HEX ++export _x05 _x35 _x40 _z40 LF u200c EMPTY_TREE EMPTY_BLOB ZERO_OID OID_REGEX # Each test should start with something like this, after copyright notices: # 5: e9e9c1fa49 ! 5: 77877cd04e t: switch $_x40 to $OID_REGEX @@ -1,12 +1,12 @@ Author: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> - t: switch $_x40 to $FULL_HEX + t: switch $_x40 to $OID_REGEX - Switch all uses of $_x40 to $FULL_HEX so that they work correctly with + Switch all uses of $_x40 to $OID_REGEX so that they work correctly with larger hashes. This commit was created by using the following sed command to modify all files in the t directory except t/test-lib.sh: - sed -i 's/\$_x40/$FULL_HEX/g' + sed -i 's/\$_x40/$OID_REGEX/g' Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> @@ -17,7 +17,7 @@ : -sanitize_diff_raw='/^:/s/ '"\($_x40\)"' '"\($_x40\)"' \([A-Z]\)[0-9]* / \1 \2 \3# /' -+sanitize_diff_raw='/^:/s/ '"\($FULL_HEX\)"' '"\($FULL_HEX\)"' \([A-Z]\)[0-9]* / \1 \2 \3# /' ++sanitize_diff_raw='/^:/s/ '"\($OID_REGEX\)"' '"\($OID_REGEX\)"' \([A-Z]\)[0-9]* / \1 \2 \3# /' compare_diff_raw () { # When heuristics are improved, the score numbers would change. # Ignore them while comparing. @@ -26,7 +26,7 @@ } -sanitize_diff_raw_z='/^:/s/ '"$_x40"' '"$_x40"' \([A-Z]\)[0-9]*$/ X X \1#/' -+sanitize_diff_raw_z='/^:/s/ '"$FULL_HEX"' '"$FULL_HEX"' \([A-Z]\)[0-9]*$/ X X \1#/' ++sanitize_diff_raw_z='/^:/s/ '"$OID_REGEX"' '"$OID_REGEX"' \([A-Z]\)[0-9]*$/ X X \1#/' compare_diff_raw_z () { # When heuristics are improved, the score numbers would change. # Ignore them while comparing. @@ -39,7 +39,7 @@ cmp_cache_tree () { test-tool dump-cache-tree | sed -e '/#(ref)/d' >actual && - sed "s/$_x40/SHA/" <actual >filtered && -+ sed "s/$FULL_HEX/SHA/" <actual >filtered && ++ sed "s/$OID_REGEX/SHA/" <actual >filtered && test_cmp "$1" filtered } @@ -52,7 +52,7 @@ check_result () { - git ls-files --stage | sed -e 's/ '"$_x40"' / X /' >current && -+ git ls-files --stage | sed -e 's/ '"$FULL_HEX"' / X /' >current && ++ git ls-files --stage | sed -e 's/ '"$OID_REGEX"' / X /' >current && test_cmp expected current } @@ -65,7 +65,7 @@ sed -n >current \ -e '/^--- /d; /^+++ /d; /^@@ /d;' \ - -e 's/^\([-+][0-7][0-7][0-7][0-7][0-7][0-7]\) '"$_x40"' /\1 X /p' \ -+ -e 's/^\([-+][0-7][0-7][0-7][0-7][0-7][0-7]\) '"$FULL_HEX"' /\1 X /p' \ ++ -e 's/^\([-+][0-7][0-7][0-7][0-7][0-7][0-7]\) '"$OID_REGEX"' /\1 X /p' \ "$1" test_cmp expected current } @@ -78,7 +78,7 @@ -e '2{/^index /d;}' \ -e '/^--- /d; /^+++ /d; /^@@ /d;' \ - -e 's/^\(.[0-7][0-7][0-7][0-7][0-7][0-7]\) '"$_x40"' /\1 X /' "$1" -+ -e 's/^\(.[0-7][0-7][0-7][0-7][0-7][0-7]\) '"$FULL_HEX"' /\1 X /' "$1" ++ -e 's/^\(.[0-7][0-7][0-7][0-7][0-7][0-7]\) '"$OID_REGEX"' /\1 X /' "$1" test_cmp expected current } @@ -91,7 +91,7 @@ checkindex () { git ls-files -s | - sed "s|^[0-7][0-7]* $_x40 \([0-3]\) |\1 |" >current && -+ sed "s|^[0-7][0-7]* $FULL_HEX \([0-3]\) |\1 |" >current && ++ sed "s|^[0-7][0-7]* $OID_REGEX \([0-3]\) |\1 |" >current && cat >expect && test_cmp expect current } @@ -104,7 +104,7 @@ test_output () { - sed -e "s/ $_x40 / X /" <current >check -+ sed -e "s/ $FULL_HEX / X /" <current >check ++ sed -e "s/ $OID_REGEX / X /" <current >check test_cmp expected check } @@ -117,7 +117,7 @@ test_output () { - sed -e "s/ $_x40 / X /" <current >check && -+ sed -e "s/ $FULL_HEX / X /" <current >check && ++ sed -e "s/ $OID_REGEX / X /" <current >check && test_cmp expected check } @@ -130,16 +130,16 @@ git rev-list HEAD | git diff-tree --root --stdin | - sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" - } >actual && - test_cmp expect actual - ' -@@ - { - git rev-list HEAD | - git diff-tree --root --stdin | -- sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" + } >actual && + test_cmp expect actual + ' +@@ + { + git rev-list HEAD | + git diff-tree --root --stdin | +- sed "s/$_x40/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" } >actual && cat >expect <<-\EOF && OBJID @@ -148,7 +148,7 @@ git rev-list HEAD | git diff-tree --root --stdin | - sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" } >actual.log && test_cmp expect foo && test_cmp expect.log actual.log @@ -157,7 +157,7 @@ git rev-list HEAD | git diff-tree --root --stdin | - sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" } >actual && cat >expect <<-\EOF && OBJID @@ -170,7 +170,7 @@ # filesystem. sed <"$2" >.test-tmp \ - -e '/^:000000 /d;s/'$_x40'\( [MCRNDU][0-9]*\) /'$ZERO_OID'\1 /' && -+ -e '/^:000000 /d;s/'$FULL_HEX'\( [MCRNDU][0-9]*\) /'$ZERO_OID'\1 /' && ++ -e '/^:000000 /d;s/'$OID_REGEX'\( [MCRNDU][0-9]*\) /'$ZERO_OID'\1 /' && test_cmp "$1" .test-tmp } @@ -183,7 +183,7 @@ . ./test-lib.sh -sed_script='s/\(:100644 100755\) \('"$_x40"'\) \2 /\1 X X /' -+sed_script='s/\(:100644 100755\) \('"$FULL_HEX"'\) \2 /\1 X X /' ++sed_script='s/\(:100644 100755\) \('"$OID_REGEX"'\) \2 /\1 X X /' test_expect_success 'setup' ' echo frotz >rezrov && @@ -196,7 +196,7 @@ git format-patch --stdout v2..v1 >patch2 && grep "^From " patch2 >from && - grep "^From $_x40 Mon Sep 17 00:00:00 2001$" patch2 >filtered && -+ grep "^From $FULL_HEX Mon Sep 17 00:00:00 2001$" patch2 >filtered && ++ grep "^From $OID_REGEX Mon Sep 17 00:00:00 2001$" patch2 >filtered && test_cmp from filtered ' @@ -209,7 +209,7 @@ file=$1 && sed " - s/$_x40/OBJECT_NAME/g -+ s/$FULL_HEX/OBJECT_NAME/g ++ s/$OID_REGEX/OBJECT_NAME/g s/$_x35/OBJID/g s/^ \{6\}[CTa].*/ SUBJECT/g s/^ \{8\}[^ ].*/ CONTINUATION/g @@ -222,7 +222,7 @@ #!/bin/sed -nf s/$downstream_url_for_sed/URL/g - s/$_x40/OBJECT_NAME/g -+ s/$FULL_HEX/OBJECT_NAME/g ++ s/$OID_REGEX/OBJECT_NAME/g s/A U Thor/AUTHOR/g s/[-0-9]\{10\} [:0-9]\{8\} [-+][0-9]\{4\}/DATE/g s/ [^ ].*/ SUBJECT/g @@ -236,8 +236,8 @@ git log -1 --abbrev=5 --format="%H %H %H" HEAD >actual3 && - sed -e "s/$_x40/LONG/g" -e "s/$_x05/SHORT/g" <actual2 >fuzzy2 && - sed -e "s/$_x40/LONG/g" -e "s/$_x05/SHORT/g" <actual3 >fuzzy3 && -+ sed -e "s/$FULL_HEX/LONG/g" -e "s/$_x05/SHORT/g" <actual2 >fuzzy2 && -+ sed -e "s/$FULL_HEX/LONG/g" -e "s/$_x05/SHORT/g" <actual3 >fuzzy3 && ++ sed -e "s/$OID_REGEX/LONG/g" -e "s/$_x05/SHORT/g" <actual2 >fuzzy2 && ++ sed -e "s/$OID_REGEX/LONG/g" -e "s/$_x05/SHORT/g" <actual3 >fuzzy3 && test_cmp expect2 fuzzy2 && test_cmp expect3 fuzzy3 && ! test_cmp actual1 actual2 @@ -250,7 +250,7 @@ unnote () { - git name-rev --tags --stdin | sed -e "s|$_x40 (tags/\([^)]*\)) |\1 |g" -+ git name-rev --tags --stdin | sed -e "s|$FULL_HEX (tags/\([^)]*\)) |\1 |g" ++ git name-rev --tags --stdin | sed -e "s|$OID_REGEX (tags/\([^)]*\)) |\1 |g" } test_expect_success setup ' @@ -263,7 +263,7 @@ unnote () { - git name-rev --tags --stdin | sed -e "s|$_x40 (tags/\([^)]*\))\([ ]\)|\1\2|g" -+ git name-rev --tags --stdin | sed -e "s|$FULL_HEX (tags/\([^)]*\))\([ ]\)|\1\2|g" ++ git name-rev --tags --stdin | sed -e "s|$OID_REGEX (tags/\([^)]*\))\([ ]\)|\1\2|g" } test_expect_success setup ' @@ -276,7 +276,7 @@ sanitize_output () { - sed -e "s/$_x40/HASH/" -e "s/$_x40/HASH/" output >output2 && -+ sed -e "s/$FULL_HEX/HASH/" -e "s/$FULL_HEX/HASH/" output >output2 && ++ sed -e "s/$OID_REGEX/HASH/" -e "s/$OID_REGEX/HASH/" output >output2 && mv output2 output } @@ -289,7 +289,7 @@ git rev-list HEAD | git diff-tree --root --stdin | - sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" } >actual && git show HEAD:greeting >actual.blob && git show HEAD^:greeting >actual.target && @@ -298,7 +298,7 @@ git rev-list HEAD | git diff-tree --root --stdin | - sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" } >actual && { git cat-file commit HEAD | nul_to_q && @@ -307,7 +307,7 @@ git rev-list HEAD | git diff-tree --root --stdin | - sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" } >actual && git show HEAD:greeting >actual.blob && git show HEAD^:greeting >actual.target && @@ -316,7 +316,7 @@ git rev-list HEAD | git diff-tree --stdin | - sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" } >actual && test_cmp expect actual ' @@ -325,25 +325,25 @@ git rev-list HEAD | git diff-tree --root --always --stdin | - sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" - } >actual && - test_cmp expect actual - ' -@@ - { - git rev-list HEAD | - git diff-tree --root --stdin | -- sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" - } >actual && - test_cmp expect actual - ' -@@ - { - git rev-list HEAD | - git diff-tree --root --stdin | -- sed "s/$_x40/OBJID/g" -+ sed "s/$FULL_HEX/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" + } >actual && + test_cmp expect actual + ' +@@ + { + git rev-list HEAD | + git diff-tree --root --stdin | +- sed "s/$_x40/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" + } >actual && + test_cmp expect actual + ' +@@ + { + git rev-list HEAD | + git diff-tree --root --stdin | +- sed "s/$_x40/OBJID/g" ++ sed "s/$OID_REGEX/OBJID/g" } >actual && test_cmp expect actual && git show HEAD:postimage >actual.3 && @@ -356,7 +356,7 @@ git rev-list read-empty | git diff-tree -r --root --stdin | - sed "s/$_x40/OBJNAME/g" >actual && -+ sed "s/$FULL_HEX/OBJNAME/g" >actual && ++ sed "s/$OID_REGEX/OBJNAME/g" >actual && test_cmp expect actual ' @@ -365,7 +365,7 @@ git rev-list N-delete | git diff-tree -r --stdin --root --always | - sed -e "s/$_x40/OBJID/g" >actual && -+ sed -e "s/$FULL_HEX/OBJID/g" >actual && ++ sed -e "s/$OID_REGEX/OBJID/g" >actual && test_cmp expect actual ' @@ -374,7 +374,7 @@ git rev-list done-ends | git diff-tree -r --stdin --root --always | - sed -e "s/$_x40/OBJID/g" >actual && -+ sed -e "s/$FULL_HEX/OBJID/g" >actual && - test_cmp expect actual - ' - ++ sed -e "s/$OID_REGEX/OBJID/g" >actual && + test_cmp expect actual + ' + 6: 266d018808 = 6: 41c01b5fcf t0000: annotate with SHA1 prerequisite 7: 6fea58fcc2 = 7: c175f5d565 t1007: annotate with SHA1 prerequisite 8: 57722629fa = 8: 936a8d90fd t1512: skip test if not using SHA-1 9: e17c66bbb0 = 9: 18a2c50777 t4044: skip test if not using SHA-1 10: 2d2baa9729 = 10: bdb27df589 t: skip pack tests if not using SHA-1 11: 0b50c02784 = 11: d09b454988 t2203: abstract away SHA-1-specific constants 12: 6de266bf25 = 12: 61c93d4d8a t3103: abstract away SHA-1-specific constants 13: a36512bfed = 13: 2fdf7883c2 t3702: abstract away SHA-1-specific constants 14: edc0e12cca ! 14: 9e99a40aa1 t3905: abstract away SHA-1-specific constants @@ -11,10 +11,9 @@ --- a/t/t3905-stash-include-untracked.sh +++ b/t/t3905-stash-include-untracked.sh @@ - git status --porcelain >actual && test_cmp expect actual ' -- + +tracked=$(git rev-parse --short $(echo 1 | git hash-object --stdin)) +untracked=$(git rev-parse --short $(echo untracked | git hash-object --stdin)) cat > expect.diff <<EOF 15: cd84d00f27 = 15: ad45ab6bed t4007: abstract away SHA-1-specific constants 16: 5b49fc4b62 ! 16: 56a69fbe23 t4008: abstract away SHA-1-specific constants @@ -77,7 +77,7 @@ test_expect_success 'make file0 into something completely different' ' rm -f file0 && test_ln_s_add frotz file0 && -+ link_oid=$(printf frotz | git hash-object --stdin) && ++ slink_id=$(printf frotz | git hash-object --stdin) && git update-index file1 ' @@ -87,7 +87,7 @@ - :100644 120000 548142c327a6790ff8821d67c2ee1eff7a656b52 67be421f88824578857624f7b3dc75e99a8a1481 T file0 - :100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 548142c327a6790ff8821d67c2ee1eff7a656b52 M100 file1 + cat >expect <<-EOF && -+ :100644 120000 $blob0_id $link_oid T file0 ++ :100644 120000 $blob0_id $slink_id T file0 + :100644 100644 $blob1_id $blob0_id M100 file1 EOF compare_diff_raw expect current @@ -100,7 +100,7 @@ - :100644 120000 548142c327a6790ff8821d67c2ee1eff7a656b52 67be421f88824578857624f7b3dc75e99a8a1481 T file0 - :100644 100644 548142c327a6790ff8821d67c2ee1eff7a656b52 548142c327a6790ff8821d67c2ee1eff7a656b52 C file0 file1 + cat >expect <<-EOF && -+ :100644 120000 $blob0_id $link_oid T file0 ++ :100644 120000 $blob0_id $slink_id T file0 + :100644 100644 $blob0_id $blob0_id C file0 file1 EOF compare_diff_raw expect current @@ -113,7 +113,7 @@ - :100644 120000 548142c327a6790ff8821d67c2ee1eff7a656b52 67be421f88824578857624f7b3dc75e99a8a1481 T file0 - :100644 100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 548142c327a6790ff8821d67c2ee1eff7a656b52 M file1 + cat >expect <<-EOF && -+ :100644 120000 $blob0_id $link_oid T file0 ++ :100644 120000 $blob0_id $slink_id T file0 + :100644 100644 $blob1_id $blob0_id M file1 EOF compare_diff_raw expect current 17: a723e189cd = 17: 11c545cd51 t4014: abstract away SHA-1-specific constants 18: 970a3016ed = 18: fcca4074e6 t4020: abstract away SHA-1-specific constants 19: 4640ef9170 = 19: ad252e46c4 t4022: abstract away SHA-1-specific constants 20: f1f66b513b = 20: 4046eecebd t4029: fix test indentation 21: 9a8a9b6762 = 21: 56896e45f0 t4029: abstract away SHA-1-specific constants 22: 6573352174 = 22: 27609ec546 t4030: abstract away SHA-1-specific constants 23: e79d9ab24e = 23: 8c782009bf t/lib-diff-alternative: abstract away SHA-1-specific constants 24: d0bab817d4 = 24: 2f0da3e1b8 t4205: sort log output in a hash-independent way 25: 3b2719de86 = 25: 3e913f2526 t4042: abstract away SHA-1-specific constants 26: f3034dd64a = 26: 2261c64650 t4045: abstract away SHA-1-specific constants 27: fbf4568271 = 27: 458006036a t4208: abstract away SHA-1-specific constants 28: a1c8324b74 = 28: 8da8c65428 t5300: abstract away SHA-1-specific constants