]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t: decrease nesting in test_oid_to_path
authorJonathan Nieder <jrnieder@gmail.com>
Thu, 8 Aug 2019 06:56:14 +0000 (23:56 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 8 Aug 2019 17:22:52 +0000 (10:22 -0700)
t1410.3 ("corrupt and checks") fails when run using dash versions
before 0.5.8, with a cryptic message:

mv: cannot stat '.git/objects//e84adb2704cbd49549e52169b4043871e13432': No such file or directory

The function generating that path:

test_oid_to_path () {
echo "${1%${1#??}}/${1#??}"
}

which is supposed to produce a result like

12/3456789....

But a dash bug[*] causes it to instead expand to

/3456789...

The stream of symbols that makes up this function is hard for humans
to follow, too.  The complexity mostly comes from the repeated use of
the expression ${1#??} for the basename of the loose object.  Use a
variable instead --- nowadays, the dialect of shell used by Git
permits local variables, so this is cheap.

An alternative way to work around [*] is to remove the double-quotes
around test_oid_to_path's return value.  That makes the expression
easier for dash to read, but harder for humans.  Let's prefer the
rephrasing that's helpful for humans, too.

Noticed by building on Ubuntu trusty, which uses dash 0.5.7.

[*] Fixed by v0.5.8~13 ("[EXPAND] Propagate EXP_QPAT in subevalvar, 2013-08-23).

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/test-lib-functions.sh

index 786049166035f46772710a15e0c3397732c0525f..de58e8b502ac60c4ec9e79dbed12b050c45988fb 100644 (file)
@@ -1337,7 +1337,8 @@ test_oid () {
 # Insert a slash into an object ID so it can be used to reference a location
 # under ".git/objects".  For example, "deadbeef..." becomes "de/adbeef..".
 test_oid_to_path () {
-       echo "${1%${1#??}}/${1#??}"
+       local basename=${1#??}
+       echo "${1%$basename}/$basename"
 }
 
 # Choose a port number based on the test script's number and store it in