forked from qt-creator/qt-creator
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:
committed by
Orgad Shaneh
parent
c0b001737c
commit
48c56416f5
@@ -161,11 +161,11 @@ IVersionControl::~IVersionControl()
|
|||||||
delete m_topicCache;
|
delete m_topicCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList IVersionControl::unmanagedFiles(const QString &workingDir,
|
QStringList IVersionControl::unmanagedFiles(const QStringList &filePaths) const
|
||||||
const QStringList &filePaths) const
|
|
||||||
{
|
{
|
||||||
return Utils::filtered(filePaths, [wd = QDir(workingDir), this](const QString &f) {
|
return Utils::filtered(filePaths, [this](const QString &f) {
|
||||||
return !managesFile(wd.path(), wd.relativeFilePath(f));
|
const Utils::FilePath fp = Utils::FilePath::fromString(f);
|
||||||
|
return !managesFile(fp.parentDir().toString(), fp.fileName());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -128,11 +128,9 @@ public:
|
|||||||
/*!
|
/*!
|
||||||
* Returns the subset of \a filePaths that is not managed by this version control.
|
* Returns the subset of \a filePaths that is not managed by this version control.
|
||||||
*
|
*
|
||||||
* \a workingDirectory is assumed to be part of a valid repository (not necessarily its
|
* The \a filePaths are expected to be absolute paths.
|
||||||
* top level). The \a filePaths are expected to be absolute paths.
|
|
||||||
*/
|
*/
|
||||||
virtual QStringList unmanagedFiles(const QString &workingDir,
|
virtual QStringList unmanagedFiles(const QStringList &filePaths) const;
|
||||||
const QStringList &filePaths) const;
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Returns true is the VCS is configured to run.
|
* Returns true is the VCS is configured to run.
|
||||||
|
@@ -436,7 +436,7 @@ void VcsManager::promptToAdd(const QString &directory, const QStringList &fileNa
|
|||||||
if (!vc || !vc->supportsOperation(IVersionControl::AddOperation))
|
if (!vc || !vc->supportsOperation(IVersionControl::AddOperation))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const QStringList unmanagedFiles = vc->unmanagedFiles(directory, fileNames);
|
const QStringList unmanagedFiles = vc->unmanagedFiles(fileNames);
|
||||||
if (unmanagedFiles.isEmpty())
|
if (unmanagedFiles.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@@ -840,22 +840,30 @@ bool GitClient::managesFile(const QString &workingDirectory, const QString &file
|
|||||||
== SynchronousProcessResponse::Finished;
|
== SynchronousProcessResponse::Finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList GitClient::unmanagedFiles(const QString &workingDirectory,
|
QStringList GitClient::unmanagedFiles(const QStringList &filePaths) const
|
||||||
const QStringList &filePaths) const
|
|
||||||
{
|
{
|
||||||
|
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"});
|
QStringList args({"ls-files", "-z"});
|
||||||
QDir wd(workingDirectory);
|
const QDir wd(it.key());
|
||||||
args << transform(filePaths, [&wd](const QString &fp) { return wd.relativeFilePath(fp); });
|
args << transform(it.value(), [&wd](const QString &fp) { return wd.relativeFilePath(fp); });
|
||||||
const SynchronousProcessResponse response
|
const SynchronousProcessResponse response
|
||||||
= vcsFullySynchronousExec(workingDirectory, args, Core::ShellCommand::NoOutput);
|
= vcsFullySynchronousExec(it.key(), args, Core::ShellCommand::NoOutput);
|
||||||
if (response.result != SynchronousProcessResponse::Finished)
|
if (response.result != SynchronousProcessResponse::Finished)
|
||||||
return filePaths;
|
return filePaths;
|
||||||
const QStringList managedFilePaths
|
const QStringList managedFilePaths
|
||||||
= transform(response.stdOut().split('\0', Qt::SkipEmptyParts),
|
= transform(response.stdOut().split('\0', Qt::SkipEmptyParts),
|
||||||
[&wd](const QString &fp) { return wd.absoluteFilePath(fp); });
|
[&wd](const QString &fp) { return wd.absoluteFilePath(fp); });
|
||||||
return filtered(filePaths, [&managedFilePaths](const QString &fp) {
|
res += filtered(it.value(), [&managedFilePaths, &wd](const QString &fp) {
|
||||||
return !managedFilePaths.contains(fp);
|
return !managedFilePaths.contains(wd.absoluteFilePath(fp));
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
QTextCodec *GitClient::codecFor(GitClient::CodecType codecType, const QString &source) const
|
QTextCodec *GitClient::codecFor(GitClient::CodecType codecType, const QString &source) const
|
||||||
|
@@ -152,7 +152,7 @@ public:
|
|||||||
QString findRepositoryForDirectory(const QString &directory) const;
|
QString findRepositoryForDirectory(const QString &directory) const;
|
||||||
QString findGitDirForRepository(const QString &repositoryDir) const;
|
QString findGitDirForRepository(const QString &repositoryDir) const;
|
||||||
bool managesFile(const QString &workingDirectory, const QString &fileName) 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 diffFile(const QString &workingDirectory, const QString &fileName) const;
|
||||||
void diffFiles(const QString &workingDirectory,
|
void diffFiles(const QString &workingDirectory,
|
||||||
|
@@ -239,7 +239,7 @@ public:
|
|||||||
|
|
||||||
bool managesDirectory(const QString &directory, QString *topLevel) const final;
|
bool managesDirectory(const QString &directory, QString *topLevel) const final;
|
||||||
bool managesFile(const QString &workingDirectory, const QString &fileName) 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 isConfigured() const final;
|
||||||
bool supportsOperation(Operation operation) 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);
|
return m_gitClient.managesFile(workingDirectory, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList GitPluginPrivate::unmanagedFiles(const QString &workingDir,
|
QStringList GitPluginPrivate::unmanagedFiles(const QStringList &filePaths) const
|
||||||
const QStringList &filePaths) const
|
|
||||||
{
|
{
|
||||||
return m_gitClient.unmanagedFiles(workingDir, filePaths);
|
return m_gitClient.unmanagedFiles(filePaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GitPluginPrivate::vcsAnnotate(const QString &file, int line)
|
void GitPluginPrivate::vcsAnnotate(const QString &file, int line)
|
||||||
|
Reference in New Issue
Block a user