1 # (Be in -*- python -*- mode.)
3 # ====================================================================
4 # Copyright (c) 2000-2009 CollabNet. All rights reserved.
6 # This software is licensed as described in the file COPYING, which
7 # you should have received as part of this distribution. The terms
8 # are also available at http://subversion.tigris.org/license-1.html.
9 # If newer versions of this license are posted there, you may use a
10 # newer version instead, at your option.
12 # This software consists of voluntary contributions made by many
13 # individuals. For exact contribution history, see the revision
14 # history and logs, available at http://cvs2svn.tigris.org/.
15 # ====================================================================
17 """This module manages cvs2bzr run options."""
24 from cvs2svn_lib
.version
import VERSION
25 from cvs2svn_lib
.common
import FatalError
26 from cvs2svn_lib
.context
import Ctx
27 from cvs2svn_lib
.run_options
import not_both
28 from cvs2svn_lib
.run_options
import RunOptions
29 from cvs2svn_lib
.run_options
import ContextOption
30 from cvs2svn_lib
.run_options
import IncompatibleOption
31 from cvs2svn_lib
.run_options
import authors
32 from cvs2svn_lib
.man_writer
import ManWriter
33 from cvs2svn_lib
.rcs_revision_manager
import RCSRevisionReader
34 from cvs2svn_lib
.cvs_revision_manager
import CVSRevisionReader
35 from cvs2svn_lib
.git_run_options
import GitRunOptions
36 from cvs2svn_lib
.git_output_option
import GitRevisionInlineWriter
37 from cvs2svn_lib
.git_output_option
import GitOutputOption
38 from cvs2svn_lib
.revision_manager
import NullRevisionRecorder
39 from cvs2svn_lib
.revision_manager
import NullRevisionExcluder
42 short_desc
= 'convert a cvs repository into a Bazaar repository'
46 [\\fIOPTION\\fR]... \\fIOUTPUT-OPTIONS CVS-REPOS-PATH\\fR
49 [\\fIOPTION\\fR]... \\fI--options=PATH\\fR
53 Convert a CVS repository into a Bazaar repository, including history.
57 Create a new Bazaar repository based on the version history stored in a
58 CVS repository. Each CVS commit will be mirrored in the Bazaar
59 repository, including such information as date of commit and id of the
62 The output of this program is a "fast-import dumpfile", which
63 can be loaded into a Bazaar repository using the Bazaar FastImport
64 Plugin, available from https://launchpad.net/bzr-fastimport.
67 \\fICVS-REPOS-PATH\\fR is the filesystem path of the part of the CVS
68 repository that you want to convert. This path doesn't have to be the
69 top level directory of a CVS repository; it can point at a project
70 within a repository, in which case only that project will be
71 converted. This path or one of its parent directories has to contain
72 a subdirectory called CVSROOT (though the CVSROOT directory can be
75 It is not possible directly to convert a CVS repository to which you
76 only have remote access, but the FAQ describes tools that may be used
77 to create a local copy of a remote CVS repository.
81 A directory called \\fIcvs2svn-tmp\\fR (or the directory specified by
82 \\fB--tmpdir\\fR) is used as scratch space for temporary data files.
91 class BzrRunOptions(GitRunOptions
):
93 def get_description(self
):
96 def _get_output_options_group(self
):
97 group
= RunOptions
._get
_output
_options
_group
(self
)
99 group
.add_option(IncompatibleOption(
100 '--dumpfile', type='string',
102 help='path to which the data should be written',
104 'Write the blobs and revision data to \\fIpath\\fR.'
108 group
.add_option(ContextOption(
112 'do not create any output; just print what would happen.'
115 'Do not create any output; just print what would happen.'
121 def callback_manpage(self
, option
, opt_str
, value
, parser
):
122 f
= codecs
.getwriter('utf_8')(sys
.stdout
)
126 date
=datetime
.date
.today(),
127 source
='Version %s' % (VERSION
,),
128 manual
='User Commands',
129 short_desc
=short_desc
,
138 def process_io_options(self
):
139 """Process input/output options.
141 Process options related to extracting data from the CVS repository
142 and writing to a Bazaar-friendly fast-import file."""
145 options
= self
.options
147 not_both(options
.use_rcs
, '--use-rcs',
148 options
.use_cvs
, '--use-cvs')
151 revision_reader
= RCSRevisionReader(
152 co_executable
=options
.co_executable
155 # --use-cvs is the default:
156 revision_reader
= CVSRevisionReader(
157 cvs_executable
=options
.cvs_executable
160 if not ctx
.dry_run
and not options
.dumpfile
:
161 raise FatalError("must pass '--dry-run' or '--dumpfile' option.")
163 ctx
.revision_recorder
= NullRevisionRecorder()
164 ctx
.revision_excluder
= NullRevisionExcluder()
165 ctx
.revision_reader
= None
167 ctx
.output_option
= GitOutputOption(
169 GitRevisionInlineWriter(revision_reader
),
171 # Optional map from CVS author names to bzr author names:
172 author_transforms
={}, # FIXME