aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main.cpp14
-rw-r--r--src/repository.cpp40
-rw-r--r--src/repository.h3
3 files changed, 51 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp
index a8f4069..2ce11c5 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -36,10 +36,18 @@ int main(int argc, char **argv)
Rules rules(options.ruleFile);
rules.load();
+ int min_rev = options.options.value("resume-from").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);
+ if (min_rev > 1)
+ repo->reloadBranches();
+ repositories.insert(rule.name, repo);
+ }
Svn::initialize();
Svn svn(options.pathToRepository);
@@ -47,7 +55,7 @@ int main(int argc, char **argv)
svn.setRepositories(repositories);
int max_rev = svn.youngestRevision();
- for (int i = 1; i <= max_rev; ++i)
+ for (int i = min_rev; i <= max_rev; ++i)
if (!svn.exportRevision(i))
break;
diff --git a/src/repository.cpp b/src/repository.cpp
index 8a5f4f0..c3f52fb 100644
--- a/src/repository.cpp
+++ b/src/repository.cpp
@@ -33,7 +33,7 @@ Repository::Repository(const Rules::Repository &rule)
// create the default branch
branches["master"].isCreated = true;
- fastImport.setWorkingDirectory(rule.name);
+ fastImport.setWorkingDirectory(name);
fastImport.setProcessChannelMode(QProcess::ForwardedChannels);
}
@@ -45,6 +45,36 @@ Repository::~Repository()
}
}
+void Repository::reloadBranches()
+{
+ QHash<QString, Branch>::Iterator it = branches.begin(),
+ end = branches.end();
+ for ( ; it != end; ++it) {
+ QString branchRef = it.key();
+ if (!branchRef.startsWith("refs/heads/"))
+ branchRef.prepend("refs/heads/");
+
+ bool branchExists;
+ // does this branch already exist?
+ QProcess revParse;
+ revParse.setWorkingDirectory(name);
+ revParse.start("git-rev-parse", QStringList() << "--verify" << branchRef);
+ revParse.waitForFinished();
+
+ if (revParse.exitCode() == 0)
+ branchExists = true;
+ else
+ branchExists = false;
+
+ if (branchExists) {
+ startFastImport();
+ fastImport.write("reset " + branchRef.toUtf8() +
+ "\nfrom " + branchRef.toUtf8() + "^0\n");
+ it->isCreated = true;
+ }
+ }
+}
+
Repository::Transaction *Repository::newTransaction(const QString &branch, const QString &svnprefix,
int revnum)
{
@@ -61,6 +91,12 @@ Repository::Transaction *Repository::newTransaction(const QString &branch, const
txn->revnum = revnum;
txn->lastmark = revnum;
+ startFastImport();
+ return txn;
+}
+
+void Repository::startFastImport()
+{
if (fastImport.state() == QProcess::NotRunning) {
// start the process
#ifndef DRY_RUN
@@ -69,8 +105,6 @@ Repository::Transaction *Repository::newTransaction(const QString &branch, const
fastImport.start("/bin/cat", QStringList());
#endif
}
-
- return txn;
}
Repository::Transaction::~Transaction()
diff --git a/src/repository.h b/src/repository.h
index 60c2aed..4160d3f 100644
--- a/src/repository.h
+++ b/src/repository.h
@@ -62,6 +62,7 @@ public:
Repository(const Rules::Repository &rule);
~Repository();
+ void reloadBranches();
Transaction *newTransaction(const QString &branch, const QString &svnprefix, int revnum);
private:
@@ -75,6 +76,8 @@ private:
QString name;
QProcess fastImport;
+ void startFastImport();
+
Q_DISABLE_COPY(Repository)
};