• Jonathan Nieder's avatar
    remove #!interpreter line from shell libraries · 11d62145
    Jonathan Nieder authored
    In a shell snippet meant to be sourced by other shell scripts, an
    opening #! line does more harm than good.
    The harm:
     - When the shell library is sourced, the interpreter and options from
       the #! line are not used.  Specifying a particular shell can
       confuse the reader into thinking it is safe for the shell library
       to rely on idiosyncrasies of that shell.
     - Using #! instead of a plain comment drops a helpful visual clue
       that this is a shell library and not a self-contained script.
     - Tools such as lintian can use a #! line to tell when an
       installation script has failed by forgetting to set a script
       executable.  This check does not work if shell libraries also start
       with a #! line.
    The good:
     - Text editors notice the #! line and use it for syntax highlighting
       if you try to edit the installed scripts (without ".sh" suffix) in
    The use of the #! for file type detection is not needed because Git's
    shell libraries are meant to be edited in source form (with ".sh"
    suffix).  Replace the opening #! lines with comments.
    This involves tweaking the test harness's valgrind support to find
    shell libraries by looking for "# " in the first line instead of "#!"
    (see v1.7.6-rc3~7, 2011-06-17).
    Suggested by Russ Allbery through lintian.  Thanks to Jeff King and
    Clemens Buchacher for further analysis.
    Tested by searching for non-executable scripts with #! line:
    	find . -name .git -prune -o -type f -not -executable |
    	while read file
    		read line <"$file"
    		case $line in
    			echo "$file"
    The only remaining scripts found are templates for shell scripts
    (unimplemented.sh, wrap-for-bin.sh) and sample input used in tests
    Signed-off-by: default avatarJonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
git-parse-remote.sh 2.26 KB