mirror of https://github.com/node-red/node-red.git
Use absolute flow file path in project settings
This ensures the diff logic can recognise the project flow file and apply merge resolution to paths that git knowspull/2062/head
parent
e05ff01d57
commit
9d673a213e
|
@ -766,8 +766,7 @@ RED.projects.settings = (function() {
|
|||
row = $('<div class="user-settings-row"></div>').appendTo(filesContainer);
|
||||
$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.package")).appendTo(row);
|
||||
var packageFileLabel = $('<div class="uneditable-input" style="padding:0">').appendTo(row);
|
||||
var packageFileLabelPrefixText = $('<span style="display:inline-block; padding: 6px 0 6px 6px">').text("/").appendTo(packageFileLabel);
|
||||
var packageFileLabelText = $('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(activeProject.files.package||"package.json").appendTo(packageFileLabel);
|
||||
var packageFileLabelText = $('<span style="display:inline-block; padding: 6px">').text(activeProject.files.package||"package.json").appendTo(packageFileLabel);
|
||||
var packageFileInput = $('<input type="hidden">').val(activeProject.files.package||"package.json").appendTo(packageFileLabel);
|
||||
|
||||
var packageFileInputSearch = $('<button type="button" class="editor-button toggle single" style="border-top-right-radius: 4px; border-bottom-right-radius: 4px; width: 36px; height: 34px; position: absolute; top: -1px; right: -1px;"><i class="fa fa-folder-open-o"></i></button>')
|
||||
|
@ -791,8 +790,8 @@ RED.projects.settings = (function() {
|
|||
packageFileInput.val(result);
|
||||
packageFileLabelText.text(result);
|
||||
var rootDir = result.substring(0,result.length - 12);
|
||||
flowFileLabelPrefixText.text("/"+rootDir);
|
||||
credFileLabelPrefixText.text("/"+rootDir);
|
||||
flowFileLabelPrefixText.text(rootDir);
|
||||
credFileLabelPrefixText.text(rootDir);
|
||||
flowFileInputResize();
|
||||
packageFileSubLabel.hide();
|
||||
}
|
||||
|
@ -816,7 +815,7 @@ RED.projects.settings = (function() {
|
|||
}
|
||||
|
||||
|
||||
var projectPackage = "/"+(activeProject.files.package||"package.json");
|
||||
var projectPackage = activeProject.files.package||"package.json";
|
||||
var projectRoot = projectPackage.substring(0,projectPackage.length - 12);
|
||||
|
||||
// Flow files
|
||||
|
@ -824,13 +823,21 @@ RED.projects.settings = (function() {
|
|||
$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.flow")).appendTo(row);
|
||||
var flowFileLabel = $('<div class="uneditable-input" style="padding:0">').appendTo(row);
|
||||
var flowFileLabelPrefixText = $('<span style="display:inline-block; padding: 6px 0 6px 6px">').text(projectRoot).appendTo(flowFileLabel);
|
||||
var flowFileLabelText = $('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(activeProject.files.flow||"flows.json").appendTo(flowFileLabel);
|
||||
var flowFileName = "flows.json";
|
||||
if (activeProject.files.flow) {
|
||||
if (activeProject.files.flow.indexOf(projectRoot) === 0) {
|
||||
flowFileName = activeProject.files.flow.substring(projectRoot.length);
|
||||
} else {
|
||||
flowFileName = activeProject.files.flow;
|
||||
}
|
||||
}
|
||||
var flowFileLabelText = $('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(flowFileName).appendTo(flowFileLabel);
|
||||
var flowFileInputResize = function() {
|
||||
flowFileInput.css({
|
||||
"width": "calc(100% - "+(flowFileInputSearch.width() + flowFileLabelPrefixText.width())+"px)"
|
||||
});
|
||||
}
|
||||
var flowFileInput = $('<input type="text" style="padding-left:1px; margin-top: -2px; margin-bottom: 0;border: none;">').val(activeProject.files.flow||"flows.json").hide().appendTo(flowFileLabel);
|
||||
var flowFileInput = $('<input type="text" style="padding-left:1px; margin-top: -2px; margin-bottom: 0;border: none;">').val(flowFileName).hide().appendTo(flowFileLabel);
|
||||
var flowFileInputSearch = $('<button type="button" class="editor-button toggle single" style="border-top-right-radius: 4px; border-bottom-right-radius: 4px; width: 36px; height: 34px; position: absolute; top: -1px; right: -1px;"><i class="fa fa-folder-open-o"></i></button>')
|
||||
.hide()
|
||||
.appendTo(flowFileLabel)
|
||||
|
@ -875,11 +882,20 @@ RED.projects.settings = (function() {
|
|||
row = $('<div class="user-settings-row"></div>').appendTo(filesContainer);
|
||||
$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.credentials")).appendTo(row);
|
||||
|
||||
var credFileName = "flows_cred.json";
|
||||
if (activeProject.files.credentials) {
|
||||
if (activeProject.files.flow.indexOf(projectRoot) === 0) {
|
||||
credFileName = activeProject.files.credentials.substring(projectRoot.length);
|
||||
} else {
|
||||
credFileName = activeProject.files.credentials;
|
||||
}
|
||||
}
|
||||
|
||||
var credFileLabel = $('<div class="uneditable-input" style="padding:0">').appendTo(row);
|
||||
var credFileLabelPrefixText = $('<span style="display:inline-block;padding: 6px 0 6px 6px">').text(projectRoot).appendTo(credFileLabel);
|
||||
var credFileLabelText = $('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(activeProject.files.credentials||"flows_cred.json").appendTo(credFileLabel);
|
||||
var credFileLabelText = $('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(credFileName).appendTo(credFileLabel);
|
||||
|
||||
var credFileInput = $('<input type="hidden">').val(activeProject.files.credentials||"flows_cred.json").insertAfter(credFileLabel);
|
||||
var credFileInput = $('<input type="hidden">').val(credFileName).insertAfter(credFileLabel);
|
||||
|
||||
var checkFiles = function() {
|
||||
var saveDisabled;
|
||||
|
@ -1053,7 +1069,7 @@ RED.projects.settings = (function() {
|
|||
.appendTo(formButtons)
|
||||
.click(function(evt) {
|
||||
evt.preventDefault();
|
||||
var projectPackage = "/"+(activeProject.files.package||"package.json");
|
||||
var projectPackage = activeProject.files.package||"package.json";
|
||||
var projectRoot = projectPackage.substring(0,projectPackage.length - 12);
|
||||
flowFileLabelPrefixText.text(projectRoot);
|
||||
credFileLabelPrefixText.text(projectRoot);
|
||||
|
@ -1065,7 +1081,7 @@ RED.projects.settings = (function() {
|
|||
packageFileSubLabel.hide();
|
||||
}
|
||||
flowFileInput.val(flowFileLabelText.text());
|
||||
credFileLabelText.text(activeProject.files.credentials||"flows_cred.json");
|
||||
credFileLabelText.text(credFileName);
|
||||
hideEditForm();
|
||||
});
|
||||
var saveButton = $('<button type="button" class="editor-button">' + RED._("common.label.save") + '</button>')
|
||||
|
@ -1084,11 +1100,13 @@ RED.projects.settings = (function() {
|
|||
packageFileSubLabel.hide();
|
||||
hideEditForm();
|
||||
}
|
||||
var rootPath = packageFileInput.val();
|
||||
rootPath = rootPath.substring(0,rootPath.length-12);
|
||||
var payload = {
|
||||
files: {
|
||||
flow: flowFileInput.val(),
|
||||
credentials: credFileInput.val(),
|
||||
package: packageFileInput.val()
|
||||
package: packageFileInput.val(),
|
||||
flow: rootPath+flowFileInput.val(),
|
||||
credentials: rootPath+credFileInput.val()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1101,9 +1119,6 @@ RED.projects.settings = (function() {
|
|||
payload.currentCredentialSecret = credentialSecretExistingInput.val();
|
||||
}
|
||||
}
|
||||
|
||||
console.log(payload);
|
||||
return;
|
||||
RED.deploy.setDeployInflight(true);
|
||||
utils.sendRequest({
|
||||
url: "projects/"+activeProject.name,
|
||||
|
|
|
@ -84,14 +84,15 @@ Project.prototype.load = function () {
|
|||
return checkProjectFiles(project).then(function(missingFiles) {
|
||||
project.missingFiles = missingFiles;
|
||||
if (missingFiles.indexOf('package.json') === -1) {
|
||||
// We have a package.json in project.path+project.paths.root+"package.json"
|
||||
project.paths['package.json'] = fspath.join(project.paths.root,"package.json");
|
||||
promises.push(fs.readFile(fspath.join(project.path,project.paths['package.json']),"utf8").then(function(content) {
|
||||
try {
|
||||
project.package = util.parseJSON(content);
|
||||
if (project.package.hasOwnProperty('node-red')) {
|
||||
if (project.package['node-red'].hasOwnProperty('settings')) {
|
||||
project.paths.flowFile = project.package['node-red'].settings.flowFile;
|
||||
project.paths.credentialsFile = project.package['node-red'].settings.credentialsFile;
|
||||
project.paths.flowFile = fspath.join(project.paths.root,project.package['node-red'].settings.flowFile);
|
||||
project.paths.credentialsFile = fspath.join(project.paths.root,project.package['node-red'].settings.credentialsFile);
|
||||
}
|
||||
} else {
|
||||
// TODO: package.json doesn't have a node-red section
|
||||
|
@ -134,10 +135,6 @@ Project.prototype.load = function () {
|
|||
});
|
||||
};
|
||||
|
||||
Project.prototype.getFilePath = function(file) {
|
||||
return fspath.join(this.path,this.paths.root,this.paths[file])
|
||||
}
|
||||
|
||||
Project.prototype.initialise = function(user,data) {
|
||||
var project = this;
|
||||
// if (!this.empty) {
|
||||
|
@ -296,40 +293,39 @@ Project.prototype.update = function (user, data) {
|
|||
if (data.hasOwnProperty('files')) {
|
||||
this.package['node-red'] = this.package['node-red'] || { settings: {}};
|
||||
if (data.files.hasOwnProperty('package') && data.files.package !== fspath.join(this.paths.root,"package.json")) {
|
||||
// We have a package file. It could be one that doesn't exist yet, or
|
||||
// does exist and we need to load it.
|
||||
// We have a package file. It could be one that doesn't exist yet,
|
||||
// or it does exist and we need to load it.
|
||||
if (!/package\.json$/.test(data.files.package)) {
|
||||
return Promise.reject("Invalid package file: "+data.files.package)
|
||||
}
|
||||
var root = data.files.package.substring(0,data.files.package.length-12);
|
||||
this.paths.root = root;
|
||||
this.paths['package.json'] = 'package.json';
|
||||
this.paths['package.json'] = data.files.package;
|
||||
globalProjectSettings.projects[this.name].rootPath = root;
|
||||
saveSettings = true;
|
||||
// 1. check if it exists
|
||||
if (fs.existsSync(fspath.join(this.path,this.paths.root,this.paths['package.json']))) {
|
||||
if (fs.existsSync(fspath.join(this.path,this.paths['package.json']))) {
|
||||
// Load the existing one....
|
||||
} else {
|
||||
var newPackage = defaultFileSet["package.json"](this);
|
||||
fs.writeFileSync(fspath.join(this.path,this.paths.root,this.paths['package.json']),newPackage);
|
||||
fs.writeFileSync(fspath.join(this.path,this.paths['package.json']),newPackage);
|
||||
this.package = JSON.parse(newPackage);
|
||||
}
|
||||
reloadProject = true;
|
||||
flowFilesChanged = true;
|
||||
}
|
||||
|
||||
if (data.files.hasOwnProperty('flow') && this.package['node-red'].settings.flowFile !== data.files.flow) {
|
||||
if (data.files.hasOwnProperty('flow') && this.package['node-red'].settings.flowFile !== data.files.flow.substring(this.paths.root.length)) {
|
||||
this.paths.flowFile = data.files.flow;
|
||||
this.package['node-red'].settings.flowFile = data.files.flow;
|
||||
this.package['node-red'].settings.flowFile = data.files.flow.substring(this.paths.root.length);
|
||||
savePackage = true;
|
||||
flowFilesChanged = true;
|
||||
}
|
||||
if (data.files.hasOwnProperty('credentials') && this.package['node-red'].settings.credentialsFile !== data.files.credentials) {
|
||||
if (data.files.hasOwnProperty('credentials') && this.package['node-red'].settings.credentialsFile !== data.files.credentials.substring(this.paths.root.length)) {
|
||||
this.paths.credentialsFile = data.files.credentials;
|
||||
this.package['node-red'].settings.credentialsFile = data.files.credentials;
|
||||
this.package['node-red'].settings.credentialsFile = data.files.credentials.substring(this.paths.root.length);
|
||||
// Don't know if the credSecret is invalid or not so clear the flag
|
||||
delete this.credentialSecretInvalid;
|
||||
|
||||
savePackage = true;
|
||||
flowFilesChanged = true;
|
||||
}
|
||||
|
@ -779,7 +775,7 @@ Project.prototype.removeRemote = function(user, remote) {
|
|||
Project.prototype.getFlowFile = function() {
|
||||
// console.log("Project.getFlowFile = ",this.paths.flowFile);
|
||||
if (this.paths.flowFile) {
|
||||
return fspath.join(this.path,this.paths.root,this.paths.flowFile);
|
||||
return fspath.join(this.path,this.paths.flowFile);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
@ -796,7 +792,7 @@ Project.prototype.getFlowFileBackup = function() {
|
|||
Project.prototype.getCredentialsFile = function() {
|
||||
// console.log("Project.getCredentialsFile = ",this.paths.credentialsFile);
|
||||
if (this.paths.credentialsFile) {
|
||||
return fspath.join(this.path,this.paths.root,this.paths.credentialsFile);
|
||||
return fspath.join(this.path,this.paths.credentialsFile);
|
||||
} else {
|
||||
return this.paths.credentialsFile;
|
||||
}
|
||||
|
@ -920,14 +916,12 @@ function createDefaultProject(user, project) {
|
|||
});
|
||||
}
|
||||
function checkProjectFiles(project) {
|
||||
var projectPath = project.path;
|
||||
var projectRoot = project.paths.root;
|
||||
var promises = [];
|
||||
var paths = [];
|
||||
for (var file in defaultFileSet) {
|
||||
if (defaultFileSet.hasOwnProperty(file)) {
|
||||
paths.push(file);
|
||||
promises.push(fs.stat(fspath.join(projectPath,projectRoot,file)));
|
||||
promises.push(fs.stat(fspath.join(project.path,project.paths.root,file)));
|
||||
}
|
||||
}
|
||||
return when.settle(promises).then(function(results) {
|
||||
|
|
Loading…
Reference in New Issue