diff options
-rw-r--r-- | src/repository.cpp | 28 | ||||
-rw-r--r-- | src/repository.h | 2 |
2 files changed, 17 insertions, 13 deletions
diff --git a/src/repository.cpp b/src/repository.cpp index 06ac2f6..c786a71 100644 --- a/src/repository.cpp +++ b/src/repository.cpp @@ -140,7 +140,6 @@ void Repository::createBranch(const QString &branch, int revnum, if (!branchRef.startsWith("refs/")) branchRef.prepend("refs/heads/"); - Branch &br = branches[branch]; if (br.created && br.created != revnum) { QByteArray backupBranch = branchRef + '_' + QByteArray::number(revnum); @@ -149,15 +148,27 @@ void Repository::createBranch(const QString &branch, int revnum, fastImport.write("reset " + backupBranch + "\nfrom " + branchRef + "\n\n"); } + Branch &brFrom = branches[branchFrom]; + if (!brFrom.created) { + qCritical() << branch << "in repository" << name + << "is branching from branch" << branchFrom + << "but the latter doesn't exist. Can't continue."; + exit(1); + } + // now create the branch br.created = revnum; + br.commits.append(revnum); + QByteArray branchFromRef, branchFromDesc; - QVector<const int>::iterator it = qUpperBound(exportedCommits, branchRevNum); - const int closestCommit = it == exportedCommits.begin() ? branchRevNum : *--it; + QVector<const int>::iterator it = qUpperBound(brFrom.commits, branchRevNum); + const int closestCommit = it == brFrom.commits.begin() ? branchRevNum : *--it; if(commitMarks.contains(closestCommit)) { - branchFromRef = ":" + QByteArray::number(commitMarks.value(closestCommit)); + int mark = commitMarks[closestCommit]; + branchFromRef = ":" + QByteArray::number(mark); branchFromDesc = branchFromRef + " (r" + QByteArray::number(closestCommit) + ")"; + commitMarks[revnum] = mark; } else { qWarning() << branch << "in repository" << name << "is branching but no exported commits exist in repository" << "creating an empty branch."; @@ -167,13 +178,6 @@ void Repository::createBranch(const QString &branch, int revnum, branchFromDesc = branchFromRef; } - if (!branches.contains(branchFrom) || !branches.value(branchFrom).created) { - qCritical() << branch << "in repository" << name - << "is branching from branch" << branchFrom - << "but the latter doesn't exist. Can't continue."; - exit(1); - } - fastImport.write("reset " + branchRef + "\nfrom " + branchFromRef + "\n\n" "progress Branch " + branchRef + " created from " + branchFromDesc + " r" + QByteArray::number(branchRevNum) + "\n\n"); @@ -369,7 +373,6 @@ 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); s << "committer " << QString::fromUtf8(author) << ' ' << datetime << " -0000" << endl; Branch &br = repository->branches[branch]; @@ -378,6 +381,7 @@ void Repository::Transaction::commit() << revnum << "-- did you resume from the wrong revision?"; br.created = revnum; } + br.commits.append(revnum); s << "data " << message.length() << endl; } diff --git a/src/repository.h b/src/repository.h index 629616b..3df9d9a 100644 --- a/src/repository.h +++ b/src/repository.h @@ -72,6 +72,7 @@ private: struct Branch { int created; + QVector<int> commits; }; struct AnnotatedTag { @@ -86,7 +87,6 @@ private: QHash<QString, Branch> branches; QHash<QString, AnnotatedTag> annotatedTags; QHash<int, int> commitMarks; - QVector<int> exportedCommits; QString name; QProcess fastImport; int commitCount; |