hgext/evolve.py
changeset 1414 4198e2fad6ba
parent 1413 cf043c659ae3
child 1415 aaccca501ae0
equal deleted inserted replaced
1413:cf043c659ae3 1414:4198e2fad6ba
    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()