def resolve(self, metadata, reversed=True):
"Resolve a revision spec that may contain tags into revnos."
if debug >= DEBUG_SEQUENCE:
- sys.stderr.write("Entering do_resolve with start=%s, end=%s\n" % (self.start, self.end))
+ sys.stderr.write("Entering resolve with start=%s, end=%s\n" % (self.start, self.end))
if self.is_empty():
if self.default_to == "branch":
self.seq = metadata.current_branch(reversed=False)
else:
self.seq = []
return self.seq
- if type(self.start) == type(""):
- if self.start in metadata.symbols:
- self.start = metadata.native_to_revno(metadata.symbols[self.start])
+ def subresolve(token):
+ part = token
+ if type(part) == type(0):
+ return part
+ if part not in metadata.symbols:
+ croak("in {0}, can't resolve symbol {0}".format(metadata.name,token))
else:
- croak("can't resolve symbol {0} in {1}".format(self.start,metadata.name))
- if type(self.end) == type(""):
- if self.end in metadata.symbols:
- self.end = metadata.native_to_revno(metadata.symbols[self.end])
- else:
- croak("can't resolve symbol {0} in {1}".format(self.end, metadata.name))
+ part = metadata.symbols[part]
+ if metadata.isbranch(part):
+ part = backend.branch_to_tip(part)
+ return metadata.native_to_revno(part)
+ croak("internal error: in %s, failed to resolve %s" % (metadata.name, token))
+ self.start = subresolve(self.start)
+ self.end = subresolve(self.end)
if self.end > len(metadata):
croak("{0} has no {1} revision".format(metadata.name, self.end))
if not self.branchwise:
for key in keys:
value = metadata.symbols[key]
if legend == "branch":
+ # Note! This code relies on backend.branch_to_base()
+ # returning an empty string when called on a trunk
+ # revision.
display = backend.branch_to_base(value)
if not display:
display = 0
return self.joinrev(n)
def branch_to_base(self, revid):
"Go from a branch ID sticky tag to the revision it was based on."
+ # Must return an emptry string for the fake root sticky tag.
return self.joinrev(self.splitrev(revid)[:-2])
+ def branch_to_tip(self, revid):
+ "Go from a branch ID sticky tag to the tip revision of its base."
+ croak("branch_to_tip() is not yet implemented")
def add(self, arg):
"Register a file"
# Key choices here: -b suppresses all keyword expansion, -U sets