forked from qt-creator/qt-creator
Git: Suggest branch name based on the commit subject
... when the checked out commit is not a remote branch. Fixes: QTCREATORBUG-24006 Change-Id: I175a3aedba88bd9e3b5cf298c5c161c56e9d0acd Reviewed-by: André Hartmann <aha_1980@gmx.de>
This commit is contained in:
committed by
Orgad Shaneh
parent
5299e58cea
commit
14e3a379c1
@@ -320,10 +320,11 @@ bool BranchView::add()
|
||||
const QStringList localNames = m_model->localBranchNames();
|
||||
|
||||
BranchAddDialog branchAddDialog(localNames, BranchAddDialog::Type::AddBranch, this);
|
||||
if (isTracked) {
|
||||
const QString suggestedName = GitClient::suggestedLocalBranchName(localNames, trackedBranch);
|
||||
branchAddDialog.setBranchName(suggestedName);
|
||||
}
|
||||
|
||||
const QString suggestedName = GitClient::suggestedLocalBranchName(
|
||||
m_repository, localNames, trackedBranch,
|
||||
isTracked ? GitClient::BranchTargetType::Remote : GitClient::BranchTargetType::Commit);
|
||||
branchAddDialog.setBranchName(suggestedName);
|
||||
branchAddDialog.setTrackedBranchName(isTracked ? trackedBranch : QString(), !isLocal);
|
||||
branchAddDialog.setCheckoutVisible(true);
|
||||
|
||||
|
||||
@@ -1348,7 +1348,14 @@ QStringList GitClient::setupCheckoutArguments(const QString &workingDirectory,
|
||||
}
|
||||
}
|
||||
|
||||
const QString suggestedName = suggestedLocalBranchName(localBranches, remoteBranch);
|
||||
QString target = remoteBranch;
|
||||
BranchTargetType targetType = BranchTargetType::Remote;
|
||||
if (remoteBranch.isEmpty()) {
|
||||
target = ref;
|
||||
targetType = BranchTargetType::Commit;
|
||||
}
|
||||
const QString suggestedName = suggestedLocalBranchName(
|
||||
workingDirectory, localBranches, target, targetType);
|
||||
BranchAddDialog branchAddDialog(localBranches, BranchAddDialog::Type::AddBranch, ICore::dialogParent());
|
||||
branchAddDialog.setBranchName(suggestedName);
|
||||
branchAddDialog.setTrackedBranchName(remoteBranch, true);
|
||||
@@ -3679,14 +3686,25 @@ GitRemote::GitRemote(const QString &location) : Core::IVersionControl::RepoUrl(l
|
||||
isValid = QDir(path).exists() || QDir(path + ".git").exists();
|
||||
}
|
||||
|
||||
QString GitClient::suggestedLocalBranchName(const QStringList localNames,
|
||||
const QString trackedBranch)
|
||||
QString GitClient::suggestedLocalBranchName(
|
||||
const QString &workingDirectory,
|
||||
const QStringList &localNames,
|
||||
const QString &target,
|
||||
BranchTargetType targetType)
|
||||
{
|
||||
const QString suggestedNameBase = trackedBranch.mid(trackedBranch.lastIndexOf('/') + 1);
|
||||
QString suggestedName = suggestedNameBase;
|
||||
QString initialName;
|
||||
if (targetType == BranchTargetType::Remote) {
|
||||
initialName = target.mid(target.lastIndexOf('/') + 1);
|
||||
} else {
|
||||
QString subject;
|
||||
instance()->synchronousLog(workingDirectory, {"-n", "1", "--format=%s", target},
|
||||
&subject, nullptr, VcsCommand::NoOutput);
|
||||
initialName = subject.trimmed();
|
||||
}
|
||||
QString suggestedName = initialName;
|
||||
int i = 2;
|
||||
while (localNames.contains(suggestedName)) {
|
||||
suggestedName = suggestedNameBase + QString::number(i);
|
||||
suggestedName = initialName + QString::number(i);
|
||||
++i;
|
||||
}
|
||||
|
||||
|
||||
@@ -361,8 +361,10 @@ public:
|
||||
VcsBase::VcsCommand *asyncUpstreamStatus(const QString &workingDirectory,
|
||||
const QString &branch, const QString &upstream);
|
||||
|
||||
static QString suggestedLocalBranchName(const QStringList existingLocalNames,
|
||||
const QString trackedBranch);
|
||||
enum class BranchTargetType { Remote, Commit };
|
||||
static QString suggestedLocalBranchName(
|
||||
const QString &workingDirectory, const QStringList &existingLocalNames,
|
||||
const QString &target, BranchTargetType targetType);
|
||||
static void addChangeActions(QMenu *menu, const QString &workingDir, const QString &change);
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user