forked from qt-creator/qt-creator
VCS: Allow remote vcs operations
Both VcsBaseClient::vcsBinary() and VcsBaseClient::processEnvironment() get an additional parameter "FilePath target" to allow selecting binaries and environment based on where the repository is located. This allows to select e.g. a git binary on a remote device, and the environment of the remote device for each VCS operation. A bunch of file path operations are either fixed or ported to actually use FilePath correctly. Change-Id: I6afc645772fde3dff3ec19c13efe538e5888e952 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -914,13 +914,13 @@ void BranchModel::updateUpstreamStatus(BranchNode *node)
|
||||
return;
|
||||
|
||||
Process *process = new Process(node);
|
||||
process->setEnvironment(gitClient().processEnvironment());
|
||||
process->setEnvironment(gitClient().processEnvironment(d->workingDirectory));
|
||||
QStringList parameters = {"rev-list", "--no-color", "--count"};
|
||||
if (node->tracking.isEmpty())
|
||||
parameters += {node->fullRef(), "--not", "--remotes"};
|
||||
else
|
||||
parameters += {"--left-right", node->fullRef() + "..." + node->tracking};
|
||||
process->setCommand({gitClient().vcsBinary(), parameters});
|
||||
process->setCommand({gitClient().vcsBinary(d->workingDirectory), parameters});
|
||||
process->setWorkingDirectory(d->workingDirectory);
|
||||
connect(process, &Process::done, this, [this, process, node] {
|
||||
process->deleteLater();
|
||||
|
||||
@@ -33,8 +33,8 @@ ChangeSelectionDialog::ChangeSelectionDialog(const FilePath &workingDirectory, I
|
||||
QWidget *parent) :
|
||||
QDialog(parent)
|
||||
{
|
||||
m_gitExecutable = gitClient().vcsBinary();
|
||||
m_gitEnvironment = gitClient().processEnvironment();
|
||||
m_gitExecutable = gitClient().vcsBinary(workingDirectory);
|
||||
m_gitEnvironment = gitClient().processEnvironment(workingDirectory);
|
||||
|
||||
resize(550, 350);
|
||||
setWindowTitle(Tr::tr("Select a Git Commit"));
|
||||
@@ -209,8 +209,9 @@ void ChangeSelectionDialog::recalculateCompletion()
|
||||
return;
|
||||
|
||||
Process *process = new Process(this);
|
||||
process->setEnvironment(gitClient().processEnvironment());
|
||||
process->setCommand({gitClient().vcsBinary(), {"for-each-ref", "--format=%(refname:short)"}});
|
||||
process->setEnvironment(gitClient().processEnvironment(workingDir));
|
||||
process->setCommand(
|
||||
{gitClient().vcsBinary(workingDir), {"for-each-ref", "--format=%(refname:short)"}});
|
||||
process->setWorkingDirectory(workingDir);
|
||||
process->setUseCtrlCStub(true);
|
||||
connect(process, &Process::done, this, [this, process] {
|
||||
|
||||
@@ -266,7 +266,6 @@ QueryContext::QueryContext(const QString &query,
|
||||
m_output.append(m_process.readAllRawStandardOutput());
|
||||
});
|
||||
connect(&m_process, &Process::done, this, &QueryContext::processDone);
|
||||
m_process.setEnvironment(Git::Internal::gitClient().processEnvironment());
|
||||
|
||||
m_timer.setInterval(timeOutMS);
|
||||
m_timer.setSingleShot(true);
|
||||
@@ -286,6 +285,7 @@ void QueryContext::start()
|
||||
VcsOutputWindow::appendCommand(m_process.workingDirectory(), commandLine);
|
||||
m_timer.start();
|
||||
m_process.setCommand(commandLine);
|
||||
m_process.setEnvironment(Git::Internal::gitClient().processEnvironment(m_binary));
|
||||
auto progress = new Core::ProcessProgress(&m_process);
|
||||
progress->setDisplayName(Git::Tr::tr("Querying Gerrit"));
|
||||
m_process.start();
|
||||
|
||||
@@ -101,7 +101,7 @@ FetchContext::FetchContext(const std::shared_ptr<GerritChange> &change,
|
||||
VcsBase::VcsOutputWindow::append(QString::fromLocal8Bit(m_process.readAllRawStandardOutput()));
|
||||
});
|
||||
m_process.setWorkingDirectory(repository);
|
||||
m_process.setEnvironment(gitClient().processEnvironment());
|
||||
m_process.setEnvironment(gitClient().processEnvironment(repository));
|
||||
}
|
||||
|
||||
void FetchContext::start()
|
||||
@@ -279,7 +279,7 @@ QString GerritPlugin::branch(const FilePath &repository)
|
||||
void GerritPlugin::fetch(const std::shared_ptr<GerritChange> &change, int mode)
|
||||
{
|
||||
// Locate git.
|
||||
const Utils::FilePath git = gitClient().vcsBinary();
|
||||
const Utils::FilePath git = gitClient().vcsBinary(m_dialog->repositoryPath());
|
||||
if (git.isEmpty()) {
|
||||
VcsBase::VcsOutputWindow::appendError(Git::Tr::tr("Git is not available."));
|
||||
return;
|
||||
|
||||
@@ -827,15 +827,12 @@ FilePath GitClient::findRepositoryForDirectory(const FilePath &directory) const
|
||||
{
|
||||
if (directory.isEmpty() || directory.endsWith("/.git") || directory.path().contains("/.git/"))
|
||||
return {};
|
||||
// QFileInfo is outside loop, because it is faster this way
|
||||
QFileInfo fileInfo;
|
||||
FilePath parent;
|
||||
for (FilePath dir = directory; !dir.isEmpty(); dir = dir.parentDir()) {
|
||||
const FilePath gitName = dir.pathAppended(GIT_DIRECTORY);
|
||||
if (!gitName.exists())
|
||||
continue; // parent might exist
|
||||
fileInfo.setFile(gitName.toString());
|
||||
if (fileInfo.isFile())
|
||||
if (gitName.isFile())
|
||||
return dir;
|
||||
if (gitName.pathAppended("config").exists())
|
||||
return dir;
|
||||
@@ -929,8 +926,8 @@ void GitClient::requestReload(const QString &documentId, const FilePath &source,
|
||||
QTC_ASSERT(document, return);
|
||||
GitBaseDiffEditorController *controller = factory(document);
|
||||
QTC_ASSERT(controller, return);
|
||||
controller->setVcsBinary(settings().gitExecutable().value_or(FilePath{}));
|
||||
controller->setProcessEnvironment(processEnvironment());
|
||||
controller->setVcsBinary(vcsBinary(workingDirectory));
|
||||
controller->setProcessEnvironment(processEnvironment(workingDirectory));
|
||||
controller->setWorkingDirectory(workingDirectory);
|
||||
|
||||
using namespace std::placeholders;
|
||||
@@ -1047,9 +1044,8 @@ void GitClient::log(const FilePath &workingDirectory, const QString &fileName,
|
||||
const QString title = Tr::tr("Git Log \"%1\"").arg(msgArg);
|
||||
const Id editorId = Git::Constants::GIT_LOG_EDITOR_ID;
|
||||
const FilePath sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
|
||||
GitEditorWidget *editor = static_cast<GitEditorWidget *>(
|
||||
createVcsEditor(editorId, title, sourceFile,
|
||||
encoding(EncodingLogOutput), "logTitle", msgArg));
|
||||
GitEditorWidget *editor = static_cast<GitEditorWidget *>(createVcsEditor(
|
||||
editorId, title, sourceFile, encoding(EncodingLogOutput, sourceFile), "logTitle", msgArg));
|
||||
VcsBaseEditorConfig *argWidget = editor->editorConfig();
|
||||
if (!argWidget) {
|
||||
argWidget = new GitLogArgumentsWidget(!fileName.isEmpty(), editor);
|
||||
@@ -2089,9 +2085,9 @@ bool GitClient::synchronousApplyPatch(const FilePath &workingDirectory,
|
||||
return false;
|
||||
}
|
||||
|
||||
Environment GitClient::processEnvironment() const
|
||||
Environment GitClient::processEnvironment(const FilePath &appliedTo) const
|
||||
{
|
||||
Environment environment = VcsBaseClientImpl::processEnvironment();
|
||||
Environment environment;
|
||||
environment.prependOrSetPath(settings().path());
|
||||
if (HostOsInfo::isWindowsHost() && settings().winSetHomeEnvironment()) {
|
||||
QString homePath;
|
||||
@@ -2103,7 +2099,7 @@ Environment GitClient::processEnvironment() const
|
||||
environment.set("HOME", homePath);
|
||||
}
|
||||
environment.set("GIT_EDITOR", m_disableEditor ? "true" : m_gitQtcEditor);
|
||||
return environment;
|
||||
return environment.appliedToEnvironment(appliedTo.deviceEnvironment());
|
||||
}
|
||||
|
||||
bool GitClient::beginStashScope(const FilePath &workingDirectory, const QString &command,
|
||||
@@ -2387,7 +2383,7 @@ QStringList GitClient::synchronousRepositoryBranches(const QString &repositoryUR
|
||||
|
||||
void GitClient::launchGitK(const FilePath &workingDirectory, const QString &fileName) const
|
||||
{
|
||||
tryLaunchingGitK(processEnvironment(), workingDirectory, fileName);
|
||||
tryLaunchingGitK(processEnvironment(workingDirectory), workingDirectory, fileName);
|
||||
}
|
||||
|
||||
void GitClient::launchRepositoryBrowser(const FilePath &workingDirectory) const
|
||||
@@ -2420,7 +2416,7 @@ void GitClient::tryLaunchingGitK(const Environment &env,
|
||||
const QString &fileName,
|
||||
GitClient::GitKLaunchTrial trial) const
|
||||
{
|
||||
const FilePath gitBinDirectory = gitBinDir(trial, vcsBinary().parentDir());
|
||||
const FilePath gitBinDirectory = gitBinDir(trial, vcsBinary(workingDirectory).parentDir());
|
||||
FilePath binary = gitBinDirectory.pathAppended("gitk").withExecutableSuffix();
|
||||
QStringList arguments;
|
||||
if (HostOsInfo::isWindowsHost()) {
|
||||
@@ -2469,7 +2465,7 @@ void GitClient::handleGitKFailedToStart(const Environment &env,
|
||||
|
||||
GitKLaunchTrial nextTrial = None;
|
||||
|
||||
if (oldTrial == Bin && vcsBinary().parentDir().fileName() == "bin") {
|
||||
if (oldTrial == Bin && vcsBinary(workingDirectory).parentDir().fileName() == "bin") {
|
||||
nextTrial = ParentOfBin;
|
||||
} else if (oldTrial != SystemPath
|
||||
&& !Environment::systemEnvironment().searchInPath("gitk").isEmpty()) {
|
||||
@@ -2486,7 +2482,7 @@ void GitClient::handleGitKFailedToStart(const Environment &env,
|
||||
|
||||
bool GitClient::launchGitGui(const FilePath &workingDirectory) {
|
||||
bool success = true;
|
||||
FilePath gitBinary = vcsBinary();
|
||||
FilePath gitBinary = vcsBinary(workingDirectory);
|
||||
if (gitBinary.isEmpty()) {
|
||||
success = false;
|
||||
} else {
|
||||
@@ -2501,7 +2497,7 @@ bool GitClient::launchGitGui(const FilePath &workingDirectory) {
|
||||
|
||||
FilePath GitClient::gitBinDirectory() const
|
||||
{
|
||||
const QString git = vcsBinary().toString();
|
||||
const QString git = vcsBinary({}).toString();
|
||||
if (git.isEmpty())
|
||||
return {};
|
||||
|
||||
@@ -2529,7 +2525,7 @@ FilePath GitClient::gitBinDirectory() const
|
||||
bool GitClient::launchGitBash(const FilePath &workingDirectory)
|
||||
{
|
||||
bool success = true;
|
||||
const FilePath git = vcsBinary();
|
||||
const FilePath git = vcsBinary(workingDirectory);
|
||||
|
||||
if (git.isEmpty()) {
|
||||
success = false;
|
||||
@@ -2544,8 +2540,18 @@ bool GitClient::launchGitBash(const FilePath &workingDirectory)
|
||||
return success;
|
||||
}
|
||||
|
||||
FilePath GitClient::vcsBinary() const
|
||||
FilePath GitClient::vcsBinary(const FilePath &forDirectory) const
|
||||
{
|
||||
if (forDirectory.needsDevice()) {
|
||||
auto it = m_gitExecutableCache.find(forDirectory.withNewPath({}));
|
||||
if (it == m_gitExecutableCache.end()) {
|
||||
const FilePath gitBin = forDirectory.withNewPath("git").searchInPath();
|
||||
it = m_gitExecutableCache.insert(forDirectory.withNewPath({}),
|
||||
gitBin.isExecutableFile() ? gitBin : FilePath{});
|
||||
}
|
||||
|
||||
return it.value();
|
||||
}
|
||||
return settings().gitExecutable().value_or(FilePath{});
|
||||
}
|
||||
|
||||
@@ -2753,7 +2759,7 @@ bool GitClient::addAndCommit(const FilePath &repositoryDirectory,
|
||||
const GitSubmitEditorPanelData &data,
|
||||
CommitType commitType,
|
||||
const QString &amendSHA1,
|
||||
const QString &messageFile,
|
||||
const FilePath &messageFile,
|
||||
SubmitFileModel *model)
|
||||
{
|
||||
const QString renameSeparator = " -> ";
|
||||
@@ -2817,7 +2823,7 @@ bool GitClient::addAndCommit(const FilePath &repositoryDirectory,
|
||||
if (commitType == FixupCommit) {
|
||||
arguments << "--fixup" << amendSHA1;
|
||||
} else {
|
||||
arguments << "-F" << QDir::toNativeSeparators(messageFile);
|
||||
arguments << "-F" << messageFile.nativePath();
|
||||
if (commitType == AmendCommit)
|
||||
arguments << "--amend";
|
||||
const QString &authorString = data.authorString();
|
||||
@@ -3243,7 +3249,7 @@ void GitClient::vcsExecAbortable(const FilePath &workingDirectory, const QString
|
||||
command->addFlags(RunFlags::ShowStdOut | RunFlags::ShowSuccessMessage);
|
||||
// For rebase, Git might request an editor (which means the process keeps running until the
|
||||
// user closes it), so run without timeout.
|
||||
command->addJob({vcsBinary(), arguments}, isRebase ? 0 : vcsTimeoutS());
|
||||
command->addJob({vcsBinary(workingDirectory), arguments}, isRebase ? 0 : vcsTimeoutS());
|
||||
const QObject *actualContext = context ? context : this;
|
||||
connect(command, &VcsCommand::done, actualContext, [=] {
|
||||
const CommandResult result = CommandResult(*command);
|
||||
@@ -3461,7 +3467,7 @@ QFuture<QVersionNumber> GitClient::gitVersion() const
|
||||
|
||||
// Do not execute repeatedly if that fails (due to git
|
||||
// not being installed) until settings are changed.
|
||||
const FilePath newGitBinary = vcsBinary();
|
||||
const FilePath newGitBinary = vcsBinary({});
|
||||
const bool needToRunGit = m_gitVersionForBinary != newGitBinary && !newGitBinary.isEmpty();
|
||||
if (needToRunGit) {
|
||||
auto proc = new Process(const_cast<GitClient *>(this));
|
||||
@@ -3476,7 +3482,7 @@ QFuture<QVersionNumber> GitClient::gitVersion() const
|
||||
proc->deleteLater();
|
||||
});
|
||||
|
||||
proc->setEnvironment(processEnvironment());
|
||||
proc->setEnvironment(processEnvironment(newGitBinary));
|
||||
proc->setCommand({newGitBinary, {"--version"}});
|
||||
proc->start();
|
||||
} else {
|
||||
|
||||
@@ -123,7 +123,7 @@ public:
|
||||
GitClient();
|
||||
~GitClient();
|
||||
|
||||
Utils::FilePath vcsBinary() const override;
|
||||
Utils::FilePath vcsBinary(const Utils::FilePath &forDirectory) const override;
|
||||
QFuture<QVersionNumber> gitVersion() const;
|
||||
|
||||
void vcsExecAbortable(const Utils::FilePath &workingDirectory, const QStringList &arguments,
|
||||
@@ -295,7 +295,7 @@ public:
|
||||
const GitSubmitEditorPanelData &data,
|
||||
CommitType commitType,
|
||||
const QString &amendSHA1,
|
||||
const QString &messageFile,
|
||||
const Utils::FilePath &messageFile,
|
||||
VcsBase::SubmitFileModel *model);
|
||||
|
||||
enum StatusResult { StatusChanged, StatusUnchanged, StatusFailed };
|
||||
@@ -318,7 +318,7 @@ public:
|
||||
QStringList synchronousRepositoryBranches(const QString &repositoryURL,
|
||||
const Utils::FilePath &workingDirectory = {}) const;
|
||||
|
||||
Utils::Environment processEnvironment() const override;
|
||||
Utils::Environment processEnvironment(const Utils::FilePath &appliedTo) const override;
|
||||
|
||||
bool beginStashScope(const Utils::FilePath &workingDirectory, const QString &command,
|
||||
StashFlag flag = Default, PushAction pushAction = NoPush);
|
||||
@@ -395,6 +395,7 @@ private:
|
||||
|
||||
mutable Utils::FilePath m_gitVersionForBinary;
|
||||
mutable QVersionNumber m_cachedGitVersion;
|
||||
mutable QMap<Utils::FilePath, Utils::FilePath> m_gitExecutableCache;
|
||||
|
||||
QString m_gitQtcEditor;
|
||||
QMap<Utils::FilePath, StashInfo> m_stashInfo;
|
||||
|
||||
@@ -134,8 +134,8 @@ static void runGitGrep(QPromise<SearchResultItems> &promise, const FileFindParam
|
||||
const GitGrepParameters &gitParameters)
|
||||
{
|
||||
const auto setupProcess = [¶meters, gitParameters](Process &process) {
|
||||
const FilePath vcsBinary = gitClient().vcsBinary();
|
||||
const Environment environment = gitClient().processEnvironment();
|
||||
const FilePath vcsBinary = gitClient().vcsBinary(parameters.searchDir);
|
||||
const Environment environment = gitClient().processEnvironment(vcsBinary);
|
||||
|
||||
QStringList arguments = {
|
||||
"-c", "color.grep.match=bold red",
|
||||
|
||||
@@ -281,7 +281,7 @@ public:
|
||||
const Context &context);
|
||||
|
||||
void updateRepositoryBrowserAction();
|
||||
IEditor *openSubmitEditor(const QString &fileName, const CommitData &cd);
|
||||
IEditor *openSubmitEditor(const FilePath &fileName, const CommitData &cd);
|
||||
void cleanCommitMessageFile();
|
||||
void cleanRepository(const FilePath &directory);
|
||||
void applyPatch(const FilePath &workingDirectory, QString file = {});
|
||||
@@ -319,7 +319,7 @@ public:
|
||||
BranchViewFactory m_branchViewFactory;
|
||||
QPointer<RemoteDialog> m_remoteDialog;
|
||||
FilePath m_submitRepository;
|
||||
QString m_commitMessageFileName;
|
||||
FilePath m_commitMessageFileName;
|
||||
|
||||
InstantBlame m_instantBlame;
|
||||
|
||||
@@ -402,7 +402,7 @@ void GitPluginPrivate::onApplySettings()
|
||||
void GitPluginPrivate::cleanCommitMessageFile()
|
||||
{
|
||||
if (!m_commitMessageFileName.isEmpty()) {
|
||||
QFile::remove(m_commitMessageFileName);
|
||||
m_commitMessageFileName.removeFile();
|
||||
m_commitMessageFileName.clear();
|
||||
}
|
||||
}
|
||||
@@ -986,8 +986,12 @@ void GitPluginPrivate::blameFile()
|
||||
const FilePath fileName = state.currentFile().canonicalPath();
|
||||
FilePath topLevel;
|
||||
VcsManager::findVersionControlForDirectory(fileName.parentDir(), &topLevel);
|
||||
gitClient().annotate(topLevel, fileName.relativeChildPath(topLevel).toString(),
|
||||
lineNumber, {}, extraOptions, firstLine);
|
||||
gitClient().annotate(topLevel,
|
||||
fileName.relativeChildPath(topLevel).path(),
|
||||
lineNumber,
|
||||
{},
|
||||
extraOptions,
|
||||
firstLine);
|
||||
}
|
||||
|
||||
void GitPluginPrivate::logProject()
|
||||
@@ -1247,7 +1251,9 @@ void GitPluginPrivate::startCommit(CommitType commitType)
|
||||
m_submitRepository = data.panelInfo.repository;
|
||||
|
||||
// Start new temp file with message template
|
||||
TempFileSaver saver;
|
||||
TempFileSaver saver(
|
||||
data.panelInfo.repository.tmpDir().value_or(data.panelInfo.repository.withNewPath(""))
|
||||
/ "commit-msg.XXXXXX");
|
||||
// Keep the file alive, else it removes self and forgets its name
|
||||
saver.setAutoRemove(false);
|
||||
saver.write(commitTemplate.toLocal8Bit());
|
||||
@@ -1255,7 +1261,7 @@ void GitPluginPrivate::startCommit(CommitType commitType)
|
||||
VcsOutputWindow::appendError(saver.errorString());
|
||||
return;
|
||||
}
|
||||
m_commitMessageFileName = saver.filePath().toString();
|
||||
m_commitMessageFileName = saver.filePath();
|
||||
openSubmitEditor(m_commitMessageFileName, data);
|
||||
}
|
||||
|
||||
@@ -1284,10 +1290,9 @@ void GitPluginPrivate::instantBlameOnce()
|
||||
m_instantBlame.once();
|
||||
}
|
||||
|
||||
IEditor *GitPluginPrivate::openSubmitEditor(const QString &fileName, const CommitData &cd)
|
||||
IEditor *GitPluginPrivate::openSubmitEditor(const FilePath &fileName, const CommitData &cd)
|
||||
{
|
||||
IEditor *editor = EditorManager::openEditor(FilePath::fromString(fileName),
|
||||
Constants::GITSUBMITEDITOR_ID);
|
||||
IEditor *editor = EditorManager::openEditor(fileName, Constants::GITSUBMITEDITOR_ID);
|
||||
auto submitEditor = qobject_cast<GitSubmitEditor*>(editor);
|
||||
QTC_ASSERT(submitEditor, return nullptr);
|
||||
setSubmitEditor(submitEditor);
|
||||
@@ -1320,10 +1325,9 @@ bool GitPluginPrivate::activateCommit()
|
||||
QTC_ASSERT(editorDocument, return true);
|
||||
// Submit editor closing. Make it write out the commit message
|
||||
// and retrieve files
|
||||
const QFileInfo editorFile = editorDocument->filePath().toFileInfo();
|
||||
const QFileInfo changeFile(m_commitMessageFileName);
|
||||
|
||||
// Paranoia!
|
||||
if (editorFile.absoluteFilePath() != changeFile.absoluteFilePath())
|
||||
if (!editorDocument->filePath().isSameFile(m_commitMessageFileName))
|
||||
return true;
|
||||
|
||||
auto model = qobject_cast<SubmitFileModel *>(editor->fileModel());
|
||||
@@ -1700,7 +1704,7 @@ bool GitPluginPrivate::isVcsFileOrDirectory(const FilePath &filePath) const
|
||||
|
||||
bool GitPluginPrivate::isConfigured() const
|
||||
{
|
||||
return !gitClient().vcsBinary().isEmpty();
|
||||
return !gitClient().vcsBinary({}).isEmpty();
|
||||
}
|
||||
|
||||
bool GitPluginPrivate::supportsOperation(Operation operation) const
|
||||
@@ -1765,9 +1769,10 @@ VcsCommand *GitPluginPrivate::createInitialCheckoutCommand(const QString &url,
|
||||
QStringList args = {"clone", "--progress"};
|
||||
args << extraArgs << url << localName;
|
||||
|
||||
auto command = VcsBaseClient::createVcsCommand(baseDirectory, gitClient().processEnvironment());
|
||||
auto command = VcsBaseClient::createVcsCommand(baseDirectory,
|
||||
gitClient().processEnvironment(baseDirectory));
|
||||
command->addFlags(RunFlags::SuppressStdErr);
|
||||
command->addJob({gitClient().vcsBinary(), args}, -1);
|
||||
command->addJob({gitClient().vcsBinary(baseDirectory), args}, -1);
|
||||
return command;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ void MergeTool::start(const FilePath &workingDirectory, const QStringList &files
|
||||
{
|
||||
QStringList arguments;
|
||||
arguments << "mergetool" << "-y" << files;
|
||||
const CommandLine cmd = {gitClient().vcsBinary(), arguments};
|
||||
const CommandLine cmd = {gitClient().vcsBinary(workingDirectory), arguments};
|
||||
VcsOutputWindow::appendCommand(workingDirectory, cmd);
|
||||
m_process.setCommand(cmd);
|
||||
m_process.setWorkingDirectory(workingDirectory);
|
||||
|
||||
Reference in New Issue
Block a user