Skip to content
  • Gábor Szeder's avatar
    t9811-git-p4-label-import: fix pipeline negation · 74ec8cf6
    Gábor Szeder authored and Junio C Hamano's avatar Junio C Hamano committed
    In 't9811-git-p4-label-import.sh' the test 'tag that cannot be
    exported' runs
    
      !(p4 labels | grep GIT_TAG_ON_A_BRANCH)
    
    to check that the given string is not printed by 'p4 labels'.  This is
    problematic, because according to POSIX [1]:
    
      "If the pipeline begins with the reserved word ! and command1 is a
      subshell command, the application shall ensure that the ( operator
      at the beginning of command1 is separated from the ! by one or more
      <blank> characters. The behavior of the reserved word ! immediately
      followed by the ( operator is unspecified."
    
    While most common shells still interpret this '!' as "negate the exit
    code of the last command in the pipeline", 'mksh/lksh' don't and
    interpret it as a negative file name pattern instead.  As a result
    they attempt to run a command made up of the pathnames in the current
    directory (it contains a single directory called 'main'), which, of
    course, fails the test.
    
    We could fix it simply by adding a space between the '!' and '(', but
    instead let's fix it by removing the unnecessary subshell.
    
    [1] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_02
    
    
    
    Signed-off-by: default avatarSZEDER Gábor <szeder.dev@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    74ec8cf6