Mercurial > hg > mercurial-crew-with-dirclash
comparison hgext/convert/cvs.py @ 4753:07efcce17d28
convert: add -r argument specifying latest revision to convert
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Sun, 01 Jul 2007 15:02:15 -0700 |
parents | 20ec5cc02f18 |
children | 47091c8d028e |
comparison
equal
deleted
inserted
replaced
4752:20ec5cc02f18 | 4753:07efcce17d28 |
---|---|
4 from mercurial import util | 4 from mercurial import util |
5 | 5 |
6 from common import NoRepo, commit, converter_source | 6 from common import NoRepo, commit, converter_source |
7 | 7 |
8 class convert_cvs(converter_source): | 8 class convert_cvs(converter_source): |
9 def __init__(self, ui, path): | 9 def __init__(self, ui, path, rev=None): |
10 self.path = path | 10 self.path = path |
11 self.ui = ui | 11 self.ui = ui |
12 self.rev = rev | |
12 cvs = os.path.join(path, "CVS") | 13 cvs = os.path.join(path, "CVS") |
13 if not os.path.exists(cvs): | 14 if not os.path.exists(cvs): |
14 raise NoRepo("couldn't open CVS repo %s" % path) | 15 raise NoRepo("couldn't open CVS repo %s" % path) |
15 | 16 |
16 self.changeset = {} | 17 self.changeset = {} |
27 | 28 |
28 def _parse(self): | 29 def _parse(self): |
29 if self.changeset: | 30 if self.changeset: |
30 return | 31 return |
31 | 32 |
33 maxrev = 0 | |
34 cmd = 'cvsps -A -u --cvs-direct -q' | |
35 if self.rev: | |
36 # TODO: handle tags | |
37 try: | |
38 # patchset number? | |
39 maxrev = int(self.rev) | |
40 except ValueError: | |
41 try: | |
42 # date | |
43 util.parsedate(self.rev, ['%Y/%m/%d %H:%M:%S']) | |
44 cmd = "%s -d '1970/01/01 00:00:01' -d '%s'" % (cmd, self.rev) | |
45 except util.Abort: | |
46 raise util.Abort('revision %s is not a patchset number or date' % self.rev) | |
47 | |
32 d = os.getcwd() | 48 d = os.getcwd() |
33 try: | 49 try: |
34 os.chdir(self.path) | 50 os.chdir(self.path) |
35 id = None | 51 id = None |
36 state = 0 | 52 state = 0 |
37 for l in os.popen("cvsps -A -u --cvs-direct -q"): | 53 for l in os.popen(cmd): |
38 if state == 0: # header | 54 if state == 0: # header |
39 if l.startswith("PatchSet"): | 55 if l.startswith("PatchSet"): |
40 id = l[9:-2] | 56 id = l[9:-2] |
57 if maxrev and int(id) > maxrev: | |
58 state = 3 | |
41 elif l.startswith("Date"): | 59 elif l.startswith("Date"): |
42 date = util.parsedate(l[6:-1], ["%Y/%m/%d %H:%M:%S"]) | 60 date = util.parsedate(l[6:-1], ["%Y/%m/%d %H:%M:%S"]) |
43 date = util.datestr(date) | 61 date = util.datestr(date) |
44 elif l.startswith("Branch"): | 62 elif l.startswith("Branch"): |
45 branch = l[8:-1] | 63 branch = l[8:-1] |
83 colon = l.rfind(':') | 101 colon = l.rfind(':') |
84 file = l[1:colon] | 102 file = l[1:colon] |
85 rev = l[colon+1:-2] | 103 rev = l[colon+1:-2] |
86 rev = rev.split("->")[1] | 104 rev = rev.split("->")[1] |
87 files[file] = rev | 105 files[file] = rev |
106 elif state == 3: | |
107 continue | |
88 | 108 |
89 self.heads = self.lastbranch.values() | 109 self.heads = self.lastbranch.values() |
90 finally: | 110 finally: |
91 os.chdir(d) | 111 os.chdir(d) |
92 | 112 |