X-Git-Url: http://andersk.mit.edu/gitweb/svn-all-fast-export.git/blobdiff_plain/ae160384ef8ec2acf8bc287c8144dd7f9a8f71ac..7abbe81c3b2b10d144aee0be744258a352558e03:/src/main.cpp diff --git a/src/main.cpp b/src/main.cpp index 9d61db8..8308eb6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,40 +16,76 @@ */ #include +#include #include #include +#include "options.h" #include "ruleparser.h" #include "repository.h" +#include "svn.h" + +QHash loadIdentityMapFile(const QString &fileName) +{ + QHash result; + if (fileName.isEmpty()) + return result; + + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly)) + return result; + + while (!file.atEnd()) { + QByteArray line = file.readLine().trimmed(); + int space = line.indexOf(' '); + if (space == -1) + continue; // invalid line + + QByteArray realname = line.mid(space).trimmed(); + line.truncate(space); + result.insert(line, realname); + }; + + return result; +} int main(int argc, char **argv) { QCoreApplication app(argc, argv); - QStringList arguments = app.arguments(); - if (arguments.count() < 3) { - printf("Usage: svn-all-fast-export configfile path-to-svn\n"); - return 0; - } + Options options; + options.parseArguments(app.arguments()); // Load the configuration - Rules rules(arguments.at(1)); + Rules rules(options.ruleFile); rules.load(); + int min_rev = options.options.value("resume-from").toInt(); + int max_rev = options.options.value("max-rev").toInt(); + if (min_rev < 1) + min_rev = 1; + // create the repository list QHash repositories; - foreach (Rules::Repository rule, rules.repositories()) - repositories.insert(rule.name, new Repository(rule)); + foreach (Rules::Repository rule, rules.repositories()) { + Repository *repo = new Repository(rule); + repositories.insert(rule.name, repo); + } + + Svn::initialize(); + Svn svn(options.pathToRepository); + svn.setMatchRules(rules.matchRules()); + svn.setRepositories(repositories); + svn.setIdentityMap(loadIdentityMapFile(options.options.value("identity-map"))); - // verify the match rules - foreach (Rules::Match rule, rules.matchRules()) - if (!repositories.contains(rule.repository)) { - fprintf(stderr, "Error: rule \"%s\" references unknown repository \"%s\"\n", - qPrintable(rule.rx.pattern()), qPrintable(rule.repository)); - return 1; - } + if (max_rev < 1) + max_rev = svn.youngestRevision(); + for (int i = min_rev; i <= max_rev; ++i) + if (!svn.exportRevision(i)) + break; + qDeleteAll(repositories); // success return 0; }