mirror of
https://github.com/codex-storage/deluge.git
synced 2025-01-24 10:18:51 +00:00
96 lines
3.1 KiB
Plaintext
96 lines
3.1 KiB
Plaintext
In addition to the steps outlined by GitTips we have put together a wrapper script around git-commit that can be used to commit to multiple branches. Simply save this script as git-commit somewhere on your PATH.
|
|
|
|
You can use it like so:
|
|
{{{
|
|
#!sh
|
|
$ git-commit -b some_branch -m "some commit message"
|
|
}}}
|
|
|
|
'''git-commit'''
|
|
{{{
|
|
#!python
|
|
#!/usr/bin/python
|
|
#
|
|
# Copyright (C) 2010 Damien Churchill
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3, or (at your option)
|
|
# any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, write to:
|
|
# The Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor
|
|
# Boston, MA 02110-1301, USA.
|
|
|
|
import sys
|
|
import subprocess
|
|
|
|
GIT = '/usr/bin/git'
|
|
GIT_BRANCH = '/usr/lib/git-core/git-branch'
|
|
GIT_COMMIT = '/usr/lib/git-core/git-commit'
|
|
GIT_CHECKOUT = '/usr/lib/git-core/git-checkout'
|
|
GIT_CHERRY_PICK = '/usr/lib/git-core/git-cherry-pick'
|
|
|
|
if __name__ == '__main__':
|
|
|
|
branches = []
|
|
git_args = []
|
|
|
|
args = sys.argv[1:]
|
|
|
|
while args:
|
|
arg = args.pop(0)
|
|
if arg in ('-b', '--branch'):
|
|
branches.append(args.pop(0))
|
|
elif arg.startswith('--branch='):
|
|
branches.append(arg[9:])
|
|
else:
|
|
git_args.append(arg)
|
|
|
|
# Find out the current branch
|
|
current_branch = None
|
|
local_branches = []
|
|
p = subprocess.Popen([GIT_BRANCH], stdout=subprocess.PIPE)
|
|
for line in p.stdout:
|
|
branch = line[2:].strip()
|
|
local_branches.append(branch)
|
|
if line[0] != '*':
|
|
continue
|
|
current_branch = branch
|
|
|
|
# Check to make sure that the provided branches are valid
|
|
for branch in branches:
|
|
if branch not in local_branches:
|
|
sys.stderr.write('invalid branch: %s\n' % branch)
|
|
sys.exit(1)
|
|
|
|
# Perform the main commit
|
|
p = subprocess.Popen([GIT_COMMIT] + git_args, stdout=subprocess.PIPE)
|
|
if p.wait() > 0:
|
|
sys.stdout.write(p.stdout.read())
|
|
sys.exit(1)
|
|
|
|
# Get the commit tag without using regex
|
|
try:
|
|
commit_tag = p.stdout.readline().split(' ')[1].split(']')[0]
|
|
except:
|
|
sys.stderr.write('unable to read commit tag\n')
|
|
sys.exit(1)
|
|
|
|
# Loop through the specified branches applying the commit to all of
|
|
# them.
|
|
for branch in branches:
|
|
subprocess.call([GIT_CHECKOUT, branch])
|
|
sys.stdout.write('Applying commit %s to %s\n' % (commit_tag, branch))
|
|
subprocess.call([GIT_CHERRY_PICK, commit_tag], stdout=subprocess.PIPE)
|
|
|
|
# Switch back to the original branch
|
|
subprocess.call([GIT_CHECKOUT, current_branch])
|
|
}}} |