hgext/obsolete.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Thu, 23 Aug 2012 12:23:34 +0200
changeset 479 b63da0fb8ee5
parent 473 1f8f8dd75d18
child 480 cd1d5b7308be
permissions -rw-r--r--
obsolete: add obsolete data to summary.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     1
# obsolete.py - introduce the obsolete concept in mercurial.
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     2
#
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     3
# Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     4
#                Logilab SA        <contact@logilab.fr>
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     5
#
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     6
# This software may be used and distributed according to the terms of the
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     7
# GNU General Public License version 2 or any later version.
69
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
     8
"""Introduce the Obsolete concept to mercurial
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
     9
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    10
General concept
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    11
===============
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    12
456
79aacd34bf1e obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents: 455
diff changeset
    13
This extension introduces the *obsolete* concept. The relation
79aacd34bf1e obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents: 455
diff changeset
    14
``<changeset B> obsoletes <changeset A>`` denotes that ``<changeset B>``
79aacd34bf1e obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents: 455
diff changeset
    15
is a new version of ``<changeset A>``.
69
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    16
456
79aacd34bf1e obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents: 455
diff changeset
    17
The *obsolete* relations act as an history **orthogonal** to the regular
79aacd34bf1e obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents: 455
diff changeset
    18
changesets history. Regular changesets history versions files. *Obsolete*
79aacd34bf1e obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents: 455
diff changeset
    19
relations version changesets.
69
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    20
228
5a17c0d41a00 proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 226
diff changeset
    21
:obsolete:     a changeset that has been replaced by another one.
5a17c0d41a00 proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 226
diff changeset
    22
:unstable:     a changeset that is not obsolete but has an obsolete ancestor.
456
79aacd34bf1e obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents: 455
diff changeset
    23
:suspended:    an obsolete changeset with unstable descendants.
79aacd34bf1e obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents: 455
diff changeset
    24
:extinct:      an obsolete changeset without unstable descendants.
135
1a08daef8a53 obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 132
diff changeset
    25
               (subject to garbage collection)
85
531058dbd703 [obsolete] vocabulary update suggestion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 84
diff changeset
    26
531058dbd703 [obsolete] vocabulary update suggestion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 84
diff changeset
    27
Another name for unstable could be out of sync.
69
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    28
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    29
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    30
Usage and Feature
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    31
=================
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    32
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    33
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    34
New commands
228
5a17c0d41a00 proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 226
diff changeset
    35
------------
69
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    36
415
ea7f2a4ad530 obsolete: fix doc, rebase no longer aborts with --keep
Patrick Mezard <patrick@mezard.eu>
parents: 409
diff changeset
    37
Note that rebased changesets are now marked obsolete instead of being stripped.
275
336210dada95 obsolete: make rebase abort with --keep
Patrick Mezard <patrick@mezard.eu>
parents: 274
diff changeset
    38
69
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    39
"""
228
5a17c0d41a00 proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 226
diff changeset
    40
54
ad1a4fb0fc49 Make states more resilient to missing head
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 53
diff changeset
    41
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
    42
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    43
from mercurial import util
433
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    44
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    45
try:
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    46
    from mercurial import obsolete
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    47
    obsolete._enabled = True
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    48
except ImportError:
458
5d47d854716e obsolete: fix indentation in obsolete import block
Patrick Mezard <patrick@mezard.eu>
parents: 457
diff changeset
    49
    raise util.Abort('Obsolete extension requires Mercurial 2.3 (or later)')
433
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    50
439
6cff54825233 obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 438
diff changeset
    51
import sys
6cff54825233 obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 438
diff changeset
    52
from mercurial.i18n import _
6cff54825233 obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 438
diff changeset
    53
from mercurial import cmdutil
6cff54825233 obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 438
diff changeset
    54
from mercurial import commands
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    55
from mercurial import context
46
3b0364fc822f Do not propagate obsolete changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 44
diff changeset
    56
from mercurial import discovery
3b0364fc822f Do not propagate obsolete changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 44
diff changeset
    57
from mercurial import error
439
6cff54825233 obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 438
diff changeset
    58
from mercurial import extensions
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
    59
from mercurial import localrepo
115
d60eddda9546 add an option to ensure unstable are secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 114
diff changeset
    60
from mercurial import phases
439
6cff54825233 obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 438
diff changeset
    61
from mercurial import revset
6cff54825233 obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 438
diff changeset
    62
from mercurial import scmutil
299
eda6491ca269 obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents: 298
diff changeset
    63
from mercurial import templatekw
473
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
    64
from mercurial import merge
435
97d82fbd2c24 obsolete: clean up import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 434
diff changeset
    65
from mercurial.node import bin, short, nullid
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    66
459
3477326461e3 obsolete: more typos and cleanup
Patrick Mezard <patrick@mezard.eu>
parents: 458
diff changeset
    67
# This extension contains the following code
432
6347bc69b49a obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 431
diff changeset
    68
#
6347bc69b49a obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 431
diff changeset
    69
# - Extension Helper code
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
    70
# - Obsolescence cache
432
6347bc69b49a obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 431
diff changeset
    71
# - ...
6347bc69b49a obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 431
diff changeset
    72
# - Older format compat
160
24346b78cd99 mercurial 2.1.2 compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 150
diff changeset
    73
432
6347bc69b49a obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 431
diff changeset
    74
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    75
432
6347bc69b49a obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 431
diff changeset
    76
#####################################################################
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
    77
### Extension helper                                              ###
432
6347bc69b49a obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 431
diff changeset
    78
#####################################################################
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    79
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    80
class exthelper(object):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    81
    """Helper for modular extension setup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    82
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
    83
    A single helper should be instanciated for each extension. Helper
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
    84
    methods are then used as decorator for various purpose.
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    85
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
    86
    All decorators return the original function and may be chained.
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    87
    """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    88
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    89
    def __init__(self):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    90
        self._uicallables = []
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    91
        self._extcallables = []
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    92
        self._repocallables = []
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    93
        self._revsetsymbols = []
431
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
    94
        self._templatekws = []
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    95
        self._commandwrappers = []
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    96
        self._extcommandwrappers = []
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    97
        self._functionwrappers = []
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    98
        self._duckpunchers = []
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    99
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   100
    def final_uisetup(self, ui):
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   101
        """Method to be used as the extension uisetup
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   102
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   103
        The following operations belong here:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   104
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   105
        - Changes to ui.__class__ . The ui object that will be used to run the
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   106
          command has not yet been created. Changes made here will affect ui
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   107
          objects created after this, and in particular the ui that will be
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   108
          passed to runcommand
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   109
        - Command wraps (extensions.wrapcommand)
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   110
        - Changes that need to be visible to other extensions: because
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   111
          initialization occurs in phases (all extensions run uisetup, then all
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   112
          run extsetup), a change made here will be visible to other extensions
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   113
          during extsetup
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   114
        - Monkeypatch or wrap function (extensions.wrapfunction) of dispatch
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   115
          module members
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   116
        - Setup of pre-* and post-* hooks
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   117
        - pushkey setup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   118
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   119
        for cont, funcname, func in self._duckpunchers:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   120
            setattr(cont, funcname, func)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   121
        for command, wrapper in self._commandwrappers:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   122
            extensions.wrapcommand(commands.table, command, wrapper)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   123
        for cont, funcname, wrapper in self._functionwrappers:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   124
            extensions.wrapfunction(cont, funcname, wrapper)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   125
        for c in self._uicallables:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   126
            c(ui)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   127
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   128
    def final_extsetup(self, ui):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   129
        """Method to be used as a the extension extsetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   130
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   131
        The following operations belong here:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   132
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   133
        - Changes depending on the status of other extensions. (if
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   134
          extensions.find('mq'))
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   135
        - Add a global option to all commands
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   136
        - Register revset functions
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   137
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   138
        knownexts = {}
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   139
        for name, symbol in self._revsetsymbols:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   140
            revset.symbols[name] = symbol
