hgext3rd/evolve/legacy.py
author Anton Shestakov <av6@dwimlabs.net>
Tue, 03 Oct 2017 22:51:00 +0800
changeset 3035 a3a154e49bba
parent 2464 2b53a2a21bbb
child 3124 6ef274e01f64
permissions -rw-r--r--
legacy: rename lookup_errors to not be in all caps (flake8 warning) flake8 has a plugin, pep8-naming, which is not installed by default, but is used if available, no extra config required. This plugin checks names of variables, classes, functions and so on against PEP-8, and it complained about this variable: N806 variable in function should be lowercase Since this isn't a module-level constant, but just a helper variable used only in one function, it's fine to just rename it. With this error gone, flake8 output (used plugins: mccabe, naming, pycodestyle, pyflakes) is totally clean.
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
# 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
     2
#                Logilab SA        <contact@logilab.fr>
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     3
#
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     4
# 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
     5
# GNU General Public License version 2 or any later version.
1665
559d04a5c856 Grammar: introduced
timeless@gmail.com
parents: 1664
diff changeset
     6
"""Deprecated extension that formerly introduced "Changeset Obsolescence".
69
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
     7
1669
11d72083883a Brand: Mercurial
timeless@gmail.com
parents: 1665
diff changeset
     8
This concept is now partially in Mercurial core (starting with Mercurial 2.3).
1664
1c9aef9497c4 Grammar: has
timeless@gmail.com
parents: 1657
diff changeset
     9
The remaining logic has been grouped with the evolve extension.
69
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    10
1657
103cb0d44cd8 Spelling: remains
timeless@gmail.com
parents: 1652
diff changeset
    11
Some code remains in this extensions to detect and convert prehistoric format
1550
e47dda53a5c2 check-code: make obsolete.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents: 1465
diff changeset
    12
of obsolete marker than early user may have create. Keep it enabled if you
e47dda53a5c2 check-code: make obsolete.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents: 1465
diff changeset
    13
were such user.
69
aee53d546849 [obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 58
diff changeset
    14
"""
228
5a17c0d41a00 proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 226
diff changeset
    15
1757
86e71a0b3319 errors: add missing imports of mercurial.error
Martin von Zweigbergk <martinvonz@google.com>
parents: 1669
diff changeset
    16
from mercurial import error
433
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    17
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    18
try:
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    19
    from mercurial import obsolete
2025
d286222293c8 legacy: properly test for mercurial version in the legacy extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1810
diff changeset
    20
    obsolete._enabled
433
aa1255c2ac8f obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 432
diff changeset
    21
except ImportError:
1550
e47dda53a5c2 check-code: make obsolete.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents: 1465
diff changeset
    22
    raise error.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
    23
439
6cff54825233 obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 438
diff changeset
    24
import sys
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    25
import json
354
bd26eb9714fb obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 351
diff changeset
    26
1550
e47dda53a5c2 check-code: make obsolete.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents: 1465
diff changeset
    27
from mercurial.i18n import _
2122
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
    28
from mercurial import lock as lockmod
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    29
from mercurial.node import bin, nullid
2464
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2273
diff changeset
    30
from mercurial import registrar
1757
86e71a0b3319 errors: add missing imports of mercurial.error
Martin von Zweigbergk <martinvonz@google.com>
parents: 1669
diff changeset
    31
from mercurial import util
39
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 38
diff changeset
    32
2464
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2273
diff changeset
    33
if util.safehasattr(registrar, 'command'):
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2273
diff changeset
    34
    commandfunc = registrar.command
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2273
diff changeset
    35
else: # compat with hg < 4.3
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2273
diff changeset
    36
    from mercurial import cmdutil
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2273
diff changeset
    37
    commandfunc = cmdutil.command
44
b243c10a5fbe Add pushkey support for pull and push
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 43
diff changeset
    38
430
07db1d511faf obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 429
diff changeset
    39
#####################################################################
07db1d511faf obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 429
diff changeset
    40
### Older format management                                       ###
07db1d511faf obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 429
diff changeset
    41
#####################################################################
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
    42
430
07db1d511faf obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 429
diff changeset
    43
# 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
    44
# 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
    45
32
c27491be4431 obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    46
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    47
def reposetup(ui, repo):
459
3477326461e3 obsolete: more typos and cleanup
Patrick Mezard <patrick@mezard.eu>
parents: 458
diff changeset
    48
    """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
    49
    """
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    50
    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
    51
        return
1216
a307eea46f96 oldobsolete: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents: 1061
diff changeset
    52
    evolveopts = ui.configlist('experimental', 'evolution')
a307eea46f96 oldobsolete: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents: 1061
diff changeset
    53
    if not evolveopts:
a307eea46f96 oldobsolete: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents: 1061
diff changeset
    54
        evolveopts = 'all'
a307eea46f96 oldobsolete: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents: 1061
diff changeset
    55
        ui.setconfig('experimental', 'evolution', evolveopts)
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    56
    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
    57
        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
    58
            break
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    59
    else:
