X-Git-Url: http://andersk.mit.edu/gitweb/svn-all-fast-export.git/blobdiff_plain/b50b928579919f51218f45e47db758e43ef757c1..50cd32a4e9d105a086977bd071fda0a3401bc27d:/src/repository.cpp?ds=sidebyside diff --git a/src/repository.cpp b/src/repository.cpp index 76171ab..aef71a1 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -20,7 +20,7 @@ #include Repository::Repository(const Rules::Repository &rule) - : name(rule.name) + : name(rule.name), processHasStarted(false) { foreach (Rules::Repository::Branch branchRule, rule.branches) { Branch branch; @@ -120,7 +120,7 @@ Repository::Transaction *Repository::newTransaction(const QString &branch, const txn->lastmark = revnum; startFastImport(); - if (++commitCount % 10000) + if ((++commitCount % 10000) == 0) // write everything to disk every 10000 commits fastImport.write("checkpoint\n"); return txn; @@ -129,14 +129,20 @@ Repository::Transaction *Repository::newTransaction(const QString &branch, const void Repository::startFastImport() { if (fastImport.state() == QProcess::NotRunning) { + if (processHasStarted) + qFatal("git-fast-import has been started once and crashed?"); + processHasStarted = true; + // start the process + QString outputFile = name; + outputFile.replace('/', '_'); + outputFile.prepend("log-"); + fastImport.setStandardOutputFile(outputFile, QIODevice::Append); + #ifndef DRY_RUN fastImport.setProcessChannelMode(QProcess::ForwardedChannels); fastImport.start("git-fast-import", QStringList()); #else - QString outputFile = name; - outputFile.replace('/', '_'); - fastImport.setStandardOutputFile(outputFile, QIODevice::Append); fastImport.start("/bin/cat", QStringList()); #endif } @@ -178,7 +184,6 @@ QIODevice *Repository::Transaction::addFile(const QString &path, int mode, qint6 repository->fastImport.write("\ndata "); repository->fastImport.write(QByteArray::number(length)); repository->fastImport.write("\n", 1); - repository->fastImport.waitForBytesWritten(0); #endif modifiedFiles.insert(path, fp); @@ -237,7 +242,7 @@ void Repository::Transaction::commit() repository->fastImport.write("\n"); - while (repository->fastImport.bytesToWrite() && repository->fastImport.waitForBytesWritten()) { - // nothing - } + while (repository->fastImport.bytesToWrite()) + if (!repository->fastImport.waitForBytesWritten(-1)) + qFatal("Failed to write to process: %s", qPrintable(repository->fastImport.errorString())); }