Skip to content
  • Ævar Arnfjörð Bjarmason's avatar
    rev-parse: match @{upstream}, @{u} and @{push} case-insensitively · 244ea1b5
    Ævar Arnfjörð Bjarmason authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Change the revision parsing logic to match @{upstream}, @{u} & @{push}
    case-insensitively.
    
    Before this change supplying anything except the lower-case forms
    emits an "unknown revision or path not in the working tree"
    error. This change makes upper-case & mixed-case versions equivalent
    to the lower-case versions.
    
    The use-case for this is being able to hold the shift key down while
    typing @{u} on certain keyboard layouts, which makes the sequence
    easier to type, and reduces cases where git throws an error at the
    user where it could do what he means instead.
    
    These suffixes now join various other suffixes & special syntax
    documented in gitrevisions(7) that matches case-insensitively. A table
    showing the status of the various forms documented there before &
    after this patch is shown below. The key for the table is:
    
     - CI  = Case Insensitive
     - CIP = Case Insensitive Possible (without ambiguities)
     - AG  = Accepts Garbage (.e.g. @{./.4.minutes./.})
    
    Before this change:
    
        |----------------+-----+------+-----|
        | What?          | CI? | CIP? | AG? |
        |----------------+-----+------+-----|
        | @{<date>}      | Y   | Y    | Y   |
        | @{upstream}    | N   | Y    | N   |
        | @{push}        | N   | Y    | N   |
        |----------------+-----+------+-----|
    
    After it:
    
        |----------------+-----+------+-----|
        | What?          | CI? | CIP? | AG? |
        |----------------+-----+------+-----|
        | @{<date>}      | Y   | Y    | Y   |
        | @{upstream}    | Y   | Y    | N   |
        | @{push}        | Y   | Y    | N   |
        |----------------+-----+------+-----|
    
    The ^{<type>} suffix is not made case-insensitive, because other
    places that take <type> like "cat-file -t <type>" do want them case
    sensitively (after all we never declared that type names are case
    insensitive). Allowing case-insensitive typename only with this syntax
    will make the resulting Git as a whole inconsistent.
    
    This change was independently authored to scratch a longtime itch, but
    when I was about to submit it I discovered that a similar patch had
    been submitted unsuccessfully before by Conrad Irwin in August 2011 as
    "rev-parse: Allow @{U} as a synonym for
    @{u}" (<1313287071-7851-1-git-send-email-conrad.irwin@gmail.com>).
    
    The tests for this patch are more exhaustive than in the 2011
    submission. The starting point for them was to first change the code
    to only support upper-case versions of the existing words, seeing what
    broke, and amending the breaking tests to check upper case & mixed
    case as appropriate, and where not redundant to other similar
    tests. The implementation itself is equivalent.
    
    Signed-off-by: default avatarÆvar Arnfjörð Bjarmason <avarab@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    244ea1b5