aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/gitclient.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2009-01-09 17:52:41 +0100
committerFriedemann Kleint <[email protected]>2009-01-09 17:52:41 +0100
commit05033a9d36b16ff572394cc504b4489c7f0116de (patch)
tree6006a53a986c75705d3a9e46c9f1e76c393f2959 /src/plugins/git/gitclient.cpp
parentfb93fdaea2ace69c8ffc81ecf6ced754e3119dae (diff)
Fixes: Show untracked files in git submit dialog
Details: Move routine to get project file list into VCSBase, use it in p4 and git to filter submit lists.
Diffstat (limited to 'src/plugins/git/gitclient.cpp')
-rw-r--r--src/plugins/git/gitclient.cpp47
1 files changed, 37 insertions, 10 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index f3d507171d2..281a9572a21 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -65,8 +65,6 @@ const char *const kGitCommand = "git";
const char *const kGitDirectoryC = ".git";
const char *const kBranchIndicatorC = "# On branch";
-enum { untrackedFilesInCommit = 0 };
-
static inline QString msgServerFailure()
{
return GitClient::tr(
@@ -631,7 +629,7 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory,
# Changed but not updated:
#<tab>modified:<blanks>git.pro
# Untracked files:
- #<tab>modified:<blanks>git.pro
+ #<tab>git.pro
\endcode
*/
static bool parseFiles(const QString &output, CommitData *d)
@@ -677,7 +675,7 @@ static bool parseFiles(const QString &output, CommitData *d)
d->unstagedFiles.push_back(trimFileSpecification(fileSpec));
break;
case UntrackedFiles:
- d->untrackedFiles.push_back(QLatin1String("untracked: ") + fileSpec);
+ d->untrackedFiles.push_back(fileSpec);
break;
case None:
break;
@@ -691,6 +689,25 @@ static bool parseFiles(const QString &output, CommitData *d)
return !d->stagedFiles.empty() || !d->unstagedFiles.empty() || !d->untrackedFiles.empty();
}
+// Filter out untracked files that are not part of the project
+static void filterUntrackedFilesOfProject(const QString &repoDir, QStringList *l)
+{
+ if (l->empty())
+ return;
+ const QStringList nativeProjectFiles = VCSBase::VCSBaseSubmitEditor::currentProjectFiles(true);
+ if (nativeProjectFiles.empty())
+ return;
+ const QDir repoDirectory(repoDir);
+ for (QStringList::iterator it = l->begin(); it != l->end(); ) {
+ const QString path = QDir::toNativeSeparators(repoDirectory.absoluteFilePath(*it));
+ if (nativeProjectFiles.contains(path)) {
+ ++it;
+ } else {
+ it = l->erase(it);
+ }
+ }
+}
+
bool GitClient::getCommitData(const QString &workingDirectory,
QString *commitTemplate,
CommitData *d,
@@ -726,7 +743,7 @@ bool GitClient::getCommitData(const QString &workingDirectory,
// Run status. Note that it has exitcode 1 if there are no added files.
QString output;
- switch (gitStatus(repoDirectory, untrackedFilesInCommit, &output, errorMessage)) {
+ switch (gitStatus(repoDirectory, true, &output, errorMessage)) {
case StatusChanged:
break;
case StatusUnchanged:
@@ -758,6 +775,16 @@ bool GitClient::getCommitData(const QString &workingDirectory,
*errorMessage = msgParseFilesFailed();
return false;
}
+ // Filter out untracked files that are not part of the project and,
+ // for symmetry, insert the prefix "untracked:" (as "added:" or ":modified"
+ // for staged files).
+ filterUntrackedFilesOfProject(repoDirectory, &d->untrackedFiles);
+ if (!d->untrackedFiles.empty()) {
+ const QString untrackedPrefix = QLatin1String("untracked: ");
+ const QStringList::iterator pend = d->untrackedFiles.end();
+ for (QStringList::iterator it = d->untrackedFiles.begin(); it != pend; ++it)
+ it->insert(0, untrackedPrefix);
+ }
d->panelData.author = readConfigValue(workingDirectory, QLatin1String("user.name"));
d->panelData.email = readConfigValue(workingDirectory, QLatin1String("user.email"));
@@ -853,8 +880,8 @@ GitClient::RevertResult GitClient::revertI(QStringList files, bool *ptrToIsDirec
case StatusFailed:
return RevertFailed;
}
- CommitData d;
- if (!parseFiles(output, &d)) {
+ CommitData data;
+ if (!parseFiles(output, &data)) {
*errorMessage = msgParseFilesFailed();
return RevertFailed;
}
@@ -870,8 +897,8 @@ GitClient::RevertResult GitClient::revertI(QStringList files, bool *ptrToIsDirec
// From the status output, determine all modified [un]staged files.
const QString modifiedPattern = QLatin1String("modified: ");
- const QStringList allStagedFiles = GitSubmitEditor::statusListToFileList(d.stagedFiles.filter(modifiedPattern));
- const QStringList allUnstagedFiles = GitSubmitEditor::statusListToFileList(d.unstagedFiles.filter(modifiedPattern));
+ const QStringList allStagedFiles = GitSubmitEditor::statusListToFileList(data.stagedFiles.filter(modifiedPattern));
+ const QStringList allUnstagedFiles = GitSubmitEditor::statusListToFileList(data.unstagedFiles.filter(modifiedPattern));
// Unless a directory was passed, filter all modified files for the
// argument file list.
QStringList stagedFiles = allStagedFiles;
@@ -882,7 +909,7 @@ GitClient::RevertResult GitClient::revertI(QStringList files, bool *ptrToIsDirec
unstagedFiles = allUnstagedFiles.toSet().intersect(filesSet).toList();
}
if (Git::Constants::debug)
- qDebug() << Q_FUNC_INFO << d.stagedFiles << d.unstagedFiles << allStagedFiles << allUnstagedFiles << stagedFiles << unstagedFiles;
+ qDebug() << Q_FUNC_INFO << data.stagedFiles << data.unstagedFiles << allStagedFiles << allUnstagedFiles << stagedFiles << unstagedFiles;
if (stagedFiles.empty() && unstagedFiles.empty())
return RevertUnchanged;