Skip to content

Commit

Permalink
fixup! Add script to ease migration to black
Browse files Browse the repository at this point in the history
  • Loading branch information
hbrunn committed Apr 30, 2022
1 parent 16737a1 commit 2eadbe1
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 59 deletions.
85 changes: 85 additions & 0 deletions scripts/migrate-black.py
@@ -0,0 +1,85 @@
#!/usr/bin/env python3
# check out every commit added by the current branch, blackify them,
# and generate diffs to reconstruct the original commits, but then
# blackified
import os
import sys
from subprocess import check_output, run, Popen, PIPE


def git(*args):
return check_output(["git"] + list(args)).decode("utf8").strip()


def blackify(base_branch, black_command):
current_branch = git("branch", "--show-current")

if not current_branch or base_branch == current_branch:
print("You need to check out a feature brach to work on")
return 1

if not os.path.exists(".git"):
print("Run me in the root of your repo")
return 1

merge_base = git("merge-base", "HEAD", base_branch)
if not merge_base:
print("Could not find a common commit for current head and %s" % base_branch)
return 1

commits = git(
"log", "--reverse", "--pretty=format:%H", "%s~1..HEAD" % merge_base
).split()
for commit in commits:
git("checkout", commit, "-b" "%s-black" % commit)
check_output(black_command, shell=True)
git("commit", "-aqm", "blackify")

git("checkout", base_branch, "-b" "%s-black" % current_branch)

for last_commit, commit in zip(commits, commits[1:]):
allow_empty = (
b"--allow-empty" in run(["git", "apply", "-h"], stdout=PIPE).stdout
)
quiet = (
b"--quiet" in run(["git", "apply", "-h"], stdout=PIPE).stdout
)
git_diff = Popen(
["git", "diff", "--find-copies", "%s-black..%s-black" % (last_commit, commit)],
stdout=PIPE,
)
git_apply = Popen(
[
"git",
"apply",
]
+ (["--quiet"] if quiet else [])
+ [
"-3",
"--intent-to-add",
]
+ (["--allow-empty"] if allow_empty else [])
+ [
"-",
],
stdin=git_diff.stdout,
stdout=PIPE,
)
git_diff.stdout.close()
git_apply.communicate()
if git_apply.returncode:
raise Exception("git apply failed")
git("commit", "-aqC", commit)

for commit in commits:
git("branch", "-qD", "%s-black" % commit)


if __name__ == "__main__":
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("base_branch")
parser.add_argument("--black_command", default="black -q .")
args = parser.parse_args()
sys.exit(blackify(args.base_branch, args.black_command))
59 changes: 0 additions & 59 deletions scripts/migrate-black.sh

This file was deleted.

0 comments on commit 2eadbe1

Please sign in to comment.