Mercurial > hg
annotate hgext/convert/cvs.py @ 34288:fc3b8483c6cb
copytrace: use the full copytracing method if only drafts are involved
This patch adds the functionality to use the full copytracing even if
`experimental.copytrace = heuristics` in cases when drafts are involved.
This is also a part of copytrace extension in fbext.
This also adds tests which are also taken from fbext.
.. feature::
The `heuristics` option for `experimental.copytrace` performs full
copytracing if both source and destination branches contains non-public
changsets only.
Differential Revision: https://phab.mercurial-scm.org/D625
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Sun, 03 Sep 2017 20:06:45 +0530 |
parents | 698cccf1ad28 |
children | 671aba341d90 |
rev | line source |
---|---|
8250
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
1 # cvs.py: CVS conversion code inspired by hg-cvs-import and git-cvsimport |
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. |
28413
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
7 from __future__ import absolute_import |
4516
96d8a56d4ef9
Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4515
diff
changeset
|
8 |
28413
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
9 import errno |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
10 import os |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
11 import re |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
12 import socket |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
13 |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28861
diff
changeset
|
14 from mercurial.i18n import _ |
28413
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
15 from mercurial import ( |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
16 encoding, |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
17 error, |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29205
diff
changeset
|
18 pycompat, |
28413
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
19 util, |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
20 ) |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
21 |
28413
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
22 from . import ( |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
23 common, |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
24 cvsps, |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
25 ) |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
26 |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28413
diff
changeset
|
27 stringio = util.stringio |
28413
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
28 checktool = common.checktool |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
29 commit = common.commit |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
30 converter_source = common.converter_source |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
31 makedatetimestamp = common.makedatetimestamp |
6bda82107e05
convert: cvs use absolute_import
timeless <timeless@mozdev.org>
parents:
26779
diff
changeset
|
32 NoRepo = common.NoRepo |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
33 |
4448
af013ae3ca10
use documented convert-repo interface
Daniel Holth <dholth@fastmail.fm>
parents:
4447
diff
changeset
|
34 class convert_cvs(converter_source): |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
35 def __init__(self, ui, path, revs=None): |
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
36 super(convert_cvs, self).__init__(ui, path, revs=revs) |
4807
15a3cbfc6568
convert: call superclass init from engine init functions
Brendan Cully <brendan@kublai.com>
parents:
4762
diff
changeset
|
37 |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
38 cvs = os.path.join(path, "CVS") |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
39 if not os.path.exists(cvs): |
10939
9f6731b03906
convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10800
diff
changeset
|
40 raise NoRepo(_("%s does not look like a CVS checkout") % path) |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
41 |
6690
127e8c3466d1
convert: cvs.py - Allow user to use built-in CVS changeset code.
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
6318
diff
changeset
|
42 checktool('cvs') |
5497
f0a3918abd42
convert: fail if an external required tool is not found
Patrick Mezard <pmezard@gmail.com>
parents:
5381
diff
changeset
|
43 |
8048
d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Patrick Mezard <pmezard@gmail.com>
parents:
7874
diff
changeset
|
44 self.changeset = None |
3954
9af4b853ed4d
convert-repo: add CVS branch support
Matt Mackall <mpm@selenic.com>
parents:
3953
diff
changeset
|
45 self.files = {} |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
46 self.tags = {} |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
47 self.lastbranch = {} |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
48 self.socket = None |
9031
3b76321aa0de
compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents:
8598
diff
changeset
|
49 self.cvsroot = open(os.path.join(cvs, "Root")).read()[:-1] |
3b76321aa0de
compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents:
8598
diff
changeset
|
50 self.cvsrepo = open(os.path.join(cvs, "Repository")).read()[:-1] |
11987
3145951e50fe
convert: use encoding.encoding instead of locale.getpreferredencoding()
Brodie Rao <brodie@bitheap.org>
parents:
11134
diff
changeset
|
51 self.encoding = encoding.encoding |
6690
127e8c3466d1
convert: cvs.py - Allow user to use built-in CVS changeset code.
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
6318
diff
changeset
|
52 |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
53 self._connect() |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
54 |
8048
d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Patrick Mezard <pmezard@gmail.com>
parents:
7874
diff
changeset
|
55 def _parse(self): |
d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Patrick Mezard <pmezard@gmail.com>
parents:
7874
diff
changeset
|
56 if self.changeset is not None: |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
57 return |
8048
d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Patrick Mezard <pmezard@gmail.com>
parents:
7874
diff
changeset
|
58 self.changeset = {} |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
59 |
4760
07efcce17d28
convert: add -r argument specifying latest revision to convert
Brendan Cully <brendan@kublai.com>
parents:
4759
diff
changeset
|
60 maxrev = 0 |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
61 if self.revs: |
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
62 if len(self.revs) > 1: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25748
diff
changeset
|
63 raise error.Abort(_('cvs source does not support specifying ' |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
64 'multiple revs')) |
4760
07efcce17d28
convert: add -r argument specifying latest revision to convert
Brendan Cully <brendan@kublai.com>
parents:
4759
diff
changeset
|
65 # TODO: handle tags |
07efcce17d28
convert: add -r argument specifying latest revision to convert
Brendan Cully <brendan@kublai.com>
parents:
4759
diff
changeset
|
66 try: |
07efcce17d28
convert: add -r argument specifying latest revision to convert
Brendan Cully <brendan@kublai.com>
parents:
4759
diff
changeset
|
67 # patchset number? |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
68 maxrev = int(self.revs[0]) |
4760
07efcce17d28
convert: add -r argument specifying latest revision to convert
Brendan Cully <brendan@kublai.com>
parents:
4759
diff
changeset
|
69 except ValueError: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25748
diff
changeset
|
70 raise error.Abort(_('revision %s is not a patchset number') |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
71 % self.revs[0]) |
4760
07efcce17d28
convert: add -r argument specifying latest revision to convert
Brendan Cully <brendan@kublai.com>
parents:
4759
diff
changeset
|
72 |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29205
diff
changeset
|
73 d = pycompat.getcwd() |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
74 try: |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
75 os.chdir(self.path) |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
76 id = None |
6690
127e8c3466d1
convert: cvs.py - Allow user to use built-in CVS changeset code.
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
6318
diff
changeset
|
77 |
9543
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
78 cache = 'update' |
34153
8860100908eb
configitems: register the 'convert.cvsps.cache' config
Boris Feld <boris.feld@octobus.net>
parents:
30638
diff
changeset
|
79 if not self.ui.configbool('convert', 'cvsps.cache'): |
9543
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
80 cache = None |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
81 db = cvsps.createlog(self.ui, cache=cache) |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
82 db = cvsps.createchangeset(self.ui, db, |
34154
50f1c2d98db0
configitems: register the 'convert.cvsps.fuzz' config
Boris Feld <boris.feld@octobus.net>
parents:
34153
diff
changeset
|
83 fuzz=int(self.ui.config('convert', 'cvsps.fuzz')), |
34156
698cccf1ad28
configitems: register the 'convert.cvsps.mergeto' config
Boris Feld <boris.feld@octobus.net>
parents:
34155
diff
changeset
|
84 mergeto=self.ui.config('convert', 'cvsps.mergeto'), |
34155
6ea92f1b7a87
configitems: register the 'convert.cvsps.mergefrom' config
Boris Feld <boris.feld@octobus.net>
parents:
34154
diff
changeset
|
85 mergefrom=self.ui.config('convert', 'cvsps.mergefrom')) |
5920
5df7cb799baf
CVS convert: Find correct parent for new branch (issue704)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5521
diff
changeset
|
86 |
9543
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
87 for cs in db: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
88 if maxrev and cs.id > maxrev: |
9543
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
89 break |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
90 id = str(cs.id) |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
91 cs.author = self.recode(cs.author) |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
92 self.lastbranch[cs.branch] = id |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
93 cs.comment = self.recode(cs.comment) |
17974
337d728e644f
convert: add config option to use the local time zone
Julian Cowley <julian@lava.net>
parents:
17424
diff
changeset
|
94 if self.ui.configbool('convert', 'localtimezone'): |
337d728e644f
convert: add config option to use the local time zone
Julian Cowley <julian@lava.net>
parents:
17424
diff
changeset
|
95 cs.date = makedatetimestamp(cs.date[0]) |
16514
363e808de349
i18n: use locale insensitive format for datetimes as intermediate representation (issue3398)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
14494
diff
changeset
|
96 date = util.datestr(cs.date, '%Y-%m-%d %H:%M:%S %1%2') |
9543
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
97 self.tags.update(dict.fromkeys(cs.tags, id)) |
5920
5df7cb799baf
CVS convert: Find correct parent for new branch (issue704)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5521
diff
changeset
|
98 |
9543
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
99 files = {} |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
100 for f in cs.entries: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
101 files[f.file] = "%s%s" % ('.'.join([str(x) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
102 for x in f.revision]), |
9543
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
103 ['', '(DEAD)'][f.dead]) |
6690
127e8c3466d1
convert: cvs.py - Allow user to use built-in CVS changeset code.
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
6318
diff
changeset
|
104 |
9543
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
105 # add current commit to set |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
106 c = commit(author=cs.author, date=date, |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
107 parents=[str(p.id) for p in cs.parents], |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
108 desc=cs.comment, branch=cs.branch or '') |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
109 self.changeset[id] = c |
56a5f80556f5
convert/cvs: stop supporting external cvsps
Patrick Mezard <pmezard@gmail.com>
parents:
9102
diff
changeset
|
110 self.files[id] = files |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
111 |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
112 self.heads = self.lastbranch.values() |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
113 finally: |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
114 os.chdir(d) |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
115 |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
116 def _connect(self): |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
117 root = self.cvsroot |
4047 | 118 conntype = None |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
119 user, host = None, None |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
120 cmd = ['cvs', 'server'] |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
121 |
6956
12472a240398
i18n: mark strings for translation in convert extension
Martin Geisler <mg@daimi.au.dk>
parents:
6816
diff
changeset
|
122 self.ui.status(_("connecting to %s\n") % root) |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
123 |
4047 | 124 if root.startswith(":pserver:"): |
125 root = root[9:] | |
4532
c3a78a49d7f0
Some small cleanups for convert extension:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4521
diff
changeset
|
126 m = re.match(r'(?:(.*?)(?::(.*?))?@)?([^:\/]*)(?::(\d*))?(.*)', |
c3a78a49d7f0
Some small cleanups for convert extension:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4521
diff
changeset
|
127 root) |
4047 | 128 if m: |
129 conntype = "pserver" | |
130 user, passw, serv, port, root = m.groups() | |
131 if not user: | |
132 user = "anonymous" | |
5082
dc2e512cb89a
CVS import: Support new-style .cvspass-file format.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4698
diff
changeset
|
133 if not port: |
dc2e512cb89a
CVS import: Support new-style .cvspass-file format.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4698
diff
changeset
|
134 port = 2401 |
4047 | 135 else: |
5082
dc2e512cb89a
CVS import: Support new-style .cvspass-file format.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4698
diff
changeset
|
136 port = int(port) |
dc2e512cb89a
CVS import: Support new-style .cvspass-file format.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4698
diff
changeset
|
137 format0 = ":pserver:%s@%s:%s" % (user, serv, root) |
dc2e512cb89a
CVS import: Support new-style .cvspass-file format.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4698
diff
changeset
|
138 format1 = ":pserver:%s@%s:%d%s" % (user, serv, port, root) |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
139 |
4047 | 140 if not passw: |
141 passw = "A" | |
7442
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
142 cvspass = os.path.expanduser("~/.cvspass") |
7444
f792c7bb2fb3
Improvement to 14ce129cfcd: Use try/except and pass filename on errors
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7442
diff
changeset
|
143 try: |
7442
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
144 pf = open(cvspass) |
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
145 for line in pf.read().splitlines(): |
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
146 part1, part2 = line.split(' ', 1) |
16683 | 147 # /1 :pserver:user@example.com:2401/cvsroot/foo |
148 # Ah<Z | |
7442
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
149 if part1 == '/1': |
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
150 part1, part2 = part2.split(' ', 1) |
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
151 format = format1 |
16683 | 152 # :pserver:user@example.com:/cvsroot/foo Ah<Z |
7442
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
153 else: |
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
154 format = format0 |
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
155 if part1 == format: |
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
156 passw = part2 |
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
157 break |
a14ce129cfcd
convert: check existence of ~/.cvspass before reading it
Edouard Gomez <ed.gomez@free.fr>
parents:
7441
diff
changeset
|
158 pf.close() |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24395
diff
changeset
|
159 except IOError as inst: |
7444
f792c7bb2fb3
Improvement to 14ce129cfcd: Use try/except and pass filename on errors
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7442
diff
changeset
|
160 if inst.errno != errno.ENOENT: |
f792c7bb2fb3
Improvement to 14ce129cfcd: Use try/except and pass filename on errors
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7442
diff
changeset
|
161 if not getattr(inst, 'filename', None): |
f792c7bb2fb3
Improvement to 14ce129cfcd: Use try/except and pass filename on errors
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7442
diff
changeset
|
162 inst.filename = cvspass |
f792c7bb2fb3
Improvement to 14ce129cfcd: Use try/except and pass filename on errors
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7442
diff
changeset
|
163 raise |
4047 | 164 |
165 sck = socket.socket() | |
166 sck.connect((serv, port)) | |
4532
c3a78a49d7f0
Some small cleanups for convert extension:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4521
diff
changeset
|
167 sck.send("\n".join(["BEGIN AUTH REQUEST", root, user, passw, |
c3a78a49d7f0
Some small cleanups for convert extension:
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4521
diff
changeset
|
168 "END AUTH REQUEST", ""])) |
4047 | 169 if sck.recv(128) != "I LOVE YOU\n": |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25748
diff
changeset
|
170 raise error.Abort(_("CVS pserver authentication failed")) |
4047 | 171 |
172 self.writep = self.readp = sck.makefile('r+') | |
173 | |
174 if not conntype and root.startswith(":local:"): | |
175 conntype = "local" | |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
176 root = root[7:] |
4047 | 177 |
178 if not conntype: | |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
179 # :ext:user@host/home/user/path/to/cvsroot |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
180 if root.startswith(":ext:"): |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
181 root = root[5:] |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
182 m = re.match(r'(?:([^@:/]+)@)?([^:/]+):?(.*)', root) |
5304
b85f7cc133cc
convert: avoid interpreting Windows path as CVS connection strings.
Patrick Mezard <pmezard@gmail.com>
parents:
5303
diff
changeset
|
183 # Do not take Windows path "c:\foo\bar" for a connection strings |
b85f7cc133cc
convert: avoid interpreting Windows path as CVS connection strings.
Patrick Mezard <pmezard@gmail.com>
parents:
5303
diff
changeset
|
184 if os.path.isdir(root) or not m: |
4047 | 185 conntype = "local" |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
186 else: |
4047 | 187 conntype = "rsh" |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
188 user, host, root = m.group(1), m.group(2), m.group(3) |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
189 |
4047 | 190 if conntype != "pserver": |
4516
96d8a56d4ef9
Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4515
diff
changeset
|
191 if conntype == "rsh": |
30638
1c5cbf28f007
py3: replace os.environ with encoding.environ (part 5 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30519
diff
changeset
|
192 rsh = encoding.environ.get("CVS_RSH") or "ssh" |
4047 | 193 if user: |
194 cmd = [rsh, '-l', user, host] + cmd | |
195 else: | |
196 cmd = [rsh, host] + cmd | |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
197 |
5303
a76c61679b71
convert: call popen2 in binary mode, with a command string.
Patrick Mezard <pmezard@gmail.com>
parents:
5082
diff
changeset
|
198 # popen2 does not support argument lists under Windows |
a76c61679b71
convert: call popen2 in binary mode, with a command string.
Patrick Mezard <pmezard@gmail.com>
parents:
5082
diff
changeset
|
199 cmd = [util.shellquote(arg) for arg in cmd] |
a76c61679b71
convert: call popen2 in binary mode, with a command string.
Patrick Mezard <pmezard@gmail.com>
parents:
5082
diff
changeset
|
200 cmd = util.quotecommand(' '.join(cmd)) |
8339
f55869abb5c3
util: remove ignored mode argument in popen[23]
Martin Geisler <mg@lazybytes.net>
parents:
8250
diff
changeset
|
201 self.writep, self.readp = util.popen2(cmd) |
4047 | 202 |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
203 self.realroot = root |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
204 |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
205 self.writep.write("Root %s\n" % root) |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
206 self.writep.write("Valid-responses ok error Valid-requests Mode" |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
207 " M Mbinary E Checked-in Created Updated" |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
208 " Merged Removed\n") |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
209 self.writep.write("valid-requests\n") |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
210 self.writep.flush() |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
211 r = self.readp.readline() |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
212 if not r.startswith("Valid-requests"): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25748
diff
changeset
|
213 raise error.Abort(_('unexpected response from CVS server ' |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
214 '(expected "Valid-requests", but got %r)') |
9095
89fd11257d75
convert/cvs: improve error message on unexpected server output.
Greg Ward <greg-hg@gerg.ca>
parents:
8598
diff
changeset
|
215 % r) |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
216 if "UseUnchanged" in r: |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
217 self.writep.write("UseUnchanged\n") |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
218 self.writep.flush() |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
219 r = self.readp.readline() |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
220 |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
221 def getheads(self): |
8048
d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Patrick Mezard <pmezard@gmail.com>
parents:
7874
diff
changeset
|
222 self._parse() |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
223 return self.heads |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
224 |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
225 def getfile(self, name, rev): |
5539
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
226 |
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
227 def chunkedread(fp, count): |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
16683
diff
changeset
|
228 # file-objects returned by socket.makefile() do not handle |
5539
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
229 # large read() requests very well. |
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
230 chunksize = 65536 |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28413
diff
changeset
|
231 output = stringio() |
5539
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
232 while count > 0: |
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
233 data = fp.read(min(count, chunksize)) |
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
234 if not data: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25748
diff
changeset
|
235 raise error.Abort(_("%d bytes missing from remote file") |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
236 % count) |
5539
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
237 count -= len(data) |
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
238 output.write(data) |
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
239 return output.getvalue() |
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
240 |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10939
diff
changeset
|
241 self._parse() |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
242 if rev.endswith("(DEAD)"): |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
17974
diff
changeset
|
243 return None, None |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
244 |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
245 args = ("-N -P -kk -r %s --" % rev).split() |
5305
87348cdce88c
convert: fix remote cvs file paths separator
Patrick Mezard <pmezard@gmail.com>
parents:
5304
diff
changeset
|
246 args.append(self.cvsrepo + '/' + name) |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
247 for x in args: |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
248 self.writep.write("Argument %s\n" % x) |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
249 self.writep.write("Directory .\n%s\nco\n" % self.realroot) |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
250 self.writep.flush() |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
251 |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
252 data = "" |
10800
49c109d037dd
convert.cvs: Initialize state variable and abort on cvs error
Mads Kiilerich <mads@kiilerich.com>
parents:
10282
diff
changeset
|
253 mode = None |
14494
1ffeeb91c55d
check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents:
12063
diff
changeset
|
254 while True: |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
255 line = self.readp.readline() |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
256 if line.startswith("Created ") or line.startswith("Updated "): |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
257 self.readp.readline() # path |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
258 self.readp.readline() # entries |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
259 mode = self.readp.readline()[:-1] |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
260 count = int(self.readp.readline()[:-1]) |
5539
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
261 data = chunkedread(self.readp, count) |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
262 elif line.startswith(" "): |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
263 data += line[1:] |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
264 elif line.startswith("M "): |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
265 pass |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
266 elif line.startswith("Mbinary "): |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
267 count = int(self.readp.readline()[:-1]) |
5539
954e68e54dea
convert: read CVS files in chunks (issue 800)
Patrick Mezard <pmezard@gmail.com>
parents:
5528
diff
changeset
|
268 data = chunkedread(self.readp, count) |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
269 else: |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
270 if line == "ok\n": |
10800
49c109d037dd
convert.cvs: Initialize state variable and abort on cvs error
Mads Kiilerich <mads@kiilerich.com>
parents:
10282
diff
changeset
|
271 if mode is None: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25748
diff
changeset
|
272 raise error.Abort(_('malformed response from CVS')) |
4082
6b2909e84203
convert-repo converts symlinks from git
Daniel Holth <dholth@fastmail.fm>
parents:
4062
diff
changeset
|
273 return (data, "x" in mode and "x" or "") |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
274 elif line.startswith("E "): |
6956
12472a240398
i18n: mark strings for translation in convert extension
Martin Geisler <mg@daimi.au.dk>
parents:
6816
diff
changeset
|
275 self.ui.warn(_("cvs server: %s\n") % line[2:]) |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
276 elif line.startswith("Remove"): |
7874
d812029cda85
cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7519
diff
changeset
|
277 self.readp.readline() |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
278 else: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25748
diff
changeset
|
279 raise error.Abort(_("unknown CVS response: %s") % line) |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
280 |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
281 def getchanges(self, rev, full): |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
282 if full: |
26779
aaa33ec3c951
grammar: use does instead of do where appropriate
timeless@mozdev.org
parents:
26587
diff
changeset
|
283 raise error.Abort(_("convert from cvs does not support --full")) |
8048
d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Patrick Mezard <pmezard@gmail.com>
parents:
7874
diff
changeset
|
284 self._parse() |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
22300
diff
changeset
|
285 return sorted(self.files[rev].iteritems()), {}, set() |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
286 |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
287 def getcommit(self, rev): |
8048
d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Patrick Mezard <pmezard@gmail.com>
parents:
7874
diff
changeset
|
288 self._parse() |
3954
9af4b853ed4d
convert-repo: add CVS branch support
Matt Mackall <mpm@selenic.com>
parents:
3953
diff
changeset
|
289 return self.changeset[rev] |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
290 |
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
291 def gettags(self): |
8048
d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Patrick Mezard <pmezard@gmail.com>
parents:
7874
diff
changeset
|
292 self._parse() |
3953
fad134931327
convert-repo: add basic CVS import support
Matt Mackall <mpm@selenic.com>
parents:
3939
diff
changeset
|
293 return self.tags |
5381
6874368120dc
convert_cvs: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5308
diff
changeset
|
294 |
6874368120dc
convert_cvs: add --filemap support
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5308
diff
changeset
|
295 def getchangedfiles(self, rev, i): |
8048
d22432bdcba1
convert/cvs: delay CVS log parsing after initialization (issue1581/2)
Patrick Mezard <pmezard@gmail.com>
parents:
7874
diff
changeset
|
296 self._parse() |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8169
diff
changeset
|
297 return sorted(self.files[rev]) |