From c07e1f7fc16a5b8532c6975257edc499baaffedc Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Mon, 11 Jan 2010 15:43:08 +0100
Subject: [PATCH] Mercurial: Fixed committing untracked files.

by passing -A (plus security check).
---
 src/plugins/mercurial/mercurialclient.cpp | 11 +++++++++--
 src/plugins/mercurial/mercurialclient.h   |  7 +++++--
 src/plugins/mercurial/mercurialplugin.cpp |  2 +-
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp
index 2e15c6a8cd5..205cf76021d 100644
--- a/src/plugins/mercurial/mercurialclient.cpp
+++ b/src/plugins/mercurial/mercurialclient.cpp
@@ -515,12 +515,19 @@ void MercurialClient::update(const QString &repositoryRoot, const QString &revis
 }
 
 void MercurialClient::commit(const QString &repositoryRoot, const QStringList &files,
-                             const QString &committerInfo, const QString &commitMessageFile)
+                             const QString &committerInfo, const QString &commitMessageFile,
+                             bool autoAddRemove)
 {
+    // refuse to do "autoadd" on a commit with working directory only, as this will
+    // add all the untracked stuff.
+    QTC_ASSERT(!(autoAddRemove && files.isEmpty()), return)
     QStringList args(QLatin1String("commit"));
     if (!committerInfo.isEmpty())
         args << QLatin1String("-u") << committerInfo;
-    args << QLatin1String("-l") << commitMessageFile << files;
+    args << QLatin1String("-l") << commitMessageFile;
+    if (autoAddRemove)
+        args << QLatin1String("-A");
+    args << files;
     QSharedPointer<HgTask> job(new HgTask(repositoryRoot, args, false));
     enqueueJob(job);
 }
diff --git a/src/plugins/mercurial/mercurialclient.h b/src/plugins/mercurial/mercurialclient.h
index 53fc0e58d0c..8dbfb073c9c 100644
--- a/src/plugins/mercurial/mercurialclient.h
+++ b/src/plugins/mercurial/mercurialclient.h
@@ -89,8 +89,11 @@ public:
     void revertFile(const QString &workingDir, const QString &file, const QString &revision = QString());
     void revertRepository(const QString &workingDir, const QString &revision = QString());
     void update(const QString &repositoryRoot, const QString &revision = QString());
-    void commit(const QString &repositoryRoot, const QStringList &files,
-                const QString &commiterInfo, const QString &commitMessageFile);
+    void commit(const QString &repositoryRoot,
+                const QStringList &files,
+                const QString &commiterInfo,
+                const QString &commitMessageFile,
+                bool autoAddRemove = false);
 
     static QString findTopLevelForFile(const QFileInfo &file);
 
diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp
index 009d44375c6..6da681bc283 100644
--- a/src/plugins/mercurial/mercurialplugin.cpp
+++ b/src/plugins/mercurial/mercurialplugin.cpp
@@ -634,7 +634,7 @@ bool MercurialPlugin::submitEditorAboutToClose(VCSBase::VCSBaseSubmitEditor *sub
         core->fileManager()->unblockFileChange(editorFile);
 
         m_client->commit(commitEditor->repoRoot(), files, commitEditor->committerInfo(),
-                       editorFile->fileName());
+                       editorFile->fileName(), true);
     }
     return true;
 }
-- 
GitLab