Chromium Code Reviews| Index: git_freezer.py |
| diff --git a/git_freezer.py b/git_freezer.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..37895be158b69ce9e74f188d989ee6f2c42b1357 |
| --- /dev/null |
| +++ b/git_freezer.py |
| @@ -0,0 +1,73 @@ |
| +#!/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 |
|
agable
2014/03/13 00:45:34
two spaces before #
|
| + """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() |