Parse explode a revision string into revisioner chunks
()
| 136 | |
| 137 | // Parse explode a revision string into revisioner chunks |
| 138 | func (p *Parser) Parse() ([]Revisioner, error) { |
| 139 | var rev Revisioner |
| 140 | var revs []Revisioner |
| 141 | var tok token |
| 142 | var err error |
| 143 | |
| 144 | for { |
| 145 | tok, _, err = p.scan() |
| 146 | |
| 147 | if err != nil { |
| 148 | return nil, err |
| 149 | } |
| 150 | |
| 151 | switch tok { |
| 152 | case at: |
| 153 | rev, err = p.parseAt() |
| 154 | case tilde: |
| 155 | rev, err = p.parseTilde() |
| 156 | case caret: |
| 157 | rev, err = p.parseCaret() |
| 158 | case colon: |
| 159 | rev, err = p.parseColon() |
| 160 | case eof: |
| 161 | err = p.validateFullRevision(&revs) |
| 162 | |
| 163 | if err != nil { |
| 164 | return []Revisioner{}, err |
| 165 | } |
| 166 | |
| 167 | return revs, nil |
| 168 | default: |
| 169 | p.unscan() |
| 170 | rev, err = p.parseRef() |
| 171 | } |
| 172 | |
| 173 | if err != nil { |
| 174 | return []Revisioner{}, err |
| 175 | } |
| 176 | |
| 177 | revs = append(revs, rev) |
| 178 | } |
| 179 | } |
| 180 | |
| 181 | // validateFullRevision ensures all revisioner chunks make a valid revision |
| 182 | func (p *Parser) validateFullRevision(chunks *[]Revisioner) error { |