431
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   141
        for name, kw in self._templatekws:
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   142
            templatekw.keywords[name] = kw
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   143
        for ext, command, wrapper in self._extcommandwrappers:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   144
            if ext not in knownexts:
462
d38e02332c2c obsolet: fix extension help code about extension wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 461
diff changeset
   145
                e = extensions.find(ext)
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   146
                if e is None:
462
d38e02332c2c obsolet: fix extension help code about extension wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 461
diff changeset
   147
                    raise util.Abort('extension %s not found' % ext)
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   148
                knownexts[ext] = e.cmdtable
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   149
            extensions.wrapcommand(knownexts[ext], commands, wrapper)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   150
        for c in self._extcallables:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   151
            c(ui)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   152
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   153
    def final_reposetup(self, ui, repo):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   154
        """Method to be used as a the extension reposetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   155
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   156
        The following operations belong here:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   157
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   158
        - All hooks but pre-* and post-*
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   159
        - Modify configuration variables
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   160
        - Changes to repo.__class__, repo.dirstate.__class__
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   161
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   162
        for c in self._repocallables:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   163
            c(ui, repo)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   164
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   165
    def uisetup(self, call):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   166
        """Decorated function will be executed during uisetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   167
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   168
        example::
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   169
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   170
            @eh.uisetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   171
            def setupbabar(ui):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   172
                print 'this is uisetup!'
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   173
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   174
        self._uicallables.append(call)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   175
        return call
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   176
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   177
    def extsetup(self, call):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   178
        """Decorated function will be executed during extsetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   179
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   180
        example::
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   181
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   182
            @eh.extsetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   183
            def setupcelestine(ui):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   184
                print 'this is extsetup!'
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   185
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   186
        self._uicallables.append(call)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   187
        return call
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   188
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   189
    def reposetup(self, call):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   190
        """Decorated function will be executed during reposetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   191
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   192
        example::
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   193
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   194
            @eh.reposetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   195
            def setupzephir(ui, repo):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   196
                print 'this is reposetup!'
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   197
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   198
        self._repocallables.append(call)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   199
        return call
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   200
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   201
    def revset(self, symbolname):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   202
        """Decorated function is a revset symbol
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   203
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   204
        The name of the symbol must be given as the decorator argument.
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   205
        The symbol is added during `extsetup`.
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   206
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   207
        example::
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   208
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   209
            @eh.revset('hidden')
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   210
            def revsetbabar(repo, subset, x):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   211
                args = revset.getargs(x, 0, 0, 'babar accept no argument')
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   212
                return [r for r in subset if 'babar' in repo[r].description()]
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   213
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   214
        def dec(symbol):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   215
            self._revsetsymbols.append((symbolname, symbol))
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   216
            return symbol
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   217
        return dec
160
24346b78cd99 mercurial 2.1.2 compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 150
diff changeset
   218
24346b78cd99 mercurial 2.1.2 compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 150
diff changeset
   219
431
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   220
    def templatekw(self, keywordname):
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   221
        """Decorated function is a revset keyword
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   222
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   223
        The name of the keyword must be given as the decorator argument.
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   224
        The symbol is added during `extsetup`.
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   225
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   226
        example::
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   227
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   228
            @eh.templatekw('babar')
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   229
            def kwbabar(ctx):
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   230
                return 'babar'
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   231
        """
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   232
        def dec(keyword):
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   233
            self._templatekws.append((keywordname, keyword))
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   234
            return keyword
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   235
        return dec
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   236
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   237
    def wrapcommand(self, command, extension=None):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   238
        """Decorated function is a command wrapper
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   239
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   240
        The name of the command must be given as the decorator argument.
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   241
        The wrapping is installed during `uisetup`.
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   242
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   243
        If the second option `extension` argument is provided, the wrapping
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   244
        will be applied in the extension commandtable. This argument must be a
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   245
        string that will be searched using `extension.find` if not found and
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   246
        Abort error is raised. If the wrapping applies to an extension, it is
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   247
        installed during `extsetup`
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   248
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   249
        example::
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   250
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   251
            @eh.wrapcommand('summary')
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   252
            def wrapsummary(orig, ui, repo, *args, **kwargs):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   253
                ui.note('Barry!')
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   254
                return orig(ui, repo, *args, **kwargs)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   255
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   256
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   257
        def dec(wrapper):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   258
            if extension is None:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   259
                self._commandwrappers.append((command, wrapper))
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   260
            else:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   261
                self._extcommandwrappers.append((extension, command, wrapper))
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   262
            return wrapper
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   263
        return dec
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   264
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   265
    def wrapfunction(self, container, funcname):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   266
        """Decorated function is a function wrapper
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   267
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   268
        This function takes two arguments, the container and the name of the
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   269
        function to wrap. The wrapping is performed during `uisetup`.
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   270
        (there is no extension support)
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   271
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   272
        example::
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   273
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   274
            @eh.function(discovery, 'checkheads')
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   275
            def wrapfunction(orig, *args, **kwargs):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   276
                ui.note('His head smashed in and his heart cut out')
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   277
                return orig(*args, **kwargs)
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   278
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   279
        def dec(wrapper):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   280
            self._functionwrappers.append((container, funcname, wrapper))
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   281
            return wrapper
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   282
        return dec
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   283
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   284
    def addattr(self, container, funcname):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   285
        """Decorated function is to be added to the container
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   286
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   287
        This function takes two arguments, the container and the name of the
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   288
        function to wrap. The wrapping is performed during `uisetup`.
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   289
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   290
        example::
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   291
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   292
            @eh.function(context.changectx, 'babar')
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   293
            def babar(ctx):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   294
                return 'babar' in ctx.description
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   295
        """
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   296
        def dec(func):
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   297
            self._duckpunchers.append((container, funcname, func))
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   298
            return func
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   299
        return dec
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   300
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   301
eh = exthelper()
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   302
uisetup = eh.final_uisetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   303
extsetup = eh.final_extsetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   304
reposetup = eh.final_reposetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   305
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   306
#####################################################################
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   307
### Obsolescence Caching Logic                                    ###
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   308
#####################################################################
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   309
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   310
# Obsolescence related logic can be very slow if we don't have efficient cache.
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   311
#
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   312
# This section implements a cache mechanism that did not make it into core for
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   313
# time reason. It store meaningful set of revision related to obsolescence
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   314
# (obsolete, unstabletble ...
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   315
#
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   316
# Here is:
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   317
#
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   318
# - Computation of meaningful set,
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   319
# - Cache access logic,
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   320
# - Cache invalidation logic,
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   321
# - revset and ctx using this cache.
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   322
#
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   323
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   324
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   325
### Computation of meaningful set
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   326
#
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   327
# Most set can be computed with "simple" revset.
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   328
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   329
#: { set name -> function to compute this set } mapping
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   330
#:   function take a single "repo" argument.
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   331
#:
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   332
#: Use the `cachefor` decorator to register new cache function
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   333
cachefuncs = {}
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   334
def cachefor(name):
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   335
    """Decorator to register a function as computing the cache for a set"""
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   336
    def decorator(func):
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   337
        assert name not in cachefuncs
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   338
        cachefuncs[name] = func
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   339
        return func
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   340
    return decorator
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   341
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   342
@cachefor('obsolete')
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   343
def _computeobsoleteset(repo):
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   344
    """the set of obsolete revisions"""
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   345
    obs = set()
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   346
    nm = repo.changelog.nodemap
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   347
    for prec in repo.obsstore.precursors:
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   348
        rev = nm.get(prec)
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   349
        if rev is not None:
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   350
            obs.add(rev)
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   351
    return set(repo.revs('%ld - public()', obs))
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   352
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   353
@cachefor('unstable')
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   354
def _computeunstableset(repo):
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   355
    """the set of non obsolete revisions with obsolete parents"""
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   356
    return set(repo.revs('(obsolete()::) - obsolete()'))
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   357
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   358
@cachefor('suspended')
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   359
def _computesuspendedset(repo):
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   360
    """the set of obsolete parents with non obsolete descendants"""
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   361
    return set(repo.revs('obsolete() and obsolete()::unstable()'))
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   362
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   363
@cachefor('extinct')
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   364
def _computeextinctset(repo):
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   365
    """the set of obsolete parents without non obsolete descendants"""
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   366
    return set(repo.revs('obsolete() - obsolete()::unstable()'))
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   367
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   368
@eh.wrapfunction(obsolete.obsstore, '__init__')
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   369
def _initobsstorecache(orig, obsstore, *args, **kwargs):
457
0fc4addd881c obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents: 456
diff changeset
   370
    """add a cache attribute to obsstore"""
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   371
    obsstore.caches = {}
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   372
    return orig(obsstore, *args, **kwargs)
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   373
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   374
### Cache access
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   375
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   376
def getobscache(repo, name):
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   377
    """Return the set of revision that belong to the <name> set
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   378
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   379
    Such access may compute the set and cache it for future use"""
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   380
    if not repo.obsstore:
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   381
        return ()
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   382
    if name not in repo.obsstore.caches:
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   383
        repo.obsstore.caches[name] = cachefuncs[name](repo)
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   384
    return repo.obsstore.caches[name]
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   385
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   386
### Cache clean up
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   387
#
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   388
# To be simple we need to invalidate obsolescence cache when:
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   389
#
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   390
# - new changeset is added:
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   391
# - public phase is changed
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   392
# - obsolescence marker are added
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   393
# - strip is used a repo
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   394
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   395
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   396
def clearobscaches(repo):
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   397
    """Remove all obsolescence related cache from a repo
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   398
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   399
    This remove all cache in obsstore is the obsstore already exist on the
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   400
    repo.
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   401
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   402
    (We could be smarter here)"""
449
4f23f224afb4 obsolete: Improves cache invalidation logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 448
diff changeset
   403
    if 'obsstore' in repo._filecache:
4f23f224afb4 obsolete: Improves cache invalidation logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 448
diff changeset
   404
        repo.obsstore.caches.clear()
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   405
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   406
@eh.wrapfunction(localrepo.localrepository, 'addchangegroup')  # new changeset
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   407
@eh.wrapfunction(phases, 'retractboundary')  # phase movement
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   408
@eh.wrapfunction(phases, 'advanceboundary')  # phase movement
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   409
@eh.wrapfunction(localrepo.localrepository, 'destroyed')  # strip
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   410
def wrapclearcache(orig, repo, *args, **kwargs):
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   411
    try:
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   412
        return orig(repo, *args, **kwargs)
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   413
    finally:
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   414
        # we are a bit wide here
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   415
        # we could restrict to:
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   416
        # advanceboundary + phase==public
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   417
        # retractboundary + phase==draft
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   418
        clearobscaches(repo)
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   419
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   420
@eh.wrapfunction(obsolete.obsstore, 'add')  # new marker
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   421
def clearonadd(orig, obsstore, *args, **kwargs):
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   422
    try:
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   423
        return orig(obsstore, *args, **kwargs)
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   424
    finally:
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   425
        obsstore.caches.clear()
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   426
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   427
### Use the case
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   428
# Function in core that could benefic from the cache are overwritten by cache using version
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   429
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   430
# changectx method
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   431
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   432
@eh.addattr(context.changectx, 'unstable')
148
8e93e1f67205 obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 144
diff changeset
   433
def unstable(ctx):
8e93e1f67205 obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 144
diff changeset
   434
    """is the changeset unstable (have obsolete ancestor)"""
8e93e1f67205 obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 144
diff changeset
   435
    if ctx.node() is None:
8e93e1f67205 obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 144
diff changeset
   436
        return False
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   437
    return ctx.rev() in getobscache(ctx._repo, 'unstable')
148
8e93e1f67205 obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 144
diff changeset
   438
8e93e1f67205 obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 144
diff changeset
   439
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   440
@eh.addattr(context.changectx, 'extinct')
213
ea4aa1890b16 obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 212
diff changeset
   441
def extinct(ctx):
ea4aa1890b16 obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 212
diff changeset
   442
    """is the changeset extinct by other"""
ea4aa1890b16 obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 212
diff changeset
   443
    if ctx.node() is None:
ea4aa1890b16 obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 212
diff changeset
   444
        return False
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   445
    return ctx.rev() in getobscache(ctx._repo, 'extinct')
213
ea4aa1890b16 obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 212
diff changeset
   446
450
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   447
# revset
4d18739b506b obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 449
diff changeset
   448
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   449
@eh.revset('obsolete')
39
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 38
diff changeset
   450
def revsetobsolete(repo, subset, x):
397
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   451
    """``obsolete()``
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   452
    Changeset is obsolete.
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   453
    """
135
1a08daef8a53 obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 132
diff changeset
   454
    args = revset.getargs(x, 0, 0, 'obsolete takes no argument')
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   455
    obsoletes = getobscache(repo, 'obsolete')
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   456
    return [r for r in subset if r in obsoletes]
252
470232cea503 [obsolete] fix new api: use the new phase cache api
Alain Leufroy <alain.leufroy@logilab.fr>
parents: 228
diff changeset
   457
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   458
@eh.revset('unstable')
135
1a08daef8a53 obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 132
diff changeset
   459
def revsetunstable(repo, subset, x):
397
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   460
    """``unstable()``
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   461
    Unstable changesets are non-obsolete with obsolete ancestors.
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   462
    """
135
1a08daef8a53 obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 132
diff changeset
   463
    args = revset.getargs(x, 0, 0, 'unstable takes no arguments')
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   464
    unstables = getobscache(repo, 'unstable')
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   465
    return [r for r in subset if r in unstables]
135
1a08daef8a53 obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 132
diff changeset
   466
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   467
@eh.revset('extinct')
135
1a08daef8a53 obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 132
diff changeset
   468
def revsetextinct(repo, subset, x):
397
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   469
    """``extinct()``
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   470
    Obsolete changesets with obsolete descendants only.
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   471
    """
310
2d0dc5c18489 [obsolete] fix revset error message
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 308
diff changeset
   472
    args = revset.getargs(x, 0, 0, 'extinct takes no arguments')
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   473
    extincts = getobscache(repo, 'extinct')
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   474
    return [r for r in subset if r in extincts]
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   475
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   476
#####################################################################
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   477
### Complete troubles computation logic                           ###
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   478
#####################################################################
213
ea4aa1890b16 obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 212
diff changeset
   479
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   480
# there is two kind of trouble not handled by core right now:
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   481
# - latecomer: (successors for public changeset)
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   482
# - conflicting: (two changeset try to succeed to the same precursors)
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   483
#
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   484
# This section add support for those two addition trouble
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   485
#
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   486
# - Cache computation
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   487
# - revset and ctx method
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   488
# - push warning
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   489
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   490
### Cache computation
470
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   491
latediff = 1  # flag to prevent taking late comer fix into account
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   492
448
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   493
@cachefor('latecomer')
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   494
def _computelatecomerset(repo):
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   495
    """the set of rev trying to obsolete public revision"""
470
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   496
    candidates = _allsuccessors(repo, repo.revs('public()'),
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   497
                                                haltonflags=latediff)
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   498
    query = '%ld - obsolete() - public()'
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   499
    return set(repo.revs(query, candidates))
213
ea4aa1890b16 obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 212
diff changeset
   500
448
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   501
@cachefor('conflicting')
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   502
def _computeconflictingset(repo):
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   503
    """the set of rev trying to obsolete public revision"""
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   504
    conflicting = set()
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   505
    obsstore = repo.obsstore
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   506
    newermap = {}
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   507
    for ctx in repo.set('(not public()) - obsolete()'):
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   508
        prec = obsstore.successors.get(ctx.node(), ())
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   509
        toprocess = set(prec)
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   510
        while toprocess:
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   511
            prec = toprocess.pop()[0]
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   512
            if prec not in newermap:
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   513
                newermap[prec] = newerversion(repo, prec)
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   514
            newer = [n for n in newermap[prec] if n] # filter kill
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   515
            if len(newer) > 1:
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   516
                conflicting.add(ctx.rev())
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   517
                break
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   518
        toprocess.update(obsstore.successors.get(prec, ()))
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   519
    return conflicting
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   520
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   521
### changectx method
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   522
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   523
@eh.addattr(context.changectx, 'latecomer')
307
9ac56d36d6ff obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 306
diff changeset
   524
def latecomer(ctx):
9ac56d36d6ff obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 306
diff changeset
   525
    """is the changeset latecomer (Try to succeed to public change)"""
9ac56d36d6ff obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 306
diff changeset
   526
    if ctx.node() is None:
9ac56d36d6ff obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 306
diff changeset
   527
        return False
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   528
    return ctx.rev() in getobscache(ctx._repo, 'latecomer')
307
9ac56d36d6ff obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 306
diff changeset
   529
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   530
@eh.addattr(context.changectx, 'conflicting')
354
bd26eb9714fb obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 351
diff changeset
   531
def conflicting(ctx):
bd26eb9714fb obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 351
diff changeset
   532
    """is the changeset conflicting (Try to succeed to public change)"""
bd26eb9714fb obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 351
diff changeset
   533
    if ctx.node() is None:
bd26eb9714fb obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 351
diff changeset
   534
        return False
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   535
    return ctx.rev() in getobscache(ctx._repo, 'conflicting')
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   536
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   537
### revset symbol
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   538
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   539
@eh.revset('latecomer')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   540
def revsetlatecomer(repo, subset, x):
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   541
    """``latecomer()``
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   542
    Changesets marked as successors of public changesets.
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   543
    """
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   544
    args = revset.getargs(x, 0, 0, 'latecomer takes no arguments')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   545
    lates = getobscache(repo, 'latecomer')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   546
    return [r for r in subset if r in lates]
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   547
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   548
@eh.revset('conflicting')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   549
def revsetconflicting(repo, subset, x):
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   550
    """``conflicting()``
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   551
    Changesets marked as successors of a same changeset.
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   552
    """
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   553
    args = revset.getargs(x, 0, 0, 'conflicting takes no arguments')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   554
    conf = getobscache(repo, 'conflicting')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   555
    return [r for r in subset if r in conf]
354
bd26eb9714fb obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 351
diff changeset
   556
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   557
448
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   558
### Discovery wrapping
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   559
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   560
@eh.wrapfunction(discovery, 'checkheads')
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   561
def wrapcheckheads(orig, repo, remote, outgoing, *args, **kwargs):
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   562
    """wrap mercurial.discovery.checkheads
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   563
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   564
    * prevent latecomer and unstable to be pushed
