stack: add a new module for stack-related commands
Bootstrap the module with a function that returns the stack for the current
revision. The definition of the stack is ihnerited from histedit default
revset and used by hg show stack.
Differential Revision: https://phab.mercurial-scm.org/D2395
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/stack.py Fri Jan 19 15:25:06 2018 +0100
@@ -0,0 +1,27 @@
+# stack.py - Mercurial functions for stack definition
+#
+# Copyright Matt Mackall <mpm@selenic.com> and other
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+from __future__ import absolute_import
+
+from . import (
+ revsetlang,
+ scmutil,
+)
+
+def getstack(repo, rev=None):
+ """return a smartrev of the stack containing either rev if it is not None
+ or the current working directory parent.
+
+ The stack will always contain all drafts changesets which are ancestors to
+ the revision and are not merges.
+ """
+ if rev is None:
+ rev = '.'
+
+ revspec = 'reverse(only(%s) and not public() and not ::merge())'
+ revset = revsetlang.formatspec(revspec, rev)
+ return scmutil.revrange(repo, [revset])