def addbranchrevs(lrepo, repo, branches, revs): hashbranch, branches = branches if not hashbranch and not branches: return revs or None, revs and revs[0] or None revs = revs and list(revs) or [] if not repo.capable('branchmap'): if branches: raise util.Abort(_("remote branch lookup not supported")) revs.append(hashbranch) return revs, revs[0] branchmap = repo.branchmap() def primary(branch): if branch == '.': if not lrepo or not lrepo.local(): raise util.Abort(_("dirstate branch not accessible")) branch = lrepo.dirstate.branch() if branch in branchmap: revs.extend(node.hex(r) for r in reversed(branchmap[branch])) return True else: return False for branch in branches: if not primary(branch): raise error.RepoLookupError(_("unknown branch '%s'") % branch) if hashbranch: if not primary(hashbranch): revs.append(hashbranch) return revs, revs[0]
def lookup(repo, proto, key): try: k = encoding.tolocal(key) c = repo[k] if c.phase() == phases.secret: raise error.RepoLookupError(_("unknown revision '%s'") % k) r = c.hex() success = 1 except Exception, inst: r = str(inst) success = 0
def addbranchrevs(lrepo, other, branches, revs): peer = other.peer() # a courtesy to callers using a localrepo for other hashbranch, branches = branches if not hashbranch and not branches: x = revs or None if util.safehasattr(revs, 'first'): y = revs.first() elif revs: y = revs[0] else: y = None return x, y if revs: revs = list(revs) else: revs = [] if not peer.capable('branchmap'): if branches: raise util.Abort(_("remote branch lookup not supported")) revs.append(hashbranch) return revs, revs[0] branchmap = peer.branchmap() def primary(branch): if branch == '.': if not lrepo: raise util.Abort(_("dirstate branch not accessible")) branch = lrepo.dirstate.branch() if branch in branchmap: revs.extend(node.hex(r) for r in reversed(branchmap[branch])) return True else: return False for branch in branches: if not primary(branch): raise error.RepoLookupError(_("unknown branch '%s'") % branch) if hashbranch: if not primary(hashbranch): revs.append(hashbranch) return revs, revs[0]
def __init__(self, repo, changeid=''): """changeid is a revision number, node, or tag""" if changeid == '': changeid = '.' self._repo = repo if isinstance(changeid, int): self._rev = changeid self._node = repo.changelog.node(changeid) return if isinstance(changeid, long): changeid = str(changeid) if changeid == '.': self._node = repo.dirstate.p1() self._rev = repo.changelog.rev(self._node) return if changeid == 'null': self._node = nullid self._rev = nullrev return if changeid == 'tip': self._rev = len(repo.changelog) - 1 self._node = repo.changelog.node(self._rev) return if len(changeid) == 20: try: self._node = changeid self._rev = repo.changelog.rev(changeid) return except LookupError: pass try: r = int(changeid) if str(r) != changeid: raise ValueError l = len(repo.changelog) if r < 0: r += l if r < 0 or r >= l: raise ValueError self._rev = r self._node = repo.changelog.node(r) return except (ValueError, OverflowError): pass if len(changeid) == 40: try: self._node = bin(changeid) self._rev = repo.changelog.rev(self._node) return except (TypeError, LookupError): pass if changeid in repo._bookmarks: self._node = repo._bookmarks[changeid] self._rev = repo.changelog.rev(self._node) return if changeid in repo._tagscache.tags: self._node = repo._tagscache.tags[changeid] self._rev = repo.changelog.rev(self._node) return if changeid in repo.branchtags(): self._node = repo.branchtags()[changeid] self._rev = repo.changelog.rev(self._node) return self._node = repo.changelog._partialmatch(changeid) if self._node is not None: self._rev = repo.changelog.rev(self._node) return # lookup failed # check if it might have come from damaged dirstate if changeid in repo.dirstate.parents(): raise error.Abort( _("working directory has unknown parent '%s'!") % short(changeid)) try: if len(changeid) == 20: changeid = hex(changeid) except TypeError: pass raise error.RepoLookupError(_("unknown revision '%s'") % changeid)
def __init__(self, repo, changeid=''): """changeid is a revision number, node, or tag""" # since basectx.__new__ already took care of copying the object, we # don't need to do anything in __init__, so we just exit here if isinstance(changeid, basectx): return if changeid == '': changeid = '.' self._repo = repo if isinstance(changeid, int): try: self._node = repo.changelog.node(changeid) except IndexError: raise error.RepoLookupError( _("unknown revision '%s'") % changeid) self._rev = changeid return if isinstance(changeid, long): changeid = str(changeid) if changeid == '.': self._node = repo.dirstate.p1() self._rev = repo.changelog.rev(self._node) return if changeid == 'null': self._node = nullid self._rev = nullrev return if changeid == 'tip': self._node = repo.changelog.tip() self._rev = repo.changelog.rev(self._node) return if len(changeid) == 20: try: self._node = changeid self._rev = repo.changelog.rev(changeid) return except LookupError: pass try: r = int(changeid) if str(r) != changeid: raise ValueError l = len(repo.changelog) if r < 0: r += l if r < 0 or r >= l: raise ValueError self._rev = r self._node = repo.changelog.node(r) return except (ValueError, OverflowError, IndexError): pass if len(changeid) == 40: try: self._node = bin(changeid) self._rev = repo.changelog.rev(self._node) return except (TypeError, LookupError): pass if changeid in repo._bookmarks: self._node = repo._bookmarks[changeid] self._rev = repo.changelog.rev(self._node) return if changeid in repo._tagscache.tags: self._node = repo._tagscache.tags[changeid] self._rev = repo.changelog.rev(self._node) return try: self._node = repo.branchtip(changeid) self._rev = repo.changelog.rev(self._node) return except error.RepoLookupError: pass self._node = repo.changelog._partialmatch(changeid) if self._node is not None: self._rev = repo.changelog.rev(self._node) return # lookup failed # check if it might have come from damaged dirstate # # XXX we could avoid the unfiltered if we had a recognizable exception # for filtered changeset access if changeid in repo.unfiltered().dirstate.parents(): raise error.Abort( _("working directory has unknown parent '%s'!") % short(changeid)) try: if len(changeid) == 20: changeid = hex(changeid) except TypeError: pass raise error.RepoLookupError(_("unknown revision '%s'") % changeid)