448
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   565
    """
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   566
    # do not push instability
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   567
    for h in outgoing.missingheads:
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   568
        # Checking heads is enough, obsolete descendants are either
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   569
        # obsolete or unstable.
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   570
        ctx = repo[h]
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   571
        if ctx.latecomer():
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   572
            raise util.Abort(_("push includes a latecomer changeset: %s!")
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   573
                             % ctx)
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   574
        if ctx.conflicting():
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   575
            raise util.Abort(_("push includes a conflicting changeset: %s!")
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   576
                             % ctx)
96c896f0180b obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 447
diff changeset
   577
    return orig(repo, remote, outgoing, *args, **kwargs)
354
bd26eb9714fb obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 351
diff changeset
   578
473
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   579
#####################################################################
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   580
### Filter extinct changeset from common operation                ###
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   581
#####################################################################
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   582
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   583
@eh.wrapfunction(merge, 'update')
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   584
def wrapmergeupdate(orig, repo, node, *args, **kwargs):
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   585
    """ensure we don't automatically update on hidden changeset"""
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   586
    if node is None:
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   587
        # tip of current branch
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   588
        branch = repo[None].branch()
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   589
        node = repo.revs('last((.:: and branch(%s)) - hidden())', branch)[0]
1f8f8dd75d18 obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 472
diff changeset
   590
    return orig(repo, node, *args, **kwargs)
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
   591
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   592
#####################################################################
445
52b5e14c63d5 obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 444
diff changeset
   593
