forked from qt-creator/qt-creator
ProjectExplorer: Allow ProcessStep to resolve relative paths
Change-Id: I35a06f7d32e528cc8b524c6db86d8d62be2c8201 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -19,6 +19,8 @@ namespace ProjectExplorer::Internal {
|
|||||||
|
|
||||||
const char PROCESS_COMMAND_KEY[] = "ProjectExplorer.ProcessStep.Command";
|
const char PROCESS_COMMAND_KEY[] = "ProjectExplorer.ProcessStep.Command";
|
||||||
const char PROCESS_WORKINGDIRECTORY_KEY[] = "ProjectExplorer.ProcessStep.WorkingDirectory";
|
const char PROCESS_WORKINGDIRECTORY_KEY[] = "ProjectExplorer.ProcessStep.WorkingDirectory";
|
||||||
|
const char PROCESS_WORKINGDIRECTORYRELATIVEBASE_KEY[]
|
||||||
|
= "ProjectExplorer.ProcessStep.WorkingDirectoryRelativeBasePath";
|
||||||
const char PROCESS_ARGUMENTS_KEY[] = "ProjectExplorer.ProcessStep.Arguments";
|
const char PROCESS_ARGUMENTS_KEY[] = "ProjectExplorer.ProcessStep.Arguments";
|
||||||
|
|
||||||
ProcessStep::ProcessStep(BuildStepList *bsl, Id id)
|
ProcessStep::ProcessStep(BuildStepList *bsl, Id id)
|
||||||
@@ -38,10 +40,18 @@ ProcessStep::ProcessStep(BuildStepList *bsl, Id id)
|
|||||||
m_workingDirectory.setLabelText(Tr::tr("Working directory:"));
|
m_workingDirectory.setLabelText(Tr::tr("Working directory:"));
|
||||||
m_workingDirectory.setExpectedKind(PathChooser::Directory);
|
m_workingDirectory.setExpectedKind(PathChooser::Directory);
|
||||||
|
|
||||||
|
m_workingDirRelativeBasePath.setSettingsKey(PROCESS_WORKINGDIRECTORYRELATIVEBASE_KEY);
|
||||||
|
m_workingDirRelativeBasePath.setValue(QString());
|
||||||
|
m_workingDirRelativeBasePath.setVisible(false);
|
||||||
|
m_workingDirRelativeBasePath.setExpectedKind(PathChooser::Directory);
|
||||||
|
|
||||||
setWorkingDirectoryProvider([this] {
|
setWorkingDirectoryProvider([this] {
|
||||||
const FilePath workingDir = m_workingDirectory();
|
const FilePath workingDir = m_workingDirectory();
|
||||||
|
const FilePath relativeBasePath = m_workingDirRelativeBasePath();
|
||||||
if (workingDir.isEmpty())
|
if (workingDir.isEmpty())
|
||||||
return FilePath::fromString(fallbackWorkingDirectory());
|
return FilePath::fromString(fallbackWorkingDirectory());
|
||||||
|
else if (workingDir.isRelativePath() && !relativeBasePath.isEmpty())
|
||||||
|
return relativeBasePath.resolvePath(workingDir);
|
||||||
return workingDir;
|
return workingDir;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -69,9 +79,11 @@ void ProcessStep::setArguments(const QStringList &arguments)
|
|||||||
m_arguments.setValue(arguments.join(" "));
|
m_arguments.setValue(arguments.join(" "));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessStep::setWorkingDirectory(const Utils::FilePath &workingDirectory)
|
void ProcessStep::setWorkingDirectory(
|
||||||
|
const Utils::FilePath &workingDirectory, const Utils::FilePath &relativeBasePath)
|
||||||
{
|
{
|
||||||
m_workingDirectory.setValue(workingDirectory);
|
m_workingDirectory.setValue(workingDirectory);
|
||||||
|
m_workingDirRelativeBasePath.setValue(relativeBasePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessStep::setupOutputFormatter(OutputFormatter *formatter)
|
void ProcessStep::setupOutputFormatter(OutputFormatter *formatter)
|
||||||
|
@@ -15,7 +15,9 @@ public:
|
|||||||
|
|
||||||
void setCommand(const Utils::FilePath &command);
|
void setCommand(const Utils::FilePath &command);
|
||||||
void setArguments(const QStringList &arguments);
|
void setArguments(const QStringList &arguments);
|
||||||
void setWorkingDirectory(const Utils::FilePath &workingDirectory);
|
void setWorkingDirectory(
|
||||||
|
const Utils::FilePath &workingDirectory,
|
||||||
|
const Utils::FilePath &relativeBasePath = Utils::FilePath());
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupOutputFormatter(Utils::OutputFormatter *formatter) final;
|
void setupOutputFormatter(Utils::OutputFormatter *formatter) final;
|
||||||
@@ -23,6 +25,7 @@ private:
|
|||||||
Utils::FilePathAspect m_command{this};
|
Utils::FilePathAspect m_command{this};
|
||||||
Utils::StringAspect m_arguments{this};
|
Utils::StringAspect m_arguments{this};
|
||||||
Utils::FilePathAspect m_workingDirectory{this};
|
Utils::FilePathAspect m_workingDirectory{this};
|
||||||
|
Utils::FilePathAspect m_workingDirRelativeBasePath{this};
|
||||||
};
|
};
|
||||||
|
|
||||||
class ProcessStepFactory final : public BuildStepFactory
|
class ProcessStepFactory final : public BuildStepFactory
|
||||||
|
Reference in New Issue
Block a user