checkRefFormat ensure reference name follow rules defined here : https://git-scm.com/docs/git-check-ref-format
(token token, literal string, previousToken token, buffer string, endOfRef bool)
| 600 | // checkRefFormat ensure reference name follow rules defined here : |
| 601 | // https://git-scm.com/docs/git-check-ref-format |
| 602 | func (p *Parser) checkRefFormat(token token, literal string, previousToken token, buffer string, endOfRef bool) error { |
| 603 | switch token { |
| 604 | case aslash, space, control, qmark, asterisk, obracket: |
| 605 | return &ErrInvalidRevision{fmt.Sprintf(`must not contains "%s"`, literal)} |
| 606 | } |
| 607 | |
| 608 | switch { |
| 609 | case (token == dot || token == slash) && buffer == "": |
| 610 | return &ErrInvalidRevision{fmt.Sprintf(`must not start with "%s"`, literal)} |
| 611 | case previousToken == slash && endOfRef: |
| 612 | return &ErrInvalidRevision{`must not end with "/"`} |
| 613 | case previousToken == dot && endOfRef: |
| 614 | return &ErrInvalidRevision{`must not end with "."`} |
| 615 | case token == dot && previousToken == slash: |
| 616 | return &ErrInvalidRevision{`must not contains "/."`} |
| 617 | case previousToken == dot && token == dot: |
| 618 | return &ErrInvalidRevision{`must not contains ".."`} |
| 619 | case previousToken == slash && token == slash: |
| 620 | return &ErrInvalidRevision{`must not contains consecutively "/"`} |
| 621 | case (token == slash || endOfRef) && len(buffer) > 4 && buffer[len(buffer)-5:] == ".lock": |
| 622 | return &ErrInvalidRevision{"cannot end with .lock"} |
| 623 | } |
| 624 | |
| 625 | return nil |
| 626 | } |