20 ''' |
20 ''' |
21 |
21 |
22 __version__ = '5.1.4' |
22 __version__ = '5.1.4' |
23 testedwith = '3.3.3 3.4.1' |
23 testedwith = '3.3.3 3.4.1' |
24 buglink = 'http://bz.selenic.com/' |
24 buglink = 'http://bz.selenic.com/' |
|
25 |
|
26 |
|
27 evolutionhelptext = """ |
|
28 Obsolescence markers make it possible to mark changesets that have been |
|
29 deleted or superset in a new version of the changeset. |
|
30 |
|
31 Unlike the previous way of handling such changes, by stripping the old |
|
32 changesets from the repository, obsolescence markers can be propagated |
|
33 between repositories. This allows for a safe and simple way of exchanging |
|
34 mutable history and altering it after the fact. Changeset phases are |
|
35 respected, such that only draft and secret changesets can be altered (see |
|
36 :hg:`hg phases` for details). |
|
37 |
|
38 Obsolescence is tracked using "obsolete markers", a piece of metadata |
|
39 tracking which changesets have been made obsolete, potential successors for |
|
40 a given changeset, the moment the changeset was marked as obsolete, and the |
|
41 user who performed the rewriting operation. The markers are stored |
|
42 separately from standard changeset data can be exchanged without any of the |
|
43 precursor changesets, preventing unnecessary exchange of obsolescence data. |
|
44 |
|
45 The complete set of obsolescence markers describes a history of changeset |
|
46 modifications that is orthogonal to the repository history of file |
|
47 modifications. This changeset history allows for detection and automatic |
|
48 resolution of edge cases arising from multiple users rewriting the same part |
|
49 of history concurrently. |
|
50 |
|
51 Current feature status |
|
52 ====================== |
|
53 |
|
54 This feature is still in development. If you see this help, you have enable an |
|
55 extension that turned this feature on. |
|
56 |
|
57 Obsolescence markers will be exchanged between repositories that explicitly |
|
58 assert support for the obsolescence feature (this can currently only be done |
|
59 via an extension).""".strip() |
|
60 |
25 |
61 |
26 import sys, os |
62 import sys, os |
27 import random |
63 import random |
28 from StringIO import StringIO |
64 from StringIO import StringIO |
29 import struct |
65 import struct |
55 from mercurial import context |
91 from mercurial import context |
56 from mercurial import copies |
92 from mercurial import copies |
57 from mercurial import error |
93 from mercurial import error |
58 from mercurial import exchange |
94 from mercurial import exchange |
59 from mercurial import extensions |
95 from mercurial import extensions |
|
96 from mercurial import help |
60 from mercurial import httppeer |
97 from mercurial import httppeer |
61 from mercurial import hg |
98 from mercurial import hg |
62 from mercurial import lock as lockmod |
99 from mercurial import lock as lockmod |
63 from mercurial import merge |
100 from mercurial import merge |
64 from mercurial import node |
101 from mercurial import node |
3248 # wrap command content |
3285 # wrap command content |
3249 oldcap, args = wireproto.commands['capabilities'] |
3286 oldcap, args = wireproto.commands['capabilities'] |
3250 def newcap(repo, proto): |
3287 def newcap(repo, proto): |
3251 return capabilities(oldcap, repo, proto) |
3288 return capabilities(oldcap, repo, proto) |
3252 wireproto.commands['capabilities'] = (newcap, args) |
3289 wireproto.commands['capabilities'] = (newcap, args) |
|
3290 |
|
3291 def _helploader(): |
|
3292 return help.gettext(evolutionhelptext) |
|
3293 |
|
3294 @eh.uisetup |
|
3295 def _setuphelp(ui): |
|
3296 for entry in help.helptable: |
|
3297 if entry[0] == "evolution": |
|
3298 break |
|
3299 else: |
|
3300 help.helptable.append((["evolution"], _("Safely Rewriting History"), |
|
3301 _helploader)) |
|
3302 help.helptable.sort() |