mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add initial script to aid in cherrypicking from devel to stable-2.2
This commit is contained in:
parent
9ddcf16b4b
commit
8f6009de0f
1 changed files with 52 additions and 0 deletions
52
hacking/cherrypick.py
Executable file
52
hacking/cherrypick.py
Executable file
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
import sh
|
||||
|
||||
REPO_PATH = {'extras': '/srv/ansible/stable-2.2/lib/ansible/modules/extras',
|
||||
'core': '/srv/ansible/stable-2.2/lib/ansible/modules/core'}
|
||||
|
||||
if __name__ == '__main__':
|
||||
commit_hash = sys.argv[1]
|
||||
which_modules = sys.argv[2]
|
||||
git = sh.git.bake('--no-pager', _tty_out=False)
|
||||
try:
|
||||
# Get the change
|
||||
git('checkout', 'devel')
|
||||
patch = git('format-patch', '-1', '--stdout', commit_hash).stdout
|
||||
finally:
|
||||
git('checkout', '-')
|
||||
|
||||
# Transform the change for the new repo
|
||||
patch = patch.replace(b'lib/ansible/modules/', b'')
|
||||
new_patch = []
|
||||
patch_stream = (l for l in patch.split(b'\n'))
|
||||
for line in patch_stream:
|
||||
if line.strip() == b'---':
|
||||
new_patch.append(b'(cherry picked from %s)' % commit_hash.encode('utf-8'))
|
||||
new_patch.append(line)
|
||||
break
|
||||
new_patch.append(line)
|
||||
new_patch.extend(list(patch_stream))
|
||||
|
||||
# Save the patch
|
||||
try:
|
||||
fh, patchfilename = tempfile.mkstemp()
|
||||
os.write(fh, b'\n'.join(new_patch))
|
||||
os.close(fh)
|
||||
|
||||
# Apply the patch
|
||||
try:
|
||||
orig_dir = os.getcwd()
|
||||
os.chdir(REPO_PATH[which_modules])
|
||||
git('am', patchfilename)
|
||||
finally:
|
||||
os.chdir(orig_dir)
|
||||
except:
|
||||
print("Problem occurred. Patch saved in: {}".format(patchfilename))
|
||||
else:
|
||||
os.remove(patchfilename)
|
||||
|
Loading…
Reference in a new issue