summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2013-01-22 21:10:43 +0200
committerOrgad Shaneh <orgad.shaneh@audiocodes.com>2013-01-24 12:32:17 +0100
commitc670a66fe10e20c92f9a7a40d68722f28b3af62b (patch)
tree67e9cbe740f0bfe85ba7ce7ed3baa1944d48b977
parent63439a5f2164d608f552913d976cd492f331a8da (diff)
downloadqt-creator-c670a66fe10e20c92f9a7a40d68722f28b3af62b.tar.gz
Git: Explicitly pop stored stashes
If the user created another stashed between save and pop, this stash will be restored instead of the intended one. Change-Id: I605c9f440345d8c7e0876f4f60daa7146bebb212 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r--src/plugins/git/branchdialog.cpp8
-rw-r--r--src/plugins/git/gitclient.cpp9
-rw-r--r--src/plugins/git/gitclient.h1
3 files changed, 13 insertions, 5 deletions
diff --git a/src/plugins/git/branchdialog.cpp b/src/plugins/git/branchdialog.cpp
index e017b39889..d6f7bc2096 100644
--- a/src/plugins/git/branchdialog.cpp
+++ b/src/plugins/git/branchdialog.cpp
@@ -261,8 +261,8 @@ void BranchDialog::merge()
if (gitClient->gitStatus(m_repository, StatusMode(NoUntracked | NoSubmodules)) == GitClient::StatusChanged)
gitClient->ensureStash(m_repository, QLatin1String("merge"), false, &stashMessage);
- if (gitClient->synchronousMerge(m_repository, branch) && (!stashMessage.isEmpty()))
- gitClient->stashPop(m_repository);
+ if (gitClient->synchronousMerge(m_repository, branch) && !stashMessage.isEmpty())
+ gitClient->stashPop(m_repository, stashMessage);
}
void BranchDialog::rebase()
@@ -278,8 +278,8 @@ void BranchDialog::rebase()
if (gitClient->gitStatus(m_repository, StatusMode(NoUntracked | NoSubmodules)) == GitClient::StatusChanged)
gitClient->ensureStash(m_repository, QLatin1String("rebase"), false, &stashMessage);
- if (gitClient->synchronousRebase(m_repository, baseBranch) && (!stashMessage.isEmpty()))
- gitClient->stashPop(m_repository);
+ if (gitClient->synchronousRebase(m_repository, baseBranch) && !stashMessage.isEmpty())
+ gitClient->stashPop(m_repository, stashMessage);
}
void BranchDialog::changeEvent(QEvent *e)
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index f1418121a6..1a82c4c4a7 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -2277,14 +2277,21 @@ QString GitClient::msgNoChangedFiles()
return tr("There are no modified files.");
}
-void GitClient::stashPop(const QString &workingDirectory)
+void GitClient::stashPop(const QString &workingDirectory, const QString &stash)
{
QStringList arguments(QLatin1String("stash"));
arguments << QLatin1String("pop");
+ if (!stash.isEmpty())
+ arguments << stash;
VcsBase::Command *cmd = executeGit(workingDirectory, arguments, 0, true);
connectRepositoryChanged(workingDirectory, cmd);
}
+void GitClient::stashPop(const QString &workingDirectory)
+{
+ stashPop(workingDirectory, QString());
+}
+
bool GitClient::synchronousStashRestore(const QString &workingDirectory,
const QString &stash,
bool pop,
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 9b002c683b..9e2469c5c6 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -193,6 +193,7 @@ public:
void synchronousSubversionFetch(const QString &workingDirectory);
void subversionLog(const QString &workingDirectory);
+ void stashPop(const QString &workingDirectory, const QString &stash);
void stashPop(const QString &workingDirectory);
void revert(const QStringList &files, bool revertStaging);
void branchList(const QString &workingDirectory);