Git: Do not prompt to add files in a submodule

Fixes: QTCREATORBUG-23845
Change-Id: Ibf20eed26469b5a8599927e5ac2d458bbff9a156
Reviewed-by: André Hartmann <aha_1980@gmx.de>
This commit is contained in:
Orgad Shaneh
2020-09-27 16:01:14 +03:00
committed by Orgad Shaneh
parent c0b001737c
commit 48c56416f5
6 changed files with 34 additions and 29 deletions

View File

@@ -840,22 +840,30 @@ bool GitClient::managesFile(const QString &workingDirectory, const QString &file
== SynchronousProcessResponse::Finished;
}
QStringList GitClient::unmanagedFiles(const QString &workingDirectory,
const QStringList &filePaths) const
QStringList GitClient::unmanagedFiles(const QStringList &filePaths) const
{
QStringList args({"ls-files", "-z"});
QDir wd(workingDirectory);
args << transform(filePaths, [&wd](const QString &fp) { return wd.relativeFilePath(fp); });
const SynchronousProcessResponse response
= vcsFullySynchronousExec(workingDirectory, args, Core::ShellCommand::NoOutput);
if (response.result != SynchronousProcessResponse::Finished)
return filePaths;
const QStringList managedFilePaths
= transform(response.stdOut().split('\0', Qt::SkipEmptyParts),
[&wd](const QString &fp) { return wd.absoluteFilePath(fp); });
return filtered(filePaths, [&managedFilePaths](const QString &fp) {
return !managedFilePaths.contains(fp);
});
QMap<QString, QStringList> filesForDir;
for (const QString &filePath : filePaths) {
const FilePath fp = FilePath::fromString(filePath);
filesForDir[fp.parentDir().toString()] << fp.fileName();
}
QStringList res;
for (auto it = filesForDir.begin(), end = filesForDir.end(); it != end; ++it) {
QStringList args({"ls-files", "-z"});
const QDir wd(it.key());
args << transform(it.value(), [&wd](const QString &fp) { return wd.relativeFilePath(fp); });
const SynchronousProcessResponse response
= vcsFullySynchronousExec(it.key(), args, Core::ShellCommand::NoOutput);
if (response.result != SynchronousProcessResponse::Finished)
return filePaths;
const QStringList managedFilePaths
= transform(response.stdOut().split('\0', Qt::SkipEmptyParts),
[&wd](const QString &fp) { return wd.absoluteFilePath(fp); });
res += filtered(it.value(), [&managedFilePaths, &wd](const QString &fp) {
return !managedFilePaths.contains(wd.absoluteFilePath(fp));
});
}
return res;
}
QTextCodec *GitClient::codecFor(GitClient::CodecType codecType, const QString &source) const

View File

@@ -152,7 +152,7 @@ public:
QString findRepositoryForDirectory(const QString &directory) const;
QString findGitDirForRepository(const QString &repositoryDir) const;
bool managesFile(const QString &workingDirectory, const QString &fileName) const;
QStringList unmanagedFiles(const QString &workingDirectory, const QStringList &filePaths) const;
QStringList unmanagedFiles(const QStringList &filePaths) const;
void diffFile(const QString &workingDirectory, const QString &fileName) const;
void diffFiles(const QString &workingDirectory,

View File

@@ -239,7 +239,7 @@ public:
bool managesDirectory(const QString &directory, QString *topLevel) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
QStringList unmanagedFiles(const QString &workingDir, const QStringList &filePaths) const final;
QStringList unmanagedFiles(const QStringList &filePaths) const final;
bool isConfigured() const final;
bool supportsOperation(Operation operation) const final;
@@ -1950,10 +1950,9 @@ bool GitPluginPrivate::managesFile(const QString &workingDirectory, const QStrin
return m_gitClient.managesFile(workingDirectory, fileName);
}
QStringList GitPluginPrivate::unmanagedFiles(const QString &workingDir,
const QStringList &filePaths) const
QStringList GitPluginPrivate::unmanagedFiles(const QStringList &filePaths) const
{
return m_gitClient.unmanagedFiles(workingDir, filePaths);
return m_gitClient.unmanagedFiles(filePaths);
}
void GitPluginPrivate::vcsAnnotate(const QString &file, int line)