### Additional Utilities                                          ###
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   594
#####################################################################
39
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 38
diff changeset
   595
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   596
# This section contains a lot of small utility function and method
112
eae9be0ee00e adapt obsolete to phase.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 109
diff changeset
   597
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   598
# - Function to create markers
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   599
# - useful alias pstatus and pdiff (should probably go in evolve)
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   600
# - "troubles" method on changectx
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   601
# - function to travel throught the obsolescence graph
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   602
# - function to find useful changeset to stabilize
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   603
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   604
### Marker Create
252
470232cea503 [obsolete] fix new api: use the new phase cache api
Alain Leufroy <alain.leufroy@logilab.fr>
parents: 228
diff changeset
   605
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   606
def createmarkers(repo, relations, metadata=None, flag=0):
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   607
    """Add obsolete markers between changeset in a repo
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   608
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   609
    <relations> must be an iterable of (<old>, (<new>, ...)) tuple.
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   610
    `old` and `news` are changectx.
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   611
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   612
    Current user and date are used except if specified otherwise in the
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   613
    metadata attribute.
39
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 38
diff changeset
   614
459
3477326461e3 obsolete: more typos and cleanup
Patrick Mezard <patrick@mezard.eu>
parents: 458
diff changeset
   615
    /!\ assume the repo have been locked by the user /!\
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   616
    """
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   617
    # prepare metadata
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   618
    if metadata is None:
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   619
        metadata = {}
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   620
    if 'date' not in metadata:
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   621
        metadata['date'] = '%i %i' % util.makedate()
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   622
    if 'user' not in metadata:
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   623
        metadata['user'] = repo.ui.username()
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   624
    # check future marker
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   625
    tr = repo.transaction('add-obsolescence-marker')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   626
    try:
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   627
        for prec, sucs in relations:
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   628
            if not prec.mutable():
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   629
                raise util.Abort("Cannot obsolete immutable changeset: %s" % prec)
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   630
            nprec = prec.node()
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   631
            nsucs = tuple(s.node() for s in sucs)
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   632
            if nprec in nsucs:
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   633
                raise util.Abort("Changeset %s cannot obsolete himself" % prec)
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   634
            repo.obsstore.create(tr, nprec, nsucs, flag, metadata)
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   635
            clearobscaches(repo)
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   636
        tr.close()
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   637
    finally:
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   638
        tr.release()
135
1a08daef8a53 obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 132
diff changeset
   639
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   640
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   641
### Useful alias
135
1a08daef8a53 obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 132
diff changeset
   642
445
52b5e14c63d5 obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 444
diff changeset
   643
@eh.uisetup
52b5e14c63d5 obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 444
diff changeset
   644
def _installalias(ui):
52b5e14c63d5 obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 444
diff changeset
   645
    if ui.config('alias', 'pstatus', None) is None:
52b5e14c63d5 obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 444
diff changeset
   646
        ui.setconfig('alias', 'pstatus', 'status --rev .^')
52b5e14c63d5 obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 444
diff changeset
   647
    if ui.config('alias', 'pdiff', None) is None:
52b5e14c63d5 obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 444
diff changeset
   648
        ui.setconfig('alias', 'pdiff', 'diff --rev .^')
