- # perform the merge
- version = sh.call("git", "--git-dir="+repo, "describe", "--tags", "master")[0].rstrip()
- user_commit = sh.call("git", "rev-parse", "HEAD")[0].rstrip()
- next_commit = sh.call("git", "rev-parse", version)[0].rstrip()
- message = "Upgraded autoinstall in %s to %s.\n\n%s" % (util.get_dir_owner(), version, util.get_git_footer())
- try:
- message += "\nUpgraded-by: " + util.get_operator_git()
- except util.NoOperatorInfo:
- pass
- try:
- # naive merge algorithm:
- # sh.call("git", "merge", "-m", message, "scripts/master")
- # crazy merge algorithm:
- def make_virtual_commit(tag, parents = []):
- """WARNING: Changes state of Git repository"""
- sh.call("git", "checkout", tag, "--")
- d.parametrize(temp_wc_dir)
- for file in d.application.parametrized_files:
- try:
- sh.call("git", "add", "--", file)
- except shell.CallError:
- pass
- virtual_tree = sh.call("git", "write-tree")[0].rstrip()
- parent_args = itertools.chain(*(["-p", p] for p in parents))
- virtual_commit = sh.call("git", "commit-tree", virtual_tree, *parent_args, input="")[0].rstrip()
- sh.call("git", "reset", "--hard")
- return virtual_commit
- user_tree = sh.call("git", "rev-parse", "HEAD^{tree}")[0].rstrip()
- base_virtual_commit = make_virtual_commit(d.app_version.pristine_tag)
- next_virtual_commit = make_virtual_commit(version, [base_virtual_commit])
- user_virtual_commit = sh.call("git", "commit-tree", user_tree, "-p", base_virtual_commit, input="")[0].rstrip()
- sh.call("git", "checkout", user_virtual_commit, "--")
- sh.call("git", "merge", next_virtual_commit) # XXX
- except shell.CallError:
- print temp_wc_dir
- raise MergeFailed
+ version = sh.eval("git", "--git-dir="+repo, "describe", "--tags", "master")
+ user_commit = sh.eval("git", "rev-parse", "HEAD")
+ next_commit = sh.eval("git", "rev-parse", version)
+ perform_merge(sh, repo, d, version)