diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js index da54a81c8..db9e8450c 100755 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js @@ -2087,6 +2087,8 @@ RED.projects = (function() { var branchFilterTerm = ""; var branchFilterCreateItem; var branches = []; + var branchNames = new Set(); + var remotes = []; var branchPrefix = ""; var container = $('
').appendTo(options.container); @@ -2094,18 +2096,30 @@ RED.projects = (function() { delay: 200, change: function() { branchFilterTerm = $(this).val(); - if (/(\.\.|\/\.|[?*[~^: \\]|\/\/|\/.$|\/$)/.test(branchFilterTerm)) { + // if there is a / then + // - check what preceeds it is a known remote + + var valid = false; + var hasRemote = false; + var m = /^([^/]+)\/[^/.~*?\[]/.exec(branchFilterTerm); + if (m && remotes.indexOf(m[1]) > -1) { + valid = true; + hasRemote = true; + } + + if (!valid && /(\.\.|\/\.|[?*[~^: \\]|\/\/|\/.$|\/$)/.test(branchFilterTerm)) { if (!branchFilterCreateItem.hasClass("input-error")) { branchFilterCreateItem.addClass("input-error"); branchFilterCreateItem.find("i").addClass("fa-warning").removeClass("fa-code-fork"); } - branchFilterCreateItem.find("span").text(RED._("projects.create-branch-list.invalid")+": "+branchPrefix+branchFilterTerm); + branchFilterCreateItem.find("span").text(RED._("projects.create-branch-list.invalid")+": "+(hasRemote?"":branchPrefix)+branchFilterTerm); } else { if (branchFilterCreateItem.hasClass("input-error")) { branchFilterCreateItem.removeClass("input-error"); branchFilterCreateItem.find("i").removeClass("fa-warning").addClass("fa-code-fork"); } - branchFilterCreateItem.find(".red-ui-sidebar-vc-branch-list-entry-create-name").text(branchPrefix+branchFilterTerm); + branchFilterCreateItem.find("span").text(RED._("projects.create-branch-list.create")+":"); + branchFilterCreateItem.find(".red-ui-sidebar-vc-branch-list-entry-create-name").text((hasRemote?"":branchPrefix)+branchFilterTerm); } branchList.editableList("filter"); } @@ -2138,8 +2152,12 @@ RED.projects = (function() { if (!entry.hasOwnProperty('commit')) { body.name = branchFilter.val(); body.create = true; - if (options.remote) { - body.name = options.remote()+"/"+body.name; + + if (options.remotes) { + var m = /^([^/]+)\/[^/.~*?\[]/.exec(body.name); + if (!m || remotes.indexOf(m[1]) === -1) { + body.name = remotes[0]+"/"+body.name; + } } } else { if ($(this).hasClass('selected')) { @@ -2154,11 +2172,17 @@ RED.projects = (function() { }, filter: function(data) { var isCreateEntry = (!data.hasOwnProperty('commit')); + var filterTerm = branchFilterTerm; + if (remotes.length > 0) { + var m = /^([^/]+)\/[^/.~*?\[]/.exec(filterTerm); + if (filterTerm !== "" && (!m || remotes.indexOf(m[1]) == -1)) { + filterTerm = remotes[0]+"/"+filterTerm; + } + } return ( isCreateEntry && ( - branchFilterTerm !== "" && - branches.indexOf(branchPrefix+branchFilterTerm) === -1 + filterTerm !== "" && !branchNames.has(filterTerm) ) ) || ( @@ -2173,12 +2197,14 @@ RED.projects = (function() { branchList.editableList('empty'); var start = Date.now(); var spinner = addSpinnerOverlay(container).addClass("red-ui-component-spinner-contain"); - if (options.remote) { - branchPrefix = options.remote()+"/"; + if (options.remotes) { + remotes = options.remotes(); + branchPrefix = remotes[0]+"/"; } else { branchPrefix = ""; + remotes = []; } - + branchNames = new Set(); sendRequest({ url: url, type: "GET", @@ -2190,6 +2216,7 @@ RED.projects = (function() { branches = result.branches; result.branches.forEach(function(b) { branchList.editableList('addItem',b); + branchNames.add(b.name); }); branchList.editableList('addItem',{}); setTimeout(function() { diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/tab-versionControl.js b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/tab-versionControl.js index e367e9c95..7d20fe094 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/tab-versionControl.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/tab-versionControl.js @@ -830,10 +830,9 @@ RED.sidebar.versionControl = (function() { var remoteBranchList = utils.createBranchList({ placeholder: RED._("sidebar.project.versionControl.createRemoteBranchPlaceholder"), currentLabel: RED._("sidebar.project.versionControl.upstream"), - remote: function() { + remotes: function() { var project = RED.projects.getActiveProject(); - var remotes = Object.keys(project.git.remotes); - return remotes[0]; + return Object.keys(project.git.remotes); }, container: remoteBranchSubRow, onselect: function(body) {