Mercurial > hg
annotate hgext/convert/filemap.py @ 43956:a447efd991b9
verify: update comment to say that lfs doesn't need fulltext to check renames
The reason is that `filelog.renamed()` indirectly calls `filelog.revision()`,
which is what accesses the full text. However, LFS wraps `filelog.renamed()`
and completely handles the case where an LFS blob is in play by using rawdata.
I've got a test to demonstrate that this is the case, and prevent regressions.
But the `skipread` flag is set on all lfs revisions when using `--no-lfs`,
regardless of whether or not the blobs are local. Just above this, that flag is
consulted, causing the rename checks to be skipped. That will need to be
loosened up first.
Differential Revision: https://phab.mercurial-scm.org/D7709
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 22 Dec 2019 00:47:33 -0500 |
parents | 649d3ac37a12 |
children | 89a2afe31e82 |
rev | line source |
---|---|
5376
d60a067227a5
convert: move filemapper class to a separate file
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5375
diff
changeset
|
1 # Copyright 2007 Bryan O'Sullivan <bos@serpentine.com> |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
2 # Copyright 2007 Alexis S. L. Carvalho <alexis@cecm.usp.br> |
316 | 3 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8150
diff
changeset
|
4 # This software may be used and distributed according to the terms of the |
10263 | 5 # GNU General Public License version 2 or any later version. |
34137
a8994d08e4a2
doctest: use print_function and convert bytes to unicode where needed
Yuya Nishihara <yuya@tcha.org>
parents:
34131
diff
changeset
|
6 |
a8994d08e4a2
doctest: use print_function and convert bytes to unicode where needed
Yuya Nishihara <yuya@tcha.org>
parents:
34131
diff
changeset
|
7 from __future__ import absolute_import, print_function |
316 | 8 |
17797
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
9 import posixpath |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28367
diff
changeset
|
10 |
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28367
diff
changeset
|
11 from mercurial.i18n import _ |
28367
58b176240df6
convert: filemap use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
12 from mercurial import ( |
58b176240df6
convert: filemap use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
13 error, |
36560
41c0e7b7869c
convert: fix two %r output formats with pycompat.bytestr() wrapping
Augie Fackler <augie@google.com>
parents:
36559
diff
changeset
|
14 pycompat, |
28367
58b176240df6
convert: filemap use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
15 ) |
58b176240df6
convert: filemap use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
16 from . import common |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
17 |
28367
58b176240df6
convert: filemap use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
18 SKIPREV = common.SKIPREV |
694 | 19 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
20 |
20048
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
21 def rpairs(path): |
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
22 '''Yield tuples with path split at '/', starting with the full path. |
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
23 No leading, trailing or double '/', please. |
34137
a8994d08e4a2
doctest: use print_function and convert bytes to unicode where needed
Yuya Nishihara <yuya@tcha.org>
parents:
34131
diff
changeset
|
24 >>> for x in rpairs(b'foo/bar/baz'): print(x) |
20048
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
25 ('foo/bar/baz', '') |
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
26 ('foo/bar', 'baz') |
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
27 ('foo', 'bar/baz') |
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
28 ('.', 'foo/bar/baz') |
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
29 ''' |
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
30 i = len(path) |
da99ebd35f00
convert: readability and test of rpairs function
Mads Kiilerich <madski@unity3d.com>
parents:
19892
diff
changeset
|
31 while i != -1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
32 yield path[:i], path[i + 1 :] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
33 i = path.rfind(b'/', 0, i) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
34 yield b'.', path |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
35 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
36 |
17797
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
37 def normalize(path): |
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
38 ''' We use posixpath.normpath to support cross-platform path format. |
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
39 However, it doesn't handle None input. So we wrap it up. ''' |
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
40 if path is None: |
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
41 return None |
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
42 return posixpath.normpath(path) |
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
43 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
44 |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
45 class filemapper(object): |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
46 '''Map and filter filenames when importing. |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
47 A name can be mapped to itself, a new name, or None (omit from new |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
48 repository).''' |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
49 |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
50 def __init__(self, ui, path=None): |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
51 self.ui = ui |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
52 self.include = {} |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
53 self.exclude = {} |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
54 self.rename = {} |
26036
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
55 self.targetprefixes = None |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
56 if path: |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
57 if self.parse(path): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
58 raise error.Abort(_(b'errors in filemap')) |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
59 |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
60 def parse(self, path): |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
61 errs = 0 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
62 |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
63 def check(name, mapping, listname): |
11680
7fefef3ce791
convert: warn on superfluous / in paths
Mads Kiilerich <mads@kiilerich.com>
parents:
11673
diff
changeset
|
64 if not name: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
65 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
66 _(b'%s:%d: path to %s is missing\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
67 % (lex.infile, lex.lineno, listname) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
68 ) |
11680
7fefef3ce791
convert: warn on superfluous / in paths
Mads Kiilerich <mads@kiilerich.com>
parents:
11673
diff
changeset
|
69 return 1 |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
70 if name in mapping: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
71 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
72 _(b'%s:%d: %r already in %s list\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
73 % (lex.infile, lex.lineno, name, listname) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
74 ) |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
75 return 1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
76 if name.startswith(b'/') or name.endswith(b'/') or b'//' in name: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
77 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
78 _(b'%s:%d: superfluous / in %s %r\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
79 % (lex.infile, lex.lineno, listname, pycompat.bytestr(name)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
80 ) |
11680
7fefef3ce791
convert: warn on superfluous / in paths
Mads Kiilerich <mads@kiilerich.com>
parents:
11673
diff
changeset
|
81 return 1 |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
82 return 0 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
83 |
36559
5374a22d014a
convert: use our shlex wrapper in filemap to avoid Python 3 tracebacks
Augie Fackler <augie@google.com>
parents:
36132
diff
changeset
|
84 lex = common.shlexer( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
85 filepath=path, wordchars=b'!@#$%^&*()-=+[]{}|;:,./<>?' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
86 ) |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
87 cmd = lex.get_token() |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
88 while cmd: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
89 if cmd == b'include': |
17797
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
90 name = normalize(lex.get_token()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
91 errs += check(name, self.exclude, b'exclude') |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
92 self.include[name] = name |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
93 elif cmd == b'exclude': |
17797
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
94 name = normalize(lex.get_token()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
95 errs += check(name, self.include, b'include') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
96 errs += check(name, self.rename, b'rename') |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
97 self.exclude[name] = name |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
98 elif cmd == b'rename': |
17797
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
99 src = normalize(lex.get_token()) |
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
100 dest = normalize(lex.get_token()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
101 errs += check(src, self.exclude, b'exclude') |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
102 self.rename[src] = dest |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
103 elif cmd == b'source': |
17797
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
104 errs += self.parse(normalize(lex.get_token())) |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
105 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
106 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
107 _(b'%s:%d: unknown directive %r\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
108 % (lex.infile, lex.lineno, pycompat.bytestr(cmd)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
109 ) |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
110 errs += 1 |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
111 cmd = lex.get_token() |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
112 return errs |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
113 |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
114 def lookup(self, name, mapping): |
17797
e4da793998bf
convert: normalize paths in filemaps (issue3612)
Huayang <huayang@fb.com>
parents:
17184
diff
changeset
|
115 name = normalize(name) |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
116 for pre, suf in rpairs(name): |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
117 try: |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
118 return mapping[pre], pre, suf |
7875
553aa0cbeab6
cleanup: drop unused assignments
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
5803
diff
changeset
|
119 except KeyError: |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
120 pass |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
121 return b'', name, b'' |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5139
diff
changeset
|
122 |
26036
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
123 def istargetfile(self, filename): |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
124 """Return true if the given target filename is covered as a destination |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
125 of the filemap. This is useful for identifying what parts of the target |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
126 repo belong to the source repo and what parts don't.""" |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
127 if self.targetprefixes is None: |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
128 self.targetprefixes = set() |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
129 for before, after in pycompat.iteritems(self.rename): |
26036
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
130 self.targetprefixes.add(after) |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
131 |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
132 # If "." is a target, then all target files are considered from the |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
133 # source. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
134 if not self.targetprefixes or b'.' in self.targetprefixes: |
26036
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
135 return True |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
136 |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
137 filename = normalize(filename) |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
138 for pre, suf in rpairs(filename): |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
139 # This check is imperfect since it doesn't account for the |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
140 # include/exclude list, but it should work in filemaps that don't |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
141 # apply include/exclude to the same source directories they are |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
142 # renaming. |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
143 if pre in self.targetprefixes: |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
144 return True |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
145 return False |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
146 |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
147 def __call__(self, name): |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
148 if self.include: |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
149 inc = self.lookup(name, self.include)[0] |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
150 else: |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
151 inc = name |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
152 if self.exclude: |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
153 exc = self.lookup(name, self.exclude)[0] |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
154 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
155 exc = b'' |
9884
2dd700a35fd1
convert: make filemap favor most specific filtering rule
Stefan Simek <simek@triaxis.sk>
parents:
8693
diff
changeset
|
156 if (not self.include and exc) or (len(inc) <= len(exc)): |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
157 return None |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
158 newpre, pre, suf = self.lookup(name, self.rename) |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
159 if newpre: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
160 if newpre == b'.': |
5133
745cffe59ca8
convert: use '.' as destination name if renaming subdir into root
Bryan O'Sullivan <bos@serpentine.com>
parents:
5127
diff
changeset
|
161 return suf |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
162 if suf: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
163 if newpre.endswith(b'/'): |
15565
3992c7df85f2
convert: handle trailing slashes in filemap better (issue3124)
Matt Mackall <mpm@selenic.com>
parents:
15107
diff
changeset
|
164 return newpre + suf |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 return newpre + b'/' + suf |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
166 return newpre |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
167 return name |
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
168 |
5195
33015dac5df5
convert: fix mercurial_sink.putcommit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5173
diff
changeset
|
169 def active(self): |
33015dac5df5
convert: fix mercurial_sink.putcommit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5173
diff
changeset
|
170 return bool(self.include or self.exclude or self.rename) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
171 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
172 |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
173 # This class does two additional things compared to a regular source: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
174 # |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
175 # - Filter and rename files. This is mostly wrapped by the filemapper |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
176 # class above. We hide the original filename in the revision that is |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
177 # returned by getchanges to be able to find things later in getfile. |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
178 # |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
179 # - Return only revisions that matter for the files we're interested in. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
180 # This involves rewriting the parents of the original revision to |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
181 # create a graph that is restricted to those revisions. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
182 # |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
183 # This set of revisions includes not only revisions that directly |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
184 # touch files we're interested in, but also merges that merge two |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
185 # or more interesting revisions. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
186 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
187 |
28367
58b176240df6
convert: filemap use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
188 class filemap_source(common.converter_source): |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
189 def __init__(self, ui, baseconverter, filemap): |
35176
671aba341d90
convert: save an indicator of the repo type for sources and sinks
Matt Harbison <matt_harbison@yahoo.com>
parents:
34137
diff
changeset
|
190 super(filemap_source, self).__init__(ui, baseconverter.repotype) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
191 self.base = baseconverter |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
192 self.filemapper = filemapper(ui, filemap) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
193 self.commits = {} |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
194 # if a revision rev has parent p in the original revision graph, then |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
195 # rev will have parent self.parentmap[p] in the restricted graph. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
196 self.parentmap = {} |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
197 # self.wantedancestors[rev] is the set of all ancestors of rev that |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
198 # are in the restricted graph. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
199 self.wantedancestors = {} |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
200 self.convertedorder = None |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
201 self._rebuilt = False |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
202 self.origparents = {} |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
203 self.children = {} |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
204 self.seenchildren = {} |
25742
d859123e0f47
convert: add config option for disabling ancestor parent checks
Durham Goode <durham@fb.com>
parents:
25149
diff
changeset
|
205 # experimental config: convert.ignoreancestorcheck |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
206 self.ignoreancestorcheck = self.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
207 b'convert', b'ignoreancestorcheck' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
208 ) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
209 |
5799
4b82d1a84db8
convert: filemap must call base converter before()/after() actions
Patrick Mezard <pmezard@gmail.com>
parents:
5401
diff
changeset
|
210 def before(self): |
4b82d1a84db8
convert: filemap must call base converter before()/after() actions
Patrick Mezard <pmezard@gmail.com>
parents:
5401
diff
changeset
|
211 self.base.before() |
4b82d1a84db8
convert: filemap must call base converter before()/after() actions
Patrick Mezard <pmezard@gmail.com>
parents:
5401
diff
changeset
|
212 |
4b82d1a84db8
convert: filemap must call base converter before()/after() actions
Patrick Mezard <pmezard@gmail.com>
parents:
5401
diff
changeset
|
213 def after(self): |
4b82d1a84db8
convert: filemap must call base converter before()/after() actions
Patrick Mezard <pmezard@gmail.com>
parents:
5401
diff
changeset
|
214 self.base.after() |
4b82d1a84db8
convert: filemap must call base converter before()/after() actions
Patrick Mezard <pmezard@gmail.com>
parents:
5401
diff
changeset
|
215 |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5401
diff
changeset
|
216 def setrevmap(self, revmap): |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
217 # rebuild our state to make things restartable |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
218 # |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
219 # To avoid calling getcommit for every revision that has already |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
220 # been converted, we rebuild only the parentmap, delaying the |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
221 # rebuild of wantedancestors until we need it (i.e. until a |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
222 # merge). |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
223 # |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
224 # We assume the order argument lists the revisions in |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
225 # topological order, so that we can infer which revisions were |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
226 # wanted by previous runs. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
227 self._rebuilt = not revmap |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
228 seen = {SKIPREV: SKIPREV} |
8150
bbc24c0753a0
util: use built-in set and frozenset
Martin Geisler <mg@lazybytes.net>
parents:
7875
diff
changeset
|
229 dummyset = set() |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
230 converted = [] |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5401
diff
changeset
|
231 for rev in revmap.order: |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
232 mapped = revmap[rev] |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
233 wanted = mapped not in seen |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
234 if wanted: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
235 seen[mapped] = rev |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
236 self.parentmap[rev] = rev |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
237 else: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
238 self.parentmap[rev] = seen[mapped] |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
239 self.wantedancestors[rev] = dummyset |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
240 arg = seen[mapped] |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
241 if arg == SKIPREV: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
242 arg = None |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
243 converted.append((rev, wanted, arg)) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
244 self.convertedorder = converted |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5401
diff
changeset
|
245 return self.base.setrevmap(revmap) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
246 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
247 def rebuild(self): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
248 if self._rebuilt: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
249 return True |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
250 self._rebuilt = True |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
251 self.parentmap.clear() |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
252 self.wantedancestors.clear() |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
253 self.seenchildren.clear() |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
254 for rev, wanted, arg in self.convertedorder: |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
255 if rev not in self.origparents: |
19863
daeab82fa644
convert: fix crash when existing converted revision didn't come from source
Mads Kiilerich <madski@unity3d.com>
parents:
19862
diff
changeset
|
256 try: |
daeab82fa644
convert: fix crash when existing converted revision didn't come from source
Mads Kiilerich <madski@unity3d.com>
parents:
19862
diff
changeset
|
257 self.origparents[rev] = self.getcommit(rev).parents |
daeab82fa644
convert: fix crash when existing converted revision didn't come from source
Mads Kiilerich <madski@unity3d.com>
parents:
19862
diff
changeset
|
258 except error.RepoLookupError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
259 self.ui.debug(b"unknown revmap source: %s\n" % rev) |
19863
daeab82fa644
convert: fix crash when existing converted revision didn't come from source
Mads Kiilerich <madski@unity3d.com>
parents:
19862
diff
changeset
|
260 continue |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
261 if arg is not None: |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
262 self.children[arg] = self.children.get(arg, 0) + 1 |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
263 |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
264 for rev, wanted, arg in self.convertedorder: |
19863
daeab82fa644
convert: fix crash when existing converted revision didn't come from source
Mads Kiilerich <madski@unity3d.com>
parents:
19862
diff
changeset
|
265 try: |
daeab82fa644
convert: fix crash when existing converted revision didn't come from source
Mads Kiilerich <madski@unity3d.com>
parents:
19862
diff
changeset
|
266 parents = self.origparents[rev] |
daeab82fa644
convert: fix crash when existing converted revision didn't come from source
Mads Kiilerich <madski@unity3d.com>
parents:
19862
diff
changeset
|
267 except KeyError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
268 continue # unknown revmap source |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
269 if wanted: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
270 self.mark_wanted(rev, parents) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
271 else: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
272 self.mark_not_wanted(rev, arg) |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
273 self._discard(arg, *parents) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
274 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
275 return True |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
276 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
277 def getheads(self): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
278 return self.base.getheads() |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
279 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
280 def getcommit(self, rev): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
281 # We want to save a reference to the commit objects to be able |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
282 # to rewrite their parents later on. |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
283 c = self.commits[rev] = self.base.getcommit(rev) |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
284 for p in c.parents: |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
285 self.children[p] = self.children.get(p, 0) + 1 |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
286 return c |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
287 |
41179
77088fa862df
convert: add missing numcommits() override to hg sources
Matt Harbison <matt_harbison@yahoo.com>
parents:
36560
diff
changeset
|
288 def numcommits(self): |
77088fa862df
convert: add missing numcommits() override to hg sources
Matt Harbison <matt_harbison@yahoo.com>
parents:
36560
diff
changeset
|
289 return self.base.numcommits() |
77088fa862df
convert: add missing numcommits() override to hg sources
Matt Harbison <matt_harbison@yahoo.com>
parents:
36560
diff
changeset
|
290 |
13968
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
291 def _cachedcommit(self, rev): |
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
292 if rev in self.commits: |
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
293 return self.commits[rev] |
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
294 return self.base.getcommit(rev) |
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
295 |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
296 def _discard(self, *revs): |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
297 for r in revs: |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
298 if r is None: |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
299 continue |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
300 self.seenchildren[r] = self.seenchildren.get(r, 0) + 1 |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
301 if self.seenchildren[r] == self.children[r]: |
19862
42455ebbab9f
convert: fix crash when filemap filtering is changed
Mads Kiilerich <madski@unity3d.com>
parents:
17797
diff
changeset
|
302 self.wantedancestors.pop(r, None) |
42455ebbab9f
convert: fix crash when filemap filtering is changed
Mads Kiilerich <madski@unity3d.com>
parents:
17797
diff
changeset
|
303 self.parentmap.pop(r, None) |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
304 del self.seenchildren[r] |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
305 if self._rebuilt: |
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
306 del self.children[r] |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
307 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
308 def wanted(self, rev, i): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
309 # Return True if we're directly interested in rev. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
310 # |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
311 # i is an index selecting one of the parents of rev (if rev |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
312 # has no parents, i is None). getchangedfiles will give us |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
313 # the list of files that are different in rev and in the parent |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
314 # indicated by i. If we're interested in any of these files, |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
315 # we're interested in rev. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
316 try: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
317 files = self.base.getchangedfiles(rev, i) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
318 except NotImplementedError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
319 raise error.Abort(_(b"source repository doesn't support --filemap")) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
320 for f in files: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
321 if self.filemapper(f): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
322 return True |
41180
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
323 |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
324 # The include directive is documented to include nothing else (though |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
325 # valid branch closes are included). |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
326 if self.filemapper.include: |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
327 return False |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
328 |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
329 # Allow empty commits in the source revision through. The getchanges() |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
330 # method doesn't even bother calling this if it determines that the |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
331 # close marker is significant (i.e. all of the branch ancestors weren't |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
332 # eliminated). Therefore if there *is* a close marker, getchanges() |
69804c040a04
convert: don't drop commits that are empty in the source when using --filemap
Matt Harbison <matt_harbison@yahoo.com>
parents:
41179
diff
changeset
|
333 # doesn't consider it significant, and this revision should be dropped. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
334 return not files and b'close' not in self.commits[rev].extra |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
335 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
336 def mark_not_wanted(self, rev, p): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
337 # Mark rev as not interesting and update data structures. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
338 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
339 if p is None: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
340 # A root revision. Use SKIPREV to indicate that it doesn't |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
341 # map to any revision in the restricted graph. Put SKIPREV |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
342 # in the set of wanted ancestors to simplify code elsewhere |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
343 self.parentmap[rev] = SKIPREV |
32291
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
29205
diff
changeset
|
344 self.wantedancestors[rev] = {SKIPREV} |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
345 return |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
346 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
347 # Reuse the data from our parent. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
348 self.parentmap[rev] = self.parentmap[p] |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
349 self.wantedancestors[rev] = self.wantedancestors[p] |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
350 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
351 def mark_wanted(self, rev, parents): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
352 # Mark rev ss wanted and update data structures. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
353 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
354 # rev will be in the restricted graph, so children of rev in |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
355 # the original graph should still have rev as a parent in the |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
356 # restricted graph. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
357 self.parentmap[rev] = rev |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
358 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
359 # The set of wanted ancestors of rev is the union of the sets |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
360 # of wanted ancestors of its parents. Plus rev itself. |
8150
bbc24c0753a0
util: use built-in set and frozenset
Martin Geisler <mg@lazybytes.net>
parents:
7875
diff
changeset
|
361 wrev = set() |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
362 for p in parents: |
19862
42455ebbab9f
convert: fix crash when filemap filtering is changed
Mads Kiilerich <madski@unity3d.com>
parents:
17797
diff
changeset
|
363 if p in self.wantedancestors: |
42455ebbab9f
convert: fix crash when filemap filtering is changed
Mads Kiilerich <madski@unity3d.com>
parents:
17797
diff
changeset
|
364 wrev.update(self.wantedancestors[p]) |
42455ebbab9f
convert: fix crash when filemap filtering is changed
Mads Kiilerich <madski@unity3d.com>
parents:
17797
diff
changeset
|
365 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
366 self.ui.warn( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
367 _(b'warning: %s parent %s is missing\n') % (rev, p) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
368 ) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
369 wrev.add(rev) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
370 self.wantedancestors[rev] = wrev |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
371 |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
20048
diff
changeset
|
372 def getchanges(self, rev, full): |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
373 parents = self.commits[rev].parents |
25742
d859123e0f47
convert: add config option for disabling ancestor parent checks
Durham Goode <durham@fb.com>
parents:
25149
diff
changeset
|
374 if len(parents) > 1 and not self.ignoreancestorcheck: |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
375 self.rebuild() |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
376 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
377 # To decide whether we're interested in rev we: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
378 # |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
379 # - calculate what parents rev will have if it turns out we're |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
380 # interested in it. If it's going to have more than 1 parent, |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
381 # we're interested in it. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
382 # |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
383 # - otherwise, we'll compare it with the single parent we found. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
384 # If any of the files we're interested in is different in the |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
385 # the two revisions, we're interested in rev. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
386 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
387 # A parent p is interesting if its mapped version (self.parentmap[p]): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
388 # - is not SKIPREV |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
389 # - is still not in the list of parents (we don't want duplicates) |
17103
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
390 # - is not an ancestor of the mapped versions of the other parents or |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
391 # there is no parent in the same branch than the current revision. |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
392 mparents = [] |
17103
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
393 knownparents = set() |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
394 branch = self.commits[rev].branch |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
395 hasbranchparent = False |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
396 for i, p1 in enumerate(parents): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
397 mp1 = self.parentmap[p1] |
17103
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
398 if mp1 == SKIPREV or mp1 in knownparents: |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
399 continue |
25742
d859123e0f47
convert: add config option for disabling ancestor parent checks
Durham Goode <durham@fb.com>
parents:
25149
diff
changeset
|
400 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
401 isancestor = not self.ignoreancestorcheck and any( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
402 p2 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
403 for p2 in parents |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
404 if p1 != p2 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
405 and mp1 != self.parentmap[p2] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
406 and mp1 in self.wantedancestors[p2] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41180
diff
changeset
|
407 ) |
17103
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
408 if not isancestor and not hasbranchparent and len(parents) > 1: |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
409 # This could be expensive, avoid unnecessary calls. |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
410 if self._cachedcommit(p1).branch == branch: |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
411 hasbranchparent = True |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
412 mparents.append((p1, mp1, i, isancestor)) |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
413 knownparents.add(mp1) |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
414 # Discard parents ancestors of other parents if there is a |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
415 # non-ancestor one on the same branch than current revision. |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
416 if hasbranchparent: |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
417 mparents = [p for p in mparents if not p[3]] |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
418 wp = None |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
419 if mparents: |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
420 wp = max(p[2] for p in mparents) |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
421 mparents = [p[1] for p in mparents] |
5146de7bce96
convert: keep branch switching merges with ancestors (issue3340)
Patrick Mezard <patrick@mezard.eu>
parents:
15565
diff
changeset
|
422 elif parents: |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
423 wp = 0 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
424 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
425 self.origparents[rev] = parents |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
426 |
13968
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
427 closed = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
428 if b'close' in self.commits[rev].extra: |
13968
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
429 # A branch closing revision is only useful if one of its |
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
430 # parents belong to the branch being closed |
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
431 pbranches = [self._cachedcommit(p).branch for p in mparents] |
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
432 if branch in pbranches: |
82845434e974
convert: make filemap prune useless branch closing revs (issue2774)
Patrick Mezard <pmezard@gmail.com>
parents:
11680
diff
changeset
|
433 closed = True |
11673
a2f11188e2d2
convert: handle closed branch heads in hg-hg conversion (issue2185)
Matt Mackall <mpm@selenic.com>
parents:
11134
diff
changeset
|
434 |
a2f11188e2d2
convert: handle closed branch heads in hg-hg conversion (issue2185)
Matt Mackall <mpm@selenic.com>
parents:
11134
diff
changeset
|
435 if len(mparents) < 2 and not closed and not self.wanted(rev, wp): |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
436 # We don't want this revision. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
437 # Update our state and tell the convert process to map this |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
438 # revision to the same revision its parent as mapped to. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
439 p = None |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
440 if parents: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
441 p = parents[wp] |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
442 self.mark_not_wanted(rev, p) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
443 self.convertedorder.append((rev, False, p)) |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
444 self._discard(*parents) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
445 return self.parentmap[rev] |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
446 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
447 # We want this revision. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
448 # Rewrite the parents of the commit object |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
449 self.commits[rev].parents = mparents |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
450 self.mark_wanted(rev, parents) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
451 self.convertedorder.append((rev, True, None)) |
5401
4c555dd167dd
convert --filemap: reduce memory usage
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
452 self._discard(*parents) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
453 |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
454 # Get the real changes and do the filtering/mapping. To be |
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
455 # able to get the files later on in getfile, we hide the |
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
456 # original filename in the rev part of the return value. |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
457 changes, copies, cleanp2 = self.base.getchanges(rev, full) |
17174
32b2e6d641e4
convert: make filemap renames consistently override revision renames
Wagner Bruna <wbruna@yahoo.com>
parents:
15565
diff
changeset
|
458 files = {} |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
459 ncleanp2 = set(cleanp2) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
460 for f, r in changes: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
461 newf = self.filemapper(f) |
17174
32b2e6d641e4
convert: make filemap renames consistently override revision renames
Wagner Bruna <wbruna@yahoo.com>
parents:
15565
diff
changeset
|
462 if newf and (newf != f or newf not in files): |
32b2e6d641e4
convert: make filemap renames consistently override revision renames
Wagner Bruna <wbruna@yahoo.com>
parents:
15565
diff
changeset
|
463 files[newf] = (f, r) |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
464 if newf != f: |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
465 ncleanp2.discard(f) |
17174
32b2e6d641e4
convert: make filemap renames consistently override revision renames
Wagner Bruna <wbruna@yahoo.com>
parents:
15565
diff
changeset
|
466 files = sorted(files.items()) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
467 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
468 ncopies = {} |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
469 for c in copies: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
470 newc = self.filemapper(c) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
471 if newc: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
472 newsource = self.filemapper(copies[c]) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
473 if newsource: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
474 ncopies[newc] = newsource |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
475 |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
476 return files, ncopies, ncleanp2 |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
477 |
26036
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
478 def targetfilebelongstosource(self, targetfilename): |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
479 return self.filemapper.istargetfile(targetfilename) |
db677b70a298
convert: implements targetfilebelongstosource for filemap source
Durham Goode <durham@fb.com>
parents:
25742
diff
changeset
|
480 |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
481 def getfile(self, name, rev): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
482 realname, realrev = rev |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
483 return self.base.getfile(realname, realrev) |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
484 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
485 def gettags(self): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
486 return self.base.gettags() |
8691
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8225
diff
changeset
|
487 |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8225
diff
changeset
|
488 def hasnativeorder(self): |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8225
diff
changeset
|
489 return self.base.hasnativeorder() |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
490 |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
491 def lookuprev(self, rev): |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
492 return self.base.lookuprev(rev) |
15107
2433525a9e1e
convert: added bookmarks support in filemap
etienne <etienne.desautels@gmail.com>
parents:
13968
diff
changeset
|
493 |
2433525a9e1e
convert: added bookmarks support in filemap
etienne <etienne.desautels@gmail.com>
parents:
13968
diff
changeset
|
494 def getbookmarks(self): |
2433525a9e1e
convert: added bookmarks support in filemap
etienne <etienne.desautels@gmail.com>
parents:
13968
diff
changeset
|
495 return self.base.getbookmarks() |
19892
77872b002e73
convert: update source shamap when using filemap, just as when not using filemap
Mads Kiilerich <madski@unity3d.com>
parents:
19863
diff
changeset
|
496 |
77872b002e73
convert: update source shamap when using filemap, just as when not using filemap
Mads Kiilerich <madski@unity3d.com>
parents:
19863
diff
changeset
|
497 def converted(self, rev, sinkrev): |
77872b002e73
convert: update source shamap when using filemap, just as when not using filemap
Mads Kiilerich <madski@unity3d.com>
parents:
19863
diff
changeset
|
498 self.base.converted(rev, sinkrev) |