Mercurial > hg
annotate hgext/convert/hg.py @ 27719:7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
mercurial_source.getchanges() seems to care about files whose nodeid
has changed even if their contents has not (i.e. it has been
reverted/backed out). The method uses ctx1.status(ctx2) to find
differencing files. However, that method is currently broken and
reports reverted changes as modified. In order to fix that method, we
first need to rewrite getchanges() using manifest.diff(), which does
report reverted files as modified (because it's about differences in
the manifest, so about nodeids).
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Sat, 09 Jan 2016 22:58:10 -0800 |
parents | 6e1fba0fe453 |
children | ed59ae8b025e |
rev | line source |
---|---|
8250
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
1 # hg.py - hg backend for convert extension |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
2 # |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
4 # |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
7 |
5556
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
8 # Notes for hg->hg conversion: |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
9 # |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
10 # * Old versions of Mercurial didn't trim the whitespace from the ends |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
11 # of commit messages, but new versions do. Changesets created by |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
12 # those older versions, then converted, may thus have different |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
13 # hashes for changesets that are otherwise identical. |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
14 # |
8596
a58a95e523aa
convert/hg: update documentation
Patrick Mezard <pmezard@gmail.com>
parents:
8495
diff
changeset
|
15 # * Using "--config convert.hg.saverev=true" will make the source |
a58a95e523aa
convert/hg: update documentation
Patrick Mezard <pmezard@gmail.com>
parents:
8495
diff
changeset
|
16 # identifier to be stored in the converted revision. This will cause |
a58a95e523aa
convert/hg: update documentation
Patrick Mezard <pmezard@gmail.com>
parents:
8495
diff
changeset
|
17 # the converted revision to have a different identity than the |
a58a95e523aa
convert/hg: update documentation
Patrick Mezard <pmezard@gmail.com>
parents:
8495
diff
changeset
|
18 # source. |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
19 |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
20 |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
21 import os, time, cStringIO |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
22 from mercurial.i18n import _ |
6211
f89fd07fc51d
Expand import * to allow Pyflakes to find problems
Joel Rosdahl <joel@rosdahl.net>
parents:
6210
diff
changeset
|
23 from mercurial.node import bin, hex, nullid |
22698
32a8ad782260
convert-hg: use localrepo.pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22360
diff
changeset
|
24 from mercurial import hg, util, context, bookmarks, error, scmutil, exchange |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
25 from mercurial import phases |
26974
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
26 from mercurial import lock as lockmod |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
27 from mercurial import merge as mergemod |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
28 |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
29 from common import NoRepo, commit, converter_source, converter_sink, mapfile |
694 | 30 |
20372
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
31 import re |
23972
c408bf3b32f8
convert: replace revision references in messages if they are >= short hashes
Mads Kiilerich <madski@unity3d.com>
parents:
23926
diff
changeset
|
32 sha1re = re.compile(r'\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
|
33 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
34 class mercurial_sink(converter_sink): |
4763
8e9d3faec270
convert: split converter into convertsource and convertsink
Brendan Cully <brendan@kublai.com>
parents:
4760
diff
changeset
|
35 def __init__(self, ui, path): |
5440
b4ae8535f834
convert: add default constructor for converter_sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5439
diff
changeset
|
36 converter_sink.__init__(self, ui, path) |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
37 self.branchnames = ui.configbool('convert', 'hg.usebranchnames', True) |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
38 self.clonebranches = ui.configbool('convert', 'hg.clonebranches', False) |
5260
be4835ad9a85
convert: new config variable hg.tagsbranch controls which branch tags are committed to
Brendan Cully <brendan@kublai.com>
parents:
5195
diff
changeset
|
39 self.tagsbranch = ui.config('convert', 'hg.tagsbranch', 'default') |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
40 self.lastbranch = None |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
41 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
|
42 try: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
43 self.repo = hg.repository(self.ui, path) |
5918
1716c8a0bd09
convert: mercurial sink must be local
Patrick Mezard <pmezard@gmail.com>
parents:
5522
diff
changeset
|
44 if not self.repo.local(): |
10938
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10282
diff
changeset
|
45 raise NoRepo(_('%s is not a local Mercurial repository') |
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10282
diff
changeset
|
46 % path) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25589
diff
changeset
|
47 except error.RepoError as err: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
48 ui.traceback() |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
49 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
|
50 else: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
51 try: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
52 ui.status(_('initializing destination %s repository\n') % path) |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
53 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
|
54 if not self.repo.local(): |
10938
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10282
diff
changeset
|
55 raise NoRepo(_('%s is not a local Mercurial repository') |
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10282
diff
changeset
|
56 % path) |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
57 self.created.append(path) |
7875
553aa0cbeab6
cleanup: drop unused assignments
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7874
diff
changeset
|
58 except error.RepoError: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
59 ui.traceback() |
10939
9f6731b03906
convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10938
diff
changeset
|
60 raise NoRepo(_("could not create hg repository %s as sink") |
10938
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10282
diff
changeset
|
61 % path) |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
62 self.lock = None |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
63 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
|
64 self.filemapmode = False |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
65 self.subrevmaps = {} |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
66 |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
67 def before(self): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9432
diff
changeset
|
68 self.ui.debug('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
|
69 self.wlock = self.repo.wlock() |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
70 self.lock = self.repo.lock() |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
71 |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
72 def after(self): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9432
diff
changeset
|
73 self.ui.debug('run hg sink post-conversion action\n') |
10086
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
74 if self.lock: |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
75 self.lock.release() |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
76 if self.wlock: |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
77 self.wlock.release() |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
78 |
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
|
79 def revmapfile(self): |
15069
650d81a313cb
convert: use repo.join instead of referencing ".hg" directly
Martin Geisler <mg@aragost.com>
parents:
14556
diff
changeset
|
80 return self.repo.join("shamap") |
316 | 81 |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
82 def authorfile(self): |
15069
650d81a313cb
convert: use repo.join instead of referencing ".hg" directly
Martin Geisler <mg@aragost.com>
parents:
14556
diff
changeset
|
83 return self.repo.join("authormap") |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
84 |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
85 def setbranch(self, branch, pbranches): |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
86 if not self.clonebranches: |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
87 return |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
88 |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
89 setbranch = (branch != self.lastbranch) |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
90 self.lastbranch = branch |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
91 if not branch: |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
92 branch = 'default' |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
93 pbranches = [(b[0], b[1] and b[1] or 'default') for b in pbranches] |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23972
diff
changeset
|
94 if pbranches: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23972
diff
changeset
|
95 pbranch = pbranches[0][1] |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23972
diff
changeset
|
96 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23972
diff
changeset
|
97 pbranch = 'default' |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
98 |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
99 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
|
100 if setbranch: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
101 self.after() |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
102 try: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
103 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
|
104 except Exception: |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
105 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
|
106 self.before() |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
107 |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
108 # 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
|
109 # 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
|
110 missings = {} |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
111 for b in pbranches: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
112 try: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
113 self.repo.lookup(b[0]) |
16689
f366d4c2ff34
cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
114 except Exception: |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
115 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
|
116 |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
117 if missings: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
118 self.after() |
18373
687ed69f6fdf
convert: process missing branches in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
17922
diff
changeset
|
119 for pbranch, heads in sorted(missings.iteritems()): |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
120 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
|
121 prepo = hg.peer(self.ui, {}, pbranchpath) |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
122 self.ui.note(_('pulling from %s into %s\n') % (pbranch, branch)) |
22698
32a8ad782260
convert-hg: use localrepo.pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22360
diff
changeset
|
123 exchange.pull(self.repo, prepo, |
32a8ad782260
convert-hg: use localrepo.pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22360
diff
changeset
|
124 [prepo.lookup(h) for h in heads]) |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
125 self.before() |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
126 |
21076
5236c7a72a2d
convert: backout b75a04502ced and 9616b03113ce - tagmap
Mads Kiilerich <madski@unity3d.com>
parents:
20397
diff
changeset
|
127 def _rewritetags(self, source, revmap, data): |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
128 fp = cStringIO.StringIO() |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
129 for line in data.splitlines(): |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
130 s = line.split(' ', 1) |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
131 if len(s) != 2: |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
132 continue |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
133 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
|
134 if not revid: |
25305
884ef09cf658
convert: properly pass null ids through .hgtags (issue4678)
Matt Mackall <mpm@selenic.com>
parents:
24395
diff
changeset
|
135 if s[0] == hex(nullid): |
884ef09cf658
convert: properly pass null ids through .hgtags (issue4678)
Matt Mackall <mpm@selenic.com>
parents:
24395
diff
changeset
|
136 revid = s[0] |
884ef09cf658
convert: properly pass null ids through .hgtags (issue4678)
Matt Mackall <mpm@selenic.com>
parents:
24395
diff
changeset
|
137 else: |
884ef09cf658
convert: properly pass null ids through .hgtags (issue4678)
Matt Mackall <mpm@selenic.com>
parents:
24395
diff
changeset
|
138 continue |
21076
5236c7a72a2d
convert: backout b75a04502ced and 9616b03113ce - tagmap
Mads Kiilerich <madski@unity3d.com>
parents:
20397
diff
changeset
|
139 fp.write('%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
|
140 return fp.getvalue() |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
141 |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
142 def _rewritesubstate(self, source, data): |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
143 fp = cStringIO.StringIO() |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
144 for line in data.splitlines(): |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
145 s = line.split(' ', 1) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
146 if len(s) != 2: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
147 continue |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
148 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
149 revid = s[0] |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
150 subpath = s[1] |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
151 if revid != hex(nullid): |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
152 revmap = self.subrevmaps.get(subpath) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
153 if revmap is None: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
154 revmap = mapfile(self.ui, |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
155 self.repo.wjoin(subpath, '.hg/shamap')) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
156 self.subrevmaps[subpath] = revmap |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
157 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
158 # 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
|
159 # 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
|
160 # 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
|
161 # once. |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
162 msg = _('no ".hgsubstate" updates will be made for "%s"\n') |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
163 if len(revmap) == 0: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
164 sub = self.repo.wvfs.reljoin(subpath, '.hg') |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
165 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
166 if self.repo.wvfs.exists(sub): |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
167 self.ui.warn(msg % subpath) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
168 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
169 newid = revmap.get(revid) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
170 if not newid: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
171 if len(revmap) > 0: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
172 self.ui.warn(_("%s is missing from %s/.hg/shamap\n") % |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
173 (revid, subpath)) |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
174 else: |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
175 revid = newid |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
176 |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
177 fp.write('%s %s\n' % (revid, subpath)) |
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 return fp.getvalue() |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
180 |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
181 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
|
182 """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
|
183 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
|
184 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
185 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
|
186 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
|
187 repositories together). |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
188 """ |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
189 anc = [p1ctx.ancestor(p2ctx)] |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
190 # Calculate what files are coming from p2 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
191 actions, diverge, rename = mergemod.calculateupdates( |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
192 self.repo, p1ctx, p2ctx, anc, |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
193 True, # branchmerge |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
194 True, # force |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
195 False, # acceptremote |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
196 False, # followcopies |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
197 ) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
198 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
199 for file, (action, info, msg) in actions.iteritems(): |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
200 if source.targetfilebelongstosource(file): |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
201 # 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
|
202 # 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
|
203 continue |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
204 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
205 # 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
|
206 # context to resolve merges correctly. |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
207 if action in ['m', 'dm', 'cd', 'dc']: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26154
diff
changeset
|
208 raise error.Abort(_("unable to convert merge commit " |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
209 "since target parents do not merge cleanly (file " |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
210 "%s, parents %s and %s)") % (file, p1ctx, |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
211 p2ctx)) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
212 elif action == 'k': |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
213 # '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
|
214 continue |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
215 else: |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
216 # 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
|
217 yield file |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
218 |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
219 def putcommit(self, files, copies, parents, commit, source, revmap, full, |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
220 cleanp2): |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
221 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
|
222 |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
223 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
|
224 if p2ctx and f in p2files and f not in copies: |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
225 self.ui.debug('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
|
226 try: |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
227 return p2ctx[f] |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
228 except error.ManifestLookupError: |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
229 # 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
|
230 # delete, so just return None. |
5ca587348875
convert: fix syncing deletes from p2 merge commit
Durham Goode <durham@fb.com>
parents:
26037
diff
changeset
|
231 return None |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
232 try: |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
233 v = files[f] |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
234 except KeyError: |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
235 return None |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
236 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
|
237 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
|
238 return None |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
239 if f == '.hgtags': |
21076
5236c7a72a2d
convert: backout b75a04502ced and 9616b03113ce - tagmap
Mads Kiilerich <madski@unity3d.com>
parents:
20397
diff
changeset
|
240 data = self._rewritetags(source, revmap, data) |
25558
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
241 if f == '.hgsubstate': |
daf9f7ee2a5c
convert: support incremental conversion with hg subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
25305
diff
changeset
|
242 data = self._rewritesubstate(source, data) |
21689
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21635
diff
changeset
|
243 return context.memfilectx(self.repo, f, data, 'l' in mode, |
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21635
diff
changeset
|
244 'x' in mode, copies.get(f)) |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
245 |
431 | 246 pl = [] |
247 for p in parents: | |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
248 if p not in pl: |
431 | 249 pl.append(p) |
250 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
|
251 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
|
252 if self.filemapmode and nparents == 1: |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
253 m1node = self.repo.changelog.read(bin(parents[0]))[0] |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
254 parent = parents[0] |
316 | 255 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
256 if len(parents) < 2: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
257 parents.append(nullid) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
258 if len(parents) < 2: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
259 parents.append(nullid) |
431 | 260 p2 = parents.pop(0) |
692
695dd9a491da
convert-repo: deal with packed git and other fixes
mpm@selenic.com
parents:
450
diff
changeset
|
261 |
3954
9af4b853ed4d
convert-repo: add CVS branch support
Matt Mackall <mpm@selenic.com>
parents:
3953
diff
changeset
|
262 text = commit.desc |
20372
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
263 |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
264 sha1s = re.findall(sha1re, text) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
265 for sha1 in sha1s: |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
266 oldrev = source.lookuprev(sha1) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
267 newrev = revmap.get(oldrev) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
268 if newrev is not None: |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
269 text = text.replace(sha1, newrev[:len(sha1)]) |
45562379ce4e
convert: replace old sha1s in the description
Sean Farley <sean.michael.farley@gmail.com>
parents:
19891
diff
changeset
|
270 |
5439
d0c67b52ac01
convert: make contents of "extra" dict available from sources, for sinks.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5437
diff
changeset
|
271 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
|
272 |
25750
c9093d4d1ff6
convert: add config for recording the source name
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
273 sourcename = self.repo.ui.config('convert', 'hg.sourcename') |
c9093d4d1ff6
convert: add config for recording the source name
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
274 if sourcename: |
c9093d4d1ff6
convert: add config for recording the source name
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
275 extra['convert_source'] = sourcename |
c9093d4d1ff6
convert: add config for recording the source name
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
276 |
25589
273d94255e1e
convert: update 'intermediate-source' in the destination's extras dictionary
Matt Harbison <matt_harbison@yahoo.com>
parents:
25571
diff
changeset
|
277 for label in ('source', 'transplant_source', 'rebase_source', |
273d94255e1e
convert: update 'intermediate-source' in the destination's extras dictionary
Matt Harbison <matt_harbison@yahoo.com>
parents:
25571
diff
changeset
|
278 'intermediate-source'): |
21765
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
279 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
|
280 |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
281 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
|
282 continue |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
283 |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
284 # Only transplant stores its reference in binary |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
285 if label == 'transplant_source': |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
286 node = hex(node) |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
287 |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
288 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
|
289 if newrev is not None: |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
290 if label == 'transplant_source': |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
291 newrev = bin(newrev) |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
292 |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
293 extra[label] = newrev |
44255f7ce886
convert: update the transplant, rebase and graft references in 'extra'
Matt Harbison <matt_harbison@yahoo.com>
parents:
21689
diff
changeset
|
294 |
5038
8f157190075e
convert: add config option to turn off use of branch names
Bryan O'Sullivan <bos@serpentine.com>
parents:
5017
diff
changeset
|
295 if self.branchnames and commit.branch: |
4873
28b23b9073a8
convert: record the source revision in the changelog
Brendan Cully <brendan@kublai.com>
parents:
4765
diff
changeset
|
296 extra['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
|
297 if commit.rev and commit.saverev: |
4873
28b23b9073a8
convert: record the source revision in the changelog
Brendan Cully <brendan@kublai.com>
parents:
4765
diff
changeset
|
298 extra['convert_revision'] = commit.rev |
4957
cdd33a048289
removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4873
diff
changeset
|
299 |
431 | 300 while parents: |
301 p1 = p2 | |
302 p2 = parents.pop(0) | |
26037
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
303 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
|
304 p2ctx = None |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
305 if p2 != nullid: |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
306 p2ctx = self.repo[p2] |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
307 fileset = set(files) |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
308 if full: |
22360
3e483253213e
convert: don't use multi-argument set.update
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
309 fileset.update(self.repo[p1]) |
3e483253213e
convert: don't use multi-argument set.update
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
310 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
|
311 |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
312 if p2ctx: |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
313 p2files = set(cleanp2) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
314 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
|
315 p2files.add(file) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
316 fileset.add(file) |
a75d24539aba
convert: fix convert dropping p2 contents during filemap merge
Durham Goode <durham@fb.com>
parents:
25750
diff
changeset
|
317 |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
318 ctx = context.memctx(self.repo, (p1, p2), text, fileset, |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
319 getfilectx, commit.author, commit.date, extra) |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
320 |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
321 # 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
|
322 # commit, so copy the source's phase for now. |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
323 self.repo.ui.setconfig('phases', 'new-commit', |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
324 phases.phasenames[commit.phase], 'convert') |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
325 |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
326 tr = self.repo.transaction("convert") |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
327 |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
328 try: |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
329 node = hex(self.repo.commitctx(ctx)) |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
330 |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
331 # 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
|
332 # 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
|
333 # anywhere. |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
334 if commit.rev != node: |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
335 ctx = self.repo[node] |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
336 if ctx.phase() < phases.draft: |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
337 phases.retractboundary(self.repo, tr, phases.draft, |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
338 [ctx.node()]) |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
339 tr.close() |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
340 finally: |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
341 tr.release() |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
342 |
431 | 343 text = "(octopus merge fixup)\n" |
25697
1538e72209fd
convert: fix bug with converting the same commit twice
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
344 p2 = node |
431 | 345 |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
346 if self.filemapmode and nparents == 1: |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
347 man = self.repo.manifest |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
348 mnode = self.repo.changelog.read(bin(p2))[0] |
11673
a2f11188e2d2
convert: handle closed branch heads in hg-hg conversion (issue2185)
Matt Mackall <mpm@selenic.com>
parents:
11134
diff
changeset
|
349 closed = 'close' in commit.extra |
a2f11188e2d2
convert: handle closed branch heads in hg-hg conversion (issue2185)
Matt Mackall <mpm@selenic.com>
parents:
11134
diff
changeset
|
350 if not closed and not man.cmp(m1node, man.revision(mnode)): |
8611
ba42e3c6e602
convert: better feedback when filtering out empty revisions
Patrick Mezard <pmezard@gmail.com>
parents:
8596
diff
changeset
|
351 self.ui.status(_("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
|
352 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
|
353 return parent |
1389
9b3ef6f3cef5
convert-repo: fix up octopus merge conversion
Matt Mackall <mpm@selenic.com>
parents:
1388
diff
changeset
|
354 return p2 |
316 | 355 |
694 | 356 def puttags(self, tags): |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
357 try: |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
358 parentctx = self.repo[self.tagsbranch] |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
359 tagparent = parentctx.node() |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
360 except error.RepoError: |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
361 parentctx = None |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
362 tagparent = nullid |
694 | 363 |
20376
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
364 oldlines = set() |
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
365 for branch, heads in self.repo.branchmap().iteritems(): |
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
366 for h in heads: |
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
367 if '.hgtags' in self.repo[h]: |
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
368 oldlines.update( |
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
369 set(self.repo[h]['.hgtags'].data().splitlines(True))) |
7a4797910205
convert: compare tags from all heads instead of just one
Sean Farley <sean.michael.farley@gmail.com>
parents:
20373
diff
changeset
|
370 oldlines = sorted(list(oldlines)) |
694 | 371 |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
372 newlines = sorted([("%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
|
373 if newlines == oldlines: |
9431
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
374 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
|
375 |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
376 # 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
|
377 oldtags = set() |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
378 newtags = set() |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
379 for line in oldlines: |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
380 s = line.strip().split(' ', 1) |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
381 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
|
382 continue |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
383 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
|
384 for line in newlines: |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
385 s = line.strip().split(' ', 1) |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
386 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
|
387 continue |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
388 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
|
389 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
|
390 |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
391 if not newtags: |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
392 return None, None |
5842d63cfe56
convert: avoid updating tags when there is nothing new
Sean Farley <sean.michael.farley@gmail.com>
parents:
20376
diff
changeset
|
393 |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
394 data = "".join(newlines) |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
395 def getfilectx(repo, memctx, f): |
21689
503bb3af70fe
memfilectx: call super.__init__ instead of duplicating code
Sean Farley <sean.michael.farley@gmail.com>
parents:
21635
diff
changeset
|
396 return context.memfilectx(repo, f, data, False, False, None) |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
397 |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
398 self.ui.status(_("updating tags\n")) |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
399 date = "%s 0" % int(time.mktime(time.gmtime())) |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
400 extra = {'branch': self.tagsbranch} |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
401 ctx = context.memctx(self.repo, (tagparent, None), "update tags", |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
402 [".hgtags"], getfilectx, "convert-repo", date, |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
403 extra) |
25697
1538e72209fd
convert: fix bug with converting the same commit twice
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
404 node = self.repo.commitctx(ctx) |
1538e72209fd
convert: fix bug with converting the same commit twice
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
405 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
|
406 |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
407 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
|
408 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
|
409 |
13746
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
410 def putbookmarks(self, updatedbookmark): |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
411 if not len(updatedbookmark): |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
412 return |
26974
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
413 wlock = lock = tr = None |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
414 try: |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
415 wlock = self.repo.wlock() |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
416 lock = self.repo.lock() |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
417 tr = self.repo.transaction('bookmark') |
26973
fdd63acf3215
convert: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26587
diff
changeset
|
418 self.ui.status(_("updating bookmarks\n")) |
fdd63acf3215
convert: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26587
diff
changeset
|
419 destmarks = self.repo._bookmarks |
fdd63acf3215
convert: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26587
diff
changeset
|
420 for bookmark in updatedbookmark: |
fdd63acf3215
convert: indentation change to make the next patch more legible
Laurent Charignon <lcharignon@fb.com>
parents:
26587
diff
changeset
|
421 destmarks[bookmark] = bin(updatedbookmark[bookmark]) |
26974
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
422 destmarks.recordchange(tr) |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
423 tr.close() |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
424 finally: |
4b5dc0d9e899
convert: use repo._bookmarks.recordchange instead of repo._bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26973
diff
changeset
|
425 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
|
426 |
21635
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
427 def hascommitfrommap(self, rev): |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
428 # 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
|
429 return rev in self.repo or self.clonebranches |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
430 |
21634
23b24d6a70c8
convert: rename sink hascommit to hascommitforsplicemap
Mads Kiilerich <madski@unity3d.com>
parents:
21498
diff
changeset
|
431 def hascommitforsplicemap(self, rev): |
16686
67964cda8701
cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
432 if rev not in self.repo and self.clonebranches: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26154
diff
changeset
|
433 raise error.Abort(_('revision %s not found in destination ' |
16106
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
15193
diff
changeset
|
434 'repository (lookups with clonebranches=true ' |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
15193
diff
changeset
|
435 'are not implemented)') % rev) |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
15193
diff
changeset
|
436 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
|
437 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
438 class mercurial_source(converter_source): |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25697
diff
changeset
|
439 def __init__(self, ui, path, revs=None): |
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25697
diff
changeset
|
440 converter_source.__init__(self, ui, path, revs) |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
441 self.ignoreerrors = ui.configbool('convert', 'hg.ignoreerrors', False) |
8456
e9e2a2c9b294
convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8250
diff
changeset
|
442 self.ignored = set() |
7815
bcd364b247ba
convert: change hg.saverev default to False
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
443 self.saverev = ui.configbool('convert', 'hg.saverev', False) |
5358
4fbd27bf04b1
convert: fail properly if we can't read a source hg repository
Bryan O'Sullivan <bos@serpentine.com>
parents:
5352
diff
changeset
|
444 try: |
4fbd27bf04b1
convert: fail properly if we can't read a source hg repository
Bryan O'Sullivan <bos@serpentine.com>
parents:
5352
diff
changeset
|
445 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
|
446 # 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
|
447 # 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
|
448 if not self.repo.local(): |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16686
diff
changeset
|
449 raise error.RepoError |
7637 | 450 except error.RepoError: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
451 ui.traceback() |
10939
9f6731b03906
convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10938
diff
changeset
|
452 raise NoRepo(_("%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
|
453 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
|
454 self.lastctx = None |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
455 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
|
456 self.convertfp = None |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
457 # Restrict converted revisions to startrev descendants |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
458 startnode = ui.config('convert', 'hg.startrev') |
19891
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
459 hgrevs = ui.config('convert', 'hg.revs') |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
460 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
|
461 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
|
462 try: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
463 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
|
464 except error.RepoError: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26154
diff
changeset
|
465 raise error.Abort(_('%s is not a valid start revision') |
19891
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
466 % startnode) |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
467 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
|
468 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
|
469 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
|
470 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
|
471 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
|
472 else: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
473 self.keep = util.always |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25697
diff
changeset
|
474 if revs: |
26154
242853e14804
convert: remove restriction on multiple --rev in hg source
Durham Goode <durham@fb.com>
parents:
26078
diff
changeset
|
475 self._heads = [self.repo[r].node() 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
|
476 else: |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
477 self._heads = self.repo.heads() |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
478 else: |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25697
diff
changeset
|
479 if revs or startnode is not None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26154
diff
changeset
|
480 raise error.Abort(_('hg.revs cannot be combined with ' |
19891
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
481 'hg.startrev or --rev')) |
e271970b9821
convert: introduce hg.revs to replace hg.startrev and --rev with a revset
Mads Kiilerich <madski@unity3d.com>
parents:
19890
diff
changeset
|
482 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
|
483 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
|
484 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
|
485 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
|
486 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
|
487 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
|
488 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
|
489 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
|
490 |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
491 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
|
492 if self.lastrev != rev: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6717
diff
changeset
|
493 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
|
494 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
|
495 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
|
496 |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
497 def _parents(self, ctx): |
9531
a2f36a082449
convert/hg: make parents() return changectx, not nodes
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
498 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
|
499 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
500 def getheads(self): |
19890
9057855d8749
convert: refactor head calculation for hg sources
Mads Kiilerich <madski@unity3d.com>
parents:
19457
diff
changeset
|
501 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
|
502 |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
503 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
|
504 try: |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
505 fctx = self._changectx(rev)[name] |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
506 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
|
507 except error.LookupError: |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
21765
diff
changeset
|
508 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
|
509 |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
510 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
|
511 ma, r = [], [] |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
512 maappend = ma.append |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
513 rappend = r.append |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
514 d = ctx1.manifest().diff(ctx2.manifest()) |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
515 for f, ((node1, flag1), (node2, flag2)) in d.iteritems(): |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
516 if node2 is None: |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
517 rappend(f) |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
518 else: |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
519 maappend(f) |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
520 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
|
521 |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
522 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
|
523 ctx = self._changectx(rev) |
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
524 parents = self._parents(ctx) |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
525 if full or not parents: |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
526 files = copyfiles = ctx.manifest() |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22299
diff
changeset
|
527 if parents: |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
528 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
|
529 ma, r = self._changescache[1] |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
530 else: |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
531 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
|
532 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
|
533 files = ma + r |
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
534 copyfiles = ma |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
535 # _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
|
536 # 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
|
537 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
|
538 cleanp2 = set() |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
539 if len(parents) == 2: |
27719
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
540 d = parents[1].manifest().diff(ctx.manifest(), clean=True) |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
541 for f, value in d.iteritems(): |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
542 if value is None: |
7ce8a13b8d77
convert: use manifest.diff() instead of ctx.status()
Martin von Zweigbergk <martinvonz@google.com>
parents:
27718
diff
changeset
|
543 cleanp2.add(f) |
22299
98aafdf4cbf6
convert: refactor hg getchanges and caching
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
544 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
|
545 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
|
546 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
|
547 |
27717
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
548 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
|
549 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
|
550 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
|
551 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
|
552 continue |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
553 try: |
19457
948df0f10ec1
convert: fix bad conversion of copies when hg.startrev is specified
Mads Kiilerich <madski@unity3d.com>
parents:
19120
diff
changeset
|
554 copysource, _copynode = ctx.filectx(name).renamed() |
948df0f10ec1
convert: fix bad conversion of copies when hg.startrev is specified
Mads Kiilerich <madski@unity3d.com>
parents:
19120
diff
changeset
|
555 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
|
556 continue |
9532
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
557 # Ignore copy sources not in parent revisions |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
558 found = False |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
559 for p in parents: |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
560 if copysource in p: |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
561 found = True |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
562 break |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
563 if not found: |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
564 continue |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
565 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
|
566 except TypeError: |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
567 pass |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25589
diff
changeset
|
568 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
|
569 if not self.ignoreerrors: |
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
570 raise |
8456
e9e2a2c9b294
convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8250
diff
changeset
|
571 self.ignored.add(name) |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
572 self.ui.warn(_('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
|
573 return copies |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5131
diff
changeset
|
574 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
575 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
|
576 ctx = self._changectx(rev) |
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
577 parents = [p.hex() for p in self._parents(ctx)] |
25570
7cc1d33f0ba6
convert: always track the hg source revision in the internal commit object
Matt Harbison <matt_harbison@yahoo.com>
parents:
25558
diff
changeset
|
578 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
|
579 |
16514
363e808de349
i18n: use locale insensitive format for datetimes as intermediate representation (issue3398)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16162
diff
changeset
|
580 return commit(author=ctx.user(), |
363e808de349
i18n: use locale insensitive format for datetimes as intermediate representation (issue3398)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16162
diff
changeset
|
581 date=util.datestr(ctx.date(), '%Y-%m-%d %H:%M:%S %1%2'), |
5556
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
582 desc=ctx.description(), rev=crev, parents=parents, |
8690
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8611
diff
changeset
|
583 branch=ctx.branch(), extra=ctx.extra(), |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
584 sortkey=ctx.rev(), saverev=self.saverev, |
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
585 phase=ctx.phase()) |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
586 |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
587 def gettags(self): |
21498
6b8daeea638a
convert: mercurial source: convert global tags only - not local tags
Mads Kiilerich <madski@unity3d.com>
parents:
21076
diff
changeset
|
588 # This will get written to .hgtags, filter non global tags out. |
6b8daeea638a
convert: mercurial source: convert global tags only - not local tags
Mads Kiilerich <madski@unity3d.com>
parents:
21076
diff
changeset
|
589 tags = [t for t in self.repo.tagslist() |
6b8daeea638a
convert: mercurial source: convert global tags only - not local tags
Mads Kiilerich <madski@unity3d.com>
parents:
21076
diff
changeset
|
590 if self.repo.tagtype(t[0]) == 'global'] |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
591 return dict([(name, hex(node)) for name, node in tags |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
592 if self.keep(node)]) |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
593 |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
594 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
|
595 ctx = self._changectx(rev) |
5deff127286f
convert: use _ prefix for private methods in hg sink
Martin von Zweigbergk <martinvonz@google.com>
parents:
27345
diff
changeset
|
596 parents = self._parents(ctx) |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
597 if not parents and i is None: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
598 i = 0 |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
599 ma, r = ctx.manifest().keys(), [] |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
600 else: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
601 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
|
602 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
|
603 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
|
604 |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
605 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
|
606 self._changescache = (rev, (ma, r)) |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
607 |
27718
6e1fba0fe453
convert: replace cache of (m,a,r) by (ma,r)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27717
diff
changeset
|
608 return ma + r |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
609 |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
610 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
|
611 if self.convertfp is None: |
15069
650d81a313cb
convert: use repo.join instead of referencing ".hg" directly
Martin Geisler <mg@aragost.com>
parents:
14556
diff
changeset
|
612 self.convertfp = open(self.repo.join('shamap'), 'a') |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
613 self.convertfp.write('%s %s\n' % (destrev, rev)) |
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
614 self.convertfp.flush() |
5805
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
615 |
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
616 def before(self): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9432
diff
changeset
|
617 self.ui.debug('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
|
618 |
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
619 def after(self): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9432
diff
changeset
|
620 self.ui.debug('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
|
621 |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
622 def hasnativeorder(self): |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
623 return True |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
624 |
18819
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
18373
diff
changeset
|
625 def hasnativeclose(self): |
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
18373
diff
changeset
|
626 return True |
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
18373
diff
changeset
|
627 |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
628 def lookuprev(self, rev): |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
629 try: |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
630 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
|
631 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
|
632 return None |
13757
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
633 |
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
634 def getbookmarks(self): |
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
635 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
|
636 |
20373
e8203629371b
convert: add mapname parameter to checkrevformat
Sean Farley <sean.michael.farley@gmail.com>
parents:
20372
diff
changeset
|
637 def checkrevformat(self, revstr, mapname='splicemap'): |
19120
58e782f076e7
splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents:
18819
diff
changeset
|
638 """ 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
|
639 self.checkhexformat(revstr, mapname) |