annotate hgext/convert/cvsps.py @ 37884:72284d296b02

cvsps: add b prefixes to regular expressions # skip-blame just b prefixes Differential Revision: https://phab.mercurial-scm.org/D3482
author Augie Fackler <augie@google.com>
date Fri, 27 Apr 2018 01:14:23 -0400
parents 34758397ad1b
children fe148d7544a4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
1 # Mercurial built-in replacement for cvsps.
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
2 #
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
3 # Copyright 2008, Frank Kingswood <frank@kingswood-consulting.co.uk>
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
4 #
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8209
diff changeset
5 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9467
diff changeset
6 # GNU General Public License version 2 or any later version.
28369
71176606fa0a convert: cvsps use absolute_import
timeless <timeless@mozdev.org>
parents: 26593
diff changeset
7 from __future__ import absolute_import
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
8
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
9 import os
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
10 import re
28369
71176606fa0a convert: cvsps use absolute_import
timeless <timeless@mozdev.org>
parents: 26593
diff changeset
11
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 28369
diff changeset
12 from mercurial.i18n import _
28369
71176606fa0a convert: cvsps use absolute_import
timeless <timeless@mozdev.org>
parents: 26593
diff changeset
13 from mercurial import (
30638
1c5cbf28f007 py3: replace os.environ with encoding.environ (part 5 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30616
diff changeset
14 encoding,
33388
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
15 error,
28369
71176606fa0a convert: cvsps use absolute_import
timeless <timeless@mozdev.org>
parents: 26593
diff changeset
16 hook,
30616
6f9fcd29e290 py3: replace os.sep with pycompat.ossep (part 4 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 29324
diff changeset
17 pycompat,
28369
71176606fa0a convert: cvsps use absolute_import
timeless <timeless@mozdev.org>
parents: 26593
diff changeset
18 util,
71176606fa0a convert: cvsps use absolute_import
timeless <timeless@mozdev.org>
parents: 26593
diff changeset
19 )
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
20 from mercurial.utils import (
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
21 dateutil,
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
22 procutil,
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
23 stringutil,
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
24 )
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
25
29324
b501579147f1 py3: conditionalize cPickle import by adding in util
Pulkit Goyal <7895pulkit@gmail.com>
parents: 29205
diff changeset
26 pickle = util.pickle
b501579147f1 py3: conditionalize cPickle import by adding in util
Pulkit Goyal <7895pulkit@gmail.com>
parents: 29205
diff changeset
27
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
28 class logentry(object):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
29 '''Class logentry has the following attributes:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
30 .author - author name as CVS knows it
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
31 .branch - name of branch this revision is on
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
32 .branches - revision tuple of branches starting at this revision
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
33 .comment - commit message
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
34 .commitid - CVS commitid or None
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
35 .date - the commit date as a (time, tz) tuple
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
36 .dead - true if file revision is dead
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
37 .file - Name of file
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
38 .lines - a tuple (+lines, -lines) or None
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
39 .parent - Previous revision of this entry
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
40 .rcs - name of file as returned from CVS
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
41 .revision - revision number as tuple
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
42 .tags - list of tags on the file
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
43 .synthetic - is this a synthetic "file ... added on ..." revision?
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
44 .mergepoint - the branch that has been merged from (if present in
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
45 rlog output) or None
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
46 .branchpoints - the branches that start at the current entry or empty
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
47 '''
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
48 def __init__(self, **entries):
10701
35893dcfd40c cvsps: fix traceback involving 'synthetic'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10695
diff changeset
49 self.synthetic = False
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
50 self.__dict__.update(entries)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
51
8080
19229b0b292d cvsps: make debugging easier by adding __repr__() methods.
Greg Ward <greg-hg@gerg.ca>
parents: 8079
diff changeset
52 def __repr__(self):
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
53 items = ("%s=%r"%(k, self.__dict__[k]) for k in sorted(self.__dict__))
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
54 return "%s(%s)"%(type(self).__name__, ", ".join(items))
8080
19229b0b292d cvsps: make debugging easier by adding __repr__() methods.
Greg Ward <greg-hg@gerg.ca>
parents: 8079
diff changeset
55
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
56 class logerror(Exception):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
57 pass
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
58
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
59 def getrepopath(cvspath):
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
60 """Return the repository path from a CVS path.
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
61
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33388
diff changeset
62 >>> getrepopath(b'/foo/bar')
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
63 '/foo/bar'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33388
diff changeset
64 >>> getrepopath(b'c:/foo/bar')
19145
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
65 '/foo/bar'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33388
diff changeset
66 >>> getrepopath(b':pserver:10/foo/bar')
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
67 '/foo/bar'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33388
diff changeset
68 >>> getrepopath(b':pserver:10c:/foo/bar')
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
69 '/foo/bar'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33388
diff changeset
70 >>> getrepopath(b':pserver:/foo/bar')
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
71 '/foo/bar'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33388
diff changeset
72 >>> getrepopath(b':pserver:c:/foo/bar')
19145
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
73 '/foo/bar'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33388
diff changeset
74 >>> getrepopath(b':pserver:truc@foo.bar:/foo/bar')
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
75 '/foo/bar'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33388
diff changeset
76 >>> getrepopath(b':pserver:truc@foo.bar:c:/foo/bar')
19145
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
77 '/foo/bar'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33388
diff changeset
78 >>> getrepopath(b'user@server/path/to/repository')
19145
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
79 '/path/to/repository'
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
80 """
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
81 # According to CVS manual, CVS paths are expressed like:
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
82 # [:method:][[user][:password]@]hostname[:[port]]/path/to/repository
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
83 #
19145
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
84 # CVSpath is splitted into parts and then position of the first occurrence
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
85 # of the '/' char after the '@' is located. The solution is the rest of the
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
86 # string after that '/' sign including it
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
87
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
88 parts = cvspath.split(':')
19145
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
89 atposition = parts[-1].find('@')
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
90 start = 0
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
91
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
92 if atposition != -1:
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
93 start = atposition
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
94
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
95 repopath = parts[-1][parts[-1].find('/', start):]
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
96 return repopath
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
97
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
98 def createlog(ui, directory=None, root="", rlog=True, cache=None):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
99 '''Collect the CVS rlog'''
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
100
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
101 # Because we store many duplicate commit log messages, reusing strings
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
102 # saves a lot of memory and pickle storage space.
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
103 _scache = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
104 def scache(s):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
105 "return a shared version of a string"
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
106 return _scache.setdefault(s, s)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
107
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
108 ui.status(_('collecting CVS rlog\n'))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
109
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
110 log = [] # list of logentry objects containing the CVS state
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
111
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
112 # patterns to match in CVS (r)log output, by state of use
37884
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
113 re_00 = re.compile(b'RCS file: (.+)$')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
114 re_01 = re.compile(b'cvs \\[r?log aborted\\]: (.+)$')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
115 re_02 = re.compile(b'cvs (r?log|server): (.+)\n$')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
116 re_03 = re.compile(b"(Cannot access.+CVSROOT)|"
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
117 b"(can't create temporary directory.+)$")
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
118 re_10 = re.compile(b'Working file: (.+)$')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
119 re_20 = re.compile(b'symbolic names:')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
120 re_30 = re.compile(b'\t(.+): ([\\d.]+)$')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
121 re_31 = re.compile(b'----------------------------$')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
122 re_32 = re.compile(b'======================================='
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
123 b'======================================$')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
124 re_50 = re.compile(b'revision ([\\d.]+)(\s+locked by:\s+.+;)?$')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
125 re_60 = re.compile(br'date:\s+(.+);\s+author:\s+(.+);\s+state:\s+(.+?);'
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
126 br'(\s+lines:\s+(\+\d+)?\s+(-\d+)?;)?'
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
127 br'(\s+commitid:\s+([^;]+);)?'
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
128 br'(.*mergepoint:\s+([^;]+);)?')
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
129 re_70 = re.compile(b'branches: (.+);$')
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
130
37884
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
131 file_added_re = re.compile(br'file [^/]+ was (initially )?added on branch')
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
132
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
133 prefix = '' # leading path to strip of what we get from CVS
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
134
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
135 if directory is None:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
136 # Current working directory
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
137
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
138 # Get the real directory in the repository
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
139 try:
36132
42a393ea56d2 convert: open all files in binary mode
Augie Fackler <augie@google.com>
parents: 34131
diff changeset
140 prefix = open(os.path.join('CVS','Repository'), 'rb').read().strip()
10695
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
141 directory = prefix
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
142 if prefix == ".":
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
143 prefix = ""
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
144 except IOError:
10939
9f6731b03906 convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents: 10701
diff changeset
145 raise logerror(_('not a CVS sandbox'))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
146
30616
6f9fcd29e290 py3: replace os.sep with pycompat.ossep (part 4 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 29324
diff changeset
147 if prefix and not prefix.endswith(pycompat.ossep):
6f9fcd29e290 py3: replace os.sep with pycompat.ossep (part 4 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 29324
diff changeset
148 prefix += pycompat.ossep
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
149
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
150 # Use the Root file in the sandbox, if it exists
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
151 try:
36132
42a393ea56d2 convert: open all files in binary mode
Augie Fackler <augie@google.com>
parents: 34131
diff changeset
152 root = open(os.path.join('CVS','Root'), 'rb').read().strip()
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
153 except IOError:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
154 pass
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
155
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
156 if not root:
30638
1c5cbf28f007 py3: replace os.environ with encoding.environ (part 5 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30616
diff changeset
157 root = encoding.environ.get('CVSROOT', '')
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
158
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
159 # read log cache if one exists
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
160 oldlog = []
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
161 date = None
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
162
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
163 if cache:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
164 cachedir = os.path.expanduser('~/.hg.cvsps')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
165 if not os.path.exists(cachedir):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
166 os.mkdir(cachedir)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
167
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
168 # The cvsps cache pickle needs a uniquified name, based on the
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
169 # repository location. The address may have all sort of nasties
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
170 # in it, slashes, colons and such. So here we take just the
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 16688
diff changeset
171 # alphanumeric characters, concatenated in a way that does not
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 16688
diff changeset
172 # mix up the various components, so that
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
173 # :pserver:user@server:/path
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
174 # and
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
175 # /pserver/user/server/path
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
176 # are mapped to different cache file names.
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
177 cachefile = root.split(":") + [directory, "cache"]
36455
9e3cb58c7ab3 py3: make sure regexes are bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36329
diff changeset
178 cachefile = ['-'.join(re.findall(br'\w+', s)) for s in cachefile if s]
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
179 cachefile = os.path.join(cachedir,
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
180 '.'.join([s for s in cachefile if s]))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
181
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
182 if cache == 'update':
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
183 try:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
184 ui.note(_('reading cvs log cache %s\n') % cachefile)
36132
42a393ea56d2 convert: open all files in binary mode
Augie Fackler <augie@google.com>
parents: 34131
diff changeset
185 oldlog = pickle.load(open(cachefile, 'rb'))
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
186 for e in oldlog:
18286
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
187 if not (util.safehasattr(e, 'branchpoints') and
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
188 util.safehasattr(e, 'commitid') and
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
189 util.safehasattr(e, 'mergepoint')):
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
190 ui.status(_('ignoring old cache\n'))
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
191 oldlog = []
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
192 break
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
193
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
194 ui.note(_('cache has %d log entries\n') % len(oldlog))
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24305
diff changeset
195 except Exception as e:
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
196 ui.note(_('error reading cache: %r\n') % e)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
197
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
198 if oldlog:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
199 date = oldlog[-1].date # last commit date as a (time,tz) tuple
36607
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36455
diff changeset
200 date = dateutil.datestr(date, '%Y/%m/%d %H:%M:%S %1%2')
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
201
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
202 # build the CVS commandline
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
203 cmd = ['cvs', '-q']
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
204 if root:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
205 cmd.append('-d%s' % root)
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
206 p = util.normpath(getrepopath(root))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
207 if not p.endswith('/'):
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
208 p += '/'
10695
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
209 if prefix:
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
210 # looks like normpath replaces "" by "."
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
211 prefix = p + util.normpath(prefix)
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
212 else:
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
213 prefix = p
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
214 cmd.append(['log', 'rlog'][rlog])
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
215 if date:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
216 # no space between option and date string
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
217 cmd.append('-d>%s' % date)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
218 cmd.append(directory)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
219
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
220 # state machine begins here
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
221 tags = {} # dictionary of revisions on current file with their tags
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
222 branchmap = {} # mapping between branch names and revision numbers
26593
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
223 rcsmap = {}
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
224 state = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
225 store = False # set when a new record can be appended
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
226
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
227 cmd = [procutil.shellquote(arg) for arg in cmd]
6956
12472a240398 i18n: mark strings for translation in convert extension
Martin Geisler <mg@daimi.au.dk>
parents: 6762
diff changeset
228 ui.note(_("running %s\n") % (' '.join(cmd)))
9467
4c041f1ee1b4 do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents: 9032
diff changeset
229 ui.debug("prefix=%r directory=%r root=%r\n" % (prefix, directory, root))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
230
37458
00e4bd97b095 procutil: always popen() in binary mode
Yuya Nishihara <yuya@tcha.org>
parents: 37120
diff changeset
231 pfp = procutil.popen(' '.join(cmd), 'rb')
00e4bd97b095 procutil: always popen() in binary mode
Yuya Nishihara <yuya@tcha.org>
parents: 37120
diff changeset
232 peek = util.fromnativeeol(pfp.readline())
7593
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
233 while True:
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
234 line = peek
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
235 if line == '':
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
236 break
37458
00e4bd97b095 procutil: always popen() in binary mode
Yuya Nishihara <yuya@tcha.org>
parents: 37120
diff changeset
237 peek = util.fromnativeeol(pfp.readline())
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
238 if line.endswith('\n'):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
239 line = line[:-1]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
240 #ui.debug('state=%d line=%r\n' % (state, line))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
241
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
242 if state == 0:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
243 # initial state, consume input until we see 'RCS file'
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
244 match = re_00.match(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
245 if match:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
246 rcs = match.group(1)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
247 tags = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
248 if rlog:
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
249 filename = util.normpath(rcs[:-2])
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
250 if filename.startswith(prefix):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
251 filename = filename[len(prefix):]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
252 if filename.startswith('/'):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
253 filename = filename[1:]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
254 if filename.startswith('Attic/'):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
255 filename = filename[6:]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
256 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
257 filename = filename.replace('/Attic/', '/')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
258 state = 2
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
259 continue
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
260 state = 1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
261 continue
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
262 match = re_01.match(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
263 if match:
11122
2114e44b08f6 clean up remaining generic exceptions
Matt Mackall <mpm@selenic.com>
parents: 10950
diff changeset
264 raise logerror(match.group(1))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
265 match = re_02.match(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
266 if match:
11122
2114e44b08f6 clean up remaining generic exceptions
Matt Mackall <mpm@selenic.com>
parents: 10950
diff changeset
267 raise logerror(match.group(2))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
268 if re_03.match(line):
11122
2114e44b08f6 clean up remaining generic exceptions
Matt Mackall <mpm@selenic.com>
parents: 10950
diff changeset
269 raise logerror(line)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
270
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
271 elif state == 1:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
272 # expect 'Working file' (only when using log instead of rlog)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
273 match = re_10.match(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
274 assert match, _('RCS file must be followed by working file')
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
275 filename = util.normpath(match.group(1))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
276 state = 2
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
277
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
278 elif state == 2:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
279 # expect 'symbolic names'
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
280 if re_20.match(line):
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
281 branchmap = {}
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
282 state = 3
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
283
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
284 elif state == 3:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
285 # read the symbolic names and store as tags
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
286 match = re_30.match(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
287 if match:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
288 rev = [int(x) for x in match.group(2).split('.')]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
289
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
290 # Convert magic branch number to an odd-numbered one
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
291 revn = len(rev)
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
292 if revn > 3 and (revn % 2) == 0 and rev[-2] == 0:
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
293 rev = rev[:-2] + rev[-1:]
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
294 rev = tuple(rev)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
295
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
296 if rev not in tags:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
297 tags[rev] = []
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
298 tags[rev].append(match.group(1))
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
299 branchmap[match.group(1)] = match.group(2)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
300
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
301 elif re_31.match(line):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
302 state = 5
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
303 elif re_32.match(line):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
304 state = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
305
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
306 elif state == 4:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
307 # expecting '------' separator before first revision
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
308 if re_31.match(line):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
309 state = 5
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
310 else:
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
311 assert not re_32.match(line), _('must have at least '
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
312 'some revisions')
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
313
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
314 elif state == 5:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
315 # expecting revision number and possibly (ignored) lock indication
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
316 # we create the logentry here from values stored in states 0 to 4,
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
317 # as this state is re-entered for subsequent revisions of a file.
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
318 match = re_50.match(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
319 assert match, _('expected revision number')
18265
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
320 e = logentry(rcs=scache(rcs),
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
321 file=scache(filename),
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
322 revision=tuple([int(x) for x in
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
323 match.group(1).split('.')]),
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
324 branches=[],
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
325 parent=None,
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
326 commitid=None,
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
327 mergepoint=None,
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
328 branchpoints=set())
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
329
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
330 state = 6
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
331
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
332 elif state == 6:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
333 # expecting date, author, state, lines changed
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
334 match = re_60.match(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
335 assert match, _('revision must be followed by date line')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
336 d = match.group(1)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
337 if d[2] == '/':
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
338 # Y2K
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
339 d = '19' + d
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
340
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
341 if len(d.split()) != 3:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
342 # cvs log dates always in GMT
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
343 d = d + ' UTC'
36607
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36455
diff changeset
344 e.date = dateutil.parsedate(d, ['%y/%m/%d %H:%M:%S',
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
345 '%Y/%m/%d %H:%M:%S',
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
346 '%Y-%m-%d %H:%M:%S'])
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
347 e.author = scache(match.group(2))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
348 e.dead = match.group(3).lower() == 'dead'
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
349
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
350 if match.group(5):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
351 if match.group(6):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
352 e.lines = (int(match.group(5)), int(match.group(6)))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
353 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
354 e.lines = (int(match.group(5)), 0)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
355 elif match.group(6):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
356 e.lines = (0, int(match.group(6)))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
357 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
358 e.lines = None
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
359
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
360 if match.group(7): # cvs 1.12 commitid
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
361 e.commitid = match.group(8)
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
362
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
363 if match.group(9): # cvsnt mergepoint
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
364 myrev = match.group(10).split('.')
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
365 if len(myrev) == 2: # head
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
366 e.mergepoint = 'HEAD'
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
367 else:
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
368 myrev = '.'.join(myrev[:-2] + ['0', myrev[-2]])
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
369 branches = [b for b in branchmap if branchmap[b] == myrev]
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 15790
diff changeset
370 assert len(branches) == 1, ('unknown branch: %s'
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 15790
diff changeset
371 % e.mergepoint)
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
372 e.mergepoint = branches[0]
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
373
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
374 e.comment = []
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
375 state = 7
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
376
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
377 elif state == 7:
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
378 # read the revision numbers of branches that start at this revision
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
379 # or store the commit log message otherwise
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
380 m = re_70.match(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
381 if m:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
382 e.branches = [tuple([int(y) for y in x.strip().split('.')])
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
383 for x in m.group(1).split(';')]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
384 state = 8
7593
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
385 elif re_31.match(line) and re_50.match(peek):
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
386 state = 5
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
387 store = True
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
388 elif re_32.match(line):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
389 state = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
390 store = True
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
391 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
392 e.comment.append(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
393
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
394 elif state == 8:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
395 # store commit log message
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
396 if re_31.match(line):
15205
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
397 cpeek = peek
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
398 if cpeek.endswith('\n'):
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
399 cpeek = cpeek[:-1]
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
400 if re_50.match(cpeek):
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
401 state = 5
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
402 store = True
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
403 else:
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
404 e.comment.append(line)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
405 elif re_32.match(line):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
406 state = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
407 store = True
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
408 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
409 e.comment.append(line)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
410
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
411 # When a file is added on a branch B1, CVS creates a synthetic
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
412 # dead trunk revision 1.1 so that the branch has a root.
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
413 # Likewise, if you merge such a file to a later branch B2 (one
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
414 # that already existed when the file was added on B1), CVS
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
415 # creates a synthetic dead revision 1.1.x.1 on B2. Don't drop
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
416 # these revisions now, but mark them synthetic so
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
417 # createchangeset() can take care of them.
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
418 if (store and
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
419 e.dead and
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
420 e.revision[-1] == 1 and # 1.1 or 1.1.x.1
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
421 len(e.comment) == 1 and
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
422 file_added_re.match(e.comment[0])):
9467
4c041f1ee1b4 do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents: 9032
diff changeset
423 ui.debug('found synthetic revision in %s: %r\n'
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
424 % (e.rcs, e.comment[0]))
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
425 e.synthetic = True
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
426
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
427 if store:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
428 # clean up the results and save in the log.
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
429 store = False
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8171
diff changeset
430 e.tags = sorted([scache(x) for x in tags.get(e.revision, [])])
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
431 e.comment = scache('\n'.join(e.comment))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
432
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
433 revn = len(e.revision)
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
434 if revn > 3 and (revn % 2) == 0:
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
435 e.branch = tags.get(e.revision[:-1], [None])[0]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
436 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
437 e.branch = None
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
438
8756
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
439 # find the branches starting from this revision
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
440 branchpoints = set()
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
441 for branch, revision in branchmap.iteritems():
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
442 revparts = tuple([int(i) for i in revision.split('.')])
10950
278d45703ac2 cvs: skip bad tags
Brandon Parsons <parsonsb@rsn.hp.com>
parents: 10939
diff changeset
443 if len(revparts) < 2: # bad tags
278d45703ac2 cvs: skip bad tags
Brandon Parsons <parsonsb@rsn.hp.com>
parents: 10939
diff changeset
444 continue
8756
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
445 if revparts[-2] == 0 and revparts[-1] % 2 == 0:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
446 # normal branch
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
447 if revparts[:-2] == e.revision:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
448 branchpoints.add(branch)
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
449 elif revparts == (1, 1, 1): # vendor branch
8756
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
450 if revparts in e.branches:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
451 branchpoints.add(branch)
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
452 e.branchpoints = branchpoints
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
453
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
454 log.append(e)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
455
26593
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
456 rcsmap[e.rcs.replace('/Attic/', '/')] = e.rcs
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
457
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
458 if len(log) % 100 == 0:
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
459 ui.status(stringutil.ellipsis('%d %s' % (len(log), e.file), 80)
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
460 + '\n')
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
461
9032
1fa80c5428b8 compat: use 'key' argument instead of 'cmp' when sorting a list
Alejandro Santos <alejolp@alejolp.com>
parents: 9031
diff changeset
462 log.sort(key=lambda x: (x.rcs, x.revision))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
463
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
464 # find parent revisions of individual files
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
465 versions = {}
26593
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
466 for e in sorted(oldlog, key=lambda x: (x.rcs, x.revision)):
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
467 rcs = e.rcs.replace('/Attic/', '/')
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
468 if rcs in rcsmap:
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
469 e.rcs = rcsmap[rcs]
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
470 branch = e.revision[:-1]
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
471 versions[(e.rcs, branch)] = e.revision
c60dfcc0abf2 cvsps: fix computation of parent revisions when log caching is on
Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
parents: 25660
diff changeset
472
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
473 for e in log:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
474 branch = e.revision[:-1]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
475 p = versions.get((e.rcs, branch), None)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
476 if p is None:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
477 p = e.revision[:-2]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
478 e.parent = p
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
479 versions[(e.rcs, branch)] = e.revision
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
480
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
481 # update the log cache
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
482 if cache:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
483 if log:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
484 # join up the old and new logs
9032
1fa80c5428b8 compat: use 'key' argument instead of 'cmp' when sorting a list
Alejandro Santos <alejolp@alejolp.com>
parents: 9031
diff changeset
485 log.sort(key=lambda x: x.date)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
486
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
487 if oldlog and oldlog[-1].date >= log[0].date:
10939
9f6731b03906 convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents: 10701
diff changeset
488 raise logerror(_('log cache overlaps with new log entries,'
9f6731b03906 convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents: 10701
diff changeset
489 ' re-run without cache.'))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
490
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
491 log = oldlog + log
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
492
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
493 # write the new cachefile
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
494 ui.note(_('writing cvs log cache %s\n') % cachefile)
36132
42a393ea56d2 convert: open all files in binary mode
Augie Fackler <augie@google.com>
parents: 34131
diff changeset
495 pickle.dump(log, open(cachefile, 'wb'))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
496 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
497 log = oldlog
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
498
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
499 ui.status(_('%d log entries\n') % len(log))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
500
33388
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
501 encodings = ui.configlist('convert', 'cvsps.logencoding')
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
502 if encodings:
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
503 def revstr(r):
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
504 # this is needed, because logentry.revision is a tuple of "int"
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
505 # (e.g. (1, 2) for "1.2")
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
506 return '.'.join(pycompat.maplist(pycompat.bytestr, r))
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
507
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
508 for entry in log:
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
509 comment = entry.comment
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
510 for e in encodings:
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
511 try:
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
512 entry.comment = comment.decode(e).encode('utf-8')
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
513 if ui.debugflag:
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
514 ui.debug("transcoding by %s: %s of %s\n" %
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
515 (e, revstr(entry.revision), entry.file))
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
516 break
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
517 except UnicodeDecodeError:
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
518 pass # try next encoding
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
519 except LookupError as inst: # unknown encoding, maybe
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
520 raise error.Abort(inst,
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
521 hint=_('check convert.cvsps.logencoding'
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
522 ' configuration'))
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
523 else:
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
524 raise error.Abort(_("no encoding can transcode"
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
525 " CVS log message for %s of %s")
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
526 % (revstr(entry.revision), entry.file),
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
527 hint=_('check convert.cvsps.logencoding'
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
528 ' configuration'))
0823f0983eaa convert: transcode CVS log messages by specified encoding (issue5597)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31408
diff changeset
529
10095
69ce7a10e593 convert: implement two hooks in builtin cvsps
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 9467
diff changeset
530 hook.hook(ui, None, "cvslog", True, log=log)
69ce7a10e593 convert: implement two hooks in builtin cvsps
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 9467
diff changeset
531
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
532 return log
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
533
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
534
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
535 class changeset(object):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
536 '''Class changeset has the following attributes:
8079
fb162c47000b cvsps: update docstring for changeset class.
Greg Ward <greg-hg@gerg.ca>
parents: 8028
diff changeset
537 .id - integer identifying this changeset (list index)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
538 .author - author name as CVS knows it
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
539 .branch - name of branch this changeset is on, or None
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
540 .comment - commit message
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
541 .commitid - CVS commitid or None
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
542 .date - the commit date as a (time,tz) tuple
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
543 .entries - list of logentry objects in this changeset
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
544 .parents - list of one or two parent changesets
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
545 .tags - list of tags on this changeset
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
546 .synthetic - from synthetic revision "file ... added on branch ..."
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
547 .mergepoint- the branch that has been merged from or None
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
548 .branchpoints- the branches that start at the current entry or empty
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
549 '''
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
550 def __init__(self, **entries):
19505
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
551 self.id = None
10701
35893dcfd40c cvsps: fix traceback involving 'synthetic'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10695
diff changeset
552 self.synthetic = False
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
553 self.__dict__.update(entries)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
554
8080
19229b0b292d cvsps: make debugging easier by adding __repr__() methods.
Greg Ward <greg-hg@gerg.ca>
parents: 8079
diff changeset
555 def __repr__(self):
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
556 items = ("%s=%r"%(k, self.__dict__[k]) for k in sorted(self.__dict__))
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
557 return "%s(%s)"%(type(self).__name__, ", ".join(items))
8080
19229b0b292d cvsps: make debugging easier by adding __repr__() methods.
Greg Ward <greg-hg@gerg.ca>
parents: 8079
diff changeset
558
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
559 def createchangeset(ui, log, fuzz=60, mergefrom=None, mergeto=None):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
560 '''Convert log into changesets.'''
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
561
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
562 ui.status(_('creating changesets\n'))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
563
18718
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
564 # try to order commitids by date
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
565 mindate = {}
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
566 for e in log:
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
567 if e.commitid:
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
568 mindate[e.commitid] = min(e.date, mindate.get(e.commitid))
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
569
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
570 # Merge changesets
18718
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
571 log.sort(key=lambda x: (mindate.get(x.commitid), x.commitid, x.comment,
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
572 x.author, x.branch, x.date, x.branchpoints))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
573
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
574 changesets = []
8456
e9e2a2c9b294 convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8225
diff changeset
575 files = set()
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
576 c = None
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
577 for i, e in enumerate(log):
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
578
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
579 # Check if log entry belongs to the current changeset or not.
8756
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
580
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 16688
diff changeset
581 # Since CVS is file-centric, two different file revisions with
8756
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
582 # different branchpoints should be treated as belonging to two
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
583 # different changesets (and the ordering is important and not
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
584 # honoured by cvsps at this point).
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
585 #
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
586 # Consider the following case:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
587 # foo 1.1 branchpoints: [MYBRANCH]
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
588 # bar 1.1 branchpoints: [MYBRANCH, MYBRANCH2]
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
589 #
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
590 # Here foo is part only of MYBRANCH, but not MYBRANCH2, e.g. a
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
591 # later version of foo may be in MYBRANCH2, so foo should be the
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
592 # first changeset and bar the next and MYBRANCH and MYBRANCH2
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
593 # should both start off of the bar changeset. No provisions are
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
594 # made to ensure that this is, in fact, what happens.
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
595 if not (c and e.branchpoints == c.branchpoints and
18265
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
596 (# cvs commitids
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
597 (e.commitid is not None and e.commitid == c.commitid) or
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
598 (# no commitids, use fuzzy commit detection
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
599 (e.commitid is None or c.commitid is None) and
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
600 e.comment == c.comment and
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
601 e.author == c.author and
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
602 e.branch == c.branch and
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
603 ((c.date[0] + c.date[1]) <=
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
604 (e.date[0] + e.date[1]) <=
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
605 (c.date[0] + c.date[1]) + fuzz) and
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
606 e.file not in files))):
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
607 c = changeset(comment=e.comment, author=e.author,
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
608 branch=e.branch, date=e.date,
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
609 entries=[], mergepoint=e.mergepoint,
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
610 branchpoints=e.branchpoints, commitid=e.commitid)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
611 changesets.append(c)
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
612
8456
e9e2a2c9b294 convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8225
diff changeset
613 files = set()
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
614 if len(changesets) % 100 == 0:
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
615 t = '%d %s' % (len(changesets), repr(e.comment)[1:-1])
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
616 ui.status(stringutil.ellipsis(t, 80) + '\n')
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
617
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
618 c.entries.append(e)
8456
e9e2a2c9b294 convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8225
diff changeset
619 files.add(e.file)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
620 c.date = e.date # changeset date is date of latest commit in it
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
621
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
622 # Mark synthetic changesets
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
623
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
624 for c in changesets:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
625 # Synthetic revisions always get their own changeset, because
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
626 # the log message includes the filename. E.g. if you add file3
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
627 # and file4 on a branch, you get four log entries and three
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
628 # changesets:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
629 # "File file3 was added on branch ..." (synthetic, 1 entry)
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
630 # "File file4 was added on branch ..." (synthetic, 1 entry)
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
631 # "Add file3 and file4 to fix ..." (real, 2 entries)
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
632 # Hence the check for 1 entry here.
10701
35893dcfd40c cvsps: fix traceback involving 'synthetic'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10695
diff changeset
633 c.synthetic = len(c.entries) == 1 and c.entries[0].synthetic
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
634
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
635 # Sort files in each changeset
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
636
15790
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
637 def entitycompare(l, r):
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
638 'Mimic cvsps sorting order'
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
639 l = l.file.split('/')
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
640 r = r.file.split('/')
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
641 nl = len(l)
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
642 nr = len(r)
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
643 n = min(nl, nr)
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
644 for i in range(n):
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
645 if i + 1 == nl and nl < nr:
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
646 return -1
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
647 elif i + 1 == nr and nl > nr:
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
648 return +1
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
649 elif l[i] < r[i]:
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
650 return -1
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
651 elif l[i] > r[i]:
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
652 return +1
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
653 return 0
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
654
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
655 for c in changesets:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
656 c.entries.sort(entitycompare)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
657
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
658 # Sort changesets by date
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
659
19505
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
660 odd = set()
31408
6e3c79bc9a35 convert: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30638
diff changeset
661 def cscmp(l, r):
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
662 d = sum(l.date) - sum(r.date)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
663 if d:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
664 return d
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
665
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
666 # detect vendor branches and initial commits on a branch
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
667 le = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
668 for e in l.entries:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
669 le[e.rcs] = e.revision
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
670 re = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
671 for e in r.entries:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
672 re[e.rcs] = e.revision
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
673
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
674 d = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
675 for e in l.entries:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
676 if re.get(e.rcs, None) == e.parent:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
677 assert not d
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
678 d = 1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
679 break
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
680
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
681 for e in r.entries:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
682 if le.get(e.rcs, None) == e.parent:
19505
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
683 if d:
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
684 odd.add((l, r))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
685 d = -1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
686 break
22267
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
687 # By this point, the changesets are sufficiently compared that
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
688 # we don't really care about ordering. However, this leaves
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
689 # some race conditions in the tests, so we compare on the
24305
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
690 # number of files modified, the files contained in each
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
691 # changeset, and the branchpoints in the change to ensure test
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
692 # output remains stable.
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
693
22267
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
694 # recommended replacement for cmp from
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
695 # https://docs.python.org/3.0/whatsnew/3.0.html
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
696 c = lambda x, y: (x > y) - (x < y)
24305
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
697 # Sort bigger changes first.
22267
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
698 if not d:
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
699 d = c(len(l.entries), len(r.entries))
24305
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
700 # Try sorting by filename in the change.
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
701 if not d:
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
702 d = c([e.file for e in l.entries], [e.file for e in r.entries])
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
703 # Try and put changes without a branch point before ones with
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
704 # a branch point.
22267
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
705 if not d:
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
706 d = c(len(l.branchpoints), len(r.branchpoints))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
707 return d
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
708
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
709 changesets.sort(cscmp)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
710
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
711 # Collect tags
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
712
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
713 globaltags = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
714 for c in changesets:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
715 for e in c.entries:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
716 for tag in e.tags:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
717 # remember which is the latest changeset to have this tag
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
718 globaltags[tag] = c
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
719
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
720 for c in changesets:
8456
e9e2a2c9b294 convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8225
diff changeset
721 tags = set()
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
722 for e in c.entries:
8483
221786b9ce34 convert/cvsps: use set.update for bulk update
Martin Geisler <mg@lazybytes.net>
parents: 8456
diff changeset
723 tags.update(e.tags)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
724 # remember tags only if this is the latest changeset to have it
8456
e9e2a2c9b294 convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8225
diff changeset
725 c.tags = sorted(tag for tag in tags if globaltags[tag] is c)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
726
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
727 # Find parent changesets, handle {{mergetobranch BRANCHNAME}}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
728 # by inserting dummy changesets with two parents, and handle
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
729 # {{mergefrombranch BRANCHNAME}} by setting two parents.
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
730
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
731 if mergeto is None:
37884
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
732 mergeto = br'{{mergetobranch ([-\w]+)}}'
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
733 if mergeto:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
734 mergeto = re.compile(mergeto)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
735
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
736 if mergefrom is None:
37884
72284d296b02 cvsps: add b prefixes to regular expressions
Augie Fackler <augie@google.com>
parents: 37658
diff changeset
737 mergefrom = br'{{mergefrombranch ([-\w]+)}}'
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
738 if mergefrom:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
739 mergefrom = re.compile(mergefrom)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
740
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
741 versions = {} # changeset index where we saw any particular file version
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
742 branches = {} # changeset index where we saw a branch
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
743 n = len(changesets)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
744 i = 0
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
745 while i < n:
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
746 c = changesets[i]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
747
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
748 for f in c.entries:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
749 versions[(f.rcs, f.revision)] = i
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
750
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
751 p = None
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
752 if c.branch in branches:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
753 p = branches[c.branch]
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
754 else:
8756
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
755 # first changeset on a new branch
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
756 # the parent is a changeset with the branch in its
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
757 # branchpoints such that it is the latest possible
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
758 # commit without any intervening, unrelated commits.
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
759
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
760 for candidate in xrange(i):
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
761 if c.branch not in changesets[candidate].branchpoints:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
762 if p is not None:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
763 break
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
764 continue
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
765 p = candidate
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
766
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
767 c.parents = []
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
768 if p is not None:
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
769 p = changesets[p]
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
770
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
771 # Ensure no changeset has a synthetic changeset as a parent.
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
772 while p.synthetic:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
773 assert len(p.parents) <= 1, \
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
774 _('synthetic changeset cannot have multiple parents')
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
775 if p.parents:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
776 p = p.parents[0]
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
777 else:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
778 p = None
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
779 break
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
780
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
781 if p is not None:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
782 c.parents.append(p)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
783
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
784 if c.mergepoint:
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
785 if c.mergepoint == 'HEAD':
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
786 c.mergepoint = None
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
787 c.parents.append(changesets[branches[c.mergepoint]])
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
788
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
789 if mergefrom:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
790 m = mergefrom.search(c.comment)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
791 if m:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
792 m = m.group(1)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
793 if m == 'HEAD':
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
794 m = None
8171
4e5bd9b97bb3 cvsps: fix crash when log message refers to non-existent branch (issue1615).
Greg Ward <greg-hg@gerg.ca>
parents: 8080
diff changeset
795 try:
4e5bd9b97bb3 cvsps: fix crash when log message refers to non-existent branch (issue1615).
Greg Ward <greg-hg@gerg.ca>
parents: 8080
diff changeset
796 candidate = changesets[branches[m]]
4e5bd9b97bb3 cvsps: fix crash when log message refers to non-existent branch (issue1615).
Greg Ward <greg-hg@gerg.ca>
parents: 8080
diff changeset
797 except KeyError:
4e5bd9b97bb3 cvsps: fix crash when log message refers to non-existent branch (issue1615).
Greg Ward <greg-hg@gerg.ca>
parents: 8080
diff changeset
798 ui.warn(_("warning: CVS commit message references "
4e5bd9b97bb3 cvsps: fix crash when log message refers to non-existent branch (issue1615).
Greg Ward <greg-hg@gerg.ca>
parents: 8080
diff changeset
799 "non-existent branch %r:\n%s\n")
4e5bd9b97bb3 cvsps: fix crash when log message refers to non-existent branch (issue1615).
Greg Ward <greg-hg@gerg.ca>
parents: 8080
diff changeset
800 % (m, c.comment))
7950
9bbcfa898cd3 issue1578: fix crash: do not use synthetic changesets as merge parents.
Greg Ward <greg-hg@gerg.ca>
parents: 7862
diff changeset
801 if m in branches and c.branch != m and not candidate.synthetic:
9bbcfa898cd3 issue1578: fix crash: do not use synthetic changesets as merge parents.
Greg Ward <greg-hg@gerg.ca>
parents: 7862
diff changeset
802 c.parents.append(candidate)
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
803
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
804 if mergeto:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
805 m = mergeto.search(c.comment)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
806 if m:
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
807 if m.groups():
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
808 m = m.group(1)
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
809 if m == 'HEAD':
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
810 m = None
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
811 else:
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
812 m = None # if no group found then merge to HEAD
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
813 if m in branches and c.branch != m:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
814 # insert empty changeset for merge
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
815 cc = changeset(
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
816 author=c.author, branch=m, date=c.date,
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
817 comment='convert-repo: CVS merge from branch %s'
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
818 % c.branch,
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
819 entries=[], tags=[],
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
820 parents=[changesets[branches[m]], c])
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
821 changesets.insert(i + 1, cc)
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
822 branches[m] = i + 1
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
823
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
824 # adjust our loop counters now we have inserted a new entry
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
825 n += 1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
826 i += 2
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
827 continue
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
828
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
829 branches[c.branch] = i
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
830 i += 1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
831
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
832 # Drop synthetic changesets (safe now that we have ensured no other
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
833 # changesets can have them as parents).
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
834 i = 0
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
835 while i < len(changesets):
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
836 if changesets[i].synthetic:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
837 del changesets[i]
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
838 else:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
839 i += 1
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
840
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
841 # Number changesets
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
842
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
843 for i, c in enumerate(changesets):
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
844 c.id = i + 1
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
845
19505
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
846 if odd:
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
847 for l, r in odd:
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
848 if l.id is not None and r.id is not None:
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
849 ui.warn(_('changeset %d is both before and after %d\n')
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
850 % (l.id, r.id))
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
851
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
852 ui.status(_('%d changeset entries\n') % len(changesets))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
853
10095
69ce7a10e593 convert: implement two hooks in builtin cvsps
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 9467
diff changeset
854 hook.hook(ui, None, "cvschangesets", True, changesets=changesets)
69ce7a10e593 convert: implement two hooks in builtin cvsps
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 9467
diff changeset
855
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
856 return changesets
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
857
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
858
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
859 def debugcvsps(ui, *args, **opts):
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
860 '''Read CVS rlog for current directory or named path in
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
861 repository, and convert the log to changesets based on matching
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
862 commit log entries and dates.
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
863 '''
36329
93943eef696f py3: use pycompat.byteskwargs in hgext/convert/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36132
diff changeset
864 opts = pycompat.byteskwargs(opts)
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
865 if opts["new_cache"]:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
866 cache = "write"
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
867 elif opts["update_cache"]:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
868 cache = "update"
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
869 else:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
870 cache = None
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
871
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
872 revisions = opts["revisions"]
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
873
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
874 try:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
875 if args:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
876 log = []
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
877 for d in args:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
878 log += createlog(ui, d, root=opts["root"], cache=cache)
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
879 else:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
880 log = createlog(ui, root=opts["root"], cache=cache)
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24305
diff changeset
881 except logerror as e:
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
882 ui.write("%r\n"%e)
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
883 return
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
884
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
885 changesets = createchangeset(ui, log, opts["fuzz"])
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
886 del log
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
887
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
888 # Print changesets (optionally filtered)
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
889
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
890 off = len(revisions)
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
891 branches = {} # latest version number in each branch
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
892 ancestors = {} # parent branch
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
893 for cs in changesets:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
894
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
895 if opts["ancestors"]:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
896 if cs.branch not in branches and cs.parents and cs.parents[0].id:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
897 ancestors[cs.branch] = (changesets[cs.parents[0].id - 1].branch,
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
898 cs.parents[0].id)
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
899 branches[cs.branch] = cs.id
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
900
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
901 # limit by branches
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
902 if opts["branches"] and (cs.branch or 'HEAD') not in opts["branches"]:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
903 continue
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
904
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
905 if not off:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
906 # Note: trailing spaces on several lines here are needed to have
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
907 # bug-for-bug compatibility with cvsps.
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
908 ui.write('---------------------\n')
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
909 ui.write(('PatchSet %d \n' % cs.id))
36607
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36455
diff changeset
910 ui.write(('Date: %s\n' % dateutil.datestr(cs.date,
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
911 '%Y/%m/%d %H:%M:%S %1%2')))
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
912 ui.write(('Author: %s\n' % cs.author))
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
913 ui.write(('Branch: %s\n' % (cs.branch or 'HEAD')))
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
914 ui.write(('Tag%s: %s \n' % (['', 's'][len(cs.tags) > 1],
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
915 ','.join(cs.tags) or '(none)')))
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
916 if cs.branchpoints:
18375
cfbd33020066 convert: report cvsps branchpoints sorted
Mads Kiilerich <mads@kiilerich.com>
parents: 18286
diff changeset
917 ui.write(('Branchpoints: %s \n') %
cfbd33020066 convert: report cvsps branchpoints sorted
Mads Kiilerich <mads@kiilerich.com>
parents: 18286
diff changeset
918 ', '.join(sorted(cs.branchpoints)))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
919 if opts["parents"] and cs.parents:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
920 if len(cs.parents) > 1:
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
921 ui.write(('Parents: %s\n' %
37658
34758397ad1b py3: use b"%d" instead of str() to convert integers to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 37458
diff changeset
922 (','.join([(b"%d" % p.id) for p in cs.parents]))))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
923 else:
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
924 ui.write(('Parent: %d\n' % cs.parents[0].id))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
925
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
926 if opts["ancestors"]:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
927 b = cs.branch
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
928 r = []
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
929 while b:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
930 b, c = ancestors[b]
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
931 r.append('%s:%d:%d' % (b or "HEAD", c, branches[b]))
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
932 if r:
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
933 ui.write(('Ancestors: %s\n' % (','.join(r))))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
934
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
935 ui.write(('Log:\n'))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
936 ui.write('%s\n\n' % cs.comment)
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
937 ui.write(('Members: \n'))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
938 for f in cs.entries:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
939 fn = f.file
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
940 if fn.startswith(opts["prefix"]):
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
941 fn = fn[len(opts["prefix"]):]
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
942 ui.write('\t%s:%s->%s%s \n' % (
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
943 fn, '.'.join([str(x) for x in f.parent]) or 'INITIAL',
37658
34758397ad1b py3: use b"%d" instead of str() to convert integers to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 37458
diff changeset
944 '.'.join([(b"%d" % x) for x in f.revision]),
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
945 ['', '(DEAD)'][f.dead]))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
946 ui.write('\n')
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
947
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
948 # have we seen the start tag?
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
949 if revisions and off:
37658
34758397ad1b py3: use b"%d" instead of str() to convert integers to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 37458
diff changeset
950 if revisions[0] == (b"%d" % cs.id) or \
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
951 revisions[0] in cs.tags:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
952 off = False
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
953
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
954 # see if we reached the end tag
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
955 if len(revisions) > 1 and not off:
37658
34758397ad1b py3: use b"%d" instead of str() to convert integers to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 37458
diff changeset
956 if revisions[1] == (b"%d" % cs.id) or \
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
957 revisions[1] in cs.tags:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
958 break