Skip to content

Commit 1c1f6e0

Browse files
jrngitster
authored andcommitted
t: decrease nesting in test_oid_to_path
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent f6c9b47 commit 1c1f6e0

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

t/test-lib-functions.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1337,7 +1337,8 @@ test_oid () {
13371337
# Insert a slash into an object ID so it can be used to reference a location
13381338
# under ".git/objects". For example, "deadbeef..." becomes "de/adbeef..".
13391339
test_oid_to_path () {
1340-
echo "${1%${1#??}}/${1#??}"
1340+
local basename=${1#??}
1341+
echo "${1%$basename}/$basename"
13411342
}
13421343

13431344
# Choose a port number based on the test script's number and store it in

0 commit comments

Comments
 (0)