]>
git.proxmox.com Git - mirror_frr.git/blob - tools/git-reindent-branch.py
2 # -*- coding: utf-8 -*-
5 import subprocess
, argparse
, tempfile
10 proc
= subprocess
.Popen(cmd
, stdout
=subprocess
.PIPE
)
11 rv
= proc
.communicate("")[0].decode("UTF-8")
16 clangfmt
= run(["git", "show", "master:.clang-format"])
18 argp
= argparse
.ArgumentParser(description
="git whitespace-fixing tool")
19 argp
.add_argument("branch", metavar
="BRANCH", type=str, nargs
="?", default
="HEAD")
20 args
= argp
.parse_args()
23 commit
= run(["git", "rev-list", "-n", "1", branch
, "--"]).strip()
25 # frr-3.1-dev = first commit that is on master but not on stable/3.0
26 masterid
= run(["git", "rev-list", "-n", "1", "frr-3.1-dev", "--"]).strip()
27 masterbase
= run(["git", "merge-base", commit
, masterid
]).strip()
29 if masterbase
== masterid
:
34 sys
.stderr
.write("autodetected base: %s (can be 3.0 or master)\n" % refbranch
)
37 ["git", "rev-list", "-n", "1", "reindent-%s-before" % refbranch
, "--"]
40 ["git", "rev-list", "-n", "1", "reindent-%s-after" % refbranch
, "--"]
43 beforebase
= run(["git", "merge-base", commit
, beforeid
]).strip()
44 afterbase
= run(["git", "merge-base", commit
, afterid
]).strip()
46 if afterbase
== afterid
:
47 sys
.stderr
.write("this branch was already rebased\n")
50 if beforebase
!= beforeid
:
52 'you need to rebase your branch onto the tag "reindent-%s-before"\n' % refbranch
57 run(["git", "rev-list", "reindent-%s-before..%s" % (refbranch
, commit
)])
64 tmpdir
= tempfile
.mkdtemp("frrindent")
67 sys
.stderr
.write("using temporary directory %s; %d revisions\n" % (tmpdir
, len(revs
)))
68 run(["git", "clone", "-s", "-b", "reindent-%s-after" % refbranch
, srcdir
, "repo"])
71 with
open(".clang-format", "w") as fd
:
77 run(["git", "diff", "-z", "--name-status", prev
, rev
]).rstrip("\0").split("\0")
79 changes
= zip(filestat
[0::2], filestat
[1::2])
80 sys
.stderr
.write("%s: %d files\n" % (rev
, len(changes
)))
82 for typ
, name
in changes
:
84 run(["git", "rm", name
])
85 elif typ
in ["A", "M"]:
86 run(["git", "checkout", rev
, "--", name
])
87 if name
.endswith(".c") or name
.endswith(".h"):
88 for d
in ["babeld/", "ldpd/", "nhrpd/"]:
89 if name
.startswith(d
):
92 sys
.stderr
.write("\t%s\n" % name
)
93 indent
.wrap_file(name
)
94 run(["git", "add", name
])
96 run(["git", "commit", "-C", rev
])
99 run(["git", "push", "origin", "HEAD:refs/heads/reindented-branch"])
100 sys
.stderr
.write('\n\n"reindented-branch" should now be OK.\n')
102 'you could use "git reset --hard reindented-branch" to set your current branch to the reindented output\n'
104 sys
.stderr
.write("\033[31;1mplease always double-check the output\033[m\n")