Mercurial > hg
annotate hgext/convert/monotone.py @ 13792:a916e8de4313
convert/mtn: Fix conversion of large files from mtn (broken in ed97955e0c04)
"mtn automate stdio" will break output larger than 32kB into several packets.
This ensures that we are processing all the output on the main stream and not
only the last packet.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Mon, 28 Mar 2011 23:16:20 -0400 |
parents | c13bfa451656 |
children | 64481eee6215 |
rev | line source |
---|---|
8250
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8127
diff
changeset
|
1 # monotone.py - monotone support for the convert extension |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8127
diff
changeset
|
2 # |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8127
diff
changeset
|
3 # Copyright 2008, 2009 Mikkel Fahnoe Jorgensen <mikkel@dvide.com> and |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8127
diff
changeset
|
4 # others |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8127
diff
changeset
|
5 # |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8127
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
10263 | 7 # GNU General Public License version 2 or any later version. |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
8 |
7873
4a4c7f6a5912
cleanup: drop unused imports
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6632
diff
changeset
|
9 import os, re |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
10 from mercurial import util |
7873
4a4c7f6a5912
cleanup: drop unused imports
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6632
diff
changeset
|
11 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
|
12 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
|
13 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
|
14 |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
15 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
|
16 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
|
17 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
|
18 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
|
19 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
20 self.ui = ui |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
21 self.path = path |
13760
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
22 self.automatestdio = False |
13761
aeb41f0048e7
convert/mtn: avoid unnecessary initial test of mtn repo
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13760
diff
changeset
|
23 self.rev = rev |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
24 |
10938
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10282
diff
changeset
|
25 norepo = NoRepo(_("%s does not look like a monotone repository") |
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10282
diff
changeset
|
26 % path) |
7973
db3a68fd9387
convert: attempt to check repo type before checking for tool
Matt Mackall <mpm@selenic.com>
parents:
7957
diff
changeset
|
27 if not os.path.exists(os.path.join(path, '_MTN')): |
8052
fe2a87a3d344
convert/mtn: allow monotone database files as sources
Patrick Mezard <pmezard@gmail.com>
parents:
8051
diff
changeset
|
28 # Could be a monotone repository (SQLite db file) |
fe2a87a3d344
convert/mtn: allow monotone database files as sources
Patrick Mezard <pmezard@gmail.com>
parents:
8051
diff
changeset
|
29 try: |
fe2a87a3d344
convert/mtn: allow monotone database files as sources
Patrick Mezard <pmezard@gmail.com>
parents:
8051
diff
changeset
|
30 header = file(path, 'rb').read(16) |
fe2a87a3d344
convert/mtn: allow monotone database files as sources
Patrick Mezard <pmezard@gmail.com>
parents:
8051
diff
changeset
|
31 except: |
fe2a87a3d344
convert/mtn: allow monotone database files as sources
Patrick Mezard <pmezard@gmail.com>
parents:
8051
diff
changeset
|
32 header = '' |
fe2a87a3d344
convert/mtn: allow monotone database files as sources
Patrick Mezard <pmezard@gmail.com>
parents:
8051
diff
changeset
|
33 if header != 'SQLite format 3\x00': |
fe2a87a3d344
convert/mtn: allow monotone database files as sources
Patrick Mezard <pmezard@gmail.com>
parents:
8051
diff
changeset
|
34 raise norepo |
7973
db3a68fd9387
convert: attempt to check repo type before checking for tool
Matt Mackall <mpm@selenic.com>
parents:
7957
diff
changeset
|
35 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
36 # 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
|
37 space = r'\s*' |
6632
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
38 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
|
39 value = name |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
40 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
|
41 lines = r'(?:.|\n)+' |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
42 |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
43 self.dir_re = re.compile(space + "dir" + name) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
44 self.file_re = re.compile(space + "file" + name + |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
45 "content" + revision) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
46 self.add_file_re = re.compile(space + "add_file" + name + |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
47 "content" + revision) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
48 self.patch_re = re.compile(space + "patch" + name + |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
49 "from" + revision + "to" + revision) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
50 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
|
51 self.delete_re = re.compile(space + "delete" + name) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
52 self.tag_re = re.compile(space + "tag" + name + "revision" + |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
53 revision) |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
54 self.cert_re = re.compile(lines + space + "name" + name + |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
55 "value" + value) |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
56 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
57 attr = space + "file" + lines + space + "attr" + space |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
58 self.attr_execute_re = re.compile(attr + '"mtn:execute"' + |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
59 space + '"true"') |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
60 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
61 # cached data |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
62 self.manifest_rev = None |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
63 self.manifest = None |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
64 self.files = None |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
65 self.dirs = None |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
66 |
6332
950e72fc7cf3
convert: allow missing tools not to stop source type detection
Patrick Mezard <pmezard@gmail.com>
parents:
6307
diff
changeset
|
67 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
|
68 |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
69 def mtnrun(self, *args, **kwargs): |
13760
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
70 if self.automatestdio: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
71 return self.mtnrunstdio(*args, **kwargs) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
72 else: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
73 return self.mtnrunsingle(*args, **kwargs) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
74 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
75 def mtnrunsingle(self, *args, **kwargs): |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
76 kwargs['d'] = self.path |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
77 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
|
78 |
13760
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
79 def mtnrunstdio(self, *args, **kwargs): |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
80 # Prepare the command in automate stdio format |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
81 command = [] |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
82 for k, v in kwargs.iteritems(): |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
83 command.append("%s:%s" % (len(k), k)) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
84 if v: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
85 command.append("%s:%s" % (len(v), v)) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
86 if command: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
87 command.insert(0, 'o') |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
88 command.append('e') |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
89 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
90 command.append('l') |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
91 for arg in args: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
92 command += "%s:%s" % (len(arg), arg) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
93 command.append('e') |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
94 command = ''.join(command) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
95 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
96 self.ui.debug("mtn: sending '%s'\n" % command) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
97 self.mtnwritefp.write(command) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
98 self.mtnwritefp.flush() |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
99 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
100 return self.mtnstdioreadcommandoutput(command) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
101 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
102 def mtnstdioreadpacket(self): |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
103 read = None |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
104 commandnbr = '' |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
105 while read != ':': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
106 read = self.mtnreadfp.read(1) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
107 if not read: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
108 raise util.Abort(_('bad mtn packet - no end of commandnbr')) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
109 commandnbr += read |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
110 commandnbr = commandnbr[:-1] |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
111 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
112 stream = self.mtnreadfp.read(1) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
113 if stream not in 'mewptl': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
114 raise util.Abort(_('bad mtn packet - bad stream type %s' % stream)) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
115 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
116 read = self.mtnreadfp.read(1) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
117 if read != ':': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
118 raise util.Abort(_('bad mtn packet - no divider before size')) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
119 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
120 read = None |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
121 lengthstr = '' |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
122 while read != ':': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
123 read = self.mtnreadfp.read(1) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
124 if not read: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
125 raise util.Abort(_('bad mtn packet - no end of packet size')) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
126 lengthstr += read |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
127 try: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
128 length = long(lengthstr[:-1]) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
129 except TypeError: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
130 raise util.Abort(_('bad mtn packet - bad packet size %s') |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
131 % lengthstr) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
132 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
133 read = self.mtnreadfp.read(length) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
134 if len(read) != length: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
135 raise util.Abort(_("bad mtn packet - unable to read full packet " |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
136 "read %s of %s") % (len(read), length)) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
137 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
138 return (commandnbr, stream, length, read) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
139 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
140 def mtnstdioreadcommandoutput(self, command): |
13792
a916e8de4313
convert/mtn: Fix conversion of large files from mtn (broken in ed97955e0c04)
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13779
diff
changeset
|
141 retval = [] |
13760
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
142 while True: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
143 commandnbr, stream, length, output = self.mtnstdioreadpacket() |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
144 self.ui.debug('mtn: read packet %s:%s:%s\n' % |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
145 (commandnbr, stream, length)) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
146 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
147 if stream == 'l': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
148 # End of command |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
149 if output != '0': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
150 raise util.Abort(_("mtn command '%s' returned %s") % |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
151 (command, output)) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
152 break |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
153 elif stream in 'ew': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
154 # Error, warning output |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
155 self.ui.warn(_('%s error:\n') % self.command) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
156 self.ui.warn(output) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
157 elif stream == 'p': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
158 # Progress messages |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
159 self.ui.debug('mtn: ' + output) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
160 elif stream == 'm': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
161 # Main stream - command output |
13792
a916e8de4313
convert/mtn: Fix conversion of large files from mtn (broken in ed97955e0c04)
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13779
diff
changeset
|
162 retval.append(output) |
13760
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
163 |
13792
a916e8de4313
convert/mtn: Fix conversion of large files from mtn (broken in ed97955e0c04)
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13779
diff
changeset
|
164 return ''.join(retval) |
13760
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
165 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
166 def mtnloadmanifest(self, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
167 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
|
168 return |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
169 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
|
170 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
|
171 self.files = {} |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
172 self.dirs = {} |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
173 |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
174 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
|
175 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
|
176 if m: |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
177 attr = "" |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
178 name = m.group(1) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
179 node = m.group(2) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
180 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
|
181 attr += "x" |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
182 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
|
183 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
|
184 if m: |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
185 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
|
186 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
187 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
|
188 # 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
|
189 self.mtnloadmanifest(rev) |
8458
f6c99b1628d7
convert: cleanups in monotone converter
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8250
diff
changeset
|
190 return name in self.files |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
191 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
192 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
|
193 self.mtnloadmanifest(rev) |
8458
f6c99b1628d7
convert: cleanups in monotone converter
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8250
diff
changeset
|
194 return name in self.dirs |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
195 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
196 def mtngetcerts(self, rev): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
197 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
|
198 "changelog":"<missing>", "branch":"<missing>"} |
9823
11d7bb5e0df2
convert/mtn: handle change in mtn 0.45 certs output
Patrick Mezard <pmezard@gmail.com>
parents:
8458
diff
changeset
|
199 certlist = self.mtnrun("certs", rev) |
11d7bb5e0df2
convert/mtn: handle change in mtn 0.45 certs output
Patrick Mezard <pmezard@gmail.com>
parents:
8458
diff
changeset
|
200 # mtn < 0.45: |
11d7bb5e0df2
convert/mtn: handle change in mtn 0.45 certs output
Patrick Mezard <pmezard@gmail.com>
parents:
8458
diff
changeset
|
201 # key "test@selenic.com" |
11d7bb5e0df2
convert/mtn: handle change in mtn 0.45 certs output
Patrick Mezard <pmezard@gmail.com>
parents:
8458
diff
changeset
|
202 # mtn >= 0.45: |
11d7bb5e0df2
convert/mtn: handle change in mtn 0.45 certs output
Patrick Mezard <pmezard@gmail.com>
parents:
8458
diff
changeset
|
203 # key [ff58a7ffb771907c4ff68995eada1c4da068d328] |
11d7bb5e0df2
convert/mtn: handle change in mtn 0.45 certs output
Patrick Mezard <pmezard@gmail.com>
parents:
8458
diff
changeset
|
204 certlist = re.split('\n\n key ["\[]', certlist) |
11d7bb5e0df2
convert/mtn: handle change in mtn 0.45 certs output
Patrick Mezard <pmezard@gmail.com>
parents:
8458
diff
changeset
|
205 for e in certlist: |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
206 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
|
207 if m: |
6632
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
208 name, value = m.groups() |
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
209 value = value.replace(r'\"', '"') |
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
210 value = value.replace(r'\\', '\\') |
aa3f61884a48
convert.monotone: fix quotes and backslashes in change descriptions.
David Reiss <davidn@gmail.com>
parents:
6376
diff
changeset
|
211 certs[name] = value |
8101
d8229670710f
convert/mtn: handle subsecond commit dates (issue1616)
Paul Aurich <paul@darkrain42.org>
parents:
8099
diff
changeset
|
212 # Monotone may have subsecond dates: 2005-02-05T09:39:12.364306 |
8125
da9f3866c637
convert/mtn: mtn does not record timezones, mark dates as UTC (issue1624)
Paul Aurich <paul@darkrain42.org>
parents:
8124
diff
changeset
|
213 # and all times are stored in UTC |
da9f3866c637
convert/mtn: mtn does not record timezones, mark dates as UTC (issue1624)
Paul Aurich <paul@darkrain42.org>
parents:
8124
diff
changeset
|
214 certs["date"] = certs["date"].split('.')[0] + " UTC" |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
215 return certs |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
216 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
217 # 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
|
218 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
219 def getheads(self): |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
220 if not self.rev: |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
221 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
|
222 else: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
223 return [self.rev] |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
224 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
225 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
|
226 #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
|
227 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
|
228 files = {} |
8123
933b874e402f
convert/mtn: handle files moved in a moved directory (issue1619/2)
Patrick Mezard <pmezard@gmail.com>
parents:
8101
diff
changeset
|
229 ignoremove = {} |
8099
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
230 renameddirs = [] |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
231 copies = {} |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
232 for e in revision: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
233 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
|
234 if m: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
235 files[m.group(1)] = rev |
8123
933b874e402f
convert/mtn: handle files moved in a moved directory (issue1619/2)
Patrick Mezard <pmezard@gmail.com>
parents:
8101
diff
changeset
|
236 ignoremove[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
|
237 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
|
238 if m: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
239 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
|
240 # 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
|
241 # 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
|
242 # 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
|
243 m = self.delete_re.match(e) |
b40e90341ae2
convert: record deleted files in monotone source
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
244 if m: |
b40e90341ae2
convert: record deleted files in monotone source
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
245 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
|
246 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
|
247 if m: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
248 toname = m.group(2) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
249 fromname = m.group(1) |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
250 if self.mtnisfile(toname, rev): |
8123
933b874e402f
convert/mtn: handle files moved in a moved directory (issue1619/2)
Patrick Mezard <pmezard@gmail.com>
parents:
8101
diff
changeset
|
251 ignoremove[toname] = 1 |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
252 copies[toname] = fromname |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
253 files[toname] = rev |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
254 files[fromname] = rev |
8099
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
255 elif self.mtnisdir(toname, rev): |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
256 renameddirs.append((fromname, toname)) |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
257 |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
258 # Directory renames can be handled only once we have recorded |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
259 # all new files |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
260 for fromdir, todir in renameddirs: |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
261 renamed = {} |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
262 for tofile in self.files: |
8123
933b874e402f
convert/mtn: handle files moved in a moved directory (issue1619/2)
Patrick Mezard <pmezard@gmail.com>
parents:
8101
diff
changeset
|
263 if tofile in ignoremove: |
8099
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
264 continue |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
265 if tofile.startswith(todir + '/'): |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
266 renamed[tofile] = fromdir + tofile[len(todir):] |
8124
d883bfbd2e60
convert/mtn: handle directory move into moved directory (issue1619/3)
Patrick Mezard <pmezard@gmail.com>
parents:
8123
diff
changeset
|
267 # Avoid chained moves like: |
d883bfbd2e60
convert/mtn: handle directory move into moved directory (issue1619/3)
Patrick Mezard <pmezard@gmail.com>
parents:
8123
diff
changeset
|
268 # d1(/a) => d3/d1(/a) |
d883bfbd2e60
convert/mtn: handle directory move into moved directory (issue1619/3)
Patrick Mezard <pmezard@gmail.com>
parents:
8123
diff
changeset
|
269 # d2 => d3 |
d883bfbd2e60
convert/mtn: handle directory move into moved directory (issue1619/3)
Patrick Mezard <pmezard@gmail.com>
parents:
8123
diff
changeset
|
270 ignoremove[tofile] = 1 |
8099
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
271 for tofile, fromfile in renamed.items(): |
8100 | 272 self.ui.debug (_("copying file in renamed directory " |
273 "from '%s' to '%s'") | |
8099
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
274 % (fromfile, tofile), '\n') |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
275 files[tofile] = rev |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
276 copies[tofile] = fromfile |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
277 for fromfile in renamed.values(): |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
278 files[fromfile] = rev |
3cdf4872941a
convert/mtn: handle new files in moved directories (issue1619)
Patrick Mezard <pmezard@gmail.com>
parents:
8050
diff
changeset
|
279 |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
280 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
|
281 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
282 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
|
283 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
|
284 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
|
285 try: |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10938
diff
changeset
|
286 data = self.mtnrun("get_file_of", name, r=rev) |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
287 except: |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
288 raise IOError() # file was deleted or renamed |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10938
diff
changeset
|
289 self.mtnloadmanifest(rev) |
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10938
diff
changeset
|
290 node, attr = self.files.get(name, (None, "")) |
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10938
diff
changeset
|
291 return data, attr |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
292 |
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
293 def getcommit(self, rev): |
13779
c13bfa451656
convert/mtn: convert suspended branches as closed branches
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13761
diff
changeset
|
294 extra = {} |
c13bfa451656
convert/mtn: convert suspended branches as closed branches
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13761
diff
changeset
|
295 certs = self.mtngetcerts(rev) |
c13bfa451656
convert/mtn: convert suspended branches as closed branches
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13761
diff
changeset
|
296 if certs.get('suspend') == certs["branch"]: |
c13bfa451656
convert/mtn: convert suspended branches as closed branches
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13761
diff
changeset
|
297 extra['close'] = '1' |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
298 return commit( |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
299 author=certs["author"], |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
300 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
|
301 desc=certs["changelog"], |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
302 rev=rev, |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
303 parents=self.mtnrun("parents", rev).splitlines(), |
13779
c13bfa451656
convert/mtn: convert suspended branches as closed branches
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13761
diff
changeset
|
304 branch=certs["branch"], |
c13bfa451656
convert/mtn: convert suspended branches as closed branches
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13761
diff
changeset
|
305 extra=extra) |
6306
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
306 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
307 def gettags(self): |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
308 tags = {} |
6307
6840668e3bf6
cleanup monotone conversion and use commandline class
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
6306
diff
changeset
|
309 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
|
310 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
|
311 if m: |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
312 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
|
313 return tags |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
314 |
2f9de4aaea9e
initial version of monotone source for convert extension
Mikkel Fahnøe Jørgensen <mikkel@dvide.com>
parents:
diff
changeset
|
315 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
|
316 # 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
|
317 # ... 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
|
318 raise NotImplementedError() |
13760
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
319 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
320 def before(self): |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
321 # Check if we have a new enough version to use automate stdio |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
322 version = 0.0 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
323 try: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
324 versionstr = self.mtnrunsingle("interface_version") |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
325 version = float(versionstr) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
326 except Exception: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
327 raise util.Abort(_("unable to determine mtn automate interface " |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
328 "version")) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
329 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
330 if version >= 12.0: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
331 self.automatestdio = True |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
332 self.ui.debug("mtn automate version %s - using automate stdio\n" % |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
333 version) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
334 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
335 # launch the long-running automate stdio process |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
336 self.mtnwritefp, self.mtnreadfp = self._run2('automate', 'stdio', |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
337 '-d', self.path) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
338 # read the headers |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
339 read = self.mtnreadfp.readline() |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
340 if read != 'format-version: 2\n': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
341 raise util.Abort(_('mtn automate stdio header unexpected: %s') |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
342 % read) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
343 while read != '\n': |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
344 read = self.mtnreadfp.readline() |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
345 if not read: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
346 raise util.Abort(_("failed to reach end of mtn automate " |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
347 "stdio headers")) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
348 else: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
349 self.ui.debug("mtn automate version %s - not using automate stdio " |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
350 "(automate >= 12.0 - mtn >= 0.46 is needed)\n" % version) |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
351 |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
352 def after(self): |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
353 if self.automatestdio: |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
354 self.mtnwritefp.close() |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
355 self.mtnwritefp = None |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
356 self.mtnreadfp.close() |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
357 self.mtnreadfp = None |
ed97955e0c04
convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11134
diff
changeset
|
358 |