See next commit for motivation. This is just a simple refactoring to
prepare for that.
I'm not particularly happy with how this code is reused (after the
next commit). I'm happy to improve it if someone has a good idea.
( )
| hg-reviewers |
See next commit for motivation. This is just a simple refactoring to
prepare for that.
I'm not particularly happy with how this code is reused (after the
next commit). I'm happy to improve it if someone has a good idea.
| Lint Skipped |
| Unit Tests Skipped |
| Path | Packages | |||
|---|---|---|---|---|
| M | mercurial/scmutil.py (31 lines) |
| Commit | Parents | Author | Summary | Date |
|---|---|---|---|---|
| Martin von Zweigbergk | Jun 11 2018, 5:37 PM |
| Status | Author | Revision | |
|---|---|---|---|
| Abandoned | martinvonz | ||
| Abandoned | martinvonz |
| ambiguous nodeid prefix. | ambiguous nodeid prefix. | ||||
| """ | """ | ||||
| try: | try: | ||||
| revsymbol(repo, symbol) | revsymbol(repo, symbol) | ||||
| return True | return True | ||||
| except error.RepoLookupError: | except error.RepoLookupError: | ||||
| return False | return False | ||||
| def revsymbol(repo, symbol): | def _revsymbol(repo, symbol): | ||||
| """Returns a context given a single revision symbol (as string). | |||||
| This is similar to revsingle(), but accepts only a single revision symbol, | |||||
| i.e. things like ".", "tip", "1234", "deadbeef", "my-bookmark" work, but | |||||
| not "max(public())". | |||||
| """ | |||||
| if not isinstance(symbol, bytes): | if not isinstance(symbol, bytes): | ||||
| msg = ("symbol (%s of type %s) was not a string, did you mean " | msg = ("symbol (%s of type %s) was not a string, did you mean " | ||||
| "repo[symbol]?" % (symbol, type(symbol))) | "repo[symbol]?" % (symbol, type(symbol))) | ||||
| raise error.ProgrammingError(msg) | raise error.ProgrammingError(msg) | ||||
| try: | try: | ||||
| if symbol in ('.', 'tip', 'null'): | if symbol in ('.', 'tip', 'null'): | ||||
| return repo[symbol] | return [repo[symbol]] | ||||
| try: | try: | ||||
| r = int(symbol) | r = int(symbol) | ||||
| if '%d' % r != symbol: | if '%d' % r != symbol: | ||||
| raise ValueError | raise ValueError | ||||
| l = len(repo.changelog) | l = len(repo.changelog) | ||||
| if r < 0: | if r < 0: | ||||
| r += l | r += l | ||||
| if r < 0 or r >= l and r != wdirrev: | if r < 0 or r >= l and r != wdirrev: | ||||
| raise ValueError | raise ValueError | ||||
| return repo[r] | return [repo[r]] | ||||
| except error.FilteredIndexError: | except error.FilteredIndexError: | ||||
| raise | raise | ||||
| except (ValueError, OverflowError, IndexError): | except (ValueError, OverflowError, IndexError): | ||||
| pass | pass | ||||
| if len(symbol) == 40: | if len(symbol) == 40: | ||||
| try: | try: | ||||
| node = bin(symbol) | node = bin(symbol) | ||||
| rev = repo.changelog.rev(node) | rev = repo.changelog.rev(node) | ||||
| return repo[rev] | return [repo[rev]] | ||||
| except error.FilteredLookupError: | except error.FilteredLookupError: | ||||
| raise | raise | ||||
| except (TypeError, LookupError): | except (TypeError, LookupError): | ||||
| pass | pass | ||||
| # look up bookmarks through the name interface | # look up bookmarks through the name interface | ||||
| try: | try: | ||||
| node = repo.names.singlenode(repo, symbol) | node = repo.names.singlenode(repo, symbol) | ||||
| rev = repo.changelog.rev(node) | rev = repo.changelog.rev(node) | ||||
| return repo[rev] | return [repo[rev]] | ||||
| except KeyError: | except KeyError: | ||||
| pass | pass | ||||
| node = resolvehexnodeidprefix(repo, symbol) | node = resolvehexnodeidprefix(repo, symbol) | ||||
| if node is not None: | if node is not None: | ||||
| rev = repo.changelog.rev(node) | rev = repo.changelog.rev(node) | ||||
| return repo[rev] | return [repo[rev]] | ||||
| raise error.RepoLookupError(_("unknown revision '%s'") % symbol) | raise error.RepoLookupError(_("unknown revision '%s'") % symbol) | ||||
| except error.WdirUnsupported: | except error.WdirUnsupported: | ||||
| return repo[None] | return [repo[None]] | ||||
| except (error.FilteredIndexError, error.FilteredLookupError, | except (error.FilteredIndexError, error.FilteredLookupError, | ||||
| error.FilteredRepoLookupError): | error.FilteredRepoLookupError): | ||||
| raise _filterederror(repo, symbol) | raise _filterederror(repo, symbol) | ||||
| def revsymbol(repo, symbol): | |||||
| """Returns a context given a single revision symbol (as string). | |||||
| This is similar to revsingle(), but accepts only a single revision symbol, | |||||
| i.e. things like ".", "tip", "1234", "deadbeef", "my-bookmark" work, but | |||||
| not "max(public())". | |||||
| """ | |||||
| ctxs = _revsymbol(repo, symbol) | |||||
| assert len(ctxs) == 1 | |||||
| return ctxs[0] | |||||
| def _filterederror(repo, changeid): | def _filterederror(repo, changeid): | ||||
| """build an exception to be raised about a filtered changeid | """build an exception to be raised about a filtered changeid | ||||
| This is extracted in a function to help extensions (eg: evolve) to | This is extracted in a function to help extensions (eg: evolve) to | ||||
| experiment with various message variants.""" | experiment with various message variants.""" | ||||
| if repo.filtername.startswith('visible'): | if repo.filtername.startswith('visible'): | ||||
| # Check if the changeset is obsolete | # Check if the changeset is obsolete | ||||