dotfiles/bin/git-delete-merged-branches

43 lines
1.1 KiB
Plaintext
Raw Normal View History

2020-01-15 16:17:27 +00:00
#!/usr/bin/env php
<?php
function extractBranchNamesFromInfo(string $branchInfo): array
{
$branchNames = array_map(function (string $branchInfo): string {
preg_match('/\s*((\w|-|\/)+)\s*/', $branchInfo, $matches);
return $matches[1] ?? '';
}, explode(PHP_EOL, $branchInfo));
return array_filter($branchNames);
}
function filterIgnoredBranches(array $branchNames): array
{
return array_filter($branchNames, function (string $branchName): bool {
return !in_array($branchName, ['develop', 'master', 'staging', 'production']);
});
}
$branchInfo = shell_exec('git branch -vv | grep ": gone]"');
# Return early if there are no branches to delete.
if ($branchInfo === NULL) {
return;
}
$branchNames = extractBranchNamesFromInfo($branchInfo);
$filteredBranchNames = filterIgnoredBranches($branchNames);
$currentBranch = exec('git rev-parse --abbrev-ref HEAD');
foreach ($filteredBranchNames as $branchName) {
if ($branchName == $currentBranch) {
echo "Cannot delete {$branchName} as it is the current branch.";
continue;
}
echo "Deleting {$branchName}...";
exec("git branch -D ${branchName}");
}