mercurial/localrepo.py
changeset 9475 c295a82a020b
parent 9423 1444a42f6052
child 9476 a0e69510018b
child 9479 f3569d95c2ab
equal deleted inserted replaced
9474:6ea653272c09 9475:c295a82a020b
  1181         # sort the output in rev descending order
  1181         # sort the output in rev descending order
  1182         heads = [(-self.changelog.rev(h), h) for h in heads]
  1182         heads = [(-self.changelog.rev(h), h) for h in heads]
  1183         return [n for (r, n) in sorted(heads)]
  1183         return [n for (r, n) in sorted(heads)]
  1184 
  1184 
  1185     def branchheads(self, branch=None, start=None, closed=False):
  1185     def branchheads(self, branch=None, start=None, closed=False):
       
  1186         '''return a (possibly filtered) list of heads for the given branch
       
  1187 
       
  1188         Heads are returned in topological order, from newest to oldest.
       
  1189         If branch is None, use the dirstate branch.
       
  1190         If start is not None, return only heads reachable from start.
       
  1191         If closed is True, return heads that are marked as closed as well.
       
  1192         '''
  1186         if branch is None:
  1193         if branch is None:
  1187             branch = self[None].branch()
  1194             branch = self[None].branch()
  1188         branches = self.branchmap()
  1195         branches = self.branchmap()
  1189         if branch not in branches:
  1196         if branch not in branches:
  1190             return []
  1197             return []
  1191         bheads = branches[branch]
       
  1192         # the cache returns heads ordered lowest to highest
  1198         # the cache returns heads ordered lowest to highest
  1193         bheads.reverse()
  1199         bheads = list(reversed(branches[branch]))
  1194         if start is not None:
  1200         if start is not None:
  1195             # filter out the heads that cannot be reached from startrev
  1201             # filter out the heads that cannot be reached from startrev
  1196             bheads = self.changelog.nodesbetween([start], bheads)[2]
  1202             fbheads = set(self.changelog.nodesbetween([start], bheads)[2])
       
  1203             bheads = [h for h in bheads if h in fbheads]
  1197         if not closed:
  1204         if not closed:
  1198             bheads = [h for h in bheads if
  1205             bheads = [h for h in bheads if
  1199                       ('close' not in self.changelog.read(h)[5])]
  1206                       ('close' not in self.changelog.read(h)[5])]
  1200         return bheads
  1207         return bheads
  1201 
  1208