mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Handle cloning a project without package.json
This commit is contained in:
parent
c4d1ccb6f5
commit
53e3e08d70
@ -214,6 +214,18 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
} else if (msg.error === "missing_package_file") {
|
||||||
|
if (RED.user.hasPermission("projects.write")) {
|
||||||
|
options.buttons = [
|
||||||
|
{
|
||||||
|
text: "Create default package file",
|
||||||
|
click: function() {
|
||||||
|
persistentNotifications[notificationId].hideNotification();
|
||||||
|
RED.projects.createDefaultPackageFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
} else if (msg.error === "project_empty") {
|
} else if (msg.error === "project_empty") {
|
||||||
if (RED.user.hasPermission("projects.write")) {
|
if (RED.user.hasPermission("projects.write")) {
|
||||||
options.buttons = [
|
options.buttons = [
|
||||||
|
@ -2251,6 +2251,43 @@ RED.projects = (function() {
|
|||||||
createProjectOptions = {};
|
createProjectOptions = {};
|
||||||
show('default-files',{existingProject: true});
|
show('default-files',{existingProject: true});
|
||||||
}
|
}
|
||||||
|
function createDefaultPackageFile() {
|
||||||
|
RED.deploy.setDeployInflight(true);
|
||||||
|
RED.projects.settings.switchProject(activeProject.name);
|
||||||
|
|
||||||
|
var method = "PUT";
|
||||||
|
var url = "projects/"+activeProject.name;
|
||||||
|
var createProjectOptions = {
|
||||||
|
initialise: true
|
||||||
|
};
|
||||||
|
sendRequest({
|
||||||
|
url: url,
|
||||||
|
type: method,
|
||||||
|
requireCleanWorkspace: true,
|
||||||
|
handleAuthFail: false,
|
||||||
|
responses: {
|
||||||
|
200: function(data) { },
|
||||||
|
400: {
|
||||||
|
'git_error': function(error) {
|
||||||
|
console.log("git error",error);
|
||||||
|
},
|
||||||
|
'missing_flow_file': function(error) {
|
||||||
|
// This is a natural next error - but let the runtime event
|
||||||
|
// trigger the dialog rather than double-report it.
|
||||||
|
$( dialog ).dialog( "close" );
|
||||||
|
},
|
||||||
|
'*': function(error) {
|
||||||
|
reportUnexpectedError(error);
|
||||||
|
$( dialog ).dialog( "close" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},createProjectOptions).always(function() {
|
||||||
|
setTimeout(function() {
|
||||||
|
RED.deploy.setDeployInflight(false);
|
||||||
|
},500);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function refresh(done) {
|
function refresh(done) {
|
||||||
$.getJSON("projects",function(data) {
|
$.getJSON("projects",function(data) {
|
||||||
@ -2330,6 +2367,7 @@ RED.projects = (function() {
|
|||||||
RED.projects.settings.show('deps');
|
RED.projects.settings.show('deps');
|
||||||
},
|
},
|
||||||
createDefaultFileSet: createDefaultFileSet,
|
createDefaultFileSet: createDefaultFileSet,
|
||||||
|
createDefaultPackageFile: createDefaultPackageFile,
|
||||||
// showSidebar: showSidebar,
|
// showSidebar: showSidebar,
|
||||||
refresh: refresh,
|
refresh: refresh,
|
||||||
editProject: function() {
|
editProject: function() {
|
||||||
|
@ -93,6 +93,7 @@
|
|||||||
"credentials_load_failed": "<p>Flows stopped as the credentials could not be decrypted.</p><p>The flow credential file is encrypted, but the project's encryption key is missing or invalid.</p>",
|
"credentials_load_failed": "<p>Flows stopped as the credentials could not be decrypted.</p><p>The flow credential file is encrypted, but the project's encryption key is missing or invalid.</p>",
|
||||||
"credentials_load_failed_reset":"<p>Credentials could not be decrypted</p><p>The flow credential file is encrypted, but the project's encryption key is missing or invalid.</p><p>The flow credential file will be reset on the next deployment. Any existing flow credentials will be cleared.</p>",
|
"credentials_load_failed_reset":"<p>Credentials could not be decrypted</p><p>The flow credential file is encrypted, but the project's encryption key is missing or invalid.</p><p>The flow credential file will be reset on the next deployment. Any existing flow credentials will be cleared.</p>",
|
||||||
"missing_flow_file": "<p>Project flow file not found.</p><p>The project is not configured with a flow file.</p>",
|
"missing_flow_file": "<p>Project flow file not found.</p><p>The project is not configured with a flow file.</p>",
|
||||||
|
"missing_package_file": "<p>Project package file not found.</p><p>The project is missing a package.json file.</p>",
|
||||||
"project_empty": "<p>The project is empty.</p><p>Do you want to create a default set of project files?<br/>Otherwise, you will have to manually add files to the project outside of the editor.</p>",
|
"project_empty": "<p>The project is empty.</p><p>Do you want to create a default set of project files?<br/>Otherwise, you will have to manually add files to the project outside of the editor.</p>",
|
||||||
"project_not_found": "<p>Project '__project__' not found.</p>",
|
"project_not_found": "<p>Project '__project__' not found.</p>",
|
||||||
"git_merge_conflict": "<p>Automatic merging of changes failed.</p><p>Fix the unmerged conflicts then commit the results.</p>"
|
"git_merge_conflict": "<p>Automatic merging of changes failed.</p><p>Fix the unmerged conflicts then commit the results.</p>"
|
||||||
|
@ -81,9 +81,7 @@ Project.prototype.load = function () {
|
|||||||
|
|
||||||
var promises = [];
|
var promises = [];
|
||||||
return checkProjectFiles(project).then(function(missingFiles) {
|
return checkProjectFiles(project).then(function(missingFiles) {
|
||||||
if (missingFiles.length > 0) {
|
project.missingFiles = missingFiles;
|
||||||
project.missingFiles = missingFiles;
|
|
||||||
}
|
|
||||||
if (missingFiles.indexOf('package.json') === -1) {
|
if (missingFiles.indexOf('package.json') === -1) {
|
||||||
project.paths['package.json'] = fspath.join(project.path,"package.json");
|
project.paths['package.json'] = fspath.join(project.path,"package.json");
|
||||||
promises.push(fs.readFile(project.paths['package.json'],"utf8").then(function(content) {
|
promises.push(fs.readFile(project.paths['package.json'],"utf8").then(function(content) {
|
||||||
@ -135,9 +133,9 @@ Project.prototype.load = function () {
|
|||||||
|
|
||||||
Project.prototype.initialise = function(user,data) {
|
Project.prototype.initialise = function(user,data) {
|
||||||
var project = this;
|
var project = this;
|
||||||
if (!this.empty) {
|
// if (!this.empty) {
|
||||||
throw new Error("Cannot initialise non-empty project");
|
// throw new Error("Cannot initialise non-empty project");
|
||||||
}
|
// }
|
||||||
var files = Object.keys(defaultFileSet);
|
var files = Object.keys(defaultFileSet);
|
||||||
var promises = [];
|
var promises = [];
|
||||||
|
|
||||||
@ -148,17 +146,25 @@ Project.prototype.initialise = function(user,data) {
|
|||||||
promises.push(settings.set('projects',projects));
|
promises.push(settings.set('projects',projects));
|
||||||
}
|
}
|
||||||
|
|
||||||
project.files.flow = data.files.flow;
|
if (data.hasOwnProperty('files')) {
|
||||||
project.files.credentials = data.files.credentials;
|
if (data.files.hasOwnProperty('flow') && data.files.hasOwnProperty('credentials')) {
|
||||||
var flowFilePath = fspath.join(project.path,project.files.flow);
|
project.files.flow = data.files.flow;
|
||||||
var credsFilePath = getCredentialsFilename(flowFilePath);
|
project.files.credentials = data.files.credentials;
|
||||||
promises.push(util.writeFile(flowFilePath,"[]"));
|
var flowFilePath = fspath.join(project.path,project.files.flow);
|
||||||
promises.push(util.writeFile(credsFilePath,"{}"));
|
var credsFilePath = getCredentialsFilename(flowFilePath);
|
||||||
files.push(project.files.flow);
|
promises.push(util.writeFile(flowFilePath,"[]"));
|
||||||
files.push(project.files.credentials);
|
promises.push(util.writeFile(credsFilePath,"{}"));
|
||||||
|
files.push(project.files.flow);
|
||||||
|
files.push(project.files.credentials);
|
||||||
|
}
|
||||||
|
}
|
||||||
for (var file in defaultFileSet) {
|
for (var file in defaultFileSet) {
|
||||||
if (defaultFileSet.hasOwnProperty(file)) {
|
if (defaultFileSet.hasOwnProperty(file)) {
|
||||||
promises.push(util.writeFile(fspath.join(project.path,file),defaultFileSet[file](project)));
|
var path = fspath.join(project.path,file);
|
||||||
|
if (!fs.existsSync(path)) {
|
||||||
|
promises.push(util.writeFile(path,defaultFileSet[file](project)));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,6 +479,12 @@ function getFlows() {
|
|||||||
error.code = "project_empty";
|
error.code = "project_empty";
|
||||||
return when.reject(error);
|
return when.reject(error);
|
||||||
}
|
}
|
||||||
|
if (activeProject.missingFiles && activeProject.missingFiles.indexOf('package.json') !== -1) {
|
||||||
|
log.warn("Project missing package.json");
|
||||||
|
error = new Error("Project missing package.json");
|
||||||
|
error.code = "missing_package_file";
|
||||||
|
return when.reject(error);
|
||||||
|
}
|
||||||
if (!activeProject.getFlowFile()) {
|
if (!activeProject.getFlowFile()) {
|
||||||
log.warn("Project has no flow file");
|
log.warn("Project has no flow file");
|
||||||
error = new Error("Project has no flow file");
|
error = new Error("Project has no flow file");
|
||||||
|
Loading…
Reference in New Issue
Block a user