 22e3e0241a
			
		
	
	22e3e0241a
	
	
	
		
			
			chainlint.sed recognizes multi-line quoted strings within subshells:
    echo "abc
        def" >out &&
so it can avoid incorrectly classifying lines internal to the string as
breaking the &&-chain. To identify the first line of a multi-line
string, it checks if the line contains a single quote. However, this is
fragile and can be easily fooled by a line containing multiple strings:
    echo "xyz" "abc
        def" >out &&
Make detection more robust by checking for an odd number of quotes
rather than only a single one.
(Escaped quotes are not handled, but support may be added later.)
The original multi-line string recognizer rather cavalierly threw away
all but the final quote, whereas the new one is careful to retain all
quotes, so the "expected" output of a couple existing chainlint tests is
updated to account for this new behavior.
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			28 lines
		
	
	
		
			389 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			389 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| (
 | |
| 	x="line 1
 | |
| 		line 2
 | |
| 		line 3" &&
 | |
| # LINT: missing "&&" on assignment
 | |
| 	y='line 1
 | |
| 		line2'
 | |
| 	foobar
 | |
| ) &&
 | |
| (
 | |
| # LINT: apostrophe (in a contraction) within string not misinterpreted as
 | |
| # LINT: starting multi-line single-quoted string
 | |
| 	echo "there's nothing to see here" &&
 | |
| 	exit
 | |
| ) &&
 | |
| (
 | |
| 	echo "xyz" "abc
 | |
| 		def
 | |
| 		ghi" &&
 | |
| 	echo 'xyz' 'abc
 | |
| 		def
 | |
| 		ghi' &&
 | |
| 	echo 'xyz' "abc
 | |
| 		def
 | |
| 		ghi" &&
 | |
| 	barfoo
 | |
| )
 |