1
1
mirror of https://github.com/kahole/edamagit.git synced 2024-08-15 18:20:30 +03:00

improve magit-branch-spinoff implementation

This commit is contained in:
Ben Bachem 2024-03-27 23:20:55 +01:00
parent 0fd309db0a
commit dc5cd8ddf7
No known key found for this signature in database

View File

@ -207,13 +207,49 @@ async function createNewSpinoff({ repository }: MenuState) {
prompt: 'Name for new branch',
});
if (newBranchName && newBranchName.length > 0) {
const args = ['checkout', '-B', newBranchName];
return gitRun(repository.gitRepository, args);
} else {
window.setStatusBarMessage(
if (!newBranchName || newBranchName.length < 1) {
return window.setStatusBarMessage(
'No name given for new branch',
Constants.StatusMessageDisplayTimeout
);
}
if (repository.branches.find(b => b.name === newBranchName)) {
return window.setStatusBarMessage(
`Cannot spin off ${newBranchName}. It already exists`,
Constants.StatusMessageDisplayTimeout
);
}
const base = repository.HEAD?.name;
if (!base) {
return window.setStatusBarMessage(
'No branch checked out',
Constants.StatusMessageDisplayTimeout
);
}
// Save current commit hash of base branch for later reference
const baseCommit = repository.HEAD?.commit;
// Get upsteam branch commit hash of base branch
const upstreamBranchCommit = repository.HEAD.upstreamRemote?.commit?.hash;
// Checkout new branch
await gitRun(repository.gitRepository, ['checkout', '-b', newBranchName]);
if (upstreamBranchCommit && baseCommit !== upstreamBranchCommit) {
await gitRun(repository.gitRepository, ['branch', '-f', base, upstreamBranchCommit]);
window.setStatusBarMessage(
`Branch ${base} was reset to upstream`,
Constants.StatusMessageDisplayTimeout
);
} else {
window.setStatusBarMessage(
`Branch ${base} not changed`,
Constants.StatusMessageDisplayTimeout
);
}
}