2051
74934195747b evolve: switch away from deprecated repo.opener
Martin von Zweigbergk <martinvonz@google.com>
parents: 2032
diff changeset
    60
        data = repo.vfs.tryread('obsolete-relations')
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    61
        if not data:
1465
777e5c369d99 compat: use svfs instead of sopener
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1216
diff changeset
    62
            data = repo.svfs.tryread('obsoletemarkers')
429
079b231b8ea4 obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 428
diff changeset
    63
        if data:
1550
e47dda53a5c2 check-code: make obsolete.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents: 1465
diff changeset
    64
            raise error.Abort('old format of obsolete marker detected!\n'
e47dda53a5c2 check-code: make obsolete.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents: 1465
diff changeset
    65
                              'run `hg debugconvertobsolete` once.')
70
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
    66
1647
23521789ded0 Spelling (en-us): -ize
timeless@gmail.com
parents: 1550
diff changeset
    67
def _obsdeserialize(flike):
1648
96331d6f9940 Spelling: accessing
timeless@gmail.com
parents: 1647
diff changeset
    68
    """read a file like object serialized with _obsserialize
74
c7dd26dec7fc [obsolete] update docstring
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 73
diff changeset
    69
1649
0b8a1e58dcf7 Spelling: deserialize
timeless@gmail.com
parents: 1648
diff changeset
    70
    this deserialize into a {subject -> objects} mapping
454
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
    71
4e34a723115b obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 453
diff changeset
    72
    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
    73
    rels = {}
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
    74
    for line in flike:
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
    75
        subhex, objhex = line.split()
80
5d029a358252 [obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 79
diff changeset
    76
        subnode = bin(subhex)
5d029a358252 [obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 79
diff changeset
    77
        if subnode == nullid:
5d029a358252 [obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 79
diff changeset
    78
            subnode = None
1550
e47dda53a5c2 check-code: make obsolete.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents: 1465
diff changeset
    79
        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
    80
    return rels
af4f7ef0a3c1 [obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 69
diff changeset
    81
441
d702f0d26c6a obsolete: remove debugsuccessors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 440
diff changeset
    82
cmdtable = {}
2464
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2273
diff changeset
    83
command = commandfunc(cmdtable)
276
f26e9bc5f7fc obsolete: use new-style command registration
Patrick Mezard <patrick@mezard.eu>
parents: 275
diff changeset
    84
@command('debugconvertobsolete', [], '')
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
    85
def cmddebugconvertobsolete(ui, repo):
278
fa0b9b8a83c0 obsolete: add or fix debug commands help
Patrick Mezard <patrick@mezard.eu>
parents: 277
diff changeset
    86
    """import markers from an .hg/obsolete-relations file"""
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
    87
    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
    88
    err = 0
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
    89
    l = repo.lock()
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
    90
    some = False
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
    91
    try:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
    92
        unlink = []
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
    93
        tr = repo.transaction('convert-obsolete')
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
    94
        try:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
    95
            repo._importoldobsolete = True
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
    96
            store = repo.obsstore
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
    97
            ### very first format
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
    98
            try:
2051
74934195747b evolve: switch away from deprecated repo.opener
Martin von Zweigbergk <martinvonz@google.com>
parents: 2032
diff changeset
    99
                f = repo.vfs('obsolete-relations')
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   100
                try:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   101
                    some = True
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   102
                    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
   103
                        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
   104
                        suc = bin(subhex)
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   105
                        prec = bin(objhex)
2032
dd7e092a854a flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2025
diff changeset
   106
                        sucs = (suc == nullid) and [] or [suc]
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   107
                        meta = {
2032
dd7e092a854a flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2025
diff changeset
   108
                            'date': '%i %i' % util.makedate(),
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   109
                            'user': ui.username(),
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   110
                            }
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   111
                        try:
1061
f3867e60d072 compat: always call metadata as a keyword argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 519
diff changeset
   112
                            store.create(tr, prec, sucs, 0, metadata=meta)
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   113
                            cnt += 1
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   114
                        except ValueError:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   115
                            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
   116
                                              % (line))
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   117
                            err += 1
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   118
                finally:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   119
                    f.close()
2070
9105c3c54045 cleanup: stop using 'repo.join' methods
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2051
diff changeset
   120
                unlink.append(repo.vfs.join('obsolete-relations'))
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   121
            except IOError:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   122
                pass
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   123
            ### second (json) format
1465
777e5c369d99 compat: use svfs instead of sopener
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1216
diff changeset
   124
            data = repo.svfs.tryread('obsoletemarkers')
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   125
            if data:
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   126
                some = True
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   127
                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
   128
                    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
   129
                    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
   130
                    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
   131
                    oldsubjects = [str(s) for s in oldmark.pop('subjects', [])]
3035
a3a154e49bba legacy: rename lookup_errors to not be in all caps (flake8 warning)
Anton Shestakov <av6@dwimlabs.net>
parents: 2464
diff changeset
   132
                    lookup_errors = (error.RepoLookupError, error.LookupError)
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   133
                    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
   134
                        try:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   135
                            oldobject = repo[oldobject].node()
3035
a3a154e49bba legacy: rename lookup_errors to not be in all caps (flake8 warning)
Anton Shestakov <av6@dwimlabs.net>
parents: 2464
diff changeset
   136
                        except lookup_errors:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   137
                            pass
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   138
                    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
   139
                        try:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   140
                            oldsubjects = [repo[s].node() for s in oldsubjects]
3035
a3a154e49bba legacy: rename lookup_errors to not be in all caps (flake8 warning)
Anton Shestakov <av6@dwimlabs.net>
parents: 2464
diff changeset
   141
                        except lookup_errors:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   142
                            pass
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
   143
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   144
                    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
   145
                    meta = dict((k.encode('utf-8'), v.encode('utf-8'))
2032
dd7e092a854a flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2025
diff changeset
   146
                                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
   147
                    try:
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   148
                        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
   149
                        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
   150
                        store.create(tr, bin(oldobject), succs,
1061
f3867e60d072 compat: always call metadata as a keyword argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 519
diff changeset
   151
                                     0, metadata=meta)
341
7653f80fd7a4 obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 340
diff changeset
   152
                        cnt += 1
7653f80fd7a4 obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 340
diff changeset
   153
                    except ValueError:
2032
dd7e092a854a flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2025
diff changeset
   154
                        msg = "invalid marker %s -> %s\n"
dd7e092a854a flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2025
diff changeset
   155
                        msg %= (oldobject, oldsubjects)
dd7e092a854a flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2025
diff changeset
   156
                        repo.ui.write_err(msg)
341
7653f80fd7a4 obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 340
diff changeset
   157
                        err += 1
2070
9105c3c54045 cleanup: stop using 'repo.join' methods
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2051
diff changeset
   158
                unlink.append(repo.svfs.join('obsoletemarkers'))
361
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   159
            tr.close()
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   160
            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
   161
                util.unlink(path)
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   162
        finally:
ac7969043677 obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents: 360
diff changeset
   163
            tr.release()
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
   164
    finally:
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
   165
        del repo._importoldobsolete
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
   166
        l.release()
334
fb83210bce32 obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 332
diff changeset
   167
    if not some:
1550
e47dda53a5c2 check-code: make obsolete.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents: 1465
diff changeset
   168
        ui.warn(_('nothing to do\n'))
224
f60555898df4 new obsolete store
Pierre-Yves.David@ens-lyon.org
parents: 218
diff changeset
   169
    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
   170
    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
   171
        ui.write_err('%i conversion failed. check you graph!\n' % err)
2122
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   172
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   173
@command('debugrecordpruneparents', [], '')
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   174
def cmddebugrecordpruneparents(ui, repo):
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   175
    """add parent data to prune markers when possible
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   176
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   177
    This command searches the repo for prune markers without parent information.
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   178
    If the pruned node is locally known, it creates a new marker with parent
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   179
    data.
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   180
    """
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   181
    pgop = 'reading markers'
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   182
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   183
    # lock from the beginning to prevent race
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   184
    wlock = lock = tr = None
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   185
    try:
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   186
        wlock = repo.wlock()
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   187
        lock = repo.lock()
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   188
        tr = repo.transaction('recordpruneparents')
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   189
        unfi = repo.unfiltered()
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   190
        nm = unfi.changelog.nodemap
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   191
        store = repo.obsstore
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   192
        pgtotal = len(store._all)
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   193
        for idx, mark in enumerate(list(store._all)):
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   194
            if not mark[1]:
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   195
                rev = nm.get(mark[0])
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   196
                if rev is not None:
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   197
                    ctx = unfi[rev]
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   198
                    parents = tuple(p.node() for p in ctx.parents())
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   199
                    before = len(store._all)
2273
228111491788 legacy: fix debugrecordpruneparents to call obsstore.create() with keywords
Yuya Nishihara <yuya@tcha.org>
parents: 2122
diff changeset
   200
                    store.create(tr, prec=mark[0], succs=mark[1], flag=mark[2],
228111491788 legacy: fix debugrecordpruneparents to call obsstore.create() with keywords
Yuya Nishihara <yuya@tcha.org>
parents: 2122
diff changeset
   201
                                 metadata=dict(mark[3]), parents=parents)
2122
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   202
                    if len(store._all) - before:
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   203
                        ui.write(_('created new markers for %i\n') % rev)
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   204
            ui.progress(pgop, idx, total=pgtotal)
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   205
        tr.close()
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   206
        ui.progress(pgop, None)
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   207
    finally:
efc6633e78e1 legacy: move 'debugrecordpruneparents' in the extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2070
diff changeset
   208
        lockmod.release(tr, lock, wlock)