Mercurial > hg
annotate hgext/convert/monotone.py @ 7973:db3a68fd9387
convert: attempt to check repo type before checking for tool
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sat, 04 Apr 2009 12:28:13 -0500 |
parents | 88a2687fbd38 |
children | 683d8ebcf434 |
rev | line source |
---|---|
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
1 # monotone support for the convert extension |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
2 |
7873
4a4c7f6a5912
cleanup: drop unused imports
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6632
diff
changeset
|
3 import os, re |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
4 from mercurial import util |
7873
4a4c7f6a5912
cleanup: drop unused imports
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6632
diff
changeset
|
5 from common import NoRepo, commit, converter_source, checktool |
6332
950e72fc7cf3
convert: allow missing tools not to stop source type detection
Patrick Mezard <pmezard@gmail.com>
parents:
6307
diff
changeset
|
6 from common import commandline |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
7 from mercurial.i18n import _ |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
8 |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
9 class monotone_source(converter_source, commandline): |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
10 def __init__(self, ui, path=None, rev=None): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
11 converter_source.__init__(self, ui, path, rev) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
12 commandline.__init__(self, ui, 'mtn') |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
13 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
14 self.ui = ui |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
15 self.path = path |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
16 |
7973
db3a68fd9387
convert: attempt to check repo type before checking for tool
Matt Mackall <mpm@selenic.com>
parents:
7957
diff
changeset
|
17 norepo = NoRepo (_("%s does not look like a monotone repo") % path) |
db3a68fd9387
convert: attempt to check repo type before checking for tool
Matt Mackall <mpm@selenic.com>
parents:
7957
diff
changeset
|
18 if not os.path.exists(os.path.join(path, '_MTN')): |
db3a68fd9387
convert: attempt to check repo type before checking for tool
Matt Mackall <mpm@selenic.com>
parents:
7957
diff
changeset
|
19 raise norepo |
db3a68fd9387
convert: attempt to check repo type before checking for tool
Matt Mackall <mpm@selenic.com>
parents:
7957
diff
changeset
|
20 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
21 # regular expressions for parsing monotone output |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
22 space = r'\s*' |
6632
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
23 name = r'\s+"((?:\\"|[^"])*)"\s*' |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
24 value = name |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
25 revision = r'\s+\[(\w+)\]\s*' |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
26 lines = r'(?:.|\n)+' |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
27 |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
28 self.dir_re = re.compile(space + "dir" + name) |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
29 self.file_re = re.compile(space + "file" + name + "content" + revision) |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
30 self.add_file_re = re.compile(space + "add_file" + name + "content" + revision) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
31 self.patch_re = re.compile(space + "patch" + name + "from" + revision + "to" + revision) |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
32 self.rename_re = re.compile(space + "rename" + name + "to" + name) |
6376
b40e90341ae2
convert: record deleted files in monotone source
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
33 self.delete_re = re.compile(space + "delete" + name) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
34 self.tag_re = re.compile(space + "tag" + name + "revision" + revision) |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
35 self.cert_re = re.compile(lines + space + "name" + name + "value" + value) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
36 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
37 attr = space + "file" + lines + space + "attr" + space |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
38 self.attr_execute_re = re.compile(attr + '"mtn:execute"' + space + '"true"') |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
39 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
40 # cached data |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
41 self.manifest_rev = None |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
42 self.manifest = None |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
43 self.files = None |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
44 self.dirs = None |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
45 |
6332
950e72fc7cf3
convert: allow missing tools not to stop source type detection
Patrick Mezard <pmezard@gmail.com>
parents:
6307
diff
changeset
|
46 checktool('mtn', abort=False) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
47 |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
48 # test if there are any revisions |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
49 self.rev = None |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
50 try: |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
51 self.getheads() |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
52 except: |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
53 raise norepo |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
54 self.rev = rev |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
55 |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
56 def mtnrun(self, *args, **kwargs): |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
57 kwargs['d'] = self.path |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
58 return self.run0('automate', *args, **kwargs) |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
59 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
60 def mtnloadmanifest(self, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
61 if self.manifest_rev == rev: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
62 return |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
63 self.manifest = self.mtnrun("get_manifest_of", rev).split("\n\n") |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
64 self.manifest_rev = rev |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
65 self.files = {} |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
66 self.dirs = {} |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
67 |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
68 for e in self.manifest: |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
69 m = self.file_re.match(e) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
70 if m: |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
71 attr = "" |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
72 name = m.group(1) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
73 node = m.group(2) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
74 if self.attr_execute_re.match(e): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
75 attr += "x" |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
76 self.files[name] = (node, attr) |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
77 m = self.dir_re.match(e) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
78 if m: |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
79 self.dirs[m.group(1)] = True |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
80 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
81 def mtnisfile(self, name, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
82 # a non-file could be a directory or a deleted or renamed file |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
83 self.mtnloadmanifest(rev) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
84 try: |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
85 self.files[name] |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
86 return True |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
87 except KeyError: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
88 return False |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
89 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
90 def mtnisdir(self, name, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
91 self.mtnloadmanifest(rev) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
92 try: |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
93 self.dirs[name] |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
94 return True |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
95 except KeyError: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
96 return False |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
97 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
98 def mtngetcerts(self, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
99 certs = {"author":"<missing>", "date":"<missing>", |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
100 "changelog":"<missing>", "branch":"<missing>"} |
6632
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
101 cert_list = self.mtnrun("certs", rev).split('\n\n key "') |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
102 for e in cert_list: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
103 m = self.cert_re.match(e) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
104 if m: |
6632
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
105 name, value = m.groups() |
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
106 value = value.replace(r'\"', '"') |
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
107 value = value.replace(r'\\', '\\') |
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
108 certs[name] = value |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
109 return certs |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
110 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
111 def mtnrenamefiles(self, files, fromdir, todir): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
112 renamed = {} |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
113 for tofile in files: |
7957
88a2687fbd38
right way to check if file was in renamed directory, fixes import monotone
Pavel Volkovitskiy <int@mtx.ru>
parents:
7873
diff
changeset
|
114 if tofile.startswith(todir): |
88a2687fbd38
right way to check if file was in renamed directory, fixes import monotone
Pavel Volkovitskiy <int@mtx.ru>
parents:
7873
diff
changeset
|
115 renamed[tofile] = fromdir + tofile[len(todir):] |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
116 return renamed |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
117 |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
118 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
119 # implement the converter_source interface: |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
120 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
121 def getheads(self): |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
122 if not self.rev: |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
123 return self.mtnrun("leaves").splitlines() |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
124 else: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
125 return [self.rev] |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
126 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
127 def getchanges(self, rev): |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
128 #revision = self.mtncmd("get_revision %s" % rev).split("\n\n") |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
129 revision = self.mtnrun("get_revision", rev).split("\n\n") |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
130 files = {} |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
131 copies = {} |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
132 for e in revision: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
133 m = self.add_file_re.match(e) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
134 if m: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
135 files[m.group(1)] = rev |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
136 m = self.patch_re.match(e) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
137 if m: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
138 files[m.group(1)] = rev |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
139 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
140 # Delete/rename is handled later when the convert engine |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
141 # discovers an IOError exception from getfile, |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
142 # but only if we add the "from" file to the list of changes. |
6376
b40e90341ae2
convert: record deleted files in monotone source
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
143 m = self.delete_re.match(e) |
b40e90341ae2
convert: record deleted files in monotone source
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
144 if m: |
b40e90341ae2
convert: record deleted files in monotone source
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
145 files[m.group(1)] = rev |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
146 m = self.rename_re.match(e) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
147 if m: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
148 toname = m.group(2) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
149 fromname = m.group(1) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
150 if self.mtnisfile(toname, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
151 copies[toname] = fromname |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
152 files[toname] = rev |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
153 files[fromname] = rev |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
154 if self.mtnisdir(toname, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
155 renamed = self.mtnrenamefiles(self.files, fromname, toname) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
156 for tofile, fromfile in renamed.items(): |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
157 self.ui.debug (_("copying file in renamed dir from '%s' to '%s'") % (fromfile, tofile), '\n') |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
158 files[tofile] = rev |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
159 for fromfile in renamed.values(): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
160 files[fromfile] = rev |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
161 return (files.items(), copies) |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
162 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
163 def getmode(self, name, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
164 self.mtnloadmanifest(rev) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
165 try: |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
166 node, attr = self.files[name] |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
167 return attr |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
168 except KeyError: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
169 return "" |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
170 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
171 def getfile(self, name, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
172 if not self.mtnisfile(name, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
173 raise IOError() # file was deleted or renamed |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
174 try: |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
175 return self.mtnrun("get_file_of", name, r=rev) |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
176 except: |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
177 raise IOError() # file was deleted or renamed |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
178 |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
179 def getcommit(self, rev): |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
180 certs = self.mtngetcerts(rev) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
181 return commit( |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
182 author=certs["author"], |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
183 date=util.datestr(util.strdate(certs["date"], "%Y-%m-%dT%H:%M:%S")), |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
184 desc=certs["changelog"], |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
185 rev=rev, |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
186 parents=self.mtnrun("parents", rev).splitlines(), |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
187 branch=certs["branch"]) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
188 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
189 def gettags(self): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
190 tags = {} |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
191 for e in self.mtnrun("tags").split("\n\n"): |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
192 m = self.tag_re.match(e) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
193 if m: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
194 tags[m.group(1)] = m.group(2) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
195 return tags |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
196 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
197 def getchangedfiles(self, rev, i): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
198 # This function is only needed to support --filemap |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
199 # ... and we don't support that |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
200 raise NotImplementedError() |