From 86bf7c7a7164348bc87ccf566ce8e2590f0a20ae Mon Sep 17 00:00:00 2001 From: kazzna Date: Tue, 19 Sep 2023 13:45:26 +0900 Subject: [PATCH] Add git switch -C --- __tests__/git.spec.js | 16 ++++++++++++++++ src/js/git/commands.js | 19 +++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/__tests__/git.spec.js b/__tests__/git.spec.js index f1756b6e..526b90ef 100644 --- a/__tests__/git.spec.js +++ b/__tests__/git.spec.js @@ -89,6 +89,22 @@ describe('Git', function() { '{"branches":{"main":{"target":"C1","id":"main"},"side":{"target":"C1","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}' ); }); + + it('to a branch with -C option', function() { + return expectTreeAsync( + 'git switch -C side', + '{"branches":{"main":{"target":"C1","id":"main"},"side":{"target":"C1","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}', + '{"branches":{"main":{"target":"C1","id":"main"},"side":{"target":"C0","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"main","id":"HEAD"}}' + ); + }); + + it('to a branch with -C option and given base branch', function() { + return expectTreeAsync( + 'git switch -C side main', + '{"branches":{"main":{"target":"C1","id":"main"},"side":{"target":"C1","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"side","id":"HEAD"}}', + '{"branches":{"main":{"target":"C1","id":"main"},"side":{"target":"C0","id":"side"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"C0","id":"HEAD"}}' + ); + }); }); it('Rebases', function() { diff --git a/src/js/git/commands.js b/src/js/git/commands.js index 62976dd1..29de9ee1 100644 --- a/src/js/git/commands.js +++ b/src/js/git/commands.js @@ -924,6 +924,7 @@ var commandConfig = { options: [ '-c', '--create', + '-C', '-' ], execute: function(engine, command) { @@ -935,16 +936,30 @@ var commandConfig = { if (createOption) { // the user is really trying to just make a // branch and then switch to it. so first: - var args = createOption.concat(generalArgs) + let args = createOption.concat(generalArgs) command.twoArgsImpliedHead(args, '-c'); - var validId = engine.validateBranchName(args[0]); + let validId = engine.validateBranchName(args[0]); engine.branch(validId, args[1]); engine.checkout(validId); return; } } + { + let fc = '-C'; + let fcOption = commandOptions[fc]; + if (fcOption) { + let args = fcOption.concat(generalArgs); + command.twoArgsImpliedHead(args, fc); + + let validId = engine.validateBranchName(args[0]); + engine.forceBranch(validId, args[1]); + engine.checkout(validId); + return; + } + } + if (commandOptions['-']) { // get the heads last location var lastPlace = engine.HEAD.get('lastLastTarget');