Skip to content
Snippets Groups Projects
Commit 4d5e2fd53707 authored by Jörg Sonnenberger's avatar Jörg Sonnenberger
Browse files

singlehead: introduce option to restrict to public changes

The new experimental.single-head-per-branch:public-changes-only option
restricts the single-head-per-branch filter to public changesets. This
is useful when serving one repository with different views as publishing
and non-publishing repository.

Differential Revision: https://phab.mercurial-scm.org/D9525
parent 93e09d370003
No related branches found
No related tags found
No related merge requests found
......@@ -1079,6 +1079,11 @@
)
coreconfigitem(
b'experimental',
b'single-head-per-branch:public-changes-only',
default=False,
)
coreconfigitem(
b'experimental',
b'sshserver.support-v2',
default=False,
)
......
......@@ -2254,7 +2254,13 @@
accountclosed = singleheadsub.get(
b"account-closed-heads", False
)
scmutil.enforcesinglehead(repo, tr2, desc, accountclosed)
if singleheadsub.get(b"public-changes-only", False):
filtername = b"immutable"
else:
filtername = b"visible"
scmutil.enforcesinglehead(
repo, tr2, desc, accountclosed, filtername
)
if hook.hashook(repo.ui, b'pretxnclose-bookmark'):
for name, (old, new) in sorted(
tr.changes[b'bookmarks'].items()
......
......@@ -2189,8 +2189,8 @@
return _(b"%s and %d others") % (first, len(nodes) - maxnumnodes)
def enforcesinglehead(repo, tr, desc, accountclosed=False):
def enforcesinglehead(repo, tr, desc, accountclosed, filtername):
"""check that no named branch has multiple heads"""
if desc in (b'strip', b'repair'):
# skip the logic during strip
return
......@@ -2193,8 +2193,8 @@
"""check that no named branch has multiple heads"""
if desc in (b'strip', b'repair'):
# skip the logic during strip
return
visible = repo.filtered(b'visible')
visible = repo.filtered(filtername)
# possible improvement: we could restrict the check to affected branch
bm = visible.branchmap()
for name in bm:
......
......@@ -26,5 +26,6 @@
* The memory footprint per changeset during pull/unbundle
operations has been further reduced.
== New Experimental Features ==
......@@ -29,5 +30,9 @@
== New Experimental Features ==
* `experimental.single-head-per-branch:public-changes-only` can be used
restrict the single head check to public revision. This is useful for
overlay repository that have both a publishing and non-publishing view
of the same storage.
== Bug Fixes ==
......
......@@ -277,7 +277,7 @@
c_aL0
c_aM0
Let's make a new head and push everythin. The server feedback will mention
Let's make a new head and push everything. The server feedback will mention
exactly one new head because c_aM0 is closed.
$ hg up 'desc("c_aG0")'
......@@ -291,3 +291,98 @@
adding manifests
adding file changes
added 3 changesets with 3 changes to 3 files (+1 heads)
$ cd ..
Test that singe-head-per-branch can be restricted to public changes
-------------------------------------------------------------------
$ hg clone -r 49003e504178 single-head-server public-only
adding changesets
adding manifests
adding file changes
added 9 changesets with 9 changes to 9 files
1 new obsolescence markers
new changesets ea207398892e:49003e504178 (9 drafts)
updating to branch branch_A
9 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd public-only
$ cat <<EOF >> .hg/hgrc
> [phases]
> publish = no
> [experimental]
> single-head-per-branch = yes
> single-head-per-branch:public-changes-only = yes
> EOF
> hg phase -p :
$ hg update 'desc("c_aG0")'
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ mkcommit c_dO0
created new head
$ hg log -G
@ changeset: 9:8058fd35cc2b
| branch: branch_A
| tag: tip
| parent: 7:a33fb808fb4b
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: c_dO0
|
| o changeset: 8:49003e504178
|/| branch: branch_A
| | parent: 7:a33fb808fb4b
| | parent: 3:840af1c6bc88
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: c_aI0
| |
o | changeset: 7:a33fb808fb4b
| | branch: branch_A
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: c_aG0
| |
o | changeset: 6:99a2dc242c5d
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: c_dF1
| |
o | changeset: 5:6ed1df20edb1
|\ \ parent: 4:9bf953aa81f6
| | | parent: 2:286d02a6e2a2
| | | user: test
| | | date: Thu Jan 01 00:00:00 1970 +0000
| | | summary: c_dE0
| | |
| o | changeset: 4:9bf953aa81f6
| | | parent: 1:134bc3852ad2
| | | user: test
| | | date: Thu Jan 01 00:00:00 1970 +0000
| | | summary: c_dD0
| | |
| | o changeset: 3:840af1c6bc88
| | | branch: branch_A
| | | parent: 0:ea207398892e
| | | user: test
| | | date: Thu Jan 01 00:00:00 1970 +0000
| | | summary: c_aC0
| | |
o | | changeset: 2:286d02a6e2a2
|/ / user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: c_dB0
| |
o | changeset: 1:134bc3852ad2
|/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: c_dA0
|
o changeset: 0:ea207398892e
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: ROOT
$ hg phase -p .
abort: rejecting multiple heads on branch "branch_A"
(2 heads: 49003e504178 8058fd35cc2b)
[255]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment