summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/git/branchdialog.cpp5
-rw-r--r--src/plugins/git/gitclient.cpp3
-rw-r--r--src/plugins/git/gitclient.h1
-rw-r--r--src/plugins/git/gitversioncontrol.cpp2
-rw-r--r--src/plugins/git/stashdialog.cpp4
5 files changed, 7 insertions, 8 deletions
diff --git a/src/plugins/git/branchdialog.cpp b/src/plugins/git/branchdialog.cpp
index 65132e6d5a..dc25d9da01 100644
--- a/src/plugins/git/branchdialog.cpp
+++ b/src/plugins/git/branchdialog.cpp
@@ -207,10 +207,7 @@ void BranchDialog::checkout()
if (!stashMessage.isEmpty() && branchCheckoutDialog.moveLocalChangesToNextBranch())
gitClient->stashPop(m_repository);
else if (branchCheckoutDialog.popStashOfNextBranch())
- gitClient->synchronousStashRestore(m_repository, stashName);
-
- if (branchCheckoutDialog.hasStashForNextBranch())
- gitClient->synchronousStashRemove(m_repository, stashName);
+ gitClient->synchronousStashRestore(m_repository, stashName, true);
}
enableButtons();
}
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 10fb74785d..1fb2a931a0 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -2282,12 +2282,13 @@ void GitClient::stashPop(const QString &workingDirectory)
bool GitClient::synchronousStashRestore(const QString &workingDirectory,
const QString &stash,
+ bool pop,
const QString &branch /* = QString()*/,
QString *errorMessage)
{
QStringList arguments(QLatin1String("stash"));
if (branch.isEmpty())
- arguments << QLatin1String("apply") << stash;
+ arguments << QLatin1String(pop ? "pop" : "apply") << stash;
else
arguments << QLatin1String("branch") << branch << stash;
QByteArray outputText;
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 72e8c74dd5..c589da0f46 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -150,6 +150,7 @@ public:
QString *errorMessage = 0);
bool synchronousStashRestore(const QString &workingDirectory,
const QString &stash,
+ bool pop = false,
const QString &branch = QString(),
QString *errorMessage = 0);
bool synchronousStashRemove(const QString &workingDirectory,
diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp
index 013a6c9e1d..752c607ba7 100644
--- a/src/plugins/git/gitversioncontrol.cpp
+++ b/src/plugins/git/gitversioncontrol.cpp
@@ -218,7 +218,7 @@ bool GitVersionControl::vcsRestoreSnapshot(const QString &topLevel, const QStrin
QString stashName;
success = m_client->stashNameFromMessage(topLevel, name, &stashName)
&& m_client->synchronousReset(topLevel)
- && m_client->synchronousStashRestore(topLevel, stashName);
+ && m_client->synchronousStashRestore(topLevel, stashName, true);
}
} while (false);
return success;
diff --git a/src/plugins/git/stashdialog.cpp b/src/plugins/git/stashdialog.cpp
index c12d491b60..a4c2d3ffdd 100644
--- a/src/plugins/git/stashdialog.cpp
+++ b/src/plugins/git/stashdialog.cpp
@@ -338,7 +338,7 @@ void StashDialog::restoreCurrent()
// Make sure repository is not modified, restore. The command will
// output to window on success.
const bool success = promptForRestore(&name, 0, &errorMessage)
- && gitClient()->synchronousStashRestore(m_repository, name, QString(), &errorMessage);
+ && gitClient()->synchronousStashRestore(m_repository, name, false, QString(), &errorMessage);
if (success) {
refresh(m_repository, true); // Might have stashed away local changes.
} else {
@@ -355,7 +355,7 @@ void StashDialog::restoreCurrentInBranch()
QString branch;
QString name = m_model->at(index).name;
const bool success = promptForRestore(&name, &branch, &errorMessage)
- && gitClient()->synchronousStashRestore(m_repository, name, branch, &errorMessage);
+ && gitClient()->synchronousStashRestore(m_repository, name, false, branch, &errorMessage);
if (success) {
refresh(m_repository, true); // git deletes the stash, unfortunately.
} else {