From a9b9930b02bcf8fae908ea5a1d2d1a18bc362cac Mon Sep 17 00:00:00 2001 From: Marc Guenther Date: Fri, 16 Apr 2010 17:34:15 +0200 Subject: error message and exit when rules file cannot be read --- src/ruleparser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/ruleparser.cpp b/src/ruleparser.cpp index 905115c..9a83203 100644 --- a/src/ruleparser.cpp +++ b/src/ruleparser.cpp @@ -44,7 +44,7 @@ void Rules::load() { QFile file(filename); if (!file.open(QIODevice::ReadOnly)) - return; + qFatal("Could not read the rules file: %s", qPrintable(filename)); // initialize the regexps we will use QRegExp repoLine("create repository\\s+(\\S+)", Qt::CaseInsensitive); -- cgit v1.2.1 From b886ca85875859e7a3dd98aaf087abe9365c0646 Mon Sep 17 00:00:00 2001 From: Marc Guenther Date: Tue, 20 Apr 2010 22:45:14 +0200 Subject: small typo in debug message --- src/repository.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/repository.cpp b/src/repository.cpp index 922027d..d589b6e 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -67,7 +67,7 @@ Repository::Repository(const Rules::Repository &rule) fastImport.setWorkingDirectory(name); if (!CommandLineParser::instance()->contains("dry-run")) { if (!QDir(name).exists()) { // repo doesn't exist yet. - qDebug() << "Creating new repositoryn" << name; + qDebug() << "Creating new repository" << name; QDir::current().mkpath(name); QProcess init; init.setWorkingDirectory(name); -- cgit v1.2.1 From 44857577473f7baf327abd88daa2c785a0fd56cb Mon Sep 17 00:00:00 2001 From: Torgny Nyblom Date: Sat, 8 May 2010 15:48:00 +0200 Subject: Add debug --- src/repository.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/repository.cpp b/src/repository.cpp index 426eeff..a04ea99 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -148,6 +148,7 @@ void Repository::createBranch(const QString &branch, int revnum, if(commitMarks.contains(closestCommit)) { branchFromRef = ":" + QByteArray::number(commitMarks.value(closestCommit)); + qDebug() << "branching from" << closestCommit << "(svn reports r" << branchRevNum << ")"; } else { qWarning() << branch << "in repository" << name << "is branching but no exported commits exist in repository" << "creating an empty branch."; -- cgit v1.2.1 From 03e7d518f73053d56b240917f3b0a412d30d47db Mon Sep 17 00:00:00 2001 From: Pavel Plesov Date: Tue, 18 May 2010 03:12:19 +0400 Subject: Fix broken utf-8 filenames. --- src/svn.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/svn.cpp b/src/svn.cpp index bb00214..604ddf1 100644 --- a/src/svn.cpp +++ b/src/svn.cpp @@ -322,7 +322,7 @@ static int recursiveDumpDir(Repository::Transaction *txn, svn_fs_root_t *fs_root svn_fs_dirent_t *dirent = reinterpret_cast(value); QByteArray entryName = pathname + '/' + dirent->name; - QString entryFinalName = finalPathName + dirent->name; + QString entryFinalName = finalPathName + QString::fromUtf8(dirent->name); if (dirent->kind == svn_node_dir) { entryFinalName += '/'; -- cgit v1.2.1 From dcb73d84fb8343eaccad8de9c8238944035c82ee Mon Sep 17 00:00:00 2001 From: Torgny Nyblom Date: Tue, 18 May 2010 19:49:48 +0200 Subject: Initialize lastmark --- src/repository.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/repository.cpp b/src/repository.cpp index a04ea99..8a2a2fb 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -52,7 +52,7 @@ public: static ProcessCache processCache; Repository::Repository(const Rules::Repository &rule) - : name(rule.name), commitCount(0), outstandingTransactions(0), processHasStarted(false) + : name(rule.name), commitCount(0), outstandingTransactions(0), lastmark(0), processHasStarted(false) { foreach (Rules::Repository::Branch branchRule, rule.branches) { Branch branch; -- cgit v1.2.1 From 125e8ac013f3fc7df64dde0a050c012235bdf185 Mon Sep 17 00:00:00 2001 From: Torgny Nyblom Date: Tue, 18 May 2010 19:50:48 +0200 Subject: Make git fast-import save the used marks and hashes for later use. --- src/repository.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/repository.cpp b/src/repository.cpp index 8a2a2fb..f81bb26 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -270,6 +270,11 @@ void Repository::startFastImport() processHasStarted = true; // start the process + QString marksFile = name; + marksFile.replace('/', '_'); + marksFile.prepend("marks-"); + QStringList marksOptions; + marksOptions << "--export-marks=" + marksFile; QString outputFile = name; outputFile.replace('/', '_'); outputFile.prepend("log-"); @@ -277,7 +282,7 @@ void Repository::startFastImport() fastImport.setProcessChannelMode(QProcess::MergedChannels); if (!CommandLineParser::instance()->contains("dry-run")) { - fastImport.start("git", QStringList() << "fast-import"); + fastImport.start("git", QStringList() << "fast-import" << marksOptions); } else { fastImport.start("/bin/cat", QStringList()); } -- cgit v1.2.1 From 4112f7856817fcaa04c1f42cbe3e871c0bd7c61c Mon Sep 17 00:00:00 2001 From: Torgny Nyblom Date: Tue, 18 May 2010 19:51:52 +0200 Subject: Save the exported marks along with the associated revisions for later use. --- src/repository.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src') diff --git a/src/repository.cpp b/src/repository.cpp index f81bb26..88b17c3 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -97,6 +97,19 @@ void Repository::closeFastImport() } processHasStarted = false; processCache.remove(this); + // Save the exported marks + QString revsFile = name; + revsFile.replace('/', '_'); + revsFile.prepend("revisions-"); + QFile exportedMarks(revsFile); + qDebug() << exportedMarks.open(QIODevice::Truncate | QIODevice::Text | QIODevice::WriteOnly); + + int mark; + foreach(mark, exportedCommits) + { + exportedMarks.write(QString(":%2 r%1\n").arg(mark).arg(commitMarks.value(mark)).toLocal8Bit()); + } + exportedMarks.close(); } void Repository::reloadBranches() -- cgit v1.2.1 From 19994f26ff47507a387f708ad7bc0fcc32af3aed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Manuel=20Santamar=C3=ADa=20Lema?= Date: Sat, 5 Jun 2010 00:54:25 +0200 Subject: Add "-lapr-1 -lsvn_subr-1" to the linker options. Linking against these libraries makes the program build using binutils gold. --- src/src.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/src.pro b/src/src.pro index 2fbde10..eada929 100644 --- a/src/src.pro +++ b/src/src.pro @@ -13,7 +13,7 @@ QT = core INCLUDEPATH += . $$SVN_INCLUDE $$APR_INCLUDE !isEmpty($$SVN_LIBDIR): LIBS += -L$$SVN_LIBDIR -LIBS += -lsvn_fs-1 -lsvn_repos-1 +LIBS += -lsvn_fs-1 -lsvn_repos-1 -lapr-1 -lsvn_subr-1 # Input SOURCES += ruleparser.cpp \ -- cgit v1.2.1 From 9bdc2a66b057099a7bca628f26de87d2b4b55400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Manuel=20Santamar=C3=ADa=20Lema?= Date: Mon, 21 Jun 2010 16:07:47 +0200 Subject: Allow comments (start with '#') in accounts map --- src/main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main.cpp b/src/main.cpp index a00c6dc..0edf8f5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -41,7 +41,11 @@ QHash loadIdentityMapFile(const QString &fileName) } while (!file.atEnd()) { - QByteArray line = file.readLine().trimmed(); + QByteArray line = file.readLine(); + int comment_pos = line.indexOf('#'); + if (comment_pos != -1) + line.truncate(comment_pos); + line = line.trimmed(); int space = line.indexOf(' '); if (space == -1) continue; // invalid line -- cgit v1.2.1 From 2eae8f66a7afb926ed0de7d489748a776f03e9a0 Mon Sep 17 00:00:00 2001 From: Torgny Nyblom Date: Mon, 9 Aug 2010 13:31:49 +0200 Subject: If a branch is created from a previous commit that doesn't touch the branch from path then fallback to using the latest version and issue a warning --- src/repository.cpp | 33 +++++++++++++++++++++++++-------- src/repository.h | 5 ++++- 2 files changed, 29 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/repository.cpp b/src/repository.cpp index 88b17c3..bb7002e 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -105,7 +105,7 @@ void Repository::closeFastImport() qDebug() << exportedMarks.open(QIODevice::Truncate | QIODevice::Text | QIODevice::WriteOnly); int mark; - foreach(mark, exportedCommits) + foreach(mark, commitMarks.keys()) { exportedMarks.write(QString(":%2 r%1\n").arg(mark).arg(commitMarks.value(mark)).toLocal8Bit()); } @@ -157,11 +157,27 @@ void Repository::createBranch(const QString &branch, int revnum, // now create the branch br.created = revnum; QByteArray branchFromRef; - const int closestCommit = *qLowerBound(exportedCommits, branchRevNum); - if(commitMarks.contains(closestCommit)) + const int closestCommit = *qLowerBound(commitMarks.keys(), branchRevNum); + if(exportedCommits.contains(closestCommit)) { - branchFromRef = ":" + QByteArray::number(commitMarks.value(closestCommit)); - qDebug() << "branching from" << closestCommit << "(svn reports r" << branchRevNum << ")"; + bool pathFound = false; + QString path; + foreach(path, exportedCommits[closestCommit]) { + if(path.contains(branchFrom)) { + pathFound = true; + break; + } + } + + if(pathFound) { + branchFromRef = ":" + QByteArray::number(commitMarks.value(closestCommit)); + qDebug() << branch << "in repository" << name << "is branching from" << closestCommit << "(svn reports r" << branchRevNum << ") git mark:" << branchFromRef; + } else { + qWarning() << branch << "in repository" << name << "is branching from a revision that doesn't touch the branch from path, branching from current revision"; + branchFromRef = branchFrom.toUtf8(); + if (!branchFromRef.startsWith("refs/")) + branchFromRef.prepend("refs/heads/"); + } } else { qWarning() << branch << "in repository" << name << "is branching but no exported commits exist in repository" << "creating an empty branch."; @@ -179,7 +195,7 @@ void Repository::createBranch(const QString &branch, int revnum, fastImport.write("reset " + branchRef + "\nfrom " + branchFromRef + "\n\n" "progress Branch " + branchRef + " created from " - + branchFromRef + " r" + QByteArray::number(branchRevNum) + "\n\n"); + + branchFromRef + " r" + QByteArray::number(branchRevNum) + "(at SVN" + QByteArray::number(revnum) + ")\n\n"); } Repository::Transaction *Repository::newTransaction(const QString &branch, const QString &svnprefix, @@ -330,6 +346,7 @@ void Repository::Transaction::deleteFile(const QString &path) if(pathNoSlash.endsWith('/')) pathNoSlash.chop(1); deletedFiles.append(pathNoSlash); + modifiedPaths.append(path); } QIODevice *Repository::Transaction::addFile(const QString &path, int mode, qint64 length) @@ -353,7 +370,7 @@ QIODevice *Repository::Transaction::addFile(const QString &path, int mode, qint6 repository->fastImport.write(QByteArray::number(length)); repository->fastImport.write("\n", 1); } - + modifiedPaths.append(branch + "/" + path); return &repository->fastImport; } @@ -377,7 +394,7 @@ void Repository::Transaction::commit() s << "commit " << branchRef << endl; s << "mark :" << QByteArray::number(++repository->lastmark) << endl; repository->commitMarks.insert(revnum, repository->lastmark); - repository->exportedCommits.append(revnum); + repository->exportedCommits.insert(revnum, modifiedPaths); s << "committer " << QString::fromUtf8(author) << ' ' << datetime << " -0000" << endl; Branch &br = repository->branches[branch]; diff --git a/src/repository.h b/src/repository.h index 629616b..d008996 100644 --- a/src/repository.h +++ b/src/repository.h @@ -42,6 +42,7 @@ public: QStringList deletedFiles; QByteArray modifiedFiles; + QVector modifiedPaths; inline Transaction() {} public: @@ -85,8 +86,10 @@ private: QHash branches; QHash annotatedTags; + // rXXXX, mark QHash commitMarks; - QVector exportedCommits; + // rXXXX, [path, path, ...] + QHash > exportedCommits; QString name; QProcess fastImport; int commitCount; -- cgit v1.2.1 From 2b7ce4a0bcca10bcc6cdfb2cb35685ccaa10afe3 Mon Sep 17 00:00:00 2001 From: Torgny Nyblom Date: Mon, 9 Aug 2010 13:32:14 +0200 Subject: Exit if unable to open repository --- src/svn.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/svn.cpp b/src/svn.cpp index bb00214..22ee151 100644 --- a/src/svn.cpp +++ b/src/svn.cpp @@ -141,7 +141,10 @@ bool Svn::exportRevision(int revnum) SvnPrivate::SvnPrivate(const QString &pathToRepository) : global_pool(NULL) { - openRepository(pathToRepository); + if( openRepository(pathToRepository) != EXIT_SUCCESS) { + qCritical() << "Failed to open repository"; + exit(1); + } // get the youngest revision svn_fs_youngest_rev(&youngest_rev, fs, global_pool); -- cgit v1.2.1