aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/gitclient.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2010-08-06 10:46:50 +0200
committerFriedemann Kleint <[email protected]>2010-08-06 10:46:50 +0200
commit7e739985b25b16af504adb280685c961afbcbcc8 (patch)
tree4bd678eaaac49ed580d2ad091c218961a5d08081 /src/plugins/git/gitclient.cpp
parent077c9181863e0036ae16772530cd2624af9e7b78 (diff)
parent9bad0c01bec3547324bf9340497fb956467a9531 (diff)
Merge remote branch 'origin/2.0'
Conflicts: src/plugins/debugger/debuggeruiswitcher.cpp src/plugins/git/gitclient.cpp src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp
Diffstat (limited to 'src/plugins/git/gitclient.cpp')
-rw-r--r--src/plugins/git/gitclient.cpp28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 2312e47a6ba..fb8393b5dd6 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -600,18 +600,22 @@ bool GitClient::synchronousInit(const QString &workingDirectory)
bool GitClient::synchronousCheckoutFiles(const QString &workingDirectory,
QStringList files /* = QStringList() */,
QString revision /* = QString() */,
- QString *errorMessage /* = 0 */)
+ QString *errorMessage /* = 0 */,
+ bool revertStaging /* = true */)
{
if (Git::Constants::debug)
qDebug() << Q_FUNC_INFO << workingDirectory << files;
- if (revision.isEmpty())
+ if (revertStaging && revision.isEmpty())
revision = QLatin1String("HEAD");
if (files.isEmpty())
files = QStringList(QString(QLatin1Char('.')));
QByteArray outputText;
QByteArray errorText;
QStringList arguments;
- arguments << QLatin1String("checkout") << revision << QLatin1String("--") << files;
+ arguments << QLatin1String("checkout");
+ if (revertStaging)
+ arguments << revision;
+ arguments << QLatin1String("--") << files;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText);
if (!rc) {
const QString fileArg = files.join(QLatin1String(", "));
@@ -1479,7 +1483,10 @@ bool GitClient::addAndCommit(const QString &repositoryDirectory,
* reverting a directory pending a sophisticated selection dialog in the
* VCSBase plugin. */
-GitClient::RevertResult GitClient::revertI(QStringList files, bool *ptrToIsDirectory, QString *errorMessage)
+GitClient::RevertResult GitClient::revertI(QStringList files,
+ bool *ptrToIsDirectory,
+ QString *errorMessage,
+ bool revertStaging)
{
if (Git::Constants::debug)
qDebug() << Q_FUNC_INFO << files;
@@ -1541,7 +1548,7 @@ GitClient::RevertResult GitClient::revertI(QStringList files, bool *ptrToIsDirec
if (Git::Constants::debug)
qDebug() << Q_FUNC_INFO << data.stagedFiles << data.unstagedFiles << allStagedFiles << allUnstagedFiles << stagedFiles << unstagedFiles;
- if (stagedFiles.empty() && unstagedFiles.empty())
+ if ((!revertStaging || stagedFiles.empty()) && unstagedFiles.empty())
return RevertUnchanged;
// Ask to revert (to do: Handle lists with a selection dialog)
@@ -1555,19 +1562,22 @@ GitClient::RevertResult GitClient::revertI(QStringList files, bool *ptrToIsDirec
return RevertCanceled;
// Unstage the staged files
- if (!stagedFiles.empty() && !synchronousReset(repoDirectory, stagedFiles, errorMessage))
+ if (revertStaging && !stagedFiles.empty() && !synchronousReset(repoDirectory, stagedFiles, errorMessage))
return RevertFailed;
+ QStringList filesToRevert = unstagedFiles;
+ if (revertStaging)
+ filesToRevert += stagedFiles;
// Finally revert!
- if (!synchronousCheckoutFiles(repoDirectory, stagedFiles + unstagedFiles, QString(), errorMessage))
+ if (!synchronousCheckoutFiles(repoDirectory, filesToRevert, QString(), errorMessage, revertStaging))
return RevertFailed;
return RevertOk;
}
-void GitClient::revert(const QStringList &files)
+void GitClient::revert(const QStringList &files, bool revertStaging)
{
bool isDirectory;
QString errorMessage;
- switch (revertI(files, &isDirectory, &errorMessage)) {
+ switch (revertI(files, &isDirectory, &errorMessage, revertStaging)) {
case RevertOk:
m_plugin->gitVersionControl()->emitFilesChanged(files);
break;