diff --git a/mercurial/configitems.py b/mercurial/configitems.py --- a/mercurial/configitems.py +++ b/mercurial/configitems.py @@ -953,6 +953,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 @@ -44,6 +44,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,36 @@ o 0 other draft c_a +Check that stack show draft changesets from all branches by default +------------------------------------------------------------------- + + $ hg log -G -r "stack()" + @ 5 foo draft c_f + | + o 4 foo draft c_e + | + o 3 foo draft c_d + | + o 2 foo draft c_c + | + o 1 other draft c_b + | + o 0 other draft c_a + + +But not if we restrict on the branch + + $ hg log -G -r "stack()" --config experimental.stack.same-branch=true + @ 5 foo draft c_f + | + o 4 foo draft c_e + | + o 3 foo draft c_d + | + o 2 foo draft c_c + | + ~ + Check that stack doesn't include public changesets --------------------------------------------------