Reduce callback_manpage() duplication between SVNRunOptions and GitRunOptions.
[cvs2svn.git] / cvs2svn_lib / bzr_run_options.py
blob3d0473a88493db58240f515ddac9057b2d806232
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."""
20 import sys
21 import datetime
22 import codecs
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.man_writer import ManWriter
32 from cvs2svn_lib.rcs_revision_manager import RCSRevisionReader
33 from cvs2svn_lib.cvs_revision_manager import CVSRevisionReader
34 from cvs2svn_lib.git_run_options import GitRunOptions
35 from cvs2svn_lib.git_output_option import GitRevisionInlineWriter
36 from cvs2svn_lib.git_output_option import GitOutputOption
37 from cvs2svn_lib.revision_manager import NullRevisionRecorder
38 from cvs2svn_lib.revision_manager import NullRevisionExcluder
41 description="""\
42 Convert a CVS repository into a Bazaar repository, including history.
44 """
46 class BzrRunOptions(GitRunOptions):
48 short_desc = 'convert a cvs repository into a Bazaar repository'
50 synopsis = """\
51 .B cvs2bzr
52 [\\fIOPTION\\fR]... \\fIOUTPUT-OPTIONS CVS-REPOS-PATH\\fR
53 .br
54 .B cvs2bzr
55 [\\fIOPTION\\fR]... \\fI--options=PATH\\fR
56 """
58 long_desc = """\
59 Create a new Bazaar repository based on the version history stored in a
60 CVS repository. Each CVS commit will be mirrored in the Bazaar
61 repository, including such information as date of commit and id of the
62 committer.
64 The output of this program is a "fast-import dumpfile", which
65 can be loaded into a Bazaar repository using the Bazaar FastImport
66 Plugin, available from https://launchpad.net/bzr-fastimport.
69 \\fICVS-REPOS-PATH\\fR is the filesystem path of the part of the CVS
70 repository that you want to convert. This path doesn't have to be the
71 top level directory of a CVS repository; it can point at a project
72 within a repository, in which case only that project will be
73 converted. This path or one of its parent directories has to contain
74 a subdirectory called CVSROOT (though the CVSROOT directory can be
75 empty).
77 It is not possible directly to convert a CVS repository to which you
78 only have remote access, but the FAQ describes tools that may be used
79 to create a local copy of a remote CVS repository.
80 """
82 files = """\
83 A directory called \\fIcvs2svn-tmp\\fR (or the directory specified by
84 \\fB--tmpdir\\fR) is used as scratch space for temporary data files.
85 """
87 see_also = [
88 ('cvs', '1'),
89 ('bzr', '1'),
93 def get_description(self):
94 return description
96 def _get_output_options_group(self):
97 group = RunOptions._get_output_options_group(self)
99 group.add_option(IncompatibleOption(
100 '--dumpfile', type='string',
101 action='store',
102 help='path to which the data should be written',
103 man_help=(
104 'Write the blobs and revision data to \\fIpath\\fR.'
106 metavar='PATH',
108 group.add_option(ContextOption(
109 '--dry-run',
110 action='store_true',
111 help=(
112 'do not create any output; just print what would happen.'
114 man_help=(
115 'Do not create any output; just print what would happen.'
119 return group
121 def process_io_options(self):
122 """Process input/output options.
124 Process options related to extracting data from the CVS repository
125 and writing to a Bazaar-friendly fast-import file."""
127 ctx = Ctx()
128 options = self.options
130 not_both(options.use_rcs, '--use-rcs',
131 options.use_cvs, '--use-cvs')
133 if options.use_rcs:
134 revision_reader = RCSRevisionReader(
135 co_executable=options.co_executable
137 else:
138 # --use-cvs is the default:
139 revision_reader = CVSRevisionReader(
140 cvs_executable=options.cvs_executable
143 if not ctx.dry_run and not options.dumpfile:
144 raise FatalError("must pass '--dry-run' or '--dumpfile' option.")
146 ctx.revision_recorder = NullRevisionRecorder()
147 ctx.revision_excluder = NullRevisionExcluder()
148 ctx.revision_reader = None
150 ctx.output_option = GitOutputOption(
151 options.dumpfile,
152 GitRevisionInlineWriter(revision_reader),
153 max_merges=None,
154 # Optional map from CVS author names to bzr author names:
155 author_transforms={}, # FIXME