From 1dbf0a91195c6e8bd4404cc6b922ba35dd5e9b4e Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Wed, 28 May 2014 23:34:35 +0100 Subject: Move the repo renaming to a method for convenience. This also renames log and marks files. --- src/repository.cpp | 34 ++++++++++++++++++++++++++++++++++ src/repository.h | 1 + src/svn.cpp | 13 +------------ 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/repository.cpp b/src/repository.cpp index 2fbe2a5..f6ee98a 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -127,6 +127,40 @@ static QString logFileName(QString name) return name; } +bool Repository::rename(const QString &newName) +{ + if (!QDir(name).exists()) { // repo doesn't exist yet. + qCritical() << "Cannot find repository dir for" << name; + return false; + } + + qDebug() << "repository" << name << "deleted - renaming repo with revision number suffix" << newName; + if (!QFile::rename(name, newName)) { + qCritical() << "Could not rename repository dir for" << name; + return false; + } + + if (!QFile::rename(logFileName(name), logFileName(newName))) { + qCritical() << "Could not rename logfile for repository" << name; + return false; + } + + closeFastImport(); + + if (!QFile::rename(newName + "/" + marksFileName(name), newName + "/" + marksFileName(newName))) { + qCritical() << "Could not rename marks file for repository" << name; + return false; + } + + name = newName; + + // fastImport will be restarted on next txn + fastImport.setWorkingDirectory(name); + + return true; +} + + static int lastValidMark(QString name) { QFile marksfile(name + "/" + marksFileName(name)); diff --git a/src/repository.h b/src/repository.h index c5a289b..b0bbff7 100644 --- a/src/repository.h +++ b/src/repository.h @@ -132,6 +132,7 @@ public: }; Repository(const Rules::Repository &rule); Repository(const QString &name, const QString &branchName, int revision); + bool rename(const QString &newName); int setupIncremental(int &cutoff); void restoreLog(); ~Repository(); diff --git a/src/svn.cpp b/src/svn.cpp index ed49f48..72f73cd 100644 --- a/src/svn.cpp +++ b/src/svn.cpp @@ -724,20 +724,9 @@ int SvnRevision::exportInternal(const char *key, const svn_fs_path_change_t *cha return repo->deleteBranch(branch, revnum); } - // Master is deleted, which generally means we're obsoleting our package - // Rename the repository instead (and keep the revision number in-case it's - // resurrected later - if (!QDir(repository).exists()) { // repo doesn't exist yet. - qCritical() << "Cannot find repository dir for" << repository; - return EXIT_FAILURE; - } - QString newreponame = repository + "-r" + QString::number(revnum); - if (!QFile::rename(repository, newreponame)) { - qCritical() << "Could not rename repository dir for" << repository; + if (!repo->rename(newreponame)) return EXIT_FAILURE; - } - repositories->remove(repository); repositories->insert(newreponame, repo); return EXIT_SUCCESS; -- cgit v1.2.1