From: Thiago Macieira Date: Mon, 24 Dec 2007 13:11:50 +0000 (-0200) Subject: Add support for resuming work X-Git-Url: http://andersk.mit.edu/gitweb/svn-all-fast-export.git/commitdiff_plain/1a6887295271402341658c9d0c3a17fa8bd891da Add support for resuming work --- 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 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::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) };