From 11e21e16c17964f7734ef9c8b97e3225553b891a Mon Sep 17 00:00:00 2001 From: Tobias Hunger <tobias.hunger@nokia.com> Date: Mon, 20 Dec 2010 10:24:35 +0100 Subject: [PATCH] Git: Improve handling of git submodules Task-number: QTCREATORBUG-3390 --- src/plugins/git/commitdata.cpp | 66 ++++++++++++++++++---------------- src/plugins/git/gitclient.cpp | 2 ++ 2 files changed, 37 insertions(+), 31 deletions(-) diff --git a/src/plugins/git/commitdata.cpp b/src/plugins/git/commitdata.cpp index 71275202537..b1307515ff8 100644 --- a/src/plugins/git/commitdata.cpp +++ b/src/plugins/git/commitdata.cpp @@ -156,39 +156,43 @@ bool CommitData::parseFilesFromStatus(const QString &output) const QStringList::const_iterator cend = lines.constEnd(); for (QStringList::const_iterator it = lines.constBegin(); it != cend; ++it) { - const QString line = *it; + QString line = *it; if (line.startsWith(branchIndicator)) { panelInfo.branch = line.mid(branchIndicator.size() + 1); - } else { - if (line.startsWith(commitIndicator)) { - s = CommitFiles; - } else { - if (line.startsWith(notUpdatedIndicator)) { - s = NotUpdatedFiles; - } else { - if (line.startsWith(untrackedIndicator)) { - // Now match untracked: "#<tab>foo.cpp" - s = UntrackedFiles; - filesPattern = QRegExp(QLatin1String("#\\t.+")); - QTC_ASSERT(filesPattern.isValid(), return false); - } else { - if (filesPattern.exactMatch(line)) { - switch (s) { - case CommitFiles: - addStateFileSpecification(line, &stagedFiles); - break; - case NotUpdatedFiles: - addStateFileSpecification(line, &unstagedFiles); - break; - case UntrackedFiles: - untrackedFiles.push_back(line.mid(2).trimmed()); - break; - case None: - break; - } - } - } - } + continue; + } + if (line.startsWith(commitIndicator)) { + s = CommitFiles; + continue; + } + if (line.startsWith(notUpdatedIndicator)) { + s = NotUpdatedFiles; + continue; + } + if (line.startsWith(untrackedIndicator)) { + // Now match untracked: "#<tab>foo.cpp" + s = UntrackedFiles; + filesPattern = QRegExp(QLatin1String("#\\t.+")); + QTC_ASSERT(filesPattern.isValid(), return false); + continue; + } + if (filesPattern.exactMatch(line)) { + switch (s) { + case CommitFiles: + addStateFileSpecification(line, &stagedFiles); + break; + case NotUpdatedFiles: + // skip submodules: + if (line.endsWith(QLatin1String(" (modified content)")) + || line.endsWith(" (new commits)")) + line = line.left(line.lastIndexOf(QLatin1Char('(')) - 1); + addStateFileSpecification(line, &unstagedFiles); + break; + case UntrackedFiles: + untrackedFiles.push_back(line.mid(2).trimmed()); + break; + case None: + break; } } } diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index be02c7fadb4..fce5c71102e 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1801,6 +1801,8 @@ bool GitClient::getCommitData(const QString &workingDirectory, // # (use "git add <file>..." to update what will be committed) // # // # modified: someother.cpp + // # modified: submodule (modified content) + // # modified: submodule2 (new commit) // # // # Untracked files: // # (use "git add <file>..." to include in what will be committed) -- GitLab