author | Gregory Szorc <gregory.szorc@gmail.com> |
Thu, 06 May 2021 08:37:40 -0700 | |
changeset 47207 | 41be7698a4fd |
parent 47128 | bea4717415c0 |
child 48116 | 5ced12cfa41b |
permissions | -rw-r--r-- |
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 |
# |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
46113
diff
changeset
|
3 |
# Copyright 2005-2009 Olivia Mackall <olivia@selenic.com> and others |
8250
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, |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
30 |
sha1nodeconstants, |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
31 |
) |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
32 |
from mercurial import ( |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
33 |
bookmarks, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
34 |
context, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
35 |
error, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
36 |
exchange, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
37 |
hg, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
38 |
lock as lockmod, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
39 |
merge as mergemod, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
40 |
phases, |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
41 |
pycompat, |
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
42 |
scmutil, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
43 |
util, |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
44 |
) |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
36340
diff
changeset
|
45 |
from mercurial.utils import dateutil |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
46 |
|
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28370
diff
changeset
|
47 |
stringio = util.stringio |
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28370
diff
changeset
|
48 |
|
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
49 |
from . import common |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
50 |
|
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
51 |
mapfile = common.mapfile |
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
52 |
NoRepo = common.NoRepo |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
53 |
|
36134
2a28bdb63f05
convert: make hg sha1 regex consistently be a bytes
Augie Fackler <augie@google.com>
parents:
36132
diff
changeset
|
54 |
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
|
55 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
56 |
|
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
57 |
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
|
58 |
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
|
59 |
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
|
60 |
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
|
61 |
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
|
62 |
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
|
63 |
self.lastbranch = None |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
64 |
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
|
65 |
try: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
66 |
self.repo = hg.repository(self.ui, path) |
5918
1716c8a0bd09
convert: mercurial sink must be local
Patrick Mezard <pmezard@gmail.com>
parents:
5522
diff
changeset
|
67 |
if not self.repo.local(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
68 |
raise NoRepo( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
69 |
_(b'%s is not a local Mercurial repository') % path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
70 |
) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25589
diff
changeset
|
71 |
except error.RepoError as err: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
72 |
ui.traceback() |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
73 |
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
|
74 |
else: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
75 |
try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
76 |
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
|
77 |
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
|
78 |
if not self.repo.local(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
79 |
raise NoRepo( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
80 |
_(b'%s is not a local Mercurial repository') % path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
81 |
) |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
82 |
self.created.append(path) |
7875
553aa0cbeab6
cleanup: drop unused assignments
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7874
diff
changeset
|
83 |
except error.RepoError: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
84 |
ui.traceback() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
85 |
raise NoRepo( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
86 |
_(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
|
87 |
) |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
88 |
self.lock = None |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
89 |
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
|
90 |
self.filemapmode = False |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
91 |
self.subrevmaps = {} |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
92 |
|
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
93 |
def before(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
94 |
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
|
95 |
self.wlock = self.repo.wlock() |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
96 |
self.lock = self.repo.lock() |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
97 |
|
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
98 |
def after(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
99 |
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
|
100 |
if self.lock: |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
101 |
self.lock.release() |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
102 |
if self.wlock: |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
103 |
self.wlock.release() |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
104 |
|
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
|
105 |
def revmapfile(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
106 |
return self.repo.vfs.join(b"shamap") |
316 | 107 |
|
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
108 |
def authorfile(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
109 |
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
|
110 |
|
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
111 |
def setbranch(self, branch, pbranches): |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
112 |
if not self.clonebranches: |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
113 |
return |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
114 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
115 |
setbranch = branch != self.lastbranch |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
116 |
self.lastbranch = branch |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
117 |
if not branch: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
118 |
branch = b'default' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
119 |
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
|
120 |
|
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
121 |
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
|
122 |
if setbranch: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
123 |
self.after() |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
124 |
try: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
125 |
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
|
126 |
except Exception: |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
127 |
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
|
128 |
self.before() |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
129 |
|
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
130 |
# 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
|
131 |
# 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
|
132 |
missings = {} |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
133 |
for b in pbranches: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
134 |
try: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
135 |
self.repo.lookup(b[0]) |
16689
f366d4c2ff34
cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
136 |
except Exception: |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
137 |
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
|
138 |
|
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
139 |
if missings: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
140 |
self.after() |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
141 |
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
|
142 |
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
|
143 |
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
|
144 |
self.ui.note( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 |
_(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
|
146 |
) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
147 |
exchange.pull( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
148 |
self.repo, prepo, [prepo.lookup(h) for h in heads] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
149 |
) |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
150 |
self.before() |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
151 |
|
21076
5236c7a72a2d
convert: backout b75a04502ced and 9616b03113ce - tagmap
Mads Kiilerich <madski@unity3d.com>
parents:
20397
diff
changeset
|
152 |
def _rewritetags(self, source, revmap, data): |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28370
diff
changeset
|
153 |
fp = stringio() |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
154 |
for line in data.splitlines(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
155 |
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
|
156 |
if len(s) != 2: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
157 |
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
|
158 |
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
|
159 |
continue |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
160 |
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
|
161 |
if not revid: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
162 |
if s[0] == sha1nodeconstants.nullhex: |
25305
884ef09cf658
convert: properly pass null ids through .hgtags (issue4678)
Matt Mackall <mpm@selenic.com>
parents:
24395
diff
changeset
|
163 |
revid = s[0] |
884ef09cf658
convert: properly pass null ids through .hgtags (issue4678)
Matt Mackall <mpm@selenic.com>
parents:
24395
diff
changeset
|
164 |
else: |
39021
7e023ce26c7f
convert: don't drop missing or corrupt tag entries
Matt Harbison <matt_harbison@yahoo.com>
parents:
37579
diff
changeset
|
165 |
# 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
|
166 |
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
|
167 |
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
|
168 |
continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
169 |
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
|
170 |
return fp.getvalue() |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
171 |
|
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
172 |
def _rewritesubstate(self, source, data): |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28370
diff
changeset
|
173 |
fp = stringio() |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
174 |
for line in data.splitlines(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
175 |
s = line.split(b' ', 1) |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
176 |
if len(s) != 2: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
177 |
continue |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
178 |
|
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
179 |
revid = s[0] |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
180 |
subpath = s[1] |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
181 |
if revid != sha1nodeconstants.nullhex: |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
182 |
revmap = self.subrevmaps.get(subpath) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
183 |
if revmap is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
184 |
revmap = mapfile( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
185 |
self.ui, self.repo.wjoin(subpath, b'.hg/shamap') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
186 |
) |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
187 |
self.subrevmaps[subpath] = revmap |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
188 |
|
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
189 |
# 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
|
190 |
# 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
|
191 |
# 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
|
192 |
# once. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
193 |
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
|
194 |
if len(revmap) == 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
195 |
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
|
196 |
|
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
197 |
if self.repo.wvfs.exists(sub): |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
198 |
self.ui.warn(msg % subpath) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
199 |
|
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
200 |
newid = revmap.get(revid) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
201 |
if not newid: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
202 |
if len(revmap) > 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
203 |
self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
204 |
_(b"%s is missing from %s/.hg/shamap\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
205 |
% (revid, subpath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
206 |
) |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
207 |
else: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
208 |
revid = newid |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
209 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
210 |
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
|
211 |
|
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
212 |
return fp.getvalue() |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
213 |
|
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
214 |
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
|
215 |
"""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
|
216 |
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
|
217 |
|
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
218 |
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
|
219 |
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
|
220 |
repositories together). |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
221 |
""" |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
222 |
anc = [p1ctx.ancestor(p2ctx)] |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
223 |
# Calculate what files are coming from p2 |
45275
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
224 |
# 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
|
225 |
mresult = mergemod.calculateupdates( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
226 |
self.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
227 |
p1ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
228 |
p2ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
229 |
anc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
230 |
branchmerge=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
231 |
force=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
232 |
acceptremote=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
233 |
followcopies=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
234 |
) |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
235 |
|
45346
3c783ff08d40
mergeresult: introduce filemap() which yields filename based mapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45275
diff
changeset
|
236 |
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
|
237 |
if source.targetfilebelongstosource(file): |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
238 |
# 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
|
239 |
# 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
|
240 |
continue |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
241 |
|
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
242 |
# 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
|
243 |
# context to resolve merges correctly. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
244 |
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
|
245 |
raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
246 |
_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
247 |
b"unable to convert merge commit " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
248 |
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
|
249 |
b"%s, parents %s and %s)" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
250 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
251 |
% (file, p1ctx, p2ctx) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
252 |
) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
253 |
elif action == b'k': |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
254 |
# '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
|
255 |
continue |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
256 |
else: |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
257 |
# 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
|
258 |
yield file |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
259 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
260 |
def putcommit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
261 |
self, files, copies, parents, commit, source, revmap, full, cleanp2 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
262 |
): |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
263 |
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
|
264 |
|
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
265 |
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
|
266 |
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
|
267 |
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
|
268 |
try: |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
269 |
return p2ctx[f] |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
270 |
except error.ManifestLookupError: |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
271 |
# 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
|
272 |
# delete, so just return None. |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
273 |
return None |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
274 |
try: |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
275 |
v = files[f] |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
276 |
except KeyError: |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
277 |
return None |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
278 |
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
|
279 |
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
|
280 |
return None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
281 |
if f == b'.hgtags': |
21076
5236c7a72a2d
convert: backout b75a04502ced and 9616b03113ce - tagmap
Mads Kiilerich <madski@unity3d.com>
parents:
20397
diff
changeset
|
282 |
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
|
283 |
if f == b'.hgsubstate': |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
284 |
data = self._rewritesubstate(source, data) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
285 |
return context.memfilectx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
286 |
self.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
287 |
memctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
288 |
f, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
289 |
data, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
290 |
b'l' in mode, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
291 |
b'x' in mode, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
292 |
copies.get(f), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
293 |
) |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
294 |
|
431 | 295 |
pl = [] |
296 |
for p in parents: |
|
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
297 |
if p not in pl: |
431 | 298 |
pl.append(p) |
299 |
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
|
300 |
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
|
301 |
if self.filemapmode and nparents == 1: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
302 |
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
|
303 |
parent = parents[0] |
316 | 304 |
|
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
305 |
if len(parents) < 2: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
306 |
parents.append(self.repo.nullid) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
307 |
if len(parents) < 2: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
308 |
parents.append(self.repo.nullid) |
431 | 309 |
p2 = parents.pop(0) |
692
695dd9a491da
convert-repo: deal with packed git and other fixes
mpm@selenic.com
parents:
450
diff
changeset
|
310 |
|
3954
9af4b853ed4d
convert-repo: add CVS branch support
Matt Mackall <mpm@selenic.com>
parents:
3953
diff
changeset
|
311 |
text = commit.desc |
20372
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
312 |
|
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
313 |
sha1s = re.findall(sha1re, text) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
314 |
for sha1 in sha1s: |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
315 |
oldrev = source.lookuprev(sha1) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
316 |
newrev = revmap.get(oldrev) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
317 |
if newrev is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
318 |
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
|
319 |
|
5439
d0c67b52ac01
convert: make contents of "extra" dict available from sources, for sinks.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5437
diff
changeset
|
320 |
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
|
321 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
322 |
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
|
323 |
if sourcename: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
324 |
extra[b'convert_source'] = sourcename |
25750
c9093d4d1ff6
convert: add config for recording the source name
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
325 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
326 |
for label in ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
327 |
b'source', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
328 |
b'transplant_source', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
329 |
b'rebase_source', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
330 |
b'intermediate-source', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
331 |
): |
21765
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
332 |
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
|
333 |
|
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
334 |
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
|
335 |
continue |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
336 |
|
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
337 |
# 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
|
338 |
if label == b'transplant_source': |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
339 |
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
|
340 |
|
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
341 |
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
|
342 |
if newrev is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
343 |
if label == b'transplant_source': |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
344 |
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
|
345 |
|
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
346 |
extra[label] = newrev |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
347 |
|
5038
8f157190075e
convert: add config option to turn off use of branch names
Bryan O'Sullivan <bos@serpentine.com>
parents:
5017
diff
changeset
|
348 |
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
|
349 |
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
|
350 |
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
|
351 |
extra[b'convert_revision'] = commit.rev |
4957
cdd33a048289
removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4873
diff
changeset
|
352 |
|
431 | 353 |
while parents: |
354 |
p1 = p2 |
|
355 |
p2 = parents.pop(0) |
|
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
356 |
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
|
357 |
p2ctx = None |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
358 |
if p2 != self.repo.nullid: |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
359 |
p2ctx = self.repo[p2] |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
360 |
fileset = set(files) |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
361 |
if full: |
22360
3e483253213e
convert: don't use multi-argument set.update
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
362 |
fileset.update(self.repo[p1]) |
3e483253213e
convert: don't use multi-argument set.update
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
363 |
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
|
364 |
|
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
365 |
if p2ctx: |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
366 |
p2files = set(cleanp2) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
367 |
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
|
368 |
p2files.add(file) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
369 |
fileset.add(file) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
370 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
371 |
ctx = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
372 |
self.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
373 |
(p1, p2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
374 |
text, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
375 |
fileset, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
376 |
getfilectx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
377 |
commit.author, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
378 |
commit.date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
379 |
extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
380 |
) |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
381 |
|
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
382 |
# 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
|
383 |
# commit, so copy the source's phase for now. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
384 |
self.repo.ui.setconfig( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
385 |
b'phases', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
386 |
b'new-commit', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
387 |
phases.phasenames[commit.phase], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
388 |
b'convert', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
389 |
) |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
390 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
391 |
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
|
392 |
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
|
393 |
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
|
394 |
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
|
395 |
origctx = None |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
396 |
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
|
397 |
|
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
398 |
# 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
|
399 |
# 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
|
400 |
# anywhere. |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
401 |
if commit.rev != node: |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
402 |
ctx = self.repo[node] |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
403 |
if ctx.phase() < phases.draft: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
404 |
phases.registernew( |
45790
5d65e04b6a80
phases: convert registernew users to use revision sets
Joerg Sonnenberger <joerg@bec.de>
parents:
45346
diff
changeset
|
405 |
self.repo, tr, phases.draft, [ctx.rev()] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
406 |
) |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
407 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
408 |
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
|
409 |
p2 = node |
431 | 410 |
|
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
411 |
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
|
412 |
man = self.repo.manifestlog.getstorage(b'') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
413 |
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
|
414 |
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
|
415 |
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
|
416 |
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
|
417 |
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
|
418 |
return parent |
1389
9b3ef6f3cef5
convert-repo: fix up octopus merge conversion
Matt Mackall <mpm@selenic.com>
parents:
1388
diff
changeset
|
419 |
return p2 |
316 | 420 |
|
694 | 421 |
def puttags(self, tags): |
37395
810413b745ff
convert: look up branch only among branches
Martin von Zweigbergk <martinvonz@google.com>
parents:
37394
diff
changeset
|
422 |
tagparent = self.repo.branchtip(self.tagsbranch, ignoremissing=True) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
423 |
tagparent = tagparent or self.repo.nullid |
694 | 424 |
|
20376
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
425 |
oldlines = set() |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
426 |
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
|
427 |
for h in heads: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
428 |
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
|
429 |
oldlines.update( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
430 |
set(self.repo[h][b'.hgtags'].data().splitlines(True)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
431 |
) |
20376
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
432 |
oldlines = sorted(list(oldlines)) |
694 | 433 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
434 |
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
|
435 |
if newlines == oldlines: |
9431
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
436 |
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
|
437 |
|
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
438 |
# 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
|
439 |
oldtags = set() |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
440 |
newtags = set() |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
441 |
for line in oldlines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
442 |
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
|
443 |
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
|
444 |
continue |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
445 |
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
|
446 |
for line in newlines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
447 |
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
|
448 |
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
|
449 |
continue |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
450 |
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
|
451 |
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
|
452 |
|
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
453 |
if not newtags: |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
454 |
return None, None |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
455 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
456 |
data = b"".join(newlines) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
457 |
|
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
458 |
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
|
459 |
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
|
460 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
461 |
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
|
462 |
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
|
463 |
extra = {b'branch': self.tagsbranch} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
464 |
ctx = context.memctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
465 |
self.repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
466 |
(tagparent, None), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
467 |
b"update tags", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
468 |
[b".hgtags"], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
469 |
getfilectx, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
470 |
b"convert-repo", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
471 |
date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
472 |
extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
473 |
) |
25697
1538e72209fd
convert: fix bug with converting the same commit twice
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
474 |
node = self.repo.commitctx(ctx) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
475 |
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
|
476 |
|
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
477 |
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
|
478 |
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
|
479 |
|
13746
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
480 |
def putbookmarks(self, updatedbookmark): |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
481 |
if not len(updatedbookmark): |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
482 |
return |
26974
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
483 |
wlock = lock = tr = None |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
484 |
try: |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
485 |
wlock = self.repo.wlock() |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
486 |
lock = self.repo.lock() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
487 |
tr = self.repo.transaction(b'bookmark') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
488 |
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
|
489 |
destmarks = self.repo._bookmarks |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
490 |
changes = [ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
491 |
(bookmark, bin(updatedbookmark[bookmark])) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
492 |
for bookmark in updatedbookmark |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
493 |
] |
33487
a050d37c2c70
bookmark: use 'applychanges' in the convert extension
Boris Feld <boris.feld@octobus.net>
parents:
33455
diff
changeset
|
494 |
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
|
495 |
tr.close() |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
496 |
finally: |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
497 |
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
|
498 |
|
21635
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
499 |
def hascommitfrommap(self, rev): |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
500 |
# 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
|
501 |
return rev in self.repo or self.clonebranches |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
502 |
|
21634
23b24d6a70c8
convert: rename sink hascommit to hascommitforsplicemap
Mads Kiilerich <madski@unity3d.com>
parents:
21498
diff
changeset
|
503 |
def hascommitforsplicemap(self, rev): |
16686
67964cda8701
cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
504 |
if rev not in self.repo and self.clonebranches: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
505 |
raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
506 |
_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
507 |
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
|
508 |
b'repository (lookups with clonebranches=true ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
509 |
b'are not implemented)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
510 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
511 |
% rev |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
512 |
) |
16106
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
15193
diff
changeset
|
513 |
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
|
514 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
515 |
|
28370
c1878afb063a
convert: hg use absolute_import
timeless <timeless@mozdev.org>
parents:
27863
diff
changeset
|
516 |
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
|
517 |
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
|
518 |
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
|
519 |
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
|
520 |
self.ignored = set() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
521 |
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
|
522 |
try: |
4fbd27bf04b1
convert: fail properly if we can't read a source hg repository
Bryan O'Sullivan <bos@serpentine.com>
parents:
5352
diff
changeset
|
523 |
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
|
524 |
# 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
|
525 |
# 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
|
526 |
if not self.repo.local(): |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16686
diff
changeset
|
527 |
raise error.RepoError |
7637 | 528 |
except error.RepoError: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
529 |
ui.traceback() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
530 |
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
|
531 |
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
|
532 |
self.lastctx = None |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
533 |
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
|
534 |
self.convertfp = None |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
535 |
# 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
|
536 |
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
|
537 |
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
|
538 |
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
|
539 |
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
|
540 |
try: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
541 |
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
|
542 |
except error.RepoError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
543 |
raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
544 |
_(b'%s is not a valid start revision') % startnode |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
545 |
) |
19891
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
546 |
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
|
547 |
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
|
548 |
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
|
549 |
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
|
550 |
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
|
551 |
else: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
552 |
self.keep = util.always |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25697
diff
changeset
|
553 |
if revs: |
37361
e45545f7895e
convert: use repo.lookup() for converting to nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
36607
diff
changeset
|
554 |
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
|
555 |
else: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
556 |
self._heads = self.repo.heads() |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
557 |
else: |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25697
diff
changeset
|
558 |
if revs or startnode is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
559 |
raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
560 |
_( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
561 |
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
|
562 |
b'hg.startrev or --rev' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
563 |
) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
564 |
) |
19891
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
565 |
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
|
566 |
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
|
567 |
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
|
568 |
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
|
569 |
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
|
570 |
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
|
571 |
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
|
572 |
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
|
573 |
|
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
574 |
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
|
575 |
if self.lastrev != rev: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6717
diff
changeset
|
576 |
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
|
577 |
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
|
578 |
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
|
579 |
|
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
580 |
def _parents(self, ctx): |
9531
a2f36a082449
convert/hg: make parents() return changectx, not nodes
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
581 |
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
|
582 |
|
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
583 |
def getheads(self): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
584 |
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
|
585 |
|
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
586 |
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
|
587 |
try: |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
588 |
fctx = self._changectx(rev)[name] |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
589 |
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
|
590 |
except error.LookupError: |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
21765
diff
changeset
|
591 |
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
|
592 |
|
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
593 |
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
|
594 |
ma, r = [], [] |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
595 |
maappend = ma.append |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
596 |
rappend = r.append |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
597 |
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
|
598 |
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
|
599 |
if node2 is None: |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
600 |
rappend(f) |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
601 |
else: |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
602 |
maappend(f) |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
603 |
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
|
604 |
|
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
605 |
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
|
606 |
ctx = self._changectx(rev) |
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
607 |
parents = self._parents(ctx) |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
608 |
if full or not parents: |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
609 |
files = copyfiles = ctx.manifest() |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
610 |
if parents: |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
611 |
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
|
612 |
ma, r = self._changescache[1] |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
613 |
else: |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
614 |
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
|
615 |
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
|
616 |
files = ma + r |
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
617 |
copyfiles = ma |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
618 |
# _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
|
619 |
# 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
|
620 |
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
|
621 |
cleanp2 = set() |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
622 |
if len(parents) == 2: |
27719
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
623 |
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
|
624 |
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
|
625 |
if value is None: |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
626 |
cleanp2.add(f) |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
627 |
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
|
628 |
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
|
629 |
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
|
630 |
|
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
631 |
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
|
632 |
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
|
633 |
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
|
634 |
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
|
635 |
continue |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
636 |
try: |
41771
1312afae2d51
convert: migrate to new method for getting copy source
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
637 |
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
|
638 |
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
|
639 |
continue |
9532
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
640 |
# Ignore copy sources not in parent revisions |
36340
06464d1ce6cd
convert: don't reimplement any()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36148
diff
changeset
|
641 |
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
|
642 |
continue |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
643 |
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
|
644 |
except TypeError: |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
645 |
pass |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25589
diff
changeset
|
646 |
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
|
647 |
if not self.ignoreerrors: |
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
648 |
raise |
8456
e9e2a2c9b294
convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8250
diff
changeset
|
649 |
self.ignored.add(name) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
650 |
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
|
651 |
return copies |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5131
diff
changeset
|
652 |
|
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
653 |
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
|
654 |
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
|
655 |
_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
|
656 |
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
|
657 |
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
|
658 |
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
|
659 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
660 |
return common.commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
661 |
author=ctx.user(), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
662 |
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
|
663 |
desc=ctx.description(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
664 |
rev=crev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
665 |
parents=parents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
666 |
optparents=optparents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
667 |
branch=ctx.branch(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
668 |
extra=ctx.extra(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
669 |
sortkey=ctx.rev(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
670 |
saverev=self.saverev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
671 |
phase=ctx.phase(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
672 |
ctx=ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
673 |
) |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
674 |
|
41179
77088fa862df
convert: add missing numcommits() override to hg sources
Matt Harbison <matt_harbison@yahoo.com>
parents:
39244
diff
changeset
|
675 |
def numcommits(self): |
77088fa862df
convert: add missing numcommits() override to hg sources
Matt Harbison <matt_harbison@yahoo.com>
parents:
39244
diff
changeset
|
676 |
return len(self.repo) |
77088fa862df
convert: add missing numcommits() override to hg sources
Matt Harbison <matt_harbison@yahoo.com>
parents:
39244
diff
changeset
|
677 |
|
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
678 |
def gettags(self): |
21498
6b8daeea638a
convert: mercurial source: convert global tags only - not local tags
Mads Kiilerich <madski@unity3d.com>
parents:
21076
diff
changeset
|
679 |
# 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
|
680 |
tags = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
681 |
t |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
682 |
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
|
683 |
if self.repo.tagtype(t[0]) == b'global' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42979
diff
changeset
|
684 |
] |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
685 |
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
|
686 |
|
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
687 |
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
|
688 |
ctx = self._changectx(rev) |
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
689 |
parents = self._parents(ctx) |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
690 |
if not parents and i is None: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
691 |
i = 0 |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
692 |
ma, r = ctx.manifest().keys(), [] |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
693 |
else: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
694 |
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
|
695 |
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
|
696 |
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
|
697 |
|
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
698 |
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
|
699 |
self._changescache = (rev, (ma, r)) |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
700 |
|
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
701 |
return ma + r |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
702 |
|
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
703 |
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
|
704 |
if self.convertfp is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
705 |
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
|
706 |
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
|
707 |
self.convertfp.flush() |
5805
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
708 |
|
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
709 |
def before(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
710 |
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
|
711 |
|
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
712 |
def after(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
713 |
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
|
714 |
|
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
715 |
def hasnativeorder(self): |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
716 |
return True |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
717 |
|
18819
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
18373
diff
changeset
|
718 |
def hasnativeclose(self): |
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
18373
diff
changeset
|
719 |
return True |
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
18373
diff
changeset
|
720 |
|
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
721 |
def lookuprev(self, rev): |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
722 |
try: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45790
diff
changeset
|
723 |
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
|
724 |
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
|
725 |
return None |
13757
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
726 |
|
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
727 |
def getbookmarks(self): |
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
728 |
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
|
729 |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
730 |
def checkrevformat(self, revstr, mapname=b'splicemap'): |
47062
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46819
diff
changeset
|
731 |
"""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
|
732 |
self.checkhexformat(revstr, mapname) |