mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sh
|
|
import sys
|
|
import tempfile
|
|
|
|
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)
|