aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/gitclient.cpp
diff options
context:
space:
mode:
authorcon <[email protected]>2010-06-30 14:25:09 +0200
committercon <[email protected]>2010-06-30 14:25:09 +0200
commitede2a7c97599886aa0ce7d36502b8d7966d78a77 (patch)
tree194495903d59c542d5db00c8bcc18710fdc7b3eb /src/plugins/git/gitclient.cpp
parent82cc4b430209bbdfccc4acecc4253327870fb161 (diff)
parent21b211fed0ae36de57dbfb9ca60239dd259b9a60 (diff)
Merge remote branch 'origin/2.0'
Conflicts: doc/qtcreator.qdoc share/qtcreator/gdbmacros/dumper.py src/libs/qmljs/qmljs-lib.pri src/plugins/debugger/breakhandler.cpp src/plugins/projectexplorer/projectexplorer.h src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.h
Diffstat (limited to 'src/plugins/git/gitclient.cpp')
-rw-r--r--src/plugins/git/gitclient.cpp31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index ef098ccb05c..58d41653b85 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -557,7 +557,10 @@ bool GitClient::synchronousReset(const QString &workingDirectory,
outputWindow()->append(output);
// Note that git exits with 1 even if the operation is successful
// Assume real failure if the output does not contain "foo.cpp modified"
- if (!rc && !output.contains(QLatin1String("modified"))) {
+ // or "Unstaged changes after reset" (git 1.7.0).
+ if (!rc &&
+ (!output.contains(QLatin1String("modified"))
+ && !output.contains(QLatin1String("Unstaged changes after reset")))) {
const QString stdErr = commandOutputFromLocal8Bit(errorText);
const QString msg = files.isEmpty() ?
tr("Unable to reset %1: %2").arg(workingDirectory, stdErr) :
@@ -1413,17 +1416,35 @@ bool GitClient::addAndCommit(const QString &repositoryDirectory,
{
if (Git::Constants::debug)
qDebug() << "GitClient::addAndCommit:" << repositoryDirectory << checkedFiles << origCommitFiles;
+ const QString renamedSeparator = QLatin1String(" -> ");
// Do we need to reset any files that had been added before
// (did the user uncheck any previously added files)
- const QSet<QString> resetFiles = origCommitFiles.toSet().subtract(checkedFiles.toSet());
- if (!resetFiles.empty())
- if (!synchronousReset(repositoryDirectory, resetFiles.toList()))
+ // Split up renamed files ('foo.cpp -> foo2.cpp').
+ QStringList resetFiles = origCommitFiles.toSet().subtract(checkedFiles.toSet()).toList();
+ for (QStringList::iterator it = resetFiles.begin(); it != resetFiles.end(); ++it) {
+ const int renamedPos = it->indexOf(renamedSeparator);
+ if (renamedPos != -1) {
+ const QString newFile = it->mid(renamedPos + renamedSeparator.size());
+ it->truncate(renamedPos);
+ it = resetFiles.insert(++it, newFile);
+ }
+ }
+
+ if (!resetFiles.isEmpty())
+ if (!synchronousReset(repositoryDirectory, resetFiles))
return false;
// Re-add all to make sure we have the latest changes, but only add those that aren't marked
- // for deletion
+ // for deletion. Purge out renamed files ('foo.cpp -> foo2.cpp').
QStringList addFiles = checkedFiles.toSet().subtract(origDeletedFiles.toSet()).toList();
+ for (QStringList::iterator it = addFiles.begin(); it != addFiles.end(); ) {
+ if (it->contains(renamedSeparator)) {
+ it = addFiles.erase(it);
+ } else {
+ ++it;
+ }
+ }
if (!addFiles.isEmpty())
if (!synchronousAdd(repositoryDirectory, false, addFiles))
return false;