annotate hgext/convert/cvsps.py @ 25382:6084926366b9

summary: move the parents phase marker to commit line (issue4688) The phase of the pending commit depends on the parent of the working directory and on the phases.newcommit configuration. First, this information rather depend on the commit line which describe the pending commit. Then, we only want to be advertised when the pending phase is going to be higher than the default new commit phase. So the format will change from $ hg summary parent: 2:ab91dfabc5ad foo parent: 3:24f1031ad244 tip bar branch: default commit: 1 modified, 1 unknown, 1 unresolved (merge) update: (current) phases: 1 secret (secret) to parent: 2:ab91dfabc5ad foo parent: 3:24f1031ad244 tip bar branch: default commit: 1 modified, 1 unknown, 1 unresolved (merge) (secret) update: (current) phases: 1 secret
author Gilles Moris <gilles.moris@free.fr>
date Fri, 29 May 2015 22:23:58 +0200
parents 867c3649be5d
children 328739ea70c3
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.
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
7
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
8 import os
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
9 import re
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
10 import cPickle as pickle
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
11 from mercurial.i18n import _
10095
69ce7a10e593 convert: implement two hooks in builtin cvsps
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 9467
diff changeset
12 from mercurial import hook
14945
11aad09a6370 hgext: replace uses of hasattr with util.safehasattr
Augie Fackler <durin42@gmail.com>
parents: 11122
diff changeset
13 from mercurial import util
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
14
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
15 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
16 '''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
17 .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
18 .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
19 .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
20 .comment - commit message
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
21 .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
22 .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
23 .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
24 .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
25 .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
26 .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
27 .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
28 .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
29 .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
30 .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
31 .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
32 rlog output) or None
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
33 .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
34 '''
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
35 def __init__(self, **entries):
10701
35893dcfd40c cvsps: fix traceback involving 'synthetic'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10695
diff changeset
36 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
37 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
38
8080
19229b0b292d cvsps: make debugging easier by adding __repr__() methods.
Greg Ward <greg-hg@gerg.ca>
parents: 8079
diff changeset
39 def __repr__(self):
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
40 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
41 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
42
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
43 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
44 pass
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
45
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
46 def getrepopath(cvspath):
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
47 """Return the repository path from a CVS path.
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
48
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
49 >>> getrepopath('/foo/bar')
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
50 '/foo/bar'
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
51 >>> getrepopath('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
52 '/foo/bar'
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
53 >>> getrepopath(':pserver:10/foo/bar')
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
54 '/foo/bar'
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
55 >>> getrepopath(':pserver:10c:/foo/bar')
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
56 '/foo/bar'
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
57 >>> getrepopath(':pserver:/foo/bar')
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
58 '/foo/bar'
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
59 >>> getrepopath(':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
60 '/foo/bar'
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
61 >>> getrepopath(':pserver:truc@foo.bar:/foo/bar')
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
62 '/foo/bar'
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
63 >>> getrepopath(':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
64 '/foo/bar'
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
65 >>> getrepopath('user@server/path/to/repository')
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
66 '/path/to/repository'
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
67 """
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
68 # 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
69 # [:method:][[user][:password]@]hostname[:[port]]/path/to/repository
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
70 #
19145
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
71 # 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
72 # 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
73 # 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
74
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
75 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
76 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
77 start = 0
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
78
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
79 if atposition != -1:
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
80 start = atposition
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
81
0a12e5f3a979 convert: fix bug of wrong CVS path parsing without port number (issue3678)
Blesso hrvoje1212@gmail.com
parents: 18718
diff changeset
82 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
83 return repopath
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
84
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
85 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
86 '''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
87
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
88 # 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
89 # 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
90 _scache = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
91 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
92 "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
93 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
94
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
95 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
96
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
97 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
98
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
99 # patterns to match in CVS (r)log output, by state of use
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
100 re_00 = re.compile('RCS file: (.+)$')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
101 re_01 = re.compile('cvs \\[r?log aborted\\]: (.+)$')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
102 re_02 = re.compile('cvs (r?log|server): (.+)\n$')
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
103 re_03 = re.compile("(Cannot access.+CVSROOT)|"
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
104 "(can't create temporary directory.+)$")
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
105 re_10 = re.compile('Working file: (.+)$')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
106 re_20 = re.compile('symbolic names:')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
107 re_30 = re.compile('\t(.+): ([\\d.]+)$')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
108 re_31 = re.compile('----------------------------$')
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
109 re_32 = re.compile('======================================='
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
110 '======================================$')
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
111 re_50 = re.compile('revision ([\\d.]+)(\s+locked by:\s+.+;)?$')
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
112 re_60 = re.compile(r'date:\s+(.+);\s+author:\s+(.+);\s+state:\s+(.+?);'
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
113 r'(\s+lines:\s+(\+\d+)?\s+(-\d+)?;)?'
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
114 r'(\s+commitid:\s+([^;]+);)?'
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
115 r'(.*mergepoint:\s+([^;]+);)?')
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
116 re_70 = re.compile('branches: (.+);$')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
117
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
118 file_added_re = re.compile(r'file [^/]+ was (initially )?added on branch')
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
119
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
120 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
121
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
122 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
123 # 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
124
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
125 # 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
126 try:
9031
3b76321aa0de compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents: 8890
diff changeset
127 prefix = open(os.path.join('CVS','Repository')).read().strip()
10695
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
128 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
129 if prefix == ".":
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
130 prefix = ""
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
131 except IOError:
10939
9f6731b03906 convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents: 10701
diff changeset
132 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
133
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
134 if prefix and not prefix.endswith(os.sep):
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
135 prefix += os.sep
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
136
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
137 # 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
138 try:
9031
3b76321aa0de compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents: 8890
diff changeset
139 root = open(os.path.join('CVS','Root')).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
140 except IOError:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
141 pass
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
142
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
143 if not root:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
144 root = os.environ.get('CVSROOT', '')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
145
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
146 # 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
147 oldlog = []
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
148 date = None
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 if cache:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
151 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
152 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
153 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
154
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
155 # 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
156 # 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
157 # 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
158 # alphanumeric characters, concatenated in a way that does not
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 16688
diff changeset
159 # 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
160 # :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
161 # and
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
162 # /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
163 # are mapped to different cache file names.
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
164 cachefile = root.split(":") + [directory, "cache"]
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
165 cachefile = ['-'.join(re.findall(r'\w+', s)) for s in cachefile if s]
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
166 cachefile = os.path.join(cachedir,
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
167 '.'.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
168
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
169 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
170 try:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
171 ui.note(_('reading cvs log cache %s\n') % cachefile)
9031
3b76321aa0de compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents: 8890
diff changeset
172 oldlog = pickle.load(open(cachefile))
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
173 for e in oldlog:
18286
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
174 if not (util.safehasattr(e, 'branchpoints') and
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
175 util.safehasattr(e, 'commitid') and
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
176 util.safehasattr(e, 'mergepoint')):
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
177 ui.status(_('ignoring old cache\n'))
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
178 oldlog = []
762f12b8ebae cvsps: fix indentation
Idan Kamara <idankk86@gmail.com>
parents: 18265
diff changeset
179 break
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
180
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
181 ui.note(_('cache has %d log entries\n') % len(oldlog))
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
182 except Exception, e:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
183 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
184
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
185 if oldlog:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
186 date = oldlog[-1].date # last 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
187 date = util.datestr(date, '%Y/%m/%d %H:%M:%S %1%2')
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
188
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
189 # 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
190 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
191 if root:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
192 cmd.append('-d%s' % root)
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
193 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
194 if not p.endswith('/'):
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
195 p += '/'
10695
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
196 if prefix:
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
197 # looks like normpath replaces "" by "."
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
198 prefix = p + util.normpath(prefix)
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
199 else:
b4b16e90712f convert: teach cvsps to handle . repository (issue1649)
Mathieu Clabaut <mathieu.clabaut@systerel.fr>
parents: 10282
diff changeset
200 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
201 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
202 if date:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
203 # 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
204 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
205 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
206
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
207 # 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
208 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
209 branchmap = {} # mapping between branch names and revision numbers
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
210 state = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
211 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
212
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
213 cmd = [util.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
214 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
215 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
216
7593
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
217 pfp = util.popen(' '.join(cmd))
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
218 peek = pfp.readline()
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
219 while True:
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
220 line = peek
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
221 if line == '':
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
222 break
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
223 peek = 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
224 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
225 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
226 #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
227
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
228 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
229 # 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
230 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
231 if match:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
232 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
233 tags = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
234 if rlog:
7097
d4218edd55bd convert: fix builtin cvsps under Windows
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
235 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
236 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
237 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
238 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
239 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
240 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
241 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
242 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
243 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
244 state = 2
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
245 continue
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
246 state = 1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
247 continue
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
248 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
249 if match:
11122
2114e44b08f6 clean up remaining generic exceptions
Matt Mackall <mpm@selenic.com>
parents: 10950
diff changeset
250 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
251 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
252 if match:
11122
2114e44b08f6 clean up remaining generic exceptions
Matt Mackall <mpm@selenic.com>
parents: 10950
diff changeset
253 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
254 if re_03.match(line):
11122
2114e44b08f6 clean up remaining generic exceptions
Matt Mackall <mpm@selenic.com>
parents: 10950
diff changeset
255 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
256
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
257 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
258 # 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
259 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
260 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
261 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
262 state = 2
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
263
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
264 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
265 # 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
266 if re_20.match(line):
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
267 branchmap = {}
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
268 state = 3
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
269
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
270 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
271 # 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
272 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
273 if match:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
274 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
275
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
276 # 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
277 revn = len(rev)
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
278 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
279 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
280 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
281
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
282 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
283 tags[rev] = []
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
284 tags[rev].append(match.group(1))
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
285 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
286
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
287 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
288 state = 5
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
289 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
290 state = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
291
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
292 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
293 # 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
294 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
295 state = 5
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
296 else:
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
297 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
298 '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
299
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
300 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
301 # 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
302 # 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
303 # 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
304 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
305 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
306 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
307 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
308 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
309 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
310 branches=[],
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
311 parent=None,
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
312 commitid=None,
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
313 mergepoint=None,
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
314 branchpoints=set())
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
315
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
316 state = 6
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
317
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
318 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
319 # 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
320 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
321 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
322 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
323 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
324 # Y2K
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
325 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
326
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
327 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
328 # cvs log dates always in GMT
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
329 d = d + ' UTC'
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
330 e.date = util.parsedate(d, ['%y/%m/%d %H:%M:%S',
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
331 '%Y/%m/%d %H:%M:%S',
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
332 '%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
333 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
334 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
335
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
336 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
337 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
338 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
339 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
340 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
341 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
342 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
343 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
344 e.lines = None
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
345
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
346 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
347 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
348
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
349 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
350 myrev = match.group(10).split('.')
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
351 if len(myrev) == 2: # head
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
352 e.mergepoint = 'HEAD'
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
353 else:
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
354 myrev = '.'.join(myrev[:-2] + ['0', myrev[-2]])
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
355 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
356 assert len(branches) == 1, ('unknown branch: %s'
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 15790
diff changeset
357 % e.mergepoint)
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
358 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
359
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
360 e.comment = []
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
361 state = 7
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
362
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
363 elif state == 7:
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
364 # 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
365 # 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
366 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
367 if m:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
368 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
369 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
370 state = 8
7593
9811cc670c51 cvsps: cvs log loop uses lookahead to avoid misleading text
David Champion <dgc@uchicago.edu>
parents: 7573
diff changeset
371 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
372 state = 5
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
373 store = True
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
374 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
375 state = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
376 store = True
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
377 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
378 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
379
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
380 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
381 # 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
382 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
383 cpeek = peek
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
384 if cpeek.endswith('\n'):
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
385 cpeek = cpeek[:-1]
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
386 if re_50.match(cpeek):
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
387 state = 5
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
388 store = True
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
389 else:
4e5b7d130e76 convert: detect false cset boundaries in cvsps descriptions
jakob krainz <jakob@hawo-net.de>
parents: 14945
diff changeset
390 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
391 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
392 state = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
393 store = True
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
394 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
395 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
396
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
397 # 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
398 # 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
399 # 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
400 # 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
401 # 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
402 # 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
403 # 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
404 if (store and
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
405 e.dead and
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
406 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
407 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
408 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
409 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
410 % (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
411 e.synthetic = True
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
412
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
413 if store:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
414 # 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
415 store = False
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8171
diff changeset
416 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
417 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
418
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
419 revn = len(e.revision)
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
420 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
421 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
422 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
423 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
424
8756
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
425 # find the branches starting from this revision
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
426 branchpoints = set()
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
427 for branch, revision in branchmap.iteritems():
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
428 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
429 if len(revparts) < 2: # bad tags
278d45703ac2 cvs: skip bad tags
Brandon Parsons <parsonsb@rsn.hp.com>
parents: 10939
diff changeset
430 continue
8756
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
431 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
432 # normal branch
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
433 if revparts[:-2] == e.revision:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
434 branchpoints.add(branch)
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
435 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
436 if revparts in e.branches:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
437 branchpoints.add(branch)
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
438 e.branchpoints = branchpoints
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
439
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
440 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
441
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
442 if len(log) % 100 == 0:
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
443 ui.status(util.ellipsis('%d %s' % (len(log), e.file), 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
444
9032
1fa80c5428b8 compat: use 'key' argument instead of 'cmp' when sorting a list
Alejandro Santos <alejolp@alejolp.com>
parents: 9031
diff changeset
445 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
446
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
447 # 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
448 versions = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
449 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
450 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
451 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
452 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
453 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
454 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
455 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
456
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
457 # 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
458 if cache:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
459 if log:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
460 # 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
461 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
462
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
463 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
464 raise logerror(_('log cache overlaps with new log entries,'
9f6731b03906 convert: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents: 10701
diff changeset
465 ' 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
466
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
467 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
468
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
469 # 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
470 ui.note(_('writing cvs log cache %s\n') % cachefile)
9031
3b76321aa0de compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents: 8890
diff changeset
471 pickle.dump(log, open(cachefile, 'w'))
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
472 else:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
473 log = oldlog
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
474
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
475 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
476
10095
69ce7a10e593 convert: implement two hooks in builtin cvsps
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 9467
diff changeset
477 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
478
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
479 return log
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
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
482 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
483 '''Class changeset has the following attributes:
8079
fb162c47000b cvsps: update docstring for changeset class.
Greg Ward <greg-hg@gerg.ca>
parents: 8028
diff changeset
484 .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
485 .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
486 .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
487 .comment - commit message
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
488 .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
489 .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
490 .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
491 .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
492 .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
493 .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
494 .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
495 .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
496 '''
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
497 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
498 self.id = None
10701
35893dcfd40c cvsps: fix traceback involving 'synthetic'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10695
diff changeset
499 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
500 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
501
8080
19229b0b292d cvsps: make debugging easier by adding __repr__() methods.
Greg Ward <greg-hg@gerg.ca>
parents: 8079
diff changeset
502 def __repr__(self):
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
503 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
504 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
505
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
506 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
507 '''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
508
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
509 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
510
18718
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
511 # try to order commitids by date
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
512 mindate = {}
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
513 for e in log:
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
514 if e.commitid:
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
515 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
516
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
517 # Merge changesets
18718
c8c3887a24c1 convert: stabilize cvsps commitid sort order
Matt Mackall <mpm@selenic.com>
parents: 18375
diff changeset
518 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
519 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
520
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
521 changesets = []
8456
e9e2a2c9b294 convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8225
diff changeset
522 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
523 c = None
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
524 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
525
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
526 # 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
527
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 16688
diff changeset
528 # 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
529 # 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
530 # 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
531 # honoured by cvsps at this point).
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
532 #
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
533 # Consider the following case:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
534 # foo 1.1 branchpoints: [MYBRANCH]
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
535 # bar 1.1 branchpoints: [MYBRANCH, MYBRANCH2]
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
536 #
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
537 # 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
538 # 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
539 # 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
540 # 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
541 # 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
542 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
543 (# cvs commitids
246f290e162a convert: fix most test-check-code-hg violations in cvsps code
Bryan O'Sullivan <bos@serpentine.com>
parents: 18261
diff changeset
544 (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
545 (# 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
546 (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
547 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
548 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
549 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
550 ((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
551 (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
552 (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
553 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
554 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
555 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
556 entries=[], mergepoint=e.mergepoint,
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
557 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
558 changesets.append(c)
18261
1b7b5975793f cvsps: use commitids (when present) to detect changesets
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 17956
diff changeset
559
8456
e9e2a2c9b294 convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8225
diff changeset
560 files = set()
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
561 if len(changesets) % 100 == 0:
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
562 t = '%d %s' % (len(changesets), repr(e.comment)[1:-1])
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
563 ui.status(util.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
564
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
565 c.entries.append(e)
8456
e9e2a2c9b294 convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8225
diff changeset
566 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
567 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
568
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
569 # Mark synthetic changesets
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
570
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
571 for c in changesets:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
572 # 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
573 # 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
574 # 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
575 # changesets:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
576 # "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
577 # "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
578 # "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
579 # 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
580 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
581
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
582 # 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
583
15790
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
584 def entitycompare(l, r):
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
585 'Mimic cvsps sorting order'
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
586 l = l.file.split('/')
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
587 r = r.file.split('/')
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
588 nl = len(l)
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
589 nr = len(r)
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
590 n = min(nl, nr)
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
591 for i in range(n):
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
592 if i + 1 == nl and nl < nr:
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
593 return -1
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
594 elif i + 1 == nr and nl > nr:
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
595 return +1
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
596 elif l[i] < r[i]:
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
597 return -1
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
598 elif l[i] > r[i]:
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
599 return +1
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
600 return 0
52f816b40674 cvsps: pull function definition out of loop
Martin Geisler <mg@aragost.com>
parents: 15205
diff changeset
601
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
602 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
603 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
604
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
605 # 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
606
19505
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
607 odd = set()
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
608 def cscmp(l, r, odd=odd):
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
609 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
610 if d:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
611 return d
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
612
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
613 # 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
614 le = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
615 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
616 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
617 re = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
618 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
619 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
620
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
621 d = 0
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
622 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
623 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
624 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
625 d = 1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
626 break
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
627
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
628 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
629 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
630 if d:
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
631 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
632 d = -1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
633 break
22267
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
634 # 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
635 # 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
636 # 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
637 # 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
638 # 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
639 # 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
640
22267
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
641 # recommended replacement for cmp from
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
642 # 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
643 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
644 # Sort bigger changes first.
22267
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
645 if not d:
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
646 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
647 # 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
648 if not d:
867c3649be5d cvsps: use a different tiebreaker to avoid flaky test
Augie Fackler <raf@durin42.com>
parents: 22267
diff changeset
649 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
650 # 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
651 # a branch point.
22267
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
652 if not d:
90cf454edd70 cvsps: add two more tiebreakers in cscmp
Augie Fackler <raf@durin42.com>
parents: 22202
diff changeset
653 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
654 return d
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
655
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
656 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
657
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
658 # Collect tags
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
659
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
660 globaltags = {}
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
661 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
662 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
663 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
664 # 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
665 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
666
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
667 for c in changesets:
8456
e9e2a2c9b294 convert: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8225
diff changeset
668 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
669 for e in c.entries:
8483
221786b9ce34 convert/cvsps: use set.update for bulk update
Martin Geisler <mg@lazybytes.net>
parents: 8456
diff changeset
670 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
671 # 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
672 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
673
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
674 # 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
675 # 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
676 # {{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
677
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
678 if mergeto is None:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
679 mergeto = r'{{mergetobranch ([-\w]+)}}'
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
680 if mergeto:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
681 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
682
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
683 if mergefrom is None:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
684 mergefrom = r'{{mergefrombranch ([-\w]+)}}'
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
685 if mergefrom:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
686 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
687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
688 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
689 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
690 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
691 i = 0
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
692 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
693 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
694
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
695 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
696 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
697
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
698 p = None
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
699 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
700 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
701 else:
8756
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
702 # first changeset on a new branch
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
703 # 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
704 # 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
705 # commit without any intervening, unrelated commits.
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
706
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
707 for candidate in xrange(i):
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
708 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
709 if p is not None:
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
710 break
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
711 continue
6019e6517f95 convert: better support for CVS branchpoints (issue1447)
Henrik Stuart <hg@hstuart.dk>
parents: 8661
diff changeset
712 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
713
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
714 c.parents = []
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
715 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
716 p = changesets[p]
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
717
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
718 # 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
719 while p.synthetic:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
720 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
721 _('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
722 if p.parents:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
723 p = p.parents[0]
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
724 else:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
725 p = None
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
726 break
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
727
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
728 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
729 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
730
7956
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
731 if c.mergepoint:
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
732 if c.mergepoint == 'HEAD':
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
733 c.mergepoint = None
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
734 c.parents.append(changesets[branches[c.mergepoint]])
3e7611a83230 convert: added cvsnt mergepoint support
Henrik Stuart <henrik.stuart@edlund.dk>
parents: 7950
diff changeset
735
6687
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:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
737 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
738 if m:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
739 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
740 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
741 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
742 try:
4e5bd9b97bb3 cvsps: fix crash when log message refers to non-existent branch (issue1615).
Greg Ward <greg-hg@gerg.ca>
parents: 8080
diff changeset
743 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
744 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
745 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
746 "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
747 % (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
748 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
749 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
750
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
751 if mergeto:
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
752 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
753 if m:
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
754 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
755 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
756 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
757 m = None
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
758 else:
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
759 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
760 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
761 # insert empty changeset for merge
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
762 cc = changeset(
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
763 author=c.author, branch=m, date=c.date,
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
764 comment='convert-repo: CVS merge from branch %s'
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
765 % c.branch,
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
766 entries=[], tags=[],
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
767 parents=[changesets[branches[m]], c])
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
768 changesets.insert(i + 1, cc)
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
769 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
770
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
771 # 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
772 n += 1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
773 i += 2
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
774 continue
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
775
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
776 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
777 i += 1
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
778
7862
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
779 # 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
780 # 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
781 i = 0
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
782 while i < len(changesets):
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
783 if changesets[i].synthetic:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
784 del changesets[i]
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
785 else:
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
786 i += 1
02981000012e cvsps: recognize and eliminate CVS' synthetic "file added" revisions.
Greg Ward <greg-hg@gerg.ca>
parents: 7601
diff changeset
787
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
788 # Number changesets
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
789
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
790 for i, c in enumerate(changesets):
6688
5cd7a8433cd4 cvsps: fix up some whitespace
Matt Mackall <mpm@selenic.com>
parents: 6687
diff changeset
791 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
792
19505
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
793 if odd:
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
794 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
795 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
796 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
797 % (l.id, r.id))
7b815e38022a convert: handle changeset sorting errors without traceback (issue3961)
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 19145
diff changeset
798
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
799 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
800
10095
69ce7a10e593 convert: implement two hooks in builtin cvsps
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 9467
diff changeset
801 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
802
6687
f8ef39206f6a convert: cvsps.py - code to generate changesets from a CVS repository
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
diff changeset
803 return changesets
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
804
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
805
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
806 def debugcvsps(ui, *args, **opts):
8661
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
807 '''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
808 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
809 commit log entries and dates.
883f14fcd1df convert/cvsps: wrap long lines
Martin Geisler <mg@lazybytes.net>
parents: 8483
diff changeset
810 '''
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
811 if opts["new_cache"]:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
812 cache = "write"
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
813 elif opts["update_cache"]:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
814 cache = "update"
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
815 else:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
816 cache = None
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
817
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
818 revisions = opts["revisions"]
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
819
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
820 try:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
821 if args:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
822 log = []
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
823 for d in args:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
824 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
825 else:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
826 log = createlog(ui, root=opts["root"], cache=cache)
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
827 except logerror, e:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
828 ui.write("%r\n"%e)
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
829 return
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
830
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
831 changesets = createchangeset(ui, log, opts["fuzz"])
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
832 del log
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
833
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
834 # Print changesets (optionally filtered)
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
835
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
836 off = len(revisions)
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
837 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
838 ancestors = {} # parent branch
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
839 for cs in changesets:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
840
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
841 if opts["ancestors"]:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
842 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
843 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
844 cs.parents[0].id)
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
845 branches[cs.branch] = cs.id
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
846
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
847 # limit by branches
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
848 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
849 continue
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
850
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
851 if not off:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
852 # 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
853 # bug-for-bug compatibility with cvsps.
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
854 ui.write('---------------------\n')
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
855 ui.write(('PatchSet %d \n' % cs.id))
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
856 ui.write(('Date: %s\n' % util.datestr(cs.date,
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
857 '%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
858 ui.write(('Author: %s\n' % cs.author))
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
859 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
860 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
861 ','.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
862 if cs.branchpoints:
18375
cfbd33020066 convert: report cvsps branchpoints sorted
Mads Kiilerich <mads@kiilerich.com>
parents: 18286
diff changeset
863 ui.write(('Branchpoints: %s \n') %
cfbd33020066 convert: report cvsps branchpoints sorted
Mads Kiilerich <mads@kiilerich.com>
parents: 18286
diff changeset
864 ', '.join(sorted(cs.branchpoints)))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
865 if opts["parents"] and cs.parents:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
866 if len(cs.parents) > 1:
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
867 ui.write(('Parents: %s\n' %
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
868 (','.join([str(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
869 else:
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
870 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
871
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
872 if opts["ancestors"]:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
873 b = cs.branch
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
874 r = []
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
875 while b:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
876 b, c = ancestors[b]
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
877 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
878 if r:
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
879 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
880
17956
a08775ec89f2 i18n: wrap false positives for translation detection
Matt Mackall <mpm@selenic.com>
parents: 17424
diff changeset
881 ui.write(('Log:\n'))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
882 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
883 ui.write(('Members: \n'))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
884 for f in cs.entries:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
885 fn = f.file
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
886 if fn.startswith(opts["prefix"]):
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
887 fn = fn[len(opts["prefix"]):]
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
888 ui.write('\t%s:%s->%s%s \n' % (
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
889 fn, '.'.join([str(x) for x in f.parent]) or 'INITIAL',
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
890 '.'.join([str(x) for x in f.revision]),
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
891 ['', '(DEAD)'][f.dead]))
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
892 ui.write('\n')
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
893
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
894 # have we seen the start tag?
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
895 if revisions and off:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
896 if revisions[0] == str(cs.id) or \
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
897 revisions[0] in cs.tags:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
898 off = False
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
899
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
900 # see if we reached the end tag
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
901 if len(revisions) > 1 and not off:
7502
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
902 if revisions[1] == str(cs.id) or \
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
903 revisions[1] in cs.tags:
16905fc2690f Add debugcvsps command, replacing cvsps script
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7280
diff changeset
904 break