• J
    t: decrease nesting in test_oid_to_path · 1c1f6e03
    Jonathan Nieder 提交于
    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: NJonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    1c1f6e03
test-lib-functions.sh 32.1 KB