monotone

monotone Mtn Source Tree

Root/src/cmd_othervcs.cc

1// Copyright (C) 2002 Graydon Hoare <graydon@pobox.com>
2// 2009 Derek Scherger <derek@echologic.com>
3//
4// This program is made available under the GNU GPL version 2.0 or
5// greater. See the accompanying file COPYING for details.
6//
7// This program is distributed WITHOUT ANY WARRANTY; without even the
8// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9// PURPOSE.
10
11#include "base.hh"
12#include "cmd.hh"
13#include "app_state.hh"
14#include "database.hh"
15#include "git_change.hh"
16#include "git_export.hh"
17#include "project.hh"
18#include "rcs_import.hh"
19#include "revision.hh"
20#include "keys.hh"
21#include "key_store.hh"
22
23using std::map;
24using std::set;
25using std::string;
26using std::vector;
27
28CMD(rcs_import, "rcs_import", "", CMD_REF(debug), N_("RCSFILE..."),
29 N_("Parses versions in RCS files"),
30 N_("This command doesn't reconstruct or import revisions. "
31 "You probably want to use cvs_import."),
32 options::opts::branch)
33{
34 if (args.size() < 1)
35 throw usage(execid);
36
37 for (args_vector::const_iterator i = args.begin();
38 i != args.end(); ++i)
39 test_parse_rcs_file(system_path((*i)(), origin::user));
40}
41
42
43CMD(cvs_import, "cvs_import", "", CMD_REF(vcs), N_("CVSROOT"),
44 N_("Imports all versions in a CVS repository"),
45 "",
46 options::opts::branch)
47{
48 database db(app);
49 key_store keys(app);
50 project_t project(db);
51
52 if (args.size() != 1)
53 throw usage(execid);
54
55 E(!app.opts.branch().empty(), origin::user,
56 F("need base '--branch' argument for importing"));
57
58 system_path cvsroot(idx(args, 0)(), origin::user);
59 require_path_is_directory(cvsroot,
60 F("path '%s' does not exist") % cvsroot,
61 F("'%s' is not a directory") % cvsroot);
62
63 // make sure we can sign certs using the selected key; also requests
64 // the password (if necessary) up front rather than after some arbitrary
65 // amount of work
66 cache_user_key(app.opts, project, keys, app.lua);
67
68 import_cvs_repo(project, keys, cvsroot, app.opts.branch);
69}
70
71
72CMD(git_export, "git_export", "", CMD_REF(vcs), (""),
73 N_("Produces a git fast-export data stream on stdout"),
74 (""),
75 options::opts::authors_file | options::opts::branches_file |
76 options::opts::log_revids | options::opts::log_certs |
77 options::opts::use_one_changelog |
78 options::opts::import_marks | options::opts::export_marks |
79 options::opts::refs)
80{
81 database db(app);
82
83 if (args.size() != 0)
84 throw usage(execid);
85
86 map<string, string> author_map;
87 map<string, string> branch_map;
88
89 if (!app.opts.authors_file.empty())
90 {
91 P(F("reading author mappings from '%s'") % app.opts.authors_file);
92 read_mappings(app.opts.authors_file, author_map);
93 validate_author_mappings(app.lua, author_map);
94 }
95
96 if (!app.opts.branches_file.empty())
97 {
98 P(F("reading branch mappings from '%s'") % app.opts.branches_file);
99 read_mappings(app.opts.branches_file, branch_map);
100 }
101
102 map<revision_id, size_t> marked_revs;
103
104 if (!app.opts.import_marks.empty())
105 {
106 P(F("importing revision marks from '%s'") % app.opts.import_marks);
107 import_marks(app.opts.import_marks, marked_revs);
108 }
109
110 set<revision_id> revision_set;
111 db.get_revision_ids(revision_set);
112
113 // remove marked revs from the set to be exported
114 for (map<revision_id, size_t>::const_iterator
115 i = marked_revs.begin(); i != marked_revs.end(); ++i)
116 revision_set.erase(i->first);
117
118 vector<revision_id> revisions;
119 toposort(db, revision_set, revisions);
120
121 map<revision_id, git_change> change_map;
122
123 load_changes(db, revisions, change_map);
124
125 // needs author and branch maps
126 export_changes(db, app.lua,
127 revisions, marked_revs,
128 author_map, branch_map, change_map,
129 app.opts.log_revids, app.opts.log_certs,
130 app.opts.use_one_changelog);
131
132 if (app.opts.refs.find("revs") != app.opts.refs.end())
133 export_rev_refs(revisions, marked_revs);
134
135 if (app.opts.refs.find("roots") != app.opts.refs.end())
136 export_root_refs(db, marked_revs);
137
138 if (app.opts.refs.find("leaves") != app.opts.refs.end())
139 export_leaf_refs(db, marked_revs);
140
141 if (!app.opts.export_marks.empty())
142 {
143 P(F("exporting revision marks to '%s'") % app.opts.export_marks);
144 export_marks(app.opts.export_marks, marked_revs);
145 }
146}
147
148// Local Variables:
149// mode: C++
150// fill-column: 76
151// c-file-style: "gnu"
152// indent-tabs-mode: nil
153// End:
154// vim: et:sw=2:sts=2:ts=2:cino=>2s,{s,\:s,+s,t0,g0,^-2,e-2,n-2,p2s,(0,=s:

Archive Download this file

Branches

Tags

Quick Links:     www.monotone.ca    -     Downloads    -     Documentation    -     Wiki    -     Code Forge    -     Build Status