52b5e14c63d5 obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 444
diff changeset
   649
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   650
# - "troubles" method on changectx
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   651
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   652
@eh.addattr(context.changectx, 'troubles')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   653
def troubles(ctx):
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   654
    """Return a tuple listing all the troubles that affect a changeset
135
1a08daef8a53 obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 132
diff changeset
   655
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   656
    Troubles may be "unstable", "latecomer" or "conflicting".
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   657
    """
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   658
    troubles = []
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   659
    if ctx.unstable():
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   660
        troubles.append('unstable')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   661
    if ctx.latecomer():
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   662
        troubles.append('latecomer')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   663
    if ctx.conflicting():
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   664
        troubles.append('conflicting')
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   665
    return tuple(troubles)
143
0599fb01dc41 add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 135
diff changeset
   666
467
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   667
### Troubled revset symbol
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   668
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   669
@eh.revset('troubled')
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   670
def revsetlatecomer(repo, subset, x):
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   671
    """``troubled()``
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   672
    Changesets with troubles.
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   673
    """
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   674
    _ = revset.getargs(x, 0, 0, 'troubled takes no arguments')
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   675
    return list(repo.revs('%ld and (unstable() + latecomer() + conflicting())',
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   676
                          subset))
869ddfb98c7e obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 462
diff changeset
   677
451
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   678
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   679
### Obsolescence graph
dc1bd3595075 more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 450
diff changeset
   680
452
3cf7ce72dbda add cleanup todo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 451
diff changeset
   681
# XXX SOME MAJOR CLEAN UP TO DO HERE XXX
354
bd26eb9714fb obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 351
diff changeset
   682
305
0b444d7c5c96 update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 304
diff changeset
   683
def _precursors(repo, s):
0b444d7c5c96 update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 304
diff changeset
   684
    """Precursor of a changeset"""
143
0599fb01dc41 add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 135
diff changeset
   685
    cs = set()
0599fb01dc41 add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 135
diff changeset
   686
    nm = repo.changelog.nodemap
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   687
    markerbysubj = repo.obsstore.successors
143
0599fb01dc41 add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 135
diff changeset
   688
    for r in s:
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
   689
        for p in markerbysubj.get(repo[r].node(), ()):
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   690
            pr = nm.get(p[0])
143
0599fb01dc41 add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 135
diff changeset
   691
            if pr is not None:
0599fb01dc41 add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 135
diff changeset
   692
                cs.add(pr)
0599fb01dc41 add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 135
diff changeset
   693
    return cs
0599fb01dc41 add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 135
diff changeset
   694
305
0b444d7c5c96 update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 304
diff changeset
   695
def _allprecursors(repo, s):  # XXX we need a better naming
0b444d7c5c96 update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 304
diff changeset
   696
    """transitive precursors of a subset"""
144
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   697
    toproceed = [repo[r].node() for r in s]
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   698
    seen = set()
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   699
    allsubjects = repo.obsstore.successors
144
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   700
    while toproceed:
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   701
        nc = toproceed.pop()
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
   702
        for mark in allsubjects.get(nc, ()):
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   703
            np = mark[0]
144
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   704
            if np not in seen:
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   705
                seen.add(np)
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   706
                toproceed.append(np)
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   707
    nm = repo.changelog.nodemap
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   708
    cs = set()
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   709
    for p in seen:
204
50039b9b535e 2.2 compat: nodemap.get take a single argument now.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 203
diff changeset
   710
        pr = nm.get(p)
144
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   711
        if pr is not None:
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   712
            cs.add(pr)
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   713
    return cs
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   714
306
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   715
def _successors(repo, s):
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   716
    """Successors of a changeset"""
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   717
    cs = set()
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   718
    nm = repo.changelog.nodemap
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   719
    markerbyobj = repo.obsstore.precursors
306
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   720
    for r in s:
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   721
        for p in markerbyobj.get(repo[r].node(), ()):
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   722
            for sub in p[1]:
306
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   723
                sr = nm.get(sub)
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   724
                if sr is not None:
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   725
                    cs.add(sr)
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   726
    return cs
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   727
470
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   728
def _allsuccessors(repo, s, haltonflags=0):  # XXX we need a better naming
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   729
    """transitive successors of a subset
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   730
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   731
    haltonflags allows to provide flags which prevent the evaluation of a
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   732
    marker.  """
306
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   733
    toproceed = [repo[r].node() for r in s]
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   734
    seen = set()
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   735
    allobjects = repo.obsstore.precursors
306
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   736
    while toproceed:
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   737
        nc = toproceed.pop()
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   738
        for mark in allobjects.get(nc, ()):
470
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   739
            if mark[2] & haltonflags:
a2dfe82f27a0 obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 467
diff changeset
   740
                continue
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   741
            for sub in mark[1]:
460
19bba3c91246 obsolete: filter out nullid from possible successors
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 416
diff changeset
   742
                if sub == nullid:
19bba3c91246 obsolete: filter out nullid from possible successors
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 416
diff changeset
   743
                    continue # should not be here!
306
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   744
                if sub not in seen:
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   745
                    seen.add(sub)
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   746
                    toproceed.append(sub)
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   747
    nm = repo.changelog.nodemap
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   748
    cs = set()
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   749
    for s in seen:
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   750
        sr = nm.get(s)
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   751
        if sr is not None:
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   752
            cs.add(sr)
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   753
    return cs
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   754
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   755
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   756
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   757
def newerversion(repo, obs):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   758
    """Return the newer version of an obsolete changeset"""
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   759
    toproceed = set([(obs,)])
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   760
    # XXX known optimization available
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   761
    newer = set()
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   762
    objectrels = repo.obsstore.precursors
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   763
    while toproceed:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   764
        current = toproceed.pop()
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   765
        assert len(current) <= 1, 'splitting not handled yet. %r' % current
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   766
        current = [n for n in current if n != nullid]
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   767
        if current:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   768
            n, = current
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   769
            if n in objectrels:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   770
                markers = objectrels[n]
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   771
                for mark in markers:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   772
                    toproceed.add(tuple(mark[1]))
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   773
            else:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   774
                newer.add(tuple(current))
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   775
        else:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   776
            newer.add(())
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   777
    return sorted(newer)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   778
442
48d18ba05480 obsolete: extract high level marker creation in a dedicated util function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 441
diff changeset
   779
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   780
#####################################################################
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   781
### Extending revset and template                                 ###
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   782
#####################################################################
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   783
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   784
# this section add several useful revset symbol not yet in core.
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   785
# they are subject to changes
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   786
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   787
### hidden revset is not in core yet
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   788
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   789
@eh.revset('hidden')
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   790
def revsethidden(repo, subset, x):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   791
    """``hidden()``
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   792
    Changeset is hidden.
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   793
    """
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   794
    args = revset.getargs(x, 0, 0, 'hidden takes no argument')
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   795
    return [r for r in subset if r in repo.hiddenrevs]
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   796
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   797
### XXX I'm not sure this revset is useful
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   798
@eh.revset('suspended')
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   799
def revsetsuspended(repo, subset, x):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   800
    """``suspended()``
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   801
    Obsolete changesets with non-obsolete descendants.
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   802
    """
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   803
    args = revset.getargs(x, 0, 0, 'suspended takes no arguments')
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   804
    suspended = getobscache(repo, 'suspended')
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   805
    return [r for r in subset if r in suspended]
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   806
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   807
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   808
@eh.revset('precursors')
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   809
def revsetprecursors(repo, subset, x):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   810
    """``precursors(set)``
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   811
    Immediate precursors of changesets in set.
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   812
    """
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   813
    s = revset.getset(repo, range(len(repo)), x)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   814
    cs = _precursors(repo, s)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   815
    return [r for r in subset if r in cs]
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   816
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   817
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   818
@eh.revset('allprecursors')
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   819
def revsetallprecursors(repo, subset, x):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   820
    """``allprecursors(set)``
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   821
    Transitive precursors of changesets in set.
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   822
    """
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   823
    s = revset.getset(repo, range(len(repo)), x)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   824
    cs = _allprecursors(repo, s)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   825
    return [r for r in subset if r in cs]
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   826
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   827
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   828
@eh.revset('successors')
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   829
def revsetsuccessors(repo, subset, x):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   830
    """``successors(set)``
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   831
    Immediate successors of changesets in set.
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   832
    """
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   833
    s = revset.getset(repo, range(len(repo)), x)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   834
    cs = _successors(repo, s)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   835
    return [r for r in subset if r in cs]
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   836
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
   837
