+void Repository::reloadBranches()
+{
+ QProcess revParse;
+ revParse.setWorkingDirectory(name);
+ revParse.start("git", QStringList() << "rev-parse" << "--symbolic" << "--branches");
+ revParse.waitForFinished();
+
+ if (revParse.exitCode() == 0 && revParse.bytesAvailable()) {
+ startFastImport();
+
+ while (revParse.canReadLine()) {
+ QByteArray branchName = revParse.readLine().trimmed();
+
+ branches[branchName].created = 1;
+ fastImport.write("reset refs/heads/" + branchName +
+ "\nfrom refs/heads/" + branchName + "^0\n\n");
+ }
+ }
+}
+
+void Repository::createBranch(const QString &branch, int revnum,
+ const QString &branchFrom, int)
+{
+ if (!branches.contains(branch)) {
+ qWarning() << branch << "is not a known branch in repository" << name << endl
+ << "Going to create it automatically";
+ }
+
+ startFastImport();
+ QByteArray branchRef = branch.toUtf8();
+ if (!branchRef.startsWith("refs/"))
+ branchRef.prepend("refs/heads/");
+
+ Branch &br = branches[branch];
+ if (br.created && br.created != revnum) {
+ QByteArray backupBranch = branchRef + '_' + QByteArray::number(revnum);
+ qWarning() << branch << "already exists; backing up to" << backupBranch;
+
+ fastImport.write("reset " + backupBranch + "\nfrom " + branchRef + "\n\n");
+ }
+
+ // now create the branch
+ br.created = revnum;
+ QByteArray branchFromRef = branchFrom.toUtf8();
+ if (!branchFromRef.startsWith("refs/"))
+ branchFromRef.prepend("refs/heads/");
+
+ 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");
+}
+