Mercurial > hg
annotate hgext/convert/gnuarch.py @ 21260:aa3e56607675
changegroup: refactor outgoing logic into a function
Extensions that add to bundle2 will want to know which commits are outgoing so
they can bundle data that is appropriate to those commits. This moves the logic
for figuring that out to a separate function so extensions can do the same
computation.
author | Durham Goode <durham@fb.com> |
---|---|
date | Wed, 07 May 2014 17:22:34 -0700 |
parents | e7cfe3587ea4 |
children | 650b5b6e75ed |
rev | line source |
---|---|
8250
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
1 # gnuarch.py - GNU Arch support for the convert extension |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
2 # |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
3 # Copyright 2008, 2009 Aleix Conchillo Flaque <aleix@member.fsf.org> |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
4 # and others |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
5 # |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8209
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. |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
8 |
6212 | 9 from common import NoRepo, commandline, commit, converter_source |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
10 from mercurial.i18n import _ |
11987
3145951e50fe
convert: use encoding.encoding instead of locale.getpreferredencoding()
Brodie Rao <brodie@bitheap.org>
parents:
11986
diff
changeset
|
11 from mercurial import encoding, util |
3145951e50fe
convert: use encoding.encoding instead of locale.getpreferredencoding()
Brodie Rao <brodie@bitheap.org>
parents:
11986
diff
changeset
|
12 import os, shutil, tempfile, stat |
7578
7971650bdc73
convert/gnuarch: fix cat-log parsing
Edouard Gomez <ed.gomez@free.fr>
parents:
7577
diff
changeset
|
13 from email.Parser import Parser |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
14 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
15 class gnuarch_source(converter_source, commandline): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
16 |
8778
c5f36402daad
use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8668
diff
changeset
|
17 class gnuarch_rev(object): |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
18 def __init__(self, rev): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
19 self.rev = rev |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
20 self.summary = '' |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
21 self.date = None |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
22 self.author = '' |
7583
77fec2d270ae
convert/gnuarch: parse continuation-of revisions in gnuarch source
Edouard Gomez <ed.gomez@free.fr>
parents:
7582
diff
changeset
|
23 self.continuationof = None |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
24 self.add_files = [] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
25 self.mod_files = [] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
26 self.del_files = [] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
27 self.ren_files = {} |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
28 self.ren_dirs = {} |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
29 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
30 def __init__(self, ui, path, rev=None): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
31 super(gnuarch_source, self).__init__(ui, path, rev=rev) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
32 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
33 if not os.path.exists(os.path.join(path, '{arch}')): |
10938
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10394
diff
changeset
|
34 raise NoRepo(_("%s does not look like a GNU Arch repository") |
02d6149a480b
convert: write "repository" instead of "repo"
Martin Geisler <mg@lazybytes.net>
parents:
10394
diff
changeset
|
35 % path) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
36 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
37 # Could use checktool, but we want to check for baz or tla. |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
38 self.execmd = None |
14271
4030630fb59c
rename util.find_exe to findexe
Adrian Buehlmann <adrian@cadifra.com>
parents:
12344
diff
changeset
|
39 if util.findexe('baz'): |
6083
81a8667331e8
convert: detect baz before tla
Patrick Mezard <pmezard@gmail.com>
parents:
6079
diff
changeset
|
40 self.execmd = 'baz' |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
41 else: |
14271
4030630fb59c
rename util.find_exe to findexe
Adrian Buehlmann <adrian@cadifra.com>
parents:
12344
diff
changeset
|
42 if util.findexe('tla'): |
6083
81a8667331e8
convert: detect baz before tla
Patrick Mezard <pmezard@gmail.com>
parents:
6079
diff
changeset
|
43 self.execmd = 'tla' |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
44 else: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
45 raise util.Abort(_('cannot find a GNU Arch tool')) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
46 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
47 commandline.__init__(self, ui, self.execmd) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
48 |
15381
c519cd8f0169
backout dbdb777502dc (issue3077) (issue3071)
Matt Mackall <mpm@selenic.com>
parents:
15355
diff
changeset
|
49 self.path = os.path.realpath(path) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
50 self.tmppath = None |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
51 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
52 self.treeversion = None |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
53 self.lastrev = None |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
54 self.changes = {} |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
55 self.parents = {} |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
56 self.tags = {} |
7578
7971650bdc73
convert/gnuarch: fix cat-log parsing
Edouard Gomez <ed.gomez@free.fr>
parents:
7577
diff
changeset
|
57 self.catlogparser = Parser() |
11987
3145951e50fe
convert: use encoding.encoding instead of locale.getpreferredencoding()
Brodie Rao <brodie@bitheap.org>
parents:
11986
diff
changeset
|
58 self.encoding = encoding.encoding |
7584
28563e94c471
convert/gnuarch: retrieve known archive names list
Edouard Gomez <ed.gomez@free.fr>
parents:
7583
diff
changeset
|
59 self.archives = [] |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
60 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
61 def before(self): |
7584
28563e94c471
convert/gnuarch: retrieve known archive names list
Edouard Gomez <ed.gomez@free.fr>
parents:
7583
diff
changeset
|
62 # Get registered archives |
28563e94c471
convert/gnuarch: retrieve known archive names list
Edouard Gomez <ed.gomez@free.fr>
parents:
7583
diff
changeset
|
63 self.archives = [i.rstrip('\n') |
28563e94c471
convert/gnuarch: retrieve known archive names list
Edouard Gomez <ed.gomez@free.fr>
parents:
7583
diff
changeset
|
64 for i in self.runlines0('archives', '-n')] |
28563e94c471
convert/gnuarch: retrieve known archive names list
Edouard Gomez <ed.gomez@free.fr>
parents:
7583
diff
changeset
|
65 |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
66 if self.execmd == 'tla': |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
67 output = self.run0('tree-version', self.path) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
68 else: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
69 output = self.run0('tree-version', '-d', self.path) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
70 self.treeversion = output.strip() |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
71 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
72 # Get name of temporary directory |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
73 version = self.treeversion.split('/') |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
74 self.tmppath = os.path.join(tempfile.gettempdir(), |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
75 'hg-%s' % version[1]) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
76 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
77 # Generate parents dictionary |
7585
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
78 self.parents[None] = [] |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
79 treeversion = self.treeversion |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
80 child = None |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
81 while treeversion: |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
82 self.ui.status(_('analyzing tree version %s...\n') % treeversion) |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
83 |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
84 archive = treeversion.split('/')[0] |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
85 if archive not in self.archives: |
8662
eaee3491ce11
convert/gnuarch: wrap long line, format kwargs without spaces
Martin Geisler <mg@lazybytes.net>
parents:
8250
diff
changeset
|
86 self.ui.status(_('tree analysis stopped because it points to ' |
eaee3491ce11
convert/gnuarch: wrap long line, format kwargs without spaces
Martin Geisler <mg@lazybytes.net>
parents:
8250
diff
changeset
|
87 'an unregistered archive %s...\n') % archive) |
7585
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
88 break |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
89 |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
90 # Get the complete list of revisions for that tree version |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
91 output, status = self.runlines('revisions', '-r', '-f', treeversion) |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17391
diff
changeset
|
92 self.checkexit(status, 'failed retrieving revisions for %s' |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
93 % treeversion) |
7585
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
94 |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
95 # No new iteration unless a revision has a continuation-of header |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
96 treeversion = None |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
97 |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
98 for l in output: |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
99 rev = l.strip() |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
100 self.changes[rev] = self.gnuarch_rev(rev) |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
101 self.parents[rev] = [] |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
102 |
7585
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
103 # Read author, date and summary |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
104 catlog, status = self.run('cat-log', '-d', self.path, rev) |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
105 if status: |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
106 catlog = self.run0('cat-archive-log', rev) |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
107 self._parsecatlog(catlog, rev) |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
108 |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
109 # Populate the parents map |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
110 self.parents[child].append(rev) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
111 |
7585
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
112 # Keep track of the current revision as the child of the next |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
113 # revision scanned |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
114 child = rev |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
115 |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
116 # Check if we have to follow the usual incremental history |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
117 # or if we have to 'jump' to a different treeversion given |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
118 # by the continuation-of header. |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
119 if self.changes[rev].continuationof: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
120 treeversion = '--'.join( |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
121 self.changes[rev].continuationof.split('--')[:-1]) |
7585
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
122 break |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
123 |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
124 # If we reached a base-0 revision w/o any continuation-of |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
125 # header, it means the tree history ends here. |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
126 if rev[-6:] == 'base-0': |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
127 break |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
128 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
129 def after(self): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9391
diff
changeset
|
130 self.ui.debug('cleaning up %s\n' % self.tmppath) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
131 shutil.rmtree(self.tmppath, ignore_errors=True) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
132 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
133 def getheads(self): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
134 return self.parents[None] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
135 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
136 def getfile(self, name, rev): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
137 if rev != self.lastrev: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
138 raise util.Abort(_('internal calling inconsistency')) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
139 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
140 # Raise IOError if necessary (i.e. deleted files). |
12344
b6173aee4a47
Use lexists() instead of exists() where appropriate
Patrick Mezard <pmezard@gmail.com>
parents:
11987
diff
changeset
|
141 if not os.path.lexists(os.path.join(self.tmppath, name)): |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
142 raise IOError |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
143 |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10938
diff
changeset
|
144 return self._getfile(name, rev) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
145 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
146 def getchanges(self, rev): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
147 self._update(rev) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
148 changes = [] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
149 copies = {} |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
150 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
151 for f in self.changes[rev].add_files: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
152 changes.append((f, rev)) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
153 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
154 for f in self.changes[rev].mod_files: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
155 changes.append((f, rev)) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
156 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
157 for f in self.changes[rev].del_files: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
158 changes.append((f, rev)) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
159 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
160 for src in self.changes[rev].ren_files: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
161 to = self.changes[rev].ren_files[src] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
162 changes.append((src, rev)) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
163 changes.append((to, rev)) |
7567
0946294d1f32
convert/gnuarch: fix switched copy source and destination
Patrick Mezard <pmezard@gmail.com>
parents:
6913
diff
changeset
|
164 copies[to] = src |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
165 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
166 for src in self.changes[rev].ren_dirs: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
167 to = self.changes[rev].ren_dirs[src] |
10394
4612cded5176
fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
168 chgs, cps = self._rendirchanges(src, to) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
169 changes += [(f, rev) for f in chgs] |
7567
0946294d1f32
convert/gnuarch: fix switched copy source and destination
Patrick Mezard <pmezard@gmail.com>
parents:
6913
diff
changeset
|
170 copies.update(cps) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
171 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
172 self.lastrev = rev |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8151
diff
changeset
|
173 return sorted(set(changes)), copies |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
174 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
175 def getcommit(self, rev): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
176 changes = self.changes[rev] |
8662
eaee3491ce11
convert/gnuarch: wrap long line, format kwargs without spaces
Martin Geisler <mg@lazybytes.net>
parents:
8250
diff
changeset
|
177 return commit(author=changes.author, date=changes.date, |
eaee3491ce11
convert/gnuarch: wrap long line, format kwargs without spaces
Martin Geisler <mg@lazybytes.net>
parents:
8250
diff
changeset
|
178 desc=changes.summary, parents=self.parents[rev], rev=rev) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
179 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
180 def gettags(self): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
181 return self.tags |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
182 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
183 def _execute(self, cmd, *args, **kwargs): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
184 cmdline = [self.execmd, cmd] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
185 cmdline += args |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
186 cmdline = [util.shellquote(arg) for arg in cmdline] |
17391
fc24c10424d2
util: replace util.nulldev with os.devnull
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
15381
diff
changeset
|
187 cmdline += ['>', os.devnull, '2>', os.devnull] |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
188 cmdline = util.quotecommand(' '.join(cmdline)) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
189 self.ui.debug(cmdline, '\n') |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
190 return os.system(cmdline) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
191 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
192 def _update(self, rev): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9391
diff
changeset
|
193 self.ui.debug('applying revision %s...\n' % rev) |
7585
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
194 changeset, status = self.runlines('replay', '-d', self.tmppath, |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
195 rev) |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
196 if status: |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
197 # Something went wrong while merging (baz or tla |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
198 # issue?), get latest revision and try from there |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
199 shutil.rmtree(self.tmppath, ignore_errors=True) |
6049
348132c112cf
convert: improve gnu arch source performance and other fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6044
diff
changeset
|
200 self._obtainrevision(rev) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
201 else: |
7585
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
202 old_rev = self.parents[rev][0] |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9391
diff
changeset
|
203 self.ui.debug('computing changeset between %s and %s...\n' |
7585
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
204 % (old_rev, rev)) |
075b7ef0f84d
convert/gnuarch: follow continuation-of revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7584
diff
changeset
|
205 self._parsechangeset(changeset, rev) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
206 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
207 def _getfile(self, name, rev): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
208 mode = os.lstat(os.path.join(self.tmppath, name)).st_mode |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
209 if stat.S_ISLNK(mode): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
210 data = os.readlink(os.path.join(self.tmppath, name)) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
211 mode = mode and 'l' or '' |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
212 else: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
213 data = open(os.path.join(self.tmppath, name), 'rb').read() |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
214 mode = (mode & 0111) and 'x' or '' |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
215 return data, mode |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
216 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
217 def _exclude(self, name): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
218 exclude = ['{arch}', '.arch-ids', '.arch-inventory'] |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
219 for exc in exclude: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
220 if name.find(exc) != -1: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
221 return True |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
222 return False |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
223 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
224 def _readcontents(self, path): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
225 files = [] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
226 contents = os.listdir(path) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
227 while len(contents) > 0: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
228 c = contents.pop() |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
229 p = os.path.join(path, c) |
6044
9360a58a09e6
convert: do not skip some lines in gnu arch summaries
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6037
diff
changeset
|
230 # os.walk could be used, but here we avoid internal GNU |
9360a58a09e6
convert: do not skip some lines in gnu arch summaries
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6037
diff
changeset
|
231 # Arch files and directories, thus saving a lot time. |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
232 if not self._exclude(p): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
233 if os.path.isdir(p): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
234 contents += [os.path.join(c, f) for f in os.listdir(p)] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
235 else: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
236 files.append(c) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
237 return files |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
238 |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
239 def _rendirchanges(self, src, dest): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
240 changes = [] |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
241 copies = {} |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
242 files = self._readcontents(os.path.join(self.tmppath, dest)) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
243 for f in files: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
244 s = os.path.join(src, f) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
245 d = os.path.join(dest, f) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
246 changes.append(s) |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
247 changes.append(d) |
7567
0946294d1f32
convert/gnuarch: fix switched copy source and destination
Patrick Mezard <pmezard@gmail.com>
parents:
6913
diff
changeset
|
248 copies[d] = s |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
249 return changes, copies |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
250 |
6049
348132c112cf
convert: improve gnu arch source performance and other fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6044
diff
changeset
|
251 def _obtainrevision(self, rev): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9391
diff
changeset
|
252 self.ui.debug('obtaining revision %s...\n' % rev) |
7582
3b2383c90034
convert/gnuarch: use fully qualified revisions
Edouard Gomez <ed.gomez@free.fr>
parents:
7581
diff
changeset
|
253 output = self._execute('get', rev, self.tmppath) |
6049
348132c112cf
convert: improve gnu arch source performance and other fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6044
diff
changeset
|
254 self.checkexit(output) |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9391
diff
changeset
|
255 self.ui.debug('analyzing revision %s...\n' % rev) |
6049
348132c112cf
convert: improve gnu arch source performance and other fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6044
diff
changeset
|
256 files = self._readcontents(self.tmppath) |
348132c112cf
convert: improve gnu arch source performance and other fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6044
diff
changeset
|
257 self.changes[rev].add_files += files |
348132c112cf
convert: improve gnu arch source performance and other fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6044
diff
changeset
|
258 |
6079
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
259 def _stripbasepath(self, path): |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
260 if path.startswith('./'): |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
261 return path[2:] |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
262 return path |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
263 |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
264 def _parsecatlog(self, data, rev): |
7578
7971650bdc73
convert/gnuarch: fix cat-log parsing
Edouard Gomez <ed.gomez@free.fr>
parents:
7577
diff
changeset
|
265 try: |
7971650bdc73
convert/gnuarch: fix cat-log parsing
Edouard Gomez <ed.gomez@free.fr>
parents:
7577
diff
changeset
|
266 catlog = self.catlogparser.parsestr(data) |
7592
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
267 |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
268 # Commit date |
7578
7971650bdc73
convert/gnuarch: fix cat-log parsing
Edouard Gomez <ed.gomez@free.fr>
parents:
7577
diff
changeset
|
269 self.changes[rev].date = util.datestr( |
7971650bdc73
convert/gnuarch: fix cat-log parsing
Edouard Gomez <ed.gomez@free.fr>
parents:
7577
diff
changeset
|
270 util.strdate(catlog['Standard-date'], |
7971650bdc73
convert/gnuarch: fix cat-log parsing
Edouard Gomez <ed.gomez@free.fr>
parents:
7577
diff
changeset
|
271 '%Y-%m-%d %H:%M:%S')) |
7592
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
272 |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
273 # Commit author |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
274 self.changes[rev].author = self.recode(catlog['Creator']) |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
275 |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
276 # Commit description |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
277 self.changes[rev].summary = '\n\n'.join((catlog['Summary'], |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
278 catlog.get_payload())) |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
279 self.changes[rev].summary = self.recode(self.changes[rev].summary) |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
280 |
75ad51257c82
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
Edouard Gomez <ed.gomez@free.fr>
parents:
7591
diff
changeset
|
281 # Commit revision origin when dealing with a branch or tag |
9391
2705e6816d33
use 'x in dict' instead of 'dict.has_key(x)'
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8778
diff
changeset
|
282 if 'Continuation-of' in catlog: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
283 self.changes[rev].continuationof = self.recode( |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
284 catlog['Continuation-of']) |
7875
553aa0cbeab6
cleanup: drop unused assignments
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7603
diff
changeset
|
285 except Exception: |
7578
7971650bdc73
convert/gnuarch: fix cat-log parsing
Edouard Gomez <ed.gomez@free.fr>
parents:
7577
diff
changeset
|
286 raise util.Abort(_('could not parse cat-log of %s') % rev) |
6037
dd3267698d84
convert: add full description for gnu arch revisions
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6035
diff
changeset
|
287 |
6049
348132c112cf
convert: improve gnu arch source performance and other fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6044
diff
changeset
|
288 def _parsechangeset(self, data, rev): |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
289 for l in data: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
290 l = l.strip() |
6055
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
291 # Added file (ignore added directory) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
292 if l.startswith('A') and not l.startswith('A/'): |
6079
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
293 file = self._stripbasepath(l[1:].strip()) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
294 if not self._exclude(file): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
295 self.changes[rev].add_files.append(file) |
6055
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
296 # Deleted file (ignore deleted directory) |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
297 elif l.startswith('D') and not l.startswith('D/'): |
6079
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
298 file = self._stripbasepath(l[1:].strip()) |
6055
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
299 if not self._exclude(file): |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
300 self.changes[rev].del_files.append(file) |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
301 # Modified binary file |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
302 elif l.startswith('Mb'): |
6079
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
303 file = self._stripbasepath(l[2:].strip()) |
6055
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
304 if not self._exclude(file): |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
305 self.changes[rev].mod_files.append(file) |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
306 # Modified link |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
307 elif l.startswith('M->'): |
6079
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
308 file = self._stripbasepath(l[3:].strip()) |
6055
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
309 if not self._exclude(file): |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
310 self.changes[rev].mod_files.append(file) |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
311 # Modified file |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
312 elif l.startswith('M'): |
6079
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
313 file = self._stripbasepath(l[1:].strip()) |
6055
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
314 if not self._exclude(file): |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
315 self.changes[rev].mod_files.append(file) |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
316 # Renamed file (or link) |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
317 elif l.startswith('=>'): |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
318 files = l[2:].strip().split(' ') |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
319 if len(files) == 1: |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
320 files = l[2:].strip().split('\t') |
6079
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
321 src = self._stripbasepath(files[0]) |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
322 dst = self._stripbasepath(files[1]) |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
323 if not self._exclude(src) and not self._exclude(dst): |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
324 self.changes[rev].ren_files[src] = dst |
6055
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
325 # Conversion from file to link or from link to file (modified) |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
326 elif l.startswith('ch'): |
6079
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
327 file = self._stripbasepath(l[2:].strip()) |
6055
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
328 if not self._exclude(file): |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
329 self.changes[rev].mod_files.append(file) |
a3d8b1f8721d
convert: support binary files, link to files (viceversa) in gnu arch
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6049
diff
changeset
|
330 # Renamed directory |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
331 elif l.startswith('/>'): |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
332 dirs = l[2:].strip().split(' ') |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
333 if len(dirs) == 1: |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
diff
changeset
|
334 dirs = l[2:].strip().split('\t') |
6079
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
335 src = self._stripbasepath(dirs[0]) |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
336 dst = self._stripbasepath(dirs[1]) |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
337 if not self._exclude(src) and not self._exclude(dst): |
ea34059b89de
convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6078
diff
changeset
|
338 self.changes[rev].ren_dirs[src] = dst |