diff options
author | Thiago Macieira <thiago.macieira@trolltech.com> | 2008-08-23 22:48:34 +0200 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@trolltech.com> | 2008-08-23 22:48:34 +0200 |
commit | 374d4cd6fe492af4bcb0adf46e380f55be737d01 (patch) | |
tree | e946bc11604b7a07a226c9cab3febcd4cbae76c9 /src/repository.cpp | |
parent | 25e6c28e0da95faa8bd6644cebf3f20d0afb6f53 (diff) | |
download | svn2git-374d4cd6fe492af4bcb0adf46e380f55be737d01.tar svn2git-374d4cd6fe492af4bcb0adf46e380f55be737d01.tar.gz svn2git-374d4cd6fe492af4bcb0adf46e380f55be737d01.tar.bz2 svn2git-374d4cd6fe492af4bcb0adf46e380f55be737d01.tar.xz svn2git-374d4cd6fe492af4bcb0adf46e380f55be737d01.zip |
Add a process cache to keep the number of processes under 100
Diffstat (limited to 'src/repository.cpp')
-rw-r--r-- | src/repository.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/repository.cpp b/src/repository.cpp index be24ed4..e74ab20 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -18,6 +18,31 @@ #include "repository.h" #include <QTextStream> #include <QDebug> +#include <QLinkedList> + +static const int maxSimultaneousProcesses = 100; + +class ProcessCache: QLinkedList<Repository *> +{ +public: + void touch(Repository *repo) + { + remove(repo); + + // if the cache is too big, remove from the front + while (size() >= maxSimultaneousProcesses) + takeFirst()->closeFastImport(); + + // append to the end + append(repo); + } + + inline void remove(Repository *repo) + { + removeOne(repo); + } +}; +static ProcessCache processCache; Repository::Repository(const Rules::Repository &rule) : name(rule.name), commitCount(0), processHasStarted(false) @@ -37,6 +62,11 @@ Repository::Repository(const Rules::Repository &rule) Repository::~Repository() { + closeFastImport(); +} + +void Repository::closeFastImport() +{ if (fastImport.state() != QProcess::NotRunning) { fastImport.write("checkpoint\n"); fastImport.waitForBytesWritten(-1); @@ -47,6 +77,8 @@ Repository::~Repository() qWarning() << "git-fast-import for repository" << name << "did not die"; } } + processHasStarted = false; + processCache.remove(this); } void Repository::reloadBranches() @@ -198,6 +230,8 @@ QIODevice *Repository::Transaction::addFile(const QString &path, int mode, qint6 void Repository::Transaction::commit() { + processCache.touch(repository); + // create the commit message QByteArray message = log; if (!message.endsWith('\n')) |