Git: Update status on upstream change in branch view

When a new tracking branch was selected, the
branch view  still showed the old ahead/behind
information.

Change-Id: Ic4a201da0ec38788a02ef03770a30cca6528ceb3
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Andre Hartmann
2019-12-26 18:14:04 +01:00
committed by André Hartmann
parent acd1d6c438
commit 4c5cf6bc86
2 changed files with 18 additions and 11 deletions

View File

@@ -731,6 +731,7 @@ void BranchModel::setRemoteTracking(const QModelIndex &trackingIndex)
const QString tracking = fullName(trackingIndex, true); const QString tracking = fullName(trackingIndex, true);
d->client->synchronousSetTrackingBranch(d->workingDirectory, currentName, tracking); d->client->synchronousSetTrackingBranch(d->workingDirectory, currentName, tracking);
d->currentBranch->tracking = shortTracking; d->currentBranch->tracking = shortTracking;
updateUpstreamStatus(d->currentBranch);
emit dataChanged(current, current); emit dataChanged(current, current);
} }
@@ -840,17 +841,7 @@ void BranchModel::Private::parseOutputLine(const QString &line, bool force)
root->insert(nameParts, newNode); root->insert(nameParts, newNode);
if (current) if (current)
currentBranch = newNode; currentBranch = newNode;
if (newNode->tracking.isEmpty()) q->updateUpstreamStatus(newNode);
return;
VcsCommand *command = client->asyncUpstreamStatus(workingDirectory, newNode->name, newNode->tracking);
QObject::connect(command, &VcsCommand::stdOutText, newNode, [this, newNode](const QString &text) {
const QStringList split = text.trimmed().split('\t');
QTC_ASSERT(split.size() == 2, return);
newNode->setUpstreamStatus(UpstreamStatus(split.at(0).toInt(), split.at(1).toInt()));
const QModelIndex idx = q->nodeToIndex(newNode, 0);
emit q->dataChanged(idx, idx);
});
} }
void BranchModel::Private::flushOldEntries() void BranchModel::Private::flushOldEntries()
@@ -898,6 +889,21 @@ void BranchModel::removeNode(const QModelIndex &idx)
} }
} }
void BranchModel::updateUpstreamStatus(BranchNode *node)
{
if (node->tracking.isEmpty())
return;
VcsCommand *command = d->client->asyncUpstreamStatus(d->workingDirectory, node->name, node->tracking);
QObject::connect(command, &VcsCommand::stdOutText, node, [this, node](const QString &text) {
const QStringList split = text.trimmed().split('\t');
QTC_ASSERT(split.size() == 2, return);
node->setUpstreamStatus(UpstreamStatus(split.at(0).toInt(), split.at(1).toInt()));
const QModelIndex idx = nodeToIndex(node, 0);
emit dataChanged(idx, idx);
});
}
QString BranchModel::toolTip(const QString &sha) const QString BranchModel::toolTip(const QString &sha) const
{ {
// Show the sha description excluding diff as toolTip // Show the sha description excluding diff as toolTip

View File

@@ -92,6 +92,7 @@ private:
BranchNode *indexToNode(const QModelIndex &index) const; BranchNode *indexToNode(const QModelIndex &index) const;
QModelIndex nodeToIndex(BranchNode *node, int column) const; QModelIndex nodeToIndex(BranchNode *node, int column) const;
void removeNode(const QModelIndex &idx); void removeNode(const QModelIndex &idx);
void updateUpstreamStatus(BranchNode *node);
QString toolTip(const QString &sha) const; QString toolTip(const QString &sha) const;