*/
#include <QCoreApplication>
+#include <QFile>
#include <QStringList>
#include <stdio.h>
+#include "options.h"
#include "ruleparser.h"
#include "repository.h"
+#include "svn.h"
+
+QHash<QByteArray, QByteArray> loadIdentityMapFile(const QString &fileName)
+{
+ QHash<QByteArray, QByteArray> 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<QString, Repository *> 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;
}