31 |
31 |
32 Accepted destination formats [identifiers]: |
32 Accepted destination formats [identifiers]: |
33 - Mercurial [hg] |
33 - Mercurial [hg] |
34 - Subversion [svn] (history on branches is not preserved) |
34 - Subversion [svn] (history on branches is not preserved) |
35 |
35 |
36 If no revision is given, all revisions will be converted. |
36 If no revision is given, all revisions will be converted. Otherwise, |
37 Otherwise, convert will only import up to the named revision |
37 convert will only import up to the named revision (given in a format |
38 (given in a format understood by the source). |
38 understood by the source). |
39 |
39 |
40 If no destination directory name is specified, it defaults to the |
40 If no destination directory name is specified, it defaults to the basename |
41 basename of the source with '-hg' appended. If the destination |
41 of the source with '-hg' appended. If the destination repository doesn't |
42 repository doesn't exist, it will be created. |
42 exist, it will be created. |
43 |
43 |
44 By default, all sources except Mercurial will use |
44 By default, all sources except Mercurial will use --branchsort. Mercurial |
45 --branchsort. Mercurial uses --sourcesort to preserve original |
45 uses --sourcesort to preserve original revision numbers order. Sort modes |
46 revision numbers order. Sort modes have the following effects: |
46 have the following effects: |
47 --branchsort: convert from parent to child revision when |
47 --branchsort: convert from parent to child revision when possible, which |
48 possible, which means branches are usually converted one after |
48 means branches are usually converted one after the other. It generates |
49 the other. It generates more compact repositories. |
49 more compact repositories. |
50 --datesort: sort revisions by date. Converted repositories have |
50 --datesort: sort revisions by date. Converted repositories have |
51 good-looking changelogs but are often an order of magnitude |
51 good-looking changelogs but are often an order of magnitude larger |
52 larger than the same ones generated by --branchsort. |
52 than the same ones generated by --branchsort. |
53 --sourcesort: try to preserve source revisions order, only |
53 --sourcesort: try to preserve source revisions order, only supported by |
54 supported by Mercurial sources. |
54 Mercurial sources. |
55 |
55 |
56 If <REVMAP> isn't given, it will be put in a default location |
56 If <REVMAP> isn't given, it will be put in a default location |
57 (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file |
57 (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file that |
58 that maps each source commit ID to the destination ID for that |
58 maps each source commit ID to the destination ID for that revision, like |
59 revision, like so: |
59 so: |
|
60 |
60 <source ID> <destination ID> |
61 <source ID> <destination ID> |
61 |
62 |
62 If the file doesn't exist, it's automatically created. It's |
63 If the file doesn't exist, it's automatically created. It's updated on |
63 updated on each commit copied, so convert-repo can be interrupted |
64 each commit copied, so convert-repo can be interrupted and can be run |
64 and can be run repeatedly to copy new commits. |
65 repeatedly to copy new commits. |
65 |
66 |
66 The [username mapping] file is a simple text file that maps each |
67 The [username mapping] file is a simple text file that maps each source |
67 source commit author to a destination commit author. It is handy |
68 commit author to a destination commit author. It is handy for source SCMs |
68 for source SCMs that use unix logins to identify authors (eg: |
69 that use unix logins to identify authors (eg: CVS). One line per author |
69 CVS). One line per author mapping and the line format is: |
70 mapping and the line format is: srcauthor=whatever string you want |
70 srcauthor=whatever string you want |
71 |
71 |
72 The filemap is a file that allows filtering and remapping of files and |
72 The filemap is a file that allows filtering and remapping of files |
73 directories. Comment lines start with '#'. Each line can contain one of |
73 and directories. Comment lines start with '#'. Each line can |
74 the following directives: |
74 contain one of the following directives: |
|
75 |
75 |
76 include path/to/file |
76 include path/to/file |
77 |
77 |
78 exclude path/to/file |
78 exclude path/to/file |
79 |
79 |
80 rename from/file to/file |
80 rename from/file to/file |
81 |
81 |
82 The 'include' directive causes a file, or all files under a |
82 The 'include' directive causes a file, or all files under a directory, to |
83 directory, to be included in the destination repository, and the |
83 be included in the destination repository, and the exclusion of all other |
84 exclusion of all other files and directories not explicitly included. |
84 files and directories not explicitly included. The 'exclude' directive |
85 The 'exclude' directive causes files or directories to be omitted. |
85 causes files or directories to be omitted. The 'rename' directive renames |
86 The 'rename' directive renames a file or directory. To rename from |
86 a file or directory. To rename from a subdirectory into the root of the |
87 a subdirectory into the root of the repository, use '.' as the |
87 repository, use '.' as the path to rename to. |
88 path to rename to. |
88 |
89 |
89 The splicemap is a file that allows insertion of synthetic history, |
90 The splicemap is a file that allows insertion of synthetic |
90 letting you specify the parents of a revision. This is useful if you want |
91 history, letting you specify the parents of a revision. This is |
91 to e.g. give a Subversion merge two parents, or graft two disconnected |
92 useful if you want to e.g. give a Subversion merge two parents, or |
92 series of history together. Each entry contains a key, followed by a |
93 graft two disconnected series of history together. Each entry |
93 space, followed by one or two comma-separated values. The key is the |
94 contains a key, followed by a space, followed by one or two |
94 revision ID in the source revision control system whose parents should be |
95 comma-separated values. The key is the revision ID in the source |
95 modified (same format as a key in .hg/shamap). The values are the revision |
96 revision control system whose parents should be modified (same |
96 IDs (in either the source or destination revision control system) that |
97 format as a key in .hg/shamap). The values are the revision IDs |
|
98 (in either the source or destination revision control system) that |
|
99 should be used as the new parents for that node. |
97 should be used as the new parents for that node. |
100 |
98 |
101 The branchmap is a file that allows you to rename a branch when it is |
99 The branchmap is a file that allows you to rename a branch when it is |
102 being brought in from whatever external repository. When used in |
100 being brought in from whatever external repository. When used in |
103 conjunction with a splicemap, it allows for a powerful combination |
101 conjunction with a splicemap, it allows for a powerful combination to help |
104 to help fix even the most badly mismanaged repositories and turn them |
102 fix even the most badly mismanaged repositories and turn them into nicely |
105 into nicely structured Mercurial repositories. The branchmap contains |
103 structured Mercurial repositories. The branchmap contains lines of the |
106 lines of the form "original_branch_name new_branch_name". |
104 form "original_branch_name new_branch_name". "original_branch_name" is the |
107 "original_branch_name" is the name of the branch in the source |
105 name of the branch in the source repository, and "new_branch_name" is the |
108 repository, and "new_branch_name" is the name of the branch is the |
106 name of the branch is the destination repository. This can be used to (for |
109 destination repository. This can be used to (for instance) move code |
107 instance) move code in one repository from "default" to a named branch. |
110 in one repository from "default" to a named branch. |
|
111 |
108 |
112 Mercurial Source |
109 Mercurial Source |
113 ----------------- |
110 ----------------- |
114 |
111 |
115 --config convert.hg.ignoreerrors=False (boolean) |
112 --config convert.hg.ignoreerrors=False (boolean) |
116 ignore integrity errors when reading. Use it to fix Mercurial |
113 ignore integrity errors when reading. Use it to fix Mercurial |
117 repositories with missing revlogs, by converting from and to |
114 repositories with missing revlogs, by converting from and to |
118 Mercurial. |
115 Mercurial. |
119 --config convert.hg.saverev=False (boolean) |
116 --config convert.hg.saverev=False (boolean) |
120 store original revision ID in changeset (forces target IDs to |
117 store original revision ID in changeset (forces target IDs to change) |
121 change) |
|
122 --config convert.hg.startrev=0 (hg revision identifier) |
118 --config convert.hg.startrev=0 (hg revision identifier) |
123 convert start revision and its descendants |
119 convert start revision and its descendants |
124 |
120 |
125 CVS Source |
121 CVS Source |
126 ---------- |
122 ---------- |
127 |
123 |
128 CVS source will use a sandbox (i.e. a checked-out copy) from CVS |
124 CVS source will use a sandbox (i.e. a checked-out copy) from CVS to |
129 to indicate the starting point of what will be converted. Direct |
125 indicate the starting point of what will be converted. Direct access to |
130 access to the repository files is not needed, unless of course the |
126 the repository files is not needed, unless of course the repository is |
131 repository is :local:. The conversion uses the top level directory |
127 :local:. The conversion uses the top level directory in the sandbox to |
132 in the sandbox to find the CVS repository, and then uses CVS rlog |
128 find the CVS repository, and then uses CVS rlog commands to find files to |
133 commands to find files to convert. This means that unless a |
129 convert. This means that unless a filemap is given, all files under the |
134 filemap is given, all files under the starting directory will be |
130 starting directory will be converted, and that any directory |
135 converted, and that any directory reorganization in the CVS |
131 reorganization in the CVS sandbox is ignored. |
136 sandbox is ignored. |
|
137 |
132 |
138 Because CVS does not have changesets, it is necessary to collect |
133 Because CVS does not have changesets, it is necessary to collect |
139 individual commits to CVS and merge them into changesets. CVS |
134 individual commits to CVS and merge them into changesets. CVS source uses |
140 source uses its internal changeset merging code by default but can |
135 its internal changeset merging code by default but can be configured to |
141 be configured to call the external 'cvsps' program by setting: |
136 call the external 'cvsps' program by setting: |
|
137 |
142 --config convert.cvsps='cvsps -A -u --cvs-direct -q' |
138 --config convert.cvsps='cvsps -A -u --cvs-direct -q' |
|
139 |
143 This option is deprecated and will be removed in Mercurial 1.4. |
140 This option is deprecated and will be removed in Mercurial 1.4. |
144 |
141 |
145 The options shown are the defaults. |
142 The options shown are the defaults. |
146 |
143 |
147 Internal cvsps is selected by setting |
144 Internal cvsps is selected by setting |
|
145 |
148 --config convert.cvsps=builtin |
146 --config convert.cvsps=builtin |
|
147 |
149 and has a few more configurable options: |
148 and has a few more configurable options: |
150 --config convert.cvsps.cache=True (boolean) |
149 --config convert.cvsps.cache=True (boolean) |
151 Set to False to disable remote log caching, for testing and |
150 Set to False to disable remote log caching, for testing and |
152 debugging purposes. |
151 debugging purposes. |
153 --config convert.cvsps.fuzz=60 (integer) |
152 --config convert.cvsps.fuzz=60 (integer) |
154 Specify the maximum time (in seconds) that is allowed |
153 Specify the maximum time (in seconds) that is allowed between |
155 between commits with identical user and log message in a |
154 commits with identical user and log message in a single changeset. |
156 single changeset. When very large files were checked in as |
155 When very large files were checked in as part of a changeset then |
157 part of a changeset then the default may not be long |
156 the default may not be long enough. |
158 enough. |
|
159 --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}' |
157 --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}' |
160 Specify a regular expression to which commit log messages |
158 Specify a regular expression to which commit log messages are |
161 are matched. If a match occurs, then the conversion |
159 matched. If a match occurs, then the conversion process will |
162 process will insert a dummy revision merging the branch on |
160 insert a dummy revision merging the branch on which this log |
163 which this log message occurs to the branch indicated in |
161 message occurs to the branch indicated in the regex. |
164 the regex. |
|
165 --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}' |
162 --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}' |
166 Specify a regular expression to which commit log messages |
163 Specify a regular expression to which commit log messages are |
167 are matched. If a match occurs, then the conversion |
164 matched. If a match occurs, then the conversion process will add |
168 process will add the most recent revision on the branch |
165 the most recent revision on the branch indicated in the regex as |
169 indicated in the regex as the second parent of the |
166 the second parent of the changeset. |
170 changeset. |
167 |
171 |
168 The hgext/convert/cvsps wrapper script allows the builtin changeset |
172 The hgext/convert/cvsps wrapper script allows the builtin |
169 merging code to be run without doing a conversion. Its parameters and |
173 changeset merging code to be run without doing a conversion. Its |
170 output are similar to that of cvsps 2.1. |
174 parameters and output are similar to that of cvsps 2.1. |
|
175 |
171 |
176 Subversion Source |
172 Subversion Source |
177 ----------------- |
173 ----------------- |
178 |
174 |
179 Subversion source detects classical trunk/branches/tags layouts. |
175 Subversion source detects classical trunk/branches/tags layouts. By |
180 By default, the supplied "svn://repo/path/" source URL is |
176 default, the supplied "svn://repo/path/" source URL is converted as a |
181 converted as a single branch. If "svn://repo/path/trunk" exists it |
177 single branch. If "svn://repo/path/trunk" exists it replaces the default |
182 replaces the default branch. If "svn://repo/path/branches" exists, |
178 branch. If "svn://repo/path/branches" exists, its subdirectories are |
183 its subdirectories are listed as possible branches. If |
179 listed as possible branches. If "svn://repo/path/tags" exists, it is |
184 "svn://repo/path/tags" exists, it is looked for tags referencing |
180 looked for tags referencing converted branches. Default "trunk", |
185 converted branches. Default "trunk", "branches" and "tags" values |
181 "branches" and "tags" values can be overridden with following options. Set |
186 can be overridden with following options. Set them to paths |
182 them to paths relative to the source URL, or leave them blank to disable |
187 relative to the source URL, or leave them blank to disable auto |
183 auto detection. |
188 detection. |
|
189 |
184 |
190 --config convert.svn.branches=branches (directory name) |
185 --config convert.svn.branches=branches (directory name) |
191 specify the directory containing branches |
186 specify the directory containing branches |
192 --config convert.svn.tags=tags (directory name) |
187 --config convert.svn.tags=tags (directory name) |
193 specify the directory containing tags |
188 specify the directory containing tags |
194 --config convert.svn.trunk=trunk (directory name) |
189 --config convert.svn.trunk=trunk (directory name) |
195 specify the name of the trunk branch |
190 specify the name of the trunk branch |
196 |
191 |
197 Source history can be retrieved starting at a specific revision, |
192 Source history can be retrieved starting at a specific revision, instead |
198 instead of being integrally converted. Only single branch |
193 of being integrally converted. Only single branch conversions are |
199 conversions are supported. |
194 supported. |
200 |
195 |
201 --config convert.svn.startrev=0 (svn revision number) |
196 --config convert.svn.startrev=0 (svn revision number) |
202 specify start Subversion revision. |
197 specify start Subversion revision. |
203 |
198 |
204 Perforce Source |
199 Perforce Source |
205 --------------- |
200 --------------- |
206 |
201 |
207 The Perforce (P4) importer can be given a p4 depot path or a |
202 The Perforce (P4) importer can be given a p4 depot path or a client |
208 client specification as source. It will convert all files in the |
203 specification as source. It will convert all files in the source to a flat |
209 source to a flat Mercurial repository, ignoring labels, branches |
204 Mercurial repository, ignoring labels, branches and integrations. Note |
210 and integrations. Note that when a depot path is given you then |
205 that when a depot path is given you then usually should specify a target |
211 usually should specify a target directory, because otherwise the |
206 directory, because otherwise the target may be named ...-hg. |
212 target may be named ...-hg. |
207 |
213 |
208 It is possible to limit the amount of source history to be converted by |
214 It is possible to limit the amount of source history to be |
209 specifying an initial Perforce revision. |
215 converted by specifying an initial Perforce revision. |
|
216 |
210 |
217 --config convert.p4.startrev=0 (perforce changelist number) |
211 --config convert.p4.startrev=0 (perforce changelist number) |
218 specify initial Perforce revision. |
212 specify initial Perforce revision. |
219 |
213 |
220 |
214 |