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