diff options
author | Friedemann Kleint <[email protected]> | 2009-01-09 17:52:41 +0100 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2009-01-09 17:52:41 +0100 |
commit | 05033a9d36b16ff572394cc504b4489c7f0116de (patch) | |
tree | 6006a53a986c75705d3a9e46c9f1e76c393f2959 /src/plugins/git/gitclient.cpp | |
parent | fb93fdaea2ace69c8ffc81ecf6ced754e3119dae (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.cpp | 47 |
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; |