author | Bryan O'Sullivan <bryano@fb.com> |
Fri, 30 Nov 2012 15:56:09 -0800 | |
changeset 18020 | ec02eef0b686 |
parent 17424 | e7cfe3587ea4 |
child 18372 | 5965997b7023 |
permissions | -rw-r--r-- |
5621
badbefa55972
convert: move commands definition to ease demandload job (issue 860)
Patrick Mezard <pmezard@gmail.com>
parents:
5521
diff
changeset
|
1 |
# convcmd - convert extension commands definition |
3917
645e1dd4b8ae
convert-repo: update usage information
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3911
diff
changeset
|
2 |
# |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4591
diff
changeset
|
3 |
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
316 | 4 |
# |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
7968
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. |
316 | 7 |
|
6332
950e72fc7cf3
convert: allow missing tools not to stop source type detection
Patrick Mezard <pmezard@gmail.com>
parents:
6306
diff
changeset
|
8 |
from common import NoRepo, MissingTool, SKIPREV, mapfile |
4536
cc9b79216a76
Split convert extension into common and repository type modules
Brendan Cully <brendan@kublai.com>
parents:
4532
diff
changeset
|
9 |
from cvs import convert_cvs |
5359
6b6104430964
convert: support darcs as a source repo
Bryan O'Sullivan <bos@serpentine.com>
parents:
5356
diff
changeset
|
10 |
from darcs import darcs_source |
4536
cc9b79216a76
Split convert extension into common and repository type modules
Brendan Cully <brendan@kublai.com>
parents:
4532
diff
changeset
|
11 |
from git import convert_git |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5012
diff
changeset
|
12 |
from hg import mercurial_source, mercurial_sink |
7873
4a4c7f6a5912
cleanup: drop unused imports
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7823
diff
changeset
|
13 |
from subversion import svn_source, svn_sink |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6212
diff
changeset
|
14 |
from monotone import monotone_source |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
5996
diff
changeset
|
15 |
from gnuarch import gnuarch_source |
7053
209ef5f3534c
convert: add bzr source
Marek Kubica <marek@xivilization.net>
parents:
6976
diff
changeset
|
16 |
from bzr import bzr_source |
7823
11efa41037e2
convert: Perforce source for conversion to Mercurial
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
7599
diff
changeset
|
17 |
from p4 import p4_source |
16105
ebaa0aa749e2
convert: turn splicemap into a simple dictionary
Patrick Mezard <patrick@mezard.eu>
parents:
13745
diff
changeset
|
18 |
import filemap, common |
4536
cc9b79216a76
Split convert extension into common and repository type modules
Brendan Cully <brendan@kublai.com>
parents:
4532
diff
changeset
|
19 |
|
5376
d60a067227a5
convert: move filemapper class to a separate file
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5375
diff
changeset
|
20 |
import os, shutil |
7948
de377b1a9a84
move encoding bits from util to encoding
Matt Mackall <mpm@selenic.com>
parents:
7877
diff
changeset
|
21 |
from mercurial import hg, util, encoding |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
22 |
from mercurial.i18n import _ |
3821
158fce02dc40
Teach convert-repo to deal with mixed charsets in git
Matt Mackall <mpm@selenic.com>
parents:
2657
diff
changeset
|
23 |
|
6131
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
24 |
orig_encoding = 'ascii' |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
25 |
|
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
26 |
def recode(s): |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
27 |
if isinstance(s, unicode): |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
28 |
return s.encode(orig_encoding, 'replace') |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
29 |
else: |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
30 |
return s.decode('utf-8').encode(orig_encoding, 'replace') |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
31 |
|
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
32 |
source_converters = [ |
8692
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
33 |
('cvs', convert_cvs, 'branchsort'), |
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
34 |
('git', convert_git, 'branchsort'), |
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
35 |
('svn', svn_source, 'branchsort'), |
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
36 |
('hg', mercurial_source, 'sourcesort'), |
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
37 |
('darcs', darcs_source, 'branchsort'), |
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
38 |
('mtn', monotone_source, 'branchsort'), |
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
39 |
('gnuarch', gnuarch_source, 'branchsort'), |
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
40 |
('bzr', bzr_source, 'branchsort'), |
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
41 |
('p4', p4_source, 'branchsort'), |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
42 |
] |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
43 |
|
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
44 |
sink_converters = [ |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
45 |
('hg', mercurial_sink), |
5513
f0c58fd4b798
convert: add support for Subversion as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
46 |
('svn', svn_sink), |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
47 |
] |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
48 |
|
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
49 |
def convertsource(ui, path, type, rev): |
5521
03496d4fa509
convert: display all errors if we couldn't open the source repo
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5488
diff
changeset
|
50 |
exceptions = [] |
9962
a7178eccf2dc
convert: better error on invalid repository type
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
51 |
if type and type not in [s[0] for s in source_converters]: |
a7178eccf2dc
convert: better error on invalid repository type
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
52 |
raise util.Abort(_('%s: invalid source repository type') % type) |
8692
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
53 |
for name, source, sortmode in source_converters: |
4763
8e9d3faec270
convert: split converter into convertsource and convertsink
Brendan Cully <brendan@kublai.com>
parents:
4761
diff
changeset
|
54 |
try: |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
55 |
if not type or name == type: |
8692
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
56 |
return source(ui, path, rev), sortmode |
6332
950e72fc7cf3
convert: allow missing tools not to stop source type detection
Patrick Mezard <pmezard@gmail.com>
parents:
6306
diff
changeset
|
57 |
except (NoRepo, MissingTool), inst: |
5521
03496d4fa509
convert: display all errors if we couldn't open the source repo
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5488
diff
changeset
|
58 |
exceptions.append(inst) |
03496d4fa509
convert: display all errors if we couldn't open the source repo
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5488
diff
changeset
|
59 |
if not ui.quiet: |
03496d4fa509
convert: display all errors if we couldn't open the source repo
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5488
diff
changeset
|
60 |
for inst in exceptions: |
6913
580d5e6bfc1f
move % out of translatable strings
Martin Geisler <mg@daimi.au.dk>
parents:
6716
diff
changeset
|
61 |
ui.write("%s\n" % inst) |
6976
b072266a83d1
convert: document source and sink identifiers, fix error message
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
62 |
raise util.Abort(_('%s: missing or unsupported repository') % path) |
4763
8e9d3faec270
convert: split converter into convertsource and convertsink
Brendan Cully <brendan@kublai.com>
parents:
4761
diff
changeset
|
63 |
|
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
64 |
def convertsink(ui, path, type): |
9962
a7178eccf2dc
convert: better error on invalid repository type
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
65 |
if type and type not in [s[0] for s in sink_converters]: |
a7178eccf2dc
convert: better error on invalid repository type
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
66 |
raise util.Abort(_('%s: invalid destination repository type') % type) |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
67 |
for name, sink in sink_converters: |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
68 |
try: |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
69 |
if not type or name == type: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
70 |
return sink(ui, path) |
5415
1d53a75ea0fc
convert: do not output when trying to load svn bindings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
5414
diff
changeset
|
71 |
except NoRepo, inst: |
1d53a75ea0fc
convert: do not output when trying to load svn bindings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
5414
diff
changeset
|
72 |
ui.note(_("convert: %s\n") % inst) |
13479
b14ed1692b27
convert/svn: handle MissingTool exception from converter_sink class
Azhagu Selvan SP <tamizhgeek@gmail.com>
parents:
12769
diff
changeset
|
73 |
except MissingTool, inst: |
13685
e9628665b670
i18n: don't mark trivial string for translation
Martin Geisler <mg@lazybytes.net>
parents:
13479
diff
changeset
|
74 |
raise util.Abort('%s\n' % inst) |
6913
580d5e6bfc1f
move % out of translatable strings
Martin Geisler <mg@daimi.au.dk>
parents:
6716
diff
changeset
|
75 |
raise util.Abort(_('%s: unknown repository type') % path) |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
76 |
|
11136
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
77 |
class progresssource(object): |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
78 |
def __init__(self, ui, source, filecount): |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
79 |
self.ui = ui |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
80 |
self.source = source |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
81 |
self.filecount = filecount |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
82 |
self.retrieved = 0 |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
83 |
|
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
84 |
def getfile(self, file, rev): |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
85 |
self.retrieved += 1 |
11731
87dcf758309d
convert/progress: use plural and avoid retrieving
timeless <timeless@gmail.com>
parents:
11136
diff
changeset
|
86 |
self.ui.progress(_('getting files'), self.retrieved, |
11136
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
87 |
item=file, total=self.filecount) |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
88 |
return self.source.getfile(file, rev) |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
89 |
|
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
90 |
def lookuprev(self, rev): |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
91 |
return self.source.lookuprev(rev) |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
92 |
|
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
93 |
def close(self): |
11731
87dcf758309d
convert/progress: use plural and avoid retrieving
timeless <timeless@gmail.com>
parents:
11136
diff
changeset
|
94 |
self.ui.progress(_('getting files'), None) |
11136
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
95 |
|
5281
a176f9c8b26e
convert: rename a class and a function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5256
diff
changeset
|
96 |
class converter(object): |
5375
dae323e453aa
convert: disable current --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
97 |
def __init__(self, ui, source, dest, revmapfile, opts): |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
98 |
|
316 | 99 |
self.source = source |
100 |
self.dest = dest |
|
4513
ac2fe196ac9b
Turns convert.py into a real extension
Edouard Gomez <ed.gomez@free.fr>
parents:
4512
diff
changeset
|
101 |
self.ui = ui |
3957
2b87d3c5ab8e
convert-repo: add option to attempt to sort by date
Matt Mackall <mpm@selenic.com>
parents:
3956
diff
changeset
|
102 |
self.opts = opts |
316 | 103 |
self.commitcache = {} |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
104 |
self.authors = {} |
4590
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
105 |
self.authorfile = None |
316 | 106 |
|
8444
057e96fe2955
convert: improve docstrings, comments.
Greg Ward <greg-hg@gerg.ca>
parents:
8377
diff
changeset
|
107 |
# Record converted revisions persistently: maps source revision |
8843
eb7b247a98ea
kill trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8693
diff
changeset
|
108 |
# ID to target revision ID (both strings). (This is how |
8444
057e96fe2955
convert: improve docstrings, comments.
Greg Ward <greg-hg@gerg.ca>
parents:
8377
diff
changeset
|
109 |
# incremental conversions work.) |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5488
diff
changeset
|
110 |
self.map = mapfile(ui, revmapfile) |
316 | 111 |
|
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
112 |
# Read first the dst author map if any |
4590
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
113 |
authorfile = self.dest.authorfile() |
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
114 |
if authorfile and os.path.exists(authorfile): |
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
115 |
self.readauthormap(authorfile) |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
116 |
# Extend/Override with new author map if necessary |
12198
0c67a58f0580
convert: deprecate --authors in preference for --authormap
Martin Geisler <mg@lazybytes.net>
parents:
11731
diff
changeset
|
117 |
if opts.get('authormap'): |
0c67a58f0580
convert: deprecate --authors in preference for --authormap
Martin Geisler <mg@lazybytes.net>
parents:
11731
diff
changeset
|
118 |
self.readauthormap(opts.get('authormap')) |
4590
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
119 |
self.authorfile = self.dest.authorfile() |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
120 |
|
16105
ebaa0aa749e2
convert: turn splicemap into a simple dictionary
Patrick Mezard <patrick@mezard.eu>
parents:
13745
diff
changeset
|
121 |
self.splicemap = common.parsesplicemap(opts.get('splicemap')) |
8377
29f4f0d66cd5
convert: adding branchmap functionality to convert extension
Michael J. Pedersen <m.pedersen@icelus.org>
parents:
8225
diff
changeset
|
122 |
self.branchmap = mapfile(ui, opts.get('branchmap')) |
5996
3f9ce63da18c
convert: allow synthetic history to be spliced in.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5959
diff
changeset
|
123 |
|
316 | 124 |
def walktree(self, heads): |
4719
1069205a8894
fix 'convert' with single commit repositories
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4635
diff
changeset
|
125 |
'''Return a mapping that identifies the uncommitted parents of every |
1069205a8894
fix 'convert' with single commit repositories
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4635
diff
changeset
|
126 |
uncommitted changeset.''' |
316 | 127 |
visit = heads |
8456
e9e2a2c9b294
convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8444
diff
changeset
|
128 |
known = set() |
316 | 129 |
parents = {} |
130 |
while visit: |
|
131 |
n = visit.pop(0) |
|
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
132 |
if n in known or n in self.map: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
133 |
continue |
8456
e9e2a2c9b294
convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8444
diff
changeset
|
134 |
known.add(n) |
11135
73a4ed3bfef8
convert: add progress support
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
135 |
self.ui.progress(_('scanning'), len(known), unit=_('revisions')) |
5203
653790c2fa52
convert: wrap cached commits author remapping
Patrick Mezard <pmezard@gmail.com>
parents:
5195
diff
changeset
|
136 |
commit = self.cachecommit(n) |
4719
1069205a8894
fix 'convert' with single commit repositories
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4635
diff
changeset
|
137 |
parents[n] = [] |
5203
653790c2fa52
convert: wrap cached commits author remapping
Patrick Mezard <pmezard@gmail.com>
parents:
5195
diff
changeset
|
138 |
for p in commit.parents: |
4719
1069205a8894
fix 'convert' with single commit repositories
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4635
diff
changeset
|
139 |
parents[n].append(p) |
316 | 140 |
visit.append(p) |
11135
73a4ed3bfef8
convert: add progress support
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
141 |
self.ui.progress(_('scanning'), None) |
316 | 142 |
|
143 |
return parents |
|
144 |
||
16106
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
145 |
def mergesplicemap(self, parents, splicemap): |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
146 |
"""A splicemap redefines child/parent relationships. Check the |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
147 |
map contains valid revision identifiers and merge the new |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
148 |
links in the source graph. |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
149 |
""" |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
150 |
for c in splicemap: |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
151 |
if c not in parents: |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
152 |
if not self.dest.hascommit(self.map.get(c, c)): |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
153 |
# Could be in source but not converted during this run |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
154 |
self.ui.warn(_('splice map revision %s is not being ' |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
155 |
'converted, ignoring\n') % c) |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
156 |
continue |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
157 |
pc = [] |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
158 |
for p in splicemap[c]: |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
159 |
# We do not have to wait for nodes already in dest. |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
160 |
if self.dest.hascommit(self.map.get(p, p)): |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
161 |
continue |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
162 |
# Parent is not in dest and not being converted, not good |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
163 |
if p not in parents: |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
164 |
raise util.Abort(_('unknown splice map parent: %s') % p) |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
165 |
pc.append(p) |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
166 |
parents[c] = pc |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
167 |
|
8689
9bc95f8eb018
convert: parse sort mode sooner
Patrick Mezard <pmezard@gmail.com>
parents:
8688
diff
changeset
|
168 |
def toposort(self, parents, sortmode): |
4719
1069205a8894
fix 'convert' with single commit repositories
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4635
diff
changeset
|
169 |
'''Return an ordering such that every uncommitted changeset is |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
16925
diff
changeset
|
170 |
preceded by all its uncommitted ancestors.''' |
8688
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
171 |
|
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
172 |
def mapchildren(parents): |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
173 |
"""Return a (children, roots) tuple where 'children' maps parent |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
174 |
revision identifiers to children ones, and 'roots' is the list of |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
175 |
revisions without parents. 'parents' must be a mapping of revision |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
176 |
identifier to its parents ones. |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
177 |
""" |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
178 |
visit = parents.keys() |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
179 |
seen = set() |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
180 |
children = {} |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
181 |
roots = [] |
692
695dd9a491da
convert-repo: deal with packed git and other fixes
mpm@selenic.com
parents:
450
diff
changeset
|
182 |
|
8688
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
183 |
while visit: |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
184 |
n = visit.pop(0) |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
185 |
if n in seen: |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
186 |
continue |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
187 |
seen.add(n) |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
188 |
# Ensure that nodes without parents are present in the |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
189 |
# 'children' mapping. |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
190 |
children.setdefault(n, []) |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
191 |
hasparent = False |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
192 |
for p in parents[n]: |
16686
67964cda8701
cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents:
16106
diff
changeset
|
193 |
if p not in self.map: |
8688
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
194 |
visit.append(p) |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
195 |
hasparent = True |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
196 |
children.setdefault(p, []).append(n) |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
197 |
if not hasparent: |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
198 |
roots.append(n) |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
199 |
|
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
200 |
return children, roots |
6100
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
201 |
|
8688
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
202 |
# Sort functions are supposed to take a list of revisions which |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
203 |
# can be converted immediately and pick one |
6100
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
204 |
|
8688
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
205 |
def makebranchsorter(): |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
206 |
"""If the previously converted revision has a child in the |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
207 |
eligible revisions list, pick it. Return the list head |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
208 |
otherwise. Branch sort attempts to minimize branch |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
209 |
switching, which is harmful for Mercurial backend |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
210 |
compression. |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
211 |
""" |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
212 |
prev = [None] |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
213 |
def picknext(nodes): |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
214 |
next = nodes[0] |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
215 |
for n in nodes: |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
216 |
if prev[0] in parents[n]: |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
217 |
next = n |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
218 |
break |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
219 |
prev[0] = next |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
220 |
return next |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
221 |
return picknext |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
222 |
|
8690
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
223 |
def makesourcesorter(): |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
224 |
"""Source specific sort.""" |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
225 |
keyfn = lambda n: self.commitcache[n].sortkey |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
226 |
def picknext(nodes): |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
227 |
return sorted(nodes, key=keyfn)[0] |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
228 |
return picknext |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
229 |
|
8688
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
230 |
def makedatesorter(): |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
231 |
"""Sort revisions by date.""" |
6100
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
232 |
dates = {} |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
233 |
def getdate(n): |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
234 |
if n not in dates: |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
235 |
dates[n] = util.parsedate(self.commitcache[n].date) |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
236 |
return dates[n] |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
237 |
|
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
238 |
def picknext(nodes): |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
239 |
return min([(getdate(n), n) for n in nodes])[1] |
8688
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
240 |
|
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
241 |
return picknext |
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
242 |
|
8689
9bc95f8eb018
convert: parse sort mode sooner
Patrick Mezard <pmezard@gmail.com>
parents:
8688
diff
changeset
|
243 |
if sortmode == 'branchsort': |
9bc95f8eb018
convert: parse sort mode sooner
Patrick Mezard <pmezard@gmail.com>
parents:
8688
diff
changeset
|
244 |
picknext = makebranchsorter() |
9bc95f8eb018
convert: parse sort mode sooner
Patrick Mezard <pmezard@gmail.com>
parents:
8688
diff
changeset
|
245 |
elif sortmode == 'datesort': |
8688
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
246 |
picknext = makedatesorter() |
8690
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
247 |
elif sortmode == 'sourcesort': |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
248 |
picknext = makesourcesorter() |
6100
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
249 |
else: |
8689
9bc95f8eb018
convert: parse sort mode sooner
Patrick Mezard <pmezard@gmail.com>
parents:
8688
diff
changeset
|
250 |
raise util.Abort(_('unknown sort mode: %s') % sortmode) |
8688
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
251 |
|
31e613a89750
convert: split toposort() into subfunctions for readability
Patrick Mezard <pmezard@gmail.com>
parents:
8456
diff
changeset
|
252 |
children, actives = mapchildren(parents) |
316 | 253 |
|
254 |
s = [] |
|
6100
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
255 |
pendings = {} |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
256 |
while actives: |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
257 |
n = picknext(actives) |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
258 |
actives.remove(n) |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
259 |
s.append(n) |
316 | 260 |
|
6100
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
261 |
# Update dependents list |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
262 |
for c in children.get(n, []): |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
263 |
if c not in pendings: |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
264 |
pendings[c] = [p for p in parents[c] if p not in self.map] |
6131
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
265 |
try: |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
266 |
pendings[c].remove(n) |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
267 |
except ValueError: |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
268 |
raise util.Abort(_('cycle detected between %s and %s') |
fddeeb00f8d1
convert: improve cycles detection message
Patrick Mezard <pmezard@gmail.com>
parents:
6130
diff
changeset
|
269 |
% (recode(c), recode(n))) |
6100
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
270 |
if not pendings[c]: |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
271 |
# Parents are converted, node is eligible |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
272 |
actives.insert(0, c) |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
273 |
pendings[c] = None |
316 | 274 |
|
6100
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
275 |
if len(s) != len(parents): |
49c69e1e4aa2
convert: fix --datesort ordering
Patrick Mezard <pmezard@gmail.com>
parents:
6099
diff
changeset
|
276 |
raise util.Abort(_("not all revisions were sorted")) |
3957
2b87d3c5ab8e
convert-repo: add option to attempt to sort by date
Matt Mackall <mpm@selenic.com>
parents:
3956
diff
changeset
|
277 |
|
316 | 278 |
return s |
279 |
||
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
280 |
def writeauthormap(self): |
4590
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
281 |
authorfile = self.authorfile |
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
282 |
if authorfile: |
16925
eaf6a6d7f015
convert: lowercase status and abort messages
Martin Geisler <mg@aragost.com>
parents:
16689
diff
changeset
|
283 |
self.ui.status(_('writing author map file %s\n') % authorfile) |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7873
diff
changeset
|
284 |
ofile = open(authorfile, 'w+') |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7873
diff
changeset
|
285 |
for author in self.authors: |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7873
diff
changeset
|
286 |
ofile.write("%s=%s\n" % (author, self.authors[author])) |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7873
diff
changeset
|
287 |
ofile.close() |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
288 |
|
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
289 |
def readauthormap(self, authorfile): |
4590
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
290 |
afile = open(authorfile, 'r') |
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
291 |
for line in afile: |
7962
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
292 |
|
7968
43b70a964e0d
convert: handle comments starting with '#' in authormap files
Marti Raudsepp <marti@juffo.org>
parents:
7962
diff
changeset
|
293 |
line = line.strip() |
43b70a964e0d
convert: handle comments starting with '#' in authormap files
Marti Raudsepp <marti@juffo.org>
parents:
7962
diff
changeset
|
294 |
if not line or line.startswith('#'): |
6184
9d13e7129423
convert: Ignore empty lines in authormap file.
Marti Raudsepp <marti@juffo.org>
parents:
6143
diff
changeset
|
295 |
continue |
7962
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
296 |
|
4590
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
297 |
try: |
6186
aae4eb2f40b0
convert: Clean up authormap key=value splitting.
Marti Raudsepp <marti@juffo.org>
parents:
6185
diff
changeset
|
298 |
srcauthor, dstauthor = line.split('=', 1) |
7962
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
299 |
except ValueError: |
16925
eaf6a6d7f015
convert: lowercase status and abort messages
Martin Geisler <mg@aragost.com>
parents:
16689
diff
changeset
|
300 |
msg = _('ignoring bad line in author map file %s: %s\n') |
7962
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
301 |
self.ui.warn(msg % (authorfile, line.rstrip())) |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
302 |
continue |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
303 |
|
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
304 |
srcauthor = srcauthor.strip() |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
305 |
dstauthor = dstauthor.strip() |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
306 |
if self.authors.get(srcauthor) in (None, dstauthor): |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
307 |
msg = _('mapping author %s to %s\n') |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
308 |
self.ui.debug(msg % (srcauthor, dstauthor)) |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
309 |
self.authors[srcauthor] = dstauthor |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
310 |
continue |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
311 |
|
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
312 |
m = _('overriding mapping for author %s, was %s, will be %s\n') |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
313 |
self.ui.status(m % (srcauthor, self.authors[srcauthor], dstauthor)) |
62154415821f
convert: fix authormap handling of lines without '='
Marti Raudsepp <marti@juffo.org>
parents:
7948
diff
changeset
|
314 |
|
4590
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
315 |
afile.close() |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
316 |
|
5203
653790c2fa52
convert: wrap cached commits author remapping
Patrick Mezard <pmezard@gmail.com>
parents:
5195
diff
changeset
|
317 |
def cachecommit(self, rev): |
653790c2fa52
convert: wrap cached commits author remapping
Patrick Mezard <pmezard@gmail.com>
parents:
5195
diff
changeset
|
318 |
commit = self.source.getcommit(rev) |
653790c2fa52
convert: wrap cached commits author remapping
Patrick Mezard <pmezard@gmail.com>
parents:
5195
diff
changeset
|
319 |
commit.author = self.authors.get(commit.author, commit.author) |
8377
29f4f0d66cd5
convert: adding branchmap functionality to convert extension
Michael J. Pedersen <m.pedersen@icelus.org>
parents:
8225
diff
changeset
|
320 |
commit.branch = self.branchmap.get(commit.branch, commit.branch) |
5203
653790c2fa52
convert: wrap cached commits author remapping
Patrick Mezard <pmezard@gmail.com>
parents:
5195
diff
changeset
|
321 |
self.commitcache[rev] = commit |
653790c2fa52
convert: wrap cached commits author remapping
Patrick Mezard <pmezard@gmail.com>
parents:
5195
diff
changeset
|
322 |
return commit |
653790c2fa52
convert: wrap cached commits author remapping
Patrick Mezard <pmezard@gmail.com>
parents:
5195
diff
changeset
|
323 |
|
316 | 324 |
def copy(self, rev): |
5016
4ebc8693ce72
convert: add filename filtering and renaming support
Bryan O'Sullivan <bos@serpentine.com>
parents:
5014
diff
changeset
|
325 |
commit = self.commitcache[rev] |
4957
cdd33a048289
removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4924
diff
changeset
|
326 |
|
5374
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
327 |
changes = self.source.getchanges(rev) |
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
328 |
if isinstance(changes, basestring): |
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
329 |
if changes == SKIPREV: |
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
330 |
dest = SKIPREV |
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
331 |
else: |
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
332 |
dest = self.map[changes] |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5488
diff
changeset
|
333 |
self.map[rev] = dest |
5374
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
334 |
return |
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
335 |
files, copies = changes |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5621
diff
changeset
|
336 |
pbranches = [] |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
337 |
if commit.parents: |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5621
diff
changeset
|
338 |
for prev in commit.parents: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5621
diff
changeset
|
339 |
if prev not in self.commitcache: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5621
diff
changeset
|
340 |
self.cachecommit(prev) |
6210
942287cb1f57
Removed trailing spaces from everything except test output
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6186
diff
changeset
|
341 |
pbranches.append((self.map[prev], |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5621
diff
changeset
|
342 |
self.commitcache[prev].branch)) |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5621
diff
changeset
|
343 |
self.dest.setbranch(commit.branch, pbranches) |
5996
3f9ce63da18c
convert: allow synthetic history to be spliced in.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5959
diff
changeset
|
344 |
try: |
16105
ebaa0aa749e2
convert: turn splicemap into a simple dictionary
Patrick Mezard <patrick@mezard.eu>
parents:
13745
diff
changeset
|
345 |
parents = self.splicemap[rev] |
6956
12472a240398
i18n: mark strings for translation in convert extension
Martin Geisler <mg@daimi.au.dk>
parents:
6913
diff
changeset
|
346 |
self.ui.status(_('spliced in %s as parents of %s\n') % |
6143
5b159ebb19cf
convert: document splicemap, allow setting of multiple parents
Bryan O'Sullivan <bos@serpentine.com>
parents:
6131
diff
changeset
|
347 |
(parents, rev)) |
5b159ebb19cf
convert: document splicemap, allow setting of multiple parents
Bryan O'Sullivan <bos@serpentine.com>
parents:
6131
diff
changeset
|
348 |
parents = [self.map.get(p, p) for p in parents] |
5996
3f9ce63da18c
convert: allow synthetic history to be spliced in.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5959
diff
changeset
|
349 |
except KeyError: |
3f9ce63da18c
convert: allow synthetic history to be spliced in.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5959
diff
changeset
|
350 |
parents = [b[0] for b in pbranches] |
11136
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
351 |
source = progresssource(self.ui, self.source, len(files)) |
8843
eb7b247a98ea
kill trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8693
diff
changeset
|
352 |
newnode = self.dest.putcommit(files, copies, parents, commit, |
11136
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
353 |
source, self.map) |
ecc8b18736da
convert: display files data retrieval progress
Patrick Mezard <pmezard@gmail.com>
parents:
11135
diff
changeset
|
354 |
source.close() |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5528
diff
changeset
|
355 |
self.source.converted(rev, newnode) |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5488
diff
changeset
|
356 |
self.map[rev] = newnode |
316 | 357 |
|
8689
9bc95f8eb018
convert: parse sort mode sooner
Patrick Mezard <pmezard@gmail.com>
parents:
8688
diff
changeset
|
358 |
def convert(self, sortmode): |
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
359 |
try: |
5356
f0931c0240b4
convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents:
5281
diff
changeset
|
360 |
self.source.before() |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
361 |
self.dest.before() |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5488
diff
changeset
|
362 |
self.source.setrevmap(self.map) |
6956
12472a240398
i18n: mark strings for translation in convert extension
Martin Geisler <mg@daimi.au.dk>
parents:
6913
diff
changeset
|
363 |
self.ui.status(_("scanning source...\n")) |
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
364 |
heads = self.source.getheads() |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
365 |
parents = self.walktree(heads) |
16106
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
366 |
self.mergesplicemap(parents, self.splicemap) |
6956
12472a240398
i18n: mark strings for translation in convert extension
Martin Geisler <mg@daimi.au.dk>
parents:
6913
diff
changeset
|
367 |
self.ui.status(_("sorting...\n")) |
8689
9bc95f8eb018
convert: parse sort mode sooner
Patrick Mezard <pmezard@gmail.com>
parents:
8688
diff
changeset
|
368 |
t = self.toposort(parents, sortmode) |
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
369 |
num = len(t) |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
370 |
c = None |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
371 |
|
6956
12472a240398
i18n: mark strings for translation in convert extension
Martin Geisler <mg@daimi.au.dk>
parents:
6913
diff
changeset
|
372 |
self.ui.status(_("converting...\n")) |
12769
daa8dc6e1f66
convert: kill trailing whitespace
timeless <timeless@gmail.com>
parents:
12768
diff
changeset
|
373 |
for i, c in enumerate(t): |
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
374 |
num -= 1 |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
375 |
desc = self.commitcache[c].desc |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
376 |
if "\n" in desc: |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
377 |
desc = desc.splitlines()[0] |
5794
4c16020d1172
convert: print commit log message with local encoding correctly.
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
5656
diff
changeset
|
378 |
# convert log message to local encoding without using |
12768
c6b55be14461
convert: fix typo in comment
timeless <timeless@gmail.com>
parents:
12198
diff
changeset
|
379 |
# tolocal() because the encoding.encoding convert() |
c6b55be14461
convert: fix typo in comment
timeless <timeless@gmail.com>
parents:
12198
diff
changeset
|
380 |
# uses is 'utf-8' |
5954
851402e53337
convert: display source revision id with --verbose
Patrick Mezard <pmezard@gmail.com>
parents:
5794
diff
changeset
|
381 |
self.ui.status("%d %s\n" % (num, recode(desc))) |
6913
580d5e6bfc1f
move % out of translatable strings
Martin Geisler <mg@daimi.au.dk>
parents:
6716
diff
changeset
|
382 |
self.ui.note(_("source: %s\n") % recode(c)) |
11135
73a4ed3bfef8
convert: add progress support
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
383 |
self.ui.progress(_('converting'), i, unit=_('revisions'), |
73a4ed3bfef8
convert: add progress support
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
384 |
total=len(t)) |
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
385 |
self.copy(c) |
11135
73a4ed3bfef8
convert: add progress support
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
386 |
self.ui.progress(_('converting'), None) |
316 | 387 |
|
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
388 |
tags = self.source.gettags() |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
389 |
ctags = {} |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
390 |
for k in tags: |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
391 |
v = tags[k] |
5374
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
392 |
if self.map.get(v, SKIPREV) != SKIPREV: |
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
393 |
ctags[k] = self.map[v] |
316 | 394 |
|
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
395 |
if c and ctags: |
9431
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8843
diff
changeset
|
396 |
nrev, tagsparent = self.dest.puttags(ctags) |
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8843
diff
changeset
|
397 |
if nrev and tagsparent: |
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8843
diff
changeset
|
398 |
# write another hash correspondence to override the previous |
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8843
diff
changeset
|
399 |
# one so we don't end up with extra tag heads |
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8843
diff
changeset
|
400 |
tagsparents = [e for e in self.map.iteritems() |
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8843
diff
changeset
|
401 |
if e[1] == tagsparent] |
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8843
diff
changeset
|
402 |
if tagsparents: |
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8843
diff
changeset
|
403 |
self.map[tagsparents[0][0]] = nrev |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
404 |
|
13745
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
405 |
bookmarks = self.source.getbookmarks() |
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
406 |
cbookmarks = {} |
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
407 |
for k in bookmarks: |
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
408 |
v = bookmarks[k] |
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
409 |
if self.map.get(v, SKIPREV) != SKIPREV: |
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
410 |
cbookmarks[k] = self.map[v] |
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
411 |
|
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
412 |
if c and cbookmarks: |
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
413 |
self.dest.putbookmarks(cbookmarks) |
9ff22f600c6c
convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr>
parents:
13685
diff
changeset
|
414 |
|
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4588
diff
changeset
|
415 |
self.writeauthormap() |
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
416 |
finally: |
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
417 |
self.cleanup() |
694 | 418 |
|
4588
9855939d0c82
convert extension: Save a few opens on the map file
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
419 |
def cleanup(self): |
5356
f0931c0240b4
convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents:
5281
diff
changeset
|
420 |
try: |
f0931c0240b4
convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents:
5281
diff
changeset
|
421 |
self.dest.after() |
f0931c0240b4
convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents:
5281
diff
changeset
|
422 |
finally: |
f0931c0240b4
convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents:
5281
diff
changeset
|
423 |
self.source.after() |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5488
diff
changeset
|
424 |
self.map.close() |
694 | 425 |
|
5281
a176f9c8b26e
convert: rename a class and a function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5256
diff
changeset
|
426 |
def convert(ui, src, dest=None, revmapfile=None, **opts): |
5794
4c16020d1172
convert: print commit log message with local encoding correctly.
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
5656
diff
changeset
|
427 |
global orig_encoding |
7948
de377b1a9a84
move encoding bits from util to encoding
Matt Mackall <mpm@selenic.com>
parents:
7877
diff
changeset
|
428 |
orig_encoding = encoding.encoding |
de377b1a9a84
move encoding bits from util to encoding
Matt Mackall <mpm@selenic.com>
parents:
7877
diff
changeset
|
429 |
encoding.encoding = 'UTF-8' |
4895
fa6c9381d053
convert: manually set encoding to UTF-8
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4883
diff
changeset
|
430 |
|
12198
0c67a58f0580
convert: deprecate --authors in preference for --authormap
Martin Geisler <mg@lazybytes.net>
parents:
11731
diff
changeset
|
431 |
# support --authors as an alias for --authormap |
0c67a58f0580
convert: deprecate --authors in preference for --authormap
Martin Geisler <mg@lazybytes.net>
parents:
11731
diff
changeset
|
432 |
if not opts.get('authormap'): |
0c67a58f0580
convert: deprecate --authors in preference for --authormap
Martin Geisler <mg@lazybytes.net>
parents:
11731
diff
changeset
|
433 |
opts['authormap'] = opts.get('authors') |
0c67a58f0580
convert: deprecate --authors in preference for --authormap
Martin Geisler <mg@lazybytes.net>
parents:
11731
diff
changeset
|
434 |
|
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
435 |
if not dest: |
4883
72ac66e88c43
convert: Use clone's behaviour for the default destionation name.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4719
diff
changeset
|
436 |
dest = hg.defaultdest(src) + "-hg" |
6956
12472a240398
i18n: mark strings for translation in convert extension
Martin Geisler <mg@daimi.au.dk>
parents:
6913
diff
changeset
|
437 |
ui.status(_("assuming destination %s\n") % dest) |
4521
d634b61e9cec
Add some more smart when initializing destination repository
Edouard Gomez <ed.gomez@free.fr>
parents:
4520
diff
changeset
|
438 |
|
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
439 |
destc = convertsink(ui, dest, opts.get('dest_type')) |
316 | 440 |
|
4761
7c8cd400e86a
convert: initialize source after destination, cleaning up if source is unusable
Brendan Cully <brendan@kublai.com>
parents:
4760
diff
changeset
|
441 |
try: |
8692
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
442 |
srcc, defaultsort = convertsource(ui, src, opts.get('source_type'), |
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
443 |
opts.get('rev')) |
4761
7c8cd400e86a
convert: initialize source after destination, cleaning up if source is unusable
Brendan Cully <brendan@kublai.com>
parents:
4760
diff
changeset
|
444 |
except Exception: |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
445 |
for path in destc.created: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5438
diff
changeset
|
446 |
shutil.rmtree(path, True) |
4761
7c8cd400e86a
convert: initialize source after destination, cleaning up if source is unusable
Brendan Cully <brendan@kublai.com>
parents:
4760
diff
changeset
|
447 |
raise |
316 | 448 |
|
8692
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
449 |
sortmodes = ('branchsort', 'datesort', 'sourcesort') |
8690
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
450 |
sortmode = [m for m in sortmodes if opts.get(m)] |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
451 |
if len(sortmode) > 1: |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8689
diff
changeset
|
452 |
raise util.Abort(_('more than one sort mode specified')) |
8692
827d4e807d57
convert: default revisions order depends on source
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
453 |
sortmode = sortmode and sortmode[0] or defaultsort |
8691
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
454 |
if sortmode == 'sourcesort' and not srcc.hasnativeorder(): |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
455 |
raise util.Abort(_('--sourcesort is not supported by this data source')) |
8689
9bc95f8eb018
convert: parse sort mode sooner
Patrick Mezard <pmezard@gmail.com>
parents:
8688
diff
changeset
|
456 |
|
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
457 |
fmap = opts.get('filemap') |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
458 |
if fmap: |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
459 |
srcc = filemap.filemap_source(ui, srcc, fmap) |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
460 |
destc.setfilemapmode(True) |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5376
diff
changeset
|
461 |
|
5011
89fbb0a5e8e3
convert: rename mapfile to revmapfile, so we can map more than just revs
Bryan O'Sullivan <bos@serpentine.com>
parents:
4958
diff
changeset
|
462 |
if not revmapfile: |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
463 |
try: |
5011
89fbb0a5e8e3
convert: rename mapfile to revmapfile, so we can map more than just revs
Bryan O'Sullivan <bos@serpentine.com>
parents:
4958
diff
changeset
|
464 |
revmapfile = destc.revmapfile() |
16689
f366d4c2ff34
cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents:
16686
diff
changeset
|
465 |
except Exception: |
5011
89fbb0a5e8e3
convert: rename mapfile to revmapfile, so we can map more than just revs
Bryan O'Sullivan <bos@serpentine.com>
parents:
4958
diff
changeset
|
466 |
revmapfile = os.path.join(destc, "map") |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
467 |
|
5375
dae323e453aa
convert: disable current --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
468 |
c = converter(ui, srcc, destc, revmapfile, opts) |
8689
9bc95f8eb018
convert: parse sort mode sooner
Patrick Mezard <pmezard@gmail.com>
parents:
8688
diff
changeset
|
469 |
c.convert(sortmode) |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
470 |