#!/usr/local/bin/python import sys import re import optparse import subcommand import subprocess2 from git_common import run, stream FREEZE = 'FREEZE' SECTIONS = { 'indexed': 'soft', 'unindexed': 'mixed' } MATCHER = re.compile(r'%s.(%s)' % (FREEZE, '|'.join(SECTIONS))) def freeze(): took_action = False try: run('commit', '-m', FREEZE + '.indexed') took_action = True except subprocess2.CalledProcessError: pass try: run('add', '-A') run('commit', '-m', FREEZE + '.unindexed') took_action = True except subprocess2.CalledProcessError: pass if not took_action: return 'Nothing to freeze.' def thaw(): took_action = False for sha in (s.strip() for s in stream('rev-list', 'HEAD').xreadlines()): msg = run('show', '--format=%f%b', '-s', 'HEAD') match = MATCHER.match(msg) if not match: if not took_action: return 'Nothing to thaw.' break run('reset', '--' + SECTIONS[match.group(1)], sha) took_action = True def CMDfreeze(parser, args): # pragma: no cover """Freeze a branch's changes.""" parser.parse_args(args) return freeze() def CMDthaw(parser, args): # pragma: no cover """Returns a frozen branch to the state before it was frozen.""" parser.parse_args(args) return thaw() def main(): # pragma: no cover dispatcher = subcommand.CommandDispatcher(__name__) ret = dispatcher.execute(optparse.OptionParser(), sys.argv[1:]) if ret: print ret if __name__ == '__main__': # pragma: no cover main()