Mercurial > hg
annotate hgext/convert/hg.py @ 46602:a687a7f27951
rust: Move config value parsing functions to a new module
Differential Revision: https://phab.mercurial-scm.org/D10021
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Wed, 17 Feb 2021 20:24:04 +0100 |
parents | 59fa3890d40a |
children | d4ba4d51f85f |
rev | line source |
---|---|
8250
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
1 # hg.py - hg backend for convert extension |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
2 # |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
4 # |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
7 |
5556
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
8 # Notes for hg->hg conversion: |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
9 # |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
10 # * Old versions of Mercurial didn't trim the whitespace from the ends |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
11 # of commit messages, but new versions do. Changesets created by |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
12 # those older versions, then converted, may thus have different |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
13 # hashes for changesets that are otherwise identical. |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
14 # |
8596
a58a95e523aa
convert/hg: update documentation
Patrick Mezard <pmezard@gmail.com>
parents:
8495
diff
changeset
|
15 # * Using "--config convert.hg.saverev=true" will make the source |
a58a95e523aa
convert/hg: update documentation
Patrick Mezard <pmezard@gmail.com>
parents:
8495
diff
changeset
|
16 # identifier to be stored in the converted revision. This will cause |
a58a95e523aa
convert/hg: update documentation
Patrick Mezard <pmezard@gmail.com>
parents:
8495
diff
changeset
|
17 # the converted revision to have a different identity than the |
a58a95e523aa
convert/hg: update documentation
Patrick Mezard <pmezard@gmail.com>
parents:
8495
diff
changeset
|
18 # source. |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
19 from __future__ import absolute_import |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
20 |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
21 import os |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
22 import re |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
23 import time |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
24 |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28900
diff
changeset
|
25 from mercurial.i18n import _ |
43085
eef9a2d67051
py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
26 from mercurial.pycompat import open |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
27 from mercurial.node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
28 bin, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
29 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
30 nullhex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
31 nullid, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
32 ) |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
33 from mercurial import ( |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
34 bookmarks, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
35 context, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
36 error, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
37 exchange, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
38 hg, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
39 lock as lockmod, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
40 merge as mergemod, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
41 phases, |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
42 pycompat, |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
43 scmutil, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
44 util, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
45 ) |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
36340
diff
changeset
|
46 from mercurial.utils import dateutil |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
47 |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28370
diff
changeset
|
48 stringio = util.stringio |
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28370
diff
changeset
|
49 |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
50 from . import common |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
51 |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
52 mapfile = common.mapfile |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
53 NoRepo = common.NoRepo |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
54 |
36134
2a28bdb63f05
convert: make hg sha1 regex consistently be a bytes
Augie Fackler <augie@google.com>
parents:
36132
diff
changeset
|
55 sha1re = re.compile(br'\b[0-9a-f]{12,40}\b') |
20372
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
56 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
57 |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
58 class mercurial_sink(common.converter_sink): |
35176
671aba341d90
convert: save an indicator of the repo type for sources and sinks
Matt Harbison <matt_harbison@yahoo.com>
parents:
34172
diff
changeset
|
59 def __init__(self, ui, repotype, path): |
671aba341d90
convert: save an indicator of the repo type for sources and sinks
Matt Harbison <matt_harbison@yahoo.com>
parents:
34172
diff
changeset
|
60 common.converter_sink.__init__(self, ui, repotype, path) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
61 self.branchnames = ui.configbool(b'convert', b'hg.usebranchnames') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
62 self.clonebranches = ui.configbool(b'convert', b'hg.clonebranches') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
63 self.tagsbranch = ui.config(b'convert', b'hg.tagsbranch') |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
64 self.lastbranch = None |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
65 if os.path.isdir(path) and len(os.listdir(path)) > 0: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
66 try: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
67 self.repo = hg.repository(self.ui, path) |
5918
1716c8a0bd09
convert: mercurial sink must be local
Patrick Mezard <pmezard@gmail.com>
parents:
5522
diff
changeset
|
68 if not self.repo.local(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
69 raise NoRepo( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
70 _(b'%s is not a local Mercurial repository') % path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
71 ) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25589
diff
changeset
|
72 except error.RepoError as err: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
73 ui.traceback() |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
74 raise NoRepo(err.args[0]) |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
75 else: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
76 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
77 ui.status(_(b'initializing destination %s repository\n') % path) |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
78 self.repo = hg.repository(self.ui, path, create=True) |
5918
1716c8a0bd09
convert: mercurial sink must be local
Patrick Mezard <pmezard@gmail.com>
parents:
5522
diff
changeset
|
79 if not self.repo.local(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
80 raise NoRepo( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
81 _(b'%s is not a local Mercurial repository') % path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
82 ) |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
83 self.created.append(path) |
7875
553aa0cbeab6
cleanup: drop unused assignments
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7874
diff
changeset
|
84 except error.RepoError: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
85 ui.traceback() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
86 raise NoRepo( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
87 _(b"could not create hg repository %s as sink") % path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
88 ) |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
89 self.lock = None |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
90 self.wlock = None |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
91 self.filemapmode = False |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
92 self.subrevmaps = {} |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
93 |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
94 def before(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
95 self.ui.debug(b'run hg sink pre-conversion action\n') |
5052
a11e8a181bd5
convert: fix locking order
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5038
diff
changeset
|
96 self.wlock = self.repo.wlock() |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
97 self.lock = self.repo.lock() |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
98 |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
99 def after(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
100 self.ui.debug(b'run hg sink post-conversion action\n') |
10086
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
101 if self.lock: |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
102 self.lock.release() |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
103 if self.wlock: |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
104 self.wlock.release() |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
105 |
5011
89fbb0a5e8e3
convert: rename mapfile to revmapfile, so we can map more than just revs
Bryan O'Sullivan <bos@serpentine.com>
parents:
4965
diff
changeset
|
106 def revmapfile(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
107 return self.repo.vfs.join(b"shamap") |
316 | 108 |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
109 def authorfile(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 return self.repo.vfs.join(b"authormap") |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
111 |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
112 def setbranch(self, branch, pbranches): |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
113 if not self.clonebranches: |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
114 return |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
115 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
116 setbranch = branch != self.lastbranch |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
117 self.lastbranch = branch |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
118 if not branch: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
119 branch = b'default' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
120 pbranches = [(b[0], b[1] and b[1] or b'default') for b in pbranches] |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
121 |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
122 branchpath = os.path.join(self.path, branch) |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
123 if setbranch: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
124 self.after() |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
125 try: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
126 self.repo = hg.repository(self.ui, branchpath) |
16689
f366d4c2ff34
cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
127 except Exception: |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
128 self.repo = hg.repository(self.ui, branchpath, create=True) |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
129 self.before() |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
130 |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
131 # pbranches may bring revisions from other branches (merge parents) |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
132 # Make sure we have them, or pull them. |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
133 missings = {} |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
134 for b in pbranches: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
135 try: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
136 self.repo.lookup(b[0]) |
16689
f366d4c2ff34
cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
137 except Exception: |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
138 missings.setdefault(b[1], []).append(b[0]) |
6210
942287cb1f57
Removed trailing spaces from everything except test output
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5959
diff
changeset
|
139 |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
140 if missings: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
141 self.after() |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
142 for pbranch, heads in sorted(pycompat.iteritems(missings)): |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
143 pbranchpath = os.path.join(self.path, pbranch) |
14556
517e1d88bf7e
hg: change various repository() users to use peer() where appropriate
Matt Mackall <mpm@selenic.com>
parents:
14151
diff
changeset
|
144 prepo = hg.peer(self.ui, {}, pbranchpath) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 self.ui.note( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 _(b'pulling from %s into %s\n') % (pbranch, branch) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
147 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
148 exchange.pull( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
149 self.repo, prepo, [prepo.lookup(h) for h in heads] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
150 ) |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
151 self.before() |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
152 |
21076
5236c7a72a2d
convert: backout b75a04502ced and 9616b03113ce - tagmap
Mads Kiilerich <madski@unity3d.com>
parents:
20397
diff
changeset
|
153 def _rewritetags(self, source, revmap, data): |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28370
diff
changeset
|
154 fp = stringio() |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
155 for line in data.splitlines(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
156 s = line.split(b' ', 1) |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
157 if len(s) != 2: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 self.ui.warn(_(b'invalid tag entry: "%s"\n') % line) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
159 fp.write(b'%s\n' % line) # Bogus, but keep for hash stability |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
160 continue |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
161 revid = revmap.get(source.lookuprev(s[0])) |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
162 if not revid: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
163 if s[0] == nullhex: |
25305
884ef09cf658
convert: properly pass null ids through .hgtags (issue4678)
Matt Mackall <mpm@selenic.com>
parents:
24395
diff
changeset
|
164 revid = s[0] |
884ef09cf658
convert: properly pass null ids through .hgtags (issue4678)
Matt Mackall <mpm@selenic.com>
parents:
24395
diff
changeset
|
165 else: |
39021
7e023ce26c7f
convert: don't drop missing or corrupt tag entries
Matt Harbison <matt_harbison@yahoo.com>
parents:
37579
diff
changeset
|
166 # missing, but keep for hash stability |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
167 self.ui.warn(_(b'missing tag entry: "%s"\n') % line) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
168 fp.write(b'%s\n' % line) |
25305
884ef09cf658
convert: properly pass null ids through .hgtags (issue4678)
Matt Mackall <mpm@selenic.com>
parents:
24395
diff
changeset
|
169 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
170 fp.write(b'%s %s\n' % (revid, s[1])) |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
171 return fp.getvalue() |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
172 |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
173 def _rewritesubstate(self, source, data): |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28370
diff
changeset
|
174 fp = stringio() |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
175 for line in data.splitlines(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
176 s = line.split(b' ', 1) |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
177 if len(s) != 2: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
178 continue |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
179 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
180 revid = s[0] |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
181 subpath = s[1] |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
182 if revid != nullhex: |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
183 revmap = self.subrevmaps.get(subpath) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
184 if revmap is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
185 revmap = mapfile( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
186 self.ui, self.repo.wjoin(subpath, b'.hg/shamap') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
187 ) |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
188 self.subrevmaps[subpath] = revmap |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
189 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
190 # It is reasonable that one or more of the subrepos don't |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
191 # need to be converted, in which case they can be cloned |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
192 # into place instead of converted. Therefore, only warn |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
193 # once. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
194 msg = _(b'no ".hgsubstate" updates will be made for "%s"\n') |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
195 if len(revmap) == 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
196 sub = self.repo.wvfs.reljoin(subpath, b'.hg') |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
197 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
198 if self.repo.wvfs.exists(sub): |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
199 self.ui.warn(msg % subpath) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
200 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
201 newid = revmap.get(revid) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
202 if not newid: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
203 if len(revmap) > 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
204 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
205 _(b"%s is missing from %s/.hg/shamap\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
206 % (revid, subpath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
207 ) |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
208 else: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
209 revid = newid |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
210 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
211 fp.write(b'%s %s\n' % (revid, subpath)) |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
212 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
213 return fp.getvalue() |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
214 |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
215 def _calculatemergedfiles(self, source, p1ctx, p2ctx): |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
216 """Calculates the files from p2 that we need to pull in when merging p1 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
217 and p2, given that the merge is coming from the given source. |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
218 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
219 This prevents us from losing files that only exist in the target p2 and |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
220 that don't come from the source repo (like if you're merging multiple |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
221 repositories together). |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
222 """ |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
223 anc = [p1ctx.ancestor(p2ctx)] |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
224 # Calculate what files are coming from p2 |
45275
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
225 # TODO: mresult.commitinfo might be able to get that info |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
226 mresult = mergemod.calculateupdates( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
227 self.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
228 p1ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
229 p2ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
230 anc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
231 branchmerge=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
232 force=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
233 acceptremote=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
234 followcopies=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
235 ) |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
236 |
45346
3c783ff08d40
mergeresult: introduce filemap() which yields filename based mapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45275
diff
changeset
|
237 for file, (action, info, msg) in mresult.filemap(): |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
238 if source.targetfilebelongstosource(file): |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
239 # If the file belongs to the source repo, ignore the p2 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
240 # since it will be covered by the existing fileset. |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
241 continue |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
242 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
243 # If the file requires actual merging, abort. We don't have enough |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
244 # context to resolve merges correctly. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
245 if action in [b'm', b'dm', b'cd', b'dc']: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
246 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
247 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
248 b"unable to convert merge commit " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
249 b"since target parents do not merge cleanly (file " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
250 b"%s, parents %s and %s)" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
251 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
252 % (file, p1ctx, p2ctx) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
253 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
254 elif action == b'k': |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
255 # 'keep' means nothing changed from p1 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
256 continue |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
257 else: |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
258 # Any other change means we want to take the p2 version |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
259 yield file |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
260 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
261 def putcommit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
262 self, files, copies, parents, commit, source, revmap, full, cleanp2 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
263 ): |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
264 files = dict(files) |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
265 |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
266 def getfilectx(repo, memctx, f): |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
267 if p2ctx and f in p2files and f not in copies: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 self.ui.debug(b'reusing %s from p2\n' % f) |
26078
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
269 try: |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
270 return p2ctx[f] |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
271 except error.ManifestLookupError: |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
272 # If the file doesn't exist in p2, then we're syncing a |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
273 # delete, so just return None. |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
274 return None |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
275 try: |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
276 v = files[f] |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
277 except KeyError: |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
278 return None |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
279 data, mode = source.getfile(f, v) |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
21765
diff
changeset
|
280 if data is None: |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
21765
diff
changeset
|
281 return None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
282 if f == b'.hgtags': |
21076
5236c7a72a2d
convert: backout b75a04502ced and 9616b03113ce - tagmap
Mads Kiilerich <madski@unity3d.com>
parents:
20397
diff
changeset
|
283 data = self._rewritetags(source, revmap, data) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
284 if f == b'.hgsubstate': |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
285 data = self._rewritesubstate(source, data) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
286 return context.memfilectx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
287 self.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
288 memctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
289 f, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
290 data, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
291 b'l' in mode, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
292 b'x' in mode, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
293 copies.get(f), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
294 ) |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
295 |
431 | 296 pl = [] |
297 for p in parents: | |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
298 if p not in pl: |
431 | 299 pl.append(p) |
300 parents = pl | |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
301 nparents = len(parents) |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
302 if self.filemapmode and nparents == 1: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
303 m1node = self.repo.changelog.read(bin(parents[0]))[0] |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
304 parent = parents[0] |
316 | 305 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
306 if len(parents) < 2: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
307 parents.append(nullid) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
308 if len(parents) < 2: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
309 parents.append(nullid) |
431 | 310 p2 = parents.pop(0) |
692
695dd9a491da
convert-repo: deal with packed git and other fixes
mpm@selenic.com
parents:
450
diff
changeset
|
311 |
3954
9af4b853ed4d
convert-repo: add CVS branch support
Matt Mackall <mpm@selenic.com>
parents:
3953
diff
changeset
|
312 text = commit.desc |
20372
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
313 |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
314 sha1s = re.findall(sha1re, text) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
315 for sha1 in sha1s: |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
316 oldrev = source.lookuprev(sha1) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
317 newrev = revmap.get(oldrev) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
318 if newrev is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
319 text = text.replace(sha1, newrev[: len(sha1)]) |
20372
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
320 |
5439
d0c67b52ac01
convert: make contents of "extra" dict available from sources, for sinks.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5437
diff
changeset
|
321 extra = commit.extra.copy() |
21765
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
322 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
323 sourcename = self.repo.ui.config(b'convert', b'hg.sourcename') |
25750
c9093d4d1ff6
convert: add config for recording the source name
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
324 if sourcename: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
325 extra[b'convert_source'] = sourcename |
25750
c9093d4d1ff6
convert: add config for recording the source name
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
326 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
327 for label in ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
328 b'source', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
329 b'transplant_source', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
330 b'rebase_source', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
331 b'intermediate-source', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
332 ): |
21765
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
333 node = extra.get(label) |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
334 |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
335 if node is None: |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
336 continue |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
337 |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
338 # Only transplant stores its reference in binary |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
339 if label == b'transplant_source': |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
340 node = hex(node) |
21765
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
341 |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
342 newrev = revmap.get(node) |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
343 if newrev is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
344 if label == b'transplant_source': |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
345 newrev = bin(newrev) |
21765
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
346 |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
347 extra[label] = newrev |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
348 |
5038
8f157190075e
convert: add config option to turn off use of branch names
Bryan O'Sullivan <bos@serpentine.com>
parents:
5017
diff
changeset
|
349 if self.branchnames and commit.branch: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
350 extra[b'branch'] = commit.branch |
25570
7cc1d33f0ba6
convert: always track the hg source revision in the internal commit object
Matt Harbison <matt_harbison@yahoo.com>
parents:
25558
diff
changeset
|
351 if commit.rev and commit.saverev: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
352 extra[b'convert_revision'] = commit.rev |
4957
cdd33a048289
removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4873
diff
changeset
|
353 |
431 | 354 while parents: |
355 p1 = p2 | |
356 p2 = parents.pop(0) | |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
357 p1ctx = self.repo[p1] |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
358 p2ctx = None |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
359 if p2 != nullid: |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
360 p2ctx = self.repo[p2] |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
361 fileset = set(files) |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
362 if full: |
22360
3e483253213e
convert: don't use multi-argument set.update
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
363 fileset.update(self.repo[p1]) |
3e483253213e
convert: don't use multi-argument set.update
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
364 fileset.update(self.repo[p2]) |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
365 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
366 if p2ctx: |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
367 p2files = set(cleanp2) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
368 for file in self._calculatemergedfiles(source, p1ctx, p2ctx): |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
369 p2files.add(file) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
370 fileset.add(file) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
371 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
372 ctx = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
373 self.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
374 (p1, p2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
375 text, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
376 fileset, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
377 getfilectx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
378 commit.author, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
379 commit.date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
380 extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
381 ) |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
382 |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
383 # We won't know if the conversion changes the node until after the |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
384 # commit, so copy the source's phase for now. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
385 self.repo.ui.setconfig( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
386 b'phases', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
387 b'new-commit', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
388 phases.phasenames[commit.phase], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
389 b'convert', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
390 ) |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
391 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
392 with self.repo.transaction(b"convert") as tr: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
393 if self.repo.ui.config(b'convert', b'hg.preserve-hash'): |
42620
d98ec36be808
convert: add a config option to help doing identity hg->hg conversion
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
41771
diff
changeset
|
394 origctx = commit.ctx |
d98ec36be808
convert: add a config option to help doing identity hg->hg conversion
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
41771
diff
changeset
|
395 else: |
d98ec36be808
convert: add a config option to help doing identity hg->hg conversion
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
41771
diff
changeset
|
396 origctx = None |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
397 node = hex(self.repo.commitctx(ctx, origctx=origctx)) |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
398 |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
399 # If the node value has changed, but the phase is lower than |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
400 # draft, set it back to draft since it hasn't been exposed |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
401 # anywhere. |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
402 if commit.rev != node: |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
403 ctx = self.repo[node] |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
404 if ctx.phase() < phases.draft: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
405 phases.registernew( |
45790
5d65e04b6a80
phases: convert registernew users to use revision sets
Joerg Sonnenberger <joerg@bec.de>
parents:
45346
diff
changeset
|
406 self.repo, tr, phases.draft, [ctx.rev()] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
407 ) |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
408 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
409 text = b"(octopus merge fixup)\n" |
25697
1538e72209fd
convert: fix bug with converting the same commit twice
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
410 p2 = node |
431 | 411 |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
412 if self.filemapmode and nparents == 1: |
39244
73cf21b2e8a6
manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39021
diff
changeset
|
413 man = self.repo.manifestlog.getstorage(b'') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
414 mnode = self.repo.changelog.read(bin(p2))[0] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
415 closed = b'close' in commit.extra |
11673
a2f11188e2d2
convert: handle closed branch heads in hg-hg conversion (issue2185)
Matt Mackall <mpm@selenic.com>
parents:
11134
diff
changeset
|
416 if not closed and not man.cmp(m1node, man.revision(mnode)): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
417 self.ui.status(_(b"filtering out empty revision\n")) |
15193
a84e3ed661cb
convert: fix crazy rollback call, broken by recent rollback safety checks
Matt Mackall <mpm@selenic.com>
parents:
15069
diff
changeset
|
418 self.repo.rollback(force=True) |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
419 return parent |
1389
9b3ef6f3cef5
convert-repo: fix up octopus merge conversion
Matt Mackall <mpm@selenic.com>
parents:
1388
diff
changeset
|
420 return p2 |
316 | 421 |
694 | 422 def puttags(self, tags): |
37395
810413b745ff
convert: look up branch only among branches
Martin von Zweigbergk <martinvonz@google.com>
parents:
37394
diff
changeset
|
423 tagparent = self.repo.branchtip(self.tagsbranch, ignoremissing=True) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
424 tagparent = tagparent or nullid |
694 | 425 |
20376
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
426 oldlines = set() |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
427 for branch, heads in pycompat.iteritems(self.repo.branchmap()): |
20376
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
428 for h in heads: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
429 if b'.hgtags' in self.repo[h]: |
20376
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
430 oldlines.update( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
431 set(self.repo[h][b'.hgtags'].data().splitlines(True)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
432 ) |
20376
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
433 oldlines = sorted(list(oldlines)) |
694 | 434 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
435 newlines = sorted([(b"%s %s\n" % (tags[tag], tag)) for tag in tags]) |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
436 if newlines == oldlines: |
9431
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
437 return None, None |
20377
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
438 |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
439 # if the old and new tags match, then there is nothing to update |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
440 oldtags = set() |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
441 newtags = set() |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
442 for line in oldlines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
443 s = line.strip().split(b' ', 1) |
20377
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
444 if len(s) != 2: |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
445 continue |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
446 oldtags.add(s[1]) |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
447 for line in newlines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
448 s = line.strip().split(b' ', 1) |
20377
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
449 if len(s) != 2: |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
450 continue |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
451 if s[1] not in oldtags: |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
452 newtags.add(s[1].strip()) |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
453 |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
454 if not newtags: |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
455 return None, None |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
456 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
457 data = b"".join(newlines) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
458 |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
459 def getfilectx(repo, memctx, f): |
35400
8a0cac20a1ad
memfilectx: make changectx argument mandatory in constructor (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
35176
diff
changeset
|
460 return context.memfilectx(repo, memctx, f, data, False, False, None) |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
461 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
462 self.ui.status(_(b"updating tags\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
463 date = b"%d 0" % int(time.mktime(time.gmtime())) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
464 extra = {b'branch': self.tagsbranch} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
465 ctx = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
466 self.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
467 (tagparent, None), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
468 b"update tags", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
469 [b".hgtags"], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
470 getfilectx, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
471 b"convert-repo", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
472 date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
473 extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
474 ) |
25697
1538e72209fd
convert: fix bug with converting the same commit twice
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
475 node = self.repo.commitctx(ctx) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
476 return hex(node), hex(tagparent) |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
477 |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
478 def setfilemapmode(self, active): |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
479 self.filemapmode = active |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
480 |
13746
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
481 def putbookmarks(self, updatedbookmark): |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
482 if not len(updatedbookmark): |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
483 return |
26974
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
484 wlock = lock = tr = None |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
485 try: |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
486 wlock = self.repo.wlock() |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
487 lock = self.repo.lock() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
488 tr = self.repo.transaction(b'bookmark') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
489 self.ui.status(_(b"updating bookmarks\n")) |
26973
fdd63acf3215
convert: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26587
diff
changeset
|
490 destmarks = self.repo._bookmarks |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
491 changes = [ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
492 (bookmark, bin(updatedbookmark[bookmark])) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
493 for bookmark in updatedbookmark |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
494 ] |
33487
a050d37c2c70
bookmark: use 'applychanges' in the convert extension
Boris Feld <boris.feld@octobus.net>
parents:
33455
diff
changeset
|
495 destmarks.applychanges(self.repo, tr, changes) |
26974
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
496 tr.close() |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
497 finally: |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
498 lockmod.release(lock, wlock, tr) |
13746
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
499 |
21635
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
500 def hascommitfrommap(self, rev): |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
501 # the exact semantics of clonebranches is unclear so we can't say no |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
502 return rev in self.repo or self.clonebranches |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
503 |
21634
23b24d6a70c8
convert: rename sink hascommit to hascommitforsplicemap
Mads Kiilerich <madski@unity3d.com>
parents:
21498
diff
changeset
|
504 def hascommitforsplicemap(self, rev): |
16686
67964cda8701
cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
505 if rev not in self.repo and self.clonebranches: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
506 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
507 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
508 b'revision %s not found in destination ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
509 b'repository (lookups with clonebranches=true ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
510 b'are not implemented)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
511 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
512 % rev |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
513 ) |
16106
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
15193
diff
changeset
|
514 return rev in self.repo |
13746
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
515 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
516 |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
517 class mercurial_source(common.converter_source): |
35176
671aba341d90
convert: save an indicator of the repo type for sources and sinks
Matt Harbison <matt_harbison@yahoo.com>
parents:
34172
diff
changeset
|
518 def __init__(self, ui, repotype, path, revs=None): |
671aba341d90
convert: save an indicator of the repo type for sources and sinks
Matt Harbison <matt_harbison@yahoo.com>
parents:
34172
diff
changeset
|
519 common.converter_source.__init__(self, ui, repotype, path, revs) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
520 self.ignoreerrors = ui.configbool(b'convert', b'hg.ignoreerrors') |
8456
e9e2a2c9b294
convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8250
diff
changeset
|
521 self.ignored = set() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
522 self.saverev = ui.configbool(b'convert', b'hg.saverev') |
5358
4fbd27bf04b1
convert: fail properly if we can't read a source hg repository
Bryan O'Sullivan <bos@serpentine.com>
parents:
5352
diff
changeset
|
523 try: |
4fbd27bf04b1
convert: fail properly if we can't read a source hg repository
Bryan O'Sullivan <bos@serpentine.com>
parents:
5352
diff
changeset
|
524 self.repo = hg.repository(self.ui, path) |
5437
4d34f8b12a9e
convert: report errors more meaningfully if run with --traceback
Bryan O'Sullivan <bos@serpentine.com>
parents:
5402
diff
changeset
|
525 # try to provoke an exception if this isn't really a hg |
4d34f8b12a9e
convert: report errors more meaningfully if run with --traceback
Bryan O'Sullivan <bos@serpentine.com>
parents:
5402
diff
changeset
|
526 # repo, but some other bogus compatible-looking url |
5522
f5345a2d2391
convert: make sure mercurial_source has a local hg repo
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5521
diff
changeset
|
527 if not self.repo.local(): |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16686
diff
changeset
|
528 raise error.RepoError |
7637 | 529 except error.RepoError: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
530 ui.traceback() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
531 raise NoRepo(_(b"%s is not a local Mercurial repository") % path) |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
532 self.lastrev = None |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
533 self.lastctx = None |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
534 self._changescache = None, None |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
535 self.convertfp = None |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
536 # Restrict converted revisions to startrev descendants |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
537 startnode = ui.config(b'convert', b'hg.startrev') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
538 hgrevs = ui.config(b'convert', b'hg.revs') |
19891
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
539 if hgrevs is None: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
540 if startnode is not None: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
541 try: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
542 startnode = self.repo.lookup(startnode) |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
543 except error.RepoError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
544 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
545 _(b'%s is not a valid start revision') % startnode |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
546 ) |
19891
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
547 startrev = self.repo.changelog.rev(startnode) |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
548 children = {startnode: 1} |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
549 for r in self.repo.changelog.descendants([startrev]): |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
550 children[self.repo.changelog.node(r)] = 1 |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
551 self.keep = children.__contains__ |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
552 else: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
553 self.keep = util.always |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25697
diff
changeset
|
554 if revs: |
37361
e45545f7895e
convert: use repo.lookup() for converting to nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
36607
diff
changeset
|
555 self._heads = [self.repo.lookup(r) for r in revs] |
19891
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
556 else: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
557 self._heads = self.repo.heads() |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
558 else: |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25697
diff
changeset
|
559 if revs or startnode is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
560 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
561 _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
562 b'hg.revs cannot be combined with ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
563 b'hg.startrev or --rev' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
564 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
565 ) |
19891
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
566 nodes = set() |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
567 parents = set() |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
568 for r in scmutil.revrange(self.repo, [hgrevs]): |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
569 ctx = self.repo[r] |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
570 nodes.add(ctx.node()) |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
571 parents.update(p.node() for p in ctx.parents()) |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
572 self.keep = nodes.__contains__ |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
573 self._heads = nodes - parents |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
574 |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
575 def _changectx(self, rev): |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
576 if self.lastrev != rev: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6717
diff
changeset
|
577 self.lastctx = self.repo[rev] |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
578 self.lastrev = rev |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
579 return self.lastctx |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
580 |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
581 def _parents(self, ctx): |
9531
a2f36a082449
convert/hg: make parents() return changectx, not nodes
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
582 return [p for p in ctx.parents() if p and self.keep(p.node())] |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
583 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
584 def getheads(self): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
585 return [hex(h) for h in self._heads if self.keep(h)] |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
586 |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
587 def getfile(self, name, rev): |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
588 try: |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
589 fctx = self._changectx(rev)[name] |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
590 return fctx.data(), fctx.flags() |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
21765
diff
changeset
|
591 except error.LookupError: |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
21765
diff
changeset
|
592 return None, None |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
593 |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
594 def _changedfiles(self, ctx1, ctx2): |
27719
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
595 ma, r = [], [] |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
596 maappend = ma.append |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
597 rappend = r.append |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
598 d = ctx1.manifest().diff(ctx2.manifest()) |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
599 for f, ((node1, flag1), (node2, flag2)) in pycompat.iteritems(d): |
27719
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
600 if node2 is None: |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
601 rappend(f) |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
602 else: |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
603 maappend(f) |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
604 return ma, r |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
605 |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
606 def getchanges(self, rev, full): |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
607 ctx = self._changectx(rev) |
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
608 parents = self._parents(ctx) |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
609 if full or not parents: |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
610 files = copyfiles = ctx.manifest() |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
611 if parents: |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
612 if self._changescache[0] == rev: |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
613 ma, r = self._changescache[1] |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
614 else: |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
615 ma, r = self._changedfiles(parents[0], ctx) |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
616 if not full: |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
617 files = ma + r |
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
618 copyfiles = ma |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
619 # _getcopies() is also run for roots and before filtering so missing |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
620 # revlogs are detected early |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
621 copies = self._getcopies(ctx, parents, copyfiles) |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
622 cleanp2 = set() |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
623 if len(parents) == 2: |
27719
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
624 d = parents[1].manifest().diff(ctx.manifest(), clean=True) |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
625 for f, value in pycompat.iteritems(d): |
27719
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
626 if value is None: |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
627 cleanp2.add(f) |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
628 changes = [(f, rev) for f in files if f not in self.ignored] |
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
629 changes.sort() |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
630 return changes, copies, cleanp2 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
631 |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
632 def _getcopies(self, ctx, parents, files): |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
633 copies = {} |
5280
11e1e574da02
convert: mercurial_source: also search for copies in modified files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5279
diff
changeset
|
634 for name in files: |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
635 if name in self.ignored: |
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
636 continue |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
637 try: |
41771
1312afae2d51
convert: migrate to new method for getting copy source
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
638 copysource = ctx.filectx(name).copysource() |
19457
948df0f10ec1
convert: fix bad conversion of copies when hg.startrev is specified
Mads Kiilerich <madski@unity3d.com>
parents:
19120
diff
changeset
|
639 if copysource in self.ignored: |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
640 continue |
9532
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
641 # Ignore copy sources not in parent revisions |
36340
06464d1ce6cd
convert: don't reimplement any()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36148
diff
changeset
|
642 if not any(copysource in p for p in parents): |
9532
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
643 continue |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
644 copies[name] = copysource |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
645 except TypeError: |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
646 pass |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25589
diff
changeset
|
647 except error.LookupError as e: |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
648 if not self.ignoreerrors: |
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
649 raise |
8456
e9e2a2c9b294
convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8250
diff
changeset
|
650 self.ignored.add(name) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
651 self.ui.warn(_(b'ignoring: %s\n') % e) |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
652 return copies |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5131
diff
changeset
|
653 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
654 def getcommit(self, rev): |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
655 ctx = self._changectx(rev) |
28900
b65966f50058
convert: keep converted hg parents that are outside convert.hg.revs (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
28861
diff
changeset
|
656 _parents = self._parents(ctx) |
b65966f50058
convert: keep converted hg parents that are outside convert.hg.revs (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
28861
diff
changeset
|
657 parents = [p.hex() for p in _parents] |
b65966f50058
convert: keep converted hg parents that are outside convert.hg.revs (BC)
Mads Kiilerich <madski@unity3d.com>
parents:
28861
diff
changeset
|
658 optparents = [p.hex() for p in ctx.parents() if p and p not in _parents] |
25570
7cc1d33f0ba6
convert: always track the hg source revision in the internal commit object
Matt Harbison <matt_harbison@yahoo.com>
parents:
25558
diff
changeset
|
659 crev = rev |
7cc1d33f0ba6
convert: always track the hg source revision in the internal commit object
Matt Harbison <matt_harbison@yahoo.com>
parents:
25558
diff
changeset
|
660 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
661 return common.commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
662 author=ctx.user(), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
663 date=dateutil.datestr(ctx.date(), b'%Y-%m-%d %H:%M:%S %1%2'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
664 desc=ctx.description(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
665 rev=crev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
666 parents=parents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
667 optparents=optparents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
668 branch=ctx.branch(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
669 extra=ctx.extra(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
670 sortkey=ctx.rev(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
671 saverev=self.saverev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
672 phase=ctx.phase(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
673 ctx=ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
674 ) |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
675 |
41179
77088fa862df
convert: add missing numcommits() override to hg sources
Matt Harbison <matt_harbison@yahoo.com>
parents:
39244
diff
changeset
|
676 def numcommits(self): |
77088fa862df
convert: add missing numcommits() override to hg sources
Matt Harbison <matt_harbison@yahoo.com>
parents:
39244
diff
changeset
|
677 return len(self.repo) |
77088fa862df
convert: add missing numcommits() override to hg sources
Matt Harbison <matt_harbison@yahoo.com>
parents:
39244
diff
changeset
|
678 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
679 def gettags(self): |
21498
6b8daeea638a
convert: mercurial source: convert global tags only - not local tags
Mads Kiilerich <madski@unity3d.com>
parents:
21076
diff
changeset
|
680 # This will get written to .hgtags, filter non global tags out. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
681 tags = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
682 t |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
683 for t in self.repo.tagslist() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
684 if self.repo.tagtype(t[0]) == b'global' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
685 ] |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
686 return {name: hex(node) for name, node in tags if self.keep(node)} |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
687 |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
688 def getchangedfiles(self, rev, i): |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
689 ctx = self._changectx(rev) |
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
690 parents = self._parents(ctx) |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
691 if not parents and i is None: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
692 i = 0 |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
693 ma, r = ctx.manifest().keys(), [] |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
694 else: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
695 i = i or 0 |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
696 ma, r = self._changedfiles(parents[i], ctx) |
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
697 ma, r = [[f for f in l if f not in self.ignored] for l in (ma, r)] |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
698 |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
699 if i == 0: |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
700 self._changescache = (rev, (ma, r)) |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
701 |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
702 return ma + r |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
703 |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
704 def converted(self, rev, destrev): |
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
705 if self.convertfp is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
706 self.convertfp = open(self.repo.vfs.join(b'shamap'), b'ab') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
707 self.convertfp.write(util.tonativeeol(b'%s %s\n' % (destrev, rev))) |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
708 self.convertfp.flush() |
5805
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
709 |
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
710 def before(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
711 self.ui.debug(b'run hg source pre-conversion action\n') |
5805
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
712 |
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
713 def after(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
714 self.ui.debug(b'run hg source post-conversion action\n') |
8691
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
715 |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
716 def hasnativeorder(self): |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
717 return True |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
718 |
18819
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
18373
diff
changeset
|
719 def hasnativeclose(self): |
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
18373
diff
changeset
|
720 return True |
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
18373
diff
changeset
|
721 |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
722 def lookuprev(self, rev): |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
723 try: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
724 return hex(self.repo.lookup(rev)) |
23926
fea3416f2440
convert: handle LookupError in mercurial_source.lookuprev()
Matt Harbison <matt_harbison@yahoo.com>
parents:
22698
diff
changeset
|
725 except (error.RepoError, error.LookupError): |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
726 return None |
13757
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
727 |
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
728 def getbookmarks(self): |
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
729 return bookmarks.listbookmarks(self.repo) |
19120
58e782f076e7
splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents:
18819
diff
changeset
|
730 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
731 def checkrevformat(self, revstr, mapname=b'splicemap'): |
19120
58e782f076e7
splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents:
18819
diff
changeset
|
732 """ Mercurial, revision string is a 40 byte hex """ |
20373
e8203629371b
convert: add mapname parameter to checkrevformat
Sean Farley <sean.michael.farley@gmail.com>
parents:
20372
diff
changeset
|
733 self.checkhexformat(revstr, mapname) |