comparison hgext/convert/__init__.py @ 7989:468ab22785aa

convert: word-wrap help texts at 70 characters
author Martin Geisler <mg@daimi.au.dk>
date Sat, 04 Apr 2009 23:16:55 +0200
parents 7b813bdbd5d0
children 58ba4b86ae13
comparison
equal deleted inserted replaced
7988:0447939b4b97 7989:468ab22785aa
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:
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
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
140 143 changeset.
141 The hgext/convert/cvsps wrapper script allows the builtin changeset 144
142 merging code to be run without doing a conversion. Its parameters and 145 The hgext/convert/cvsps wrapper script allows the builtin
143 output are similar to that of cvsps 2.1. 146 changeset merging code to be run without doing a conversion. Its
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.
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
181 185 target may be named ...-hg.
182 It is possible to limit the amount of source history to be converted 186
183 by specifying an initial Perforce revision. 187 It is possible to limit the amount of source history to be
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
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
210 215 cvsps.
211 Hg debugcvsps reads the CVS rlog for current directory (or any named 216
212 directory) in the CVS repository, and converts the log to a series of 217 Hg debugcvsps reads the CVS rlog for current directory (or any
213 changesets based on matching commit log entries and dates.''' 218 named directory) in the CVS repository, and converts the log to a
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 = {