diff --git a/blurb/blurb.py b/blurb/blurb.py index cd975ba..11393bf 100755 --- a/blurb/blurb.py +++ b/blurb/blurb.py @@ -76,7 +76,7 @@ # # Please enter the relevant bugs.python.org issue number here: # -.. bpo: +.. bpo: {bpo} # # Uncomment one of these "section:" lines to specify which section @@ -913,24 +913,12 @@ def add(): os.close(handle) atexit.register(lambda : os.unlink(tmp_path)) - def init_tmp_with_template(): - with open(tmp_path, "wt", encoding="utf-8") as file: - # hack: - # my editor likes to strip trailing whitespace from lines. - # normally this is a good idea. but in the case of the template - # it's unhelpful. - # so, manually ensure there's a space at the end of the bpo line. - text = template - - bpo_line = ".. bpo:" - without_space = "\n" + bpo_line + "\n" - with_space = "\n" + bpo_line + " \n" - if without_space not in text: - sys.exit("Can't find BPO line to ensure there's a space on the end!") - text = text.replace(without_space, with_space) - file.write(text) + # See if the branch name incidates the BPO number + branch_bpo, branch_suffix = get_bpo_git_branch() - init_tmp_with_template() + with open(tmp_path, "wt", encoding="utf-8") as f: + text = template.format(bpo=branch_bpo) + f.write(text) # We need to be clever about EDITOR. # On the one hand, it might be a legitimate path to an @@ -976,6 +964,17 @@ def init_tmp_with_template(): path = blurb.save_next() git_add_files.append(path) flush_git_add_files() + + # For convenience, write a preformatted commit template. You can tell git to + # use this template with "git config.template .git/blurb". + msgfile = os.path.join(root, '.git', 'blurb') + if os.path.isdir(os.path.dirname(msgfile)): + metadata, text = blurb[0] + with open(msgfile, 'wt', encoding="utf-8") as f: + f.write("bpo-{}: {}\n".format(metadata['bpo'], branch_suffix)) + f.write("\n") + f.write(text) + print("Ready for commit.") @@ -1156,6 +1155,28 @@ def flush_git_rm_files(): git_rm_files.clear() +def get_bpo_git_branch(): + """Try to detect bpo number from branch name + + Supports: + bpo1234 + bpo_1234 + bpo-1234 + + returns: branch number, branch suffix + """ + try: + p = subprocess.run(["git", "rev-parse", "--abbrev-ref", "HEAD"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + p.check_returncode() + except subprocess.CalledProcessError: + return '', '' + branch = p.stdout.decode('utf-8').strip() + mo = re.match("^bpo[-_]?(\d+)[-_]?(.*)", branch) + if mo is None: + return '', branch + return mo.group(1), mo.group(2) + + # @subcommand # def noop(): # "Do-nothing command. Used for blurb smoke-testing."