@eh.revset('allsuccessors')
306
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   838
def revsetallsuccessors(repo, subset, x):
397
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   839
    """``allsuccessors(set)``
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   840
    Transitive successors of changesets in set.
0bd63f294a6f obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents: 393
diff changeset
   841
    """
306
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   842
    s = revset.getset(repo, range(len(repo)), x)
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   843
    cs = _allsuccessors(repo, s)
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   844
    return [r for r in subset if r in cs]
8cfa3163dfaa obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 305
diff changeset
   845
299
eda6491ca269 obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents: 298
diff changeset
   846
### template keywords
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   847
# XXX it does not handle troubles well :-/
144
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   848
431
bd05022c7856 obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 430
diff changeset
   849
@eh.templatekw('obsolete')
299
eda6491ca269 obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents: 298
diff changeset
   850
def obsoletekw(repo, ctx, templ, **args):
eda6491ca269 obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents: 298
diff changeset
   851
    """:obsolete: String. The obsolescence level of the node, could be
eda6491ca269 obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents: 298
diff changeset
   852
    ``stable``, ``unstable``, ``suspended`` or ``extinct``.
eda6491ca269 obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents: 298
diff changeset
   853
    """
eda6491ca269 obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents: 298
diff changeset
   854
    rev = ctx.rev()
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   855
    if ctx.obsolete():
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   856
        if ctx.extinct():
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   857
            return 'extinct'
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   858
        else:
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   859
            return 'suspended'
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   860
    elif ctx.unstable():
299
eda6491ca269 obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents: 298
diff changeset
   861
        return 'unstable'
eda6491ca269 obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents: 298
diff changeset
   862
    return 'stable'
144
f387658d6d22 Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 143
diff changeset
   863
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   864
#####################################################################
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   865
### Various trouble warning                                       ###
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   866
#####################################################################
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   867
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   868
# This section take care of issue warning to the user when troubles appear
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   869
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   870
@eh.wrapcommand("update")
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   871
@eh.wrapcommand("pull")
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   872
def wrapmayobsoletewc(origfn, ui, repo, *args, **opts):
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   873
    """Warn that the working directory parent is an obsolete changeset"""
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   874
    res = origfn(ui, repo, *args, **opts)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   875
    if repo['.'].obsolete():
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   876
        ui.warn(_('Working directory parent is obsolete\n'))
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   877
    return res
