equal
deleted
inserted
replaced
61 topic-mode = warning # print a warning |
61 topic-mode = warning # print a warning |
62 topic-mode = enforce # abort the commit (except for merge) |
62 topic-mode = enforce # abort the commit (except for merge) |
63 topic-mode = enforce-all # abort the commit (even for merge) |
63 topic-mode = enforce-all # abort the commit (even for merge) |
64 topic-mode = random # use a randomized generated topic (except for merge) |
64 topic-mode = random # use a randomized generated topic (except for merge) |
65 topic-mode = random-all # use a randomized generated topic (even for merge) |
65 topic-mode = random-all # use a randomized generated topic (even for merge) |
|
66 |
|
67 Single head enforcing |
|
68 ===================== |
|
69 |
|
70 The extensions come with an option to enforce that there is only one heads for |
|
71 each name in the repository at any time. |
|
72 |
|
73 [experimental] |
|
74 enforce-single-head = yes |
66 """ |
75 """ |
67 |
76 |
68 from __future__ import absolute_import |
77 from __future__ import absolute_import |
69 |
78 |
70 import functools |
79 import functools |
97 ) |
106 ) |
98 |
107 |
99 from . import ( |
108 from . import ( |
100 compat, |
109 compat, |
101 constants, |
110 constants, |
|
111 flow, |
102 revset as topicrevset, |
112 revset as topicrevset, |
103 destination, |
113 destination, |
104 stack, |
114 stack, |
105 topicmap, |
115 topicmap, |
106 discovery, |
116 discovery, |
150 configitem = registrar.configitem(configtable) |
160 configitem = registrar.configitem(configtable) |
151 |
161 |
152 configitem('experimental', 'enforce-topic', |
162 configitem('experimental', 'enforce-topic', |
153 default=False, |
163 default=False, |
154 ) |
164 ) |
|
165 configitem('experimental', 'enforce-single-head', |
|
166 default=False, |
|
167 ) |
155 configitem('experimental', 'topic-mode', |
168 configitem('experimental', 'topic-mode', |
156 default=None, |
169 default=None, |
157 ) |
170 ) |
158 configitem('_internal', 'keep-topic', |
171 configitem('_internal', 'keep-topic', |
159 default=False, |
172 default=False, |
365 def transaction(self, desc, *a, **k): |
378 def transaction(self, desc, *a, **k): |
366 ctr = self.currenttransaction() |
379 ctr = self.currenttransaction() |
367 tr = super(topicrepo, self).transaction(desc, *a, **k) |
380 tr = super(topicrepo, self).transaction(desc, *a, **k) |
368 if desc in ('strip', 'repair') or ctr is not None: |
381 if desc in ('strip', 'repair') or ctr is not None: |
369 return tr |
382 return tr |
|
383 |
|
384 if repo.ui.configbool('experimental', 'enforce-single-head'): |
|
385 reporef = weakref.ref(self) |
|
386 origvalidator = tr.validator |
|
387 |
|
388 def validator(tr2): |
|
389 repo = reporef() |
|
390 flow.enforcesinglehead(repo, tr2) |
|
391 origvalidator(tr2) |
|
392 tr.validator = validator |
370 |
393 |
371 # real transaction start |
394 # real transaction start |
372 ct = self.currenttopic |
395 ct = self.currenttopic |
373 if not ct: |
396 if not ct: |
374 return tr |
397 return tr |