starting_branch, args.base_branch = check_git_state(args.base_branch, not args.skip_check, args.patches_dir)
+ gen_stash(starting_branch)
+ if starting_branch == 'master':
+ cmd_run('md5sum configure.ac >.gen-stash/configure.ac.sum')
+
master_commit = latest_git_hash(args.base_branch)
if args.gen:
time.sleep(1)
cmd_chk(['git', 'checkout', starting_branch])
+ gen_unstash(starting_branch)
+
def update_patch(patch):
global last_touch
while args.gen and last_touch >= time.time():
time.sleep(1)
- s = cmd_run(f"git checkout patch/{args.base_branch}/{patch}".split())
+
+ branch = f"patch/{args.base_branch}/{patch}"
+ s = cmd_run(['git', 'checkout', branch])
if s.returncode != 0:
return 0
s = cmd_run(['git', 'merge', based_on])
ok = s.returncode == 0
if not ok or args.shell:
+ gen_unstash(branch)
m = re.search(r'([^/]+)$', parent)
parent_dir = m[1]
if not ok:
if is_clean:
break
print(status_txt, end='')
+ gen_stash(branch)
with open(f"{args.patches_dir}/{patch}.diff", 'w', encoding='utf-8') as fh:
fh.write(description[patch])
return 1
+# The autoconf cache dir can totally mess up if 2 different *.ac files have the same mtime!
+def gen_stash_prep(branch):
+ if os.path.isdir('autom4te.cache'):
+ shutil.rmtree('autom4te.cache')
+ return '.gen-stash/' + branch.replace('/', '%') + '.tar.gz'
+
+
+def gen_stash(branch):
+ files = 'configure.sh config.h.in Makefile'.split()
+ for fn in files:
+ if not os.path.exists(fn):
+ return
+ if not os.path.isdir('.gen-stash'):
+ os.mkdir('.gen-stash', 0o700)
+ tar_fn = gen_stash_prep(branch)
+ cmd_run(['./prepare-source'])
+ cmd_chk(['tar', 'czf', tar_fn, *files])
+
+
+def gen_unstash(branch):
+ tar_fn = gen_stash_prep(branch)
+ if os.path.exists(tar_fn):
+ cmd_chk(['tar', 'xf', tar_fn])
+ out, rc = cmd_txt_status('md5sum --status -c .gen-stash/configure.ac.sum'.split())
+ if rc:
+ print('*' * 10, "configure.ac differs from master version", '*' * 10)
+
+
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Turn a git branch back into a diff files in the patches dir.", add_help=False)
parser.add_argument('--branch', '-b', dest='base_branch', metavar='BASE_BRANCH', default='master', help="The branch the patch is based on. Default: master.")
args.patches_dir = args.gen
main()
-# vim: sw=4 et
+# vim: sw=4 et ft=python