]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t5411/common-functions.sh
test: refactor to use "get_abbrev_oid" to get abbrev oid
[thirdparty/git.git] / t / t5411 / common-functions.sh
index 6694858e187a8a1607abbf69100706f56f0cd24b..3c747782c1b7fb9b1d12baeae714ef80b1266df4 100644 (file)
@@ -6,50 +6,44 @@
 # NOTE: Never calling this function from a subshell since variable
 # assignments will disappear when subshell exits.
 create_commits_in () {
-       repo="$1" &&
-       if ! parent=$(git -C "$repo" rev-parse HEAD^{} --)
-       then
-               parent=
-       fi &&
-       T=$(git -C "$repo" write-tree) &&
+       repo="$1" && test -d "$repo" ||
+       error "Repository $repo does not exist."
        shift &&
        while test $# -gt 0
        do
                name=$1 &&
-               test_tick &&
-               if test -z "$parent"
-               then
-                       oid=$(echo $name | git -C "$repo" commit-tree $T)
-               else
-                       oid=$(echo $name | git -C "$repo" commit-tree -p $parent $T)
-               fi &&
-               eval $name=$oid &&
-               parent=$oid &&
-               shift ||
-               return 1
-       done &&
-       git -C "$repo" update-ref refs/heads/main $oid
+               shift &&
+               test_commit -C "$repo" --no-tag "$name" &&
+               eval $name=$(git -C "$repo" rev-parse HEAD)
+       done
+}
+
+get_abbrev_oid () {
+       oid=$1 &&
+       suffix=${oid#???????} &&
+       oid=${oid%$suffix} &&
+       if test -n "$oid"
+       then
+               echo "$oid"
+       else
+               echo "undefined-oid"
+       fi
 }
 
 # Format the output of git-push, git-show-ref and other commands to make a
 # user-friendly and stable text.  We can easily prepare the expect text
-# without having to worry about future changes of the commit ID and spaces
+# without having to worry about changes of the commit ID (full or abbrev.)
 # of the output.  Single quotes are replaced with double quotes, because
 # it is boring to prepare unquoted single quotes in expect text.  We also
 # remove some locale error messages. The emitted human-readable errors are
 # redundant to the more machine-readable output the tests already assert.
 make_user_friendly_and_stable_output () {
        sed \
-               -e "s/  *\$//" \
-               -e "s/  */ /g" \
                -e "s/'/\"/g" \
-               -e "s/  /    /g" \
-               -e "s/$A/<COMMIT-A>/g" \
-               -e "s/$B/<COMMIT-B>/g" \
-               -e "s/$TAG/<TAG-v123>/g" \
+               -e "s/$(get_abbrev_oid $A)[0-9a-f]*/<COMMIT-A>/g" \
+               -e "s/$(get_abbrev_oid $B)[0-9a-f]*/<COMMIT-B>/g" \
+               -e "s/$(get_abbrev_oid $TAG)[0-9a-f]*/<TAG-v123>/g" \
                -e "s/$ZERO_OID/<ZERO-OID>/g" \
-               -e "s/$(echo $A | cut -c1-7)[0-9a-f]*/<OID-A>/g" \
-               -e "s/$(echo $B | cut -c1-7)[0-9a-f]*/<OID-B>/g" \
                -e "s#To $URL_PREFIX/upstream.git#To <URL/of/upstream.git>#" \
                -e "/^error: / d"
 }
@@ -59,6 +53,10 @@ filter_out_user_friendly_and_stable_output () {
                sed -n ${1+"$@"}
 }
 
+format_and_save_expect () {
+       sed -e 's/^> //' -e 's/Z$//' >expect
+}
+
 test_cmp_refs () {
        indir=
        if test "$1" = "-C"