Mercurial > hg-stable
annotate hgext/convert/hg.py @ 17922:7f5dab94e48c
bookmarks: introduce a bmstore to manage bookmark persistence
Bookmarks persistence still showed a fair amount of its legacy as a
monkeypatching extension. This encapsulates all bookmarks
serialization and parsing in a single class, and offers a single
location where other bookmarks storage engines can be substituted
in. As a result, many files no longer import the bookmarks module,
which strikes me as an encapsulation win.
This doesn't do anything to the current bookmark state yet, but I'm
hoping put that in the bmstore class as well.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Wed, 07 Nov 2012 16:21:39 -0600 |
parents | 1093ad1e8903 |
children | 687ed69f6fdf |
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 |
13746
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
24 from mercurial import hg, util, context, bookmarks, error |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
25 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
26 from common import NoRepo, commit, converter_source, converter_sink |
694 | 27 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
28 class mercurial_sink(converter_sink): |
4763
8e9d3faec270
convert: split converter into convertsource and convertsink
Brendan Cully <brendan@kublai.com>
parents:
4760
diff
changeset
|
29 def __init__(self, ui, path): |
5440
b4ae8535f834
convert: add default constructor for converter_sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5439
diff
changeset
|
30 converter_sink.__init__(self, ui, path) |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
31 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
|
32 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
|
33 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
|
34 self.lastbranch = None |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
35 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
|
36 try: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
37 self.repo = hg.repository(self.ui, path) |
5918
1716c8a0bd09
convert: mercurial sink must be local
Patrick Mezard <pmezard@gmail.com>
parents:
5522
diff
changeset
|
38 if not self.repo.local(): |
10938
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10282
diff
changeset
|
39 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
|
40 % path) |
7637 | 41 except error.RepoError, err: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
42 ui.traceback() |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
43 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
|
44 else: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
45 try: |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
46 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
|
47 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
|
48 if not self.repo.local(): |
10938
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10282
diff
changeset
|
49 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
|
50 % path) |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
51 self.created.append(path) |
7875
553aa0cbeab6
cleanup: drop unused assignments
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7874
diff
changeset
|
52 except error.RepoError: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
53 ui.traceback() |
10939
9f6731b03906
convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10938
diff
changeset
|
54 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
|
55 % path) |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
56 self.lock = None |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
57 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
|
58 self.filemapmode = False |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
59 |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
60 def before(self): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9432
diff
changeset
|
61 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
|
62 self.wlock = self.repo.wlock() |
5014
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
63 self.lock = self.repo.lock() |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
64 |
914054ca532e
convert: acquire/release locks periodically
Bryan O'Sullivan <bos@serpentine.com>
parents:
5013
diff
changeset
|
65 def after(self): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9432
diff
changeset
|
66 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
|
67 if self.lock: |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
68 self.lock.release() |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
69 if self.wlock: |
e388f5ee7bf5
convert: make hg sink cleanup safer
Matt Mackall <mpm@selenic.com>
parents:
9546
diff
changeset
|
70 self.wlock.release() |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
71 |
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
|
72 def revmapfile(self): |
15069
650d81a313cb
convert: use repo.join instead of referencing ".hg" directly
Martin Geisler <mg@aragost.com>
parents:
14556
diff
changeset
|
73 return self.repo.join("shamap") |
316 | 74 |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
75 def authorfile(self): |
15069
650d81a313cb
convert: use repo.join instead of referencing ".hg" directly
Martin Geisler <mg@aragost.com>
parents:
14556
diff
changeset
|
76 return self.repo.join("authormap") |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
77 |
316 | 78 def getheads(self): |
79 h = self.repo.changelog.heads() | |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
80 return [hex(x) for x in h] |
692
695dd9a491da
convert-repo: deal with packed git and other fixes
mpm@selenic.com
parents:
450
diff
changeset
|
81 |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
82 def setbranch(self, branch, pbranches): |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
83 if not self.clonebranches: |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
84 return |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
85 |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
86 setbranch = (branch != self.lastbranch) |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
87 self.lastbranch = branch |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
88 if not branch: |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
89 branch = 'default' |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
90 pbranches = [(b[0], b[1] and b[1] or 'default') for b in pbranches] |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
91 pbranch = pbranches and pbranches[0][1] or 'default' |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
92 |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
93 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
|
94 if setbranch: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
95 self.after() |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
96 try: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
97 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
|
98 except Exception: |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
99 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
|
100 self.before() |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
101 |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
102 # 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
|
103 # 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
|
104 missings = {} |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
105 for b in pbranches: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
106 try: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
107 self.repo.lookup(b[0]) |
16689
f366d4c2ff34
cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
108 except Exception: |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
109 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
|
110 |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
111 if missings: |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
112 self.after() |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
113 for pbranch, heads in missings.iteritems(): |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
114 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
|
115 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
|
116 self.ui.note(_('pulling from %s into %s\n') % (pbranch, branch)) |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
117 self.repo.pull(prepo, [prepo.lookup(h) for h in heads]) |
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5918
diff
changeset
|
118 self.before() |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
119 |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
120 def _rewritetags(self, source, revmap, data): |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
121 fp = cStringIO.StringIO() |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
122 for line in data.splitlines(): |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
123 s = line.split(' ', 1) |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
124 if len(s) != 2: |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
125 continue |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
126 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
|
127 if not revid: |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
128 continue |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
129 fp.write('%s %s\n' % (revid, s[1])) |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
130 return fp.getvalue() |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
131 |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
132 def putcommit(self, files, copies, parents, commit, source, revmap): |
6716
c9b8d2565b92
convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents:
6217
diff
changeset
|
133 |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
134 files = dict(files) |
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
135 def getfilectx(repo, memctx, f): |
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
136 v = files[f] |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
137 data, mode = source.getfile(f, v) |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
138 if f == '.hgtags': |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
139 data = self._rewritetags(source, revmap, data) |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
140 return context.memfilectx(f, data, 'l' in mode, 'x' in mode, |
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
141 copies.get(f)) |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
142 |
431 | 143 pl = [] |
144 for p in parents: | |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
145 if p not in pl: |
431 | 146 pl.append(p) |
147 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
|
148 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
|
149 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
|
150 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
|
151 parent = parents[0] |
316 | 152 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
153 if len(parents) < 2: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
154 parents.append(nullid) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
155 if len(parents) < 2: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
156 parents.append(nullid) |
431 | 157 p2 = parents.pop(0) |
692
695dd9a491da
convert-repo: deal with packed git and other fixes
mpm@selenic.com
parents:
450
diff
changeset
|
158 |
3954
9af4b853ed4d
convert-repo: add CVS branch support
Matt Mackall <mpm@selenic.com>
parents:
3953
diff
changeset
|
159 text = commit.desc |
5439
d0c67b52ac01
convert: make contents of "extra" dict available from sources, for sinks.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5437
diff
changeset
|
160 extra = commit.extra.copy() |
5038
8f157190075e
convert: add config option to turn off use of branch names
Bryan O'Sullivan <bos@serpentine.com>
parents:
5017
diff
changeset
|
161 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
|
162 extra['branch'] = commit.branch |
28b23b9073a8
convert: record the source revision in the changelog
Brendan Cully <brendan@kublai.com>
parents:
4765
diff
changeset
|
163 if commit.rev: |
28b23b9073a8
convert: record the source revision in the changelog
Brendan Cully <brendan@kublai.com>
parents:
4765
diff
changeset
|
164 extra['convert_revision'] = commit.rev |
4957
cdd33a048289
removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4873
diff
changeset
|
165 |
431 | 166 while parents: |
167 p1 = p2 | |
168 p2 = parents.pop(0) | |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
169 ctx = context.memctx(self.repo, (p1, p2), text, files.keys(), |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
170 getfilectx, commit.author, commit.date, extra) |
7874
d812029cda85
cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7815
diff
changeset
|
171 self.repo.commitctx(ctx) |
431 | 172 text = "(octopus merge fixup)\n" |
6217
fe8dbbe9520d
Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents:
6212
diff
changeset
|
173 p2 = hex(self.repo.changelog.tip()) |
431 | 174 |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
175 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
|
176 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
|
177 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 return parent |
1389
9b3ef6f3cef5
convert-repo: fix up octopus merge conversion
Matt Mackall <mpm@selenic.com>
parents:
1388
diff
changeset
|
183 return p2 |
316 | 184 |
694 | 185 def puttags(self, tags): |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
186 try: |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
187 parentctx = self.repo[self.tagsbranch] |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
188 tagparent = parentctx.node() |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
189 except error.RepoError: |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
190 parentctx = None |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
191 tagparent = nullid |
694 | 192 |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
193 try: |
9136
31177742f54a
for calls expecting bool args, pass bool instead of int
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8693
diff
changeset
|
194 oldlines = sorted(parentctx['.hgtags'].data().splitlines(True)) |
16689
f366d4c2ff34
cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
195 except Exception: |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
196 oldlines = [] |
694 | 197 |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
198 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
|
199 if newlines == oldlines: |
9431
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
200 return None, None |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
201 data = "".join(newlines) |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
202 def getfilectx(repo, memctx, f): |
6717
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
203 return context.memfilectx(f, data, False, False, None) |
2011bb8ada9a
convert: hg sink commits without working dir
Patrick Mezard <pmezard@gmail.com>
parents:
6716
diff
changeset
|
204 |
7877
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
205 self.ui.status(_("updating tags\n")) |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
206 date = "%s 0" % int(time.mktime(time.gmtime())) |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
207 extra = {'branch': self.tagsbranch} |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
208 ctx = context.memctx(self.repo, (tagparent, None), "update tags", |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
209 [".hgtags"], getfilectx, "convert-repo", date, |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
210 extra) |
eba7f12b0c51
cleanup: whitespace cleanup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7875
diff
changeset
|
211 self.repo.commitctx(ctx) |
9431
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
212 return hex(self.repo.changelog.tip()), 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
|
213 |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5360
diff
changeset
|
214 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
|
215 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
|
216 |
13746
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
217 def putbookmarks(self, updatedbookmark): |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
218 if not len(updatedbookmark): |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
219 return |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
220 |
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
221 self.ui.status(_("updating bookmarks\n")) |
17922
7f5dab94e48c
bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents:
16867
diff
changeset
|
222 destmarks = self.repo._bookmarks |
13746
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
223 for bookmark in updatedbookmark: |
17922
7f5dab94e48c
bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents:
16867
diff
changeset
|
224 destmarks[bookmark] = bin(updatedbookmark[bookmark]) |
7f5dab94e48c
bookmarks: introduce a bmstore to manage bookmark persistence
Augie Fackler <raf@durin42.com>
parents:
16867
diff
changeset
|
225 destmarks.write() |
13746
d80b768545cb
convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr>
parents:
11673
diff
changeset
|
226 |
16106
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
15193
diff
changeset
|
227 def hascommit(self, rev): |
16686
67964cda8701
cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
228 if rev not in self.repo and self.clonebranches: |
16162
7e279d475669
convert: fix typos in error messages
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
16106
diff
changeset
|
229 raise util.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
|
230 'repository (lookups with clonebranches=true ' |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
15193
diff
changeset
|
231 'are not implemented)') % rev) |
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
15193
diff
changeset
|
232 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
|
233 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
234 class mercurial_source(converter_source): |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
235 def __init__(self, ui, path, rev=None): |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
236 converter_source.__init__(self, ui, path, rev) |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
237 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
|
238 self.ignored = set() |
7815
bcd364b247ba
convert: change hg.saverev default to False
Matt Mackall <mpm@selenic.com>
parents:
7637
diff
changeset
|
239 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
|
240 try: |
4fbd27bf04b1
convert: fail properly if we can't read a source hg repository
Bryan O'Sullivan <bos@serpentine.com>
parents:
5352
diff
changeset
|
241 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
|
242 # 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
|
243 # 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
|
244 if not self.repo.local(): |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16686
diff
changeset
|
245 raise error.RepoError |
7637 | 246 except error.RepoError: |
8206
cce63ef1045b
ui: print_exc() -> traceback()
Matt Mackall <mpm@selenic.com>
parents:
8112
diff
changeset
|
247 ui.traceback() |
10939
9f6731b03906
convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10938
diff
changeset
|
248 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
|
249 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
|
250 self.lastctx = None |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
251 self._changescache = None |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
252 self.convertfp = None |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
253 # Restrict converted revisions to startrev descendants |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
254 startnode = ui.config('convert', 'hg.startrev') |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
255 if startnode is not None: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
256 try: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
257 startnode = self.repo.lookup(startnode) |
7637 | 258 except error.RepoError: |
6923
ebf1462f2145
strip trailing whitespace, replace tabs by spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6885
diff
changeset
|
259 raise util.Abort(_('%s is not a valid start revision') |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
260 % startnode) |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
261 startrev = self.repo.changelog.rev(startnode) |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
262 children = {startnode: 1} |
16867
1093ad1e8903
revlog: descendants(*revs) becomes descendants(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
263 for rev in self.repo.changelog.descendants([startrev]): |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
264 children[self.repo.changelog.node(rev)] = 1 |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
265 self.keep = children.__contains__ |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
266 else: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
267 self.keep = util.always |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
268 |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
269 def changectx(self, rev): |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
270 if self.lastrev != rev: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6717
diff
changeset
|
271 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
|
272 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
|
273 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
|
274 |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
275 def parents(self, ctx): |
9531
a2f36a082449
convert/hg: make parents() return changectx, not nodes
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
276 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
|
277 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
278 def getheads(self): |
5131
2f9edf6bae95
convert: only get history for requested revs when converting hg repo
Bryan O'Sullivan <bos@serpentine.com>
parents:
5121
diff
changeset
|
279 if self.rev: |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
280 heads = [self.repo[self.rev].node()] |
5131
2f9edf6bae95
convert: only get history for requested revs when converting hg repo
Bryan O'Sullivan <bos@serpentine.com>
parents:
5121
diff
changeset
|
281 else: |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
282 heads = self.repo.heads() |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
283 return [hex(h) for h in 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
|
284 |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
285 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
|
286 try: |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
287 fctx = self.changectx(rev)[name] |
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
288 return fctx.data(), fctx.flags() |
7633 | 289 except error.LookupError, err: |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
290 raise IOError(err) |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
291 |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
292 def getchanges(self, rev): |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
293 ctx = self.changectx(rev) |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
294 parents = self.parents(ctx) |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
295 if not parents: |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
296 files = sorted(ctx.manifest()) |
14151
1fe82c93b8e2
convert: also catch missing revlogs when introduced in repo roots
Mads Kiilerich <mads@kiilerich.com>
parents:
13757
diff
changeset
|
297 # getcopies() is not needed for roots, but it is a simple way to |
16683 | 298 # detect missing revlogs and abort on errors or populate |
299 # self.ignored | |
14151
1fe82c93b8e2
convert: also catch missing revlogs when introduced in repo roots
Mads Kiilerich <mads@kiilerich.com>
parents:
13757
diff
changeset
|
300 self.getcopies(ctx, parents, files) |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
301 return [(f, rev) for f in files if f not in self.ignored], {} |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
302 if self._changescache and self._changescache[0] == rev: |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
303 m, a, r = self._changescache[1] |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
304 else: |
9531
a2f36a082449
convert/hg: make parents() return changectx, not nodes
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
305 m, a, r = self.repo.status(parents[0].node(), ctx.node())[:3] |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
306 # getcopies() detects missing revlogs early, run it before |
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
307 # filtering the changes. |
9532
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
308 copies = self.getcopies(ctx, parents, m + a) |
7236
db6fbb785800
Remove trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7232
diff
changeset
|
309 changes = [(name, rev) for name in m + a + r |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
310 if name not in self.ignored] |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8206
diff
changeset
|
311 return sorted(changes), copies |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
312 |
9532
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
313 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
|
314 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
|
315 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
|
316 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
|
317 continue |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
318 try: |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
319 copysource, copynode = ctx.filectx(name).renamed() |
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
320 if copysource in self.ignored or not self.keep(copynode): |
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
321 continue |
9532
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
322 # Ignore copy sources not in parent revisions |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
323 found = False |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
324 for p in parents: |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
325 if copysource in p: |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
326 found = True |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
327 break |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
328 if not found: |
989cb39d1df4
convert/hg: handle bogus copy records (issue1843)
Patrick Mezard <pmezard@gmail.com>
parents:
9531
diff
changeset
|
329 continue |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
330 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
|
331 except TypeError: |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
332 pass |
7633 | 333 except error.LookupError, e: |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
334 if not self.ignoreerrors: |
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
335 raise |
8456
e9e2a2c9b294
convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8250
diff
changeset
|
336 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
|
337 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
|
338 return copies |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5131
diff
changeset
|
339 |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
340 def getcommit(self, rev): |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
341 ctx = self.changectx(rev) |
9531
a2f36a082449
convert/hg: make parents() return changectx, not nodes
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
342 parents = [p.hex() for p in self.parents(ctx)] |
5556
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
343 if self.saverev: |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
344 crev = rev |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
345 else: |
61fdf2558c0a
convert: some tidyups, doc improvements, and test fixes
Bryan O'Sullivan <bos@serpentine.com>
parents:
5554
diff
changeset
|
346 crev = None |
16514
363e808de349
i18n: use locale insensitive format for datetimes as intermediate representation (issue3398)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16162
diff
changeset
|
347 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
|
348 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
|
349 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
|
350 branch=ctx.branch(), extra=ctx.extra(), |
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8611
diff
changeset
|
351 sortkey=ctx.rev()) |
5013
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
352 |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
353 def gettags(self): |
6c1029aacc9a
convert: Support Mercurial as a source, as well as a sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
354 tags = [t for t in self.repo.tagslist() if t[0] != 'tip'] |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
355 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
|
356 if self.keep(node)]) |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
357 |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
358 def getchangedfiles(self, rev, i): |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
359 ctx = self.changectx(rev) |
6885
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
360 parents = self.parents(ctx) |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
361 if not parents and i is None: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
362 i = 0 |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
363 changes = [], ctx.manifest().keys(), [] |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
364 else: |
6e253aa04ff7
convert: implement startrev for hg source
Patrick Mezard <pmezard@gmail.com>
parents:
6762
diff
changeset
|
365 i = i or 0 |
9531
a2f36a082449
convert/hg: make parents() return changectx, not nodes
Patrick Mezard <pmezard@gmail.com>
parents:
9431
diff
changeset
|
366 changes = self.repo.status(parents[i].node(), ctx.node())[:3] |
7231
8e7130a10f3b
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
367 changes = [[f for f in l if f not in self.ignored] for l in changes] |
5379
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
368 |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
369 if i == 0: |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
370 self._changescache = (rev, changes) |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
371 |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
372 return changes[0] + changes[1] + changes[2] |
d3e51dc804f8
mercurial_source: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5378
diff
changeset
|
373 |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5553
diff
changeset
|
374 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
|
375 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
|
376 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
|
377 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
|
378 self.convertfp.flush() |
5805
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
379 |
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
380 def before(self): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9432
diff
changeset
|
381 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
|
382 |
e422305e0853
test-convert: test before() and after() conversion actions
Patrick Mezard <pmezard@gmail.com>
parents:
5556
diff
changeset
|
383 def after(self): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9432
diff
changeset
|
384 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
|
385 |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
386 def hasnativeorder(self): |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
387 return True |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
388 |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
389 def lookuprev(self, rev): |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
390 try: |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
391 return hex(self.repo.lookup(rev)) |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
392 except error.RepoError: |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
393 return None |
13757
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
394 |
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
395 def getbookmarks(self): |
043238abda94
convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr>
parents:
13746
diff
changeset
|
396 return bookmarks.listbookmarks(self.repo) |