##// END OF EJS Templates
convert: word-wrap help texts at 70 characters
Martin Geisler -
r7989:468ab227 default
parent child Browse files
Show More
@@ -1,251 +1,258
1 # convert.py Foreign SCM converter
1 # convert.py Foreign SCM converter
2 #
2 #
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms
5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference.
6 # of the GNU General Public License, incorporated herein by reference.
7 '''converting foreign VCS repositories to Mercurial'''
7 '''converting foreign VCS repositories to Mercurial'''
8
8
9 import convcmd
9 import convcmd
10 import cvsps
10 import cvsps
11 import subversion
11 import subversion
12 from mercurial import commands
12 from mercurial import commands
13 from mercurial.i18n import _
13 from mercurial.i18n import _
14
14
15 # Commands definition was moved elsewhere to ease demandload job.
15 # Commands definition was moved elsewhere to ease demandload job.
16
16
17 def convert(ui, src, dest=None, revmapfile=None, **opts):
17 def convert(ui, src, dest=None, revmapfile=None, **opts):
18 """convert a foreign SCM repository to a Mercurial one.
18 """convert a foreign SCM repository to a Mercurial one.
19
19
20 Accepted source formats [identifiers]:
20 Accepted source formats [identifiers]:
21 - Mercurial [hg]
21 - Mercurial [hg]
22 - CVS [cvs]
22 - CVS [cvs]
23 - Darcs [darcs]
23 - Darcs [darcs]
24 - git [git]
24 - git [git]
25 - Subversion [svn]
25 - Subversion [svn]
26 - Monotone [mtn]
26 - Monotone [mtn]
27 - GNU Arch [gnuarch]
27 - GNU Arch [gnuarch]
28 - Bazaar [bzr]
28 - Bazaar [bzr]
29 - Perforce [p4]
29 - Perforce [p4]
30
30
31 Accepted destination formats [identifiers]:
31 Accepted destination formats [identifiers]:
32 - Mercurial [hg]
32 - Mercurial [hg]
33 - Subversion [svn] (history on branches is not preserved)
33 - Subversion [svn] (history on branches is not preserved)
34
34
35 If no revision is given, all revisions will be converted. Otherwise,
35 If no revision is given, all revisions will be converted.
36 convert will only import up to the named revision (given in a format
36 Otherwise, convert will only import up to the named revision
37 understood by the source).
37 (given in a format understood by the source).
38
38
39 If no destination directory name is specified, it defaults to the
39 If no destination directory name is specified, it defaults to the
40 basename of the source with '-hg' appended. If the destination
40 basename of the source with '-hg' appended. If the destination
41 repository doesn't exist, it will be created.
41 repository doesn't exist, it will be created.
42
42
43 If <REVMAP> isn't given, it will be put in a default location
43 If <REVMAP> isn't given, it will be put in a default location
44 (<dest>/.hg/shamap by default). The <REVMAP> is a simple text
44 (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file
45 file that maps each source commit ID to the destination ID for
45 that maps each source commit ID to the destination ID for that
46 that revision, like so:
46 revision, like so:
47 <source ID> <destination ID>
47 <source ID> <destination ID>
48
48
49 If the file doesn't exist, it's automatically created. It's updated
49 If the file doesn't exist, it's automatically created. It's
50 on each commit copied, so convert-repo can be interrupted and can
50 updated on each commit copied, so convert-repo can be interrupted
51 be run repeatedly to copy new commits.
51 and can be run repeatedly to copy new commits.
52
52
53 The [username mapping] file is a simple text file that maps each source
53 The [username mapping] file is a simple text file that maps each
54 commit author to a destination commit author. It is handy for source SCMs
54 source commit author to a destination commit author. It is handy
55 that use unix logins to identify authors (eg: CVS). One line per author
55 for source SCMs that use unix logins to identify authors (eg:
56 mapping and the line format is:
56 CVS). One line per author mapping and the line format is:
57 srcauthor=whatever string you want
57 srcauthor=whatever string you want
58
58
59 The filemap is a file that allows filtering and remapping of files
59 The filemap is a file that allows filtering and remapping of files
60 and directories. Comment lines start with '#'. Each line can
60 and directories. Comment lines start with '#'. Each line can
61 contain one of the following directives:
61 contain one of the following directives:
62
62
63 include path/to/file
63 include path/to/file
64
64
65 exclude path/to/file
65 exclude path/to/file
66
66
67 rename from/file to/file
67 rename from/file to/file
68
68
69 The 'include' directive causes a file, or all files under a
69 The 'include' directive causes a file, or all files under a
70 directory, to be included in the destination repository, and the
70 directory, to be included in the destination repository, and the
71 exclusion of all other files and dirs not explicitely included.
71 exclusion of all other files and dirs not explicitely included.
72 The 'exclude' directive causes files or directories to be omitted.
72 The 'exclude' directive causes files or directories to be omitted.
73 The 'rename' directive renames a file or directory. To rename from a
73 The 'rename' directive renames a file or directory. To rename from
74 subdirectory into the root of the repository, use '.' as the path to
74 a subdirectory into the root of the repository, use '.' as the
75 rename to.
75 path to rename to.
76
76
77 The splicemap is a file that allows insertion of synthetic
77 The splicemap is a file that allows insertion of synthetic
78 history, letting you specify the parents of a revision. This is
78 history, letting you specify the parents of a revision. This is
79 useful if you want to e.g. give a Subversion merge two parents, or
79 useful if you want to e.g. give a Subversion merge two parents, or
80 graft two disconnected series of history together. Each entry
80 graft two disconnected series of history together. Each entry
81 contains a key, followed by a space, followed by one or two
81 contains a key, followed by a space, followed by one or two
82 comma-separated values. The key is the revision ID in the
82 comma-separated values. The key is the revision ID in the source
83 source revision control system whose parents should be modified
83 revision control system whose parents should be modified (same
84 (same format as a key in .hg/shamap). The values are the revision
84 format as a key in .hg/shamap). The values are the revision IDs
85 IDs (in either the source or destination revision control system)
85 (in either the source or destination revision control system) that
86 that should be used as the new parents for that node.
86 should be used as the new parents for that node.
87
87
88 Mercurial Source
88 Mercurial Source
89 -----------------
89 -----------------
90
90
91 --config convert.hg.ignoreerrors=False (boolean)
91 --config convert.hg.ignoreerrors=False (boolean)
92 ignore integrity errors when reading. Use it to fix Mercurial
92 ignore integrity errors when reading. Use it to fix Mercurial
93 repositories with missing revlogs, by converting from and to
93 repositories with missing revlogs, by converting from and to
94 Mercurial.
94 Mercurial.
95 --config convert.hg.saverev=False (boolean)
95 --config convert.hg.saverev=False (boolean)
96 store original revision ID in changeset (forces target IDs to change)
96 store original revision ID in changeset (forces target IDs to
97 change)
97 --config convert.hg.startrev=0 (hg revision identifier)
98 --config convert.hg.startrev=0 (hg revision identifier)
98 convert start revision and its descendants
99 convert start revision and its descendants
99
100
100 CVS Source
101 CVS Source
101 ----------
102 ----------
102
103
103 CVS source will use a sandbox (i.e. a checked-out copy) from CVS
104 CVS source will use a sandbox (i.e. a checked-out copy) from CVS
104 to indicate the starting point of what will be converted. Direct
105 to indicate the starting point of what will be converted. Direct
105 access to the repository files is not needed, unless of course
106 access to the repository files is not needed, unless of course the
106 the repository is :local:. The conversion uses the top level
107 repository is :local:. The conversion uses the top level directory
107 directory in the sandbox to find the CVS repository, and then uses
108 in the sandbox to find the CVS repository, and then uses CVS rlog
108 CVS rlog commands to find files to convert. This means that unless
109 commands to find files to convert. This means that unless a
109 a filemap is given, all files under the starting directory will be
110 filemap is given, all files under the starting directory will be
110 converted, and that any directory reorganisation in the CVS
111 converted, and that any directory reorganisation in the CVS
111 sandbox is ignored.
112 sandbox is ignored.
112
113
113 Because CVS does not have changesets, it is necessary to collect
114 Because CVS does not have changesets, it is necessary to collect
114 individual commits to CVS and merge them into changesets. CVS
115 individual commits to CVS and merge them into changesets. CVS
115 source uses its internal changeset merging code by default but can
116 source uses its internal changeset merging code by default but can
116 be configured to call the external 'cvsps' program by setting:
117 be configured to call the external 'cvsps' program by setting:
117 --config convert.cvsps='cvsps -A -u --cvs-direct -q'
118 --config convert.cvsps='cvsps -A -u --cvs-direct -q'
118 This is a legacy option and may be removed in future.
119 This is a legacy option and may be removed in future.
119
120
120 The options shown are the defaults.
121 The options shown are the defaults.
121
122
122 Internal cvsps is selected by setting
123 Internal cvsps is selected by setting
123 --config convert.cvsps=builtin
124 --config convert.cvsps=builtin
124 and has a few more configurable options:
125 and has a few more configurable options:
125 --config convert.cvsps.fuzz=60 (integer)
126 --config convert.cvsps.fuzz=60 (integer)
126 Specify the maximum time (in seconds) that is allowed between
127 Specify the maximum time (in seconds) that is allowed
127 commits with identical user and log message in a single
128 between commits with identical user and log message in a
128 changeset. When very large files were checked in as part
129 single changeset. When very large files were checked in as
129 of a changeset then the default may not be long enough.
130 part of a changeset then the default may not be long
131 enough.
130 --config convert.cvsps.mergeto='{{mergetobranch ([-\w]+)}}'
132 --config convert.cvsps.mergeto='{{mergetobranch ([-\w]+)}}'
131 Specify a regular expression to which commit log messages are
133 Specify a regular expression to which commit log messages
132 matched. If a match occurs, then the conversion process will
134 are matched. If a match occurs, then the conversion
133 insert a dummy revision merging the branch on which this log
135 process will insert a dummy revision merging the branch on
134 message occurs to the branch indicated in the regex.
136 which this log message occurs to the branch indicated in
137 the regex.
135 --config convert.cvsps.mergefrom='{{mergefrombranch ([-\w]+)}}'
138 --config convert.cvsps.mergefrom='{{mergefrombranch ([-\w]+)}}'
136 Specify a regular expression to which commit log messages are
139 Specify a regular expression to which commit log messages
137 matched. If a match occurs, then the conversion process will
140 are matched. If a match occurs, then the conversion
138 add the most recent revision on the branch indicated in the
141 process will add the most recent revision on the branch
139 regex as the second parent of the changeset.
142 indicated in the regex as the second parent of the
143 changeset.
140
144
141 The hgext/convert/cvsps wrapper script allows the builtin changeset
145 The hgext/convert/cvsps wrapper script allows the builtin
142 merging code to be run without doing a conversion. Its parameters and
146 changeset merging code to be run without doing a conversion. Its
143 output are similar to that of cvsps 2.1.
147 parameters and output are similar to that of cvsps 2.1.
144
148
145 Subversion Source
149 Subversion Source
146 -----------------
150 -----------------
147
151
148 Subversion source detects classical trunk/branches/tags layouts.
152 Subversion source detects classical trunk/branches/tags layouts.
149 By default, the supplied "svn://repo/path/" source URL is
153 By default, the supplied "svn://repo/path/" source URL is
150 converted as a single branch. If "svn://repo/path/trunk" exists
154 converted as a single branch. If "svn://repo/path/trunk" exists it
151 it replaces the default branch. If "svn://repo/path/branches"
155 replaces the default branch. If "svn://repo/path/branches" exists,
152 exists, its subdirectories are listed as possible branches. If
156 its subdirectories are listed as possible branches. If
153 "svn://repo/path/tags" exists, it is looked for tags referencing
157 "svn://repo/path/tags" exists, it is looked for tags referencing
154 converted branches. Default "trunk", "branches" and "tags" values
158 converted branches. Default "trunk", "branches" and "tags" values
155 can be overriden with following options. Set them to paths
159 can be overriden with following options. Set them to paths
156 relative to the source URL, or leave them blank to disable
160 relative to the source URL, or leave them blank to disable
157 autodetection.
161 autodetection.
158
162
159 --config convert.svn.branches=branches (directory name)
163 --config convert.svn.branches=branches (directory name)
160 specify the directory containing branches
164 specify the directory containing branches
161 --config convert.svn.tags=tags (directory name)
165 --config convert.svn.tags=tags (directory name)
162 specify the directory containing tags
166 specify the directory containing tags
163 --config convert.svn.trunk=trunk (directory name)
167 --config convert.svn.trunk=trunk (directory name)
164 specify the name of the trunk branch
168 specify the name of the trunk branch
165
169
166 Source history can be retrieved starting at a specific revision,
170 Source history can be retrieved starting at a specific revision,
167 instead of being integrally converted. Only single branch
171 instead of being integrally converted. Only single branch
168 conversions are supported.
172 conversions are supported.
169
173
170 --config convert.svn.startrev=0 (svn revision number)
174 --config convert.svn.startrev=0 (svn revision number)
171 specify start Subversion revision.
175 specify start Subversion revision.
172
176
173 Perforce Source
177 Perforce Source
174 ---------------
178 ---------------
175
179
176 The Perforce (P4) importer can be given a p4 depot path or a client
180 The Perforce (P4) importer can be given a p4 depot path or a
177 specification as source. It will convert all files in the source to
181 client specification as source. It will convert all files in the
178 a flat Mercurial repository, ignoring labels, branches and integrations.
182 source to a flat Mercurial repository, ignoring labels, branches
179 Note that when a depot path is given you then usually should specify a
183 and integrations. Note that when a depot path is given you then
180 target directory, because otherwise the target may be named ...-hg.
184 usually should specify a target directory, because otherwise the
185 target may be named ...-hg.
181
186
182 It is possible to limit the amount of source history to be converted
187 It is possible to limit the amount of source history to be
183 by specifying an initial Perforce revision.
188 converted by specifying an initial Perforce revision.
184
189
185 --config convert.p4.startrev=0 (perforce changelist number)
190 --config convert.p4.startrev=0 (perforce changelist number)
186 specify initial Perforce revision.
191 specify initial Perforce revision.
187
192
188
193
189 Mercurial Destination
194 Mercurial Destination
190 ---------------------
195 ---------------------
191
196
192 --config convert.hg.clonebranches=False (boolean)
197 --config convert.hg.clonebranches=False (boolean)
193 dispatch source branches in separate clones.
198 dispatch source branches in separate clones.
194 --config convert.hg.tagsbranch=default (branch name)
199 --config convert.hg.tagsbranch=default (branch name)
195 tag revisions branch name
200 tag revisions branch name
196 --config convert.hg.usebranchnames=True (boolean)
201 --config convert.hg.usebranchnames=True (boolean)
197 preserve branch names
202 preserve branch names
198
203
199 """
204 """
200 return convcmd.convert(ui, src, dest, revmapfile, **opts)
205 return convcmd.convert(ui, src, dest, revmapfile, **opts)
201
206
202 def debugsvnlog(ui, **opts):
207 def debugsvnlog(ui, **opts):
203 return subversion.debugsvnlog(ui, **opts)
208 return subversion.debugsvnlog(ui, **opts)
204
209
205 def debugcvsps(ui, *args, **opts):
210 def debugcvsps(ui, *args, **opts):
206 '''create changeset information from CVS
211 '''create changeset information from CVS
207
212
208 This command is intended as a debugging tool for the CVS to Mercurial
213 This command is intended as a debugging tool for the CVS to
209 converter, and can be used as a direct replacement for cvsps.
214 Mercurial converter, and can be used as a direct replacement for
215 cvsps.
210
216
211 Hg debugcvsps reads the CVS rlog for current directory (or any named
217 Hg debugcvsps reads the CVS rlog for current directory (or any
212 directory) in the CVS repository, and converts the log to a series of
218 named directory) in the CVS repository, and converts the log to a
213 changesets based on matching commit log entries and dates.'''
219 series of changesets based on matching commit log entries and
220 dates.'''
214 return cvsps.debugcvsps(ui, *args, **opts)
221 return cvsps.debugcvsps(ui, *args, **opts)
215
222
216 commands.norepo += " convert debugsvnlog debugcvsps"
223 commands.norepo += " convert debugsvnlog debugcvsps"
217
224
218 cmdtable = {
225 cmdtable = {
219 "convert":
226 "convert":
220 (convert,
227 (convert,
221 [('A', 'authors', '', _('username mapping filename')),
228 [('A', 'authors', '', _('username mapping filename')),
222 ('d', 'dest-type', '', _('destination repository type')),
229 ('d', 'dest-type', '', _('destination repository type')),
223 ('', 'filemap', '', _('remap file names using contents of file')),
230 ('', 'filemap', '', _('remap file names using contents of file')),
224 ('r', 'rev', '', _('import up to target revision REV')),
231 ('r', 'rev', '', _('import up to target revision REV')),
225 ('s', 'source-type', '', _('source repository type')),
232 ('s', 'source-type', '', _('source repository type')),
226 ('', 'splicemap', '', _('splice synthesized history into place')),
233 ('', 'splicemap', '', _('splice synthesized history into place')),
227 ('', 'datesort', None, _('try to sort changesets by date'))],
234 ('', 'datesort', None, _('try to sort changesets by date'))],
228 _('hg convert [OPTION]... SOURCE [DEST [REVMAP]]')),
235 _('hg convert [OPTION]... SOURCE [DEST [REVMAP]]')),
229 "debugsvnlog":
236 "debugsvnlog":
230 (debugsvnlog,
237 (debugsvnlog,
231 [],
238 [],
232 'hg debugsvnlog'),
239 'hg debugsvnlog'),
233 "debugcvsps":
240 "debugcvsps":
234 (debugcvsps,
241 (debugcvsps,
235 [
242 [
236 # Main options shared with cvsps-2.1
243 # Main options shared with cvsps-2.1
237 ('b', 'branches', [], _('only return changes on specified branches')),
244 ('b', 'branches', [], _('only return changes on specified branches')),
238 ('p', 'prefix', '', _('prefix to remove from file names')),
245 ('p', 'prefix', '', _('prefix to remove from file names')),
239 ('r', 'revisions', [], _('only return changes after or between specified tags')),
246 ('r', 'revisions', [], _('only return changes after or between specified tags')),
240 ('u', 'update-cache', None, _("update cvs log cache")),
247 ('u', 'update-cache', None, _("update cvs log cache")),
241 ('x', 'new-cache', None, _("create new cvs log cache")),
248 ('x', 'new-cache', None, _("create new cvs log cache")),
242 ('z', 'fuzz', 60, _('set commit time fuzz in seconds')),
249 ('z', 'fuzz', 60, _('set commit time fuzz in seconds')),
243 ('', 'root', '', _('specify cvsroot')),
250 ('', 'root', '', _('specify cvsroot')),
244 # Options specific to builtin cvsps
251 # Options specific to builtin cvsps
245 ('', 'parents', '', _('show parent changesets')),
252 ('', 'parents', '', _('show parent changesets')),
246 ('', 'ancestors', '', _('show current changeset in ancestor branches')),
253 ('', 'ancestors', '', _('show current changeset in ancestor branches')),
247 # Options that are ignored for compatibility with cvsps-2.1
254 # Options that are ignored for compatibility with cvsps-2.1
248 ('A', 'cvs-direct', None, _('ignored for compatibility')),
255 ('A', 'cvs-direct', None, _('ignored for compatibility')),
249 ],
256 ],
250 _('hg debugcvsps [OPTION]... [PATH]...')),
257 _('hg debugcvsps [OPTION]... [PATH]...')),
251 }
258 }
@@ -1,241 +1,246
1 hg convert [OPTION]... SOURCE [DEST [REVMAP]]
1 hg convert [OPTION]... SOURCE [DEST [REVMAP]]
2
2
3 convert a foreign SCM repository to a Mercurial one.
3 convert a foreign SCM repository to a Mercurial one.
4
4
5 Accepted source formats [identifiers]:
5 Accepted source formats [identifiers]:
6 - Mercurial [hg]
6 - Mercurial [hg]
7 - CVS [cvs]
7 - CVS [cvs]
8 - Darcs [darcs]
8 - Darcs [darcs]
9 - git [git]
9 - git [git]
10 - Subversion [svn]
10 - Subversion [svn]
11 - Monotone [mtn]
11 - Monotone [mtn]
12 - GNU Arch [gnuarch]
12 - GNU Arch [gnuarch]
13 - Bazaar [bzr]
13 - Bazaar [bzr]
14 - Perforce [p4]
14 - Perforce [p4]
15
15
16 Accepted destination formats [identifiers]:
16 Accepted destination formats [identifiers]:
17 - Mercurial [hg]
17 - Mercurial [hg]
18 - Subversion [svn] (history on branches is not preserved)
18 - Subversion [svn] (history on branches is not preserved)
19
19
20 If no revision is given, all revisions will be converted. Otherwise,
20 If no revision is given, all revisions will be converted.
21 convert will only import up to the named revision (given in a format
21 Otherwise, convert will only import up to the named revision
22 understood by the source).
22 (given in a format understood by the source).
23
23
24 If no destination directory name is specified, it defaults to the
24 If no destination directory name is specified, it defaults to the
25 basename of the source with '-hg' appended. If the destination
25 basename of the source with '-hg' appended. If the destination
26 repository doesn't exist, it will be created.
26 repository doesn't exist, it will be created.
27
27
28 If <REVMAP> isn't given, it will be put in a default location
28 If <REVMAP> isn't given, it will be put in a default location
29 (<dest>/.hg/shamap by default). The <REVMAP> is a simple text
29 (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file
30 file that maps each source commit ID to the destination ID for
30 that maps each source commit ID to the destination ID for that
31 that revision, like so:
31 revision, like so:
32 <source ID> <destination ID>
32 <source ID> <destination ID>
33
33
34 If the file doesn't exist, it's automatically created. It's updated
34 If the file doesn't exist, it's automatically created. It's
35 on each commit copied, so convert-repo can be interrupted and can
35 updated on each commit copied, so convert-repo can be interrupted
36 be run repeatedly to copy new commits.
36 and can be run repeatedly to copy new commits.
37
37
38 The [username mapping] file is a simple text file that maps each source
38 The [username mapping] file is a simple text file that maps each
39 commit author to a destination commit author. It is handy for source SCMs
39 source commit author to a destination commit author. It is handy
40 that use unix logins to identify authors (eg: CVS). One line per author
40 for source SCMs that use unix logins to identify authors (eg:
41 mapping and the line format is:
41 CVS). One line per author mapping and the line format is:
42 srcauthor=whatever string you want
42 srcauthor=whatever string you want
43
43
44 The filemap is a file that allows filtering and remapping of files
44 The filemap is a file that allows filtering and remapping of files
45 and directories. Comment lines start with '#'. Each line can
45 and directories. Comment lines start with '#'. Each line can
46 contain one of the following directives:
46 contain one of the following directives:
47
47
48 include path/to/file
48 include path/to/file
49
49
50 exclude path/to/file
50 exclude path/to/file
51
51
52 rename from/file to/file
52 rename from/file to/file
53
53
54 The 'include' directive causes a file, or all files under a
54 The 'include' directive causes a file, or all files under a
55 directory, to be included in the destination repository, and the
55 directory, to be included in the destination repository, and the
56 exclusion of all other files and dirs not explicitely included.
56 exclusion of all other files and dirs not explicitely included.
57 The 'exclude' directive causes files or directories to be omitted.
57 The 'exclude' directive causes files or directories to be omitted.
58 The 'rename' directive renames a file or directory. To rename from a
58 The 'rename' directive renames a file or directory. To rename from
59 subdirectory into the root of the repository, use '.' as the path to
59 a subdirectory into the root of the repository, use '.' as the
60 rename to.
60 path to rename to.
61
61
62 The splicemap is a file that allows insertion of synthetic
62 The splicemap is a file that allows insertion of synthetic
63 history, letting you specify the parents of a revision. This is
63 history, letting you specify the parents of a revision. This is
64 useful if you want to e.g. give a Subversion merge two parents, or
64 useful if you want to e.g. give a Subversion merge two parents, or
65 graft two disconnected series of history together. Each entry
65 graft two disconnected series of history together. Each entry
66 contains a key, followed by a space, followed by one or two
66 contains a key, followed by a space, followed by one or two
67 comma-separated values. The key is the revision ID in the
67 comma-separated values. The key is the revision ID in the source
68 source revision control system whose parents should be modified
68 revision control system whose parents should be modified (same
69 (same format as a key in .hg/shamap). The values are the revision
69 format as a key in .hg/shamap). The values are the revision IDs
70 IDs (in either the source or destination revision control system)
70 (in either the source or destination revision control system) that
71 that should be used as the new parents for that node.
71 should be used as the new parents for that node.
72
72
73 Mercurial Source
73 Mercurial Source
74 -----------------
74 -----------------
75
75
76 --config convert.hg.ignoreerrors=False (boolean)
76 --config convert.hg.ignoreerrors=False (boolean)
77 ignore integrity errors when reading. Use it to fix Mercurial
77 ignore integrity errors when reading. Use it to fix Mercurial
78 repositories with missing revlogs, by converting from and to
78 repositories with missing revlogs, by converting from and to
79 Mercurial.
79 Mercurial.
80 --config convert.hg.saverev=False (boolean)
80 --config convert.hg.saverev=False (boolean)
81 store original revision ID in changeset (forces target IDs to change)
81 store original revision ID in changeset (forces target IDs to
82 change)
82 --config convert.hg.startrev=0 (hg revision identifier)
83 --config convert.hg.startrev=0 (hg revision identifier)
83 convert start revision and its descendants
84 convert start revision and its descendants
84
85
85 CVS Source
86 CVS Source
86 ----------
87 ----------
87
88
88 CVS source will use a sandbox (i.e. a checked-out copy) from CVS
89 CVS source will use a sandbox (i.e. a checked-out copy) from CVS
89 to indicate the starting point of what will be converted. Direct
90 to indicate the starting point of what will be converted. Direct
90 access to the repository files is not needed, unless of course
91 access to the repository files is not needed, unless of course the
91 the repository is :local:. The conversion uses the top level
92 repository is :local:. The conversion uses the top level directory
92 directory in the sandbox to find the CVS repository, and then uses
93 in the sandbox to find the CVS repository, and then uses CVS rlog
93 CVS rlog commands to find files to convert. This means that unless
94 commands to find files to convert. This means that unless a
94 a filemap is given, all files under the starting directory will be
95 filemap is given, all files under the starting directory will be
95 converted, and that any directory reorganisation in the CVS
96 converted, and that any directory reorganisation in the CVS
96 sandbox is ignored.
97 sandbox is ignored.
97
98
98 Because CVS does not have changesets, it is necessary to collect
99 Because CVS does not have changesets, it is necessary to collect
99 individual commits to CVS and merge them into changesets. CVS
100 individual commits to CVS and merge them into changesets. CVS
100 source uses its internal changeset merging code by default but can
101 source uses its internal changeset merging code by default but can
101 be configured to call the external 'cvsps' program by setting:
102 be configured to call the external 'cvsps' program by setting:
102 --config convert.cvsps='cvsps -A -u --cvs-direct -q'
103 --config convert.cvsps='cvsps -A -u --cvs-direct -q'
103 This is a legacy option and may be removed in future.
104 This is a legacy option and may be removed in future.
104
105
105 The options shown are the defaults.
106 The options shown are the defaults.
106
107
107 Internal cvsps is selected by setting
108 Internal cvsps is selected by setting
108 --config convert.cvsps=builtin
109 --config convert.cvsps=builtin
109 and has a few more configurable options:
110 and has a few more configurable options:
110 --config convert.cvsps.fuzz=60 (integer)
111 --config convert.cvsps.fuzz=60 (integer)
111 Specify the maximum time (in seconds) that is allowed between
112 Specify the maximum time (in seconds) that is allowed
112 commits with identical user and log message in a single
113 between commits with identical user and log message in a
113 changeset. When very large files were checked in as part
114 single changeset. When very large files were checked in as
114 of a changeset then the default may not be long enough.
115 part of a changeset then the default may not be long
116 enough.
115 --config convert.cvsps.mergeto='{{mergetobranch ([-\w]+)}}'
117 --config convert.cvsps.mergeto='{{mergetobranch ([-\w]+)}}'
116 Specify a regular expression to which commit log messages are
118 Specify a regular expression to which commit log messages
117 matched. If a match occurs, then the conversion process will
119 are matched. If a match occurs, then the conversion
118 insert a dummy revision merging the branch on which this log
120 process will insert a dummy revision merging the branch on
119 message occurs to the branch indicated in the regex.
121 which this log message occurs to the branch indicated in
122 the regex.
120 --config convert.cvsps.mergefrom='{{mergefrombranch ([-\w]+)}}'
123 --config convert.cvsps.mergefrom='{{mergefrombranch ([-\w]+)}}'
121 Specify a regular expression to which commit log messages are
124 Specify a regular expression to which commit log messages
122 matched. If a match occurs, then the conversion process will
125 are matched. If a match occurs, then the conversion
123 add the most recent revision on the branch indicated in the
126 process will add the most recent revision on the branch
124 regex as the second parent of the changeset.
127 indicated in the regex as the second parent of the
128 changeset.
125
129
126 The hgext/convert/cvsps wrapper script allows the builtin changeset
130 The hgext/convert/cvsps wrapper script allows the builtin
127 merging code to be run without doing a conversion. Its parameters and
131 changeset merging code to be run without doing a conversion. Its
128 output are similar to that of cvsps 2.1.
132 parameters and output are similar to that of cvsps 2.1.
129
133
130 Subversion Source
134 Subversion Source
131 -----------------
135 -----------------
132
136
133 Subversion source detects classical trunk/branches/tags layouts.
137 Subversion source detects classical trunk/branches/tags layouts.
134 By default, the supplied "svn://repo/path/" source URL is
138 By default, the supplied "svn://repo/path/" source URL is
135 converted as a single branch. If "svn://repo/path/trunk" exists
139 converted as a single branch. If "svn://repo/path/trunk" exists it
136 it replaces the default branch. If "svn://repo/path/branches"
140 replaces the default branch. If "svn://repo/path/branches" exists,
137 exists, its subdirectories are listed as possible branches. If
141 its subdirectories are listed as possible branches. If
138 "svn://repo/path/tags" exists, it is looked for tags referencing
142 "svn://repo/path/tags" exists, it is looked for tags referencing
139 converted branches. Default "trunk", "branches" and "tags" values
143 converted branches. Default "trunk", "branches" and "tags" values
140 can be overriden with following options. Set them to paths
144 can be overriden with following options. Set them to paths
141 relative to the source URL, or leave them blank to disable
145 relative to the source URL, or leave them blank to disable
142 autodetection.
146 autodetection.
143
147
144 --config convert.svn.branches=branches (directory name)
148 --config convert.svn.branches=branches (directory name)
145 specify the directory containing branches
149 specify the directory containing branches
146 --config convert.svn.tags=tags (directory name)
150 --config convert.svn.tags=tags (directory name)
147 specify the directory containing tags
151 specify the directory containing tags
148 --config convert.svn.trunk=trunk (directory name)
152 --config convert.svn.trunk=trunk (directory name)
149 specify the name of the trunk branch
153 specify the name of the trunk branch
150
154
151 Source history can be retrieved starting at a specific revision,
155 Source history can be retrieved starting at a specific revision,
152 instead of being integrally converted. Only single branch
156 instead of being integrally converted. Only single branch
153 conversions are supported.
157 conversions are supported.
154
158
155 --config convert.svn.startrev=0 (svn revision number)
159 --config convert.svn.startrev=0 (svn revision number)
156 specify start Subversion revision.
160 specify start Subversion revision.
157
161
158 Perforce Source
162 Perforce Source
159 ---------------
163 ---------------
160
164
161 The Perforce (P4) importer can be given a p4 depot path or a client
165 The Perforce (P4) importer can be given a p4 depot path or a
162 specification as source. It will convert all files in the source to
166 client specification as source. It will convert all files in the
163 a flat Mercurial repository, ignoring labels, branches and integrations.
167 source to a flat Mercurial repository, ignoring labels, branches
164 Note that when a depot path is given you then usually should specify a
168 and integrations. Note that when a depot path is given you then
165 target directory, because otherwise the target may be named ...-hg.
169 usually should specify a target directory, because otherwise the
170 target may be named ...-hg.
166
171
167 It is possible to limit the amount of source history to be converted
172 It is possible to limit the amount of source history to be
168 by specifying an initial Perforce revision.
173 converted by specifying an initial Perforce revision.
169
174
170 --config convert.p4.startrev=0 (perforce changelist number)
175 --config convert.p4.startrev=0 (perforce changelist number)
171 specify initial Perforce revision.
176 specify initial Perforce revision.
172
177
173
178
174 Mercurial Destination
179 Mercurial Destination
175 ---------------------
180 ---------------------
176
181
177 --config convert.hg.clonebranches=False (boolean)
182 --config convert.hg.clonebranches=False (boolean)
178 dispatch source branches in separate clones.
183 dispatch source branches in separate clones.
179 --config convert.hg.tagsbranch=default (branch name)
184 --config convert.hg.tagsbranch=default (branch name)
180 tag revisions branch name
185 tag revisions branch name
181 --config convert.hg.usebranchnames=True (boolean)
186 --config convert.hg.usebranchnames=True (boolean)
182 preserve branch names
187 preserve branch names
183
188
184 options:
189 options:
185
190
186 -A --authors username mapping filename
191 -A --authors username mapping filename
187 -d --dest-type destination repository type
192 -d --dest-type destination repository type
188 --filemap remap file names using contents of file
193 --filemap remap file names using contents of file
189 -r --rev import up to target revision REV
194 -r --rev import up to target revision REV
190 -s --source-type source repository type
195 -s --source-type source repository type
191 --splicemap splice synthesized history into place
196 --splicemap splice synthesized history into place
192 --datesort try to sort changesets by date
197 --datesort try to sort changesets by date
193
198
194 use "hg -v help convert" to show global options
199 use "hg -v help convert" to show global options
195 adding a
200 adding a
196 assuming destination a-hg
201 assuming destination a-hg
197 initializing destination a-hg repository
202 initializing destination a-hg repository
198 scanning source...
203 scanning source...
199 sorting...
204 sorting...
200 converting...
205 converting...
201 4 a
206 4 a
202 3 b
207 3 b
203 2 c
208 2 c
204 1 d
209 1 d
205 0 e
210 0 e
206 pulling from ../a
211 pulling from ../a
207 searching for changes
212 searching for changes
208 no changes found
213 no changes found
209 % should fail
214 % should fail
210 initializing destination bogusfile repository
215 initializing destination bogusfile repository
211 abort: cannot create new bundle repository
216 abort: cannot create new bundle repository
212 % should fail
217 % should fail
213 abort: Permission denied: bogusdir
218 abort: Permission denied: bogusdir
214 % should succeed
219 % should succeed
215 initializing destination bogusdir repository
220 initializing destination bogusdir repository
216 scanning source...
221 scanning source...
217 sorting...
222 sorting...
218 converting...
223 converting...
219 4 a
224 4 a
220 3 b
225 3 b
221 2 c
226 2 c
222 1 d
227 1 d
223 0 e
228 0 e
224 % test pre and post conversion actions
229 % test pre and post conversion actions
225 run hg source pre-conversion action
230 run hg source pre-conversion action
226 run hg sink pre-conversion action
231 run hg sink pre-conversion action
227 run hg sink post-conversion action
232 run hg sink post-conversion action
228 run hg source post-conversion action
233 run hg source post-conversion action
229 % converting empty dir should fail nicely
234 % converting empty dir should fail nicely
230 assuming destination emptydir-hg
235 assuming destination emptydir-hg
231 initializing destination emptydir-hg repository
236 initializing destination emptydir-hg repository
232 emptydir does not look like a CVS checkout
237 emptydir does not look like a CVS checkout
233 emptydir does not look like a Git repo
238 emptydir does not look like a Git repo
234 emptydir does not look like a Subversion repo
239 emptydir does not look like a Subversion repo
235 emptydir is not a local Mercurial repo
240 emptydir is not a local Mercurial repo
236 emptydir does not look like a darcs repo
241 emptydir does not look like a darcs repo
237 emptydir does not look like a monotone repo
242 emptydir does not look like a monotone repo
238 emptydir does not look like a GNU Arch repo
243 emptydir does not look like a GNU Arch repo
239 emptydir does not look like a Bazaar repo
244 emptydir does not look like a Bazaar repo
240 emptydir does not look like a P4 repo
245 emptydir does not look like a P4 repo
241 abort: emptydir: missing or unsupported repository
246 abort: emptydir: missing or unsupported repository
General Comments 0
You need to be logged in to leave comments. Login now