aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <[email protected]>2021-07-30 16:46:27 +0200
committerhjk <[email protected]>2021-08-02 14:40:33 +0000
commitff57cb548d2c528a42fa2870b2486cddc08acfb7 (patch)
tree0c7f371818d436d79cd3d65fac1c98de4d2391bf
parent17f907da9bd73d9b1515cbdd269c93f0061b7071 (diff)
Vcs: Use more FilePath for file paths
Change-Id: I855cde65d034a9647972a7fddf1e8266d7ccfa88 Reviewed-by: Orgad Shaneh <[email protected]>
-rw-r--r--src/plugins/bazaar/bazaarclient.cpp20
-rw-r--r--src/plugins/bazaar/bazaarclient.h22
-rw-r--r--src/plugins/bazaar/bazaarplugin.cpp41
-rw-r--r--src/plugins/clearcase/clearcaseplugin.cpp257
-rw-r--r--src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp2
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp4
-rw-r--r--src/plugins/coreplugin/fileutils.cpp2
-rw-r--r--src/plugins/coreplugin/iversioncontrol.h2
-rw-r--r--src/plugins/coreplugin/vcsmanager.cpp21
-rw-r--r--src/plugins/coreplugin/vcsmanager.h6
-rw-r--r--src/plugins/cvs/cvsplugin.cpp125
-rw-r--r--src/plugins/git/branchmodel.cpp7
-rw-r--r--src/plugins/git/branchmodel.h5
-rw-r--r--src/plugins/git/branchview.cpp7
-rw-r--r--src/plugins/git/branchview.h8
-rw-r--r--src/plugins/git/changeselectiondialog.cpp20
-rw-r--r--src/plugins/git/changeselectiondialog.h6
-rw-r--r--src/plugins/git/commitdata.h4
-rw-r--r--src/plugins/git/gerrit/branchcombobox.cpp3
-rw-r--r--src/plugins/git/gerrit/branchcombobox.h6
-rw-r--r--src/plugins/git/gerrit/gerritdialog.cpp10
-rw-r--r--src/plugins/git/gerrit/gerritdialog.h10
-rw-r--r--src/plugins/git/gerrit/gerritplugin.cpp32
-rw-r--r--src/plugins/git/gerrit/gerritplugin.h4
-rw-r--r--src/plugins/git/gerrit/gerritpushdialog.cpp4
-rw-r--r--src/plugins/git/gerrit/gerritpushdialog.h6
-rw-r--r--src/plugins/git/gerrit/gerritremotechooser.cpp5
-rw-r--r--src/plugins/git/gerrit/gerritremotechooser.h6
-rw-r--r--src/plugins/git/gerrit/gerritserver.cpp6
-rw-r--r--src/plugins/git/gitclient.cpp389
-rw-r--r--src/plugins/git/gitclient.h259
-rw-r--r--src/plugins/git/giteditor.cpp9
-rw-r--r--src/plugins/git/giteditor.h7
-rw-r--r--src/plugins/git/gitgrep.cpp12
-rw-r--r--src/plugins/git/gitplugin.cpp97
-rw-r--r--src/plugins/git/gitplugin.h8
-rw-r--r--src/plugins/git/gitsubmiteditor.cpp9
-rw-r--r--src/plugins/git/gitsubmiteditor.h6
-rw-r--r--src/plugins/git/gitsubmiteditorwidget.cpp10
-rw-r--r--src/plugins/git/gitsubmiteditorwidget.h5
-rw-r--r--src/plugins/git/logchangedialog.cpp12
-rw-r--r--src/plugins/git/logchangedialog.h7
-rw-r--r--src/plugins/git/mergetool.cpp3
-rw-r--r--src/plugins/git/remotedialog.cpp4
-rw-r--r--src/plugins/git/remotedialog.h4
-rw-r--r--src/plugins/git/remotemodel.cpp6
-rw-r--r--src/plugins/git/remotemodel.h8
-rw-r--r--src/plugins/git/stashdialog.cpp6
-rw-r--r--src/plugins/git/stashdialog.h6
-rw-r--r--src/plugins/mercurial/mercurialclient.cpp96
-rw-r--r--src/plugins/mercurial/mercurialclient.h40
-rw-r--r--src/plugins/mercurial/mercurialeditor.cpp6
-rw-r--r--src/plugins/mercurial/mercurialplugin.cpp33
-rw-r--r--src/plugins/mercurial/srcdestdialog.cpp8
-rw-r--r--src/plugins/mercurial/srcdestdialog.h2
-rw-r--r--src/plugins/perforce/perforcechecker.cpp2
-rw-r--r--src/plugins/perforce/perforcechecker.h2
-rw-r--r--src/plugins/perforce/perforceplugin.cpp116
-rw-r--r--src/plugins/perforce/perforcesettings.cpp12
-rw-r--r--src/plugins/perforce/perforcesettings.h4
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp5
-rw-r--r--src/plugins/projectexplorer/projectmodels.cpp6
-rw-r--r--src/plugins/projectexplorer/projectnodes.cpp6
-rw-r--r--src/plugins/projectexplorer/projecttree.cpp2
-rw-r--r--src/plugins/projectexplorer/projectwizardpage.cpp3
-rw-r--r--src/plugins/projectexplorer/vcsannotatetaskhandler.cpp7
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp3
-rw-r--r--src/plugins/qmldesigner/documentmanager.cpp3
-rw-r--r--src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp3
-rw-r--r--src/plugins/subversion/subversionclient.cpp21
-rw-r--r--src/plugins/subversion/subversionclient.h21
-rw-r--r--src/plugins/subversion/subversionplugin.cpp98
-rw-r--r--src/plugins/vcsbase/vcsbaseclient.cpp78
-rw-r--r--src/plugins/vcsbase/vcsbaseclient.h102
-rw-r--r--src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp2
-rw-r--r--src/plugins/vcsbase/vcsbaseeditor.cpp45
-rw-r--r--src/plugins/vcsbase/vcsbaseeditor.h19
-rw-r--r--src/plugins/vcsbase/vcsbaseplugin.cpp47
-rw-r--r--src/plugins/vcsbase/vcsbaseplugin.h10
-rw-r--r--src/plugins/vcsbase/vcsbasesubmiteditor.cpp10
-rw-r--r--src/plugins/vcsbase/vcsbasesubmiteditor.h3
-rw-r--r--src/plugins/vcsbase/vcscommand.cpp6
-rw-r--r--src/plugins/vcsbase/vcscommand.h2
-rw-r--r--src/plugins/vcsbase/vcsoutputformatter.cpp8
-rw-r--r--src/plugins/vcsbase/vcsoutputformatter.h4
-rw-r--r--src/plugins/vcsbase/vcsoutputwindow.cpp4
-rw-r--r--src/plugins/vcsbase/vcsplugin.cpp6
88 files changed, 1205 insertions, 1160 deletions
diff --git a/src/plugins/bazaar/bazaarclient.cpp b/src/plugins/bazaar/bazaarclient.cpp
index d8c2a43704c..c0804930b7e 100644
--- a/src/plugins/bazaar/bazaarclient.cpp
+++ b/src/plugins/bazaar/bazaarclient.cpp
@@ -109,9 +109,9 @@ BazaarClient::BazaarClient(BazaarSettings *settings) : VcsBaseClient(settings)
});
}
-BranchInfo BazaarClient::synchronousBranchQuery(const QString &repositoryRoot) const
+BranchInfo BazaarClient::synchronousBranchQuery(const FilePath &repositoryRoot) const
{
- QFile branchConfFile(repositoryRoot + QLatin1Char('/') +
+ QFile branchConfFile(repositoryRoot.toString() + QLatin1Char('/') +
QLatin1String(Constants::BAZAARREPO) +
QLatin1String("/branch/branch.conf"));
if (!branchConfFile.open(QIODevice::ReadOnly))
@@ -135,11 +135,11 @@ BranchInfo BazaarClient::synchronousBranchQuery(const QString &repositoryRoot) c
}
if (isBranchBound.simplified().toLower() == QLatin1String("true"))
return BranchInfo(branchLocation, true);
- return BranchInfo(repositoryRoot, false);
+ return BranchInfo(repositoryRoot.toString(), false);
}
//! Removes the last committed revision(s)
-bool BazaarClient::synchronousUncommit(const QString &workingDir,
+bool BazaarClient::synchronousUncommit(const FilePath &workingDir,
const QString &revision,
const QStringList &extraOptions)
{
@@ -156,7 +156,7 @@ bool BazaarClient::synchronousUncommit(const QString &workingDir,
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-void BazaarClient::commit(const QString &repositoryRoot, const QStringList &files,
+void BazaarClient::commit(const FilePath &repositoryRoot, const QStringList &files,
const QString &commitMessageFile, const QStringList &extraOptions)
{
VcsBaseClient::commit(repositoryRoot, files, commitMessageFile,
@@ -164,17 +164,17 @@ void BazaarClient::commit(const QString &repositoryRoot, const QStringList &file
}
VcsBaseEditorWidget *BazaarClient::annotate(
- const QString &workingDir, const QString &file, const QString &revision,
+ const FilePath &workingDir, const QString &file, const QString &revision,
int lineNumber, const QStringList &extraOptions)
{
return VcsBaseClient::annotate(workingDir, file, revision, lineNumber,
QStringList(extraOptions) << QLatin1String("--long"));
}
-bool BazaarClient::isVcsDirectory(const FilePath &fileName) const
+bool BazaarClient::isVcsDirectory(const FilePath &filePath) const
{
- return fileName.isDir()
- && !fileName.fileName().compare(Constants::BAZAARREPO, HostOsInfo::fileNameCaseSensitivity());
+ return filePath.isDir()
+ && !filePath.fileName().compare(Constants::BAZAARREPO, HostOsInfo::fileNameCaseSensitivity());
}
FilePath BazaarClient::findTopLevelForFile(const FilePath &file) const
@@ -184,7 +184,7 @@ FilePath BazaarClient::findTopLevelForFile(const FilePath &file) const
return VcsBase::findRepositoryForFile(file, repositoryCheckFile);
}
-bool BazaarClient::managesFile(const QString &workingDirectory, const QString &fileName) const
+bool BazaarClient::managesFile(const FilePath &workingDirectory, const QString &fileName) const
{
QStringList args(QLatin1String("status"));
args << fileName;
diff --git a/src/plugins/bazaar/bazaarclient.h b/src/plugins/bazaar/bazaarclient.h
index 15c801482d5..5014a4a3395 100644
--- a/src/plugins/bazaar/bazaarclient.h
+++ b/src/plugins/bazaar/bazaarclient.h
@@ -41,20 +41,20 @@ class BazaarClient : public VcsBase::VcsBaseClient
public:
explicit BazaarClient(BazaarSettings *settings);
- BranchInfo synchronousBranchQuery(const QString &repositoryRoot) const;
- bool synchronousUncommit(const QString &workingDir,
- const QString& revision = QString(),
- const QStringList &extraOptions = QStringList());
- void commit(const QString &repositoryRoot, const QStringList &files,
- const QString &commitMessageFile, const QStringList &extraOptions = QStringList()) override;
+ BranchInfo synchronousBranchQuery(const Utils::FilePath &repositoryRoot) const;
+ bool synchronousUncommit(const Utils::FilePath &workingDir,
+ const QString &revision = {},
+ const QStringList &extraOptions = {});
+ void commit(const Utils::FilePath &repositoryRoot, const QStringList &files,
+ const QString &commitMessageFile, const QStringList &extraOptions = {}) override;
VcsBase::VcsBaseEditorWidget *annotate(
- const QString &workingDir, const QString &file, const QString &revision = QString(),
- int lineNumber = -1, const QStringList &extraOptions = QStringList()) override;
- bool isVcsDirectory(const Utils::FilePath &fileName) const;
+ const Utils::FilePath &workingDir, const QString &file, const QString &revision = {},
+ int lineNumber = -1, const QStringList &extraOptions ={}) override;
+ bool isVcsDirectory(const Utils::FilePath &filePath) const;
Utils::FilePath findTopLevelForFile(const Utils::FilePath &file) const override;
- bool managesFile(const QString &workingDirectory, const QString &fileName) const;
+ bool managesFile(const Utils::FilePath &workingDirectory, const QString &fileName) const;
void view(const QString &source, const QString &id,
- const QStringList &extraOptions = QStringList()) override;
+ const QStringList &extraOptions = {}) override;
Utils::Id vcsEditorKind(VcsCommandTag cmd) const override;
QString vcsCommandString(VcsCommandTag cmd) const override;
diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp
index 098fdea7287..ef2ed798825 100644
--- a/src/plugins/bazaar/bazaarplugin.cpp
+++ b/src/plugins/bazaar/bazaarplugin.cpp
@@ -147,13 +147,13 @@ public:
QString displayName() const final;
Utils::Id id() const final;
- bool isVcsFileOrDirectory(const Utils::FilePath &fileName) const final;
+ bool isVcsFileOrDirectory(const Utils::FilePath &filePath) const final;
bool managesDirectory(const Utils::FilePath &filePath, Utils::FilePath *topLevel) const final;
bool managesFile(const Utils::FilePath &workingDirectory, const QString &fileName) const final;
bool isConfigured() const final;
bool supportsOperation(Operation operation) const final;
- bool vcsOpen(const Utils::FilePath &fileName) final;
+ bool vcsOpen(const Utils::FilePath &filePath) final;
bool vcsAdd(const Utils::FilePath &filePath) final;
bool vcsDelete(const Utils::FilePath &filePath) final;
bool vcsMove(const Utils::FilePath &from, const Utils::FilePath &to) final;
@@ -228,7 +228,7 @@ public:
QAction *m_menuAction = nullptr;
- QString m_submitRepository;
+ FilePath m_submitRepository;
bool m_submitActionTriggered = false;
VcsEditorFactory logEditorFactory {
@@ -672,12 +672,11 @@ void BazaarPluginPrivate::showCommitWidget(const QList<VcsBaseClient::StatusItem
this, &BazaarPluginPrivate::diffFromEditorSelected);
commitEditor->setCheckScriptWorkingDirectory(m_submitRepository);
- const QString msg = tr("Commit changes for \"%1\".").
- arg(QDir::toNativeSeparators(m_submitRepository));
+ const QString msg = tr("Commit changes for \"%1\".").arg(m_submitRepository.toUserOutput());
commitEditor->document()->setPreferredDisplayName(msg);
const BranchInfo branch = m_client.synchronousBranchQuery(m_submitRepository);
- commitEditor->setFields(m_submitRepository, branch,
+ commitEditor->setFields(m_submitRepository.toString(), branch,
m_settings.userName.value(),
m_settings.userEmail.value(), status);
}
@@ -860,7 +859,7 @@ bool BazaarPluginPrivate::managesDirectory(const FilePath &directory, FilePath *
bool BazaarPluginPrivate::managesFile(const FilePath &workingDirectory, const QString &fileName) const
{
- return m_client.managesFile(workingDirectory.toString(), fileName);
+ return m_client.managesFile(workingDirectory, fileName);
}
bool BazaarPluginPrivate::isConfigured() const
@@ -899,23 +898,21 @@ bool BazaarPluginPrivate::vcsOpen(const FilePath &filePath)
bool BazaarPluginPrivate::vcsAdd(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return m_client.synchronousAdd(fi.absolutePath(), fi.fileName());
+ return m_client.synchronousAdd(filePath.parentDir(), filePath.fileName());
}
bool BazaarPluginPrivate::vcsDelete(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return m_client.synchronousRemove(fi.absolutePath(), fi.fileName());
+ return m_client.synchronousRemove(filePath.parentDir(), filePath.fileName());
}
bool BazaarPluginPrivate::vcsMove(const FilePath &from, const FilePath &to)
{
const QFileInfo fromInfo = from.toFileInfo();
const QFileInfo toInfo = to.toFileInfo();
- return m_client.synchronousMove(fromInfo.absolutePath(),
- fromInfo.absoluteFilePath(),
- toInfo.absoluteFilePath());
+ return m_client.synchronousMove(from.parentDir().absoluteFilePath(),
+ fromInfo.absoluteFilePath(),
+ toInfo.absoluteFilePath());
}
bool BazaarPluginPrivate::vcsCreateRepository(const FilePath &directory)
@@ -925,14 +922,14 @@ bool BazaarPluginPrivate::vcsCreateRepository(const FilePath &directory)
void BazaarPluginPrivate::vcsAnnotate(const FilePath &file, int line)
{
- const QFileInfo fi = file.toFileInfo();
- m_client.annotate(fi.absolutePath(), fi.fileName(), QString(), line);
+ m_client.annotate(file.parentDir(), file.fileName(), QString(), line);
}
-Core::ShellCommand *BazaarPluginPrivate::createInitialCheckoutCommand(const QString &url,
- const Utils::FilePath &baseDirectory,
- const QString &localName,
- const QStringList &extraArgs)
+Core::ShellCommand *BazaarPluginPrivate::createInitialCheckoutCommand(
+ const QString &url,
+ const FilePath &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs)
{
QStringList args;
args << m_client.vcsCommandString(BazaarClient::CloneCommand)
@@ -940,7 +937,7 @@ Core::ShellCommand *BazaarPluginPrivate::createInitialCheckoutCommand(const QStr
Environment env = m_client.processEnvironment();
env.set("BZR_PROGRESS_BAR", "text");
- auto command = new VcsBase::VcsCommand(baseDirectory.toString(), env);
+ auto command = new VcsBase::VcsCommand(baseDirectory, env);
command->addJob({m_client.vcsBinary(), args}, -1);
return command;
}
@@ -949,7 +946,7 @@ void BazaarPluginPrivate::changed(const QVariant &v)
{
switch (v.type()) {
case QVariant::String:
- emit repositoryChanged(v.toString());
+ emit repositoryChanged(FilePath::fromVariant(v));
break;
case QVariant::StringList:
emit filesChanged(v.toStringList());
diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp
index 565eebe6c41..e17c7ac1848 100644
--- a/src/plugins/clearcase/clearcaseplugin.cpp
+++ b/src/plugins/clearcase/clearcaseplugin.cpp
@@ -207,21 +207,21 @@ public:
QString vcsTopic(const FilePath &directory) final;
///
- ClearCaseSubmitEditor *openClearCaseSubmitEditor(const QString &fileName, bool isUcm);
+ ClearCaseSubmitEditor *openClearCaseSubmitEditor(const FilePath &filePath, bool isUcm);
const ClearCaseSettings &settings() const;
void setSettings(const ClearCaseSettings &s);
// IVersionControl
- bool vcsOpen(const QString &workingDir, const QString &fileName);
- bool vcsAdd(const QString &workingDir, const QString &fileName);
- bool vcsDelete(const QString &workingDir, const QString &fileName);
- bool vcsCheckIn(const QString &workingDir, const QStringList &files, const QString &activity,
+ bool vcsOpen(const FilePath &workingDir, const QString &fileName);
+ bool vcsAdd(const FilePath &workingDir, const QString &fileName);
+ bool vcsDelete(const FilePath &workingDir, const QString &fileName);
+ bool vcsCheckIn(const FilePath &workingDir, const QStringList &files, const QString &activity,
bool isIdentical, bool isPreserve, bool replaceActivity);
- bool vcsUndoCheckOut(const QString &workingDir, const QString &fileName, bool keep);
- bool vcsUndoHijack(const QString &workingDir, const QString &fileName, bool keep);
- bool vcsMove(const QString &workingDir, const QString &from, const QString &to);
- bool vcsSetActivity(const QString &workingDir, const QString &title, const QString &activity);
+ bool vcsUndoCheckOut(const FilePath &workingDir, const QString &fileName, bool keep);
+ bool vcsUndoHijack(const FilePath &workingDir, const QString &fileName, bool keep);
+ bool vcsMove(const FilePath &workingDir, const QString &from, const QString &to);
+ bool vcsSetActivity(const FilePath &workingDir, const QString &title, const QString &activity);
static ClearCasePluginPrivate *instance();
@@ -229,10 +229,10 @@ public:
QList<QStringPair> activities(int *current = nullptr);
QString ccGetPredecessor(const QString &version) const;
QStringList ccGetActiveVobs() const;
- ViewData ccGetView(const QString &workingDir) const;
- QString ccGetComment(const QString &workingDir, const QString &fileName) const;
- bool ccFileOp(const QString &workingDir, const QString &title, const QStringList &args,
- const QString &fileName, const QString &file2 = QString());
+ ViewData ccGetView(const FilePath &workingDir) const;
+ QString ccGetComment(const FilePath &workingDir, const QString &fileName) const;
+ bool ccFileOp(const FilePath &workingDir, const QString &title, const QStringList &args,
+ const QString &fileName, const QString &file2 = {});
FileStatus vcsStatus(const QString &file) const;
void checkAndReIndexUnknownFile(const QString &file);
QString currentView() const { return m_viewData.name; }
@@ -242,20 +242,20 @@ public:
inline bool isDynamic() const { return m_viewData.isDynamic; }
void setStatus(const QString &file, FileStatus::Status status, bool update = true);
- bool ccCheckUcm(const QString &viewname, const QString &workingDir) const;
+ bool ccCheckUcm(const QString &viewname, const FilePath &workingDir) const;
#ifdef WITH_TESTS
inline void setFakeCleartool(const bool b = true) { m_fakeClearTool = b; }
#endif
- void vcsAnnotateHelper(const QString &workingDir, const QString &file,
- const QString &revision = QString(), int lineNumber = -1) const;
+ void vcsAnnotateHelper(const FilePath &workingDir, const QString &file,
+ const QString &revision = {}, int lineNumber = -1) const;
bool newActivity();
void updateStreamAndView();
protected:
void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override;
bool submitEditorAboutToClose() override;
- QString ccGet(const QString &workingDir, const QString &file, const QString &prefix = QString());
+ QString ccGet(const FilePath &workingDir, const QString &file, const QString &prefix = {});
QList<QStringPair> ccGetActivities() const;
private:
@@ -280,38 +280,38 @@ private:
void updateIndex();
void updateView();
void projectChanged(ProjectExplorer::Project *project);
- void tasksFinished(Utils::Id type);
+ void tasksFinished(Id type);
void closing();
inline bool isCheckInEditorOpen() const;
QStringList getVobList() const;
- QString ccManagesDirectory(const QString &directory) const;
- QString ccViewRoot(const QString &directory) const;
- QString findTopLevel(const QString &directory) const;
+ QString ccManagesDirectory(const FilePath &directory) const;
+ QString ccViewRoot(const FilePath &directory) const;
+ QString findTopLevel(const FilePath &directory) const;
Core::IEditor *showOutputInEditor(const QString& title, const QString &output,
Id id, const QString &source,
QTextCodec *codec) const;
- QString runCleartoolSync(const QString &workingDir, const QStringList &arguments) const;
- ClearCaseResponse runCleartool(const QString &workingDir, const QStringList &arguments,
+ QString runCleartoolSync(const FilePath &workingDir, const QStringList &arguments) const;
+ ClearCaseResponse runCleartool(const FilePath &workingDir, const QStringList &arguments,
int timeOutS, unsigned flags,
QTextCodec *outputCodec = nullptr) const;
static void sync(QFutureInterface<void> &future, QStringList files);
- void history(const QString &workingDir,
- const QStringList &file = QStringList(),
+ void history(const FilePath &workingDir,
+ const QStringList &file = {},
bool enableAnnotationContextMenu = false);
- QString ccGetFileVersion(const QString &workingDir, const QString &file) const;
- void ccUpdate(const QString &workingDir, const QStringList &relativePaths = QStringList());
- void ccDiffWithPred(const QString &workingDir, const QStringList &files);
- void startCheckIn(const QString &workingDir, const QStringList &files = QStringList());
+ QString ccGetFileVersion(const FilePath &workingDir, const QString &file) const;
+ void ccUpdate(const FilePath &workingDir, const QStringList &relativePaths = {});
+ void ccDiffWithPred(const FilePath &workingDir, const QStringList &files);
+ void startCheckIn(const FilePath &workingDir, const QStringList &files = {});
void cleanCheckInMessageFile();
- QString ccGetFileActivity(const QString &workingDir, const QString &file);
- QStringList ccGetActivityVersions(const QString &workingDir, const QString &activity);
+ QString ccGetFileActivity(const FilePath &workingDir, const QString &file);
+ QStringList ccGetActivityVersions(const FilePath &workingDir, const QString &activity);
void diffGraphical(const QString &file1, const QString &file2 = QString());
QString diffExternal(QString file1, QString file2 = QString(), bool keep = false);
QString getFile(const QString &nativeFile, const QString &prefix);
static void rmdir(const QString &path);
- QString runExtDiff(const QString &workingDir, const QStringList &arguments, int timeOutS,
+ QString runExtDiff(const FilePath &workingDir, const QStringList &arguments, int timeOutS,
QTextCodec *outputCodec = nullptr);
static QString getDriveLetterOfPath(const QString &directory);
@@ -321,9 +321,9 @@ private:
ClearCaseSettings m_settings;
- QString m_checkInMessageFileName;
- QString m_checkInView;
- QString m_topLevel;
+ FilePath m_checkInMessageFilePath;
+ FilePath m_checkInView;
+ FilePath m_topLevel;
QString m_stream;
ViewData m_viewData;
QString m_intStream;
@@ -397,16 +397,16 @@ ClearCasePluginPrivate::~ClearCasePluginPrivate()
void ClearCasePluginPrivate::cleanCheckInMessageFile()
{
- if (!m_checkInMessageFileName.isEmpty()) {
- QFile::remove(m_checkInMessageFileName);
- m_checkInMessageFileName.clear();
+ if (!m_checkInMessageFilePath.isEmpty()) {
+ m_checkInMessageFilePath.removeFile();
+ m_checkInMessageFilePath.clear();
m_checkInView.clear();
}
}
bool ClearCasePluginPrivate::isCheckInEditorOpen() const
{
- return !m_checkInMessageFileName.isEmpty();
+ return !m_checkInMessageFilePath.isEmpty();
}
/// Files in this directories are under ClearCase control
@@ -471,7 +471,7 @@ FileStatus::Status ClearCasePluginPrivate::getFileStatus(const QString &fileName
QStringList args(QLatin1String("ls"));
args << fileName;
- QString buffer = runCleartoolSync(viewRoot, args);
+ QString buffer = runCleartoolSync(FilePath::fromString(viewRoot), args);
const int atatpos = buffer.indexOf(QLatin1String("@@"));
if (atatpos != -1) { // probably a managed file
@@ -535,7 +535,7 @@ FileStatus::Status ClearCasePluginPrivate::getFileStatus(const QString &fileName
/// snapshot views.
///
/// \returns The ClearCase topLevel/VOB directory for this directory
-QString ClearCasePluginPrivate::ccManagesDirectory(const QString &directory) const
+QString ClearCasePluginPrivate::ccManagesDirectory(const FilePath &directory) const
{
QStringList args(QLatin1String("pwv"));
const ClearCaseResponse response =
@@ -572,8 +572,8 @@ QString ClearCasePluginPrivate::ccManagesDirectory(const QString &directory) con
foreach (const QString &relativeVobDir, vobs) {
const QString vobPath = QDir::cleanPath(rootDir + QDir::fromNativeSeparators(relativeVobDir));
- const bool isManaged = (vobPath == directory)
- || FilePath::fromString(directory).isChildOf(FilePath::fromString(vobPath));
+ const bool isManaged = (vobPath == directory.toString())
+ || directory.isChildOf(FilePath::fromString(vobPath));
if (isManaged)
return vobPath;
}
@@ -582,7 +582,7 @@ QString ClearCasePluginPrivate::ccManagesDirectory(const QString &directory) con
}
/// Find the root path of a clearcase view. Precondition: This is a clearcase managed dir
-QString ClearCasePluginPrivate::ccViewRoot(const QString &directory) const
+QString ClearCasePluginPrivate::ccViewRoot(const FilePath &directory) const
{
QStringList args(QLatin1String("pwv"));
args << QLatin1String("-root");
@@ -593,7 +593,7 @@ QString ClearCasePluginPrivate::ccViewRoot(const QString &directory) const
if (root.isEmpty()) {
if (HostOsInfo::isWindowsHost())
- root = getDriveLetterOfPath(directory);
+ root = getDriveLetterOfPath(directory.toString());
else
root = QLatin1Char('/');
}
@@ -605,13 +605,12 @@ QString ClearCasePluginPrivate::ccViewRoot(const QString &directory) const
*
* Handles both dynamic views and snapshot views.
*/
-QString ClearCasePluginPrivate::findTopLevel(const QString &directory) const
+QString ClearCasePluginPrivate::findTopLevel(const FilePath &directory) const
{
// Do not check again if we've already tested that the dir is managed,
// or if it is a child of a managed dir (top level).
- if ((directory == m_topLevel) ||
- FilePath::fromString(directory).isChildOf(FilePath::fromString(m_topLevel)))
- return m_topLevel;
+ if (directory == m_topLevel || directory.isChildOf(m_topLevel))
+ return m_topLevel.toString();
return ccManagesDirectory(directory);
}
@@ -801,8 +800,8 @@ bool ClearCasePluginPrivate::submitEditorAboutToClose()
// Submit editor closing. Make it write out the check in message
// and retrieve files
- const QFileInfo editorFile = editorDocument->filePath().toFileInfo();
- const QFileInfo changeFile(m_checkInMessageFileName);
+ const FilePath editorFile = editorDocument->filePath();
+ const FilePath changeFile = m_checkInMessageFilePath;
if (editorFile.absoluteFilePath() != changeFile.absoluteFilePath())
return true; // Oops?!
@@ -834,7 +833,7 @@ bool ClearCasePluginPrivate::submitEditorAboutToClose()
closeEditor = DocumentManager::saveDocument(editorDocument);
if (closeEditor) {
ClearCaseSubmitEditorWidget *widget = editor->submitEditorWidget();
- closeEditor = vcsCheckIn(m_checkInMessageFileName, fileList, widget->activity(),
+ closeEditor = vcsCheckIn(m_checkInMessageFilePath, fileList, widget->activity(),
widget->isIdentical(), widget->isPreserve(),
widget->activityChanged());
}
@@ -853,7 +852,7 @@ void ClearCasePluginPrivate::diffCheckInFiles(const QStringList &files)
ccDiffWithPred(m_checkInView, files);
}
-static void setWorkingDirectory(IEditor *editor, const QString &wd)
+static void setWorkingDirectory(IEditor *editor, const FilePath &wd)
{
if (auto ve = qobject_cast<VcsBaseEditorWidget*>(editor->widget()))
ve->setWorkingDirectory(wd);
@@ -881,7 +880,7 @@ QStringList ClearCasePluginPrivate::ccGetActiveVobs() const
const QString theViewRoot = viewRoot();
const ClearCaseResponse response =
- runCleartool(theViewRoot, args, m_settings.timeOutS, SilentRun);
+ runCleartool(FilePath::fromString(theViewRoot), args, m_settings.timeOutS, SilentRun);
if (response.error)
return res;
@@ -927,7 +926,7 @@ FileStatus ClearCasePluginPrivate::vcsStatus(const QString &file) const
return m_statusMap->value(file, FileStatus(FileStatus::Unknown));
}
-QString ClearCasePluginPrivate::ccGetFileActivity(const QString &workingDir, const QString &file)
+QString ClearCasePluginPrivate::ccGetFileActivity(const FilePath &workingDir, const QString &file)
{
QStringList args(QLatin1String("lscheckout"));
args << QLatin1String("-fmt") << QLatin1String("%[activity]p");
@@ -937,10 +936,10 @@ QString ClearCasePluginPrivate::ccGetFileActivity(const QString &workingDir, con
return response.stdOut;
}
-ClearCaseSubmitEditor *ClearCasePluginPrivate::openClearCaseSubmitEditor(const QString &fileName, bool isUcm)
+ClearCaseSubmitEditor *ClearCasePluginPrivate::openClearCaseSubmitEditor(const FilePath &filePath, bool isUcm)
{
IEditor *editor =
- EditorManager::openEditor(fileName, Constants::CLEARCASECHECKINEDITOR_ID);
+ EditorManager::openEditor(filePath, Constants::CLEARCASECHECKINEDITOR_ID);
auto submitEditor = qobject_cast<ClearCaseSubmitEditor*>(editor);
QTC_ASSERT(submitEditor, return nullptr);
connect(submitEditor, &VcsBaseSubmitEditor::diffSelectedFiles,
@@ -1010,7 +1009,7 @@ void ClearCasePluginPrivate::updateActions(VcsBasePluginPrivate::ActionState as)
const bool hasTopLevel = state.hasTopLevel();
m_commandLocator->setEnabled(hasTopLevel);
if (hasTopLevel) {
- const QString topLevel = state.topLevel();
+ const FilePath topLevel = state.topLevel();
if (m_topLevel != topLevel) {
m_topLevel = topLevel;
m_viewData = ccGetView(topLevel);
@@ -1095,7 +1094,7 @@ void ClearCasePluginPrivate::undoCheckOutCurrent()
vcsUndoCheckOut(state.topLevel(), file, keep);
}
-bool ClearCasePluginPrivate::vcsUndoCheckOut(const QString &workingDir, const QString &fileName, bool keep)
+bool ClearCasePluginPrivate::vcsUndoCheckOut(const FilePath &workingDir, const QString &fileName, bool keep)
{
if (Constants::debug)
qDebug() << Q_FUNC_INFO << workingDir << fileName << keep;
@@ -1112,7 +1111,7 @@ bool ClearCasePluginPrivate::vcsUndoCheckOut(const QString &workingDir, const QS
VcsCommand::ShowStdOut | VcsCommand::FullySynchronously);
if (!response.error) {
- const QString absPath = workingDir + QLatin1Char('/') + fileName;
+ const QString absPath = workingDir.pathAppended(fileName).toString();
if (!m_settings.disableIndexer)
setStatus(absPath, FileStatus::CheckedIn);
@@ -1127,7 +1126,7 @@ bool ClearCasePluginPrivate::vcsUndoCheckOut(const QString &workingDir, const QS
* Runs cleartool update -overwrite \a fileName in \a workingDir
* if \a keep is true, renames hijacked files to <filename>.keep. Otherwise it is overwritten
*/
-bool ClearCasePluginPrivate::vcsUndoHijack(const QString &workingDir, const QString &fileName, bool keep)
+bool ClearCasePluginPrivate::vcsUndoHijack(const FilePath &workingDir, const QString &fileName, bool keep)
{
if (Constants::debug)
qDebug() << Q_FUNC_INFO << workingDir << fileName << keep;
@@ -1144,7 +1143,7 @@ bool ClearCasePluginPrivate::vcsUndoHijack(const QString &workingDir, const QStr
runCleartool(workingDir, args, m_settings.timeOutS,
VcsCommand::ShowStdOut | VcsCommand::FullySynchronously);
if (!response.error && !m_settings.disableIndexer) {
- const QString absPath = workingDir + QLatin1Char('/') + fileName;
+ const QString absPath = workingDir.pathAppended(fileName).toString();
setStatus(absPath, FileStatus::CheckedIn);
}
return !response.error;
@@ -1182,14 +1181,14 @@ void ClearCasePluginPrivate::undoHijackCurrent()
emit filesChanged(QStringList(state.currentFile()));
}
-QString ClearCasePluginPrivate::ccGetFileVersion(const QString &workingDir, const QString &file) const
+QString ClearCasePluginPrivate::ccGetFileVersion(const FilePath &workingDir, const QString &file) const
{
QStringList args(QLatin1String("ls"));
args << QLatin1String("-short") << file;
return runCleartoolSync(workingDir, args).trimmed();
}
-void ClearCasePluginPrivate::ccDiffWithPred(const QString &workingDir, const QStringList &files)
+void ClearCasePluginPrivate::ccDiffWithPred(const FilePath &workingDir, const QStringList &files)
{
if (Constants::debug)
qDebug() << Q_FUNC_INFO << files;
@@ -1199,7 +1198,7 @@ void ClearCasePluginPrivate::ccDiffWithPred(const QString &workingDir, const QSt
if ((m_settings.diffType == GraphicalDiff) && (files.count() == 1)) {
const QString file = files.first();
- const QString absFilePath = workingDir + QLatin1Char('/') + file;
+ const QString absFilePath = workingDir.pathAppended(file).toString();
if (vcsStatus(absFilePath).status == FileStatus::Hijacked)
diffGraphical(ccGetFileVersion(workingDir, file), file);
else
@@ -1212,7 +1211,7 @@ void ClearCasePluginPrivate::ccDiffWithPred(const QString &workingDir, const QSt
}
QString result;
foreach (const QString &file, files) {
- const QString absFilePath = workingDir + QLatin1Char('/') + file;
+ const QString absFilePath = workingDir.pathAppended(file).toString();
if (vcsStatus(QDir::fromNativeSeparators(absFilePath)).status == FileStatus::Hijacked)
result += diffExternal(ccGetFileVersion(workingDir, file), file);
else
@@ -1223,7 +1222,7 @@ void ClearCasePluginPrivate::ccDiffWithPred(const QString &workingDir, const QSt
// diff of a single file? re-use an existing view if possible to support
// the common usage pattern of continuously changing and diffing a file
- const QString tag = VcsBaseEditor::editorTag(DiffOutput, workingDir, files);
+ const QString tag = VcsBaseEditor::editorTag(DiffOutput, workingDir.toString(), files);
if (files.count() == 1) {
// Show in the same editor if diff has been executed before
if (IEditor *existingEditor = VcsBaseEditor::locateEditorByTag(tag)) {
@@ -1244,7 +1243,7 @@ void ClearCasePluginPrivate::ccDiffWithPred(const QString &workingDir, const QSt
editor->setProperty("originalFileName", diffname);
}
-QStringList ClearCasePluginPrivate::ccGetActivityVersions(const QString &workingDir, const QString &activity)
+QStringList ClearCasePluginPrivate::ccGetActivityVersions(const FilePath &workingDir, const QString &activity)
{
QStringList args(QLatin1String("lsactivity"));
args << QLatin1String("-fmt") << QLatin1String("%[versions]Cp") << activity;
@@ -1282,7 +1281,7 @@ void ClearCasePluginPrivate::diffActivity()
VcsOutputWindow::appendError(tr("External diff is required to compare multiple files."));
return;
}
- QString topLevel = state.topLevel();
+ FilePath topLevel = state.topLevel();
QString activity = QInputDialog::getText(ICore::dialogParent(), tr("Enter Activity"),
tr("Activity Name"), QLineEdit::Normal, m_activity);
if (activity.isEmpty())
@@ -1292,7 +1291,7 @@ void ClearCasePluginPrivate::diffActivity()
QString result;
// map from fileName to (first, latest) pair
QMap<QString, QStringPair> filever;
- int topLevelLen = topLevel.length();
+ int topLevelLen = topLevel.toString().length();
foreach (const QString &version, versions) {
QString shortver = version.mid(topLevelLen + 1);
int atatpos = shortver.indexOf(QLatin1String("@@"));
@@ -1354,7 +1353,7 @@ void ClearCasePluginPrivate::startCheckInAll()
{
const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasTopLevel(), return);
- QString topLevel = state.topLevel();
+ FilePath topLevel = state.topLevel();
QStringList files;
for (StatusMap::ConstIterator iterator = m_statusMap->constBegin();
iterator != m_statusMap->constEnd();
@@ -1386,8 +1385,8 @@ void ClearCasePluginPrivate::startCheckInActivity()
if (!dlg.exec())
return;
- QString topLevel = state.topLevel();
- int topLevelLen = topLevel.length();
+ FilePath topLevel = state.topLevel();
+ int topLevelLen = topLevel.toString().length();
QStringList versions = ccGetActivityVersions(topLevel, actSelector->activity());
QStringList files;
QString last;
@@ -1407,7 +1406,7 @@ void ClearCasePluginPrivate::startCheckInActivity()
/* Start check in of files of a single repository by displaying
* template and files in a submit editor. On closing, the real
* check in will start. */
-void ClearCasePluginPrivate::startCheckIn(const QString &workingDir, const QStringList &files)
+void ClearCasePluginPrivate::startCheckIn(const FilePath &workingDir, const QStringList &files)
{
if (!promptBeforeCommit())
return;
@@ -1437,10 +1436,10 @@ void ClearCasePluginPrivate::startCheckIn(const QString &workingDir, const QStri
VcsOutputWindow::appendError(saver.errorString());
return;
}
- m_checkInMessageFileName = saver.filePath().toString();
+ m_checkInMessageFilePath = saver.filePath();
m_checkInView = workingDir;
// Create a submit editor and set file list
- ClearCaseSubmitEditor *editor = openClearCaseSubmitEditor(m_checkInMessageFileName, m_viewData.isUcm);
+ ClearCaseSubmitEditor *editor = openClearCaseSubmitEditor(m_checkInMessageFilePath, m_viewData.isUcm);
setSubmitEditor(editor);
editor->setStatusList(files);
@@ -1464,9 +1463,9 @@ void ClearCasePluginPrivate::updateView()
ccUpdate(state.topLevel());
}
-void ClearCasePluginPrivate::history(const QString &workingDir,
- const QStringList &files,
- bool enableAnnotationContextMenu)
+void ClearCasePluginPrivate::history(const FilePath &workingDir,
+ const QStringList &files,
+ bool enableAnnotationContextMenu)
{
QTextCodec *codec = VcsBaseEditor::getCodec(workingDir, files);
// no need for temp file
@@ -1487,7 +1486,7 @@ void ClearCasePluginPrivate::history(const QString &workingDir,
// the common usage pattern of continuously changing and diffing a file
const QString id = VcsBaseEditor::getTitleId(workingDir, files);
- const QString tag = VcsBaseEditor::editorTag(LogOutput, workingDir, files);
+ const QString tag = VcsBaseEditor::editorTag(LogOutput, workingDir.toString(), files);
if (IEditor *editor = VcsBaseEditor::locateEditorByTag(tag)) {
editor->document()->setContents(response.stdOut.toUtf8());
EditorManager::activateEditor(editor);
@@ -1532,7 +1531,7 @@ void ClearCasePluginPrivate::viewStatus()
VcsOutputWindow::appendWarning(QLatin1String("No modified files found."));
}
-void ClearCasePluginPrivate::ccUpdate(const QString &workingDir, const QStringList &relativePaths)
+void ClearCasePluginPrivate::ccUpdate(const FilePath &workingDir, const QStringList &relativePaths)
{
QStringList args(QLatin1String("update"));
args << QLatin1String("-noverwrite");
@@ -1551,7 +1550,7 @@ void ClearCasePluginPrivate::annotateCurrentFile()
vcsAnnotateHelper(state.currentFileTopLevel(), state.relativeCurrentFile());
}
-void ClearCasePluginPrivate::vcsAnnotateHelper(const QString &workingDir, const QString &file,
+void ClearCasePluginPrivate::vcsAnnotateHelper(const FilePath &workingDir, const QString &file,
const QString &revision /* = QString() */,
int lineNumber /* = -1 */) const
{
@@ -1578,7 +1577,7 @@ void ClearCasePluginPrivate::vcsAnnotateHelper(const QString &workingDir, const
// Re-use an existing view if possible to support
// the common usage pattern of continuously changing and diffing a file
- const QString source = workingDir + QLatin1Char('/') + file;
+ const QString source = workingDir.pathAppended(file).toString();
if (lineNumber <= 0)
lineNumber = VcsBaseEditor::lineNumberOfCurrentEditor(source);
@@ -1592,7 +1591,7 @@ void ClearCasePluginPrivate::vcsAnnotateHelper(const QString &workingDir, const
stream << response.stdOut.mid(dataStart) << headerSep << QLatin1Char('\n')
<< headerSep << QLatin1Char('\n') << response.stdOut.left(pos);
const QStringList files = QStringList(file);
- const QString tag = VcsBaseEditor::editorTag(AnnotateOutput, workingDir, files);
+ const QString tag = VcsBaseEditor::editorTag(AnnotateOutput, workingDir.toString(), files);
if (IEditor *editor = VcsBaseEditor::locateEditorByTag(tag)) {
editor->document()->setContents(res.toUtf8());
VcsBaseEditor::gotoLineOfEditor(editor, lineNumber);
@@ -1621,7 +1620,7 @@ void ClearCasePluginPrivate::vcsDescribe(const FilePath &source, const QString &
QStringList args(QLatin1String("describe"));
args.push_back(id);
QTextCodec *codec = VcsBaseEditor::getCodec(source.toString());
- const ClearCaseResponse response = runCleartool(topLevel.toString(), args, m_settings.timeOutS, 0, codec);
+ const ClearCaseResponse response = runCleartool(topLevel, args, m_settings.timeOutS, 0, codec);
description = response.stdOut;
if (m_settings.extDiffAvailable)
description += diffExternal(id);
@@ -1646,18 +1645,18 @@ void ClearCasePluginPrivate::commitFromEditor()
EditorManager::closeDocuments({submitEditor()->document()});
}
-QString ClearCasePluginPrivate::runCleartoolSync(const QString &workingDir,
- const QStringList &arguments) const
+QString ClearCasePluginPrivate::runCleartoolSync(const FilePath &workingDir,
+ const QStringList &arguments) const
{
return runCleartool(workingDir, arguments, m_settings.timeOutS, SilentRun).stdOut;
}
ClearCaseResponse
-ClearCasePluginPrivate::runCleartool(const QString &workingDir,
- const QStringList &arguments,
- int timeOutS,
- unsigned flags,
- QTextCodec *outputCodec) const
+ClearCasePluginPrivate::runCleartool(const FilePath &workingDir,
+ const QStringList &arguments,
+ int timeOutS,
+ unsigned flags,
+ QTextCodec *outputCodec) const
{
const QString executable = m_settings.ccBinaryPath;
ClearCaseResponse response;
@@ -1727,15 +1726,15 @@ ClearCasePluginPrivate *ClearCasePluginPrivate::instance()
return dd;
}
-bool ClearCasePluginPrivate::vcsOpen(const QString &workingDir, const QString &fileName)
+bool ClearCasePluginPrivate::vcsOpen(const FilePath &workingDir, const QString &fileName)
{
QTC_ASSERT(currentState().hasTopLevel(), return false);
if (Constants::debug)
qDebug() << Q_FUNC_INFO << workingDir << fileName;
- QFileInfo fi(workingDir, fileName);
- QString topLevel = currentState().topLevel();
+ QFileInfo fi(workingDir.toString(), fileName);
+ FilePath topLevel = currentState().topLevel();
QString absPath = fi.absoluteFilePath();
if (!m_settings.disableIndexer &&
@@ -1747,7 +1746,7 @@ bool ClearCasePluginPrivate::vcsOpen(const QString &workingDir, const QString &f
return true;
}
- const QString relFile = QDir(topLevel).relativeFilePath(absPath);
+ const QString relFile = QDir(topLevel.toString()).relativeFilePath(absPath);
const QString file = QDir::toNativeSeparators(relFile);
const QString title = QString::fromLatin1("Checkout %1").arg(file);
CheckOutDialog coDialog(title, m_viewData.isUcm, !m_settings.noComment);
@@ -1839,7 +1838,7 @@ bool ClearCasePluginPrivate::vcsOpen(const QString &workingDir, const QString &f
return true;
}
-bool ClearCasePluginPrivate::vcsSetActivity(const QString &workingDir, const QString &title, const QString &activity)
+bool ClearCasePluginPrivate::vcsSetActivity(const FilePath &workingDir, const QString &title, const QString &activity)
{
QStringList args;
args << QLatin1String("setactivity") << activity;
@@ -1855,7 +1854,7 @@ bool ClearCasePluginPrivate::vcsSetActivity(const QString &workingDir, const QSt
}
// files are received using native separators
-bool ClearCasePluginPrivate::vcsCheckIn(const QString &messageFile, const QStringList &files, const QString &activity,
+bool ClearCasePluginPrivate::vcsCheckIn(const FilePath &messageFile, const QStringList &files, const QString &activity,
bool isIdentical, bool isPreserve, bool replaceActivity)
{
if (Constants::debug)
@@ -1868,7 +1867,7 @@ bool ClearCasePluginPrivate::vcsCheckIn(const QString &messageFile, const QStrin
if (replaceActivity && !vcsSetActivity(m_checkInView, title, activity))
return false;
QString message;
- QFile msgFile(messageFile);
+ QFile msgFile(messageFile.toString());
if (msgFile.open(QFile::ReadOnly | QFile::Text)) {
message = QString::fromLocal8Bit(msgFile.readAll().trimmed());
msgFile.close();
@@ -1878,7 +1877,7 @@ bool ClearCasePluginPrivate::vcsCheckIn(const QString &messageFile, const QStrin
if (message.isEmpty())
args << QLatin1String("-nc");
else
- args << QLatin1String("-cfile") << messageFile;
+ args << QLatin1String("-cfile") << messageFile.toString();
if (isIdentical)
args << QLatin1String("-identical");
if (isPreserve)
@@ -1887,7 +1886,7 @@ bool ClearCasePluginPrivate::vcsCheckIn(const QString &messageFile, const QStrin
QList<FCBPointer> blockers;
foreach (const QString &fileName, files) {
FCBPointer fcb(new FileChangeBlocker(
- FilePath::fromString(QFileInfo(m_checkInView, fileName).canonicalFilePath())));
+ FilePath::fromString(QFileInfo(m_checkInView.toString(), fileName).canonicalFilePath())));
blockers.append(fcb);
}
const ClearCaseResponse response =
@@ -1899,7 +1898,7 @@ bool ClearCasePluginPrivate::vcsCheckIn(const QString &messageFile, const QStrin
int offset = match.capturedStart();
while (match.hasMatch()) {
QString file = match.captured(1);
- QFileInfo fi(m_checkInView, file);
+ QFileInfo fi(m_checkInView.toString(), file);
QString absPath = fi.absoluteFilePath();
if (!m_settings.disableIndexer)
@@ -1912,7 +1911,7 @@ bool ClearCasePluginPrivate::vcsCheckIn(const QString &messageFile, const QStrin
return anySucceeded;
}
-bool ClearCasePluginPrivate::ccFileOp(const QString &workingDir, const QString &title, const QStringList &opArgs,
+bool ClearCasePluginPrivate::ccFileOp(const FilePath &workingDir, const QString &title, const QStringList &opArgs,
const QString &fileName, const QString &file2)
{
const QString file = QDir::toNativeSeparators(fileName);
@@ -1949,7 +1948,7 @@ bool ClearCasePluginPrivate::ccFileOp(const QString &workingDir, const QString &
if (m_viewData.isUcm && actSelector->changed())
vcsSetActivity(workingDir, fileOpDlg.windowTitle(), actSelector->activity());
- QString dirName = QDir::toNativeSeparators(QFileInfo(workingDir, fileName).absolutePath());
+ QString dirName = QDir::toNativeSeparators(QFileInfo(workingDir.toString(), fileName).absolutePath());
QStringList commentArg;
if (comment.isEmpty())
commentArg << QLatin1String("-nc");
@@ -2001,13 +2000,13 @@ static QString baseName(const QString &fileName)
return fileName.mid(fileName.lastIndexOf(QLatin1Char('/')) + 1);
}
-bool ClearCasePluginPrivate::vcsAdd(const QString &workingDir, const QString &fileName)
+bool ClearCasePluginPrivate::vcsAdd(const FilePath &workingDir, const QString &fileName)
{
return ccFileOp(workingDir, tr("ClearCase Add File %1").arg(baseName(fileName)),
QStringList({"mkelem", "-ci"}), fileName);
}
-bool ClearCasePluginPrivate::vcsDelete(const QString &workingDir, const QString &fileName)
+bool ClearCasePluginPrivate::vcsDelete(const FilePath &workingDir, const QString &fileName)
{
const QString title(tr("ClearCase Remove Element %1").arg(baseName(fileName)));
if (QMessageBox::warning(ICore::dialogParent(), title, tr("This operation is irreversible. Are you sure?"),
@@ -2018,7 +2017,7 @@ bool ClearCasePluginPrivate::vcsDelete(const QString &workingDir, const QString
QStringList({"rmname", "-force"}), fileName);
}
-bool ClearCasePluginPrivate::vcsMove(const QString &workingDir, const QString &from, const QString &to)
+bool ClearCasePluginPrivate::vcsMove(const FilePath &workingDir, const QString &from, const QString &to)
{
return ccFileOp(workingDir, tr("ClearCase Rename File %1 -> %2")
.arg(baseName(from)).arg(baseName(to)),
@@ -2032,9 +2031,9 @@ bool ClearCasePluginPrivate::managesDirectory(const FilePath &directory, FilePat
{
#ifdef WITH_TESTS
// If running with tests and fake ClearTool is enabled, then pretend we manage every directory
- QString topLevelFound = m_fakeClearTool ? directory.toString() : findTopLevel(directory.toString());
+ QString topLevelFound = m_fakeClearTool ? directory.toString() : findTopLevel(directory);
#else
- QString topLevelFound = findTopLevel(directory.toString());
+ QString topLevelFound = findTopLevel(directory);
#endif
if (topLevel)
@@ -2117,7 +2116,7 @@ QList<QStringPair> ClearCasePluginPrivate::activities(int *current)
bool ClearCasePluginPrivate::newActivity()
{
- QString workingDir = currentState().topLevel();
+ FilePath workingDir = currentState().topLevel();
QStringList args;
args << QLatin1String("mkactivity") << QLatin1String("-f");
if (!m_settings.autoAssignActivityName) {
@@ -2137,7 +2136,7 @@ bool ClearCasePluginPrivate::newActivity()
}
// check if the view is UCM
-bool ClearCasePluginPrivate::ccCheckUcm(const QString &viewname, const QString &workingDir) const
+bool ClearCasePluginPrivate::ccCheckUcm(const QString &viewname, const FilePath &workingDir) const
{
QStringList catcsArgs(QLatin1String("catcs"));
catcsArgs << QLatin1String("-tag") << viewname;
@@ -2154,9 +2153,9 @@ bool ClearCasePluginPrivate::managesFile(const FilePath &workingDirectory, const
return status != FileStatus::NotManaged && status != FileStatus::Derived;
}
-ViewData ClearCasePluginPrivate::ccGetView(const QString &workingDir) const
+ViewData ClearCasePluginPrivate::ccGetView(const FilePath &workingDir) const
{
- static QHash<QString, ViewData> viewCache;
+ static QHash<FilePath, ViewData> viewCache;
bool inCache = viewCache.contains(workingDir);
ViewData &res = viewCache[workingDir];
@@ -2173,7 +2172,7 @@ ViewData ClearCasePluginPrivate::ccGetView(const QString &workingDir) const
return res;
}
-QString ClearCasePluginPrivate::ccGetComment(const QString &workingDir, const QString &fileName) const
+QString ClearCasePluginPrivate::ccGetComment(const FilePath &workingDir, const QString &fileName) const
{
QStringList args(QLatin1String("describe"));
args << QLatin1String("-fmt") << QLatin1String("%c") << fileName;
@@ -2204,9 +2203,9 @@ void ClearCasePluginPrivate::projectChanged(Project *project)
m_intStream.clear();
ProgressManager::cancelTasks(ClearCase::Constants::TASK_INDEX);
if (project) {
- QString projDir = project->projectDirectory().toString();
+ FilePath projDir = project->projectDirectory();
QString topLevel = findTopLevel(projDir);
- m_topLevel = topLevel;
+ m_topLevel = FilePath::fromString(topLevel);
if (topLevel.isEmpty())
return;
connect(qApp, &QApplication::applicationStateChanged,
@@ -2267,7 +2266,7 @@ QString ClearCasePluginPrivate::getFile(const QString &nativeFile, const QString
if (Constants::debug)
qDebug() << Q_FUNC_INFO << nativeFile;
if ((atatpos != -1) && (nativeFile.indexOf(QLatin1String("CHECKEDOUT"), atatpos) != -1)) {
- bool res = QFile::copy(QDir(m_topLevel).absoluteFilePath(file), tempFile);
+ bool res = QFile::copy(QDir(m_topLevel.toString()).absoluteFilePath(file), tempFile);
return res ? tempFile : QString();
}
QStringList args(QLatin1String("get"));
@@ -2345,11 +2344,11 @@ void ClearCasePluginPrivate::diffGraphical(const QString &file1, const QString &
args << file1;
if (!pred)
args << file2;
- QProcess::startDetached(m_settings.ccBinaryPath, args, m_topLevel);
+ QProcess::startDetached(m_settings.ccBinaryPath, args, m_topLevel.toString());
}
-QString ClearCasePluginPrivate::runExtDiff(const QString &workingDir, const QStringList &arguments,
- int timeOutS, QTextCodec *outputCodec)
+QString ClearCasePluginPrivate::runExtDiff(const FilePath &workingDir, const QStringList &arguments,
+ int timeOutS, QTextCodec *outputCodec)
{
CommandLine diff("diff");
diff.addArgs(m_settings.diffArgs.split(' ', Qt::SkipEmptyParts));
@@ -2372,7 +2371,7 @@ void ClearCasePluginPrivate::syncSlot()
VcsBasePluginState state = currentState();
if (!state.hasProject() || !state.hasTopLevel())
return;
- QString topLevel = state.topLevel();
+ FilePath topLevel = state.topLevel();
if (topLevel != state.currentProjectTopLevel())
return;
Utils::runAsync(sync, QStringList());
@@ -2461,8 +2460,7 @@ Core::IVersionControl::OpenSupportMode ClearCasePluginPrivate::openSupportMode(c
bool ClearCasePluginPrivate::vcsOpen(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsOpen(fi.absolutePath(), fi.fileName());
+ return vcsOpen(filePath.parentDir().absolutePath(), filePath.fileName());
}
Core::IVersionControl::SettingsFlags ClearCasePluginPrivate::settingsFlags() const
@@ -2475,27 +2473,24 @@ Core::IVersionControl::SettingsFlags ClearCasePluginPrivate::settingsFlags() con
bool ClearCasePluginPrivate::vcsAdd(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsAdd(fi.absolutePath(), fi.fileName());
+ return vcsAdd(filePath.parentDir().absolutePath(), filePath.fileName());
}
bool ClearCasePluginPrivate::vcsDelete(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsDelete(fi.absolutePath(), fi.fileName());
+ return vcsDelete(filePath.parentDir().absoluteFilePath(), filePath.fileName());
}
bool ClearCasePluginPrivate::vcsMove(const FilePath &from, const FilePath &to)
{
const QFileInfo ifrom = from.toFileInfo();
const QFileInfo ito = from.toFileInfo();
- return vcsMove(ifrom.absolutePath(), from.fileName(), to.fileName());
+ return vcsMove(from.parentDir().absolutePath(), from.fileName(), to.fileName());
}
void ClearCasePluginPrivate::vcsAnnotate(const FilePath &filePath, int line)
{
- const QFileInfo fi = filePath.toFileInfo();
- vcsAnnotateHelper(fi.absolutePath(), fi.fileName(), QString(), line);
+ vcsAnnotateHelper(filePath.parentDir().absolutePath(), filePath.fileName(), QString(), line);
}
QString ClearCasePluginPrivate::vcsOpenText() const
@@ -2512,7 +2507,7 @@ QString ClearCasePluginPrivate::vcsMakeWritableText() const
QString ClearCasePluginPrivate::vcsTopic(const FilePath &directory)
{
- return ccGetView(directory.toString()).name;
+ return ccGetView(directory).name;
}
bool ClearCasePluginPrivate::vcsCreateRepository(const FilePath &)
diff --git a/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp b/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp
index ccb55260fa5..8f59478003e 100644
--- a/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp
@@ -427,7 +427,7 @@ void ReadOnlyFilesDialogPrivate::initDialog(const FilePaths &filePaths)
// Add a button for opening the file with a version control system
// if the file is managed by an version control system which allows opening files.
IVersionControl *versionControlForFile =
- VcsManager::findVersionControlForDirectory(directory.toString());
+ VcsManager::findVersionControlForDirectory(directory);
const bool fileManagedByVCS = versionControlForFile
&& versionControlForFile->openSupportMode(filePath) != IVersionControl::NoOpen;
if (fileManagedByVCS) {
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 5c3f6502371..4a81bdc0619 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -1996,7 +1996,7 @@ void EditorManagerPrivate::updateMakeWritableWarning()
// Do this after setWriteWarning so we don't re-evaluate this part even
// if we do not really show a warning.
bool promptVCS = false;
- const QString directory = document->filePath().toFileInfo().absolutePath();
+ const FilePath directory = document->filePath().parentDir();
IVersionControl *versionControl = VcsManager::findVersionControlForDirectory(directory);
if (versionControl && versionControl->openSupportMode(document->filePath()) != IVersionControl::NoOpen) {
if (versionControl->settingsFlags() & IVersionControl::AutoOpen) {
@@ -2248,7 +2248,7 @@ void EditorManagerPrivate::vcsOpenCurrentEditor()
if (!document)
return;
- const QString directory = document->filePath().toFileInfo().absolutePath();
+ const FilePath directory = document->filePath().parentDir();
IVersionControl *versionControl = VcsManager::findVersionControlForDirectory(directory);
if (!versionControl || versionControl->openSupportMode(document->filePath()) == IVersionControl::NoOpen)
return;
diff --git a/src/plugins/coreplugin/fileutils.cpp b/src/plugins/coreplugin/fileutils.cpp
index 5f632a5fec3..04c0ffd93b4 100644
--- a/src/plugins/coreplugin/fileutils.cpp
+++ b/src/plugins/coreplugin/fileutils.cpp
@@ -201,7 +201,7 @@ bool FileUtils::renameFile(const FilePath &orgFilePath, const FilePath &newFileP
return false;
FilePath dir = orgFilePath.absolutePath();
- IVersionControl *vc = VcsManager::findVersionControlForDirectory(dir.toString());
+ IVersionControl *vc = VcsManager::findVersionControlForDirectory(dir);
bool result = false;
if (vc && vc->supportsOperation(IVersionControl::MoveOperation))
diff --git a/src/plugins/coreplugin/iversioncontrol.h b/src/plugins/coreplugin/iversioncontrol.h
index 84484975801..98ec38f0583 100644
--- a/src/plugins/coreplugin/iversioncontrol.h
+++ b/src/plugins/coreplugin/iversioncontrol.h
@@ -256,7 +256,7 @@ public:
void setTopicCache(TopicCache *topicCache);
signals:
- void repositoryChanged(const QString &repository);
+ void repositoryChanged(const Utils::FilePath &repository);
void filesChanged(const QStringList &files);
void configurationChanged();
diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp
index 4c23d65a97e..80d4889f3a3 100644
--- a/src/plugins/coreplugin/vcsmanager.cpp
+++ b/src/plugins/coreplugin/vcsmanager.cpp
@@ -210,10 +210,10 @@ void VcsManager::resetVersionControlForDirectory(const FilePath &inputDirectory)
const QString directory = absoluteWithNoTrailingSlash(inputDirectory.toString());
d->resetCache(directory);
- emit m_instance->repositoryChanged(directory);
+ emit m_instance->repositoryChanged(FilePath::fromString(directory));
}
-IVersionControl* VcsManager::findVersionControlForDirectory(const QString &inputDirectory,
+IVersionControl* VcsManager::findVersionControlForDirectory(const FilePath &inputDirectory,
QString *topLevelDirectory)
{
using StringVersionControlPair = QPair<QString, IVersionControl *>;
@@ -225,7 +225,7 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const QString &input
}
// Make sure we an absolute path:
- QString directory = absoluteWithNoTrailingSlash(inputDirectory);
+ QString directory = absoluteWithNoTrailingSlash(inputDirectory.toString());
#ifdef WITH_TESTS
if (directory[0].isLetter() && directory.indexOf(QLatin1Char(':') + QLatin1String(TEST_PREFIX)) == 1)
directory = directory.mid(2);
@@ -321,11 +321,11 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const QString &input
return versionControl;
}
-QString VcsManager::findTopLevelForDirectory(const QString &directory)
+FilePath VcsManager::findTopLevelForDirectory(const FilePath &directory)
{
QString result;
findVersionControlForDirectory(directory, &result);
- return result;
+ return FilePath::fromString(result);
}
QStringList VcsManager::repositories(const IVersionControl *vc)
@@ -354,7 +354,7 @@ FilePaths VcsManager::promptToDelete(const FilePaths &filePaths)
// Categorize by version control system.
QHash<IVersionControl *, FilePaths> filesByVersionControl;
for (auto it = filesByParentDir.cbegin(); it != filesByParentDir.cend(); ++it) {
- IVersionControl * const vc = findVersionControlForDirectory(it.key().toString());
+ IVersionControl * const vc = findVersionControlForDirectory(it.key());
if (vc)
filesByVersionControl[vc] << it.value();
}
@@ -433,7 +433,7 @@ QStringList VcsManager::additionalToolsPath()
void VcsManager::promptToAdd(const QString &directory, const QStringList &fileNames)
{
- IVersionControl *vc = findVersionControlForDirectory(directory);
+ IVersionControl *vc = findVersionControlForDirectory(FilePath::fromString(directory));
if (!vc || !vc->supportsOperation(IVersionControl::AddOperation))
return;
@@ -460,7 +460,7 @@ void VcsManager::promptToAdd(const QString &directory, const QStringList &fileNa
void VcsManager::emitRepositoryChanged(const QString &repository)
{
- emit m_instance->repositoryChanged(repository);
+ emit m_instance->repositoryChanged(FilePath::fromString(repository));
}
void VcsManager::clearVersionControlCache()
@@ -468,7 +468,7 @@ void VcsManager::clearVersionControlCache()
QStringList repoList = d->m_cachedMatches.keys();
d->clearCache();
foreach (const QString &repo, repoList)
- emit m_instance->repositoryChanged(repo);
+ emit m_instance->repositoryChanged(FilePath::fromString(repo));
}
void VcsManager::handleConfigurationChanges()
@@ -606,7 +606,8 @@ void CorePlugin::testVcsManager()
++expectedCount;
IVersionControl *vcs;
- vcs = VcsManager::findVersionControlForDirectory(makeString(directory), &realTopLevel);
+ vcs = VcsManager::findVersionControlForDirectory(
+ FilePath::fromString(makeString(directory)), &realTopLevel);
QCOMPARE(realTopLevel, makeString(topLevel));
if (vcs)
QCOMPARE(vcs->id().toString(), vcsId);
diff --git a/src/plugins/coreplugin/vcsmanager.h b/src/plugins/coreplugin/vcsmanager.h
index 6a8cfc351fa..6cb5241e916 100644
--- a/src/plugins/coreplugin/vcsmanager.h
+++ b/src/plugins/coreplugin/vcsmanager.h
@@ -64,9 +64,9 @@ public:
static IVersionControl *versionControl(Utils::Id id);
static void resetVersionControlForDirectory(const Utils::FilePath &inputDirectory);
- static IVersionControl *findVersionControlForDirectory(const QString &directory,
+ static IVersionControl *findVersionControlForDirectory(const Utils::FilePath &directory,
QString *topLevelDirectory = nullptr);
- static QString findTopLevelForDirectory(const QString &directory);
+ static Utils::FilePath findTopLevelForDirectory(const Utils::FilePath &directory);
static QStringList repositories(const IVersionControl *);
@@ -99,7 +99,7 @@ public:
static void clearVersionControlCache();
signals:
- void repositoryChanged(const QString &repository);
+ void repositoryChanged(const Utils::FilePath &repository);
void configurationChanged(const IVersionControl *vcs);
private:
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index f816bc06fa2..dab1e530d5d 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -234,7 +234,7 @@ public:
QString displayName() const final { return QLatin1String("cvs"); }
Utils::Id id() const final;
- bool isVcsFileOrDirectory(const Utils::FilePath &fileName) const final;
+ bool isVcsFileOrDirectory(const Utils::FilePath &filePath) const final;
bool managesDirectory(const Utils::FilePath &directory, Utils::FilePath *topLevel) const final;
bool managesFile(const Utils::FilePath &workingDirectory, const QString &fileName) const final;
@@ -261,12 +261,12 @@ public:
CvsSubmitEditor *openCVSSubmitEditor(const QString &fileName);
// IVersionControl
- bool vcsAdd(const QString &workingDir, const QString &fileName);
- bool vcsDelete(const QString &workingDir, const QString &fileName);
+ bool vcsAdd(const FilePath &workingDir, const QString &fileName);
+ bool vcsDelete(const FilePath &workingDir, const QString &fileName);
// cvs 'edit' is used to implement 'open' (cvsnt).
- bool edit(const QString &topLevel, const QStringList &files);
+ bool edit(const FilePath &topLevel, const QStringList &files);
- void vcsAnnotate(const QString &workingDirectory, const QString &file,
+ void vcsAnnotate(const FilePath &workingDirectory, const QString &file,
const QString &revision, int lineNumber);
void vcsDescribe(const Utils::FilePath &source, const QString &changeNr) final;
@@ -305,28 +305,28 @@ private:
Utils::Id id, const QString &source,
QTextCodec *codec);
- CvsResponse runCvs(const QString &workingDirectory,
+ CvsResponse runCvs(const FilePath &workingDirectory,
const QStringList &arguments,
int timeOutS,
unsigned flags,
QTextCodec *outputCodec = nullptr) const;
- void annotate(const QString &workingDir, const QString &file,
+ void annotate(const FilePath &workingDir, const QString &file,
const QString &revision = QString(), int lineNumber= -1);
bool describe(const QString &source, const QString &changeNr, QString *errorMessage);
- bool describe(const QString &toplevel, const QString &source, const QString &changeNr, QString *errorMessage);
- bool describe(const QString &repository, QList<CvsLogEntry> entries, QString *errorMessage);
- void filelog(const QString &workingDir,
- const QString &file = QString(),
+ bool describe(const Utils::FilePath &toplevel, const QString &source, const QString &changeNr, QString *errorMessage);
+ bool describe(const Utils::FilePath &repository, QList<CvsLogEntry> entries, QString *errorMessage);
+ void filelog(const Utils::FilePath &workingDir,
+ const QString &file = {},
bool enableAnnotationContextMenu = false);
- bool unedit(const QString &topLevel, const QStringList &files);
- bool status(const QString &topLevel, const QString &file, const QString &title);
- bool update(const QString &topLevel, const QString &file);
+ bool unedit(const Utils::FilePath &topLevel, const QStringList &files);
+ bool status(const Utils::FilePath &topLevel, const QString &file, const QString &title);
+ bool update(const Utils::FilePath &topLevel, const QString &file);
bool checkCVSDirectory(const QDir &directory) const;
// Quick check if files are modified
- bool diffCheckModified(const QString &topLevel, const QStringList &files, bool *modified);
+ bool diffCheckModified(const Utils::FilePath &topLevel, const QStringList &files, bool *modified);
QString findTopLevelForDirectoryI(const QString &directory) const;
- void startCommit(const QString &workingDir, const QString &file = QString());
+ void startCommit(const Utils::FilePath &workingDir, const QString &file = {});
bool commit(const QString &messageFile, const QStringList &subVersionFileList);
void cleanCommitMessageFile();
@@ -334,7 +334,7 @@ private:
CvsClient *m_client = nullptr;
QString m_commitMessageFileName;
- QString m_commitRepository;
+ FilePath m_commitRepository;
Core::CommandLocator *m_commandLocator = nullptr;
Utils::ParameterAction *m_addAction = nullptr;
@@ -403,10 +403,10 @@ Utils::Id CvsPluginPrivate::id() const
return Utils::Id(VcsBase::Constants::VCS_ID_CVS);
}
-bool CvsPluginPrivate::isVcsFileOrDirectory(const Utils::FilePath &fileName) const
+bool CvsPluginPrivate::isVcsFileOrDirectory(const Utils::FilePath &filePath) const
{
- return fileName.isDir()
- && !fileName.fileName().compare("CVS", Utils::HostOsInfo::fileNameCaseSensitivity());
+ return filePath.isDir()
+ && !filePath.fileName().compare("CVS", Utils::HostOsInfo::fileNameCaseSensitivity());
}
bool CvsPluginPrivate::isConfigured() const
@@ -444,20 +444,17 @@ Core::IVersionControl::OpenSupportMode CvsPluginPrivate::openSupportMode(const F
bool CvsPluginPrivate::vcsOpen(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return edit(fi.absolutePath(), QStringList(fi.fileName()));
+ return edit(filePath.parentDir(), QStringList(filePath.fileName()));
}
bool CvsPluginPrivate::vcsAdd(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsAdd(fi.absolutePath(), fi.fileName());
+ return vcsAdd(filePath.parentDir(), filePath.fileName());
}
bool CvsPluginPrivate::vcsDelete(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsDelete(fi.absolutePath(), fi.fileName());
+ return vcsDelete(filePath.parentDir(), filePath.fileName());
}
bool CvsPluginPrivate::vcsCreateRepository(const FilePath &)
@@ -467,8 +464,7 @@ bool CvsPluginPrivate::vcsCreateRepository(const FilePath &)
void CvsPluginPrivate::vcsAnnotate(const FilePath &filePath, int line)
{
- const QFileInfo fi = filePath.toFileInfo();
- vcsAnnotate(fi.absolutePath(), fi.fileName(), QString(), line);
+ vcsAnnotate(filePath.parentDir(), filePath.fileName(), QString(), line);
}
QString CvsPluginPrivate::vcsOpenText() const
@@ -486,8 +482,7 @@ Core::ShellCommand *CvsPluginPrivate::createInitialCheckoutCommand(const QString
QStringList args;
args << QLatin1String("checkout") << url << extraArgs;
- auto command = new VcsBase::VcsCommand(baseDirectory.toString(),
- Environment::systemEnvironment());
+ auto command = new VcsBase::VcsCommand(baseDirectory, Environment::systemEnvironment());
command->setDisplayName(tr("CVS Checkout"));
command->addJob({m_settings.binaryPath.filePath(), m_settings.addOptions(args)}, -1);
return command;
@@ -799,7 +794,7 @@ void CvsPluginPrivate::diffCommitFiles(const QStringList &files)
m_client->diff(m_commitRepository, files);
}
-static void setDiffBaseDirectory(IEditor *editor, const QString &db)
+static void setDiffBaseDirectory(IEditor *editor, const FilePath &db)
{
if (auto ve = qobject_cast<VcsBaseEditorWidget*>(editor->widget()))
ve->setWorkingDirectory(db);
@@ -845,7 +840,7 @@ void CvsPluginPrivate::updateActions(VcsBasePluginPrivate::ActionState as)
m_commitProjectAction->setParameter(currentProjectName);
// TODO: Find a more elegant way to shorten the path
- QString currentDirectoryName = QDir::toNativeSeparators(currentState().currentFileDirectory());
+ QString currentDirectoryName = currentState().currentFileDirectory().toUserOutput();
if (currentDirectoryName.size() > 15)
currentDirectoryName.replace(0, currentDirectoryName.size() - 15, QLatin1String("..."));
m_updateDirectoryAction->setParameter(currentDirectoryName);
@@ -874,7 +869,7 @@ void CvsPluginPrivate::revertAll()
if (!messageBoxQuestion(title, tr("Revert all pending changes to the repository?")))
return;
QStringList args;
- args << QLatin1String("update") << QLatin1String("-C") << state.topLevel();
+ args << QLatin1String("update") << QLatin1String("-C") << state.topLevel().toString();
const CvsResponse revertResponse =
runCvs(state.topLevel(), args, m_settings.timeout.value(),
VcsCommand::SshPasswordPrompt | VcsCommand::ShowStdOut);
@@ -963,7 +958,7 @@ void CvsPluginPrivate::startCommitAll()
/* Start commit of files of a single repository by displaying
* template and files in a submit editor. On closing, the real
* commit will start. */
-void CvsPluginPrivate::startCommit(const QString &workingDir, const QString &file)
+void CvsPluginPrivate::startCommit(const FilePath &workingDir, const QString &file)
{
if (!promptBeforeCommit())
return;
@@ -1051,9 +1046,9 @@ void CvsPluginPrivate::logRepository()
filelog(state.topLevel());
}
-void CvsPluginPrivate::filelog(const QString &workingDir,
- const QString &file,
- bool enableAnnotationContextMenu)
+void CvsPluginPrivate::filelog(const FilePath &workingDir,
+ const QString &file,
+ bool enableAnnotationContextMenu)
{
QTextCodec *codec = VcsBaseEditor::getCodec(workingDir, QStringList(file));
// no need for temp file
@@ -1070,7 +1065,7 @@ void CvsPluginPrivate::filelog(const QString &workingDir,
// Re-use an existing view if possible to support
// the common usage pattern of continuously changing and diffing a file
- const QString tag = VcsBaseEditor::editorTag(LogOutput, workingDir, QStringList(file));
+ const QString tag = VcsBaseEditor::editorTag(LogOutput, workingDir.toString(), QStringList(file));
if (IEditor *editor = VcsBaseEditor::locateEditorByTag(tag)) {
editor->document()->setContents(response.stdOut.toUtf8());
EditorManager::activateEditor(editor);
@@ -1097,7 +1092,7 @@ void CvsPluginPrivate::updateProject()
update(state.currentProjectTopLevel(), state.relativeCurrentProject());
}
-bool CvsPluginPrivate::update(const QString &topLevel, const QString &file)
+bool CvsPluginPrivate::update(const FilePath &topLevel, const QString &file)
{
QStringList args(QLatin1String("update"));
args.push_back(QLatin1String("-dR"));
@@ -1140,13 +1135,13 @@ void CvsPluginPrivate::annotateCurrentFile()
annotate(state.currentFileTopLevel(), state.relativeCurrentFile());
}
-void CvsPluginPrivate::vcsAnnotate(const QString &workingDirectory, const QString &file,
- const QString &revision, int lineNumber)
+void CvsPluginPrivate::vcsAnnotate(const FilePath &workingDirectory, const QString &file,
+ const QString &revision, int lineNumber)
{
annotate(workingDirectory, file, revision, lineNumber);
}
-bool CvsPluginPrivate::edit(const QString &topLevel, const QStringList &files)
+bool CvsPluginPrivate::edit(const FilePath &topLevel, const QStringList &files)
{
QStringList args(QLatin1String("edit"));
args.append(files);
@@ -1156,7 +1151,7 @@ bool CvsPluginPrivate::edit(const QString &topLevel, const QStringList &files)
return response.result == CvsResponse::Ok;
}
-bool CvsPluginPrivate::diffCheckModified(const QString &topLevel, const QStringList &files, bool *modified)
+bool CvsPluginPrivate::diffCheckModified(const FilePath &topLevel, const QStringList &files, bool *modified)
{
// Quick check for modified files using diff
*modified = false;
@@ -1170,7 +1165,7 @@ bool CvsPluginPrivate::diffCheckModified(const QString &topLevel, const QStringL
return true;
}
-bool CvsPluginPrivate::unedit(const QString &topLevel, const QStringList &files)
+bool CvsPluginPrivate::unedit(const FilePath &topLevel, const QStringList &files)
{
bool modified;
// Prompt and use force flag if modified
@@ -1178,8 +1173,8 @@ bool CvsPluginPrivate::unedit(const QString &topLevel, const QStringList &files)
return false;
if (modified) {
const QString question = files.isEmpty() ?
- tr("Would you like to discard your changes to the repository \"%1\"?").arg(topLevel) :
- tr("Would you like to discard your changes to the file \"%1\"?").arg(files.front());
+ tr("Would you like to discard your changes to the repository \"%1\"?").arg(topLevel.toUserOutput()) :
+ tr("Would you like to discard your changes to the file \"%1\"?").arg(files.front());
if (!messageBoxQuestion(tr("Unedit"), question))
return false;
}
@@ -1196,9 +1191,9 @@ bool CvsPluginPrivate::unedit(const QString &topLevel, const QStringList &files)
return response.result == CvsResponse::Ok;
}
-void CvsPluginPrivate::annotate(const QString &workingDir, const QString &file,
- const QString &revision /* = QString() */,
- int lineNumber /* = -1 */)
+void CvsPluginPrivate::annotate(const FilePath &workingDir, const QString &file,
+ const QString &revision /* = QString() */,
+ int lineNumber /* = -1 */)
{
const QStringList files(file);
QTextCodec *codec = VcsBaseEditor::getCodec(workingDir, files);
@@ -1220,7 +1215,7 @@ void CvsPluginPrivate::annotate(const QString &workingDir, const QString &file,
if (lineNumber < 1)
lineNumber = VcsBaseEditor::lineNumberOfCurrentEditor(file);
- const QString tag = VcsBaseEditor::editorTag(AnnotateOutput, workingDir, QStringList(file), revision);
+ const QString tag = VcsBaseEditor::editorTag(AnnotateOutput, workingDir.toString(), QStringList(file), revision);
if (IEditor *editor = VcsBaseEditor::locateEditorByTag(tag)) {
editor->document()->setContents(response.stdOut.toUtf8());
VcsBaseEditor::gotoLineOfEditor(editor, lineNumber);
@@ -1233,7 +1228,7 @@ void CvsPluginPrivate::annotate(const QString &workingDir, const QString &file,
}
}
-bool CvsPluginPrivate::status(const QString &topLevel, const QString &file, const QString &title)
+bool CvsPluginPrivate::status(const FilePath &topLevel, const QString &file, const QString &title)
{
QStringList args(QLatin1String("status"));
if (!file.isEmpty())
@@ -1242,7 +1237,7 @@ bool CvsPluginPrivate::status(const QString &topLevel, const QString &file, cons
runCvs(topLevel, args, m_settings.timeout.value(), 0);
const bool ok = response.result == CvsResponse::Ok;
if (ok)
- showOutputInEditor(title, response.stdOut, commandLogEditorParameters.id, topLevel, nullptr);
+ showOutputInEditor(title, response.stdOut, commandLogEditorParameters.id, topLevel.toString(), nullptr);
return ok;
}
@@ -1291,10 +1286,10 @@ bool CvsPluginPrivate::describe(const QString &file, const QString &changeNr, QS
.arg(QDir::toNativeSeparators(file));
return false;
}
- return describe(toplevel.toString(), QDir(toplevel.toString()).relativeFilePath(file), changeNr, errorMessage);
+ return describe(toplevel, QDir(toplevel.toString()).relativeFilePath(file), changeNr, errorMessage);
}
-bool CvsPluginPrivate::describe(const QString &toplevel, const QString &file, const
+bool CvsPluginPrivate::describe(const FilePath &toplevel, const QString &file, const
QString &changeNr, QString *errorMessage)
{
@@ -1356,9 +1351,9 @@ bool CvsPluginPrivate::describe(const QString &toplevel, const QString &file, co
// Describe a set of files and revisions by
// concatenating log and diffs to previous revisions
-bool CvsPluginPrivate::describe(const QString &repositoryPath,
- QList<CvsLogEntry> entries,
- QString *errorMessage)
+bool CvsPluginPrivate::describe(const FilePath &repositoryPath,
+ QList<CvsLogEntry> entries,
+ QString *errorMessage)
{
// Collect logs
QString output;
@@ -1431,11 +1426,11 @@ void CvsPluginPrivate::commitFromEditor()
// Run CVS. At this point, file arguments must be relative to
// the working directory (see above).
-CvsResponse CvsPluginPrivate::runCvs(const QString &workingDirectory,
- const QStringList &arguments,
- int timeOutS,
- unsigned flags,
- QTextCodec *outputCodec) const
+CvsResponse CvsPluginPrivate::runCvs(const FilePath &workingDirectory,
+ const QStringList &arguments,
+ int timeOutS,
+ unsigned flags,
+ QTextCodec *outputCodec) const
{
const FilePath executable = m_settings.binaryPath.filePath();
CvsResponse response;
@@ -1495,7 +1490,7 @@ IEditor *CvsPluginPrivate::showOutputInEditor(const QString& title, const QStrin
return editor;
}
-bool CvsPluginPrivate::vcsAdd(const QString &workingDir, const QString &rawFileName)
+bool CvsPluginPrivate::vcsAdd(const FilePath &workingDir, const QString &rawFileName)
{
QStringList args;
args << QLatin1String("add") << rawFileName;
@@ -1505,7 +1500,7 @@ bool CvsPluginPrivate::vcsAdd(const QString &workingDir, const QString &rawFileN
return response.result == CvsResponse::Ok;
}
-bool CvsPluginPrivate::vcsDelete(const QString &workingDir, const QString &rawFileName)
+bool CvsPluginPrivate::vcsDelete(const FilePath &workingDir, const QString &rawFileName)
{
QStringList args;
args << QLatin1String("remove") << QLatin1String("-f") << rawFileName;
@@ -1551,7 +1546,7 @@ bool CvsPluginPrivate::managesFile(const FilePath &workingDirectory, const QStri
QStringList args;
args << QLatin1String("status") << fileName;
const CvsResponse response =
- runCvs(workingDirectory.toString(), args, m_settings.timeout.value(), VcsCommand::SshPasswordPrompt);
+ runCvs(workingDirectory, args, m_settings.timeout.value(), VcsCommand::SshPasswordPrompt);
if (response.result != CvsResponse::Ok)
return false;
return !response.stdOut.contains(QLatin1String("Status: Unknown"));
diff --git a/src/plugins/git/branchmodel.cpp b/src/plugins/git/branchmodel.cpp
index 146c051ea2e..0256c30a415 100644
--- a/src/plugins/git/branchmodel.cpp
+++ b/src/plugins/git/branchmodel.cpp
@@ -39,6 +39,7 @@
#include <set>
+using namespace Utils;
using namespace VcsBase;
namespace Git {
@@ -240,7 +241,7 @@ public:
BranchModel *q;
GitClient *client;
- QString workingDirectory;
+ FilePath workingDirectory;
BranchNode *rootNode;
BranchNode *currentBranch = nullptr;
BranchNode *headNode = nullptr;
@@ -422,7 +423,7 @@ void BranchModel::clear()
d->obsoleteLocalBranches.clear();
}
-bool BranchModel::refresh(const QString &workingDirectory, QString *errorMessage)
+bool BranchModel::refresh(const FilePath &workingDirectory, QString *errorMessage)
{
beginResetModel();
clear();
@@ -510,7 +511,7 @@ void BranchModel::renameTag(const QString &oldName, const QString &newName)
}
}
-QString BranchModel::workingDirectory() const
+FilePath BranchModel::workingDirectory() const
{
return d->workingDirectory;
}
diff --git a/src/plugins/git/branchmodel.h b/src/plugins/git/branchmodel.h
index ba0c2997359..267e911e914 100644
--- a/src/plugins/git/branchmodel.h
+++ b/src/plugins/git/branchmodel.h
@@ -25,6 +25,7 @@
#pragma once
+#include <utils/filepath.h>
#include <utils/optional.h>
#include <QAbstractListModel>
@@ -60,12 +61,12 @@ public:
Qt::ItemFlags flags(const QModelIndex &index) const override;
void clear();
- bool refresh(const QString &workingDirectory, QString *errorMessage);
+ bool refresh(const Utils::FilePath &workingDirectory, QString *errorMessage);
void renameBranch(const QString &oldName, const QString &newName);
void renameTag(const QString &oldName, const QString &newName);
- QString workingDirectory() const;
+ Utils::FilePath workingDirectory() const;
QModelIndex currentBranch() const;
QString fullName(const QModelIndex &idx, bool includePrefix = false) const;
diff --git a/src/plugins/git/branchview.cpp b/src/plugins/git/branchview.cpp
index 04fe69ebed6..ffc346d71ca 100644
--- a/src/plugins/git/branchview.cpp
+++ b/src/plugins/git/branchview.cpp
@@ -56,6 +56,7 @@
#include <QVBoxLayout>
using namespace Core;
+using namespace Utils;
namespace Git {
namespace Internal {
@@ -139,13 +140,13 @@ BranchView::BranchView()
refreshCurrentRepository();
}
-void BranchView::refreshIfSame(const QString &repository)
+void BranchView::refreshIfSame(const FilePath &repository)
{
if (m_repository == repository)
refreshCurrentRepository();
}
-void BranchView::refresh(const QString &repository, bool force)
+void BranchView::refresh(const FilePath &repository, bool force)
{
if (m_repository == repository && !force)
return;
@@ -156,7 +157,7 @@ void BranchView::refresh(const QString &repository, bool force)
m_addAction->setToolTip(tr("Create Git Repository..."));
m_branchView->setEnabled(false);
} else {
- m_repositoryLabel->setText(QDir::toNativeSeparators(m_repository));
+ m_repositoryLabel->setText(m_repository.toUserOutput());
m_repositoryLabel->setToolTip(GitPlugin::msgRepositoryLabel(m_repository));
m_addAction->setToolTip(tr("Add Branch..."));
m_branchView->setEnabled(true);
diff --git a/src/plugins/git/branchview.h b/src/plugins/git/branchview.h
index 85dc700bd99..9d46f52e6e1 100644
--- a/src/plugins/git/branchview.h
+++ b/src/plugins/git/branchview.h
@@ -27,6 +27,8 @@
#include <coreplugin/inavigationwidgetfactory.h>
+#include <utils/filepath.h>
+
#include <QPointer>
#include <QWidget>
@@ -55,8 +57,8 @@ class BranchView : public QWidget
public:
explicit BranchView();
- void refreshIfSame(const QString &repository);
- void refresh(const QString &repository, bool force);
+ void refreshIfSame(const Utils::FilePath &repository);
+ void refresh(const Utils::FilePath &repository, bool force);
void refreshCurrentBranch();
QList<QToolButton *> createToolButtons();
@@ -94,7 +96,7 @@ private:
Utils::NavigationTreeView *m_branchView = nullptr;
BranchModel *m_model = nullptr;
BranchFilterModel *m_filterModel = nullptr;
- QString m_repository;
+ Utils::FilePath m_repository;
};
class BranchViewFactory : public Core::INavigationWidgetFactory
diff --git a/src/plugins/git/changeselectiondialog.cpp b/src/plugins/git/changeselectiondialog.cpp
index a5bc3f6a47b..847b08759d0 100644
--- a/src/plugins/git/changeselectiondialog.cpp
+++ b/src/plugins/git/changeselectiondialog.cpp
@@ -52,7 +52,7 @@ using namespace Utils;
namespace Git {
namespace Internal {
-ChangeSelectionDialog::ChangeSelectionDialog(const QString &workingDirectory, Utils::Id id,
+ChangeSelectionDialog::ChangeSelectionDialog(const FilePath &workingDirectory, Id id,
QWidget *parent) :
QDialog(parent), m_ui(new Ui::ChangeSelectionDialog)
{
@@ -60,7 +60,7 @@ ChangeSelectionDialog::ChangeSelectionDialog(const QString &workingDirectory, Ut
m_ui->setupUi(this);
m_ui->workingDirectoryChooser->setExpectedKind(PathChooser::ExistingDirectory);
m_ui->workingDirectoryChooser->setPromptDialogTitle(tr("Select Git Directory"));
- m_ui->workingDirectoryChooser->setPath(workingDirectory);
+ m_ui->workingDirectoryChooser->setFilePath(workingDirectory);
m_gitEnvironment = GitClient::instance()->processEnvironment();
m_ui->changeNumberEdit->setFocus();
m_ui->changeNumberEdit->selectAll();
@@ -116,7 +116,7 @@ QString ChangeSelectionDialog::change() const
void ChangeSelectionDialog::selectCommitFromRecentHistory()
{
- QString workingDir = workingDirectory();
+ FilePath workingDir = workingDirectory();
if (workingDir.isEmpty())
return;
@@ -135,11 +135,11 @@ void ChangeSelectionDialog::selectCommitFromRecentHistory()
m_ui->changeNumberEdit->setText(dialog.commit());
}
-QString ChangeSelectionDialog::workingDirectory() const
+FilePath ChangeSelectionDialog::workingDirectory() const
{
- const QString workingDir = m_ui->workingDirectoryChooser->filePath().toString();
- if (workingDir.isEmpty() || !QDir(workingDir).exists())
- return QString();
+ const FilePath workingDir = m_ui->workingDirectoryChooser->filePath();
+ if (workingDir.isEmpty() || !workingDir.exists())
+ return {};
return Core::VcsManager::findTopLevelForDirectory(workingDir);
}
@@ -193,7 +193,7 @@ void ChangeSelectionDialog::terminateProcess()
void ChangeSelectionDialog::recalculateCompletion()
{
- const QString workingDir = workingDirectory();
+ const FilePath workingDir = workingDirectory();
if (workingDir == m_oldWorkingDir)
return;
m_oldWorkingDir = workingDir;
@@ -216,7 +216,7 @@ void ChangeSelectionDialog::recalculateDetails()
terminateProcess();
enableButtons(true);
- const QString workingDir = workingDirectory();
+ const FilePath workingDir = workingDirectory();
if (workingDir.isEmpty()) {
m_ui->detailsText->setPlainText(tr("Error: Bad working directory."));
return;
@@ -229,7 +229,7 @@ void ChangeSelectionDialog::recalculateDetails()
}
m_process = new QProcess(this);
- m_process->setWorkingDirectory(workingDir);
+ m_process->setWorkingDirectory(workingDir.toString());
m_process->setProcessEnvironment(m_gitEnvironment.toProcessEnvironment());
connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
diff --git a/src/plugins/git/changeselectiondialog.h b/src/plugins/git/changeselectiondialog.h
index 32fd47590f6..edaaf61c630 100644
--- a/src/plugins/git/changeselectiondialog.h
+++ b/src/plugins/git/changeselectiondialog.h
@@ -54,12 +54,12 @@ class ChangeSelectionDialog : public QDialog
{
Q_OBJECT
public:
- ChangeSelectionDialog(const QString &workingDirectory, Utils::Id id, QWidget *parent);
+ ChangeSelectionDialog(const Utils::FilePath &workingDirectory, Utils::Id id, QWidget *parent);
~ChangeSelectionDialog() override;
QString change() const;
- QString workingDirectory() const;
+ Utils::FilePath workingDirectory() const;
ChangeCommand command() const;
private:
@@ -80,7 +80,7 @@ private:
Utils::Environment m_gitEnvironment;
ChangeCommand m_command = NoCommand;
QStringListModel *m_changeModel = nullptr;
- QString m_oldWorkingDir;
+ Utils::FilePath m_oldWorkingDir;
};
} // namespace Internal
diff --git a/src/plugins/git/commitdata.h b/src/plugins/git/commitdata.h
index 28c1029d95b..efa94f633c1 100644
--- a/src/plugins/git/commitdata.h
+++ b/src/plugins/git/commitdata.h
@@ -27,6 +27,8 @@
#include "gitsettings.h" // CommitType
+#include <utils/filepath.h>
+
#include <QCoreApplication>
#include <QStringList>
#include <QPair>
@@ -43,7 +45,7 @@ class GitSubmitEditorPanelInfo
{
public:
void clear();
- QString repository;
+ Utils::FilePath repository;
QString branch;
};
diff --git a/src/plugins/git/gerrit/branchcombobox.cpp b/src/plugins/git/gerrit/branchcombobox.cpp
index bc7aa282df2..b72c4b6b1c3 100644
--- a/src/plugins/git/gerrit/branchcombobox.cpp
+++ b/src/plugins/git/gerrit/branchcombobox.cpp
@@ -28,11 +28,12 @@
using namespace Git::Internal;
using namespace Gerrit::Internal;
+using namespace Utils;
BranchComboBox::BranchComboBox(QWidget *parent) : QComboBox(parent)
{ }
-void BranchComboBox::init(const QString &repository)
+void BranchComboBox::init(const FilePath &repository)
{
m_repository = repository;
QString currentBranch = GitClient::instance()->synchronousCurrentLocalBranch(repository);
diff --git a/src/plugins/git/gerrit/branchcombobox.h b/src/plugins/git/gerrit/branchcombobox.h
index fcc97693a6f..ee65bce3a55 100644
--- a/src/plugins/git/gerrit/branchcombobox.h
+++ b/src/plugins/git/gerrit/branchcombobox.h
@@ -25,6 +25,8 @@
#pragma once
+#include <utils/filepath.h>
+
#include <QComboBox>
namespace Git {
@@ -38,10 +40,10 @@ class BranchComboBox : public QComboBox
{
public:
explicit BranchComboBox(QWidget *parent = nullptr);
- void init(const QString &repository);
+ void init(const Utils::FilePath &repository);
private:
- QString m_repository;
+ Utils::FilePath m_repository;
bool m_detached = false;
};
diff --git a/src/plugins/git/gerrit/gerritdialog.cpp b/src/plugins/git/gerrit/gerritdialog.cpp
index 875ca8b44fe..9ffe8bd5ba3 100644
--- a/src/plugins/git/gerrit/gerritdialog.cpp
+++ b/src/plugins/git/gerrit/gerritdialog.cpp
@@ -46,6 +46,8 @@
#include <QStringListModel>
#include <QUrl>
+using namespace Utils;
+
namespace Gerrit {
namespace Internal {
@@ -53,7 +55,7 @@ static const int maxTitleWidth = 350;
GerritDialog::GerritDialog(const QSharedPointer<GerritParameters> &p,
const QSharedPointer<GerritServer> &s,
- const QString &repository,
+ const FilePath &repository,
QWidget *parent)
: QDialog(parent)
, m_parameters(p)
@@ -127,12 +129,12 @@ GerritDialog::GerritDialog(const QSharedPointer<GerritParameters> &p,
m_refreshButton->setDefault(true);
}
-QString GerritDialog::repositoryPath() const
+FilePath GerritDialog::repositoryPath() const
{
return m_repository;
}
-void GerritDialog::setCurrentPath(const QString &path)
+void GerritDialog::setCurrentPath(const FilePath &path)
{
if (path == m_repository)
return;
@@ -244,7 +246,7 @@ void GerritDialog::remoteChanged()
void GerritDialog::updateRemotes(bool forceReload)
{
m_ui->remoteComboBox->setRepository(m_repository);
- if (m_repository.isEmpty() || !QFileInfo(m_repository).isDir())
+ if (m_repository.isEmpty() || !m_repository.isDir())
return;
*m_server = m_parameters->server;
m_ui->remoteComboBox->updateRemotes(forceReload);
diff --git a/src/plugins/git/gerrit/gerritdialog.h b/src/plugins/git/gerrit/gerritdialog.h
index 98d3015d254..5d41798c275 100644
--- a/src/plugins/git/gerrit/gerritdialog.h
+++ b/src/plugins/git/gerrit/gerritdialog.h
@@ -25,6 +25,8 @@
#pragma once
+#include <utils/filepath.h>
+
#include <QDialog>
#include <QSharedPointer>
#include <QTimer>
@@ -54,11 +56,11 @@ class GerritDialog : public QDialog
public:
explicit GerritDialog(const QSharedPointer<GerritParameters> &p,
const QSharedPointer<GerritServer> &s,
- const QString &repository,
+ const Utils::FilePath &repository,
QWidget *parent = nullptr);
~GerritDialog() override;
- QString repositoryPath() const;
- void setCurrentPath(const QString &path);
+ Utils::FilePath repositoryPath() const;
+ void setCurrentPath(const Utils::FilePath &path);
void fetchStarted(const QSharedPointer<Gerrit::Internal::GerritChange> &change);
void fetchFinished();
void refresh();
@@ -100,7 +102,7 @@ private:
QPushButton *m_refreshButton;
Utils::ProgressIndicator *m_progressIndicator;
QTimer m_progressIndicatorTimer;
- QString m_repository;
+ Utils::FilePath m_repository;
bool m_fetchRunning = false;
bool m_updatingRemotes = false;
bool m_shouldUpdateRemotes = false;
diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp
index 0d3401c6d1a..8a4b2b03673 100644
--- a/src/plugins/git/gerrit/gerritplugin.cpp
+++ b/src/plugins/git/gerrit/gerritplugin.cpp
@@ -92,7 +92,7 @@ class FetchContext : public QObject
Q_OBJECT
public:
FetchContext(const QSharedPointer<GerritChange> &change,
- const QString &repository, const Utils::FilePath &git,
+ const FilePath &repository, const FilePath &git,
const GerritServer &server,
FetchMode fm, QObject *parent = nullptr);
~FetchContext() override;
@@ -118,7 +118,7 @@ private:
void terminate();
const QSharedPointer<GerritChange> m_change;
- const QString m_repository;
+ const FilePath m_repository;
const FetchMode m_fetchMode;
const Utils::FilePath m_git;
const GerritServer m_server;
@@ -129,7 +129,7 @@ private:
};
FetchContext::FetchContext(const QSharedPointer<GerritChange> &change,
- const QString &repository, const Utils::FilePath &git,
+ const FilePath &repository, const FilePath &git,
const GerritServer &server,
FetchMode fm, QObject *parent)
: QObject(parent)
@@ -170,7 +170,7 @@ void FetchContext::start()
m_progress.reportStarted();
// Order: initialize future before starting the process in case error handling is invoked.
const QStringList args = m_change->gitFetchArguments(m_server);
- VcsBase::VcsOutputWindow::appendCommand(m_repository, {m_git, args});
+ VcsBase::VcsOutputWindow::appendCommand(m_repository.toString(), {m_git, args});
m_process.setCommand({m_git, args});
m_process.start();
m_process.closeWriteChannel();
@@ -242,7 +242,7 @@ void FetchContext::show()
{
const QString title = QString::number(m_change->number) + '/'
+ QString::number(m_change->currentPatchSet.patchSetNumber);
- GitClient::instance()->show(m_repository, "FETCH_HEAD", title);
+ GitClient::instance()->show(m_repository.toString(), "FETCH_HEAD", title);
}
void FetchContext::cherryPick()
@@ -314,7 +314,7 @@ void GerritPlugin::addToLocator(CommandLocator *locator)
locator->appendCommand(m_pushToGerritCommand);
}
-void GerritPlugin::push(const QString &topLevel)
+void GerritPlugin::push(const FilePath &topLevel)
{
// QScopedPointer is required to delete the dialog when leaving the function
GerritPushDialog dialog(topLevel, m_reviewers, m_parameters, ICore::dialogParent());
@@ -333,7 +333,7 @@ void GerritPlugin::push(const QString &topLevel)
GitClient::instance()->push(topLevel, {dialog.selectedRemoteName(), dialog.pushTarget()});
}
-static QString currentRepository()
+static FilePath currentRepository()
{
return GitPlugin::currentState().topLevel();
}
@@ -381,7 +381,7 @@ Utils::FilePath GerritPlugin::gitBinDirectory()
}
// Find the branch of a repository.
-QString GerritPlugin::branch(const QString &repository)
+QString GerritPlugin::branch(const FilePath &repository)
{
return GitClient::instance()->synchronousCurrentLocalBranch(repository);
}
@@ -395,9 +395,9 @@ void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode)
return;
}
- QString repository;
+ FilePath repository;
bool verifiedRepository = false;
- if (!m_dialog.isNull() && !m_parameters.isNull() && QFile::exists(m_dialog->repositoryPath()))
+ if (!m_dialog.isNull() && !m_parameters.isNull() && m_dialog->repositoryPath().exists())
repository = m_dialog->repositoryPath();
if (!repository.isEmpty()) {
@@ -421,8 +421,8 @@ void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode)
if (remote.endsWith(".git"))
remote.chop(4);
if (remote.contains(m_server->host) && remote.endsWith(change->project)
- && QFile::exists(repository + '/' + submoduleData.dir)) {
- repository = QDir::cleanPath(repository + '/' + submoduleData.dir);
+ && repository.pathAppended(submoduleData.dir).exists()) {
+ repository = repository.pathAppended(submoduleData.dir).cleanPath();
verifiedRepository = true;
break;
}
@@ -436,7 +436,7 @@ void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode)
" in %3. Select different folder?")
.arg(m_server->host,
change->project,
- QDir::toNativeSeparators(repository)),
+ repository.toUserOutput()),
QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
QMessageBox::Yes);
switch (answer) {
@@ -458,8 +458,8 @@ void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode)
tr("Enter Local Repository for \"%1\" (%2)").arg(change->project, change->branch);
const QString suggestedRespository =
findLocalRepository(change->project, change->branch);
- repository = QFileDialog::getExistingDirectory(m_dialog.data(),
- title, suggestedRespository);
+ repository = FilePath::fromString(QFileDialog::getExistingDirectory(m_dialog.data(),
+ title, suggestedRespository));
}
if (repository.isEmpty())
@@ -500,7 +500,7 @@ QString GerritPlugin::findLocalRepository(QString project, const QString &branch
if (branch.isEmpty()) {
return repository;
} else {
- const QString repositoryBranch = GerritPlugin::branch(repository);
+ const QString repositoryBranch = GerritPlugin::branch(FilePath::fromString(repository));
if (repositoryBranch.isEmpty() || repositoryBranch == branch)
return repository;
} // !branch.isEmpty()
diff --git a/src/plugins/git/gerrit/gerritplugin.h b/src/plugins/git/gerrit/gerritplugin.h
index 356d23e632f..9bf3ffcc294 100644
--- a/src/plugins/git/gerrit/gerritplugin.h
+++ b/src/plugins/git/gerrit/gerritplugin.h
@@ -58,9 +58,9 @@ public:
void initialize(Core::ActionContainer *ac);
static Utils::FilePath gitBinDirectory();
- static QString branch(const QString &repository);
+ static QString branch(const Utils::FilePath &repository);
void addToLocator(Core::CommandLocator *locator);
- void push(const QString &topLevel);
+ void push(const Utils::FilePath &topLevel);
void updateActions(const VcsBase::VcsBasePluginState &state);
diff --git a/src/plugins/git/gerrit/gerritpushdialog.cpp b/src/plugins/git/gerrit/gerritpushdialog.cpp
index 8c56dbcae67..1a929cbf8fc 100644
--- a/src/plugins/git/gerrit/gerritpushdialog.cpp
+++ b/src/plugins/git/gerrit/gerritpushdialog.cpp
@@ -124,14 +124,14 @@ void GerritPushDialog::initRemoteBranches()
m_ui->remoteComboBox->updateRemotes(false);
}
-GerritPushDialog::GerritPushDialog(const QString &workingDir, const QString &reviewerList,
+GerritPushDialog::GerritPushDialog(const Utils::FilePath &workingDir, const QString &reviewerList,
QSharedPointer<GerritParameters> parameters, QWidget *parent) :
QDialog(parent),
m_workingDir(workingDir),
m_ui(new Ui::GerritPushDialog)
{
m_ui->setupUi(this);
- m_ui->repositoryLabel->setText(QDir::toNativeSeparators(workingDir));
+ m_ui->repositoryLabel->setText(workingDir.toUserOutput());
m_ui->remoteComboBox->setRepository(workingDir);
m_ui->remoteComboBox->setParameters(parameters);
m_ui->remoteComboBox->setAllowDups(true);
diff --git a/src/plugins/git/gerrit/gerritpushdialog.h b/src/plugins/git/gerrit/gerritpushdialog.h
index 652cab479e2..153f0b03ee7 100644
--- a/src/plugins/git/gerrit/gerritpushdialog.h
+++ b/src/plugins/git/gerrit/gerritpushdialog.h
@@ -25,6 +25,8 @@
#pragma once
+#include <utils/filepath.h>
+
#include <QDialog>
#include <QMultiMap>
#include <QDate>
@@ -46,7 +48,7 @@ class GerritPushDialog : public QDialog
Q_OBJECT
public:
- GerritPushDialog(const QString &workingDir, const QString &reviewerList,
+ GerritPushDialog(const Utils::FilePath &workingDir, const QString &reviewerList,
QSharedPointer<GerritParameters> parameters, QWidget *parent);
~GerritPushDialog() override;
@@ -72,7 +74,7 @@ private:
QString determineRemoteBranch(const QString &localBranch);
void initRemoteBranches();
QString calculateChangeRange(const QString &branch);
- QString m_workingDir;
+ Utils::FilePath m_workingDir;
QString m_suggestedRemoteBranch;
QString m_initErrorMessage;
Ui::GerritPushDialog *m_ui;
diff --git a/src/plugins/git/gerrit/gerritremotechooser.cpp b/src/plugins/git/gerrit/gerritremotechooser.cpp
index 6b94bcd238f..0eada6f155c 100644
--- a/src/plugins/git/gerrit/gerritremotechooser.cpp
+++ b/src/plugins/git/gerrit/gerritremotechooser.cpp
@@ -28,12 +28,15 @@
#include "gerritserver.h"
#include "../gitclient.h"
+#include <utils/filepath.h>
#include <utils/qtcassert.h>
#include <utils/utilsicons.h>
#include <QFileInfo>
#include <QHBoxLayout>
+using namespace Utils;
+
namespace Gerrit {
namespace Internal {
@@ -64,7 +67,7 @@ GerritRemoteChooser::GerritRemoteChooser(QWidget *parent) :
this, [this] { updateRemotes(true); });
}
-void GerritRemoteChooser::setRepository(const QString &repository)
+void GerritRemoteChooser::setRepository(const FilePath &repository)
{
m_repository = repository;
}
diff --git a/src/plugins/git/gerrit/gerritremotechooser.h b/src/plugins/git/gerrit/gerritremotechooser.h
index c2dacf84cfa..3ecd1338600 100644
--- a/src/plugins/git/gerrit/gerritremotechooser.h
+++ b/src/plugins/git/gerrit/gerritremotechooser.h
@@ -27,6 +27,8 @@
#include "gerritserver.h"
+#include <utils/filepath.h>
+
#include <QComboBox>
#include <QSharedPointer>
#include <QToolButton>
@@ -45,7 +47,7 @@ class GerritRemoteChooser : public QWidget
public:
GerritRemoteChooser(QWidget *parent = nullptr);
- void setRepository(const QString &repository);
+ void setRepository(const Utils::FilePath &repository);
void setParameters(QSharedPointer<GerritParameters> parameters);
void setFallbackEnabled(bool value);
void setAllowDups(bool value);
@@ -63,7 +65,7 @@ private:
void addRemote(const GerritServer &server, const QString &name);
void handleRemoteChanged();
- QString m_repository;
+ Utils::FilePath m_repository;
QSharedPointer<GerritParameters> m_parameters;
QComboBox *m_remoteComboBox = nullptr;
QToolButton *m_resetRemoteButton = nullptr;
diff --git a/src/plugins/git/gerrit/gerritserver.cpp b/src/plugins/git/gerrit/gerritserver.cpp
index f0091a0d94c..b678bde9aef 100644
--- a/src/plugins/git/gerrit/gerritserver.cpp
+++ b/src/plugins/git/gerrit/gerritserver.cpp
@@ -245,7 +245,7 @@ int GerritServer::testConnection()
static GitClient *const client = GitClient::instance();
const QStringList arguments = curlArguments() << (url(RestUrl) + accountUrlC);
QtcProcess proc;
- client->vcsFullySynchronousExec(proc, QString(), {curlBinary, arguments},
+ client->vcsFullySynchronousExec(proc, {}, {curlBinary, arguments},
Core::ShellCommand::NoOutput);
if (proc.result() == QtcProcess::FinishedWithSuccess) {
QString output = proc.stdOut();
@@ -346,7 +346,7 @@ void GerritServer::resolveVersion(const GerritParameters &p, bool forceReload)
if (port)
arguments << p.portFlag << QString::number(port);
arguments << hostArgument() << "gerrit" << "version";
- client->vcsFullySynchronousExec(proc, QString(), {p.ssh, arguments},
+ client->vcsFullySynchronousExec(proc, {}, {p.ssh, arguments},
Core::ShellCommand::NoOutput);
QString stdOut = proc.stdOut().trimmed();
stdOut.remove("gerrit version ");
@@ -354,7 +354,7 @@ void GerritServer::resolveVersion(const GerritParameters &p, bool forceReload)
} else {
const QStringList arguments = curlArguments() << (url(RestUrl) + versionUrlC);
QtcProcess proc;
- client->vcsFullySynchronousExec(proc, QString(), {curlBinary, arguments},
+ client->vcsFullySynchronousExec(proc, {}, {curlBinary, arguments},
Core::ShellCommand::NoOutput);
// REST endpoint for version is only available from 2.8 and up. Do not consider invalid
// if it fails.
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index b4be20eadc8..1afbffc273d 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -328,7 +328,8 @@ void GitBaseDiffEditorController::initialize()
// This is workaround for lack of support for merge commits and resolving conflicts,
// we compare the current state of working tree to the HEAD of current branch
// instead of showing unsupported combined diff format.
- GitClient::CommandInProgress commandInProgress = m_instance->checkCommandInProgress(workingDirectory());
+ GitClient::CommandInProgress commandInProgress =
+ m_instance->checkCommandInProgress(FilePath::fromString(workingDirectory()));
if (commandInProgress != GitClient::NoCommand)
m_rightCommit = HEAD;
}
@@ -342,7 +343,8 @@ void GitBaseDiffEditorController::updateBranchList()
const QString workingDirectory = baseDirectory();
VcsCommand *command = m_instance->vcsExec(
- workingDirectory, {"branch", noColorOption, "-a", "--contains", revision}, nullptr,
+ FilePath::fromString(workingDirectory),
+ {"branch", noColorOption, "-a", "--contains", revision}, nullptr,
false, 0, workingDirectory);
connect(command, &VcsCommand::stdOutText, this, [this](const QString &text) {
const QString remotePrefix = "remotes/";
@@ -457,7 +459,7 @@ public:
setReloader([this] {
m_state = GettingDescription;
const QStringList args = {"show", "-s", noColorOption, showFormatC, m_id};
- runCommand({args}, m_instance->encoding(workingDirectory(), "i18n.commitEncoding"));
+ runCommand({args}, m_instance->encoding(FilePath::fromString(workingDirectory()), "i18n.commitEncoding"));
setStartupFile(VcsBase::source(this->document()));
});
}
@@ -474,7 +476,7 @@ void ShowController::processCommandOutput(const QString &output)
{
QTC_ASSERT(m_state != Idle, return);
if (m_state == GettingDescription) {
- setDescription(m_instance->extendedShowDescription(workingDirectory(), output));
+ setDescription(m_instance->extendedShowDescription(FilePath::fromString(workingDirectory()), output));
// stage 2
m_state = GettingDiff;
const QStringList args = {"show", "--format=format:", // omit header, already generated
@@ -661,7 +663,7 @@ class ConflictHandler final : public QObject
Q_OBJECT
public:
static void attachToCommand(VcsCommand *command, const QString &abortCommand = QString()) {
- auto handler = new ConflictHandler(command->defaultWorkingDirectory(), abortCommand);
+ auto handler = new ConflictHandler(FilePath::fromString(command->defaultWorkingDirectory()), abortCommand);
handler->setParent(command); // delete when command goes out of scope
command->addFlags(VcsCommand::ExpectRepoChanges);
@@ -670,7 +672,7 @@ public:
}
static void handleResponse(const Utils::QtcProcess &proc,
- const QString &workingDirectory,
+ const FilePath &workingDirectory,
const QString &abortCommand = QString())
{
ConflictHandler handler(workingDirectory, abortCommand);
@@ -682,7 +684,7 @@ public:
}
private:
- ConflictHandler(const QString &workingDirectory, const QString &abortCommand) :
+ ConflictHandler(const FilePath &workingDirectory, const QString &abortCommand) :
m_workingDirectory(workingDirectory),
m_abortCommand(abortCommand)
{ }
@@ -719,7 +721,7 @@ private:
m_commit = match.captured(1);
}
private:
- QString m_workingDirectory;
+ FilePath m_workingDirectory;
QString m_abortCommand;
QString m_commit;
QStringList m_files;
@@ -747,9 +749,9 @@ private:
const QRegularExpression m_progressExp;
};
-static inline QString msgRepositoryNotFound(const QString &dir)
+static inline QString msgRepositoryNotFound(const FilePath &dir)
{
- return GitClient::tr("Cannot determine the repository for \"%1\".").arg(dir);
+ return GitClient::tr("Cannot determine the repository for \"%1\".").arg(dir.toUserOutput());
}
static inline QString msgParseFilesFailed()
@@ -770,12 +772,12 @@ static inline void msgCannotRun(const QString &message, QString *errorMessage)
VcsOutputWindow::appendError(message);
}
-static inline void msgCannotRun(const QStringList &args, const QString &workingDirectory,
+static inline void msgCannotRun(const QStringList &args, const FilePath &workingDirectory,
const QString &error, QString *errorMessage)
{
const QString message = GitClient::tr("Cannot run \"%1\" in \"%2\": %3")
.arg("git " + args.join(' '),
- QDir::toNativeSeparators(workingDirectory),
+ workingDirectory.toUserOutput(),
error);
msgCannotRun(message, errorMessage);
@@ -822,9 +824,9 @@ QString GitClient::findRepositoryForDirectory(const QString &directory) const
return QString();
}
-QString GitClient::findGitDirForRepository(const QString &repositoryDir) const
+QString GitClient::findGitDirForRepository(const FilePath &repositoryDir) const
{
- static QHash<QString, QString> repoDirCache;
+ static QHash<FilePath, QString> repoDirCache;
QString &res = repoDirCache[repositoryDir];
if (!res.isEmpty())
return res;
@@ -832,11 +834,11 @@ QString GitClient::findGitDirForRepository(const QString &repositoryDir) const
synchronousRevParseCmd(repositoryDir, "--git-dir", &res);
if (!QDir(res).isAbsolute())
- res.prepend(repositoryDir + '/');
+ res.prepend(repositoryDir.toString() + '/');
return res;
}
-bool GitClient::managesFile(const QString &workingDirectory, const QString &fileName) const
+bool GitClient::managesFile(const FilePath &workingDirectory, const QString &fileName) const
{
QtcProcess proc;
vcsFullySynchronousExec(proc, workingDirectory, {"ls-files", "--error-unmatch", fileName},
@@ -846,14 +848,14 @@ bool GitClient::managesFile(const QString &workingDirectory, const QString &file
FilePaths GitClient::unmanagedFiles(const FilePaths &filePaths) const
{
- QMap<QString, QStringList> filesForDir;
+ QMap<FilePath, QStringList> filesForDir;
for (const FilePath &fp : filePaths) {
- filesForDir[fp.parentDir().toString()] << fp.fileName();
+ filesForDir[fp.parentDir()] << fp.fileName();
}
FilePaths res;
for (auto it = filesForDir.begin(), end = filesForDir.end(); it != end; ++it) {
QStringList args({"ls-files", "-z"});
- const QDir wd(it.key());
+ const QDir wd(it.key().toString());
args << transform(it.value(), [&wd](const QString &fp) { return wd.relativeFilePath(fp); });
QtcProcess proc;
vcsFullySynchronousExec(proc, it.key(), args, Core::ShellCommand::NoOutput);
@@ -870,11 +872,11 @@ FilePaths GitClient::unmanagedFiles(const FilePaths &filePaths) const
return res;
}
-QTextCodec *GitClient::codecFor(GitClient::CodecType codecType, const QString &source) const
+QTextCodec *GitClient::codecFor(GitClient::CodecType codecType, const FilePath &source) const
{
if (codecType == CodecSource) {
- return QFileInfo(source).isFile() ? VcsBaseEditor::getCodec(source)
- : encoding(source, "gui.encoding");
+ return source.isFile() ? VcsBaseEditor::getCodec(source.toString())
+ : encoding(source, "gui.encoding");
}
if (codecType == CodecLogOutput)
return encoding(source, "i18n.logOutputEncoding");
@@ -943,7 +945,7 @@ void GitClient::stage(DiffEditor::DiffEditorController *diffController,
if (!patchFile.open())
return;
- const QString baseDir = diffController->baseDirectory();
+ const FilePath baseDir = FilePath::fromString(diffController->baseDirectory());
QTextCodec *codec = EditorManager::defaultTextCodec();
const QByteArray patchData = codec
? codec->fromUnicode(patch) : patch.toLocal8Bit();
@@ -971,7 +973,7 @@ void GitClient::stage(DiffEditor::DiffEditorController *diffController,
}
void GitClient::requestReload(const QString &documentId, const QString &source,
- const QString &title, const QString &workingDirectory,
+ const QString &title, const FilePath &workingDirectory,
std::function<GitBaseDiffEditorController *(IDocument *)> factory) const
{
// Creating document might change the referenced source. Store a copy and use it.
@@ -984,7 +986,7 @@ void GitClient::requestReload(const QString &documentId, const QString &source,
controller->setVcsBinary(settings().binaryPath.filePath());
controller->setVcsTimeoutS(settings().timeout.value());
controller->setProcessEnvironment(processEnvironment());
- controller->setWorkingDirectory(workingDirectory);
+ controller->setWorkingDirectory(workingDirectory.toString());
controller->initialize();
connect(controller, &DiffEditorController::chunkActionsRequested,
@@ -995,43 +997,43 @@ void GitClient::requestReload(const QString &documentId, const QString &source,
controller->requestReload();
}
-void GitClient::diffFiles(const QString &workingDirectory,
+void GitClient::diffFiles(const FilePath &workingDirectory,
const QStringList &unstagedFileNames,
const QStringList &stagedFileNames) const
{
const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
- + QLatin1String(".DiffFiles.") + workingDirectory;
+ + QLatin1String(".DiffFiles.") + workingDirectory.toString();
requestReload(documentId,
- workingDirectory, tr("Git Diff Files"), workingDirectory,
+ workingDirectory.toString(), tr("Git Diff Files"), workingDirectory,
[stagedFileNames, unstagedFileNames](IDocument *doc) {
return new FileListDiffController(doc, stagedFileNames, unstagedFileNames);
});
}
-void GitClient::diffProject(const QString &workingDirectory, const QString &projectDirectory) const
+void GitClient::diffProject(const FilePath &workingDirectory, const QString &projectDirectory) const
{
const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
- + QLatin1String(".DiffProject.") + workingDirectory;
+ + QLatin1String(".DiffProject.") + workingDirectory.toString();
requestReload(documentId,
- workingDirectory, tr("Git Diff Project"), workingDirectory,
+ workingDirectory.toString(), tr("Git Diff Project"), workingDirectory,
[projectDirectory](IDocument *doc){
return new GitDiffEditorController(doc, {}, {}, {"--", projectDirectory});
});
}
-void GitClient::diffRepository(const QString &workingDirectory,
+void GitClient::diffRepository(const FilePath &workingDirectory,
const QString &leftCommit,
const QString &rightCommit) const
{
const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
- + QLatin1String(".DiffRepository.") + workingDirectory;
- requestReload(documentId, workingDirectory, tr("Git Diff Repository"), workingDirectory,
+ + QLatin1String(".DiffRepository.") + workingDirectory.toString();
+ requestReload(documentId, workingDirectory.toString(), tr("Git Diff Repository"), workingDirectory,
[&leftCommit, &rightCommit](IDocument *doc) {
return new GitDiffEditorController(doc, leftCommit, rightCommit, {});
});
}
-void GitClient::diffFile(const QString &workingDirectory, const QString &fileName) const
+void GitClient::diffFile(const FilePath &workingDirectory, const QString &fileName) const
{
const QString title = tr("Git Diff \"%1\"").arg(fileName);
const QString sourceFile = VcsBaseEditor::getSource(workingDirectory, fileName);
@@ -1043,28 +1045,27 @@ void GitClient::diffFile(const QString &workingDirectory, const QString &fileNam
});
}
-void GitClient::diffBranch(const QString &workingDirectory, const QString &branchName) const
+void GitClient::diffBranch(const FilePath &workingDirectory, const QString &branchName) const
{
const QString title = tr("Git Diff Branch \"%1\"").arg(branchName);
const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
+ QLatin1String(".DiffBranch.") + branchName;
- requestReload(documentId, workingDirectory, title, workingDirectory,
+ requestReload(documentId, workingDirectory.toString(), title, workingDirectory,
[branchName](IDocument *doc) {
return new GitDiffEditorController(doc, branchName, {}, {});
});
}
-void GitClient::merge(const QString &workingDirectory,
- const QStringList &unmergedFileNames)
+void GitClient::merge(const FilePath &workingDirectory, const QStringList &unmergedFileNames)
{
auto mergeTool = new MergeTool(this);
- if (!mergeTool->start(workingDirectory, unmergedFileNames))
+ if (!mergeTool->start(workingDirectory.toString(), unmergedFileNames))
delete mergeTool;
}
-void GitClient::status(const QString &workingDirectory) const
+void GitClient::status(const FilePath &workingDirectory) const
{
- VcsOutputWindow::setRepository(workingDirectory);
+ VcsOutputWindow::setRepository(workingDirectory.toString());
VcsCommand *command = vcsExec(workingDirectory, {"status", "-u"}, nullptr, true);
connect(command, &VcsCommand::finished, VcsOutputWindow::instance(), &VcsOutputWindow::clearRepository,
Qt::QueuedConnection);
@@ -1092,7 +1093,7 @@ static QStringList normalLogArguments()
return {logArgs};
}
-void GitClient::log(const QString &workingDirectory, const QString &fileName,
+void GitClient::log(const FilePath &workingDirectory, const QString &fileName,
bool enableAnnotationContextMenu, const QStringList &args)
{
QString msgArg;
@@ -1101,9 +1102,9 @@ void GitClient::log(const QString &workingDirectory, const QString &fileName,
else if (!args.isEmpty() && !args.first().startsWith('-'))
msgArg = args.first();
else
- msgArg = workingDirectory;
+ msgArg = workingDirectory.toString();
// Creating document might change the referenced workingDirectory. Store a copy and use it.
- const QString workingDir = workingDirectory;
+ const FilePath workingDir = workingDirectory;
const QString title = tr("Git Log \"%1\"").arg(msgArg);
const Id editorId = Git::Constants::GIT_LOG_EDITOR_ID;
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
@@ -1153,15 +1154,15 @@ void GitClient::log(const QString &workingDirectory, const QString &fileName,
vcsExec(workingDir, arguments, editor);
}
-void GitClient::reflog(const QString &workingDirectory, const QString &ref)
+void GitClient::reflog(const FilePath &workingDirectory, const QString &ref)
{
- const QString title = tr("Git Reflog \"%1\"").arg(workingDirectory);
+ const QString title = tr("Git Reflog \"%1\"").arg(workingDirectory.toUserOutput());
const Id editorId = Git::Constants::GIT_REFLOG_EDITOR_ID;
// Creating document might change the referenced workingDirectory. Store a copy and use it.
- const QString workingDir = workingDirectory;
+ const FilePath workingDir = workingDirectory;
GitEditorWidget *editor = static_cast<GitEditorWidget *>(
- createVcsEditor(editorId, title, workingDir, codecFor(CodecLogOutput),
- "reflogRepository", workingDir));
+ createVcsEditor(editorId, title, workingDir.toString(), codecFor(CodecLogOutput),
+ "reflogRepository", workingDir.toString()));
VcsBaseEditorConfig *argWidget = editor->editorConfig();
if (!argWidget) {
argWidget = new GitRefLogArgumentsWidget(settings(), editor);
@@ -1202,9 +1203,9 @@ void GitClient::show(const QString &source, const QString &id, const QString &na
const QString title = tr("Git Show \"%1\"").arg(name.isEmpty() ? id : name);
const QFileInfo sourceFi(source);
- QString workingDirectory = sourceFi.isDir()
- ? sourceFi.absoluteFilePath() : sourceFi.absolutePath();
- const QString repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
+ FilePath workingDirectory = FilePath::fromString(
+ sourceFi.isDir() ? sourceFi.absoluteFilePath() : sourceFi.absolutePath());
+ const FilePath repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
if (!repoDirectory.isEmpty())
workingDirectory = repoDirectory;
const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
@@ -1213,12 +1214,12 @@ void GitClient::show(const QString &source, const QString &id, const QString &na
[id](IDocument *doc) { return new ShowController(doc, id); });
}
-void GitClient::archive(const QString &workingDirectory, QString commit)
+void GitClient::archive(const FilePath &workingDirectory, QString commit)
{
- QString repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
+ FilePath repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
if (repoDirectory.isEmpty())
repoDirectory = workingDirectory;
- QString repoName = QFileInfo(repoDirectory).fileName();
+ QString repoName = repoDirectory.fileName();
QHash<QString, QString> filters;
QString selectedFilter;
@@ -1241,7 +1242,7 @@ void GitClient::archive(const QString &workingDirectory, QString commit)
QString archiveName = QFileDialog::getSaveFileName(
ICore::dialogParent(),
tr("Generate %1 archive").arg(repoName),
- repoDirectory + QString("/../%1-%2").arg(repoName).arg(commit.left(8)),
+ repoDirectory.toString() + QString("/../%1-%2").arg(repoName).arg(commit.left(8)),
filters.keys().join(";;"),
&selectedFilter);
if (archiveName.isEmpty())
@@ -1265,7 +1266,7 @@ void GitClient::archive(const QString &workingDirectory, QString commit)
}
VcsBaseEditorWidget *GitClient::annotate(
- const QString &workingDir, const QString &file, const QString &revision,
+ const FilePath &workingDir, const QString &file, const QString &revision,
int lineNumber, const QStringList &extraOptions)
{
const Id editorId = Git::Constants::GIT_BLAME_EDITOR_ID;
@@ -1274,7 +1275,7 @@ VcsBaseEditorWidget *GitClient::annotate(
const QString sourceFile = VcsBaseEditor::getSource(workingDir, file);
VcsBaseEditorWidget *editor
- = createVcsEditor(editorId, title, sourceFile, codecFor(CodecSource, sourceFile),
+ = createVcsEditor(editorId, title, sourceFile, codecFor(CodecSource, FilePath::fromString(sourceFile)),
"blameFileName", id);
VcsBaseEditorConfig *argWidget = editor->editorConfig();
if (!argWidget) {
@@ -1297,7 +1298,7 @@ VcsBaseEditorWidget *GitClient::annotate(
return editor;
}
-VcsCommand *GitClient::checkout(const QString &workingDirectory, const QString &ref,
+VcsCommand *GitClient::checkout(const FilePath &workingDirectory, const QString &ref,
StashMode stashMode)
{
if (stashMode == StashMode::TryStash && !beginStashScope(workingDirectory, "Checkout"))
@@ -1317,12 +1318,12 @@ VcsCommand *GitClient::checkout(const QString &workingDirectory, const QString &
}
/* method used to setup arguments for checkout, in case user wants to create local branch */
-QStringList GitClient::setupCheckoutArguments(const QString &workingDirectory,
+QStringList GitClient::setupCheckoutArguments(const FilePath &workingDirectory,
const QString &ref)
{
QStringList arguments = {"checkout", ref};
- QStringList localBranches = synchronousRepositoryBranches(workingDirectory);
+ QStringList localBranches = synchronousRepositoryBranches(workingDirectory.toString());
if (localBranches.contains(ref))
return arguments;
@@ -1389,7 +1390,7 @@ QStringList GitClient::setupCheckoutArguments(const QString &workingDirectory,
return arguments;
}
-void GitClient::reset(const QString &workingDirectory, const QString &argument, const QString &commit)
+void GitClient::reset(const FilePath &workingDirectory, const QString &argument, const QString &commit)
{
QStringList arguments = {"reset", argument};
if (!commit.isEmpty())
@@ -1411,7 +1412,7 @@ void GitClient::reset(const QString &workingDirectory, const QString &argument,
vcsExec(workingDirectory, arguments, nullptr, true, flags);
}
-void GitClient::removeStaleRemoteBranches(const QString &workingDirectory, const QString &remote)
+void GitClient::removeStaleRemoteBranches(const FilePath &workingDirectory, const QString &remote)
{
const QStringList arguments = {"remote", "prune", remote};
@@ -1422,7 +1423,7 @@ void GitClient::removeStaleRemoteBranches(const QString &workingDirectory, const
this, [workingDirectory]() { GitPlugin::updateBranches(workingDirectory); });
}
-void GitClient::recoverDeletedFiles(const QString &workingDirectory)
+void GitClient::recoverDeletedFiles(const FilePath &workingDirectory)
{
QtcProcess proc;
vcsFullySynchronousExec(proc, workingDirectory, {"ls-files", "--deleted"},
@@ -1439,12 +1440,12 @@ void GitClient::recoverDeletedFiles(const QString &workingDirectory)
}
}
-void GitClient::addFile(const QString &workingDirectory, const QString &fileName)
+void GitClient::addFile(const FilePath &workingDirectory, const QString &fileName)
{
vcsExec(workingDirectory, {"add", fileName});
}
-bool GitClient::synchronousLog(const QString &workingDirectory, const QStringList &arguments,
+bool GitClient::synchronousLog(const FilePath &workingDirectory, const QStringList &arguments,
QString *output, QString *errorMessageIn, unsigned flags)
{
QStringList allArguments = {"log", noColorOption};
@@ -1459,12 +1460,12 @@ bool GitClient::synchronousLog(const QString &workingDirectory, const QStringLis
return true;
} else {
msgCannotRun(tr("Cannot obtain log of \"%1\": %2")
- .arg(QDir::toNativeSeparators(workingDirectory), proc.stdErr()), errorMessageIn);
+ .arg(workingDirectory.toUserOutput(), proc.stdErr()), errorMessageIn);
return false;
}
}
-bool GitClient::synchronousAdd(const QString &workingDirectory,
+bool GitClient::synchronousAdd(const FilePath &workingDirectory,
const QStringList &files,
const QStringList &extraOptions)
{
@@ -1475,7 +1476,7 @@ bool GitClient::synchronousAdd(const QString &workingDirectory,
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-bool GitClient::synchronousDelete(const QString &workingDirectory,
+bool GitClient::synchronousDelete(const FilePath &workingDirectory,
bool force,
const QStringList &files)
{
@@ -1488,7 +1489,7 @@ bool GitClient::synchronousDelete(const QString &workingDirectory,
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-bool GitClient::synchronousMove(const QString &workingDirectory,
+bool GitClient::synchronousMove(const FilePath &workingDirectory,
const QString &from,
const QString &to)
{
@@ -1497,7 +1498,7 @@ bool GitClient::synchronousMove(const QString &workingDirectory,
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-bool GitClient::synchronousReset(const QString &workingDirectory,
+bool GitClient::synchronousReset(const FilePath &workingDirectory,
const QStringList &files,
QString *errorMessage)
{
@@ -1520,7 +1521,7 @@ bool GitClient::synchronousReset(const QString &workingDirectory,
msgCannotRun(arguments, workingDirectory, proc.stdErr(), errorMessage);
} else {
msgCannotRun(tr("Cannot reset %n files in \"%1\": %2", nullptr, files.size())
- .arg(QDir::toNativeSeparators(workingDirectory), proc.stdErr()),
+ .arg(workingDirectory.toUserOutput(), proc.stdErr()),
errorMessage);
}
return false;
@@ -1547,7 +1548,7 @@ bool GitClient::synchronousInit(const FilePath &workingDirectory)
* git checkout -- <files>
* git checkout revision -- <files>
* git checkout revision -- . */
-bool GitClient::synchronousCheckoutFiles(const QString &workingDirectory, QStringList files,
+bool GitClient::synchronousCheckoutFiles(const FilePath &workingDirectory, QStringList files,
QString revision, QString *errorMessage,
bool revertStaging)
{
@@ -1566,19 +1567,20 @@ bool GitClient::synchronousCheckoutFiles(const QString &workingDirectory, QStrin
//: Meaning of the arguments: %1: revision, %2: files, %3: repository,
//: %4: Error message
msgCannotRun(tr("Cannot checkout \"%1\" of %2 in \"%3\": %4")
- .arg(revision, fileArg, workingDirectory, proc.stdErr()),
+ .arg(revision, fileArg, workingDirectory.toUserOutput(), proc.stdErr()),
errorMessage);
return false;
}
return true;
}
-static inline QString msgParentRevisionFailed(const QString &workingDirectory,
+static inline QString msgParentRevisionFailed(const FilePath &workingDirectory,
const QString &revision,
const QString &why)
{
//: Failed to find parent revisions of a SHA1 for "annotate previous"
- return GitClient::tr("Cannot find parent revisions of \"%1\" in \"%2\": %3").arg(revision, workingDirectory, why);
+ return GitClient::tr("Cannot find parent revisions of \"%1\" in \"%2\": %3")
+ .arg(revision, workingDirectory.toUserOutput(), why);
}
static inline QString msgInvalidRevision()
@@ -1606,7 +1608,7 @@ static inline bool splitCommitParents(const QString &line,
return true;
}
-bool GitClient::synchronousRevListCmd(const QString &workingDirectory, const QStringList &extraArguments,
+bool GitClient::synchronousRevListCmd(const FilePath &workingDirectory, const QStringList &extraArguments,
QString *output, QString *errorMessage) const
{
const QStringList arguments = QStringList({"rev-list", noColorOption}) + extraArguments;
@@ -1622,7 +1624,7 @@ bool GitClient::synchronousRevListCmd(const QString &workingDirectory, const QSt
// Find out the immediate parent revisions of a revision of the repository.
// Might be several in case of merges.
-bool GitClient::synchronousParentRevisions(const QString &workingDirectory,
+bool GitClient::synchronousParentRevisions(const FilePath &workingDirectory,
const QString &revision,
QStringList *parents,
QString *errorMessage) const
@@ -1648,7 +1650,7 @@ bool GitClient::synchronousParentRevisions(const QString &workingDirectory,
return true;
}
-QString GitClient::synchronousShortDescription(const QString &workingDirectory, const QString &revision) const
+QString GitClient::synchronousShortDescription(const FilePath &workingDirectory, const QString &revision) const
{
// HACK: The hopefully rare "_-_" will be replaced by quotes in the output,
// leaving it in breaks command line quoting on Windows, see QTCREATORBUG-23208.
@@ -1671,7 +1673,7 @@ QString GitClient::synchronousShortDescription(const QString &workingDirectory,
return output;
}
-QString GitClient::synchronousCurrentLocalBranch(const QString &workingDirectory) const
+QString GitClient::synchronousCurrentLocalBranch(const FilePath &workingDirectory) const
{
QString branch;
QtcProcess proc;
@@ -1695,7 +1697,7 @@ QString GitClient::synchronousCurrentLocalBranch(const QString &workingDirectory
return QString();
}
-bool GitClient::synchronousHeadRefs(const QString &workingDirectory, QStringList *output,
+bool GitClient::synchronousHeadRefs(const FilePath &workingDirectory, QStringList *output,
QString *errorMessage) const
{
const QStringList arguments = {"show-ref", "--head", "--abbrev=10", "--dereference"};
@@ -1718,7 +1720,7 @@ bool GitClient::synchronousHeadRefs(const QString &workingDirectory, QStringList
}
// Retrieve topic (branch, tag or HEAD hash)
-QString GitClient::synchronousTopic(const QString &workingDirectory) const
+QString GitClient::synchronousTopic(const FilePath &workingDirectory) const
{
// First try to find branch
QString branch = synchronousCurrentLocalBranch(workingDirectory);
@@ -1758,7 +1760,7 @@ QString GitClient::synchronousTopic(const QString &workingDirectory) const
return tr("Detached HEAD");
}
-bool GitClient::synchronousRevParseCmd(const QString &workingDirectory, const QString &ref,
+bool GitClient::synchronousRevParseCmd(const FilePath &workingDirectory, const QString &ref,
QString *output, QString *errorMessage) const
{
const QStringList arguments = {"rev-parse", ref};
@@ -1774,7 +1776,7 @@ bool GitClient::synchronousRevParseCmd(const QString &workingDirectory, const QS
}
// Retrieve head revision
-QString GitClient::synchronousTopRevision(const QString &workingDirectory, QDateTime *dateTime)
+QString GitClient::synchronousTopRevision(const FilePath &workingDirectory, QDateTime *dateTime)
{
const QStringList arguments = {"show", "-s", "--pretty=format:%H:%ct", HEAD};
QtcProcess proc;
@@ -1790,7 +1792,7 @@ QString GitClient::synchronousTopRevision(const QString &workingDirectory, QDate
return output.first();
}
-void GitClient::synchronousTagsForCommit(const QString &workingDirectory, const QString &revision,
+void GitClient::synchronousTagsForCommit(const FilePath &workingDirectory, const QString &revision,
QString &precedes, QString &follows) const
{
QtcProcess proc1;
@@ -1819,14 +1821,14 @@ void GitClient::synchronousTagsForCommit(const QString &workingDirectory, const
}
}
-bool GitClient::isRemoteCommit(const QString &workingDirectory, const QString &commit)
+bool GitClient::isRemoteCommit(const FilePath &workingDirectory, const QString &commit)
{
QtcProcess proc;
vcsFullySynchronousExec(proc, workingDirectory, {"branch", "-r", "--contains", commit}, silentFlags);
return !proc.rawStdOut().isEmpty();
}
-bool GitClient::isFastForwardMerge(const QString &workingDirectory, const QString &branch)
+bool GitClient::isFastForwardMerge(const FilePath &workingDirectory, const QString &branch)
{
QtcProcess proc;
vcsFullySynchronousExec(proc, workingDirectory, {"merge-base", HEAD, branch}, silentFlags);
@@ -1834,7 +1836,7 @@ bool GitClient::isFastForwardMerge(const QString &workingDirectory, const QStrin
}
// Format an entry in a one-liner for selection list using git log.
-QString GitClient::synchronousShortDescription(const QString &workingDirectory, const QString &revision,
+QString GitClient::synchronousShortDescription(const FilePath &workingDirectory, const QString &revision,
const QString &format) const
{
const QStringList arguments = {"log", noColorOption, ("--pretty=format:" + format),
@@ -1843,7 +1845,7 @@ QString GitClient::synchronousShortDescription(const QString &workingDirectory,
vcsFullySynchronousExec(proc, workingDirectory, arguments, silentFlags);
if (proc.result() != QtcProcess::FinishedWithSuccess) {
VcsOutputWindow::appendSilently(tr("Cannot describe revision \"%1\" in \"%2\": %3")
- .arg(revision, workingDirectory, proc.stdErr()));
+ .arg(revision, workingDirectory.toUserOutput(), proc.stdErr()));
return revision;
}
return stripLastNewline(proc.stdOut());
@@ -1865,7 +1867,7 @@ static inline QString creatorStashMessage(const QString &keyword = QString())
* StashImmediateRestore: Immediately re-apply this stash (used for snapshots), user keeps on working
* StashIgnoreUnchanged: Be quiet about unchanged repositories (used for IVersionControl's snapshots). */
-QString GitClient::synchronousStash(const QString &workingDirectory, const QString &messageKeyword,
+QString GitClient::synchronousStash(const FilePath &workingDirectory, const QString &messageKeyword,
unsigned flags, bool *unchanged) const
{
if (unchanged)
@@ -1907,7 +1909,7 @@ QString GitClient::synchronousStash(const QString &workingDirectory, const QStri
return message;
}
-bool GitClient::executeSynchronousStash(const QString &workingDirectory,
+bool GitClient::executeSynchronousStash(const FilePath &workingDirectory,
const QString &message,
bool unstagedOnly,
QString *errorMessage) const
@@ -1931,7 +1933,7 @@ bool GitClient::executeSynchronousStash(const QString &workingDirectory,
}
// Resolve a stash name from message
-bool GitClient::stashNameFromMessage(const QString &workingDirectory,
+bool GitClient::stashNameFromMessage(const FilePath &workingDirectory,
const QString &message, QString *name,
QString *errorMessage) const
{
@@ -1952,11 +1954,11 @@ bool GitClient::stashNameFromMessage(const QString &workingDirectory,
}
//: Look-up of a stash via its descriptive message failed.
msgCannotRun(tr("Cannot resolve stash message \"%1\" in \"%2\".")
- .arg(message, workingDirectory), errorMessage);
+ .arg(message, workingDirectory.toUserOutput()), errorMessage);
return false;
}
-bool GitClient::synchronousBranchCmd(const QString &workingDirectory, QStringList branchArgs,
+bool GitClient::synchronousBranchCmd(const FilePath &workingDirectory, QStringList branchArgs,
QString *output, QString *errorMessage) const
{
branchArgs.push_front("branch");
@@ -1970,7 +1972,7 @@ bool GitClient::synchronousBranchCmd(const QString &workingDirectory, QStringLis
return true;
}
-bool GitClient::synchronousTagCmd(const QString &workingDirectory, QStringList tagArgs,
+bool GitClient::synchronousTagCmd(const FilePath &workingDirectory, QStringList tagArgs,
QString *output, QString *errorMessage) const
{
tagArgs.push_front("tag");
@@ -1984,7 +1986,7 @@ bool GitClient::synchronousTagCmd(const QString &workingDirectory, QStringList t
return true;
}
-bool GitClient::synchronousForEachRefCmd(const QString &workingDirectory, QStringList args,
+bool GitClient::synchronousForEachRefCmd(const FilePath &workingDirectory, QStringList args,
QString *output, QString *errorMessage) const
{
args.push_front("for-each-ref");
@@ -1998,13 +2000,13 @@ bool GitClient::synchronousForEachRefCmd(const QString &workingDirectory, QStrin
return true;
}
-VcsCommand *GitClient::asyncForEachRefCmd(const QString &workingDirectory, QStringList args) const
+VcsCommand *GitClient::asyncForEachRefCmd(const FilePath &workingDirectory, QStringList args) const
{
args.push_front("for-each-ref");
return vcsExec(workingDirectory, args, nullptr, false, silentFlags);
}
-bool GitClient::synchronousRemoteCmd(const QString &workingDirectory, QStringList remoteArgs,
+bool GitClient::synchronousRemoteCmd(const FilePath &workingDirectory, QStringList remoteArgs,
QString *output, QString *errorMessage, bool silent) const
{
remoteArgs.push_front("remote");
@@ -2022,7 +2024,7 @@ bool GitClient::synchronousRemoteCmd(const QString &workingDirectory, QStringLis
return true;
}
-QMap<QString,QString> GitClient::synchronousRemotesList(const QString &workingDirectory,
+QMap<QString,QString> GitClient::synchronousRemotesList(const FilePath &workingDirectory,
QString *errorMessage) const
{
QMap<QString,QString> result;
@@ -2048,7 +2050,7 @@ QMap<QString,QString> GitClient::synchronousRemotesList(const QString &workingDi
return result;
}
-QStringList GitClient::synchronousSubmoduleStatus(const QString &workingDirectory,
+QStringList GitClient::synchronousSubmoduleStatus(const FilePath &workingDirectory,
QString *errorMessage) const
{
// get submodule status
@@ -2057,20 +2059,20 @@ QStringList GitClient::synchronousSubmoduleStatus(const QString &workingDirector
if (proc.result() != QtcProcess::FinishedWithSuccess) {
msgCannotRun(tr("Cannot retrieve submodule status of \"%1\": %2")
- .arg(QDir::toNativeSeparators(workingDirectory), proc.stdErr()), errorMessage);
+ .arg(workingDirectory.toUserOutput(), proc.stdErr()), errorMessage);
return QStringList();
}
return splitLines(proc.stdOut());
}
-SubmoduleDataMap GitClient::submoduleList(const QString &workingDirectory) const
+SubmoduleDataMap GitClient::submoduleList(const FilePath &workingDirectory) const
{
SubmoduleDataMap result;
- QString gitmodulesFileName = workingDirectory + "/.gitmodules";
- if (!QFile::exists(gitmodulesFileName))
+ FilePath gitmodulesFileName = workingDirectory.pathAppended(".gitmodules");
+ if (!gitmodulesFileName.exists())
return result;
- static QMap<QString, SubmoduleDataMap> cachedSubmoduleData;
+ static QMap<FilePath, SubmoduleDataMap> cachedSubmoduleData;
if (cachedSubmoduleData.contains(workingDirectory))
return cachedSubmoduleData.value(workingDirectory);
@@ -2102,7 +2104,7 @@ SubmoduleDataMap GitClient::submoduleList(const QString &workingDirectory) const
// if config found submodules
if (!result.isEmpty()) {
- QSettings gitmodulesFile(gitmodulesFileName, QSettings::IniFormat);
+ QSettings gitmodulesFile(gitmodulesFileName.toString(), QSettings::IniFormat);
const QList<QString> submodules = result.keys();
for (const QString &submoduleName : submodules) {
@@ -2125,7 +2127,7 @@ SubmoduleDataMap GitClient::submoduleList(const QString &workingDirectory) const
return result;
}
-QByteArray GitClient::synchronousShow(const QString &workingDirectory, const QString &id,
+QByteArray GitClient::synchronousShow(const FilePath &workingDirectory, const QString &id,
unsigned flags) const
{
if (!canShow(id)) {
@@ -2143,10 +2145,10 @@ QByteArray GitClient::synchronousShow(const QString &workingDirectory, const QSt
}
// Retrieve list of files to be cleaned
-bool GitClient::cleanList(const QString &workingDirectory, const QString &modulePath,
+bool GitClient::cleanList(const FilePath &workingDirectory, const QString &modulePath,
const QString &flag, QStringList *files, QString *errorMessage)
{
- const QString directory = workingDirectory + '/' + modulePath;
+ const FilePath directory = workingDirectory.pathAppended(modulePath);
const QStringList arguments = {"clean", "--dry-run", flag};
QtcProcess proc;
@@ -2169,14 +2171,14 @@ bool GitClient::cleanList(const QString &workingDirectory, const QString &module
return true;
}
-bool GitClient::synchronousCleanList(const QString &workingDirectory, const QString &modulePath,
+bool GitClient::synchronousCleanList(const FilePath &workingDirectory, const QString &modulePath,
QStringList *files, QStringList *ignoredFiles,
QString *errorMessage)
{
bool res = cleanList(workingDirectory, modulePath, "-df", files, errorMessage);
res &= cleanList(workingDirectory, modulePath, "-dXf", ignoredFiles, errorMessage);
- const SubmoduleDataMap submodules = submoduleList(workingDirectory + '/' + modulePath);
+ const SubmoduleDataMap submodules = submoduleList(workingDirectory.pathAppended(modulePath));
for (const SubmoduleData &submodule : submodules) {
if (submodule.ignore != "all"
&& submodule.ignore != "dirty") {
@@ -2189,7 +2191,7 @@ bool GitClient::synchronousCleanList(const QString &workingDirectory, const QStr
return res;
}
-bool GitClient::synchronousApplyPatch(const QString &workingDirectory,
+bool GitClient::synchronousApplyPatch(const FilePath &workingDirectory,
const QString &file, QString *errorMessage,
const QStringList &extraArguments)
{
@@ -2202,11 +2204,11 @@ bool GitClient::synchronousApplyPatch(const QString &workingDirectory,
if (proc.result() == QtcProcess::FinishedWithSuccess) {
if (!stdErr.isEmpty())
*errorMessage = tr("There were warnings while applying \"%1\" to \"%2\":\n%3")
- .arg(file, workingDirectory, stdErr);
+ .arg(file, workingDirectory.toUserOutput(), stdErr);
return true;
} else {
*errorMessage = tr("Cannot apply patch \"%1\" to \"%2\": %3")
- .arg(QDir::toNativeSeparators(file), workingDirectory, stdErr);
+ .arg(QDir::toNativeSeparators(file), workingDirectory.toUserOutput(), stdErr);
return false;
}
}
@@ -2222,25 +2224,25 @@ Environment GitClient::processEnvironment() const
return environment;
}
-bool GitClient::beginStashScope(const QString &workingDirectory, const QString &command,
+bool GitClient::beginStashScope(const FilePath &workingDirectory, const QString &command,
StashFlag flag, PushAction pushAction)
{
- const QString repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
+ const FilePath repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
QTC_ASSERT(!repoDirectory.isEmpty(), return false);
StashInfo &stashInfo = m_stashInfo[repoDirectory];
return stashInfo.init(repoDirectory, command, flag, pushAction);
}
-GitClient::StashInfo &GitClient::stashInfo(const QString &workingDirectory)
+GitClient::StashInfo &GitClient::stashInfo(const FilePath &workingDirectory)
{
- const QString repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
+ const FilePath repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
QTC_CHECK(m_stashInfo.contains(repoDirectory));
return m_stashInfo[repoDirectory];
}
-void GitClient::endStashScope(const QString &workingDirectory)
+void GitClient::endStashScope(const FilePath &workingDirectory)
{
- const QString repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
+ const FilePath repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
if (!m_stashInfo.contains(repoDirectory))
return;
m_stashInfo[repoDirectory].end();
@@ -2256,7 +2258,7 @@ bool GitClient::isValidRevision(const QString &revision) const
return false;
}
-void GitClient::updateSubmodulesIfNeeded(const QString &workingDirectory, bool prompt)
+void GitClient::updateSubmodulesIfNeeded(const FilePath &workingDirectory, bool prompt)
{
if (!m_updatedSubmodules.isEmpty() || submoduleList(workingDirectory).isEmpty())
return;
@@ -2290,7 +2292,7 @@ void GitClient::updateSubmodulesIfNeeded(const QString &workingDirectory, bool p
// get submodule name
const int nameStart = statusLine.indexOf(' ', 2) + 1;
const int nameLength = statusLine.indexOf(' ', nameStart) - nameStart;
- const QString submoduleDir = workingDirectory + '/' + statusLine.mid(nameStart, nameLength);
+ const FilePath submoduleDir = workingDirectory.pathAppended(statusLine.mid(nameStart, nameLength));
if (beginStashScope(submoduleDir, "SubmoduleUpdate")) {
m_updatedSubmodules.append(submoduleDir);
@@ -2307,12 +2309,12 @@ void GitClient::updateSubmodulesIfNeeded(const QString &workingDirectory, bool p
void GitClient::finishSubmoduleUpdate()
{
- for (const QString &submoduleDir : qAsConst(m_updatedSubmodules))
+ for (const FilePath &submoduleDir : qAsConst(m_updatedSubmodules))
endStashScope(submoduleDir);
m_updatedSubmodules.clear();
}
-GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, StatusMode mode,
+GitClient::StatusResult GitClient::gitStatus(const FilePath &workingDirectory, StatusMode mode,
QString *output, QString *errorMessage) const
{
// Run 'status'. Note that git returns exitcode 1 if there are no added files.
@@ -2348,7 +2350,7 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, St
return hasChanges ? StatusChanged : StatusUnchanged;
}
-QString GitClient::commandInProgressDescription(const QString &workingDirectory) const
+QString GitClient::commandInProgressDescription(const FilePath &workingDirectory) const
{
switch (checkCommandInProgress(workingDirectory)) {
case NoCommand:
@@ -2366,7 +2368,7 @@ QString GitClient::commandInProgressDescription(const QString &workingDirectory)
return QString();
}
-GitClient::CommandInProgress GitClient::checkCommandInProgress(const QString &workingDirectory) const
+GitClient::CommandInProgress GitClient::checkCommandInProgress(const FilePath &workingDirectory) const
{
const QString gitDir = findGitDirForRepository(workingDirectory);
if (QFile::exists(gitDir + "/MERGE_HEAD"))
@@ -2383,7 +2385,7 @@ GitClient::CommandInProgress GitClient::checkCommandInProgress(const QString &wo
return NoCommand;
}
-void GitClient::continueCommandIfNeeded(const QString &workingDirectory, bool allowContinue)
+void GitClient::continueCommandIfNeeded(const FilePath &workingDirectory, bool allowContinue)
{
if (GitPlugin::isCommitEditorOpen())
return;
@@ -2420,7 +2422,7 @@ void GitClient::continueCommandIfNeeded(const QString &workingDirectory, bool al
}
}
-void GitClient::continuePreviousGitCommand(const QString &workingDirectory,
+void GitClient::continuePreviousGitCommand(const FilePath &workingDirectory,
const QString &msgBoxTitle, QString msgBoxText,
const QString &buttonName, const QString &gitCommand,
ContinueCommandMode continueMode)
@@ -2462,7 +2464,7 @@ void GitClient::continuePreviousGitCommand(const QString &workingDirectory,
}
}
-QString GitClient::extendedShowDescription(const QString &workingDirectory, const QString &text) const
+QString GitClient::extendedShowDescription(const FilePath &workingDirectory, const QString &text) const
{
if (!text.startsWith("commit "))
return text;
@@ -2488,7 +2490,7 @@ QString GitClient::extendedShowDescription(const QString &workingDirectory, cons
//
// The branch HEAD is pointing to is always returned first.
QStringList GitClient::synchronousRepositoryBranches(const QString &repositoryURL,
- const QString &workingDirectory) const
+ const FilePath &workingDirectory) const
{
const unsigned flags = VcsCommand::SshPasswordPrompt
| VcsCommand::SuppressStdErr
@@ -2528,7 +2530,7 @@ QStringList GitClient::synchronousRepositoryBranches(const QString &repositoryUR
return branches;
}
-void GitClient::launchGitK(const QString &workingDirectory, const QString &fileName) const
+void GitClient::launchGitK(const FilePath &workingDirectory, const QString &fileName) const
{
const QFileInfo binaryInfo = vcsBinary().toFileInfo();
QDir foundBinDir(binaryInfo.dir());
@@ -2564,15 +2566,15 @@ void GitClient::launchGitK(const QString &workingDirectory, const QString &fileN
VcsOutputWindow::appendError(msgCannotLaunch("gitk"));
}
-void GitClient::launchRepositoryBrowser(const QString &workingDirectory) const
+void GitClient::launchRepositoryBrowser(const FilePath &workingDirectory) const
{
const QString repBrowserBinary = settings().repositoryBrowserCmd.value();
if (!repBrowserBinary.isEmpty())
- QProcess::startDetached(repBrowserBinary, {workingDirectory}, workingDirectory);
+ QProcess::startDetached(repBrowserBinary, {workingDirectory.toString()}, workingDirectory.toString());
}
bool GitClient::tryLauchingGitK(const Environment &env,
- const QString &workingDirectory,
+ const FilePath &workingDirectory,
const QString &fileName,
const QString &gitBinDirectory) const
{
@@ -2591,13 +2593,13 @@ bool GitClient::tryLauchingGitK(const Environment &env,
arguments.append(ProcessArgs::splitArgs(gitkOpts, HostOsInfo::hostOs()));
if (!fileName.isEmpty())
arguments << "--" << fileName;
- VcsOutputWindow::appendCommand(workingDirectory, {binary, arguments});
+ VcsOutputWindow::appendCommand(workingDirectory.toString(), {binary, arguments});
// This should always use QProcess::startDetached (as not to kill
// the child), but that does not have an environment parameter.
bool success = false;
if (!settings().path.value().isEmpty()) {
auto process = new QProcess;
- process->setWorkingDirectory(workingDirectory);
+ process->setWorkingDirectory(workingDirectory.toString());
process->setProcessEnvironment(env.toProcessEnvironment());
process->start(binary, arguments);
success = process->waitForStarted();
@@ -2607,20 +2609,20 @@ bool GitClient::tryLauchingGitK(const Environment &env,
else
delete process;
} else {
- success = QProcess::startDetached(binary, arguments, workingDirectory);
+ success = QProcess::startDetached(binary, arguments, workingDirectory.toString());
}
return success;
}
-bool GitClient::launchGitGui(const QString &workingDirectory) {
+bool GitClient::launchGitGui(const FilePath &workingDirectory) {
bool success = true;
FilePath gitBinary = vcsBinary();
if (gitBinary.isEmpty()) {
success = false;
} else {
success = QProcess::startDetached(gitBinary.toString(), {"gui"},
- workingDirectory);
+ workingDirectory.toString());
}
if (!success)
@@ -2656,7 +2658,7 @@ FilePath GitClient::gitBinDirectory() const
return FilePath::fromString(path);
}
-bool GitClient::launchGitBash(const QString &workingDirectory)
+bool GitClient::launchGitBash(const FilePath &workingDirectory)
{
bool success = true;
const QString git = vcsBinary().toString();
@@ -2665,7 +2667,7 @@ bool GitClient::launchGitBash(const QString &workingDirectory)
success = false;
} else {
const QString gitBash = QFileInfo(git).absolutePath() + "/../git-bash.exe";
- success = QProcess::startDetached(gitBash, {}, workingDirectory);
+ success = QProcess::startDetached(gitBash, {}, workingDirectory.toString());
}
if (!success)
@@ -2683,7 +2685,7 @@ FilePath GitClient::vcsBinary() const
return binary;
}
-QTextCodec *GitClient::encoding(const QString &workingDirectory, const QString &configVar) const
+QTextCodec *GitClient::encoding(const FilePath &workingDirectory, const QString &configVar) const
{
QString codecName = readConfigValue(workingDirectory, configVar).trimmed();
// Set default commit encoding to 'UTF-8', when it's not set,
@@ -2702,7 +2704,7 @@ static QByteArray shiftLogLine(QByteArray &logText)
return res;
}
-bool GitClient::readDataFromCommit(const QString &repoDirectory, const QString &commit,
+bool GitClient::readDataFromCommit(const FilePath &repoDirectory, const QString &commit,
CommitData &commitData, QString *errorMessage,
QString *commitTemplate)
{
@@ -2714,7 +2716,7 @@ bool GitClient::readDataFromCommit(const QString &repoDirectory, const QString &
if (proc.result() != QtcProcess::FinishedWithSuccess) {
if (errorMessage) {
*errorMessage = tr("Cannot retrieve last commit data of repository \"%1\".")
- .arg(QDir::toNativeSeparators(repoDirectory));
+ .arg(repoDirectory.toUserOutput());
}
return false;
}
@@ -2731,7 +2733,7 @@ bool GitClient::readDataFromCommit(const QString &repoDirectory, const QString &
return true;
}
-bool GitClient::getCommitData(const QString &workingDirectory,
+bool GitClient::getCommitData(const FilePath &workingDirectory,
QString *commitTemplate,
CommitData &commitData,
QString *errorMessage)
@@ -2739,7 +2741,7 @@ bool GitClient::getCommitData(const QString &workingDirectory,
commitData.clear();
// Find repo
- const QString repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
+ const FilePath repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
if (repoDirectory.isEmpty()) {
*errorMessage = msgRepositoryNotFound(workingDirectory);
return false;
@@ -2749,7 +2751,7 @@ bool GitClient::getCommitData(const QString &workingDirectory,
QString gitDir = findGitDirForRepository(repoDirectory);
if (gitDir.isEmpty()) {
- *errorMessage = tr("The repository \"%1\" is not initialized.").arg(repoDirectory);
+ *errorMessage = tr("The repository \"%1\" is not initialized.").arg(repoDirectory.toString());
return false;
}
@@ -2792,7 +2794,7 @@ bool GitClient::getCommitData(const QString &workingDirectory,
// Filter out untracked files that are not part of the project
QStringList untrackedFiles = commitData.filterFiles(UntrackedFile);
- VcsBaseSubmitEditor::filterUntrackedFilesOfProject(repoDirectory, &untrackedFiles);
+ VcsBaseSubmitEditor::filterUntrackedFilesOfProject(repoDirectory.toString(), &untrackedFiles);
QList<CommitData::StateFilePair> filteredFiles;
QList<CommitData::StateFilePair>::const_iterator it = commitData.files.constBegin();
for ( ; it != commitData.files.constEnd(); ++it) {
@@ -2853,7 +2855,7 @@ bool GitClient::getCommitData(const QString &workingDirectory,
// Make relative to repository
const QFileInfo templateFileInfo(templateFilename);
if (templateFileInfo.isRelative())
- templateFilename = repoDirectory + '/' + templateFilename;
+ templateFilename = repoDirectory.toString() + '/' + templateFilename;
FileReader reader;
if (!reader.fetch(Utils::FilePath::fromString(templateFilename), QIODevice::Text, errorMessage))
return false;
@@ -2885,7 +2887,7 @@ static inline QString msgCommitted(const QString &amendSHA1, int fileCount)
return GitClient::tr("Amended \"%1\".").arg(amendSHA1);
}
-bool GitClient::addAndCommit(const QString &repositoryDirectory,
+bool GitClient::addAndCommit(const FilePath &repositoryDirectory,
const GitSubmitEditorPanelData &data,
CommitType commitType,
const QString &amendSHA1,
@@ -2995,9 +2997,10 @@ GitClient::RevertResult GitClient::revertI(QStringList files,
const bool isDirectory = firstFile.isDir();
if (ptrToIsDirectory)
*ptrToIsDirectory = isDirectory;
- const QString workingDirectory = isDirectory ? firstFile.absoluteFilePath() : firstFile.absolutePath();
+ const FilePath workingDirectory =
+ FilePath::fromString(isDirectory ? firstFile.absoluteFilePath() : firstFile.absolutePath());
- const QString repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
+ const FilePath repoDirectory = VcsManager::findTopLevelForDirectory(workingDirectory);
if (repoDirectory.isEmpty()) {
*errorMessage = msgRepositoryNotFound(workingDirectory);
return RevertFailed;
@@ -3022,7 +3025,7 @@ GitClient::RevertResult GitClient::revertI(QStringList files,
// If we are looking at files, make them relative to the repository
// directory to match them in the status output list.
if (!isDirectory) {
- const QDir repoDir(repoDirectory);
+ const QDir repoDir(repoDirectory.toString());
const QStringList::iterator cend = files.end();
for (QStringList::iterator it = files.begin(); it != cend; ++it)
*it = repoDir.relativeFilePath(*it);
@@ -3086,7 +3089,7 @@ void GitClient::revert(const QStringList &files, bool revertStaging)
}
}
-void GitClient::fetch(const QString &workingDirectory, const QString &remote)
+void GitClient::fetch(const FilePath &workingDirectory, const QString &remote)
{
QStringList const arguments = {"fetch", (remote.isEmpty() ? "--all" : remote)};
VcsCommand *command = vcsExec(workingDirectory, arguments, nullptr, true,
@@ -3095,7 +3098,7 @@ void GitClient::fetch(const QString &workingDirectory, const QString &remote)
this, [workingDirectory] { GitPlugin::updateBranches(workingDirectory); });
}
-bool GitClient::executeAndHandleConflicts(const QString &workingDirectory,
+bool GitClient::executeAndHandleConflicts(const FilePath &workingDirectory,
const QStringList &arguments,
const QString &abortCommand) const
{
@@ -3111,7 +3114,7 @@ bool GitClient::executeAndHandleConflicts(const QString &workingDirectory,
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-void GitClient::pull(const QString &workingDirectory, bool rebase)
+void GitClient::pull(const FilePath &workingDirectory, bool rebase)
{
QString abortCommand;
QStringList arguments = {"pull"};
@@ -3128,7 +3131,7 @@ void GitClient::pull(const QString &workingDirectory, bool rebase)
Qt::QueuedConnection);
}
-void GitClient::synchronousAbortCommand(const QString &workingDir, const QString &abortCommand)
+void GitClient::synchronousAbortCommand(const FilePath &workingDir, const QString &abortCommand)
{
// Abort to clean if something goes wrong
if (abortCommand.isEmpty()) {
@@ -3144,7 +3147,7 @@ void GitClient::synchronousAbortCommand(const QString &workingDir, const QString
VcsOutputWindow::append(proc.stdOut());
}
-QString GitClient::synchronousTrackingBranch(const QString &workingDirectory, const QString &branch)
+QString GitClient::synchronousTrackingBranch(const FilePath &workingDirectory, const QString &branch)
{
QString remote;
QString localBranch = branch.isEmpty() ? synchronousCurrentLocalBranch(workingDirectory) : branch;
@@ -3161,7 +3164,7 @@ QString GitClient::synchronousTrackingBranch(const QString &workingDirectory, co
return remote + '/' + rBranch;
}
-bool GitClient::synchronousSetTrackingBranch(const QString &workingDirectory,
+bool GitClient::synchronousSetTrackingBranch(const FilePath &workingDirectory,
const QString &branch, const QString &tracking)
{
QtcProcess proc;
@@ -3170,7 +3173,7 @@ bool GitClient::synchronousSetTrackingBranch(const QString &workingDirectory,
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-VcsBase::VcsCommand *GitClient::asyncUpstreamStatus(const QString &workingDirectory,
+VcsBase::VcsCommand *GitClient::asyncUpstreamStatus(const FilePath &workingDirectory,
const QString &branch,
const QString &upstream)
{
@@ -3179,7 +3182,7 @@ VcsBase::VcsCommand *GitClient::asyncUpstreamStatus(const QString &workingDirect
return vcsExec(workingDirectory, args, nullptr, false, silentFlags);
}
-void GitClient::handleMergeConflicts(const QString &workingDir, const QString &commit,
+void GitClient::handleMergeConflicts(const FilePath &workingDir, const QString &commit,
const QStringList &files, const QString &abortCommand)
{
QString message;
@@ -3232,7 +3235,7 @@ void GitClient::addFuture(const QFuture<void> &future)
}
// Subversion: git svn
-void GitClient::synchronousSubversionFetch(const QString &workingDirectory) const
+void GitClient::synchronousSubversionFetch(const FilePath &workingDirectory) const
{
// Disable UNIX terminals to suppress SSH prompting.
const unsigned flags = VcsCommand::SshPasswordPrompt
@@ -3242,7 +3245,7 @@ void GitClient::synchronousSubversionFetch(const QString &workingDirectory) cons
vcsSynchronousExec(proc, workingDirectory, {"svn", "fetch"}, flags);
}
-void GitClient::subversionLog(const QString &workingDirectory) const
+void GitClient::subversionLog(const FilePath &workingDirectory) const
{
QStringList arguments = {"svn", "log"};
int logCount = settings().logCount.value();
@@ -3259,13 +3262,13 @@ void GitClient::subversionLog(const QString &workingDirectory) const
vcsExec(workingDirectory, arguments, editor);
}
-void GitClient::subversionDeltaCommit(const QString &workingDirectory) const
+void GitClient::subversionDeltaCommit(const FilePath &workingDirectory) const
{
vcsExec(workingDirectory, {"svn", "dcommit"}, nullptr, true,
VcsCommand::ShowSuccessMessage);
}
-void GitClient::push(const QString &workingDirectory, const QStringList &pushArgs)
+void GitClient::push(const FilePath &workingDirectory, const QStringList &pushArgs)
{
VcsCommand *command = vcsExec(
workingDirectory, QStringList({"push"}) + pushArgs, nullptr, true,
@@ -3343,7 +3346,7 @@ void GitClient::push(const QString &workingDirectory, const QStringList &pushArg
});
}
-bool GitClient::synchronousMerge(const QString &workingDirectory, const QString &branch,
+bool GitClient::synchronousMerge(const FilePath &workingDirectory, const QString &branch,
bool allowFastForward)
{
QString command = "merge";
@@ -3354,7 +3357,7 @@ bool GitClient::synchronousMerge(const QString &workingDirectory, const QString
return executeAndHandleConflicts(workingDirectory, arguments, command);
}
-bool GitClient::canRebase(const QString &workingDirectory) const
+bool GitClient::canRebase(const FilePath &workingDirectory) const
{
const QString gitDir = findGitDirForRepository(workingDirectory);
if (QFileInfo::exists(gitDir + "/rebase-apply")
@@ -3367,24 +3370,24 @@ bool GitClient::canRebase(const QString &workingDirectory) const
return true;
}
-void GitClient::rebase(const QString &workingDirectory, const QString &argument)
+void GitClient::rebase(const FilePath &workingDirectory, const QString &argument)
{
vcsExecAbortable(workingDirectory, {"rebase", argument}, true);
}
-void GitClient::cherryPick(const QString &workingDirectory, const QString &argument)
+void GitClient::cherryPick(const FilePath &workingDirectory, const QString &argument)
{
vcsExecAbortable(workingDirectory, {"cherry-pick", argument});
}
-void GitClient::revert(const QString &workingDirectory, const QString &argument)
+void GitClient::revert(const FilePath &workingDirectory, const QString &argument)
{
vcsExecAbortable(workingDirectory, {"revert", argument});
}
// Executes a command asynchronously. Work tree is expected to be clean.
// Stashing is handled prior to this call.
-VcsCommand *GitClient::vcsExecAbortable(const QString &workingDirectory,
+VcsCommand *GitClient::vcsExecAbortable(const FilePath &workingDirectory,
const QStringList &arguments,
bool isRebase,
QString abortCommand)
@@ -3394,7 +3397,7 @@ VcsCommand *GitClient::vcsExecAbortable(const QString &workingDirectory,
if (abortCommand.isEmpty())
abortCommand = arguments.at(0);
VcsCommand *command = createCommand(workingDirectory, nullptr, VcsWindowOutputBind);
- command->setCookie(workingDirectory);
+ command->setCookie(workingDirectory.toString());
command->addFlags(VcsCommand::SshPasswordPrompt
| VcsCommand::ShowStdOut
| VcsCommand::ShowSuccessMessage);
@@ -3409,7 +3412,7 @@ VcsCommand *GitClient::vcsExecAbortable(const QString &workingDirectory,
return command;
}
-bool GitClient::synchronousRevert(const QString &workingDirectory, const QString &commit)
+bool GitClient::synchronousRevert(const FilePath &workingDirectory, const QString &commit)
{
const QString command = "revert";
// Do not stash if --continue or --abort is given as the commit
@@ -3418,7 +3421,7 @@ bool GitClient::synchronousRevert(const QString &workingDirectory, const QString
return executeAndHandleConflicts(workingDirectory, {command, "--no-edit", commit}, command);
}
-bool GitClient::synchronousCherryPick(const QString &workingDirectory, const QString &commit)
+bool GitClient::synchronousCherryPick(const FilePath &workingDirectory, const QString &commit)
{
const QString command = "cherry-pick";
// "commit" might be --continue or --abort
@@ -3434,7 +3437,7 @@ bool GitClient::synchronousCherryPick(const QString &workingDirectory, const QSt
return executeAndHandleConflicts(workingDirectory, arguments, command);
}
-void GitClient::interactiveRebase(const QString &workingDirectory, const QString &commit, bool fixup)
+void GitClient::interactiveRebase(const FilePath &workingDirectory, const QString &commit, bool fixup)
{
QStringList arguments = {"rebase", "-i"};
if (fixup)
@@ -3457,7 +3460,7 @@ QString GitClient::msgNoCommits(bool includeRemote)
return includeRemote ? tr("No commits were found") : tr("No local commits were found");
}
-void GitClient::stashPop(const QString &workingDirectory, const QString &stash)
+void GitClient::stashPop(const FilePath &workingDirectory, const QString &stash)
{
QStringList arguments = {"stash", "pop"};
if (!stash.isEmpty())
@@ -3466,7 +3469,7 @@ void GitClient::stashPop(const QString &workingDirectory, const QString &stash)
ConflictHandler::attachToCommand(cmd);
}
-bool GitClient::synchronousStashRestore(const QString &workingDirectory,
+bool GitClient::synchronousStashRestore(const FilePath &workingDirectory,
const QString &stash,
bool pop,
const QString &branch /* = QString()*/) const
@@ -3479,7 +3482,7 @@ bool GitClient::synchronousStashRestore(const QString &workingDirectory,
return executeAndHandleConflicts(workingDirectory, arguments);
}
-bool GitClient::synchronousStashRemove(const QString &workingDirectory, const QString &stash,
+bool GitClient::synchronousStashRemove(const FilePath &workingDirectory, const QString &stash,
QString *errorMessage) const
{
QStringList arguments = {"stash"};
@@ -3501,7 +3504,7 @@ bool GitClient::synchronousStashRemove(const QString &workingDirectory, const QS
}
}
-bool GitClient::synchronousStashList(const QString &workingDirectory, QList<Stash> *stashes,
+bool GitClient::synchronousStashList(const FilePath &workingDirectory, QList<Stash> *stashes,
QString *errorMessage) const
{
stashes->clear();
@@ -3523,23 +3526,23 @@ bool GitClient::synchronousStashList(const QString &workingDirectory, QList<Stas
}
// Read a single-line config value, return trimmed
-QString GitClient::readConfigValue(const QString &workingDirectory, const QString &configVar) const
+QString GitClient::readConfigValue(const FilePath &workingDirectory, const QString &configVar) const
{
return readOneLine(workingDirectory, {"config", configVar});
}
-void GitClient::setConfigValue(const QString &workingDirectory, const QString &configVar,
+void GitClient::setConfigValue(const FilePath &workingDirectory, const QString &configVar,
const QString &value) const
{
readOneLine(workingDirectory, {"config", configVar, value});
}
-QString GitClient::readGitVar(const QString &workingDirectory, const QString &configVar) const
+QString GitClient::readGitVar(const FilePath &workingDirectory, const QString &configVar) const
{
return readOneLine(workingDirectory, {"var", configVar});
}
-QString GitClient::readOneLine(const QString &workingDirectory, const QStringList &arguments) const
+QString GitClient::readOneLine(const FilePath &workingDirectory, const QStringList &arguments) const
{
// Git for Windows always uses UTF-8 for configuration:
// https://github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support#convert-config-files
@@ -3575,7 +3578,7 @@ unsigned GitClient::synchronousGitVersion(QString *errorMessage) const
// run git --version
QtcProcess proc;
- vcsSynchronousExec(proc, QString(), {"--version"}, silentFlags);
+ vcsSynchronousExec(proc, {}, {"--version"}, silentFlags);
if (proc.result() != QtcProcess::FinishedWithSuccess) {
msgCannotRun(tr("Cannot determine Git version: %1").arg(proc.stdErr()), errorMessage);
return 0;
@@ -3594,7 +3597,7 @@ unsigned GitClient::synchronousGitVersion(QString *errorMessage) const
return version(majorV, minorV, patchV);
}
-bool GitClient::StashInfo::init(const QString &workingDirectory, const QString &command,
+bool GitClient::StashInfo::init(const FilePath &workingDirectory, const QString &command,
StashFlag flag, PushAction pushAction)
{
m_workingDir = workingDirectory;
@@ -3628,7 +3631,7 @@ void GitClient::StashInfo::stashPrompt(const QString &command, const QString &st
{
QMessageBox msgBox(QMessageBox::Question, tr("Uncommitted Changes Found"),
tr("What would you like to do with local changes in:") + "\n\n\""
- + QDir::toNativeSeparators(m_workingDir) + '\"',
+ + m_workingDir.toUserOutput() + '\"',
QMessageBox::NoButton, ICore::dialogParent());
msgBox.setDetailedText(statusOutput);
@@ -3716,7 +3719,7 @@ GitRemote::GitRemote(const QString &location) : Core::IVersionControl::RepoUrl(l
}
QString GitClient::suggestedLocalBranchName(
- const QString &workingDirectory,
+ const FilePath &workingDirectory,
const QStringList &localNames,
const QString &target,
BranchTargetType targetType)
@@ -3743,7 +3746,7 @@ QString GitClient::suggestedLocalBranchName(
void GitClient::addChangeActions(QMenu *menu, const QString &source, const QString &change)
{
QTC_ASSERT(!change.isEmpty(), return);
- const QString &workingDir = fileWorkingDirectory(source);
+ const FilePath &workingDir = fileWorkingDirectory(source);
menu->addAction(tr("Cherr&y-Pick Change %1").arg(change), [workingDir, change] {
m_instance->synchronousCherryPick(workingDir, change);
});
@@ -3815,23 +3818,23 @@ void GitClient::addChangeActions(QMenu *menu, const QString &source, const QStri
});
}
-QString GitClient::fileWorkingDirectory(const QString &file)
+FilePath GitClient::fileWorkingDirectory(const QString &file)
{
Utils::FilePath path = Utils::FilePath::fromString(file);
if (!path.isEmpty() && !path.isDir())
path = path.parentDir();
while (!path.isEmpty() && !path.exists())
path = path.parentDir();
- return path.toString();
+ return path;
}
-IEditor *GitClient::openShowEditor(const QString &workingDirectory, const QString &ref,
+IEditor *GitClient::openShowEditor(const FilePath &workingDirectory, const QString &ref,
const QString &path, ShowEditor showSetting)
{
QString topLevel;
VcsManager::findVersionControlForDirectory(workingDirectory, &topLevel);
const QString relativePath = QDir(topLevel).relativeFilePath(path);
- const QByteArray content = synchronousShow(topLevel, ref + ":" + relativePath);
+ const QByteArray content = synchronousShow(FilePath::fromString(topLevel), ref + ":" + relativePath);
if (showSetting == ShowEditor::OnlyIfDifferent) {
if (content.isEmpty())
return nullptr;
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 1f1b164cdff..53db664f6d9 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -120,7 +120,7 @@ public:
enum StashResult { StashUnchanged, StashCanceled, StashFailed,
Stashed, NotStashed /* User did not want it */ };
- bool init(const QString &workingDirectory, const QString &command,
+ bool init(const Utils::FilePath &workingDirectory, const QString &command,
StashFlag flag = Default, PushAction pushAction = NoPush);
bool stashingFailed() const;
void end();
@@ -133,7 +133,7 @@ public:
StashResult m_stashResult = NotStashed;
QString m_message;
- QString m_workingDir;
+ Utils::FilePath m_workingDir;
StashFlag m_flags = Default;
PushAction m_pushAction = NoPush;
};
@@ -145,178 +145,178 @@ public:
Utils::FilePath vcsBinary() const override;
unsigned gitVersion(QString *errorMessage = nullptr) const;
- VcsBase::VcsCommand *vcsExecAbortable(const QString &workingDirectory,
+ VcsBase::VcsCommand *vcsExecAbortable(const Utils::FilePath &workingDirectory,
const QStringList &arguments,
bool isRebase = false,
- QString abortCommand = QString());
+ QString abortCommand = {});
QString findRepositoryForDirectory(const QString &directory) const;
- QString findGitDirForRepository(const QString &repositoryDir) const;
- bool managesFile(const QString &workingDirectory, const QString &fileName) const;
+ QString findGitDirForRepository(const Utils::FilePath &repositoryDir) const;
+ bool managesFile(const Utils::FilePath &workingDirectory, const QString &fileName) const;
Utils::FilePaths unmanagedFiles(const Utils::FilePaths &filePaths) const;
- void diffFile(const QString &workingDirectory, const QString &fileName) const;
- void diffFiles(const QString &workingDirectory,
+ void diffFile(const Utils::FilePath &workingDirectory, const QString &fileName) const;
+ void diffFiles(const Utils::FilePath &workingDirectory,
const QStringList &unstagedFileNames,
const QStringList &stagedFileNames) const;
- void diffProject(const QString &workingDirectory,
+ void diffProject(const Utils::FilePath &workingDirectory,
const QString &projectDirectory) const;
- void diffRepository(const QString &workingDirectory) const
+ void diffRepository(const Utils::FilePath &workingDirectory) const
{
return diffRepository(workingDirectory, {}, {});
}
- void diffRepository(const QString &workingDirectory,
+ void diffRepository(const Utils::FilePath &workingDirectory,
const QString &leftCommit,
const QString &rightCommit) const;
- void diffBranch(const QString &workingDirectory,
+ void diffBranch(const Utils::FilePath &workingDirectory,
const QString &branchName) const;
- void merge(const QString &workingDirectory, const QStringList &unmergedFileNames = QStringList());
-
- void status(const QString &workingDirectory) const;
- void log(const QString &workingDirectory, const QString &fileName = QString(),
- bool enableAnnotationContextMenu = false, const QStringList &args = QStringList());
- void reflog(const QString &workingDirectory, const QString &branch = {});
- VcsBase::VcsBaseEditorWidget *annotate(
- const QString &workingDir, const QString &file, const QString &revision = QString(),
- int lineNumber = -1, const QStringList &extraOptions = QStringList()) override;
- void reset(const QString &workingDirectory, const QString &argument, const QString &commit = QString());
- void removeStaleRemoteBranches(const QString &workingDirectory, const QString &remote);
- void recoverDeletedFiles(const QString &workingDirectory);
- void addFile(const QString &workingDirectory, const QString &fileName);
- bool synchronousLog(const QString &workingDirectory, const QStringList &arguments,
+ void merge(const Utils::FilePath &workingDirectory, const QStringList &unmergedFileNames = {});
+
+ void status(const Utils::FilePath &workingDirectory) const;
+ void log(const Utils::FilePath &workingDirectory, const QString &fileName = {},
+ bool enableAnnotationContextMenu = false, const QStringList &args = {});
+ void reflog(const Utils::FilePath &workingDirectory, const QString &branch = {});
+ VcsBase::VcsBaseEditorWidget *annotate(const Utils::FilePath &workingDir, const QString &file,
+ const QString &revision = {}, int lineNumber = -1,
+ const QStringList &extraOptions = {}) override;
+ void reset(const Utils::FilePath &workingDirectory, const QString &argument, const QString &commit = {});
+ void removeStaleRemoteBranches(const Utils::FilePath &workingDirectory, const QString &remote);
+ void recoverDeletedFiles(const Utils::FilePath &workingDirectory);
+ void addFile(const Utils::FilePath &workingDirectory, const QString &fileName);
+ bool synchronousLog(const Utils::FilePath &workingDirectory, const QStringList &arguments,
QString *output, QString *errorMessage = nullptr,
unsigned flags = 0);
- bool synchronousAdd(const QString &workingDirectory, const QStringList &files,
+ bool synchronousAdd(const Utils::FilePath &workingDirectory, const QStringList &files,
const QStringList &extraOptions = {});
- bool synchronousDelete(const QString &workingDirectory,
+ bool synchronousDelete(const Utils::FilePath &workingDirectory,
bool force,
const QStringList &files);
- bool synchronousMove(const QString &workingDirectory,
+ bool synchronousMove(const Utils::FilePath &workingDirectory,
const QString &from,
const QString &to);
- bool synchronousReset(const QString &workingDirectory, const QStringList &files = QStringList(),
+ bool synchronousReset(const Utils::FilePath &workingDirectory, const QStringList &files = {},
QString *errorMessage = nullptr);
- bool synchronousCleanList(const QString &workingDirectory, const QString &modulePath,
+ bool synchronousCleanList(const Utils::FilePath &workingDirectory, const QString &modulePath,
QStringList *files, QStringList *ignoredFiles, QString *errorMessage);
- bool synchronousApplyPatch(const QString &workingDirectory, const QString &file,
- QString *errorMessage, const QStringList &extraArguments = QStringList());
+ bool synchronousApplyPatch(const Utils::FilePath &workingDirectory, const QString &file,
+ QString *errorMessage, const QStringList &extraArguments = {});
bool synchronousInit(const Utils::FilePath &workingDirectory);
- bool synchronousCheckoutFiles(const QString &workingDirectory, QStringList files = QStringList(),
- QString revision = QString(), QString *errorMessage = nullptr,
+ bool synchronousCheckoutFiles(const Utils::FilePath &workingDirectory, QStringList files = {},
+ QString revision = {}, QString *errorMessage = nullptr,
bool revertStaging = true);
enum class StashMode { NoStash, TryStash };
- VcsBase::VcsCommand *checkout(const QString &workingDirectory, const QString &ref,
+ VcsBase::VcsCommand *checkout(const Utils::FilePath &workingDirectory, const QString &ref,
StashMode stashMode = StashMode::TryStash);
- QStringList setupCheckoutArguments(const QString &workingDirectory, const QString &ref);
- void updateSubmodulesIfNeeded(const QString &workingDirectory, bool prompt);
+ QStringList setupCheckoutArguments(const Utils::FilePath &workingDirectory, const QString &ref);
+ void updateSubmodulesIfNeeded(const Utils::FilePath &workingDirectory, bool prompt);
// Do a stash and return identier.
enum { StashPromptDescription = 0x1, StashImmediateRestore = 0x2, StashIgnoreUnchanged = 0x4 };
- QString synchronousStash(const QString &workingDirectory,
- const QString &messageKeyword = QString(),
+ QString synchronousStash(const Utils::FilePath &workingDirectory,
+ const QString &messageKeyword = {},
unsigned flags = 0, bool *unchanged = nullptr) const;
- bool executeSynchronousStash(const QString &workingDirectory,
- const QString &message = QString(),
+ bool executeSynchronousStash(const Utils::FilePath &workingDirectory,
+ const QString &message = {},
bool unstagedOnly = false,
QString *errorMessage = nullptr) const;
- bool synchronousStashRestore(const QString &workingDirectory,
+ bool synchronousStashRestore(const Utils::FilePath &workingDirectory,
const QString &stash,
bool pop = false,
- const QString &branch = QString()) const;
- bool synchronousStashRemove(const QString &workingDirectory,
- const QString &stash = QString(),
+ const QString &branch = {}) const;
+ bool synchronousStashRemove(const Utils::FilePath &workingDirectory,
+ const QString &stash = {},
QString *errorMessage = nullptr) const;
- bool synchronousBranchCmd(const QString &workingDirectory, QStringList branchArgs,
+ bool synchronousBranchCmd(const Utils::FilePath &workingDirectory, QStringList branchArgs,
QString *output, QString *errorMessage) const;
- bool synchronousTagCmd(const QString &workingDirectory, QStringList tagArgs,
+ bool synchronousTagCmd(const Utils::FilePath &workingDirectory, QStringList tagArgs,
QString *output, QString *errorMessage) const;
- bool synchronousForEachRefCmd(const QString &workingDirectory, QStringList args,
+ bool synchronousForEachRefCmd(const Utils::FilePath &workingDirectory, QStringList args,
QString *output, QString *errorMessage = nullptr) const;
- VcsBase::VcsCommand *asyncForEachRefCmd(const QString &workingDirectory, QStringList args) const;
- bool synchronousRemoteCmd(const QString &workingDirectory, QStringList remoteArgs,
+ VcsBase::VcsCommand *asyncForEachRefCmd(const Utils::FilePath &workingDirectory, QStringList args) const;
+ bool synchronousRemoteCmd(const Utils::FilePath &workingDirectory, QStringList remoteArgs,
QString *output = nullptr, QString *errorMessage = nullptr,
bool silent = false) const;
- QMap<QString,QString> synchronousRemotesList(const QString &workingDirectory,
+ QMap<QString,QString> synchronousRemotesList(const Utils::FilePath &workingDirectory,
QString *errorMessage = nullptr) const;
- QStringList synchronousSubmoduleStatus(const QString &workingDirectory,
+ QStringList synchronousSubmoduleStatus(const Utils::FilePath &workingDirectory,
QString *errorMessage = nullptr) const;
- SubmoduleDataMap submoduleList(const QString &workingDirectory) const;
- QByteArray synchronousShow(const QString &workingDirectory, const QString &id,
+ SubmoduleDataMap submoduleList(const Utils::FilePath &workingDirectory) const;
+ QByteArray synchronousShow(const Utils::FilePath &workingDirectory, const QString &id,
unsigned flags = 0) const;
- bool synchronousRevListCmd(const QString &workingDirectory, const QStringList &extraArguments,
+ bool synchronousRevListCmd(const Utils::FilePath &workingDirectory, const QStringList &extraArguments,
QString *output, QString *errorMessage = nullptr) const;
- bool synchronousParentRevisions(const QString &workingDirectory,
+ bool synchronousParentRevisions(const Utils::FilePath &workingDirectory,
const QString &revision,
QStringList *parents,
QString *errorMessage) const;
- QString synchronousShortDescription(const QString &workingDirectory, const QString &revision) const;
- QString synchronousShortDescription(const QString &workingDirectory, const QString &revision,
+ QString synchronousShortDescription(const Utils::FilePath &workingDirectory, const QString &revision) const;
+ QString synchronousShortDescription(const Utils::FilePath &workingDirectory, const QString &revision,
const QString &format) const;
- QString synchronousCurrentLocalBranch(const QString &workingDirectory) const;
+ QString synchronousCurrentLocalBranch(const Utils::FilePath &workingDirectory) const;
- bool synchronousHeadRefs(const QString &workingDirectory, QStringList *output,
+ bool synchronousHeadRefs(const Utils::FilePath &workingDirectory, QStringList *output,
QString *errorMessage = nullptr) const;
- QString synchronousTopic(const QString &workingDirectory) const;
- bool synchronousRevParseCmd(const QString &workingDirectory, const QString &ref,
+ QString synchronousTopic(const Utils::FilePath &workingDirectory) const;
+ bool synchronousRevParseCmd(const Utils::FilePath &workingDirectory, const QString &ref,
QString *output, QString *errorMessage = nullptr) const;
- QString synchronousTopRevision(const QString &workingDirectory, QDateTime *dateTime = nullptr);
- void synchronousTagsForCommit(const QString &workingDirectory, const QString &revision,
+ QString synchronousTopRevision(const Utils::FilePath &workingDirectory, QDateTime *dateTime = nullptr);
+ void synchronousTagsForCommit(const Utils::FilePath &workingDirectory, const QString &revision,
QString &precedes, QString &follows) const;
- bool isRemoteCommit(const QString &workingDirectory, const QString &commit);
- bool isFastForwardMerge(const QString &workingDirectory, const QString &branch);
+ bool isRemoteCommit(const Utils::FilePath &workingDirectory, const QString &commit);
+ bool isFastForwardMerge(const Utils::FilePath &workingDirectory, const QString &branch);
- void fetch(const QString &workingDirectory, const QString &remote);
- void pull(const QString &workingDirectory, bool rebase);
- void push(const QString &workingDirectory, const QStringList &pushArgs = QStringList());
- bool synchronousMerge(const QString &workingDirectory, const QString &branch,
+ void fetch(const Utils::FilePath &workingDirectory, const QString &remote);
+ void pull(const Utils::FilePath &workingDirectory, bool rebase);
+ void push(const Utils::FilePath &workingDirectory, const QStringList &pushArgs = {});
+ bool synchronousMerge(const Utils::FilePath &workingDirectory, const QString &branch,
bool allowFastForward = true);
- bool canRebase(const QString &workingDirectory) const;
- void rebase(const QString &workingDirectory, const QString &argument);
- void cherryPick(const QString &workingDirectory, const QString &argument);
- void revert(const QString &workingDirectory, const QString &argument);
-
- bool synchronousRevert(const QString &workingDirectory, const QString &commit);
- bool synchronousCherryPick(const QString &workingDirectory, const QString &commit);
- void interactiveRebase(const QString &workingDirectory, const QString &commit, bool fixup);
- void synchronousAbortCommand(const QString &workingDir, const QString &abortCommand);
- QString synchronousTrackingBranch(const QString &workingDirectory,
- const QString &branch = QString());
- bool synchronousSetTrackingBranch(const QString &workingDirectory,
+ bool canRebase(const Utils::FilePath &workingDirectory) const;
+ void rebase(const Utils::FilePath &workingDirectory, const QString &argument);
+ void cherryPick(const Utils::FilePath &workingDirectory, const QString &argument);
+ void revert(const Utils::FilePath &workingDirectory, const QString &argument);
+
+ bool synchronousRevert(const Utils::FilePath &workingDirectory, const QString &commit);
+ bool synchronousCherryPick(const Utils::FilePath &workingDirectory, const QString &commit);
+ void interactiveRebase(const Utils::FilePath &workingDirectory, const QString &commit, bool fixup);
+ void synchronousAbortCommand(const Utils::FilePath &workingDir, const QString &abortCommand);
+ QString synchronousTrackingBranch(const Utils::FilePath &workingDirectory,
+ const QString &branch = {});
+ bool synchronousSetTrackingBranch(const Utils::FilePath &workingDirectory,
const QString &branch,
const QString &tracking);
// git svn support (asynchronous).
- void synchronousSubversionFetch(const QString &workingDirectory) const;
- void subversionLog(const QString &workingDirectory) const;
- void subversionDeltaCommit(const QString &workingDirectory) const;
+ void synchronousSubversionFetch(const Utils::FilePath &workingDirectory) const;
+ void subversionLog(const Utils::FilePath &workingDirectory) const;
+ void subversionDeltaCommit(const Utils::FilePath &workingDirectory) const;
- void stashPop(const QString &workingDirectory, const QString &stash = QString());
+ void stashPop(const Utils::FilePath &workingDirectory, const QString &stash = {});
void revert(const QStringList &files, bool revertStaging);
- bool synchronousStashList(const QString &workingDirectory, QList<Stash> *stashes,
+ bool synchronousStashList(const Utils::FilePath &workingDirectory, QList<Stash> *stashes,
QString *errorMessage = nullptr) const;
// Resolve a stash name from message (for IVersionControl's names).
- bool stashNameFromMessage(const QString &workingDirectory, const QString &messge, QString *name,
+ bool stashNameFromMessage(const Utils::FilePath &workingDirectory, const QString &messge, QString *name,
QString *errorMessage = nullptr) const;
- QString readGitVar(const QString &workingDirectory, const QString &configVar) const;
- QString readConfigValue(const QString &workingDirectory, const QString &configVar) const;
- void setConfigValue(const QString &workingDirectory, const QString &configVar,
+ QString readGitVar(const Utils::FilePath &workingDirectory, const QString &configVar) const;
+ QString readConfigValue(const Utils::FilePath &workingDirectory, const QString &configVar) const;
+ void setConfigValue(const Utils::FilePath &workingDirectory, const QString &configVar,
const QString &value) const;
- QTextCodec *encoding(const QString &workingDirectory, const QString &configVar) const;
- bool readDataFromCommit(const QString &repoDirectory, const QString &commit,
+ QTextCodec *encoding(const Utils::FilePath &workingDirectory, const QString &configVar) const;
+ bool readDataFromCommit(const Utils::FilePath &repoDirectory, const QString &commit,
CommitData &commitData, QString *errorMessage = nullptr,
QString *commitTemplate = nullptr);
- bool getCommitData(const QString &workingDirectory, QString *commitTemplate,
+ bool getCommitData(const Utils::FilePath &workingDirectory, QString *commitTemplate,
CommitData &commitData, QString *errorMessage);
- bool addAndCommit(const QString &workingDirectory,
+ bool addAndCommit(const Utils::FilePath &workingDirectory,
const GitSubmitEditorPanelData &data,
CommitType commitType,
const QString &amendSHA1,
@@ -324,53 +324,54 @@ public:
VcsBase::SubmitFileModel *model);
enum StatusResult { StatusChanged, StatusUnchanged, StatusFailed };
- StatusResult gitStatus(const QString &workingDirectory, StatusMode mode,
+ StatusResult gitStatus(const Utils::FilePath &workingDirectory, StatusMode mode,
QString *output = nullptr, QString *errorMessage = nullptr) const;
- CommandInProgress checkCommandInProgress(const QString &workingDirectory) const;
- QString commandInProgressDescription(const QString &workingDirectory) const;
+ CommandInProgress checkCommandInProgress(const Utils::FilePath &workingDirectory) const;
+ QString commandInProgressDescription(const Utils::FilePath &workingDirectory) const;
- void continueCommandIfNeeded(const QString &workingDirectory, bool allowContinue = true);
+ void continueCommandIfNeeded(const Utils::FilePath &workingDirectory, bool allowContinue = true);
- QString extendedShowDescription(const QString &workingDirectory, const QString &text) const;
+ QString extendedShowDescription(const Utils::FilePath &workingDirectory, const QString &text) const;
- void launchGitK(const QString &workingDirectory, const QString &fileName) const;
- void launchGitK(const QString &workingDirectory) const { launchGitK(workingDirectory, QString()); }
- bool launchGitGui(const QString &workingDirectory);
+ void launchGitK(const Utils::FilePath &workingDirectory, const QString &fileName) const;
+ void launchGitK(const Utils::FilePath &workingDirectory) const { launchGitK(workingDirectory, QString()); }
+ bool launchGitGui(const Utils::FilePath &workingDirectory);
Utils::FilePath gitBinDirectory() const;
- bool launchGitBash(const QString &workingDirectory);
+ bool launchGitBash(const Utils::FilePath &workingDirectory);
- void launchRepositoryBrowser(const QString &workingDirectory) const;
+ void launchRepositoryBrowser(const Utils::FilePath &workingDirectory) const;
QStringList synchronousRepositoryBranches(const QString &repositoryURL,
- const QString &workingDirectory = QString()) const;
+ const Utils::FilePath &workingDirectory = {}) const;
Utils::Environment processEnvironment() const override;
- bool beginStashScope(const QString &workingDirectory, const QString &command,
+ bool beginStashScope(const Utils::FilePath &workingDirectory, const QString &command,
StashFlag flag = Default, PushAction pushAction = NoPush);
- StashInfo &stashInfo(const QString &workingDirectory);
- void endStashScope(const QString &workingDirectory);
+ StashInfo &stashInfo(const Utils::FilePath &workingDirectory);
+ void endStashScope(const Utils::FilePath &workingDirectory);
bool isValidRevision(const QString &revision) const;
- void handleMergeConflicts(const QString &workingDir, const QString &commit, const QStringList &files, const QString &abortCommand);
+ void handleMergeConflicts(const Utils::FilePath &workingDir, const QString &commit,
+ const QStringList &files, const QString &abortCommand);
void addFuture(const QFuture<void> &future);
static QString msgNoChangedFiles();
static QString msgNoCommits(bool includeRemote);
- void show(const QString &source, const QString &id, const QString &name = QString());
- void archive(const QString &workingDirectory, QString commit);
+ void show(const QString &source, const QString &id, const QString &name = {});
+ void archive(const Utils::FilePath &workingDirectory, QString commit);
- VcsBase::VcsCommand *asyncUpstreamStatus(const QString &workingDirectory,
+ VcsBase::VcsCommand *asyncUpstreamStatus(const Utils::FilePath &workingDirectory,
const QString &branch, const QString &upstream);
enum class BranchTargetType { Remote, Commit };
static QString suggestedLocalBranchName(
- const QString &workingDirectory, const QStringList &existingLocalNames,
+ const Utils::FilePath &workingDirectory, const QStringList &existingLocalNames,
const QString &target, BranchTargetType targetType);
static void addChangeActions(QMenu *menu, const QString &source, const QString &change);
- static QString fileWorkingDirectory(const QString &file);
+ static Utils::FilePath fileWorkingDirectory(const QString &file);
enum class ShowEditor { OnlyIfDifferent, Always };
- Core::IEditor *openShowEditor(const QString &workingDirectory, const QString &ref,
+ Core::IEditor *openShowEditor(const Utils::FilePath &workingDirectory, const QString &ref,
const QString &path, ShowEditor showSetting = ShowEditor::Always);
private:
@@ -382,15 +383,16 @@ private:
const QString &patch, bool revert);
enum CodecType { CodecSource, CodecLogOutput, CodecNone };
- QTextCodec *codecFor(CodecType codecType, const QString &source = QString()) const;
+ QTextCodec *codecFor(CodecType codecType, const Utils::FilePath &source = {}) const;
- void requestReload(const QString &documentId, const QString &source, const QString &title, const QString &workingDirectory,
- std::function<GitBaseDiffEditorController *(Core::IDocument *)> factory) const;
+ void requestReload(const QString &documentId, const QString &source, const QString &title,
+ const Utils::FilePath &workingDirectory,
+ std::function<GitBaseDiffEditorController *(Core::IDocument *)> factory) const;
// determine version as '(major << 16) + (minor << 8) + patch' or 0.
unsigned synchronousGitVersion(QString *errorMessage = nullptr) const;
- QString readOneLine(const QString &workingDirectory, const QStringList &arguments) const;
+ QString readOneLine(const Utils::FilePath &workingDirectory, const QStringList &arguments) const;
enum RevertResult { RevertOk, RevertUnchanged, RevertCanceled, RevertFailed };
RevertResult revertI(QStringList files,
@@ -398,13 +400,14 @@ private:
QString *errorMessage,
bool revertStaging);
void connectRepositoryChanged(const QString & repository, VcsBase::VcsCommand *cmd);
- bool executeAndHandleConflicts(const QString &workingDirectory, const QStringList &arguments,
- const QString &abortCommand = QString()) const;
+ bool executeAndHandleConflicts(const Utils::FilePath &workingDirectory, const QStringList &arguments,
+ const QString &abortCommand = {}) const;
bool tryLauchingGitK(const Utils::Environment &env,
- const QString &workingDirectory,
+ const Utils::FilePath &workingDirectory,
const QString &fileName,
const QString &gitBinDirectory) const;
- bool cleanList(const QString &workingDirectory, const QString &modulePath, const QString &flag, QStringList *files, QString *errorMessage);
+ bool cleanList(const Utils::FilePath &workingDirectory, const QString &modulePath,
+ const QString &flag, QStringList *files, QString *errorMessage);
enum ContinueCommandMode {
ContinueOnly,
@@ -412,7 +415,7 @@ private:
SkipIfNoChanges
};
- void continuePreviousGitCommand(const QString &workingDirectory, const QString &msgBoxTitle,
+ void continuePreviousGitCommand(const Utils::FilePath &workingDirectory, const QString &msgBoxTitle,
QString msgBoxText, const QString &buttonName,
const QString &gitCommand, ContinueCommandMode continueMode);
@@ -420,10 +423,10 @@ private:
mutable unsigned m_cachedGitVersion = 0;
QString m_gitQtcEditor;
- QMap<QString, StashInfo> m_stashInfo;
+ QMap<Utils::FilePath, StashInfo> m_stashInfo;
QString m_pushFallbackCommand;
QString m_diffCommit;
- QStringList m_updatedSubmodules;
+ Utils::FilePaths m_updatedSubmodules;
bool m_disableEditor = false;
Utils::FutureSynchronizer m_synchronizer; // for commit updates
};
diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp
index 476f0d2cd55..86823707762 100644
--- a/src/plugins/git/giteditor.cpp
+++ b/src/plugins/git/giteditor.cpp
@@ -54,6 +54,7 @@
#define CHANGE_PATTERN "[a-f0-9]{7,40}"
+using namespace Utils;
using namespace VcsBase;
namespace Git {
@@ -235,7 +236,7 @@ void GitEditorWidget::applyDiffChunk(const DiffChunk& chunk, bool revert)
if (!patchFile.open())
return;
- const QString baseDir = workingDirectory();
+ const FilePath baseDir = workingDirectory();
patchFile.write(chunk.header);
patchFile.write(chunk.chunk);
patchFile.close();
@@ -290,8 +291,8 @@ void GitEditorWidget::aboutToOpen(const Utils::FilePath &filePath,
Utils::Id editorId = textDocument()->id();
if (editorId == Git::Constants::GIT_COMMIT_TEXT_EDITOR_ID
|| editorId == Git::Constants::GIT_REBASE_EDITOR_ID) {
- const QString gitPath = filePath.absolutePath().toString();
- setSource(gitPath);
+ const FilePath gitPath = filePath.absolutePath();
+ setSource(gitPath.toString());
textDocument()->setCodec(
GitClient::instance()->encoding(gitPath, "i18n.commitEncoding"));
}
@@ -361,7 +362,7 @@ QString GitEditorWidget::fileNameForLine(int line) const
return source();
}
-QString GitEditorWidget::sourceWorkingDirectory() const
+FilePath GitEditorWidget::sourceWorkingDirectory() const
{
return GitClient::fileWorkingDirectory(source());
}
diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h
index 6eaf454a356..4f07d459f56 100644
--- a/src/plugins/git/giteditor.h
+++ b/src/plugins/git/giteditor.h
@@ -29,7 +29,10 @@
#include <QRegularExpression>
-namespace Utils { class FancyLineEdit; }
+namespace Utils {
+class FancyLineEdit;
+class FilePath;
+} // Utils
namespace Git {
namespace Internal {
@@ -69,7 +72,7 @@ private:
QString revisionSubject(const QTextBlock &inBlock) const override;
bool supportChangeLinks() const override;
QString fileNameForLine(int line) const override;
- QString sourceWorkingDirectory() const;
+ Utils::FilePath sourceWorkingDirectory() const;
const QRegularExpression m_changeNumberPattern;
GitLogFilterWidget *m_logFilterWidget = nullptr;
diff --git a/src/plugins/git/gitgrep.cpp b/src/plugins/git/gitgrep.cpp
index aef8cd720c9..0be7bc0dbbb 100644
--- a/src/plugins/git/gitgrep.cpp
+++ b/src/plugins/git/gitgrep.cpp
@@ -79,7 +79,7 @@ public:
GitGrepRunner(const TextEditor::FileFindParameters &parameters)
: m_parameters(parameters)
{
- m_directory = parameters.additionalParameters.toString();
+ m_directory = FilePath::fromString(parameters.additionalParameters.toString());
m_command.reset(GitClient::instance()->createCommand(m_directory));
m_vcsBinary = GitClient::instance()->vcsBinary();
}
@@ -106,7 +106,7 @@ public:
QString filePath = line.left(lineSeparator);
if (!m_ref.isEmpty() && filePath.startsWith(m_ref))
filePath.remove(0, m_ref.length());
- single.fileName = m_directory + '/' + filePath;
+ single.fileName = m_directory.pathAppended(filePath).toString();
const int textSeparator = line.indexOf(QChar::Null, lineSeparator + 1);
single.lineNumber = line.mid(lineSeparator + 1, textSeparator - lineSeparator - 1).toInt();
QString text = line.mid(textSeparator + 1);
@@ -217,7 +217,7 @@ public:
private:
FilePath m_vcsBinary;
- QString m_directory;
+ FilePath m_directory;
QString m_ref;
TextEditor::FileFindParameters m_parameters;
std::unique_ptr<VcsCommand> m_command;
@@ -225,7 +225,7 @@ private:
} // namespace
-static bool isGitDirectory(const QString &path)
+static bool isGitDirectory(const FilePath &path)
{
static IVersionControl *gitVc = VcsManager::versionControl(VcsBase::Constants::VCS_ID_GIT);
QTC_ASSERT(gitVc, return false);
@@ -253,7 +253,7 @@ GitGrep::GitGrep(GitClient *client)
QTC_ASSERT(findInFiles, return);
connect(findInFiles, &TextEditor::FindInFiles::pathChanged,
m_widget, [this](const QString &path) {
- setEnabled(isGitDirectory(path));
+ setEnabled(isGitDirectory(FilePath::fromString(path)));
});
connect(this, &SearchEngine::enabledChanged, m_widget, &QWidget::setEnabled);
findInFiles->addSearchEngine(this);
@@ -314,7 +314,7 @@ IEditor *GitGrep::openEditor(const SearchResultItem &item,
if (params.ref.isEmpty() || item.path().isEmpty())
return nullptr;
const QString path = QDir::fromNativeSeparators(item.path().first());
- const QString topLevel = parameters.additionalParameters.toString();
+ const FilePath topLevel = FilePath::fromString(parameters.additionalParameters.toString());
IEditor *editor = m_client->openShowEditor(
topLevel, params.ref, path, GitClient::ShowEditor::OnlyIfDifferent);
if (editor)
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 46188534e0c..a9f6d312bbe 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -104,7 +104,7 @@ using namespace std::placeholders;
namespace Git {
namespace Internal {
-using GitClientMemberFunc = void (GitClient::*)(const QString &) const;
+using GitClientMemberFunc = void (GitClient::*)(const FilePath &) const;
class GitTopicCache : public Core::IVersionControl::TopicCache
{
@@ -116,13 +116,13 @@ public:
protected:
FilePath trackFile(const FilePath &repository) override
{
- const QString gitDir = m_client->findGitDirForRepository(repository.toString());
+ const QString gitDir = m_client->findGitDirForRepository(repository);
return gitDir.isEmpty() ? FilePath() : FilePath::fromString(gitDir + "/HEAD");
}
QString refreshTopic(const FilePath &repository) override
{
- return m_client->synchronousTopic(repository.toString());
+ return m_client->synchronousTopic(repository);
}
private:
@@ -244,13 +244,13 @@ public:
bool isConfigured() const final;
bool supportsOperation(Operation operation) const final;
- bool vcsOpen(const FilePath &fileName) final;
- bool vcsAdd(const FilePath &fileName) final;
- bool vcsDelete(const FilePath &filename) final;
+ bool vcsOpen(const FilePath &filePath) final;
+ bool vcsAdd(const FilePath &filePath) final;
+ bool vcsDelete(const FilePath &filePath) final;
bool vcsMove(const FilePath &from, const FilePath &to) final;
bool vcsCreateRepository(const FilePath &directory) final;
- void vcsAnnotate(const FilePath &file, int line) final;
+ void vcsAnnotate(const FilePath &filePath, int line) final;
void vcsDescribe(const FilePath &source, const QString &id) final { m_gitClient.show(source.toString(), id); };
QString vcsTopic(const FilePath &directory) final;
@@ -274,7 +274,7 @@ public:
bool handleLink(const FilePath &workingDirectory, const QString &reference) final
{
if (reference.contains(".."))
- GitClient::instance()->log(workingDirectory.toString(), {}, false, {reference});
+ GitClient::instance()->log(workingDirectory, {}, false, {reference});
else
GitClient::instance()->show(workingDirectory.toString(), reference);
return true;
@@ -286,12 +286,12 @@ public:
bool isCommitEditorOpen() const;
void startCommit(CommitType commitType = SimpleCommit);
- void updateBranches(const QString &repository);
+ void updateBranches(const FilePath &repository);
void updateCurrentBranch();
void manageRemotes();
void initRepository();
- void startRebaseFromCommit(const QString &workingDirectory, QString commit);
+ void startRebaseFromCommit(const FilePath &workingDirectory, QString commit);
void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override;
bool submitEditorAboutToClose() override;
@@ -371,8 +371,8 @@ public:
void updateRepositoryBrowserAction();
Core::IEditor *openSubmitEditor(const QString &fileName, const CommitData &cd);
void cleanCommitMessageFile();
- void cleanRepository(const QString &directory);
- void applyPatch(const QString &workingDirectory, QString file = QString());
+ void cleanRepository(const FilePath &directory);
+ void applyPatch(const FilePath &workingDirectory, QString file = QString());
void updateVersionWarning();
@@ -406,7 +406,7 @@ public:
QPointer<StashDialog> m_stashDialog;
BranchViewFactory m_branchViewFactory;
QPointer<RemoteDialog> m_remoteDialog;
- QString m_submitRepository;
+ FilePath m_submitRepository;
QString m_commitMessageFileName;
bool m_submitActionTriggered = false;
@@ -514,11 +514,11 @@ const VcsBasePluginState &GitPlugin::currentState()
return dd->currentState();
}
-QString GitPlugin::msgRepositoryLabel(const QString &repository)
+QString GitPlugin::msgRepositoryLabel(const FilePath &repository)
{
return repository.isEmpty() ?
tr("<No repository>") :
- tr("Repository: %1").arg(QDir::toNativeSeparators(repository));
+ tr("Repository: %1").arg(repository.toUserOutput());
}
// Returns a regular expression pattern with characters not allowed
@@ -1157,11 +1157,11 @@ void GitPluginPrivate::resetRepository()
return;
const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasTopLevel(), return);
- QString topLevel = state.topLevel();
+ FilePath topLevel = state.topLevel();
LogChangeDialog dialog(true, ICore::dialogParent());
ResetItemDelegate delegate(dialog.widget());
- dialog.setWindowTitle(tr("Undo Changes to %1").arg(QDir::toNativeSeparators(topLevel)));
+ dialog.setWindowTitle(tr("Undo Changes to %1").arg(topLevel.toUserOutput()));
if (dialog.runDialog(topLevel, QString(), LogChangeWidget::IncludeRemotes))
m_gitClient.reset(topLevel, dialog.resetFlag(), dialog.commit());
}
@@ -1179,12 +1179,12 @@ void GitPluginPrivate::startRebase()
{
const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasTopLevel(), return);
- const QString topLevel = state.topLevel();
+ const FilePath topLevel = state.topLevel();
startRebaseFromCommit(topLevel, QString());
}
-void GitPluginPrivate::startRebaseFromCommit(const QString &workingDirectory, QString commit)
+void GitPluginPrivate::startRebaseFromCommit(const FilePath &workingDirectory, QString commit)
{
if (!DocumentManager::saveAllModifiedDocuments())
return;
@@ -1208,7 +1208,8 @@ void GitPluginPrivate::startChangeRelatedAction(const Id &id)
{
const VcsBasePluginState state = currentState();
- ChangeSelectionDialog dialog(state.hasTopLevel() ? state.topLevel() : PathChooser::homePath(),
+ ChangeSelectionDialog dialog(state.hasTopLevel()
+ ? state.topLevel() : FilePath::fromString(PathChooser::homePath()),
id, ICore::dialogParent());
int result = dialog.exec();
@@ -1216,7 +1217,7 @@ void GitPluginPrivate::startChangeRelatedAction(const Id &id)
if (result == QDialog::Rejected)
return;
- const QString workingDirectory = dialog.workingDirectory();
+ const FilePath workingDirectory = dialog.workingDirectory();
const QString change = dialog.change();
if (workingDirectory.isEmpty() || change.isEmpty())
@@ -1225,10 +1226,10 @@ void GitPluginPrivate::startChangeRelatedAction(const Id &id)
if (dialog.command() == Show) {
const int colon = change.indexOf(':');
if (colon > 0) {
- const QString path = QDir(workingDirectory).absoluteFilePath(change.mid(colon + 1));
+ const QString path = QDir(workingDirectory.toString()).absoluteFilePath(change.mid(colon + 1));
m_gitClient.openShowEditor(workingDirectory, change.left(colon), path);
} else {
- m_gitClient.show(workingDirectory, change);
+ m_gitClient.show(workingDirectory.toString(), change);
}
return;
}
@@ -1296,14 +1297,14 @@ void GitPluginPrivate::gitkForCurrentFolder()
* one line command mentioned above.
*
*/
- QDir dir(state.currentFileDirectory());
+ QDir dir(state.currentFileDirectory().toString());
if (QFileInfo(dir,".git").exists() || dir.cd(".git")) {
m_gitClient.launchGitK(state.currentFileDirectory());
} else {
QString folderName = dir.absolutePath();
dir.cdUp();
folderName = folderName.remove(0, dir.absolutePath().length() + 1);
- m_gitClient.launchGitK(dir.absolutePath(), folderName);
+ m_gitClient.launchGitK(FilePath::fromString(dir.absolutePath()), folderName);
}
}
@@ -1399,7 +1400,7 @@ IEditor *GitPluginPrivate::openSubmitEditor(const QString &fileName, const Commi
}
IDocument *document = submitEditor->document();
document->setPreferredDisplayName(title);
- VcsBase::setSource(document, m_submitRepository);
+ VcsBase::setSource(document, m_submitRepository.toString());
return editor;
}
@@ -1488,7 +1489,7 @@ void GitPluginPrivate::pull()
return;
const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasTopLevel(), return);
- QString topLevel = state.topLevel();
+ FilePath topLevel = state.topLevel();
bool rebase = m_settings.pullRebase.value();
if (!rebase) {
@@ -1561,7 +1562,7 @@ void GitPluginPrivate::cleanRepository()
cleanRepository(state.topLevel());
}
-void GitPluginPrivate::cleanRepository(const QString &directory)
+void GitPluginPrivate::cleanRepository(const FilePath &directory)
{
// Find files to be deleted
QString errorMessage;
@@ -1583,7 +1584,7 @@ void GitPluginPrivate::cleanRepository(const QString &directory)
// Show in dialog
CleanDialog dialog(ICore::dialogParent());
- dialog.setFileList(directory, files, ignoredFiles);
+ dialog.setFileList(directory.toString(), files, ignoredFiles);
dialog.exec();
}
@@ -1618,7 +1619,7 @@ void GitPluginPrivate::promptApplyPatch()
applyPatch(state.topLevel(), QString());
}
-void GitPluginPrivate::applyPatch(const QString &workingDirectory, QString file)
+void GitPluginPrivate::applyPatch(const FilePath &workingDirectory, QString file)
{
// Ensure user has been notified about pending changes
if (!m_gitClient.beginStashScope(workingDirectory, "Apply-Patch", AllowUnstashed))
@@ -1636,7 +1637,8 @@ void GitPluginPrivate::applyPatch(const QString &workingDirectory, QString file)
QString errorMessage;
if (m_gitClient.synchronousApplyPatch(workingDirectory, file, &errorMessage)) {
if (errorMessage.isEmpty())
- VcsOutputWindow::appendMessage(tr("Patch %1 successfully applied to %2").arg(file, workingDirectory));
+ VcsOutputWindow::appendMessage(tr("Patch %1 successfully applied to %2")
+ .arg(file, workingDirectory.toUserOutput()));
else
VcsOutputWindow::appendError(errorMessage);
} else {
@@ -1653,7 +1655,7 @@ void GitPluginPrivate::stash(bool unstagedOnly)
const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasTopLevel(), return);
- const QString topLevel = state.topLevel();
+ const FilePath topLevel = state.topLevel();
m_gitClient.executeSynchronousStash(topLevel, QString(), unstagedOnly);
if (m_stashDialog)
m_stashDialog->refresh(topLevel, true);
@@ -1679,7 +1681,7 @@ void GitPluginPrivate::stashPop()
{
if (!DocumentManager::saveAllModifiedDocuments())
return;
- const QString repository = currentState().topLevel();
+ const FilePath repository = currentState().topLevel();
m_gitClient.stashPop(repository);
if (m_stashDialog)
m_stashDialog->refresh(repository, true);
@@ -1687,7 +1689,7 @@ void GitPluginPrivate::stashPop()
// Create a non-modal dialog with refresh function or raise if it exists
template <class NonModalDialog>
- inline void showNonModalDialog(const QString &topLevel,
+ inline void showNonModalDialog(const FilePath &topLevel,
QPointer<NonModalDialog> &dialog)
{
if (dialog) {
@@ -1798,7 +1800,7 @@ void GitPluginPrivate::delayedPushToGerrit()
m_gerritPlugin->push(m_submitRepository);
}
-void GitPluginPrivate::updateBranches(const QString &repository)
+void GitPluginPrivate::updateBranches(const FilePath &repository)
{
if (m_branchViewFactory.view())
m_branchViewFactory.view()->refreshIfSame(repository);
@@ -1880,21 +1882,19 @@ bool GitPluginPrivate::vcsOpen(const FilePath & /*filePath*/)
bool GitPluginPrivate::vcsAdd(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return m_gitClient.synchronousAdd(fi.absolutePath(), {fi.fileName()}, {"--intent-to-add"});
+ return m_gitClient.synchronousAdd(filePath.parentDir(), {filePath.fileName()}, {"--intent-to-add"});
}
bool GitPluginPrivate::vcsDelete(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return m_gitClient.synchronousDelete(fi.absolutePath(), true, {fi.fileName()});
+ return m_gitClient.synchronousDelete(filePath.parentDir().absolutePath(), true, {filePath.fileName()});
}
bool GitPluginPrivate::vcsMove(const FilePath &from, const FilePath &to)
{
const QFileInfo fromInfo = from.toFileInfo();
const QFileInfo toInfo = to.toFileInfo();
- return m_gitClient.synchronousMove(fromInfo.absolutePath(), fromInfo.absoluteFilePath(), toInfo.absoluteFilePath());
+ return m_gitClient.synchronousMove(from.parentDir().absolutePath(), fromInfo.absoluteFilePath(), toInfo.absoluteFilePath());
}
bool GitPluginPrivate::vcsCreateRepository(const FilePath &directory)
@@ -1905,7 +1905,7 @@ bool GitPluginPrivate::vcsCreateRepository(const FilePath &directory)
QString GitPluginPrivate::vcsTopic(const FilePath &directory)
{
QString topic = Core::IVersionControl::vcsTopic(directory);
- const QString commandInProgress = m_gitClient.commandInProgressDescription(directory.toString());
+ const QString commandInProgress = m_gitClient.commandInProgressDescription(directory);
if (!commandInProgress.isEmpty())
topic += " (" + commandInProgress + ')';
return topic;
@@ -1919,7 +1919,7 @@ Core::ShellCommand *GitPluginPrivate::createInitialCheckoutCommand(const QString
QStringList args = {"clone", "--progress"};
args << extraArgs << url << localName;
- auto command = new VcsBase::VcsCommand(baseDirectory.toString(), m_gitClient.processEnvironment());
+ auto command = new VcsBase::VcsCommand(baseDirectory, m_gitClient.processEnvironment());
command->addFlags(VcsBase::VcsCommand::SuppressStdErr);
command->addJob({m_gitClient.vcsBinary(), args}, -1);
return command;
@@ -1949,7 +1949,7 @@ bool GitPluginPrivate::managesDirectory(const FilePath &directory, FilePath *top
bool GitPluginPrivate::managesFile(const FilePath &workingDirectory, const QString &fileName) const
{
- return m_gitClient.managesFile(workingDirectory.toString(), fileName);
+ return m_gitClient.managesFile(workingDirectory, fileName);
}
FilePaths GitPluginPrivate::unmanagedFiles(const FilePaths &filePaths) const
@@ -1959,8 +1959,7 @@ FilePaths GitPluginPrivate::unmanagedFiles(const FilePaths &filePaths) const
void GitPluginPrivate::vcsAnnotate(const FilePath &filePath, int line)
{
- const QFileInfo fi = filePath.toFileInfo();
- m_gitClient.annotate(fi.absolutePath(), fi.fileName(), QString(), line);
+ m_gitClient.annotate(filePath.absolutePath(), filePath.fileName(), QString(), line);
}
void GitPlugin::emitFilesChanged(const QStringList &l)
@@ -1970,10 +1969,10 @@ void GitPlugin::emitFilesChanged(const QStringList &l)
void GitPlugin::emitRepositoryChanged(const QString &r)
{
- emit dd->repositoryChanged(r);
+ emit dd->repositoryChanged(FilePath::fromString(r));
}
-void GitPlugin::startRebaseFromCommit(const QString &workingDirectory, const QString &commit)
+void GitPlugin::startRebaseFromCommit(const FilePath &workingDirectory, const QString &commit)
{
dd->startRebaseFromCommit(workingDirectory, commit);
}
@@ -1998,12 +1997,12 @@ void GitPlugin::updateCurrentBranch()
dd->updateCurrentBranch();
}
-void GitPlugin::updateBranches(const QString &repository)
+void GitPlugin::updateBranches(const FilePath &repository)
{
dd->updateBranches(repository);
}
-void GitPlugin::gerritPush(const QString &topLevel)
+void GitPlugin::gerritPush(const FilePath &topLevel)
{
dd->m_gerritPlugin->push(topLevel);
}
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 8275006787d..577e636dc9a 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -61,19 +61,19 @@ public:
static const GitSettings &settings();
static const VcsBase::VcsBasePluginState &currentState();
- static QString msgRepositoryLabel(const QString &repository);
+ static QString msgRepositoryLabel(const Utils::FilePath &repository);
static QString invalidBranchAndRemoteNamePattern();
static bool isCommitEditorOpen();
static void emitFilesChanged(const QStringList &);
static void emitRepositoryChanged(const QString &);
- static void startRebaseFromCommit(const QString &workingDirectory, const QString &commit);
+ static void startRebaseFromCommit(const Utils::FilePath &workingDirectory, const QString &commit);
static void manageRemotes();
static void initRepository();
static void startCommit();
static void updateCurrentBranch();
- static void updateBranches(const QString &repository);
- static void gerritPush(const QString &topLevel);
+ static void updateBranches(const Utils::FilePath &repository);
+ static void gerritPush(const Utils::FilePath &topLevel);
#ifdef WITH_TESTS
private slots:
diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp
index ba5c0eead88..cd418bdecd5 100644
--- a/src/plugins/git/gitsubmiteditor.cpp
+++ b/src/plugins/git/gitsubmiteditor.cpp
@@ -43,6 +43,7 @@
static const char TASK_UPDATE_COMMIT[] = "Git.UpdateCommit";
+using namespace Utils;
using namespace VcsBase;
namespace Git {
@@ -83,7 +84,7 @@ private:
}
};
-CommitDataFetchResult CommitDataFetchResult::fetch(CommitType commitType, const QString &workingDirectory)
+CommitDataFetchResult CommitDataFetchResult::fetch(CommitType commitType, const FilePath &workingDirectory)
{
CommitDataFetchResult result;
result.commitData.commitType = commitType;
@@ -135,7 +136,7 @@ void GitSubmitEditor::setCommitData(const CommitData &d)
setEmptyFileListEnabled(m_commitType == AmendCommit); // Allow for just correcting the message
m_model = new GitSubmitFileModel(this);
- m_model->setRepositoryRoot(d.panelInfo.repository);
+ m_model->setRepositoryRoot(d.panelInfo.repository.toString());
m_model->setFileStatusQualifier([](const QString &, const QVariant &extraData)
-> SubmitFileModel::FileStatusHint
{
@@ -196,7 +197,7 @@ void GitSubmitEditor::slotDiffSelected(const QList<int> &rows)
}
stagedFiles.push_back(fileName);
} else if (state == UntrackedFile) {
- Core::EditorManager::openEditor(m_workingDirectory + '/' + fileName);
+ Core::EditorManager::openEditor(m_workingDirectory.pathAppended(fileName));
} else {
unstagedFiles.push_back(fileName);
}
@@ -210,7 +211,7 @@ void GitSubmitEditor::slotDiffSelected(const QList<int> &rows)
void GitSubmitEditor::showCommit(const QString &commit)
{
if (!m_workingDirectory.isEmpty())
- GitClient::instance()->show(m_workingDirectory, commit);
+ GitClient::instance()->show(m_workingDirectory.toString(), commit);
}
void GitSubmitEditor::updateFileModel()
diff --git a/src/plugins/git/gitsubmiteditor.h b/src/plugins/git/gitsubmiteditor.h
index 99c6ea81e97..f7d790dceb4 100644
--- a/src/plugins/git/gitsubmiteditor.h
+++ b/src/plugins/git/gitsubmiteditor.h
@@ -27,6 +27,8 @@
#include "commitdata.h"
+#include <utils/filepath.h>
+
#include <vcsbase/vcsbasesubmiteditor.h>
#include <QFutureWatcher>
@@ -43,7 +45,7 @@ class GitSubmitEditorPanelData;
class CommitDataFetchResult
{
public:
- static CommitDataFetchResult fetch(CommitType commitType, const QString &workingDirectory);
+ static CommitDataFetchResult fetch(CommitType commitType, const Utils::FilePath &workingDirectory);
QString errorMessage;
CommitData commitData;
@@ -80,7 +82,7 @@ private:
QTextCodec *m_commitEncoding = nullptr;
CommitType m_commitType = SimpleCommit;
QString m_amendSHA1;
- QString m_workingDirectory;
+ Utils::FilePath m_workingDirectory;
bool m_firstUpdate = true;
QFutureWatcher<CommitDataFetchResult> m_fetchWatcher;
};
diff --git a/src/plugins/git/gitsubmiteditorwidget.cpp b/src/plugins/git/gitsubmiteditorwidget.cpp
index 68507b68910..02328d28980 100644
--- a/src/plugins/git/gitsubmiteditorwidget.cpp
+++ b/src/plugins/git/gitsubmiteditorwidget.cpp
@@ -29,7 +29,9 @@
#include "logchangedialog.h"
#include <coreplugin/coreconstants.h>
+
#include <utils/completingtextedit.h>
+#include <utils/filepath.h>
#include <utils/theme/theme.h>
#include <utils/utilsicons.h>
@@ -41,6 +43,8 @@
#include <QVBoxLayout>
#include <QMenu>
+using namespace Utils;
+
namespace Git {
namespace Internal {
@@ -65,7 +69,7 @@ GitSubmitEditorWidget::GitSubmitEditorWidget() :
void GitSubmitEditorWidget::setPanelInfo(const GitSubmitEditorPanelInfo &info)
{
- m_gitSubmitPanelUi.repositoryLabel->setText(QDir::toNativeSeparators(info.repository));
+ m_gitSubmitPanelUi.repositoryLabel->setText(info.repository.toUserOutput());
if (info.branch.contains("(no branch)")) {
const QString errorColor =
Utils::creatorTheme()->color(Utils::Theme::TextColorError).name();
@@ -87,7 +91,7 @@ void GitSubmitEditorWidget::setHasUnmerged(bool e)
}
void GitSubmitEditorWidget::initialize(CommitType commitType,
- const QString &repository,
+ const FilePath &repository,
const GitSubmitEditorPanelData &data,
const GitSubmitEditorPanelInfo &info,
bool enablePush)
@@ -123,7 +127,7 @@ void GitSubmitEditorWidget::initialize(CommitType commitType,
}
}
-void GitSubmitEditorWidget::refreshLog(const QString &repository)
+void GitSubmitEditorWidget::refreshLog(const FilePath &repository)
{
if (m_logChangeWidget)
m_logChangeWidget->init(repository);
diff --git a/src/plugins/git/gitsubmiteditorwidget.h b/src/plugins/git/gitsubmiteditorwidget.h
index 8d925a21a87..137895450be 100644
--- a/src/plugins/git/gitsubmiteditorwidget.h
+++ b/src/plugins/git/gitsubmiteditorwidget.h
@@ -31,6 +31,7 @@
#include <texteditor/syntaxhighlighter.h>
#include <vcsbase/submiteditorwidget.h>
+#include <utils/filepath.h>
#include <QSyntaxHighlighter>
@@ -64,11 +65,11 @@ public:
QString amendSHA1() const;
void setHasUnmerged(bool e);
void initialize(CommitType commitType,
- const QString &repository,
+ const Utils::FilePath &repository,
const GitSubmitEditorPanelData &data,
const GitSubmitEditorPanelInfo &info,
bool enablePush);
- void refreshLog(const QString &repository);
+ void refreshLog(const Utils::FilePath &repository);
protected:
bool canSubmit(QString *whyNot) const override;
diff --git a/src/plugins/git/logchangedialog.cpp b/src/plugins/git/logchangedialog.cpp
index bb923ced9df..9b4bc9312be 100644
--- a/src/plugins/git/logchangedialog.cpp
+++ b/src/plugins/git/logchangedialog.cpp
@@ -42,6 +42,7 @@
#include <QTreeView>
#include <QVBoxLayout>
+using namespace Utils;
using namespace VcsBase;
namespace Git {
@@ -75,9 +76,9 @@ public:
return QStandardItemModel::data(index, role);
}
- void setWorkingDirectory(const QString &workingDir) { m_workingDirectory = workingDir; }
+ void setWorkingDirectory(const FilePath &workingDir) { m_workingDirectory = workingDir; }
private:
- QString m_workingDirectory;
+ FilePath m_workingDirectory;
mutable QHash<QString, QString> m_descriptions;
};
@@ -99,7 +100,7 @@ LogChangeWidget::LogChangeWidget(QWidget *parent)
setFocus();
}
-bool LogChangeWidget::init(const QString &repository, const QString &commit, LogFlags flags)
+bool LogChangeWidget::init(const FilePath &repository, const QString &commit, LogFlags flags)
{
m_model->setWorkingDirectory(repository);
if (!populateLog(repository, commit, flags))
@@ -171,7 +172,7 @@ void LogChangeWidget::selectionChanged(const QItemSelection &selected,
}
}
-bool LogChangeWidget::populateLog(const QString &repository, const QString &commit, LogFlags flags)
+bool LogChangeWidget::populateLog(const FilePath &repository, const QString &commit, LogFlags flags)
{
const QString currentCommit = this->commit();
int selected = currentCommit.isEmpty() ? 0 : -1;
@@ -232,6 +233,7 @@ const QStandardItem *LogChangeWidget::currentItem(int column) const
LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) :
QDialog(parent)
, m_widget(new LogChangeWidget)
+
, m_dialogButtonBox(new QDialogButtonBox(this))
{
auto layout = new QVBoxLayout(this);
@@ -262,7 +264,7 @@ LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) :
resize(600, 400);
}
-bool LogChangeDialog::runDialog(const QString &repository,
+bool LogChangeDialog::runDialog(const FilePath &repository,
const QString &commit,
LogChangeWidget::LogFlags flags)
{
diff --git a/src/plugins/git/logchangedialog.h b/src/plugins/git/logchangedialog.h
index ebc54371057..263e9d74770 100644
--- a/src/plugins/git/logchangedialog.h
+++ b/src/plugins/git/logchangedialog.h
@@ -25,6 +25,7 @@
#pragma once
+#include <utils/filepath.h>
#include <utils/icon.h>
#include <utils/itemviews.h>
@@ -62,7 +63,7 @@ public:
Q_DECLARE_FLAGS(LogFlags, LogFlag)
explicit LogChangeWidget(QWidget *parent = nullptr);
- bool init(const QString &repository, const QString &commit = QString(), LogFlags flags = None);
+ bool init(const Utils::FilePath &repository, const QString &commit = {}, LogFlags flags = None);
QString commit() const;
int commitIndex() const;
QString earliestCommit() const;
@@ -76,7 +77,7 @@ private:
void emitCommitActivated(const QModelIndex &index);
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override;
- bool populateLog(const QString &repository, const QString &commit, LogFlags flags);
+ bool populateLog(const Utils::FilePath &repository, const QString &commit, LogFlags flags);
const QStandardItem *currentItem(int column = 0) const;
LogChangeModel *m_model;
@@ -91,7 +92,7 @@ class LogChangeDialog : public QDialog
public:
LogChangeDialog(bool isReset, QWidget *parent);
- bool runDialog(const QString &repository, const QString &commit = QString(),
+ bool runDialog(const Utils::FilePath &repository, const QString &commit = QString(),
LogChangeWidget::LogFlags flags = LogChangeWidget::None);
QString commit() const;
diff --git a/src/plugins/git/mergetool.cpp b/src/plugins/git/mergetool.cpp
index adc5d1ce7b4..8441231b4a1 100644
--- a/src/plugins/git/mergetool.cpp
+++ b/src/plugins/git/mergetool.cpp
@@ -36,6 +36,7 @@
#include <QProcess>
#include <QPushButton>
+using namespace Utils;
using namespace VcsBase;
namespace Git {
@@ -263,7 +264,7 @@ void MergeTool::done()
VcsOutputWindow::appendError(tr("Merge tool process terminated with exit code %1")
.arg(exitCode));
}
- GitClient::instance()->continueCommandIfNeeded(workingDirectory, exitCode == 0);
+ GitClient::instance()->continueCommandIfNeeded(FilePath::fromString(workingDirectory), exitCode == 0);
GitPlugin::emitRepositoryChanged(workingDirectory);
deleteLater();
}
diff --git a/src/plugins/git/remotedialog.cpp b/src/plugins/git/remotedialog.cpp
index 6d211e0c7ca..6463433f377 100644
--- a/src/plugins/git/remotedialog.cpp
+++ b/src/plugins/git/remotedialog.cpp
@@ -38,6 +38,8 @@
#include <QMessageBox>
#include <QRegularExpression>
+using namespace Utils;
+
namespace Git {
namespace Internal {
@@ -152,7 +154,7 @@ RemoteDialog::~RemoteDialog()
delete m_ui;
}
-void RemoteDialog::refresh(const QString &repository, bool force)
+void RemoteDialog::refresh(const FilePath &repository, bool force)
{
if (m_remoteModel->workingDirectory() == repository && !force)
return;
diff --git a/src/plugins/git/remotedialog.h b/src/plugins/git/remotedialog.h
index 1026c2e721f..d8ecab63121 100644
--- a/src/plugins/git/remotedialog.h
+++ b/src/plugins/git/remotedialog.h
@@ -27,6 +27,8 @@
#include <QDialog>
+namespace Utils { class FilePath; }
+
namespace Git {
namespace Internal {
@@ -42,7 +44,7 @@ public:
explicit RemoteDialog(QWidget *parent = nullptr);
~RemoteDialog() override;
- void refresh(const QString &repository, bool force);
+ void refresh(const Utils::FilePath &repository, bool force);
private:
void refreshRemotes();
diff --git a/src/plugins/git/remotemodel.cpp b/src/plugins/git/remotemodel.cpp
index da2e2fe2d71..71d49397ac3 100644
--- a/src/plugins/git/remotemodel.cpp
+++ b/src/plugins/git/remotemodel.cpp
@@ -28,6 +28,8 @@
#include <utils/algorithm.h>
+using namespace Utils;
+
namespace Git {
namespace Internal {
@@ -97,7 +99,7 @@ bool RemoteModel::updateUrl(const QString &name, const QString &newUrl)
return success;
}
-QString RemoteModel::workingDirectory() const
+FilePath RemoteModel::workingDirectory() const
{
return m_workingDirectory;
}
@@ -179,7 +181,7 @@ void RemoteModel::clear()
endResetModel();
}
-bool RemoteModel::refresh(const QString &workingDirectory, QString *errorMessage)
+bool RemoteModel::refresh(const FilePath &workingDirectory, QString *errorMessage)
{
m_workingDirectory = workingDirectory;
diff --git a/src/plugins/git/remotemodel.h b/src/plugins/git/remotemodel.h
index a76c5510042..1ef6b7ffc64 100644
--- a/src/plugins/git/remotemodel.h
+++ b/src/plugins/git/remotemodel.h
@@ -25,6 +25,8 @@
#pragma once
+#include <utils/filepath.h>
+
#include <QAbstractTableModel>
#include <QList>
#include <QVariant>
@@ -38,7 +40,7 @@ public:
explicit RemoteModel(QObject *parent = nullptr);
void clear();
- bool refresh(const QString &workingDirectory, QString *errorMessage);
+ bool refresh(const Utils::FilePath &workingDirectory, QString *errorMessage);
QStringList allRemoteNames() const;
QString remoteName(int row) const;
@@ -60,7 +62,7 @@ public:
int remoteCount() const;
- QString workingDirectory() const;
+ Utils::FilePath workingDirectory() const;
int findRemoteByName(const QString &name) const;
protected:
@@ -74,7 +76,7 @@ protected:
private:
const Qt::ItemFlags m_flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable;
- QString m_workingDirectory;
+ Utils::FilePath m_workingDirectory;
RemoteList m_remotes;
};
diff --git a/src/plugins/git/stashdialog.cpp b/src/plugins/git/stashdialog.cpp
index fcef1a945b0..2763a03618e 100644
--- a/src/plugins/git/stashdialog.cpp
+++ b/src/plugins/git/stashdialog.cpp
@@ -41,6 +41,8 @@
#include <QMessageBox>
#include <QPushButton>
+using namespace Utils;
+
enum { NameColumn, BranchColumn, MessageColumn, ColumnCount };
namespace Git {
@@ -150,7 +152,7 @@ StashDialog::~StashDialog()
delete ui;
}
-void StashDialog::refresh(const QString &repository, bool force)
+void StashDialog::refresh(const FilePath &repository, bool force)
{
if (m_repository == repository && !force)
return;
@@ -205,7 +207,7 @@ void StashDialog::showCurrent()
{
const int index = currentRow();
QTC_ASSERT(index >= 0, return);
- GitClient::instance()->show(m_repository, QString(m_model->at(index).name));
+ GitClient::instance()->show(m_repository.toString(), QString(m_model->at(index).name));
}
// Suggest Branch name to restore 'stash@{0}' -> 'stash0-date'
diff --git a/src/plugins/git/stashdialog.h b/src/plugins/git/stashdialog.h
index 5aa8c52213f..96d5a0a8a86 100644
--- a/src/plugins/git/stashdialog.h
+++ b/src/plugins/git/stashdialog.h
@@ -25,6 +25,8 @@
#pragma once
+#include <utils/filepath.h>
+
#include <QDialog>
QT_BEGIN_NAMESPACE
@@ -51,7 +53,7 @@ public:
explicit StashDialog(QWidget *parent = nullptr);
~StashDialog() override;
- void refresh(const QString &repository, bool force);
+ void refresh(const Utils::FilePath &repository, bool force);
private:
// Prompt dialog for modified repositories. Ask to undo or stash away.
@@ -85,7 +87,7 @@ private:
QPushButton *m_restoreCurrentButton;
QPushButton *m_restoreCurrentInBranchButton;
QPushButton *m_refreshButton;
- QString m_repository;
+ Utils::FilePath m_repository;
};
} // namespace Internal
diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp
index cefe23292c3..8fa54da42f6 100644
--- a/src/plugins/mercurial/mercurialclient.cpp
+++ b/src/plugins/mercurial/mercurialclient.cpp
@@ -91,7 +91,7 @@ MercurialClient::MercurialClient(MercurialSettings *settings) : VcsBaseClient(se
{
}
-bool MercurialClient::manifestSync(const QString &repository, const QString &relativeFilename)
+bool MercurialClient::manifestSync(const FilePath &repository, const QString &relativeFilename)
{
// This only works when called from the repo and outputs paths relative to it.
const QStringList args(QLatin1String("manifest"));
@@ -99,7 +99,7 @@ bool MercurialClient::manifestSync(const QString &repository, const QString &rel
QtcProcess proc;
vcsFullySynchronousExec(proc, repository, args);
- const QDir repositoryDir(repository);
+ const QDir repositoryDir(repository.toString());
const QFileInfo needle = QFileInfo(repositoryDir, relativeFilename);
const QStringList files = proc.stdOut().split(QLatin1Char('\n'));
@@ -112,14 +112,12 @@ bool MercurialClient::manifestSync(const QString &repository, const QString &rel
}
//bool MercurialClient::clone(const QString &directory, const QString &url)
-bool MercurialClient::synchronousClone(const FilePath &workingDir,
+bool MercurialClient::synchronousClone(const FilePath &workingDirectory,
const QString &srcLocation,
const QString &dstLocation,
const QStringList &extraOptions)
{
- Q_UNUSED(workingDir)
Q_UNUSED(extraOptions)
- QDir workingDirectory(srcLocation);
const unsigned flags = VcsCommand::SshPasswordPrompt |
VcsCommand::ShowStdOut |
VcsCommand::ShowSuccessMessage;
@@ -128,7 +126,7 @@ bool MercurialClient::synchronousClone(const FilePath &workingDir,
// Let's make first init
QStringList arguments(QLatin1String("init"));
QtcProcess proc;
- vcsFullySynchronousExec(proc, workingDirectory.path(), arguments);
+ vcsFullySynchronousExec(proc, workingDirectory, arguments);
if (proc.result() != QtcProcess::FinishedWithSuccess)
return false;
@@ -136,12 +134,12 @@ bool MercurialClient::synchronousClone(const FilePath &workingDir,
arguments.clear();
arguments << QLatin1String("pull") << dstLocation;
QtcProcess proc1;
- vcsSynchronousExec(proc1, workingDirectory.path(), arguments, flags);
+ vcsSynchronousExec(proc1, workingDirectory, arguments, flags);
if (proc1.result() != QtcProcess::FinishedWithSuccess)
return false;
// By now, there is no hgrc file -> create it
- FileSaver saver(Utils::FilePath::fromString(workingDirectory.path() + "/.hg/hgrc"));
+ FileSaver saver(workingDirectory.pathAppended(".hg/hgrc"));
const QString hgrc = QLatin1String("[paths]\ndefault = ") + dstLocation + QLatin1Char('\n');
saver.write(hgrc.toUtf8());
if (!saver.finalize()) {
@@ -153,19 +151,18 @@ bool MercurialClient::synchronousClone(const FilePath &workingDir,
arguments.clear();
arguments << QLatin1String("update");
QtcProcess proc2;
- vcsSynchronousExec(proc2, workingDirectory.path(), arguments, flags);
+ vcsSynchronousExec(proc2, workingDirectory, arguments, flags);
return proc2.result() == QtcProcess::FinishedWithSuccess;
} else {
QStringList arguments(QLatin1String("clone"));
- arguments << dstLocation << workingDirectory.dirName();
- workingDirectory.cdUp();
+ arguments << dstLocation << workingDirectory.parentDir().toString();
QtcProcess proc;
- vcsSynchronousExec(proc, workingDirectory.path(), arguments, flags);
+ vcsSynchronousExec(proc, workingDirectory.parentDir(), arguments, flags);
return proc.result() == QtcProcess::FinishedWithSuccess;
}
}
-bool MercurialClient::synchronousPull(const QString &workingDir, const QString &srcLocation, const QStringList &extraOptions)
+bool MercurialClient::synchronousPull(const FilePath &workingDir, const QString &srcLocation, const QStringList &extraOptions)
{
QStringList args;
args << vcsCommandString(PullCommand) << extraOptions << srcLocation;
@@ -202,12 +199,12 @@ QString MercurialClient::branchQuerySync(const QString &repositoryRoot)
return QLatin1String("Unknown Branch");
}
-static inline QString msgParentRevisionFailed(const QString &workingDirectory,
- const QString &revision,
- const QString &why)
+static QString msgParentRevisionFailed(const FilePath &workingDirectory,
+ const QString &revision,
+ const QString &why)
{
return MercurialClient::tr("Unable to find parent revisions of %1 in %2: %3").
- arg(revision, QDir::toNativeSeparators(workingDirectory), why);
+ arg(revision, workingDirectory.toUserOutput(), why);
}
static inline QString msgParseParentsOutputFailed(const QString &output)
@@ -215,9 +212,9 @@ static inline QString msgParseParentsOutputFailed(const QString &output)
return MercurialClient::tr("Cannot parse output: %1").arg(output);
}
-QStringList MercurialClient::parentRevisionsSync(const QString &workingDirectory,
- const QString &file /* = QString() */,
- const QString &revision)
+QStringList MercurialClient::parentRevisionsSync(const FilePath &workingDirectory,
+ const QString &file /* = QString() */,
+ const QString &revision)
{
QStringList parents;
QStringList args;
@@ -258,9 +255,9 @@ user: ...
}
// Describe a change using an optional format
-QString MercurialClient::shortDescriptionSync(const QString &workingDirectory,
- const QString &revision,
- const QString &format)
+QString MercurialClient::shortDescriptionSync(const FilePath &workingDirectory,
+ const QString &revision,
+ const QString &format)
{
QStringList args;
args << QLatin1String("log") << QLatin1String("-r") <<revision;
@@ -277,13 +274,13 @@ QString MercurialClient::shortDescriptionSync(const QString &workingDirectory,
// Default format: "SHA1 (author summmary)"
static const char defaultFormatC[] = "{node} ({author|person} {desc|firstline})";
-QString MercurialClient::shortDescriptionSync(const QString &workingDirectory,
- const QString &revision)
+QString MercurialClient::shortDescriptionSync(const FilePath &workingDirectory,
+ const QString &revision)
{
return shortDescriptionSync(workingDirectory, revision, QLatin1String(defaultFormatC));
}
-bool MercurialClient::managesFile(const QString &workingDirectory, const QString &fileName) const
+bool MercurialClient::managesFile(const FilePath &workingDirectory, const QString &fileName) const
{
QStringList args;
args << QLatin1String("status") << QLatin1String("--unknown") << fileName;
@@ -292,44 +289,43 @@ bool MercurialClient::managesFile(const QString &workingDirectory, const QString
return proc.stdOut().isEmpty();
}
-void MercurialClient::incoming(const QString &repositoryRoot, const QString &repository)
+void MercurialClient::incoming(const FilePath &repositoryRoot, const QString &repository)
{
QStringList args;
args << QLatin1String("incoming") << QLatin1String("-g") << QLatin1String("-p");
if (!repository.isEmpty())
args.append(repository);
- QString id = repositoryRoot;
+ QString id = repositoryRoot.toString();
if (!repository.isEmpty())
id += QLatin1Char('/') + repository;
const QString title = tr("Hg incoming %1").arg(id);
- VcsBaseEditorWidget *editor = createVcsEditor(Constants::DIFFLOG_ID, title, repositoryRoot,
- VcsBaseEditor::getCodec(repositoryRoot),
+ VcsBaseEditorWidget *editor = createVcsEditor(Constants::DIFFLOG_ID, title, repositoryRoot.toString(),
+ VcsBaseEditor::getCodec(repositoryRoot.toString()),
"incoming", id);
- VcsCommand *cmd = createCommand(repository, editor);
+ VcsCommand *cmd = createCommand(FilePath::fromString(repository), editor);
enqueueJob(cmd, args);
}
-void MercurialClient::outgoing(const QString &repositoryRoot)
+void MercurialClient::outgoing(const FilePath &repositoryRoot)
{
QStringList args;
args << QLatin1String("outgoing") << QLatin1String("-g") << QLatin1String("-p");
- const QString title = tr("Hg outgoing %1").
- arg(QDir::toNativeSeparators(repositoryRoot));
+ const QString title = tr("Hg outgoing %1").arg(repositoryRoot.toUserOutput());
- VcsBaseEditorWidget *editor = createVcsEditor(Constants::DIFFLOG_ID, title, repositoryRoot,
- VcsBaseEditor::getCodec(repositoryRoot),
- "outgoing", repositoryRoot);
+ VcsBaseEditorWidget *editor = createVcsEditor(Constants::DIFFLOG_ID, title, repositoryRoot.toString(),
+ VcsBaseEditor::getCodec(repositoryRoot.toString()),
+ "outgoing", repositoryRoot.toString());
VcsCommand *cmd = createCommand(repositoryRoot, editor);
enqueueJob(cmd, args);
}
VcsBaseEditorWidget *MercurialClient::annotate(
- const QString &workingDir, const QString &file, const QString &revision,
+ const FilePath &workingDir, const QString &file, const QString &revision,
int lineNumber, const QStringList &extraOptions)
{
QStringList args(extraOptions);
@@ -337,7 +333,7 @@ VcsBaseEditorWidget *MercurialClient::annotate(
return VcsBaseClient::annotate(workingDir, file, revision, lineNumber, args);
}
-void MercurialClient::commit(const QString &repositoryRoot, const QStringList &files,
+void MercurialClient::commit(const FilePath &repositoryRoot, const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions)
{
@@ -346,7 +342,7 @@ void MercurialClient::commit(const QString &repositoryRoot, const QStringList &f
VcsBaseClient::commit(repositoryRoot, files, commitMessageFile, args);
}
-void MercurialClient::diff(const QString &workingDir, const QStringList &files,
+void MercurialClient::diff(const FilePath &workingDir, const QStringList &files,
const QStringList &extraOptions)
{
Q_UNUSED(extraOptions)
@@ -358,41 +354,41 @@ void MercurialClient::diff(const QString &workingDir, const QStringList &files,
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
const QString documentId = QString(Constants::MERCURIAL_PLUGIN)
+ ".DiffRepo." + sourceFile;
- requestReload(documentId, sourceFile, title, workingDir, {"diff"});
+ requestReload(documentId, sourceFile, title, workingDir.toString(), {"diff"});
} else if (files.size() == 1) {
fileName = files.at(0);
const QString title = tr("Mercurial Diff \"%1\"").arg(fileName);
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
const QString documentId = QString(Constants::MERCURIAL_PLUGIN)
+ ".DiffFile." + sourceFile;
- requestReload(documentId, sourceFile, title, workingDir, {"diff", fileName});
+ requestReload(documentId, sourceFile, title, workingDir.toString(), {"diff", fileName});
} else {
- const QString title = tr("Mercurial Diff \"%1\"").arg(workingDir);
+ const QString title = tr("Mercurial Diff \"%1\"").arg(workingDir.toString());
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
const QString documentId = QString(Constants::MERCURIAL_PLUGIN)
- + ".DiffFile." + workingDir;
- requestReload(documentId, sourceFile, title, workingDir, QStringList{"diff"} + files);
+ + ".DiffFile." + workingDir.toString();
+ requestReload(documentId, sourceFile, title, workingDir.toString(), QStringList{"diff"} + files);
}
}
-void MercurialClient::import(const QString &repositoryRoot, const QStringList &files,
+void MercurialClient::import(const FilePath &repositoryRoot, const QStringList &files,
const QStringList &extraOptions)
{
VcsBaseClient::import(repositoryRoot, files,
QStringList(extraOptions) << QLatin1String("--no-commit"));
}
-void MercurialClient::revertAll(const QString &workingDir, const QString &revision,
+void MercurialClient::revertAll(const FilePath &workingDir, const QString &revision,
const QStringList &extraOptions)
{
VcsBaseClient::revertAll(workingDir, revision,
QStringList(extraOptions) << QLatin1String("--all"));
}
-bool MercurialClient::isVcsDirectory(const FilePath &fileName) const
+bool MercurialClient::isVcsDirectory(const FilePath &filePath) const
{
- return fileName.isDir()
- && !fileName.fileName().compare(Constants::MERCURIALREPO, HostOsInfo::fileNameCaseSensitivity());
+ return filePath.isDir()
+ && !filePath.fileName().compare(Constants::MERCURIALREPO, HostOsInfo::fileNameCaseSensitivity());
}
void MercurialClient::view(const QString &source, const QString &id,
diff --git a/src/plugins/mercurial/mercurialclient.h b/src/plugins/mercurial/mercurialclient.h
index e67853c24ed..7a9bd3dabd0 100644
--- a/src/plugins/mercurial/mercurialclient.h
+++ b/src/plugins/mercurial/mercurialclient.h
@@ -45,36 +45,36 @@ public:
bool synchronousClone(const Utils::FilePath &workingDir,
const QString &srcLocation,
const QString &dstLocation,
- const QStringList &extraOptions = QStringList()) override;
- bool synchronousPull(const QString &workingDir,
+ const QStringList &extraOptions = {}) override;
+ bool synchronousPull(const Utils::FilePath &workingDir,
const QString &srcLocation,
- const QStringList &extraOptions = QStringList()) override;
- bool manifestSync(const QString &repository, const QString &filename);
+ const QStringList &extraOptions = {}) override;
+ bool manifestSync(const Utils::FilePath &repository, const QString &filename);
QString branchQuerySync(const QString &repositoryRoot);
- QStringList parentRevisionsSync(const QString &workingDirectory,
+ QStringList parentRevisionsSync(const Utils::FilePath &workingDirectory,
const QString &file /* = QString() */,
const QString &revision);
- QString shortDescriptionSync(const QString &workingDirectory, const QString &revision,
+ QString shortDescriptionSync(const Utils::FilePath &workingDirectory, const QString &revision,
const QString &format /* = QString() */);
- QString shortDescriptionSync(const QString &workingDirectory, const QString &revision);
- void incoming(const QString &repositoryRoot, const QString &repository = QString());
- void outgoing(const QString &repositoryRoot);
- bool managesFile(const QString &workingDirectory, const QString &fileName) const;
+ QString shortDescriptionSync(const Utils::FilePath &workingDirectory, const QString &revision);
+ void incoming(const Utils::FilePath &repositoryRoot, const QString &repository = {});
+ void outgoing(const Utils::FilePath &repositoryRoot);
+ bool managesFile(const Utils::FilePath &workingDirectory, const QString &fileName) const;
VcsBase::VcsBaseEditorWidget *annotate(
- const QString &workingDir, const QString &file, const QString &revision = QString(),
- int lineNumber = -1, const QStringList &extraOptions = QStringList()) override;
- void commit(const QString &repositoryRoot, const QStringList &files,
+ const Utils::FilePath &workingDir, const QString &file, const QString &revision = {},
+ int lineNumber = -1, const QStringList &extraOptions = {}) override;
+ void commit(const Utils::FilePath &repositoryRoot, const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions = QStringList()) override;
- void diff(const QString &workingDir, const QStringList &files = QStringList(),
- const QStringList &extraOptions = QStringList()) override;
- void import(const QString &repositoryRoot, const QStringList &files,
- const QStringList &extraOptions = QStringList()) override;
- void revertAll(const QString &workingDir, const QString &revision = QString(),
- const QStringList &extraOptions = QStringList()) override;
+ void diff(const Utils::FilePath &workingDir, const QStringList &files = {},
+ const QStringList &extraOptions = {}) override;
+ void import(const Utils::FilePath &repositoryRoot, const QStringList &files,
+ const QStringList &extraOptions = {}) override;
+ void revertAll(const Utils::FilePath &workingDir, const QString &revision = {},
+ const QStringList &extraOptions = {}) override;
- bool isVcsDirectory(const Utils::FilePath &fileName) const;
+ bool isVcsDirectory(const Utils::FilePath &filePath) const;
Utils::FilePath findTopLevelForFile(const Utils::FilePath &file) const override;
void view(const QString &source, const QString &id,
diff --git a/src/plugins/mercurial/mercurialeditor.cpp b/src/plugins/mercurial/mercurialeditor.cpp
index 3523d72efc1..83caff8f74c 100644
--- a/src/plugins/mercurial/mercurialeditor.cpp
+++ b/src/plugins/mercurial/mercurialeditor.cpp
@@ -39,6 +39,8 @@
#include <QFileInfo>
#include <QDebug>
+using namespace Utils;
+
namespace Mercurial {
namespace Internal {
@@ -80,7 +82,7 @@ QString MercurialEditorWidget::decorateVersion(const QString &revision) const
const QFileInfo fi(source());
const QString workingDirectory = fi.absolutePath();
// Format with short summary
- return m_client->shortDescriptionSync(workingDirectory, revision);
+ return m_client->shortDescriptionSync(FilePath::fromString(workingDirectory), revision);
}
QStringList MercurialEditorWidget::annotationPreviousVersions(const QString &revision) const
@@ -88,7 +90,7 @@ QStringList MercurialEditorWidget::annotationPreviousVersions(const QString &rev
const QFileInfo fi(source());
const QString workingDirectory = fi.absolutePath();
// Retrieve parent revisions
- return m_client->parentRevisionsSync(workingDirectory, fi.fileName(), revision);
+ return m_client->parentRevisionsSync(FilePath::fromString(workingDirectory), fi.fileName(), revision);
}
} // namespace Internal
diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp
index f1ca7dfb64e..12b8cb6a186 100644
--- a/src/plugins/mercurial/mercurialplugin.cpp
+++ b/src/plugins/mercurial/mercurialplugin.cpp
@@ -215,7 +215,7 @@ private:
QAction *m_createRepositoryAction = nullptr;
QAction *m_menuAction = nullptr;
- QString m_submitRepository;
+ FilePath m_submitRepository;
bool m_submitActionTriggered = false;
@@ -657,12 +657,11 @@ void MercurialPluginPrivate::showCommitWidget(const QList<VcsBaseClient::StatusI
this, &MercurialPluginPrivate::diffFromEditorSelected);
commitEditor->setCheckScriptWorkingDirectory(m_submitRepository);
- const QString msg = tr("Commit changes for \"%1\".").
- arg(QDir::toNativeSeparators(m_submitRepository));
+ const QString msg = tr("Commit changes for \"%1\".").arg(m_submitRepository.toUserOutput());
commitEditor->document()->setPreferredDisplayName(msg);
- const QString branch = vcsTopic(FilePath::fromString(m_submitRepository));
- commitEditor->setFields(QFileInfo(m_submitRepository), branch,
+ const QString branch = vcsTopic(m_submitRepository);
+ commitEditor->setFields(QFileInfo(m_submitRepository.toString()), branch,
m_settings.userName.value(),
m_settings.userEmail.value(), status);
}
@@ -762,7 +761,7 @@ bool MercurialPluginPrivate::managesDirectory(const FilePath &filePath, FilePath
bool MercurialPluginPrivate::managesFile(const FilePath &workingDirectory, const QString &fileName) const
{
- return m_client.managesFile(workingDirectory.toString(), fileName);
+ return m_client.managesFile(workingDirectory, fileName);
}
bool MercurialPluginPrivate::isConfigured() const
@@ -800,23 +799,21 @@ bool MercurialPluginPrivate::vcsOpen(const FilePath &filePath)
bool MercurialPluginPrivate::vcsAdd(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return m_client.synchronousAdd(fi.absolutePath(), fi.fileName());
+ return m_client.synchronousAdd(filePath.parentDir(), filePath.fileName());
}
bool MercurialPluginPrivate::vcsDelete(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return m_client.synchronousRemove(fi.absolutePath(), fi.fileName());
+ return m_client.synchronousRemove(filePath.parentDir(), filePath.fileName());
}
bool MercurialPluginPrivate::vcsMove(const FilePath &from, const FilePath &to)
{
const QFileInfo fromInfo = from.toFileInfo();
const QFileInfo toInfo = to.toFileInfo();
- return m_client.synchronousMove(fromInfo.absolutePath(),
- fromInfo.absoluteFilePath(),
- toInfo.absoluteFilePath());
+ return m_client.synchronousMove(from.parentDir(),
+ fromInfo.absoluteFilePath(),
+ toInfo.absoluteFilePath());
}
bool MercurialPluginPrivate::vcsCreateRepository(const FilePath &directory)
@@ -826,8 +823,7 @@ bool MercurialPluginPrivate::vcsCreateRepository(const FilePath &directory)
void MercurialPluginPrivate::vcsAnnotate(const FilePath &filePath, int line)
{
- const QFileInfo fi = filePath.toFileInfo();
- m_client.annotate(fi.absolutePath(), fi.fileName(), QString(), line);
+ m_client.annotate(filePath.parentDir(), filePath.fileName(), QString(), line);
}
Core::ShellCommand *MercurialPluginPrivate::createInitialCheckoutCommand(const QString &url,
@@ -837,8 +833,7 @@ Core::ShellCommand *MercurialPluginPrivate::createInitialCheckoutCommand(const Q
{
QStringList args;
args << QLatin1String("clone") << extraArgs << url << localName;
- auto command = new VcsBase::VcsCommand(baseDirectory.toString(),
- m_client.processEnvironment());
+ auto command = new VcsBase::VcsCommand(baseDirectory, m_client.processEnvironment());
command->addJob({m_settings.binaryPath.filePath(), args}, -1);
return command;
}
@@ -851,14 +846,14 @@ bool MercurialPluginPrivate::sccManaged(const QString &filename)
if (!managed || topLevel.isEmpty())
return false;
const QDir topLevelDir(topLevel.toString());
- return m_client.manifestSync(topLevel.toString(), topLevelDir.relativeFilePath(filename));
+ return m_client.manifestSync(topLevel, topLevelDir.relativeFilePath(filename));
}
void MercurialPluginPrivate::changed(const QVariant &v)
{
switch (v.type()) {
case QVariant::String:
- emit repositoryChanged(v.toString());
+ emit repositoryChanged(FilePath::fromVariant(v));
break;
case QVariant::StringList:
emit filesChanged(v.toStringList());
diff --git a/src/plugins/mercurial/srcdestdialog.cpp b/src/plugins/mercurial/srcdestdialog.cpp
index 34d93391104..5d2352f0911 100644
--- a/src/plugins/mercurial/srcdestdialog.cpp
+++ b/src/plugins/mercurial/srcdestdialog.cpp
@@ -90,16 +90,16 @@ QString SrcDestDialog::getRepositoryString() const
return m_ui->urlLineEdit->text();
}
-QString SrcDestDialog::workingDir() const
+Utils::FilePath SrcDestDialog::workingDir() const
{
- return m_workingdir;
+ return Utils::FilePath::fromString(m_workingdir);
}
QUrl SrcDestDialog::getRepoUrl() const
{
// Repo to use: Default to the project repo, but use the current
- const QString projectLoc = m_state.currentProjectPath();
- const QString fileLoc = m_state.currentFileTopLevel();
+ const QString projectLoc = m_state.currentProjectPath().toString();
+ const QString fileLoc = m_state.currentFileTopLevel().toString();
m_workingdir = projectLoc;
if (!fileLoc.isEmpty())
m_workingdir = fileLoc;
diff --git a/src/plugins/mercurial/srcdestdialog.h b/src/plugins/mercurial/srcdestdialog.h
index 05506f2783c..84a2a898b6b 100644
--- a/src/plugins/mercurial/srcdestdialog.h
+++ b/src/plugins/mercurial/srcdestdialog.h
@@ -45,7 +45,7 @@ public:
void setPathChooserKind(Utils::PathChooser::Kind kind);
QString getRepositoryString() const;
- QString workingDir() const;
+ Utils::FilePath workingDir() const;
private:
QUrl getRepoUrl() const;
diff --git a/src/plugins/perforce/perforcechecker.cpp b/src/plugins/perforce/perforcechecker.cpp
index 5cd3c57ca98..796b8152ac9 100644
--- a/src/plugins/perforce/perforcechecker.cpp
+++ b/src/plugins/perforce/perforcechecker.cpp
@@ -222,7 +222,7 @@ void PerforceChecker::emitFailed(const QString &m)
void PerforceChecker::emitSucceeded(const QString &m)
{
resetOverrideCursor();
- emit succeeded(m);
+ emit succeeded(FilePath::fromString(m));
}
bool PerforceChecker::useOverideCursor() const
diff --git a/src/plugins/perforce/perforcechecker.h b/src/plugins/perforce/perforcechecker.h
index 3232979390a..6c78e1ee84c 100644
--- a/src/plugins/perforce/perforcechecker.h
+++ b/src/plugins/perforce/perforcechecker.h
@@ -54,7 +54,7 @@ public:
void setUseOverideCursor(bool v);
signals:
- void succeeded(const QString &repositoryRoot);
+ void succeeded(const Utils::FilePath &repositoryRoot);
void failed(const QString &errorMessage);
private:
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 8657e22b95c..04c05515c9a 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -195,7 +195,7 @@ enum RunFlags
struct PerforceDiffParameters
{
- QString workingDir;
+ FilePath workingDir;
QStringList diffArguments;
QStringList files;
};
@@ -211,7 +211,7 @@ public:
QString displayName() const final { return {"perforce"}; }
Id id() const final { return VcsBase::Constants::VCS_ID_PERFORCE; }
- bool isVcsFileOrDirectory(const FilePath &fileName) const final;
+ bool isVcsFileOrDirectory(const FilePath &filePath) const final;
bool managesDirectory(const Utils::FilePath &directory, Utils::FilePath *topLevel = nullptr) const final;
bool managesFile(const Utils::FilePath &workingDirectory, const QString &fileName) const final;
@@ -230,12 +230,12 @@ public:
QString vcsMakeWritableText() const final;
///
- bool vcsOpen(const QString &workingDir, const QString &fileName, bool silently = false);
- bool vcsAdd(const QString &workingDir, const QString &fileName);
- bool vcsDelete(const QString &workingDir, const QString &filename);
- bool vcsMove(const QString &workingDir, const QString &from, const QString &to);
+ bool vcsOpen(const FilePath &workingDir, const QString &fileName, bool silently = false);
+ bool vcsAdd(const FilePath &workingDir, const QString &fileName);
+ bool vcsDelete(const FilePath &workingDir, const QString &filename);
+ bool vcsMove(const FilePath &workingDir, const QString &from, const QString &to);
- void p4Diff(const QString &workingDir, const QStringList &files);
+ void p4Diff(const FilePath &workingDir, const QStringList &files);
IEditor *openPerforceSubmitEditor(const QString &fileName, const QStringList &depotFileNames);
@@ -270,18 +270,18 @@ public:
void commitFromEditor() override;
void printPendingChanges();
void slotSubmitDiff(const QStringList &files);
- void setTopLevel(const QString &);
+ void setTopLevel(const Utils::FilePath &);
void slotTopLevelFailed(const QString &);
class DirectoryCacheEntry
{
public:
- DirectoryCacheEntry(bool isManaged, const QString &topLevel):
+ DirectoryCacheEntry(bool isManaged, const FilePath &topLevel):
m_isManaged(isManaged), m_topLevel(topLevel)
{ }
bool m_isManaged;
- QString m_topLevel;
+ FilePath m_topLevel;
};
typedef QHash<QString, DirectoryCacheEntry> ManagedDirectoryCache;
@@ -292,7 +292,7 @@ public:
// args are passed as command line arguments
// extra args via a tempfile and the option -x "temp-filename"
- PerforceResponse runP4Cmd(const QString &workingDir,
+ PerforceResponse runP4Cmd(const FilePath &workingDir,
const QStringList &args,
unsigned flags = CommandToWindow|StdErrToWindow|ErrorToWindow,
const QStringList &extraArgs = {},
@@ -312,11 +312,11 @@ public:
QTextCodec *outputCodec) const;
QString clientFilePath(const QString &serverFilePath);
- void annotate(const QString &workingDir, const QString &fileName,
+ void annotate(const FilePath &workingDir, const QString &fileName,
const QString &changeList = QString(), int lineNumber = -1);
- void filelog(const QString &workingDir, const QString &fileName = QString(),
+ void filelog(const FilePath &workingDir, const QString &fileName = QString(),
bool enableAnnotationContextMenu = false);
- void changelists(const QString &workingDir, const QString &fileName = QString());
+ void changelists(const FilePath &workingDir, const QString &fileName = QString());
void cleanCommitMessageFile();
bool isCommitEditorOpen() const;
static QSharedPointer<TempFileSaver> createTemporaryArgumentFile(const QStringList &extraArgs,
@@ -324,9 +324,8 @@ public:
QString pendingChangesData();
- void updateCheckout(const QString &workingDir = QString(),
- const QStringList &dirs = QStringList());
- bool revertProject(const QString &workingDir, const QStringList &args, bool unchangedOnly);
+ void updateCheckout(const FilePath &workingDir = {}, const QStringList &dirs = {});
+ bool revertProject(const FilePath &workingDir, const QStringList &args, bool unchangedOnly);
bool managesDirectoryFstat(const QString &directory);
void applySettings();
@@ -685,7 +684,7 @@ void PerforcePluginPrivate::revertUnchangedCurrentProject()
revertProject(state.currentProjectTopLevel(), perforceRelativeProjectDirectory(state), true);
}
-bool PerforcePluginPrivate::revertProject(const QString &workingDir, const QStringList &pathArgs, bool unchangedOnly)
+bool PerforcePluginPrivate::revertProject(const FilePath &workingDir, const QStringList &pathArgs, bool unchangedOnly)
{
QStringList args(QLatin1String("revert"));
if (unchangedOnly)
@@ -696,7 +695,7 @@ bool PerforcePluginPrivate::revertProject(const QString &workingDir, const QStri
return !resp.error;
}
-void PerforcePluginPrivate::updateCheckout(const QString &workingDir, const QStringList &dirs)
+void PerforcePluginPrivate::updateCheckout(const FilePath &workingDir, const QStringList &dirs)
{
QStringList args(QLatin1String("sync"));
args.append(dirs);
@@ -706,9 +705,8 @@ void PerforcePluginPrivate::updateCheckout(const QString &workingDir, const QStr
if (!workingDir.isEmpty())
emit repositoryChanged(workingDir);
} else {
- const QChar slash = QLatin1Char('/');
- foreach (const QString &dir, dirs)
- emit repositoryChanged(workingDir + slash + dir);
+ for (const QString &dir : dirs)
+ emit repositoryChanged(workingDir.pathAppended(dir));
}
}
@@ -846,14 +844,14 @@ void PerforcePluginPrivate::annotateFile()
const QString file = QFileDialog::getOpenFileName(ICore::dialogParent(), tr("p4 annotate"));
if (!file.isEmpty()) {
const QFileInfo fi(file);
- annotate(fi.absolutePath(), fi.fileName());
+ annotate(FilePath::fromString(fi.absolutePath()), fi.fileName());
}
}
-void PerforcePluginPrivate::annotate(const QString &workingDir,
- const QString &fileName,
- const QString &changeList /* = QString() */,
- int lineNumber /* = -1 */)
+void PerforcePluginPrivate::annotate(const FilePath &workingDir,
+ const QString &fileName,
+ const QString &changeList /* = QString() */,
+ int lineNumber /* = -1 */)
{
const QStringList files = QStringList(fileName);
QTextCodec *codec = VcsBaseEditor::getCodec(workingDir, files);
@@ -887,11 +885,9 @@ void PerforcePluginPrivate::filelogCurrentFile()
void PerforcePluginPrivate::filelogFile()
{
- const QString file = QFileDialog::getOpenFileName(ICore::dialogParent(), tr("p4 filelog"));
- if (!file.isEmpty()) {
- const QFileInfo fi(file);
- filelog(fi.absolutePath(), fi.fileName());
- }
+ const FilePath file = FileUtils::getOpenFilePath(tr("p4 filelog"));
+ if (!file.isEmpty())
+ filelog(file.parentDir(), file.fileName());
}
void PerforcePluginPrivate::logProject()
@@ -908,8 +904,8 @@ void PerforcePluginPrivate::logRepository()
changelists(state.topLevel(), perforceRelativeFileArguments(QString()));
}
-void PerforcePluginPrivate::filelog(const QString &workingDir, const QString &fileName,
- bool enableAnnotationContextMenu)
+void PerforcePluginPrivate::filelog(const FilePath &workingDir, const QString &fileName,
+ bool enableAnnotationContextMenu)
{
const QString id = VcsBaseEditor::getTitleId(workingDir, QStringList(fileName));
QTextCodec *codec = VcsBaseEditor::getCodec(workingDir, QStringList(fileName));
@@ -931,7 +927,7 @@ void PerforcePluginPrivate::filelog(const QString &workingDir, const QString &fi
}
}
-void PerforcePluginPrivate::changelists(const QString &workingDir, const QString &fileName)
+void PerforcePluginPrivate::changelists(const FilePath &workingDir, const QString &fileName)
{
const QString id = VcsBaseEditor::getTitleId(workingDir, QStringList(fileName));
QTextCodec *codec = VcsBaseEditor::getCodec(workingDir, QStringList(fileName));
@@ -983,7 +979,7 @@ bool PerforcePluginPrivate::managesDirectory(const FilePath &directory, FilePath
const bool rc = const_cast<PerforcePluginPrivate *>(this)->managesDirectoryFstat(directory.toString());
if (topLevel) {
if (rc)
- *topLevel = FilePath::fromString(m_settings.topLevelSymLinkTarget());
+ *topLevel = m_settings.topLevelSymLinkTarget();
else
topLevel->clear();
}
@@ -994,7 +990,7 @@ bool PerforcePluginPrivate::managesFile(const FilePath &workingDirectory, const
{
QStringList args;
args << QLatin1String("fstat") << QLatin1String("-m1") << fileName;
- const PerforceResponse result = runP4Cmd(workingDirectory.toString(), args, RunFullySynchronous);
+ const PerforceResponse result = runP4Cmd(workingDirectory, args, RunFullySynchronous);
return result.stdOut.contains(QLatin1String("depotFile"));
}
@@ -1039,7 +1035,7 @@ bool PerforcePluginPrivate::managesDirectoryFstat(const QString &directory)
return managed;
}
-bool PerforcePluginPrivate::vcsOpen(const QString &workingDir, const QString &fileName, bool silently)
+bool PerforcePluginPrivate::vcsOpen(const FilePath &workingDir, const QString &fileName, bool silently)
{
QStringList args;
args << QLatin1String("edit") << QDir::toNativeSeparators(fileName);
@@ -1052,7 +1048,7 @@ bool PerforcePluginPrivate::vcsOpen(const QString &workingDir, const QString &fi
return !result.error;
}
-bool PerforcePluginPrivate::vcsAdd(const QString &workingDir, const QString &fileName)
+bool PerforcePluginPrivate::vcsAdd(const FilePath &workingDir, const QString &fileName)
{
QStringList args;
args << QLatin1String("add") << fileName;
@@ -1061,7 +1057,7 @@ bool PerforcePluginPrivate::vcsAdd(const QString &workingDir, const QString &fil
return !result.error;
}
-bool PerforcePluginPrivate::vcsDelete(const QString &workingDir, const QString &fileName)
+bool PerforcePluginPrivate::vcsDelete(const FilePath &workingDir, const QString &fileName)
{
QStringList args;
@@ -1084,7 +1080,7 @@ bool PerforcePluginPrivate::vcsDelete(const QString &workingDir, const QString &
return !deleteResult.error;
}
-bool PerforcePluginPrivate::vcsMove(const QString &workingDir, const QString &from, const QString &to)
+bool PerforcePluginPrivate::vcsMove(const FilePath &workingDir, const QString &from, const QString &to)
{
// TODO verify this works
QStringList args;
@@ -1126,9 +1122,9 @@ PerforcePluginPrivate::createTemporaryArgumentFile(const QStringList &extraArgs,
return rc;
}
-bool PerforcePluginPrivate::isVcsFileOrDirectory(const FilePath &FilePath) const
+bool PerforcePluginPrivate::isVcsFileOrDirectory(const FilePath &filePath) const
{
- Q_UNUSED(FilePath)
+ Q_UNUSED(filePath)
return false; // Perforce does not seem to litter its files into the source tree.
}
@@ -1166,8 +1162,7 @@ IVersionControl::OpenSupportMode PerforcePluginPrivate::openSupportMode(const Fi
bool PerforcePluginPrivate::vcsOpen(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsOpen(fi.absolutePath(), fi.fileName(), true);
+ return vcsOpen(filePath.parentDir(), filePath.fileName(), true);
}
IVersionControl::SettingsFlags PerforcePluginPrivate::settingsFlags() const
@@ -1180,21 +1175,19 @@ IVersionControl::SettingsFlags PerforcePluginPrivate::settingsFlags() const
bool PerforcePluginPrivate::vcsAdd(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsAdd(fi.absolutePath(), fi.fileName());
+ return vcsAdd(filePath.parentDir(), filePath.fileName());
}
bool PerforcePluginPrivate::vcsDelete(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsDelete(fi.absolutePath(), fi.fileName());
+ return vcsDelete(filePath.parentDir(), filePath.fileName());
}
bool PerforcePluginPrivate::vcsMove(const FilePath &from, const FilePath &to)
{
const QFileInfo fromInfo = from.toFileInfo();
const QFileInfo toInfo = to.toFileInfo();
- return vcsMove(fromInfo.absolutePath(), fromInfo.absoluteFilePath(), toInfo.absoluteFilePath());
+ return vcsMove(from.parentDir().absolutePath(), fromInfo.absoluteFilePath(), toInfo.absoluteFilePath());
}
bool PerforcePluginPrivate::vcsCreateRepository(const FilePath &)
@@ -1204,8 +1197,7 @@ bool PerforcePluginPrivate::vcsCreateRepository(const FilePath &)
void PerforcePluginPrivate::vcsAnnotate(const FilePath &filePath, int line)
{
- const QFileInfo fi = filePath.toFileInfo();
- annotate(fi.absolutePath(), fi.fileName(), QString(), line);
+ annotate(filePath.parentDir(), filePath.fileName(), QString(), line);
}
QString PerforcePluginPrivate::vcsOpenText() const
@@ -1369,7 +1361,7 @@ PerforceResponse PerforcePluginPrivate::fullySynchronousProcess(const QString &w
return response;
}
-PerforceResponse PerforcePluginPrivate::runP4Cmd(const QString &workingDir,
+PerforceResponse PerforcePluginPrivate::runP4Cmd(const FilePath &workingDir,
const QStringList &args,
unsigned flags,
const QStringList &extraArgs,
@@ -1383,7 +1375,7 @@ PerforceResponse PerforcePluginPrivate::runP4Cmd(const QString &workingDir,
VcsOutputWindow::appendError(invalidConfigResponse.message);
return invalidConfigResponse;
}
- QStringList actualArgs = m_settings.commonP4Arguments(workingDir);
+ QStringList actualArgs = m_settings.commonP4Arguments(workingDir.toString());
QString errorMessage;
QSharedPointer<TempFileSaver> tempFile = createTemporaryArgumentFile(extraArgs, &errorMessage);
if (!tempFile.isNull()) {
@@ -1397,14 +1389,14 @@ PerforceResponse PerforcePluginPrivate::runP4Cmd(const QString &workingDir,
actualArgs.append(args);
if (flags & CommandToWindow)
- VcsOutputWindow::appendCommand(workingDir, {m_settings.p4BinaryPath.value(), actualArgs});
+ VcsOutputWindow::appendCommand(workingDir.toString(), {m_settings.p4BinaryPath.value(), actualArgs});
if (flags & ShowBusyCursor)
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
const PerforceResponse response = (flags & RunFullySynchronous) ?
- fullySynchronousProcess(workingDir, actualArgs, flags, stdInput, outputCodec) :
- synchronousProcess(workingDir, actualArgs, flags, stdInput, outputCodec);
+ fullySynchronousProcess(workingDir.toString(), actualArgs, flags, stdInput, outputCodec) :
+ synchronousProcess(workingDir.toString(), actualArgs, flags, stdInput, outputCodec);
if (flags & ShowBusyCursor)
QApplication::restoreOverrideCursor();
@@ -1483,7 +1475,7 @@ QString PerforcePluginPrivate::commitDisplayName() const
return tr("Submit");
}
-void PerforcePluginPrivate::p4Diff(const QString &workingDir, const QStringList &files)
+void PerforcePluginPrivate::p4Diff(const FilePath &workingDir, const QStringList &files)
{
PerforceDiffParameters p;
p.workingDir = workingDir;
@@ -1497,7 +1489,7 @@ void PerforcePluginPrivate::p4Diff(const PerforceDiffParameters &p)
QTextCodec *codec = VcsBaseEditor::getCodec(p.workingDir, p.files);
const QString id = VcsBaseEditor::getTitleId(p.workingDir, p.files);
// Reuse existing editors for that id
- const QString tag = VcsBaseEditor::editorTag(DiffOutput, p.workingDir, p.files);
+ const QString tag = VcsBaseEditor::editorTag(DiffOutput, p.workingDir.toString(), p.files);
IEditor *existingEditor = VcsBaseEditor::locateEditorByTag(tag);
// Split arguments according to size
QStringList args;
@@ -1704,14 +1696,14 @@ QString PerforcePlugin::fileNameFromPerforceName(const QString& perforceName,
return dd->m_settings.mapToFileSystem(p4fileSpec);
}
-void PerforcePluginPrivate::setTopLevel(const QString &topLevel)
+void PerforcePluginPrivate::setTopLevel(const FilePath &topLevel)
{
if (m_settings.topLevel() == topLevel)
return;
- m_settings.setTopLevel(topLevel);
+ m_settings.setTopLevel(topLevel.toString());
- const QString msg = tr("Perforce repository: %1").arg(QDir::toNativeSeparators(topLevel));
+ const QString msg = tr("Perforce repository: %1").arg(topLevel.toUserOutput());
VcsOutputWindow::appendSilently(msg);
}
diff --git a/src/plugins/perforce/perforcesettings.cpp b/src/plugins/perforce/perforcesettings.cpp
index 224bbadd818..a8a94899b9d 100644
--- a/src/plugins/perforce/perforcesettings.cpp
+++ b/src/plugins/perforce/perforcesettings.cpp
@@ -144,14 +144,14 @@ bool PerforceSettings::defaultEnv() const
return !customEnv.value(); // Note: negated
}
-QString PerforceSettings::topLevel() const
+FilePath PerforceSettings::topLevel() const
{
- return m_topLevel;
+ return FilePath::fromString(m_topLevel);
}
-QString PerforceSettings::topLevelSymLinkTarget() const
+FilePath PerforceSettings::topLevelSymLinkTarget() const
{
- return m_topLevelSymLinkTarget;
+ return FilePath::fromString(m_topLevelSymLinkTarget);
}
void PerforceSettings::setTopLevel(const QString &t)
@@ -252,10 +252,10 @@ PerforceSettingsPage::PerforceSettingsPage(PerforceSettings *settings)
checker->deleteLater();
});
connect(checker, &PerforceChecker::succeeded, errorLabel,
- [errorLabel, testButton, checker](const QString &repo) {
+ [errorLabel, testButton, checker](const FilePath &repo) {
errorLabel->setStyleSheet({});
errorLabel->setText(PerforceSettings::tr("Test succeeded (%1).")
- .arg(QDir::toNativeSeparators(repo)));
+ .arg(repo.toUserOutput()));
testButton->setEnabled(true);
checker->deleteLater();
});
diff --git a/src/plugins/perforce/perforcesettings.h b/src/plugins/perforce/perforcesettings.h
index 802d0c3fd7a..5c38b16ac60 100644
--- a/src/plugins/perforce/perforcesettings.h
+++ b/src/plugins/perforce/perforcesettings.h
@@ -69,8 +69,8 @@ public:
int longTimeOutS() const { return timeOutS.value() * 10; }
int timeOutMS() const { return timeOutS.value() * 1000; }
- QString topLevel() const;
- QString topLevelSymLinkTarget() const;
+ Utils::FilePath topLevel() const;
+ Utils::FilePath topLevelSymLinkTarget() const;
void setTopLevel(const QString &);
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index c418b0640f9..d916ec4efc2 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -3867,10 +3867,9 @@ void ProjectExplorerPluginPrivate::deleteFile()
folderNode->deleteFiles({filePath});
FileChangeBlocker changeGuard(currentNode->filePath());
- if (IVersionControl *vc =
- VcsManager::findVersionControlForDirectory(filePath.absolutePath().toString())) {
+ if (IVersionControl *vc = VcsManager::findVersionControlForDirectory(filePath.absolutePath()))
vc->vcsDelete(filePath);
- }
+
if (filePath.exists()) {
if (!filePath.removeFile())
QMessageBox::warning(ICore::dialogParent(), tr("Deleting File Failed"),
diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp
index b410e41a674..f4471d99a12 100644
--- a/src/plugins/projectexplorer/projectmodels.cpp
+++ b/src/plugins/projectexplorer/projectmodels.cpp
@@ -65,6 +65,7 @@
#include <tuple>
#include <vector>
+using namespace Core;
using namespace Utils;
namespace ProjectExplorer {
@@ -735,7 +736,7 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r
if (it != vcsHash.constEnd())
return it.value();
VcsInfo vcsInfo;
- vcsInfo.vcs = Core::VcsManager::findVersionControlForDirectory(dir, &vcsInfo.repoDir);
+ vcsInfo.vcs = VcsManager::findVersionControlForDirectory(FilePath::fromString(dir), &vcsInfo.repoDir);
vcsHash.insert(dir, vcsInfo);
return vcsInfo;
};
@@ -750,8 +751,7 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r
switch (dlg.dropAction()) {
case DropAction::CopyWithFiles: {
FilePaths filesToAdd;
- Core::IVersionControl * const vcs = Core::VcsManager::findVersionControlForDirectory(
- targetDir.toString());
+ IVersionControl * const vcs = VcsManager::findVersionControlForDirectory(targetDir);
const bool addToVcs = vcs && vcs->supportsOperation(Core::IVersionControl::AddOperation);
for (const FilePath &sourceFile : sourceFiles) {
const FilePath targetFile = targetFilePath(sourceFile);
diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp
index 3c8ec137641..2e09d587fd0 100644
--- a/src/plugins/projectexplorer/projectnodes.cpp
+++ b/src/plugins/projectexplorer/projectnodes.cpp
@@ -1000,10 +1000,10 @@ QString ContainerNode::displayName() const
{
QString name = m_project->displayName();
- const QFileInfo fi = m_project->projectFilePath().toFileInfo();
- const QString dir = fi.isDir() ? fi.absoluteFilePath() : fi.absolutePath();
+ const FilePath fp = m_project->projectFilePath();
+ const FilePath dir = fp.isDir() ? fp.absoluteFilePath() : fp.absolutePath();
if (Core::IVersionControl *vc = Core::VcsManager::findVersionControlForDirectory(dir)) {
- QString vcsTopic = vc->vcsTopic(FilePath::fromString(dir));
+ QString vcsTopic = vc->vcsTopic(dir);
if (!vcsTopic.isEmpty())
name += " [" + vcsTopic + ']';
}
diff --git a/src/plugins/projectexplorer/projecttree.cpp b/src/plugins/projectexplorer/projecttree.cpp
index 22e0ee88d0c..e8e54804954 100644
--- a/src/plugins/projectexplorer/projecttree.cpp
+++ b/src/plugins/projectexplorer/projecttree.cpp
@@ -329,7 +329,7 @@ void ProjectTree::updateExternalFileWarning()
return;
// External file. Test if it under the same VCS
QString topLevel;
- if (Core::VcsManager::findVersionControlForDirectory(projectDir.toString(), &topLevel)
+ if (Core::VcsManager::findVersionControlForDirectory(projectDir, &topLevel)
&& fileName.isChildOf(FilePath::fromString(topLevel))) {
return;
}
diff --git a/src/plugins/projectexplorer/projectwizardpage.cpp b/src/plugins/projectexplorer/projectwizardpage.cpp
index 5b169076587..84a3664895c 100644
--- a/src/plugins/projectexplorer/projectwizardpage.cpp
+++ b/src/plugins/projectexplorer/projectwizardpage.cpp
@@ -376,7 +376,8 @@ void ProjectWizardPage::initializeVersionControls()
QStringList versionControlChoices = QStringList(tr("<None>"));
if (!m_commonDirectory.isEmpty()) {
- IVersionControl *managingControl = VcsManager::findVersionControlForDirectory(m_commonDirectory);
+ IVersionControl *managingControl =
+ VcsManager::findVersionControlForDirectory(FilePath::fromString(m_commonDirectory));
if (managingControl) {
// Under VCS
if (managingControl->supportsOperation(IVersionControl::AddOperation)) {
diff --git a/src/plugins/projectexplorer/vcsannotatetaskhandler.cpp b/src/plugins/projectexplorer/vcsannotatetaskhandler.cpp
index 0765777b1f7..daaf5970b47 100644
--- a/src/plugins/projectexplorer/vcsannotatetaskhandler.cpp
+++ b/src/plugins/projectexplorer/vcsannotatetaskhandler.cpp
@@ -45,7 +45,7 @@ bool VcsAnnotateTaskHandler::canHandle(const Task &task) const
QFileInfo fi(task.file.toFileInfo());
if (!fi.exists() || !fi.isFile() || !fi.isReadable())
return false;
- IVersionControl *vc = VcsManager::findVersionControlForDirectory(fi.absolutePath());
+ IVersionControl *vc = VcsManager::findVersionControlForDirectory(task.file.absolutePath());
if (!vc)
return false;
return vc->supportsOperation(IVersionControl::AnnotateOperation);
@@ -53,11 +53,10 @@ bool VcsAnnotateTaskHandler::canHandle(const Task &task) const
void VcsAnnotateTaskHandler::handle(const Task &task)
{
- QFileInfo fi(task.file.toFileInfo());
- IVersionControl *vc = VcsManager::findVersionControlForDirectory(fi.absolutePath());
+ IVersionControl *vc = VcsManager::findVersionControlForDirectory(task.file.absolutePath());
QTC_ASSERT(vc, return);
QTC_ASSERT(vc->supportsOperation(IVersionControl::AnnotateOperation), return);
- vc->vcsAnnotate(FilePath::fromString(fi.absoluteFilePath()), task.movedLine);
+ vc->vcsAnnotate(task.file.absoluteFilePath(), task.movedLine);
}
QAction *VcsAnnotateTaskHandler::createAction(QObject *parent) const
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 23aae15d30b..123e2b2ca0c 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -352,7 +352,7 @@ bool QbsBuildSystem::ensureWriteableQbsFile(const QString &file)
if (!fi.isWritable()) {
// Try via vcs manager
IVersionControl *versionControl =
- VcsManager::findVersionControlForDirectory(fi.absolutePath());
+ VcsManager::findVersionControlForDirectory(FilePath::fromString(fi.absolutePath()));
if (!versionControl || !versionControl->vcsOpen(FilePath::fromString(file))) {
bool makeWritable = QFile::setPermissions(file, fi.permissions() | QFile::WriteUser);
if (!makeWritable) {
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
index e3be0ad59db..9276345d224 100644
--- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
@@ -745,7 +745,8 @@ bool QmakePriFile::ensureWriteableProFile(const QString &file)
QFileInfo fi(file);
if (!fi.isWritable()) {
// Try via vcs manager
- Core::IVersionControl *versionControl = Core::VcsManager::findVersionControlForDirectory(fi.absolutePath());
+ Core::IVersionControl *versionControl =
+ Core::VcsManager::findVersionControlForDirectory(FilePath::fromString(fi.absolutePath()));
if (!versionControl || !versionControl->vcsOpen(FilePath::fromString(file))) {
bool makeWritable = QFile::setPermissions(file, fi.permissions() | QFile::WriteUser);
if (!makeWritable) {
diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp
index 8b6b1b93857..84e1416eb04 100644
--- a/src/plugins/qmldesigner/documentmanager.cpp
+++ b/src/plugins/qmldesigner/documentmanager.cpp
@@ -309,7 +309,8 @@ bool DocumentManager::createFile(const QString &filePath, const QString &content
void DocumentManager::addFileToVersionControl(const QString &directoryPath, const QString &newFilePath)
{
- Core::IVersionControl *versionControl = Core::VcsManager::findVersionControlForDirectory(directoryPath);
+ Core::IVersionControl *versionControl =
+ Core::VcsManager::findVersionControlForDirectory(FilePath::fromString(directoryPath));
if (versionControl && versionControl->supportsOperation(Core::IVersionControl::AddOperation)) {
const QMessageBox::StandardButton button
= QMessageBox::question(Core::ICore::dialogParent(),
diff --git a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp
index 66b23afa7d3..fb736ab2b21 100644
--- a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp
+++ b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp
@@ -216,7 +216,8 @@ public:
currentFile->appendIndentRange(Range(start, end + 1));
currentFile->apply();
- Core::IVersionControl *versionControl = Core::VcsManager::findVersionControlForDirectory(path);
+ Core::IVersionControl *versionControl =
+ Core::VcsManager::findVersionControlForDirectory(FilePath::fromString(path));
if (versionControl
&& versionControl->supportsOperation(Core::IVersionControl::AddOperation)) {
const QMessageBox::StandardButton button = QMessageBox::question(
diff --git a/src/plugins/subversion/subversionclient.cpp b/src/plugins/subversion/subversionclient.cpp
index b0277bef023..8ddef09d0a2 100644
--- a/src/plugins/subversion/subversionclient.cpp
+++ b/src/plugins/subversion/subversionclient.cpp
@@ -78,7 +78,7 @@ SubversionClient::SubversionClient(SubversionSettings *settings) : VcsBaseClient
});
}
-bool SubversionClient::doCommit(const QString &repositoryRoot,
+bool SubversionClient::doCommit(const FilePath &repositoryRoot,
const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions) const
@@ -97,7 +97,7 @@ bool SubversionClient::doCommit(const QString &repositoryRoot,
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-void SubversionClient::commit(const QString &repositoryRoot,
+void SubversionClient::commit(const FilePath &repositoryRoot,
const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions)
@@ -140,7 +140,7 @@ QStringList SubversionClient::addAuthenticationOptions(const SubversionSettings
return rc;
}
-QString SubversionClient::synchronousTopic(const QString &repository) const
+QString SubversionClient::synchronousTopic(const FilePath &repository) const
{
QStringList args;
@@ -278,7 +278,7 @@ SubversionDiffEditorController *SubversionClient::findOrCreateDiffEditor(const Q
return controller;
}
-void SubversionClient::diff(const QString &workingDirectory, const QStringList &files, const QStringList &extraOptions)
+void SubversionClient::diff(const FilePath &workingDirectory, const QStringList &files, const QStringList &extraOptions)
{
Q_UNUSED(extraOptions)
@@ -287,13 +287,13 @@ void SubversionClient::diff(const QString &workingDirectory, const QStringList &
+ QLatin1String(".Diff.") + VcsBaseEditor::getTitleId(workingDirectory, files);
const QString title = vcsEditorTitle(vcsCmdString, documentId);
- SubversionDiffEditorController *controller = findOrCreateDiffEditor(documentId, workingDirectory, title,
- workingDirectory);
+ SubversionDiffEditorController *controller =
+ findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory.toString());
controller->setFilesList(files);
controller->requestReload();
}
-void SubversionClient::log(const QString &workingDir,
+void SubversionClient::log(const FilePath &workingDir,
const QStringList &files,
const QStringList &extraOptions,
bool enableAnnotationContextMenu)
@@ -310,15 +310,16 @@ void SubversionClient::log(const QString &workingDir,
VcsBaseClient::log(workingDir, escapeFiles(files), svnExtraOptions, enableAnnotationContextMenu);
}
-void SubversionClient::describe(const QString &workingDirectory, int changeNumber, const QString &title)
+void SubversionClient::describe(const FilePath &workingDirectory, int changeNumber, const QString &title)
{
const QString documentId = QLatin1String(Constants::SUBVERSION_PLUGIN)
+ QLatin1String(".Describe.") + VcsBaseEditor::editorTag(DiffOutput,
- workingDirectory,
+ workingDirectory.toString(),
QStringList(),
QString::number(changeNumber));
- SubversionDiffEditorController *controller = findOrCreateDiffEditor(documentId, workingDirectory, title, workingDirectory);
+ SubversionDiffEditorController *controller =
+ findOrCreateDiffEditor(documentId, workingDirectory.toString(), title, workingDirectory.toString());
controller->setChangeNumber(changeNumber);
controller->requestReload();
}
diff --git a/src/plugins/subversion/subversionclient.h b/src/plugins/subversion/subversionclient.h
index 7d7ec85b366..036f314b152 100644
--- a/src/plugins/subversion/subversionclient.h
+++ b/src/plugins/subversion/subversionclient.h
@@ -44,29 +44,30 @@ class SubversionClient : public VcsBase::VcsBaseClient
public:
SubversionClient(SubversionSettings *settings);
- bool doCommit(const QString &repositoryRoot,
+ bool doCommit(const Utils::FilePath &repositoryRoot,
const QStringList &files,
const QString &commitMessageFile,
- const QStringList &extraOptions = QStringList()) const;
- void commit(const QString &repositoryRoot,
+ const QStringList &extraOptions = {}) const;
+ void commit(const Utils::FilePath &repositoryRoot,
const QStringList &files,
const QString &commitMessageFile,
- const QStringList &extraOptions = QStringList()) override;
+ const QStringList &extraOptions = {}) override;
- void diff(const QString &workingDirectory, const QStringList &files,
+ void diff(const Utils::FilePath &workingDirectory,
+ const QStringList &files,
const QStringList &extraOptions) override;
- void log(const QString &workingDir,
- const QStringList &files = QStringList(),
- const QStringList &extraOptions = QStringList(),
+ void log(const Utils::FilePath &workingDir,
+ const QStringList &files = {},
+ const QStringList &extraOptions = {},
bool enableAnnotationContextMenu = false) override;
- void describe(const QString &workingDirectory, int changeNumber, const QString &title);
+ void describe(const Utils::FilePath &workingDirectory, int changeNumber, const QString &title);
// Add authorization options to the command line arguments.
static QStringList addAuthenticationOptions(const SubversionSettings &settings);
- QString synchronousTopic(const QString &repository) const;
+ QString synchronousTopic(const Utils::FilePath &repository) const;
static QString escapeFile(const QString &file);
static QStringList escapeFiles(const QStringList &files);
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 915e2cc89e8..7519d3defe6 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -235,20 +235,20 @@ public:
SubversionSubmitEditor *openSubversionSubmitEditor(const QString &fileName);
// IVersionControl
- bool vcsAdd(const QString &workingDir, const QString &fileName);
- bool vcsDelete(const QString &workingDir, const QString &fileName);
- bool vcsMove(const QString &workingDir, const QString &from, const QString &to);
- bool vcsCheckout(const QString &directory, const QByteArray &url);
+ bool vcsAdd(const FilePath &workingDir, const QString &fileName);
+ bool vcsDelete(const FilePath &workingDir, const QString &fileName);
+ bool vcsMove(const FilePath &workingDir, const QString &from, const QString &to);
+ bool vcsCheckout(const FilePath &directory, const QByteArray &url);
static SubversionPluginPrivate *instance();
- QString monitorFile(const QString &repository) const;
- QString synchronousTopic(const QString &repository) const;
- SubversionResponse runSvn(const QString &workingDir,
+ QString monitorFile(const FilePath &repository) const;
+ QString synchronousTopic(const FilePath &repository) const;
+ SubversionResponse runSvn(const FilePath &workingDir,
const QStringList &arguments, int timeOutS,
unsigned flags, QTextCodec *outputCodec = nullptr) const;
- void vcsAnnotateHelper(const QString &workingDir, const QString &file,
- const QString &revision = QString(), int lineNumber = -1);
+ void vcsAnnotateHelper(const FilePath &workingDir, const QString &file,
+ const QString &revision = {}, int lineNumber = -1);
protected:
void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override;
@@ -282,20 +282,20 @@ private:
Utils::Id id, const QString &source,
QTextCodec *codec);
- void filelog(const QString &workingDir,
- const QString &file = QString(),
+ void filelog(const FilePath &workingDir,
+ const QString &file = {},
bool enableAnnotationContextMenu = false);
- void svnStatus(const QString &workingDir, const QString &relativePath = QString());
- void svnUpdate(const QString &workingDir, const QString &relativePath = QString());
+ void svnStatus(const FilePath &workingDir, const QString &relativePath = {});
+ void svnUpdate(const FilePath &workingDir, const QString &relativePath = {});
bool checkSVNSubDir(const QDir &directory) const;
- void startCommit(const QString &workingDir, const QStringList &files = QStringList());
+ void startCommit(const FilePath &workingDir, const QStringList &files = {});
const QStringList m_svnDirectories;
SubversionSettings m_settings;
SubversionClient *m_client = nullptr;
QString m_commitMessageFileName;
- QString m_commitRepository;
+ FilePath m_commitRepository;
Core::CommandLocator *m_commandLocator = nullptr;
Utils::ParameterAction *m_addAction = nullptr;
@@ -690,7 +690,7 @@ void SubversionPluginPrivate::revertAll()
QStringList args;
args << QLatin1String("revert");
args << SubversionClient::addAuthenticationOptions(m_settings);
- args << QLatin1String("--recursive") << state.topLevel();
+ args << QLatin1String("--recursive") << state.topLevel().toString();
const SubversionResponse revertResponse
= runSvn(state.topLevel(), args, m_settings.timeout.value(),
VcsCommand::SshPasswordPrompt | VcsCommand::ShowStdOut);
@@ -781,7 +781,7 @@ void SubversionPluginPrivate::startCommitProject()
/* Start commit of files of a single repository by displaying
* template and files in a submit editor. On closing, the real
* commit will start. */
-void SubversionPluginPrivate::startCommit(const QString &workingDir, const QStringList &files)
+void SubversionPluginPrivate::startCommit(const FilePath &workingDir, const QStringList &files)
{
if (!promptBeforeCommit())
return;
@@ -869,7 +869,7 @@ void SubversionPluginPrivate::updateRepository()
svnUpdate(state.topLevel());
}
-void SubversionPluginPrivate::svnStatus(const QString &workingDir, const QString &relativePath)
+void SubversionPluginPrivate::svnStatus(const FilePath &workingDir, const QString &relativePath)
{
const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasTopLevel(), return);
@@ -877,15 +877,15 @@ void SubversionPluginPrivate::svnStatus(const QString &workingDir, const QString
args << SubversionClient::addAuthenticationOptions(m_settings);
if (!relativePath.isEmpty())
args.append(SubversionClient::escapeFile(relativePath));
- VcsOutputWindow::setRepository(workingDir);
+ VcsOutputWindow::setRepository(workingDir.toString());
runSvn(workingDir, args, m_settings.timeout.value(),
VcsCommand::ShowStdOut | VcsCommand::ShowSuccessMessage);
VcsOutputWindow::clearRepository();
}
-void SubversionPluginPrivate::filelog(const QString &workingDir,
- const QString &file,
- bool enableAnnotationContextMenu)
+void SubversionPluginPrivate::filelog(const FilePath &workingDir,
+ const QString &file,
+ bool enableAnnotationContextMenu)
{
m_client->log(workingDir, QStringList(file), QStringList(), enableAnnotationContextMenu);
}
@@ -897,7 +897,7 @@ void SubversionPluginPrivate::updateProject()
svnUpdate(state.currentProjectTopLevel(), state.relativeCurrentProject());
}
-void SubversionPluginPrivate::svnUpdate(const QString &workingDir, const QString &relativePath)
+void SubversionPluginPrivate::svnUpdate(const FilePath &workingDir, const QString &relativePath)
{
QStringList args(QLatin1String("update"));
args << SubversionClient::addAuthenticationOptions(m_settings);
@@ -918,7 +918,7 @@ void SubversionPluginPrivate::annotateCurrentFile()
vcsAnnotateHelper(state.currentFileTopLevel(), state.relativeCurrentFile());
}
-void SubversionPluginPrivate::vcsAnnotateHelper(const QString &workingDir, const QString &file,
+void SubversionPluginPrivate::vcsAnnotateHelper(const FilePath &workingDir, const QString &file,
const QString &revision /* = QString() */,
int lineNumber /* = -1 */)
{
@@ -947,7 +947,7 @@ void SubversionPluginPrivate::vcsAnnotateHelper(const QString &workingDir, const
// Determine id
const QStringList files = QStringList(file);
const QString id = VcsBaseEditor::getTitleId(workingDir, files, revision);
- const QString tag = VcsBaseEditor::editorTag(AnnotateOutput, workingDir, files);
+ const QString tag = VcsBaseEditor::editorTag(AnnotateOutput, workingDir.toString(), files);
if (IEditor *editor = VcsBaseEditor::locateEditorByTag(tag)) {
editor->document()->setContents(response.stdOut.toUtf8());
VcsBaseEditor::gotoLineOfEditor(editor, lineNumber);
@@ -987,7 +987,7 @@ void SubversionPluginPrivate::vcsDescribe(const FilePath &source, const QString
const QString title = QString::fromLatin1("svn describe %1#%2").arg(fi.fileName(), changeNr);
- m_client->describe(topLevel.toString(), number, title);
+ m_client->describe(topLevel, number, title);
}
void SubversionPluginPrivate::slotDescribe()
@@ -1004,7 +1004,7 @@ void SubversionPluginPrivate::slotDescribe()
return;
const int revision = inputDialog.intValue();
- vcsDescribe(FilePath::fromString(state.topLevel()), QString::number(revision));
+ vcsDescribe(state.topLevel(), QString::number(revision));
}
void SubversionPluginPrivate::commitFromEditor()
@@ -1014,10 +1014,10 @@ void SubversionPluginPrivate::commitFromEditor()
EditorManager::closeDocuments({submitEditor()->document()});
}
-SubversionResponse SubversionPluginPrivate::runSvn(const QString &workingDir,
- const QStringList &arguments,
- int timeOutS, unsigned flags,
- QTextCodec *outputCodec) const
+SubversionResponse SubversionPluginPrivate::runSvn(const FilePath &workingDir,
+ const QStringList &arguments,
+ int timeOutS, unsigned flags,
+ QTextCodec *outputCodec) const
{
SubversionResponse response;
if (m_settings.binaryPath.value().isEmpty()) {
@@ -1067,10 +1067,10 @@ SubversionPluginPrivate *SubversionPluginPrivate::instance()
return dd;
}
-QString SubversionPluginPrivate::monitorFile(const QString &repository) const
+QString SubversionPluginPrivate::monitorFile(const FilePath &repository) const
{
QTC_ASSERT(!repository.isEmpty(), return QString());
- QDir repoDir(repository);
+ QDir repoDir(repository.toString());
foreach (const QString &svnDir, m_svnDirectories) {
if (repoDir.exists(svnDir)) {
QFileInfo fi(repoDir.absoluteFilePath(svnDir + QLatin1String("/wc.db")));
@@ -1081,12 +1081,12 @@ QString SubversionPluginPrivate::monitorFile(const QString &repository) const
return QString();
}
-QString SubversionPluginPrivate::synchronousTopic(const QString &repository) const
+QString SubversionPluginPrivate::synchronousTopic(const FilePath &repository) const
{
return m_client->synchronousTopic(repository);
}
-bool SubversionPluginPrivate::vcsAdd(const QString &workingDir, const QString &rawFileName)
+bool SubversionPluginPrivate::vcsAdd(const FilePath &workingDir, const QString &rawFileName)
{
const QString file = QDir::toNativeSeparators(SubversionClient::escapeFile(rawFileName));
QStringList args;
@@ -1099,7 +1099,7 @@ bool SubversionPluginPrivate::vcsAdd(const QString &workingDir, const QString &r
return !response.error;
}
-bool SubversionPluginPrivate::vcsDelete(const QString &workingDir, const QString &rawFileName)
+bool SubversionPluginPrivate::vcsDelete(const FilePath &workingDir, const QString &rawFileName)
{
const QString file = QDir::toNativeSeparators(SubversionClient::escapeFile(rawFileName));
@@ -1114,7 +1114,7 @@ bool SubversionPluginPrivate::vcsDelete(const QString &workingDir, const QString
return !response.error;
}
-bool SubversionPluginPrivate::vcsMove(const QString &workingDir, const QString &from, const QString &to)
+bool SubversionPluginPrivate::vcsMove(const FilePath &workingDir, const QString &from, const QString &to)
{
QStringList args(QLatin1String("move"));
args << SubversionClient::addAuthenticationOptions(m_settings);
@@ -1127,7 +1127,7 @@ bool SubversionPluginPrivate::vcsMove(const QString &workingDir, const QString &
return !response.error;
}
-bool SubversionPluginPrivate::vcsCheckout(const QString &directory, const QByteArray &url)
+bool SubversionPluginPrivate::vcsCheckout(const FilePath &directory, const QByteArray &url)
{
QUrl tempUrl = QUrl::fromEncoded(url);
QString username = tempUrl.userName();
@@ -1147,7 +1147,7 @@ bool SubversionPluginPrivate::vcsCheckout(const QString &directory, const QByteA
args << QLatin1String("--password") << password;
}
- args << QLatin1String(tempUrl.toEncoded()) << directory;
+ args << QLatin1String(tempUrl.toEncoded()) << directory.toString();
const SubversionResponse response
= runSvn(directory, args, 10 * m_settings.timeout.value(), VcsCommand::SshPasswordPrompt);
@@ -1184,8 +1184,7 @@ bool SubversionPluginPrivate::managesFile(const FilePath &workingDirectory, cons
args << QLatin1String("status");
args << SubversionClient::addAuthenticationOptions(m_settings)
<< QDir::toNativeSeparators(SubversionClient::escapeFile(fileName));
- SubversionResponse response
- = runSvn(workingDirectory.toString(), args, m_settings.timeout.value(), 0);
+ SubversionResponse response = runSvn(workingDirectory, args, m_settings.timeout.value(), 0);
return response.stdOut.isEmpty() || response.stdOut.at(0) != QLatin1Char('?');
}
@@ -1254,21 +1253,19 @@ bool SubversionPluginPrivate::vcsOpen(const FilePath & /* filePath */)
bool SubversionPluginPrivate::vcsAdd(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsAdd(fi.absolutePath(), fi.fileName());
+ return vcsAdd(filePath.parentDir(), filePath.fileName());
}
bool SubversionPluginPrivate::vcsDelete(const FilePath &filePath)
{
- const QFileInfo fi = filePath.toFileInfo();
- return vcsDelete(fi.absolutePath(), fi.fileName());
+ return vcsDelete(filePath.parentDir(), filePath.fileName());
}
bool SubversionPluginPrivate::vcsMove(const FilePath &from, const FilePath &to)
{
const QFileInfo fromInfo = from.toFileInfo();
const QFileInfo toInfo = to.toFileInfo();
- return vcsMove(fromInfo.absolutePath(), fromInfo.absoluteFilePath(), toInfo.absoluteFilePath());
+ return vcsMove(from.parentDir(), fromInfo.absoluteFilePath(), toInfo.absoluteFilePath());
}
bool SubversionPluginPrivate::vcsCreateRepository(const FilePath &)
@@ -1278,8 +1275,7 @@ bool SubversionPluginPrivate::vcsCreateRepository(const FilePath &)
void SubversionPluginPrivate::vcsAnnotate(const FilePath &filePath, int line)
{
- const QFileInfo fi = filePath.toFileInfo();
- vcsAnnotateHelper(fi.absolutePath(), fi.fileName(), QString(), line);
+ vcsAnnotateHelper(filePath.parentDir(), filePath.fileName(), QString(), line);
}
Core::ShellCommand *SubversionPluginPrivate::createInitialCheckoutCommand(const QString &url,
@@ -1293,19 +1289,19 @@ Core::ShellCommand *SubversionPluginPrivate::createInitialCheckoutCommand(const
args << QLatin1String(Subversion::Constants::NON_INTERACTIVE_OPTION);
args << extraArgs << url << localName;
- auto command = new VcsBase::VcsCommand(baseDirectory.toString(), m_client->processEnvironment());
+ auto command = new VcsBase::VcsCommand(baseDirectory, m_client->processEnvironment());
command->addJob({m_settings.binaryPath.filePath(), args}, -1);
return command;
}
FilePath SubversionTopicCache::trackFile(const FilePath &repository)
{
- return FilePath::fromString(m_plugin->monitorFile(repository.toString()));
+ return FilePath::fromString(m_plugin->monitorFile(repository));
}
QString SubversionTopicCache::refreshTopic(const FilePath &repository)
{
- return m_plugin->synchronousTopic(repository.toString());
+ return m_plugin->synchronousTopic(repository);
}
diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp
index 75dd748dcd4..8b74bee3958 100644
--- a/src/plugins/vcsbase/vcsbaseclient.cpp
+++ b/src/plugins/vcsbase/vcsbaseclient.cpp
@@ -92,7 +92,7 @@ FilePath VcsBaseClientImpl::vcsBinary() const
return m_baseSettings->binaryPath.filePath();
}
-VcsCommand *VcsBaseClientImpl::createCommand(const QString &workingDirectory,
+VcsCommand *VcsBaseClientImpl::createCommand(const FilePath &workingDirectory,
VcsBaseEditorWidget *editor,
JobOutputBindMode mode) const
{
@@ -145,21 +145,14 @@ QString VcsBaseClientImpl::stripLastNewline(const QString &in)
}
void VcsBaseClientImpl::vcsFullySynchronousExec(QtcProcess &proc,
- const QString &workingDir, const QStringList &args,
- unsigned flags, int timeoutS, QTextCodec *codec) const
-{
- vcsFullySynchronousExec(proc, workingDir, {vcsBinary(), args}, flags, timeoutS, codec);
-}
-
-void VcsBaseClientImpl::vcsFullySynchronousExec(QtcProcess &proc,
const FilePath &workingDir, const QStringList &args,
unsigned flags, int timeoutS, QTextCodec *codec) const
{
- vcsFullySynchronousExec(proc, workingDir.toString(), {vcsBinary(), args}, flags, timeoutS, codec);
+ vcsFullySynchronousExec(proc, workingDir, {vcsBinary(), args}, flags, timeoutS, codec);
}
void VcsBaseClientImpl::vcsFullySynchronousExec(QtcProcess &proc,
- const QString &workingDir, const CommandLine &cmdLine,
+ const FilePath &workingDir, const CommandLine &cmdLine,
unsigned flags, int timeoutS, QTextCodec *codec) const
{
VcsCommand command(workingDir, processEnvironment());
@@ -175,7 +168,7 @@ void VcsBaseClientImpl::resetCachedVcsInfo(const FilePath &workingDir)
Core::VcsManager::resetVersionControlForDirectory(workingDir);
}
-void VcsBaseClientImpl::annotateRevisionRequested(const QString &workingDirectory,
+void VcsBaseClientImpl::annotateRevisionRequested(const FilePath &workingDirectory,
const QString &file, const QString &change,
int line)
{
@@ -188,7 +181,7 @@ void VcsBaseClientImpl::annotateRevisionRequested(const QString &workingDirector
annotate(workingDirectory, file, changeCopy, line);
}
-VcsCommand *VcsBaseClientImpl::vcsExec(const QString &workingDirectory, const QStringList &arguments,
+VcsCommand *VcsBaseClientImpl::vcsExec(const FilePath &workingDirectory, const QStringList &arguments,
VcsBaseEditorWidget *editor, bool useOutputToWindow,
unsigned additionalFlags, const QVariant &cookie) const
{
@@ -202,7 +195,8 @@ VcsCommand *VcsBaseClientImpl::vcsExec(const QString &workingDirectory, const QS
return command;
}
-void VcsBaseClientImpl::vcsSynchronousExec(QtcProcess &proc, const QString &workingDir,
+void VcsBaseClientImpl::vcsSynchronousExec(QtcProcess &proc,
+ const FilePath &workingDir,
const QStringList &args,
unsigned flags,
QTextCodec *outputCodec) const
@@ -292,17 +286,19 @@ bool VcsBaseClient::synchronousClone(const FilePath &workingDir,
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-bool VcsBaseClient::synchronousAdd(const QString &workingDir, const QString &filename,
+bool VcsBaseClient::synchronousAdd(const FilePath &workingDir,
+ const QString &relFileName,
const QStringList &extraOptions)
{
QStringList args;
- args << vcsCommandString(AddCommand) << extraOptions << filename;
+ args << vcsCommandString(AddCommand) << extraOptions << relFileName;
QtcProcess proc;
vcsFullySynchronousExec(proc, workingDir, args);
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-bool VcsBaseClient::synchronousRemove(const QString &workingDir, const QString &filename,
+bool VcsBaseClient::synchronousRemove(const FilePath &workingDir,
+ const QString &filename,
const QStringList &extraOptions)
{
QStringList args;
@@ -312,8 +308,9 @@ bool VcsBaseClient::synchronousRemove(const QString &workingDir, const QString &
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-bool VcsBaseClient::synchronousMove(const QString &workingDir,
- const QString &from, const QString &to,
+bool VcsBaseClient::synchronousMove(const FilePath &workingDir,
+ const QString &from,
+ const QString &to,
const QStringList &extraOptions)
{
QStringList args;
@@ -323,7 +320,7 @@ bool VcsBaseClient::synchronousMove(const QString &workingDir,
return proc.result() == QtcProcess::FinishedWithSuccess;
}
-bool VcsBaseClient::synchronousPull(const QString &workingDir,
+bool VcsBaseClient::synchronousPull(const FilePath &workingDir,
const QString &srcLocation,
const QStringList &extraOptions)
{
@@ -338,11 +335,11 @@ bool VcsBaseClient::synchronousPull(const QString &workingDir,
vcsSynchronousExec(proc, workingDir, args, flags);
const bool ok = proc.result() == QtcProcess::FinishedWithSuccess;
if (ok)
- emit changed(QVariant(workingDir));
+ emit changed(QVariant(workingDir.toString()));
return ok;
}
-bool VcsBaseClient::synchronousPush(const QString &workingDir,
+bool VcsBaseClient::synchronousPush(const FilePath &workingDir,
const QString &dstLocation,
const QStringList &extraOptions)
{
@@ -359,7 +356,7 @@ bool VcsBaseClient::synchronousPush(const QString &workingDir,
}
VcsBaseEditorWidget *VcsBaseClient::annotate(
- const QString &workingDir, const QString &file, const QString &revision /* = QString() */,
+ const FilePath &workingDir, const QString &file, const QString &revision /* = QString() */,
int lineNumber /* = -1 */, const QStringList &extraOptions)
{
const QString vcsCmdString = vcsCommandString(AnnotateCommand);
@@ -380,7 +377,7 @@ VcsBaseEditorWidget *VcsBaseClient::annotate(
return editor;
}
-void VcsBaseClient::diff(const QString &workingDir, const QStringList &files,
+void VcsBaseClient::diff(const FilePath &workingDir, const QStringList &files,
const QStringList &extraOptions)
{
const QString vcsCmdString = vcsCommandString(DiffCommand);
@@ -418,10 +415,11 @@ void VcsBaseClient::diff(const QString &workingDir, const QStringList &files,
: VcsBaseEditor::getCodec(source);
VcsCommand *command = createCommand(workingDir, editor);
command->setCodec(codec);
- enqueueJob(command, args, workingDir, exitCodeInterpreter(DiffCommand));
+ enqueueJob(command, args, workingDir.toString(), exitCodeInterpreter(DiffCommand));
}
-void VcsBaseClient::log(const QString &workingDir, const QStringList &files,
+void VcsBaseClient::log(const FilePath &workingDir,
+ const QStringList &files,
const QStringList &extraOptions,
bool enableAnnotationContextMenu)
{
@@ -457,7 +455,7 @@ void VcsBaseClient::log(const QString &workingDir, const QStringList &files,
enqueueJob(createCommand(workingDir, editor), args);
}
-void VcsBaseClient::revertFile(const QString &workingDir,
+void VcsBaseClient::revertFile(const FilePath &workingDir,
const QString &file,
const QString &revision,
const QStringList &extraOptions)
@@ -466,29 +464,31 @@ void VcsBaseClient::revertFile(const QString &workingDir,
args << revisionSpec(revision) << extraOptions << file;
// Indicate repository change or file list
VcsCommand *cmd = createCommand(workingDir);
- cmd->setCookie(QStringList(workingDir + QLatin1Char('/') + file));
+ cmd->setCookie(QStringList(workingDir.pathAppended(file).toString()));
connect(cmd, &VcsCommand::success, this, &VcsBaseClient::changed, Qt::QueuedConnection);
enqueueJob(cmd, args);
}
-void VcsBaseClient::revertAll(const QString &workingDir, const QString &revision,
+void VcsBaseClient::revertAll(const FilePath &workingDir,
+ const QString &revision,
const QStringList &extraOptions)
{
QStringList args(vcsCommandString(RevertCommand));
args << revisionSpec(revision) << extraOptions;
// Indicate repository change or file list
VcsCommand *cmd = createCommand(workingDir);
- cmd->setCookie(QStringList(workingDir));
+ cmd->setCookie(QStringList(workingDir.toString()));
connect(cmd, &VcsCommand::success, this, &VcsBaseClient::changed, Qt::QueuedConnection);
enqueueJob(createCommand(workingDir), args);
}
-void VcsBaseClient::status(const QString &workingDir, const QString &file,
+void VcsBaseClient::status(const FilePath &workingDir,
+ const QString &file,
const QStringList &extraOptions)
{
QStringList args(vcsCommandString(StatusCommand));
args << extraOptions << file;
- VcsOutputWindow::setRepository(workingDir);
+ VcsOutputWindow::setRepository(workingDir.toString());
VcsCommand *cmd = createCommand(workingDir, nullptr, VcsWindowOutputBind);
connect(cmd, &VcsCommand::finished,
VcsOutputWindow::instance(), &VcsOutputWindow::clearRepository,
@@ -496,7 +496,7 @@ void VcsBaseClient::status(const QString &workingDir, const QString &file,
enqueueJob(cmd, args);
}
-void VcsBaseClient::emitParsedStatus(const QString &repository, const QStringList &extraOptions)
+void VcsBaseClient::emitParsedStatus(const FilePath &repository, const QStringList &extraOptions)
{
QStringList args(vcsCommandString(StatusCommand));
args << extraOptions;
@@ -543,7 +543,8 @@ void VcsBaseClient::setLogConfigCreator(ConfigCreator creator)
m_logConfigCreator = std::move(creator);
}
-void VcsBaseClient::import(const QString &repositoryRoot, const QStringList &files,
+void VcsBaseClient::import(const FilePath &repositoryRoot,
+ const QStringList &files,
const QStringList &extraOptions)
{
QStringList args(vcsCommandString(ImportCommand));
@@ -551,7 +552,8 @@ void VcsBaseClient::import(const QString &repositoryRoot, const QStringList &fil
enqueueJob(createCommand(repositoryRoot), args);
}
-void VcsBaseClient::view(const QString &source, const QString &id,
+void VcsBaseClient::view(const QString &source,
+ const QString &id,
const QStringList &extraOptions)
{
QStringList args;
@@ -563,22 +565,22 @@ void VcsBaseClient::view(const QString &source, const QString &id,
VcsBaseEditor::getCodec(source), "view", id);
const QFileInfo fi(source);
- const QString workingDirPath = fi.isFile() ? fi.absolutePath() : source;
+ const FilePath workingDirPath = FilePath::fromString(fi.isFile() ? fi.absolutePath() : source);
enqueueJob(createCommand(workingDirPath, editor), args);
}
-void VcsBaseClient::update(const QString &repositoryRoot, const QString &revision,
+void VcsBaseClient::update(const FilePath &repositoryRoot, const QString &revision,
const QStringList &extraOptions)
{
QStringList args(vcsCommandString(UpdateCommand));
args << revisionSpec(revision) << extraOptions;
VcsCommand *cmd = createCommand(repositoryRoot);
- cmd->setCookie(repositoryRoot);
+ cmd->setCookie(repositoryRoot.toString());
connect(cmd, &VcsCommand::success, this, &VcsBaseClient::changed, Qt::QueuedConnection);
enqueueJob(cmd, args);
}
-void VcsBaseClient::commit(const QString &repositoryRoot,
+void VcsBaseClient::commit(const FilePath &repositoryRoot,
const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions)
diff --git a/src/plugins/vcsbase/vcsbaseclient.h b/src/plugins/vcsbase/vcsbaseclient.h
index 01d9ce72173..77666748aa7 100644
--- a/src/plugins/vcsbase/vcsbaseclient.h
+++ b/src/plugins/vcsbase/vcsbaseclient.h
@@ -75,7 +75,7 @@ public:
const char *registerDynamicProperty,
const QString &dynamicPropertyValue) const;
- VcsCommand *createCommand(const QString &workingDirectory,
+ VcsCommand *createCommand(const Utils::FilePath &workingDirectory,
VcsBaseEditorWidget *editor = nullptr,
JobOutputBindMode mode = NoOutputBind) const;
@@ -86,9 +86,11 @@ public:
virtual Utils::Environment processEnvironment() const;
// VCS functionality:
- virtual VcsBaseEditorWidget *annotate(
- const QString &workingDir, const QString &file, const QString &revision = QString(),
- int lineNumber = -1, const QStringList &extraOptions = QStringList()) = 0;
+ virtual VcsBaseEditorWidget *annotate(const Utils::FilePath &workingDir,
+ const QString &file,
+ const QString &revision = {},
+ int lineNumber = -1,
+ const QStringList &extraOptions = {}) = 0;
static QStringList splitLines(const QString &s);
@@ -96,30 +98,26 @@ public:
// Fully synchronous VCS execution (QProcess-based)
void vcsFullySynchronousExec(Utils::QtcProcess &process,
- const QString &workingDir, const QStringList &args,
- unsigned flags = 0, int timeoutS = -1, QTextCodec *codec = nullptr) const;
- void vcsFullySynchronousExec(Utils::QtcProcess &process,
- const QString &workingDir, const Utils::CommandLine &cmdLine,
+ const Utils::FilePath &workingDir, const QStringList &args,
unsigned flags = 0, int timeoutS = -1, QTextCodec *codec = nullptr) const;
void vcsFullySynchronousExec(Utils::QtcProcess &process,
- const Utils::FilePath &workingDir, const QStringList &args,
+ const Utils::FilePath &workingDir, const Utils::CommandLine &cmdLine,
unsigned flags = 0, int timeoutS = -1, QTextCodec *codec = nullptr) const;
-
// Simple helper to execute a single command using createCommand and enqueueJob.
- VcsCommand *vcsExec(const QString &workingDirectory, const QStringList &arguments,
+ VcsCommand *vcsExec(const Utils::FilePath &workingDirectory, const QStringList &arguments,
VcsBaseEditorWidget *editor = nullptr, bool useOutputToWindow = false,
- unsigned additionalFlags = 0, const QVariant &cookie = QVariant()) const;
+ unsigned additionalFlags = 0, const QVariant &cookie = {}) const;
protected:
void resetCachedVcsInfo(const Utils::FilePath &workingDir);
- virtual void annotateRevisionRequested(const QString &workingDirectory, const QString &file,
+ virtual void annotateRevisionRequested(const Utils::FilePath &workingDirectory, const QString &file,
const QString &change, int line);
// Synchronous VCS execution using Utils::SynchronousProcess, with
// log windows updating (using VcsBasePlugin::runVcs with flags)
void vcsSynchronousExec(Utils::QtcProcess &proc,
- const QString &workingDir,
+ const Utils::FilePath &workingDir,
const QStringList &args,
unsigned flags = 0,
QTextCodec *outputCodec = nullptr) const;
@@ -151,43 +149,55 @@ public:
const QString &srcLocation,
const QString &dstLocation,
const QStringList &extraOptions = {});
- virtual bool synchronousAdd(const QString &workingDir, const QString &fileName,
- const QStringList &extraOptions = QStringList());
- virtual bool synchronousRemove(const QString &workingDir, const QString &fileName,
- const QStringList &extraOptions = QStringList());
- virtual bool synchronousMove(const QString &workingDir,
+ virtual bool synchronousAdd(const Utils::FilePath &workingDir,
+ const QString &relFileName,
+ const QStringList &extraOptions = {});
+ virtual bool synchronousRemove(const Utils::FilePath &workingDir,
+ const QString &fileName,
+ const QStringList &extraOptions = {});
+ virtual bool synchronousMove(const Utils::FilePath &workingDir,
const QString &from, const QString &to,
- const QStringList &extraOptions = QStringList());
- virtual bool synchronousPull(const QString &workingDir,
+ const QStringList &extraOptions = {});
+ virtual bool synchronousPull(const Utils::FilePath &workingDir,
const QString &srcLocation,
- const QStringList &extraOptions = QStringList());
- virtual bool synchronousPush(const QString &workingDir,
+ const QStringList &extraOptions = {});
+ virtual bool synchronousPush(const Utils::FilePath &workingDir,
const QString &dstLocation,
- const QStringList &extraOptions = QStringList());
- VcsBaseEditorWidget *annotate(
- const QString &workingDir, const QString &file, const QString &revision = QString(),
- int lineNumber = -1, const QStringList &extraOptions = QStringList()) override;
- virtual void diff(const QString &workingDir, const QStringList &files = QStringList(),
- const QStringList &extraOptions = QStringList());
- virtual void log(const QString &workingDir, const QStringList &files = QStringList(),
- const QStringList &extraOptions = QStringList(),
+ const QStringList &extraOptions = {});
+ VcsBaseEditorWidget *annotate(const Utils::FilePath &workingDir,
+ const QString &file,
+ const QString &revision = {},
+ int lineNumber = -1,
+ const QStringList &extraOptions = {}) override;
+ virtual void diff(const Utils::FilePath &workingDir,
+ const QStringList &files = {},
+ const QStringList &extraOptions = {});
+ virtual void log(const Utils::FilePath &workingDir,
+ const QStringList &files = {},
+ const QStringList &extraOptions = {},
bool enableAnnotationContextMenu = false);
- virtual void status(const QString &workingDir, const QString &file = QString(),
- const QStringList &extraOptions = QStringList());
- virtual void emitParsedStatus(const QString &repository,
- const QStringList &extraOptions = QStringList());
- virtual void revertFile(const QString &workingDir, const QString &file,
- const QString &revision = QString(),
- const QStringList &extraOptions = QStringList());
- virtual void revertAll(const QString &workingDir, const QString &revision = QString(),
- const QStringList &extraOptions = QStringList());
- virtual void import(const QString &repositoryRoot, const QStringList &files,
- const QStringList &extraOptions = QStringList());
- virtual void update(const QString &repositoryRoot, const QString &revision = QString(),
- const QStringList &extraOptions = QStringList());
- virtual void commit(const QString &repositoryRoot, const QStringList &files,
+ virtual void status(const Utils::FilePath &workingDir,
+ const QString &file = {},
+ const QStringList &extraOptions = {});
+ virtual void emitParsedStatus(const Utils::FilePath &repository,
+ const QStringList &extraOptions = {});
+ virtual void revertFile(const Utils::FilePath &workingDir,
+ const QString &file,
+ const QString &revision = {},
+ const QStringList &extraOptions = {});
+ virtual void revertAll(const Utils::FilePath &workingDir,
+ const QString &revision = {},
+ const QStringList &extraOptions = {});
+ virtual void import(const Utils::FilePath &repositoryRoot,
+ const QStringList &files,
+ const QStringList &extraOptions = {});
+ virtual void update(const Utils::FilePath &repositoryRoot,
+ const QString &revision = {},
+ const QStringList &extraOptions = {});
+ virtual void commit(const Utils::FilePath &repositoryRoot,
+ const QStringList &files,
const QString &commitMessageFile,
- const QStringList &extraOptions = QStringList());
+ const QStringList &extraOptions = {});
virtual Utils::FilePath findTopLevelForFile(const Utils::FilePath &/*file*/) const { return {}; }
diff --git a/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp b/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp
index aad270f5690..81c9234b3ea 100644
--- a/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp
+++ b/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp
@@ -241,7 +241,7 @@ void VcsBaseDiffEditorController::runCommand(const QList<QStringList> &args, uns
// and "Waiting for data..." will be shown.
d->cancelReload();
- d->m_command = new VcsCommand(workingDirectory(), d->m_processEnvironment);
+ d->m_command = new VcsCommand(FilePath::fromString(workingDirectory()), d->m_processEnvironment);
d->m_command->setDisplayName(d->m_displayName);
d->m_command->setCodec(codec ? codec : EditorManager::defaultTextCodec());
d->m_commandResultProxy = new VcsCommandResultProxy(d->m_command.data(), d);
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index 4eea9365b69..1bfe550bc46 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -91,6 +91,7 @@
\sa VcsBase::VcsBaseEditorWidget
*/
+using namespace Core;
using namespace TextEditor;
using namespace Utils;
@@ -836,14 +837,14 @@ void VcsBaseEditorWidget::setHighlightingEnabled(bool e)
dh->setEnabled(e);
}
-QString VcsBaseEditorWidget::workingDirectory() const
+FilePath VcsBaseEditorWidget::workingDirectory() const
{
- return d->m_workingDirectory;
+ return FilePath::fromString(d->m_workingDirectory);
}
-void VcsBaseEditorWidget::setWorkingDirectory(const QString &wd)
+void VcsBaseEditorWidget::setWorkingDirectory(const FilePath &wd)
{
- d->m_workingDirectory = wd;
+ d->m_workingDirectory = wd.toString();
}
QTextCodec *VcsBaseEditorWidget::codec() const
@@ -1297,6 +1298,11 @@ QTextCodec *VcsBaseEditor::getCodec(const QString &source)
return sys;
}
+QTextCodec *VcsBaseEditor::getCodec(const FilePath &workingDirectory, const QStringList &files)
+{
+ return getCodec(workingDirectory.toString(), files);
+}
+
QTextCodec *VcsBaseEditor::getCodec(const QString &workingDirectory, const QStringList &files)
{
if (files.empty())
@@ -1349,13 +1355,12 @@ bool VcsBaseEditor::gotoLineOfEditor(Core::IEditor *e, int lineNumber)
// Return source file or directory string depending on parameters
// ('git diff XX' -> 'XX' , 'git diff XX file' -> 'XX/file').
-QString VcsBaseEditor::getSource(const QString &workingDirectory,
- const QString &fileName)
+QString VcsBaseEditor::getSource(const FilePath &workingDirectory, const QString &fileName)
{
if (fileName.isEmpty())
- return workingDirectory;
+ return workingDirectory.toString();
- QString rc = workingDirectory;
+ QString rc = workingDirectory.toString();
const QChar slash = QLatin1Char('/');
if (!rc.isEmpty() && !(rc.endsWith(slash) || rc.endsWith(QLatin1Char('\\'))))
rc += slash;
@@ -1363,15 +1368,14 @@ QString VcsBaseEditor::getSource(const QString &workingDirectory,
return rc;
}
-QString VcsBaseEditor::getSource(const QString &workingDirectory,
- const QStringList &fileNames)
+QString VcsBaseEditor::getSource(const FilePath &workingDirectory, const QStringList &fileNames)
{
- return fileNames.size() == 1 ?
- getSource(workingDirectory, fileNames.front()) :
- workingDirectory;
+ return fileNames.size() == 1
+ ? getSource(workingDirectory, fileNames.front())
+ : workingDirectory.toString();
}
-QString VcsBaseEditor::getTitleId(const QString &workingDirectory,
+QString VcsBaseEditor::getTitleId(const FilePath &workingDirectory,
const QStringList &fileNames,
const QString &revision)
{
@@ -1384,7 +1388,7 @@ QString VcsBaseEditor::getTitleId(const QString &workingDirectory,
QString rc;
switch (nonEmptyFileNames.size()) {
case 0:
- rc = workingDirectory;
+ rc = workingDirectory.toString();
break;
case 1:
rc = nonEmptyFileNames.front();
@@ -1454,13 +1458,14 @@ QString VcsBaseEditorWidget::findDiffFile(const QString &f) const
if (sourceFileInfo.isFile())
return sourceFileInfo.absoluteFilePath();
- const QString topLevel = Core::VcsManager::findTopLevelForDirectory(sourceDir);
+ const FilePath topLevel =
+ VcsManager::findTopLevelForDirectory(FilePath::fromString(sourceDir));
if (topLevel.isEmpty())
return QString();
- const QFileInfo topLevelFileInfo(topLevel + slash + f);
- if (topLevelFileInfo.isFile())
- return topLevelFileInfo.absoluteFilePath();
+ const FilePath topLevelFile = topLevel.pathAppended(f);
+ if (topLevelFile.isFile())
+ return topLevelFile.absoluteFilePath().toString();
}
// 3) Try working directory
@@ -1488,7 +1493,7 @@ void VcsBaseEditorWidget::slotAnnotateRevision()
QString workingDirectory = d->m_workingDirectory;
if (workingDirectory.isEmpty())
workingDirectory = QFileInfo(fileName).absolutePath();
- emit annotateRevisionRequested(workingDirectory,
+ emit annotateRevisionRequested(FilePath::fromString(workingDirectory),
QDir(workingDirectory).relativeFilePath(fileName),
a->data().toString(), currentLine);
}
diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h
index 9b21e1da3d3..e6bc50119ef 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.h
+++ b/src/plugins/vcsbase/vcsbaseeditor.h
@@ -93,7 +93,8 @@ public:
// The codec should be set on editors displaying diff or annotation
// output.
static QTextCodec *getCodec(const QString &source);
- static QTextCodec *getCodec(const QString &workingDirectory, const QStringList &files);
+ static QTextCodec *getCodec(const Utils::FilePath &workingDirectory, const QStringList &files);
+ static QTextCodec *getCodec(const QString &workingDirectory, const QStringList &files); // FIXME: Remove
// Utility to return the widget from the IEditor returned by the editor
// manager which is a BaseTextEditor.
@@ -111,13 +112,13 @@ public:
// Convenience functions to determine the source to pass on to a diff
// editor if one has a call consisting of working directory and file arguments.
// ('git diff XX' -> 'XX' , 'git diff XX file' -> 'XX/file').
- static QString getSource(const QString &workingDirectory, const QString &fileName);
- static QString getSource(const QString &workingDirectory, const QStringList &fileNames);
+ static QString getSource(const Utils::FilePath &workingDirectory, const QString &fileName);
+ static QString getSource(const Utils::FilePath &workingDirectory, const QStringList &fileNames);
// Convenience functions to determine an title/id to identify the editor
// from the arguments (','-joined arguments or directory) + revision.
- static QString getTitleId(const QString &workingDirectory,
+ static QString getTitleId(const Utils::FilePath &workingDirectory,
const QStringList &fileNames,
- const QString &revision = QString());
+ const QString &revision = {});
/* Tagging editors: Sometimes, an editor should be re-used, for example, when showing
* a diff of the same file with different diff-options. In order to be able to find
@@ -132,7 +133,7 @@ public:
class VCSBASE_EXPORT VcsBaseEditorWidget : public TextEditor::TextEditorWidget
{
Q_PROPERTY(QString source READ source WRITE setSource)
- Q_PROPERTY(QString workingDirectory READ workingDirectory WRITE setWorkingDirectory)
+ Q_PROPERTY(Utils::FilePath workingDirectory READ workingDirectory WRITE setWorkingDirectory)
Q_PROPERTY(QTextCodec *codec READ codec WRITE setCodec)
Q_PROPERTY(QString annotateRevisionTextFormat READ annotateRevisionTextFormat WRITE setAnnotateRevisionTextFormat)
Q_PROPERTY(bool isFileLogAnnotateEnabled READ isFileLogAnnotateEnabled WRITE setFileLogAnnotateEnabled)
@@ -198,8 +199,8 @@ public:
void setCodec(QTextCodec *);
// Base directory for diff views
- QString workingDirectory() const;
- void setWorkingDirectory(const QString &wd);
+ Utils::FilePath workingDirectory() const;
+ void setWorkingDirectory(const Utils::FilePath &wd);
int firstLineNumber() const;
void setFirstLineNumber(int firstLineNumber);
@@ -220,7 +221,7 @@ signals:
// handled by the editor manager for convenience. They are emitted
// for LogOutput/AnnotateOutput content types.
void describeRequested(const Utils::FilePath &source, const QString &change);
- void annotateRevisionRequested(const QString &workingDirectory, const QString &file,
+ void annotateRevisionRequested(const Utils::FilePath &workingDirectory, const QString &file,
const QString &change, int lineNumber);
void diffChunkApplied(const VcsBase::DiffChunk &dc);
void diffChunkReverted(const VcsBase::DiffChunk &dc);
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index 16e7a2da608..961b64caeae 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -227,14 +227,14 @@ StateListener::StateListener(QObject *parent) : QObject(parent)
QString StateListener::windowTitleVcsTopic(const QString &filePath)
{
- QString searchPath;
+ FilePath searchPath;
if (!filePath.isEmpty()) {
- searchPath = QFileInfo(filePath).absolutePath();
+ searchPath = FilePath::fromString(filePath).absolutePath();
} else {
// use single project's information if there is only one loaded.
const QList<Project *> projects = SessionManager::projects();
if (projects.size() == 1)
- searchPath = projects.first()->projectDirectory().toString();
+ searchPath = projects.first()->projectDirectory();
}
if (searchPath.isEmpty())
return QString();
@@ -291,8 +291,8 @@ void StateListener::slotStateChanged()
state.currentFileDirectory = currentFi.absolutePath();
state.currentFileName = currentFi.fileName();
}
- fileControl = VcsManager::findVersionControlForDirectory(state.currentFileDirectory,
- &state.currentFileTopLevel);
+ fileControl = VcsManager::findVersionControlForDirectory(
+ FilePath::fromString(state.currentFileDirectory), &state.currentFileTopLevel);
}
if (!fileControl)
@@ -308,8 +308,8 @@ void StateListener::slotStateChanged()
if (currentProject) {
state.currentProjectPath = currentProject->projectDirectory().toString();
state.currentProjectName = currentProject->displayName();
- projectControl = VcsManager::findVersionControlForDirectory(state.currentProjectPath,
- &state.currentProjectTopLevel);
+ projectControl = VcsManager::findVersionControlForDirectory(
+ FilePath::fromString(state.currentProjectPath), &state.currentProjectTopLevel);
if (projectControl) {
// If we have both, let the file's one take preference
if (fileControl && projectControl != fileControl)
@@ -381,14 +381,14 @@ QString VcsBasePluginState::currentFileName() const
return data->m_state.currentFileName;
}
-QString VcsBasePluginState::currentFileTopLevel() const
+FilePath VcsBasePluginState::currentFileTopLevel() const
{
- return data->m_state.currentFileTopLevel;
+ return FilePath::fromString(data->m_state.currentFileTopLevel);
}
-QString VcsBasePluginState::currentFileDirectory() const
+FilePath VcsBasePluginState::currentFileDirectory() const
{
- return data->m_state.currentFileDirectory;
+ return FilePath::fromString(data->m_state.currentFileDirectory);
}
QString VcsBasePluginState::relativeCurrentFile() const
@@ -407,9 +407,9 @@ QString VcsBasePluginState::currentPatchFileDisplayName() const
return data->m_state.currentPatchFileDisplayName;
}
-QString VcsBasePluginState::currentProjectPath() const
+FilePath VcsBasePluginState::currentProjectPath() const
{
- return data->m_state.currentProjectPath;
+ return FilePath::fromString(data->m_state.currentProjectPath);
}
QString VcsBasePluginState::currentProjectName() const
@@ -417,9 +417,9 @@ QString VcsBasePluginState::currentProjectName() const
return data->m_state.currentProjectName;
}
-QString VcsBasePluginState::currentProjectTopLevel() const
+FilePath VcsBasePluginState::currentProjectTopLevel() const
{
- return data->m_state.currentProjectTopLevel;
+ return FilePath::fromString(data->m_state.currentProjectTopLevel);
}
QString VcsBasePluginState::relativeCurrentProject() const
@@ -435,9 +435,9 @@ bool VcsBasePluginState::hasTopLevel() const
return data->m_state.hasFile() || data->m_state.hasProject();
}
-QString VcsBasePluginState::topLevel() const
+FilePath VcsBasePluginState::topLevel() const
{
- return hasFile() ? data->m_state.currentFileTopLevel : data->m_state.currentProjectTopLevel;
+ return FilePath::fromString(hasFile() ? data->m_state.currentFileTopLevel : data->m_state.currentProjectTopLevel);
}
bool VcsBasePluginState::equals(const Internal::State &rhs) const
@@ -638,27 +638,28 @@ void VcsBasePluginPrivate::createRepository()
{
QTC_ASSERT(supportsOperation(IVersionControl::CreateRepositoryOperation), return);
// Find current starting directory
- QString directory;
+ FilePath directory;
if (const Project *currentProject = ProjectTree::currentProject())
- directory = currentProject->projectFilePath().absolutePath().toString();
+ directory = currentProject->projectFilePath().absolutePath();
// Prompt for a directory that is not under version control yet
QWidget *mw = ICore::dialogParent();
do {
- directory = QFileDialog::getExistingDirectory(mw, tr("Choose Repository Directory"), directory);
+ directory = FileUtils::getExistingDirectory(tr("Choose Repository Directory"), directory);
if (directory.isEmpty())
return;
const IVersionControl *managingControl = VcsManager::findVersionControlForDirectory(directory);
if (managingControl == nullptr)
break;
const QString question = tr("The directory \"%1\" is already managed by a version control system (%2)."
- " Would you like to specify another directory?").arg(directory, managingControl->displayName());
+ " Would you like to specify another directory?")
+ .arg(directory.toUserOutput(), managingControl->displayName());
if (!ask(mw, tr("Repository already under version control"), question))
return;
} while (true);
// Create
- const bool rc = vcsCreateRepository(FilePath::fromString(directory));
- const QString nativeDir = QDir::toNativeSeparators(directory);
+ const bool rc = vcsCreateRepository(directory);
+ const QString nativeDir = directory.toUserOutput();
if (rc) {
QMessageBox::information(mw, tr("Repository Created"),
tr("A version control repository has been created in %1.").
diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h
index d109c5901aa..461b902c122 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.h
+++ b/src/plugins/vcsbase/vcsbaseplugin.h
@@ -79,8 +79,8 @@ public:
// Current file.
QString currentFile() const;
QString currentFileName() const;
- QString currentFileDirectory() const;
- QString currentFileTopLevel() const;
+ Utils::FilePath currentFileDirectory() const;
+ Utils::FilePath currentFileTopLevel() const;
// Convenience: Returns file relative to top level.
QString relativeCurrentFile() const;
@@ -90,9 +90,9 @@ public:
QString currentPatchFileDisplayName() const;
// Current project.
- QString currentProjectPath() const;
+ Utils::FilePath currentProjectPath() const;
QString currentProjectName() const;
- QString currentProjectTopLevel() const;
+ Utils::FilePath currentProjectTopLevel() const;
/* Convenience: Returns project path relative to top level if it
* differs from top level (else empty string) as an argument list to do
* eg a 'vcs diff <args>' */
@@ -100,7 +100,7 @@ public:
// Top level directory for actions on the top level. Preferably
// the file one.
- QString topLevel() const;
+ Utils::FilePath topLevel() const;
bool equals(const VcsBasePluginState &rhs) const;
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index 229a18b4b22..b18d11183c4 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -141,7 +141,7 @@ public:
QToolBar *m_toolWidget = nullptr;
VcsBaseSubmitEditorParameters m_parameters;
QString m_displayName;
- QString m_checkScriptWorkingDirectory;
+ FilePath m_checkScriptWorkingDirectory;
SubmitEditorFile m_file;
QPointer<QAction> m_diffAction;
@@ -352,10 +352,10 @@ Core::IDocument *VcsBaseSubmitEditor::document() const
QString VcsBaseSubmitEditor::checkScriptWorkingDirectory() const
{
- return d->m_checkScriptWorkingDirectory;
+ return d->m_checkScriptWorkingDirectory.toString();
}
-void VcsBaseSubmitEditor::setCheckScriptWorkingDirectory(const QString &s)
+void VcsBaseSubmitEditor::setCheckScriptWorkingDirectory(const FilePath &s)
{
d->m_checkScriptWorkingDirectory = s;
}
@@ -638,13 +638,13 @@ bool VcsBaseSubmitEditor::checkSubmitMessage(QString *errorMessage) const
return rc;
}
-static inline QString msgCheckScript(const QString &workingDir, const QString &cmd)
+static QString msgCheckScript(const FilePath &workingDir, const QString &cmd)
{
const QString nativeCmd = QDir::toNativeSeparators(cmd);
return workingDir.isEmpty() ?
VcsBaseSubmitEditor::tr("Executing %1").arg(nativeCmd) :
VcsBaseSubmitEditor::tr("Executing [%1] %2").
- arg(QDir::toNativeSeparators(workingDir), nativeCmd);
+ arg(workingDir.toUserOutput(), nativeCmd);
}
bool VcsBaseSubmitEditor::runSubmitMessageCheckScript(const QString &checkScript, QString *errorMessage) const
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 73b4209b6e0..ef317981688 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -66,7 +66,6 @@ class VCSBASE_EXPORT VcsBaseSubmitEditor : public Core::IEditor
Q_PROPERTY(QAbstractItemView::SelectionMode fileListSelectionMode READ fileListSelectionMode WRITE setFileListSelectionMode DESIGNABLE true)
Q_PROPERTY(bool lineWrap READ lineWrap WRITE setLineWrap DESIGNABLE true)
Q_PROPERTY(int lineWrapWidth READ lineWrapWidth WRITE setLineWrapWidth DESIGNABLE true)
- Q_PROPERTY(QString checkScriptWorkingDirectory READ checkScriptWorkingDirectory WRITE setCheckScriptWorkingDirectory DESIGNABLE true)
Q_PROPERTY(bool emptyFileListEnabled READ isEmptyFileListEnabled WRITE setEmptyFileListEnabled DESIGNABLE true)
protected:
@@ -106,7 +105,7 @@ public:
void setLineWrapWidth(int);
QString checkScriptWorkingDirectory() const;
- void setCheckScriptWorkingDirectory(const QString &);
+ void setCheckScriptWorkingDirectory(const Utils::FilePath &);
Core::IDocument *document() const override;
diff --git a/src/plugins/vcsbase/vcscommand.cpp b/src/plugins/vcsbase/vcscommand.cpp
index 700943ce5c1..dad00d79075 100644
--- a/src/plugins/vcsbase/vcscommand.cpp
+++ b/src/plugins/vcsbase/vcscommand.cpp
@@ -37,11 +37,11 @@ using namespace Utils;
namespace VcsBase {
-VcsCommand::VcsCommand(const QString &workingDirectory, const Environment &environment) :
- Core::ShellCommand(workingDirectory, environment),
+VcsCommand::VcsCommand(const FilePath &workingDirectory, const Environment &environment) :
+ Core::ShellCommand(workingDirectory.toString(), environment),
m_preventRepositoryChanged(false)
{
- VcsOutputWindow::setRepository(workingDirectory);
+ VcsOutputWindow::setRepository(workingDirectory.toString());
setDisableUnixTerminal();
m_sshPrompt = VcsBase::sshPrompt();
diff --git a/src/plugins/vcsbase/vcscommand.h b/src/plugins/vcsbase/vcscommand.h
index d30f501543d..541da9822fe 100644
--- a/src/plugins/vcsbase/vcscommand.h
+++ b/src/plugins/vcsbase/vcscommand.h
@@ -43,7 +43,7 @@ public:
ExpectRepoChanges = 0x2000, // Expect changes in repository by the command
};
- VcsCommand(const QString &defaultWorkingDirectory, const Utils::Environment &environment);
+ VcsCommand(const Utils::FilePath &defaultWorkingDirectory, const Utils::Environment &environment);
const Utils::Environment processEnvironment() const override;
diff --git a/src/plugins/vcsbase/vcsoutputformatter.cpp b/src/plugins/vcsbase/vcsoutputformatter.cpp
index dd79f5d8914..60d929e50a0 100644
--- a/src/plugins/vcsbase/vcsoutputformatter.cpp
+++ b/src/plugins/vcsbase/vcsoutputformatter.cpp
@@ -66,7 +66,7 @@ Utils::OutputLineParser::Result VcsOutputLineParser::handleLine(const QString &t
return {Status::Done, linkSpecs};
}
-bool VcsOutputLineParser::handleVcsLink(const QString &workingDirectory, const QString &href)
+bool VcsOutputLineParser::handleVcsLink(const FilePath &workingDirectory, const QString &href)
{
using namespace Core;
QTC_ASSERT(!href.isEmpty(), return false);
@@ -75,12 +75,12 @@ bool VcsOutputLineParser::handleVcsLink(const QString &workingDirectory, const Q
return true;
}
if (IVersionControl *vcs = VcsManager::findVersionControlForDirectory(workingDirectory))
- return vcs->handleLink(FilePath::fromString(workingDirectory), href);
+ return vcs->handleLink(workingDirectory, href);
return false;
}
void VcsOutputLineParser::fillLinkContextMenu(
- QMenu *menu, const QString &workingDirectory, const QString &href)
+ QMenu *menu, const FilePath &workingDirectory, const QString &href)
{
QTC_ASSERT(!href.isEmpty(), return);
if (href.startsWith("https://") || href.startsWith("https://")) {
@@ -91,7 +91,7 @@ void VcsOutputLineParser::fillLinkContextMenu(
return;
}
if (Core::IVersionControl *vcs = Core::VcsManager::findVersionControlForDirectory(workingDirectory))
- vcs->fillLinkContextMenu(menu, FilePath::fromString(workingDirectory), href);
+ vcs->fillLinkContextMenu(menu, workingDirectory, href);
}
}
diff --git a/src/plugins/vcsbase/vcsoutputformatter.h b/src/plugins/vcsbase/vcsoutputformatter.h
index 7c8306811bc..bdc18cce544 100644
--- a/src/plugins/vcsbase/vcsoutputformatter.h
+++ b/src/plugins/vcsbase/vcsoutputformatter.h
@@ -36,8 +36,8 @@ class VcsOutputLineParser : public Utils::OutputLineParser
Q_OBJECT
public:
VcsOutputLineParser();
- void fillLinkContextMenu(QMenu *menu, const QString &workingDirectory, const QString &href);
- bool handleVcsLink(const QString &workingDirectory, const QString &href);
+ void fillLinkContextMenu(QMenu *menu, const Utils::FilePath &workingDirectory, const QString &href);
+ bool handleVcsLink(const Utils::FilePath &workingDirectory, const QString &href);
private:
Result handleLine(const QString &text, Utils::OutputFormat format) override;
diff --git a/src/plugins/vcsbase/vcsoutputwindow.cpp b/src/plugins/vcsbase/vcsoutputwindow.cpp
index 1069a3fa7dc..07d029ea6df 100644
--- a/src/plugins/vcsbase/vcsoutputwindow.cpp
+++ b/src/plugins/vcsbase/vcsoutputwindow.cpp
@@ -177,7 +177,7 @@ void OutputWindowPlainTextEdit::contextMenuEvent(QContextMenuEvent *event)
if (!repository.isEmpty()) {
if (VcsOutputLineParser * const p = parser()) {
if (!href.isEmpty())
- p->fillLinkContextMenu(menu, repository, href);
+ p->fillLinkContextMenu(menu, FilePath::fromString(repository), href);
}
}
QAction *openAction = nullptr;
@@ -229,7 +229,7 @@ void OutputWindowPlainTextEdit::handleLink(const QPoint &pos)
if (outputFormatter()->handleFileLink(href))
return;
if (VcsOutputLineParser * const p = parser())
- p->handleVcsLink(repository, href);
+ p->handleVcsLink(FilePath::fromString(repository), href);
}
void OutputWindowPlainTextEdit::appendLines(const QString &s, const QString &repository)
diff --git a/src/plugins/vcsbase/vcsplugin.cpp b/src/plugins/vcsbase/vcsplugin.cpp
index 52ff7034e25..4e553a0d422 100644
--- a/src/plugins/vcsbase/vcsplugin.cpp
+++ b/src/plugins/vcsbase/vcsplugin.cpp
@@ -112,7 +112,7 @@ bool VcsPlugin::initialize(const QStringList &arguments, QString *errorMessage)
[]() -> QString {
IVersionControl *vc = nullptr;
if (Project *project = ProjectTree::currentProject())
- vc = VcsManager::findVersionControlForDirectory(project->projectDirectory().toString());
+ vc = VcsManager::findVersionControlForDirectory(project->projectDirectory());
return vc ? vc->displayName() : QString();
});
@@ -122,7 +122,7 @@ bool VcsPlugin::initialize(const QStringList &arguments, QString *errorMessage)
IVersionControl *vc = nullptr;
QString topLevel;
if (Project *project = ProjectTree::currentProject())
- vc = VcsManager::findVersionControlForDirectory(project->projectDirectory().toString(), &topLevel);
+ vc = VcsManager::findVersionControlForDirectory(project->projectDirectory(), &topLevel);
return vc ? vc->vcsTopic(FilePath::fromString(topLevel)) : QString();
});
@@ -130,7 +130,7 @@ bool VcsPlugin::initialize(const QStringList &arguments, QString *errorMessage)
tr("The top level path to the repository the current project is in."),
[]() -> QString {
if (Project *project = ProjectTree::currentProject())
- return VcsManager::findTopLevelForDirectory(project->projectDirectory().toString());
+ return VcsManager::findTopLevelForDirectory(project->projectDirectory()).toString();
return QString();
});