diff --git a/mercurial/configitems.py b/mercurial/configitems.py --- a/mercurial/configitems.py +++ b/mercurial/configitems.py @@ -956,6 +956,9 @@ coreconfigitem('stack', 'restrict-ancestors', default=True, ) +coreconfigitem('experimental', 'stack.same-branch', + default=False, +) coreconfigitem('subrepos', 'allowed', default=dynamicdefault, # to make backporting simpler ) diff --git a/mercurial/stack.py b/mercurial/stack.py --- a/mercurial/stack.py +++ b/mercurial/stack.py @@ -41,6 +41,10 @@ revspecargs.append("not ::merge()") revspec.append("%r") + if repo.ui.configbool("experimental", "stack.same-branch"): + revspecargs.append(revsetlang.formatspec("branch(%s)", rev)) + revspec.append("%r") + finalrevspec = " and ".join(revspec) revset = revsetlang.formatspec(finalrevspec, *revspecargs) revisions = scmutil.revrange(repo, [revset]) diff --git a/tests/test-stack.t b/tests/test-stack.t --- a/tests/test-stack.t +++ b/tests/test-stack.t @@ -51,6 +51,25 @@ o 0 other draft c_a +Check that stack show draft changesets from all branches by default +------------------------------------------------------------------- + + $ hg debugstack + 0 + 1 + 2 + 3 + 4 + 5 + +But not if we restrict on the branch + + $ hg debugstack --config experimental.stack.same-branch=true + 2 + 3 + 4 + 5 + Check that stack doesn't include public changesets --------------------------------------------------