blob: 6e28b3e342b066f582fd46c48153f90a8038ebf9 [file] [log] [blame]
#!/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()