Archive branches that are merged into master. This is done by tagging them as archive/<branchname> and removing them both locally and remotely. Before each operation, the user is asked for confirmation. """ # This dependency can be found on github: https://github.com/Chiel92/python-shellout from pyshellout import get, out, confirm # Tag merged branches merged_branches = [line.strip() for line in get(r'git branch --merged master').n] merged_branches = [branch for branch in merged_branches if branch != '' and not '*' in branch and not branch == 'master'] archived_branches = [] for branch in merged_branches: if confirm('Archive branch {}?', branch): out('git tag archive/{} {}', branch, branch) archived_branches.append(branch) if not archived_branches: exit('No branches archived. Bye.') # Push archive tags to remote print() print('Created archive tags:') for branch in archived_branches: print(' ' + branch) if confirm('Push archive tags to remote?'): for branch in archived_branches: out('git push origin archive/{}', branch)
import sys from pyshellout import get, out, confirm MASTER = 'master' ARGS_COUNT = len(sys.argv) REFERENCE_BRANCH = MASTER if ARGS_COUNT <= 1 else sys.argv[1] # Tag merged branches merged_branches = [line.strip() for line in get(r'git branch --merged ' + REFERENCE_BRANCH).n] merged_branches = [branch for branch in merged_branches if branch != '' and not '*' in branch and not branch == MASTER and not branch == REFERENCE_BRANCH] archived_branches = [] archived_branches_all = [] for branch in merged_branches: if confirm('Archive branch {}?', branch): out('git tag archive/{} {}', branch, branch) archived_branches.append(branch) if not archived_branches: exit('No branches archived. Bye.') print('Next tasks are: push tags to remote, delete remote and local branches') do_not_ask = not confirm('Request confirmation for every step?') # Push archive tags to remote print() print('Created archive tags:') for branch in archived_branches: print(' ' + branch) if do_not_ask or confirm('Push archive tags to remote?'):
target = { '1': 'ours', '2': 'common', '3': 'theirs', }[role] out('git show {sha} > {filename}.{target}', sha=sha, filename=filename, target=target, critical=True, verbose=True) print('You can now edit the generated files per triple (common, ours and theirs).') print('After each triple, a 3-way merge is performed.') for filename in filenames: if not confirm('Edit and merge {filename}?', filename=filename): continue out('vim {filename}.common {filename}.ours {filename}.theirs', filename=filename, verbose=True, critical=True) returncode = out('{kdiff3} {filename}.common {filename}.ours {filename}.theirs' ' -o {filename}.result', kdiff3=kdiff3, filename=filename, verbose=True) if returncode == 0 and confirm('Do you want to overwrite {filename} with {filename}.result' ' and mark the file as merged?', filename=filename): out('cp {filename}.result {filename}', filename=filename) out('git add {filename}', filename=filename) if confirm('Do you want to remove the merge artifacts?'): out('rm {filename}.common {filename}.ours {filename}.theirs {filename}.result', filename=filename)
import argparse # This dependency can be found on github: https://github.com/Chiel92/python-shellout from pyshellout import get, out, confirm parser = argparse.ArgumentParser() parser.add_argument('master', help='Name of the master branch. Defaults to \'master\'.', nargs='?', default='master') args = parser.parse_args() master = args.master # Get merged branches merged_branches = [line.strip() for line in get(r'git branch --merged {}', master, critical=True).n] merged_branches = [branch for branch in merged_branches if branch != '' and not '*' in branch and not branch == master] print('Merged local branches:') for branch in merged_branches: print(' ' + branch) print() for branch in merged_branches: if confirm('Delete local branch {}?', branch): out('git branch -d {}', branch)