From bf5913d81de2855004e306f2e4afdf2529645652 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Jul 2023 13:05:04 +0000 Subject: [PATCH 1/4] Bump semver from 5.7.1 to 5.7.2 Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2) --- updated-dependencies: - dependency-name: semver dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 08c7d2c9..ca3a77ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3379,12 +3379,12 @@ semver-greatest-satisfied-range@^1.1.0: sver-compat "^1.5.0" "semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" set-blocking@^2.0.0: version "2.0.0" From 229415444ec509f41ae338e3cdd3b8da0db4530e Mon Sep 17 00:00:00 2001 From: Jack Bird Date: Sat, 15 Jul 2023 20:56:07 +0100 Subject: [PATCH 2/4] Added -d and --delete to git push to delete remote branches --- src/js/git/commands.js | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/src/js/git/commands.js b/src/js/git/commands.js index 49e3675c..56e46e98 100644 --- a/src/js/git/commands.js +++ b/src/js/git/commands.js @@ -3,6 +3,7 @@ var intl = require('../intl'); var Graph = require('../graph'); var Errors = require('../util/errors'); +const { compact } = require('underscore'); var CommandProcessError = Errors.CommandProcessError; var GitError = Errors.GitError; var Warning = Errors.Warning; @@ -744,7 +745,9 @@ var commandConfig = { push: { regex: /^git +push($|\s)/, options: [ - '--force' + '--force', + '--delete', + '-d' ], execute: function(engine, command) { if (!engine.hasOrigin()) { @@ -758,14 +761,46 @@ var commandConfig = { var source; var sourceObj; var commandOptions = command.getOptionsMap(); + var isDelete = commandOptions['-d'] || commandOptions['--delete']; // git push is pretty complex in terms of // the arguments it wants as well... get ready! var generalArgs = command.getGeneralArgs(); + + // put the commandOption of delete back in the generalArgs + // as it is a flag option + if(isDelete) { + let option = commandOptions['-d'] || commandOptions['--delete']; + generalArgs = option[0] === 'origin' + ? option.concat(generalArgs) + : generalArgs.concat(option); + } + command.twoArgsForOrigin(generalArgs); assertOriginSpecified(generalArgs); - var firstArg = generalArgs[1]; + + if(isDelete) { + if(!firstArg) { + throw new GitError({ + msg: intl.todo( + '--delete doesn\'t make sense without any refs' + ) + }); + } + + if(isColonRefspec(firstArg)) { + throw new GitError({ + msg: intl.todo( + '--delete only accepts plain target ref names' + ) + }); + } + + // transform delete target ref to delete colon refspec + firstArg = ":"+firstArg; + } + if (firstArg && isColonRefspec(firstArg)) { var refspecParts = firstArg.split(':'); source = refspecParts[0]; @@ -773,7 +808,7 @@ var commandConfig = { if (source === "" && !engine.origin.resolveID(destination)) { throw new GitError({ msg: intl.todo( - 'cannot delete branch ' + options.destination + ' which doesnt exist' + 'cannot delete branch ' + options.destination + ' which doesn\'t exist' ) }); } From df4215dd11a0cc286b69d3854a8d92d10da45438 Mon Sep 17 00:00:00 2001 From: Jack Bird Date: Sat, 15 Jul 2023 21:13:39 +0100 Subject: [PATCH 3/4] Added tests to cover delete functionality --- __tests__/remote.spec.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/__tests__/remote.spec.js b/__tests__/remote.spec.js index 167ea5cb..47f4b3e3 100644 --- a/__tests__/remote.spec.js +++ b/__tests__/remote.spec.js @@ -156,6 +156,29 @@ describe('Git Remotes', function() { ); }); + it('can delete branches with --delete flag', function() { + expectTreeAsync( + 'git branch foo; git clone; git push origin --delete', + '{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":"o/main"},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":"o/foo"},"o/main":{"target":"C1","id":"o/main","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"main","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":null},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"main","id":"HEAD"}}}' + ); + + expectTreeAsync( + 'git branch foo; git clone; git push origin --delete main:foo', + '{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":"o/main"},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":"o/foo"},"o/main":{"target":"C1","id":"o/main","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"main","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":null},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"tags":{},"HEAD":{"target":"main","id":"HEAD"}}}' + ); + + expectTreeAsync( + 'git branch foo; git clone; git push --delete origin foo', + '{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":"o/main"},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":null},"o/main":{"target":"C1","id":"o/main","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"main","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"main","id":"HEAD"}}}' + ); + + return expectTreeAsync( + 'git branch foo; git clone; git push origin --delete foo', + '{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":"o/main"},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":null},"o/main":{"target":"C1","id":"o/main","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"main","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"main","id":"HEAD"}}}' + ); + }); + + it('pushes new branch onto server', function() { return expectTreeAsync( 'git clone; git commit; git push origin main:foo', From d50d910c9b4ad9b4e642a61e804362cc5bab431f Mon Sep 17 00:00:00 2001 From: Jack Bird Date: Sat, 15 Jul 2023 21:20:15 +0100 Subject: [PATCH 4/4] removed import added by accident --- src/js/git/commands.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/js/git/commands.js b/src/js/git/commands.js index 56e46e98..7508f3e2 100644 --- a/src/js/git/commands.js +++ b/src/js/git/commands.js @@ -3,7 +3,6 @@ var intl = require('../intl'); var Graph = require('../graph'); var Errors = require('../util/errors'); -const { compact } = require('underscore'); var CommandProcessError = Errors.CommandProcessError; var GitError = Errors.GitError; var Warning = Errors.Warning;