diff mercurial/commands.py @ 7656:6a24fb994701

branch closing: referencing open and closed branches/heads Treat fully closed branches similarly to "inactive" in the output of 'hg branches'. They will be suffixed with "(closed)" where inactive branches are marked with "(inactive)". If the -a/--active option is given both inactive and closed branches will not be shown. Partially closed branches (multiple heads, at least one not closed) will display the next (tipmost) open head. Add -a/--active option to "hg heads" which will hide closed heads iff the option is specified. In other hg commands, when multiple branch heads exist the branch name will refer to the tipmost open head, and if none exist, then the tipmost closed head.
author John Mulligan <phlogistonjohn@asynchrono.us>
date Wed, 14 Jan 2009 21:47:38 -0500
parents cce37dab7ad6
children ee3364d3d859
line wrap: on
line diff
--- a/mercurial/commands.py	Wed Jan 14 21:47:38 2009 -0500
+++ b/mercurial/commands.py	Wed Jan 14 21:47:38 2009 -0500
@@ -431,7 +431,7 @@
     """
     hexfunc = ui.debugflag and hex or short
     activebranches = [util.tolocal(repo[n].branch())
-                            for n in repo.heads()]
+                            for n in repo.heads(closed=False)]
     branches = util.sort([(tag in activebranches, repo.changelog.rev(node), tag)
                           for tag, node in repo.branchtags().items()])
     branches.reverse()
@@ -441,9 +441,15 @@
             if ui.quiet:
                 ui.write("%s\n" % tag)
             else:
+                hn = repo.lookup(node)
+                if isactive:
+                    notice = ''
+                elif hn not in repo.branchheads(tag, closed=False):
+                    notice = ' (closed)'
+                else:
+                    notice = ' (inactive)'
                 rev = str(node).rjust(31 - util.locallen(tag))
-                isinactive = ((not isactive) and " (inactive)") or ''
-                data = tag, rev, hexfunc(repo.lookup(node)), isinactive
+                data = tag, rev, hexfunc(hn), notice
                 ui.write("%s %s:%s%s\n" % data)
 
 def bundle(ui, repo, fname, dest=None, **opts):
@@ -1266,9 +1272,10 @@
         start = repo.lookup(opts['rev'])
     else:
         start = None
+    closed = not opts.get('active')
     if not branchrevs:
         # Assume we're looking repo-wide heads if no revs were specified.
-        heads = repo.heads(start)
+        heads = repo.heads(start, closed=closed)
     else:
         heads = []
         visitedset = util.set()
@@ -1277,7 +1284,7 @@
             if branch in visitedset:
                 continue
             visitedset.add(branch)
-            bheads = repo.branchheads(branch, start)
+            bheads = repo.branchheads(branch, start, closed=closed)
             if not bheads:
                 if branch != branchrev:
                     ui.warn(_("no changes on branch %s containing %s are "
@@ -3215,6 +3222,8 @@
     "heads":
         (heads,
          [('r', 'rev', '', _('show only heads which are descendants of rev')),
+          ('a', 'active', False,
+           _('show only the active heads from open branches')),
          ] + templateopts,
          _('[-r REV] [REV]...')),
     "help": (help_, [], _('[TOPIC]')),