parseRef extract reference name
()
| 564 | |
| 565 | // parseRef extract reference name |
| 566 | func (p *Parser) parseRef() (Revisioner, error) { |
| 567 | var tok, prevTok token |
| 568 | var lit, buf string |
| 569 | var endOfRef bool |
| 570 | var err error |
| 571 | |
| 572 | for { |
| 573 | tok, lit, err = p.scan() |
| 574 | |
| 575 | if err != nil { |
| 576 | return nil, err |
| 577 | } |
| 578 | |
| 579 | switch tok { |
| 580 | case eof, at, colon, tilde, caret: |
| 581 | endOfRef = true |
| 582 | } |
| 583 | |
| 584 | err := p.checkRefFormat(tok, lit, prevTok, buf, endOfRef) |
| 585 | |
| 586 | if err != nil { |
| 587 | return "", err |
| 588 | } |
| 589 | |
| 590 | if endOfRef { |
| 591 | p.unscan() |
| 592 | return Ref(buf), nil |
| 593 | } |
| 594 | |
| 595 | buf += lit |
| 596 | prevTok = tok |
| 597 | } |
| 598 | } |
| 599 | |
| 600 | // checkRefFormat ensure reference name follow rules defined here : |
| 601 | // https://git-scm.com/docs/git-check-ref-format |