71
19e1930587a0 [obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 70
diff changeset
   878
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   879
# XXX this could wrap transaction code
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   880
# XXX (but this is a bit a layer violation)
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   881
@eh.wrapcommand("commit")
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   882
@eh.wrapcommand("push")
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   883
@eh.wrapcommand("pull")
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   884
@eh.wrapcommand("graft")
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   885
@eh.wrapcommand("phase")
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   886
@eh.wrapcommand("unbundle")
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   887
def warnobserrors(orig, ui, repo, *args, **kwargs):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   888
    """display warning is the command resulted in more instable changeset"""
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   889
    priorunstables = len(repo.revs('unstable()'))
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   890
    priorlatecomers = len(repo.revs('latecomer()'))
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   891
    priorconflictings = len(repo.revs('conflicting()'))
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   892
    try:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   893
        return orig(ui, repo, *args, **kwargs)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   894
    finally:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   895
        newunstables = len(repo.revs('unstable()')) - priorunstables
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   896
        newlatecomers = len(repo.revs('latecomer()')) - priorlatecomers
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   897
        newconflictings = len(repo.revs('conflicting()')) - priorconflictings
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   898
        if newunstables > 0:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   899
            ui.warn(_('%i new unstables changesets\n') % newunstables)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   900
        if newlatecomers > 0:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   901
            ui.warn(_('%i new latecomers changesets\n') % newlatecomers)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   902
        if newconflictings > 0:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   903
            ui.warn(_('%i new conflictings changesets\n') % newconflictings)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   904
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   905
@eh.reposetup
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   906
def _repostabilizesetup(ui, repo):
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   907
    """Add a hint for "hg stabilize" when troubles make push fails
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   908
    """
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   909
    if not repo.local():
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   910
        return
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   911
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   912
    opush = repo.push
71
19e1930587a0 [obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 70
diff changeset
   913
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   914
    class stabilizerrepo(repo.__class__):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   915
        def push(self, remote, *args, **opts):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   916
            """wrapper around pull that pull obsolete relation"""
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   917
            try:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   918
                result = opush(remote, *args, **opts)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   919
            except util.Abort, ex:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   920
                hint = _("use 'hg stabilize' to get a stable history "
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   921
                         "or --force to ignore warnings")
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   922
                if (len(ex.args) >= 1
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   923
                    and ex.args[0].startswith('push includes ')
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   924
                    and ex.hint is None):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   925
                    ex.hint = hint
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   926
                raise
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   927
            return result
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   928
    repo.__class__ = stabilizerrepo
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   929
479
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   930
@eh.wrapcommand("summary")
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   931
def obssummary(orig, ui, repo, *args, **kwargs):
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   932
    ret = orig(ui, repo, *args, **kwargs)
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   933
    nbunstable = len(getobscache(repo, 'unstable'))
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   934
    nblatecomer = len(getobscache(repo, 'latecomer'))
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   935
    nbconflicting = len(getobscache(repo, 'unstable'))
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   936
    if nbunstable:
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   937
        ui.write('unstable: %i changesets\n' % nbunstable)
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   938
    else:
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   939
        ui.note('unstable: 0 changesets\n')
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   940
    if nblatecomer:
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   941
        ui.write('latecomer: %i changesets\n' % nblatecomer)
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   942
    else:
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   943
        ui.note('latecomer: 0 changesets\n')
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   944
    if nbconflicting:
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   945
        ui.write('conflicting: %i changesets\n' % nbconflicting)
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   946
    else:
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   947
        ui.note('conflicting: 0 changesets\n')
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   948
    return ret
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   949
b63da0fb8ee5 obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 473
diff changeset
   950
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   951
#####################################################################
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   952
### Core Other extension compat                                   ###
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   953
#####################################################################
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   954
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   955
# This section make official history rewritter create obsolete marker
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   956
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   957
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   958
### commit --amend
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   959
# make commit --amend create obsolete marker
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   960
#
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   961
# The precursor is still strip from the repository.
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   962
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   963
@eh.wrapfunction(cmdutil, 'amend')
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   964
def wrapcmdutilamend(orig, ui, repo, commitfunc, old, *args, **kwargs):
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   965
    oldnode = old.node()
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   966
    new = orig(ui, repo, commitfunc, old, *args, **kwargs)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   967
    if new != oldnode:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   968
        lock = repo.lock()
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   969
        try:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   970
            tr = repo.transaction('post-amend-obst')
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   971
            try:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   972
                meta = {
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   973
                    'date':  '%i %i' % util.makedate(),
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   974
                    'user': ui.username(),
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   975
                    }
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   976
                repo.obsstore.create(tr, oldnode, [new], 0, meta)
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   977
                tr.close()
447
fa85e7205e0b obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 446
diff changeset
   978
                clearobscaches(repo)
437
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   979
            finally:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   980
                tr.release()
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   981
        finally:
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   982
            lock.release()
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   983
    return new
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   984
48ac58354b7b obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 436
diff changeset
   985
### rebase
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   986
#
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   987
# - ignore obsolete changeset
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
   988
# - create obsolete marker *instead of* striping
150
f12fd2410a60 obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 148
diff changeset
   989
253
8ee6c5b98d73 [obsolete] fix new api: be more flexible on rebase's buildstate signature
Alain Leufroy <alain.leufroy@logilab.fr>
parents: 252
diff changeset
   990
def buildstate(orig, repo, dest, rebaseset, *ags, **kws):
150
f12fd2410a60 obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 148
diff changeset
   991
    """wrapper for rebase 's buildstate that exclude obsolete changeset"""
472
641e0cd43d6d obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 471
diff changeset
   992
150
f12fd2410a60 obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 148
diff changeset
   993
    rebaseset = repo.revs('%ld - extinct()', rebaseset)
471
8be3973adf34 obsolete: warn when the whole rebase set was remove because extinct
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 470
diff changeset
   994
    if not rebaseset:
8be3973adf34 obsolete: warn when the whole rebase set was remove because extinct
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 470
diff changeset
   995
        repo.ui.warn(_('whole rebase set is extinct and ignored.\n'))
8be3973adf34 obsolete: warn when the whole rebase set was remove because extinct
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 470
diff changeset
   996
        return {}
472
641e0cd43d6d obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 471
diff changeset
   997
    root = min(rebaseset)
641e0cd43d6d obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 471
diff changeset
   998
    if not repo._rebasekeep and not repo[root].mutable():
641e0cd43d6d obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 471
diff changeset
   999
        raise util.Abort(_("can't rebase immutable changeset %s") % repo[root],
641e0cd43d6d obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 471
diff changeset
  1000
                         hint=_('see hg help phases for details'))
253
8ee6c5b98d73 [obsolete] fix new api: be more flexible on rebase's buildstate signature
Alain Leufroy <alain.leufroy@logilab.fr>
parents: 252
diff changeset
  1001
    return orig(repo, dest, rebaseset, *ags, **kws)
150
f12fd2410a60 obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 148
diff changeset
  1002
282
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1003
def defineparents(orig, repo, rev, target, state, *args, **kwargs):
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1004
    rebasestate = getattr(repo, '_rebasestate', None)
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1005
    if rebasestate is not None:
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1006
        repo._rebasestate = dict(state)
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1007
        repo._rebasetarget = target
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1008
    return orig(repo, rev, target, state, *args, **kwargs)
150
f12fd2410a60 obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 148
diff changeset
  1009
282
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1010
def concludenode(orig, repo, rev, p1, *args, **kwargs):
74
c7dd26dec7fc [obsolete] update docstring
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 73
diff changeset
  1011
    """wrapper for rebase 's concludenode that set obsolete relation"""
282
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1012
    newrev = orig(repo, rev, p1, *args, **kwargs)
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1013
    rebasestate = getattr(repo, '_rebasestate', None)
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1014
    if rebasestate is not None:
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1015
        if newrev is not None:
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1016
            nrev = repo[newrev].rev()
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1017
        else:
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1018
            nrev = p1
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1019
        repo._rebasestate[rev] = nrev
71
19e1930587a0 [obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 70
diff changeset
  1020
    return newrev
19e1930587a0 [obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 70
diff changeset
  1021
274
6622a24f3b0f obsolete: fix rebase wrapping
Patrick Mezard <patrick@mezard.eu>
parents: 273
diff changeset
  1022
def cmdrebase(orig, ui, repo, *args, **kwargs):
311
5eecfda0a5c7 obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 310
diff changeset
  1023
5eecfda0a5c7 obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 310
diff changeset
  1024
    reallykeep = kwargs.get('keep', False)
275
336210dada95 obsolete: make rebase abort with --keep
Patrick Mezard <patrick@mezard.eu>
parents: 274
diff changeset
  1025
    kwargs = dict(kwargs)
84
c4cc5f3bcf12 [obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 83
diff changeset
  1026
    kwargs['keep'] = True
472
641e0cd43d6d obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 471
diff changeset
  1027
    repo._rebasekeep = reallykeep
84
c4cc5f3bcf12 [obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 83
diff changeset
  1028
282
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1029
    # We want to mark rebased revision as obsolete and set their
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1030
    # replacements if any. Doing it in concludenode() prevents
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1031
    # aborting the rebase, and is not called with all relevant
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1032
    # revisions in --collapse case. Instead, we try to track the
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1033
    # rebase state structure by sampling/updating it in
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1034
    # defineparents() and concludenode(). The obsolete markers are
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1035
    # added from this state after a successful call.
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1036
    repo._rebasestate = {}
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1037
    repo._rebasetarget = None
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1038
    try:
443
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1039
        l = repo.lock()
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1040
        try:
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1041
            res = orig(ui, repo, *args, **kwargs)
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1042
            if not reallykeep:
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1043
                # Filter nullmerge or unrebased entries
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1044
                repo._rebasestate = dict(p for p in repo._rebasestate.iteritems()
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1045
                                         if p[1] >= 0)
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1046
                if not res and not kwargs.get('abort') and repo._rebasestate:
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1047
                    # Rebased revisions are assumed to be descendants of
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1048
                    # targetrev. If a source revision is mapped to targetrev
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1049
                    # or to another rebased revision, it must have been
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1050
                    # removed.
455
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1051
                    markers = []
443
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1052
                    if kwargs.get('collapse'):
455
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1053
                        # collapse assume revision disapear because they are all
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1054
                        # in the created revision
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1055
                        newrevs = set(repo._rebasestate.values())
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1056
                        newrevs.remove(repo._rebasetarget)
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1057
                        if newrevs:
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1058
                            # we create new revision.
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1059
                            # A single one by --collapse design
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1060
                            assert len(newrevs) == 1
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1061
                            new = tuple(repo[n] for n in newrevs)
443
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1062
                        else:
455
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1063
                            # every body died. no new changeset created
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1064
                            new = (repo[repo._rebasetarget],)
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1065
                        for rev, newrev in sorted(repo._rebasestate.items()):
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1066
                            markers.append((repo[rev], new))
311
5eecfda0a5c7 obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 310
diff changeset
  1067
                    else:
455
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1068
                        # no collapse assume revision disapear because they are
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1069
                        # contained in parent
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1070
                        for rev, newrev in sorted(repo._rebasestate.items()):
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1071
                            markers.append((repo[rev], (repo[newrev],)))
f46a41006136 obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 454
diff changeset
  1072
                    createmarkers(repo, markers)
443
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1073
            return res
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1074
        finally:
3f8c11865ed2 obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 442
diff changeset
  1075
            l.release()
282
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1076
    finally:
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1077
        delattr(repo, '_rebasestate')
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1078
        delattr(repo, '_rebasetarget')
84
c4cc5f3bcf12 [obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 83
diff changeset
  1079
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1080
@eh.extsetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1081
def _rebasewrapping(ui):
356
56d4c6207ef9 Move obserror warning into the obsolete extension.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 354
diff changeset
  1082
    # warning about more obsolete
42
eb6a06d7eae3 Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 41
diff changeset
  1083
    try:
eb6a06d7eae3 Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 41
diff changeset
  1084
        rebase = extensions.find('rebase')
eb6a06d7eae3 Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 41
diff changeset
  1085
        if rebase:
356
56d4c6207ef9 Move obserror warning into the obsolete extension.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 354
diff changeset
  1086
            entry = extensions.wrapcommand(rebase.cmdtable, 'rebase', warnobserrors)
150
f12fd2410a60 obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 148
diff changeset
  1087
            extensions.wrapfunction(rebase, 'buildstate', buildstate)
282
05ab164c6593 obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents: 279
diff changeset
  1088
            extensions.wrapfunction(rebase, 'defineparents', defineparents)
42
eb6a06d7eae3 Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 41
diff changeset
  1089
            extensions.wrapfunction(rebase, 'concludenode', concludenode)
84
c4cc5f3bcf12 [obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 83
diff changeset
  1090
            extensions.wrapcommand(rebase.cmdtable, "rebase", cmdrebase)
42
eb6a06d7eae3 Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 41
diff changeset
  1091
    except KeyError:
305
0b444d7c5c96 update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 304
diff changeset
  1092
        pass  # rebase not found
39
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 38
diff changeset
  1093
44
b243c10a5fbe Add pushkey support for pull and push
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 43
diff changeset
  1094
430
07db1d511faf obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 429
diff changeset
  1095
#####################################################################
07db1d511faf obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 429
diff changeset
  1096
### Older format management                                       ###
07db1d511faf obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 429
diff changeset
  1097
#####################################################################
218
ace5608350b6 obsolete: do no complain when push create a new head but obsolete an old one.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 217
diff changeset
  1098
430
07db1d511faf obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 429
diff changeset
  1099
# Code related to detection and management of older legacy format never
07db1d511faf obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 429
diff changeset
  1100
# handled by core
218
ace5608350b6 obsolete: do no complain when push create a new head but obsolete an old one.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 217
diff changeset
  1101
439
6cff54825233 obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 438
diff changeset
  1102
import json
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
  1103
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1104
@eh.reposetup
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1105
def _checkoldobsolete(ui, repo):
459
3477326461e3 obsolete: more typos and cleanup
Patrick Mezard <patrick@mezard.eu>
parents: 458
diff changeset
  1106
    """Detect that a repo still contains some old obsolete format
273
87e4d1eec5e8 obsolete: add debugsuccessors command
Patrick Mezard <patrick@mezard.eu>
parents: 254
diff changeset
  1107
    """
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1108
    if not repo.local():
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1109
        return
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1110
    for arg in sys.argv:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1111
        if 'debugc' in arg:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1112
            break
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1113
    else:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1114
        data = repo.opener.tryread('obsolete-relations')
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1115
        if not data:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1116
            data = repo.sopener.tryread('obsoletemarkers')
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1117
        if data:
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1118
            raise util.Abort('old format of obsolete marker detected!\n'
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
  1119
                             'run `hg debugconvertobsolete` once.')
70
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
  1120
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
  1121
def _obsdeserialise(flike):
74
c7dd26dec7fc [obsolete] update docstring
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 73
diff changeset
  1122
    """read a file like object serialised with _obsserialise
c7dd26dec7fc [obsolete] update docstring
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 73
diff changeset
  1123
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
  1124
    this desierialize into a {subject -> objects} mapping
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
  1125
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
  1126
    this was the very first format ever."""
70
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
  1127
    rels = {}
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
  1128
    for line in flike:
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
  1129
        subhex, objhex = line.split()
80
5d029a358252 [obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 79
diff changeset
  1130
        subnode = bin(subhex)
5d029a358252 [obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 79
diff changeset
  1131
        if subnode == nullid:
5d029a358252 [obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 79
diff changeset
  1132
            subnode = None
5d029a358252 [obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 79
diff changeset
  1133
        rels.setdefault( subnode, set()).add(bin(objhex))
70
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
  1134
    return rels
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
  1135
441
d702f0d26c6a obsolete: remove debugsuccessors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 440
diff changeset
  1136
cmdtable = {}
d702f0d26c6a obsolete: remove debugsuccessors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 440
diff changeset
  1137
command = cmdutil.command(cmdtable)
276
f26e9bc5f7fc obsolete: use new-style command registration
Patrick Mezard <patrick@mezard.eu>
parents: 275
diff changeset
  1138
@command('debugconvertobsolete', [], '')
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1139
def cmddebugconvertobsolete(ui, repo):
278
fa0b9b8a83c0 obsolete: add or fix debug commands help
Patrick Mezard <patrick@mezard.eu>
parents: 277
diff changeset
  1140
    """import markers from an .hg/obsolete-relations file"""
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1141
    cnt = 0
337
ebfd1b96a013 obsolete: convert try to guess what invalid node id are
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 336
diff changeset
  1142
    err = 0
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1143
    l = repo.lock()
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
  1144
    some = False
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1145
    try:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1146
        unlink = []
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1147
        tr = repo.transaction('convert-obsolete')
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1148
        try:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1149
            repo._importoldobsolete = True
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1150
            store = repo.obsstore
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1151
            ### very first format
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1152
            try:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1153
                f = repo.opener('obsolete-relations')
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1154
                try:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1155
                    some = True
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1156
                    for line in f:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1157
                        subhex, objhex = line.split()
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1158
                        suc = bin(subhex)
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1159
                        prec = bin(objhex)
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1160
                        sucs = (suc==nullid) and [] or [suc]
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1161
                        meta = {
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1162
                            'date':  '%i %i' % util.makedate(),
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1163
                            'user': ui.username(),
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1164
                            }
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1165
                        try:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1166
                            store.create(tr, prec, sucs, 0, meta)
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1167
                            cnt += 1
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1168
                        except ValueError:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1169
                            repo.ui.write_err("invalid old marker line: %s"
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1170
                                              % (line))
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1171
                            err += 1
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1172
                finally:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1173
                    f.close()
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1174
                unlink.append(repo.join('obsolete-relations'))
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1175
            except IOError:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1176
                pass
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1177
            ### second (json) format
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1178
            data = repo.sopener.tryread('obsoletemarkers')
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
  1179
            if data:
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
  1180
                some = True
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1181
                for oldmark in json.loads(data):
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1182
                    del oldmark['id']  # dropped for now
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1183
                    del oldmark['reason']  # unused until then
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1184
                    oldobject = str(oldmark.pop('object'))
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1185
                    oldsubjects = [str(s) for s in oldmark.pop('subjects', [])]
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1186
                    LOOKUP_ERRORS = (error.RepoLookupError, error.LookupError)
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1187
                    if len(oldobject) != 40:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1188
                        try:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1189
                            oldobject = repo[oldobject].node()
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1190
                        except LOOKUP_ERRORS:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1191
                            pass
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1192
                    if any(len(s) != 40 for s in oldsubjects):
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1193
                        try:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1194
                            oldsubjects = [repo[s].node() for s in oldsubjects]
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1195
                        except LOOKUP_ERRORS:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1196
                            pass
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1197
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1198
                    oldmark['date'] = '%i %i' % tuple(oldmark['date'])
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1199
                    meta = dict((k.encode('utf-8'), v.encode('utf-8'))
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1200
                                 for k, v in oldmark.iteritems())
341
7653f80fd7a4 obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 340
diff changeset
  1201
                    try:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1202
                        succs = [bin(n) for n in oldsubjects]
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1203
                        succs = [n for n in succs if n != nullid]
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1204
                        store.create(tr, bin(oldobject), succs,
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1205
                                     0, meta)
341
7653f80fd7a4 obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 340
diff changeset
  1206
                        cnt += 1
7653f80fd7a4 obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 340
diff changeset
  1207
                    except ValueError:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1208
                        repo.ui.write_err("invalid marker %s -> %s\n"
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1209
                                     % (oldobject, oldsubjects))
341
7653f80fd7a4 obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 340
diff changeset
  1210
                        err += 1
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1211
                unlink.append(repo.sjoin('obsoletemarkers'))
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1212
            tr.close()
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1213
            for path in unlink:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1214
                util.unlink(path)
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1215
        finally:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
  1216
            tr.release()
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1217
    finally:
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1218
        del repo._importoldobsolete
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1219
        l.release()
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
  1220
    if not some:
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
  1221
            ui.warn('nothing to do\n')
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
  1222
    ui.status('%i obsolete marker converted\n' % cnt)
337
ebfd1b96a013 obsolete: convert try to guess what invalid node id are
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 336
diff changeset
  1223
    if err:
ebfd1b96a013 obsolete: convert try to guess what invalid node id are
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 336
diff changeset
  1224
        ui.write_err('%i conversion failed. check you graph!\n' % err)