mirror of
https://chromium.googlesource.com/chromium/tools/depot_tools.git
synced 2026-01-11 10:41:31 +00:00
Add a family of git-commands to assist with the management of multiple CLs/branches.
git-rebase-update - ensure all branches are up to date git-new-branch - create branches git-rename-branch - rename a branch while preserving parentage relationships git-reparent-branch - change the parent of a branch, including rebasing it correctly onto that new parent. git-squash-branch - collapse a branch into a single commit git-upstream-diff - show the diff between the current branch and it's upstream branch git-mark-merge-base - explicitly set what you want the above tools to consider the merge-base for the current branch. R=agable@chromium.org, hinoka@chromium.org, stip@chromium.org, szager@chromium.org BUG=261738 Review URL: https://codereview.chromium.org/184253003 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@259520 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
@@ -1,73 +1,33 @@
|
||||
#!/usr/local/bin/python
|
||||
# Copyright 2014 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
import sys
|
||||
import re
|
||||
import optparse
|
||||
|
||||
import subcommand
|
||||
import subprocess2
|
||||
|
||||
from git_common import run, stream
|
||||
from git_common import freeze, thaw
|
||||
|
||||
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
|
||||
def CMDfreeze(parser, args):
|
||||
"""Freeze a branch's changes."""
|
||||
parser.parse_args(args)
|
||||
return freeze()
|
||||
|
||||
|
||||
def CMDthaw(parser, args): # pragma: no cover
|
||||
def CMDthaw(parser, args):
|
||||
"""Returns a frozen branch to the state before it was frozen."""
|
||||
parser.parse_args(args)
|
||||
return thaw()
|
||||
|
||||
|
||||
def main(): # pragma: no cover
|
||||
def main():
|
||||
dispatcher = subcommand.CommandDispatcher(__name__)
|
||||
ret = dispatcher.execute(optparse.OptionParser(), sys.argv[1:])
|
||||
if ret:
|
||||
print ret
|
||||
|
||||
|
||||
if __name__ == '__main__': # pragma: no cover
|
||||
main()
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user