Merge pull request #1104 from kazzna/add-switch-options

Add switch options
This commit is contained in:
Peter Cottle 2023-09-21 09:14:53 -04:00 committed by GitHub
commit 6e88757bc4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 91 additions and 15 deletions

View file

@ -60,11 +60,67 @@ describe('Git', function() {
); );
}); });
it('Switches', function() { describe('Switches', function() {
return expectTreeAsync( it("to a commit", function () {
'git switch -c side', return expectTreeAsync(
'{"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"}}' 'git switch C0',
); '{"branches":{"main":{"target":"C1","id":"main"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"C0","id":"HEAD"}}'
);
});
it("to a branch", function () {
return expectTreeAsync(
'git switch 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":"C1","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', 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"}}'
);
});
it('to a branch with --create option', function() {
return expectTreeAsync(
'git switch --create 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"}}'
);
});
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('to a branch with --force-create option', function() {
return expectTreeAsync(
'git switch --force-create 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 --force-create option and given base branch', function() {
return expectTreeAsync(
'git switch --force-create 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() { it('Rebases', function() {

View file

@ -923,23 +923,43 @@ var commandConfig = {
regex: /^git +switch($|\s)/, regex: /^git +switch($|\s)/,
options: [ options: [
'-c', '-c',
'--create',
'-C',
'--force-create',
'-' '-'
], ],
execute: function(engine, command) { execute: function(engine, command) {
var generalArgs = command.getGeneralArgs(); var generalArgs = command.getGeneralArgs();
var commandOptions = command.getOptionsMap(); var commandOptions = command.getOptionsMap();
var args = null; {
if (commandOptions['-c']) { let createOption = commandOptions['-c'] ? commandOptions['-c'] : commandOptions['--create'];
// the user is really trying to just make a if (createOption) {
// branch and then switch to it. so first: // the user is really trying to just make a
args = commandOptions['-c'].concat(generalArgs); // branch and then switch to it. so first:
command.twoArgsImpliedHead(args, '-c'); 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.branch(validId, args[1]);
engine.checkout(validId); engine.checkout(validId);
return; return;
}
}
{
let sfc = '-C';
let lfc = '--force-create';
let fcOption = commandOptions[sfc] ? commandOptions[sfc] : commandOptions[lfc];
if (fcOption) {
let args = fcOption.concat(generalArgs);
command.twoArgsImpliedHead(args, sfc);
let validId = engine.validateBranchName(args[0]);
engine.forceBranch(validId, args[1]);
engine.checkout(validId);
return;
}
} }
if (commandOptions['-']) { if (commandOptions['-']) {