From: Quentin Young Date: Tue, 20 Feb 2018 17:37:41 +0000 (-0500) Subject: *: move random tools into tools/ X-Git-Tag: frr-5.0-dev~203^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=7c557e5b3da8b8ba1db9542bc24bbf2a70bd1f1a;p=matthieu%2Ffrr.git *: move random tools into tools/ Signed-off-by: Quentin Young --- diff --git a/git-reindent-branch.py b/git-reindent-branch.py deleted file mode 100644 index c207f5946f..0000000000 --- a/git-reindent-branch.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import sys, os -import subprocess, argparse, tempfile -import indent - -def run(cmd): - proc = subprocess.Popen(cmd, stdout = subprocess.PIPE) - rv = proc.communicate('')[0].decode('UTF-8') - proc.wait() - return rv - -clangfmt = run(['git', 'show', 'master:.clang-format']) - -argp = argparse.ArgumentParser(description = 'git whitespace-fixing tool') -argp.add_argument('branch', metavar='BRANCH', type = str, nargs = '?', default = 'HEAD') -args = argp.parse_args() - -branch = args.branch -commit = run(['git', 'rev-list', '-n', '1', branch, '--']).strip() - -# frr-3.1-dev = first commit that is on master but not on stable/3.0 -masterid = run(['git', 'rev-list', '-n', '1', 'frr-3.1-dev', '--']).strip() -masterbase = run(['git', 'merge-base', commit, masterid]).strip() - -if masterbase == masterid: - refbranch = 'master' -else: - refbranch = '3.0' - -sys.stderr.write('autodetected base: %s (can be 3.0 or master)\n' % refbranch) - -beforeid = run(['git', 'rev-list', '-n', '1', 'reindent-%s-before' % refbranch, '--']).strip() -afterid = run(['git', 'rev-list', '-n', '1', 'reindent-%s-after' % refbranch, '--']).strip() - -beforebase = run(['git', 'merge-base', commit, beforeid]).strip() -afterbase = run(['git', 'merge-base', commit, afterid]).strip() - -if afterbase == afterid: - sys.stderr.write('this branch was already rebased\n') - sys.exit(1) - -if beforebase != beforeid: - sys.stderr.write('you need to rebase your branch onto the tag "reindent-%s-before"\n' % refbranch) - sys.exit(1) - -revs = run(['git', 'rev-list', 'reindent-%s-before..%s' % (refbranch, commit)]).strip().split('\n') -revs.reverse() - -srcdir = os.getcwd() -tmpdir = tempfile.mkdtemp('frrindent') -os.chdir(tmpdir) - -sys.stderr.write('using temporary directory %s; %d revisions\n' % (tmpdir, len(revs))) -run(['git', 'clone', '-s', '-b', 'reindent-%s-after' % refbranch, srcdir, 'repo']) -os.chdir('repo') - -with open('.clang-format', 'w') as fd: - fd.write(clangfmt) - -prev = beforeid -for rev in revs: - filestat = run(['git', 'diff', '-z', '--name-status', prev, rev]).rstrip('\0').split('\0') - changes = zip(filestat[0::2], filestat[1::2]) - sys.stderr.write('%s: %d files\n' % (rev, len(changes))) - - for typ, name in changes: - if typ == 'D': - run(['git', 'rm', name]) - elif typ in ['A', 'M']: - run(['git', 'checkout', rev, '--', name]) - if name.endswith('.c') or name.endswith('.h'): - for d in ['babeld/', 'ldpd/', 'nhrpd/']: - if name.startswith(d): - break - else: - sys.stderr.write('\t%s\n' % name) - indent.wrap_file(name) - run(['git', 'add', name]) - - run(['git', 'commit', '-C', rev]) - prev = rev - -run(['git', 'push', 'origin', 'HEAD:refs/heads/reindented-branch']) -sys.stderr.write('\n\n"reindented-branch" should now be OK.\n') -sys.stderr.write('you could use "git reset --hard reindented-branch" to set your current branch to the reindented output\n') -sys.stderr.write('\033[31;1mplease always double-check the output\033[m\n') - diff --git a/indent.py b/indent.py deleted file mode 100644 index 560c13c77d..0000000000 --- a/indent.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# 2017 by David Lamparter, placed in public domain - -import sys, re, subprocess, os - -# find all DEFUNs -defun_re = re.compile( - r'^((DEF(UN(_NOSH|_HIDDEN)?|PY)|ALIAS)\s*\(.*?)^(?=\s*\{)', - re.M | re.S) -define_re = re.compile( - r'((^#\s*define[^\n]+[^\\]\n)+)', - re.M | re.S) -# find clang-format control that we just inserted -clean_re = re.compile( - r'^/\* \$FRR indent\$ \*/\s*\n\s*/\* clang-format (on|off) \*/\s*\n', - re.M) - -def wrap_file(fn): - with open(fn, 'r') as fd: - text = fd.read() - - repl = r'/* $FRR indent$ */\n/* clang-format off */\n' + \ - r'\1' + \ - r'/* $FRR indent$ */\n/* clang-format on */\n' - - # around each DEFUN, insert an indent-on/off comment - text = defun_re.sub(repl, text) - text = define_re.sub(repl, text) - - ci = subprocess.Popen(['clang-format'], stdin = subprocess.PIPE, stdout = subprocess.PIPE) - stdout, ign = ci.communicate(text) - ci.wait() - if ci.returncode != 0: - raise IOError('clang-format returned %d' % (ci.returncode)) - - # remove the bits we inserted above - final = clean_re.sub('', stdout) - - tmpname = fn + '.indent' - with open(tmpname, 'w') as ofd: - ofd.write(final) - os.rename(tmpname, fn) - -if __name__ == '__main__': - for fn in sys.argv[1:]: - wrap_file(fn) diff --git a/render_md.py b/render_md.py deleted file mode 100644 index 16c4bbe8a3..0000000000 --- a/render_md.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -# written 2016 by David Lamparter, placed in Public Domain. -import sys, markdown - -template = ''' -%s - -''' - -md = markdown.Markdown(extensions=['extra', 'toc']) - -for fn in sys.argv[1:]: - with open(fn, 'r') as ifd: - with open('%s.html' % (fn), 'w') as ofd: - ofd.write((template % (md.convert(ifd.read().decode('UTF-8')))).encode('UTF-8')) diff --git a/tools/git-reindent-branch.py b/tools/git-reindent-branch.py new file mode 100644 index 0000000000..c207f5946f --- /dev/null +++ b/tools/git-reindent-branch.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import sys, os +import subprocess, argparse, tempfile +import indent + +def run(cmd): + proc = subprocess.Popen(cmd, stdout = subprocess.PIPE) + rv = proc.communicate('')[0].decode('UTF-8') + proc.wait() + return rv + +clangfmt = run(['git', 'show', 'master:.clang-format']) + +argp = argparse.ArgumentParser(description = 'git whitespace-fixing tool') +argp.add_argument('branch', metavar='BRANCH', type = str, nargs = '?', default = 'HEAD') +args = argp.parse_args() + +branch = args.branch +commit = run(['git', 'rev-list', '-n', '1', branch, '--']).strip() + +# frr-3.1-dev = first commit that is on master but not on stable/3.0 +masterid = run(['git', 'rev-list', '-n', '1', 'frr-3.1-dev', '--']).strip() +masterbase = run(['git', 'merge-base', commit, masterid]).strip() + +if masterbase == masterid: + refbranch = 'master' +else: + refbranch = '3.0' + +sys.stderr.write('autodetected base: %s (can be 3.0 or master)\n' % refbranch) + +beforeid = run(['git', 'rev-list', '-n', '1', 'reindent-%s-before' % refbranch, '--']).strip() +afterid = run(['git', 'rev-list', '-n', '1', 'reindent-%s-after' % refbranch, '--']).strip() + +beforebase = run(['git', 'merge-base', commit, beforeid]).strip() +afterbase = run(['git', 'merge-base', commit, afterid]).strip() + +if afterbase == afterid: + sys.stderr.write('this branch was already rebased\n') + sys.exit(1) + +if beforebase != beforeid: + sys.stderr.write('you need to rebase your branch onto the tag "reindent-%s-before"\n' % refbranch) + sys.exit(1) + +revs = run(['git', 'rev-list', 'reindent-%s-before..%s' % (refbranch, commit)]).strip().split('\n') +revs.reverse() + +srcdir = os.getcwd() +tmpdir = tempfile.mkdtemp('frrindent') +os.chdir(tmpdir) + +sys.stderr.write('using temporary directory %s; %d revisions\n' % (tmpdir, len(revs))) +run(['git', 'clone', '-s', '-b', 'reindent-%s-after' % refbranch, srcdir, 'repo']) +os.chdir('repo') + +with open('.clang-format', 'w') as fd: + fd.write(clangfmt) + +prev = beforeid +for rev in revs: + filestat = run(['git', 'diff', '-z', '--name-status', prev, rev]).rstrip('\0').split('\0') + changes = zip(filestat[0::2], filestat[1::2]) + sys.stderr.write('%s: %d files\n' % (rev, len(changes))) + + for typ, name in changes: + if typ == 'D': + run(['git', 'rm', name]) + elif typ in ['A', 'M']: + run(['git', 'checkout', rev, '--', name]) + if name.endswith('.c') or name.endswith('.h'): + for d in ['babeld/', 'ldpd/', 'nhrpd/']: + if name.startswith(d): + break + else: + sys.stderr.write('\t%s\n' % name) + indent.wrap_file(name) + run(['git', 'add', name]) + + run(['git', 'commit', '-C', rev]) + prev = rev + +run(['git', 'push', 'origin', 'HEAD:refs/heads/reindented-branch']) +sys.stderr.write('\n\n"reindented-branch" should now be OK.\n') +sys.stderr.write('you could use "git reset --hard reindented-branch" to set your current branch to the reindented output\n') +sys.stderr.write('\033[31;1mplease always double-check the output\033[m\n') + diff --git a/tools/indent.py b/tools/indent.py new file mode 100644 index 0000000000..560c13c77d --- /dev/null +++ b/tools/indent.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# 2017 by David Lamparter, placed in public domain + +import sys, re, subprocess, os + +# find all DEFUNs +defun_re = re.compile( + r'^((DEF(UN(_NOSH|_HIDDEN)?|PY)|ALIAS)\s*\(.*?)^(?=\s*\{)', + re.M | re.S) +define_re = re.compile( + r'((^#\s*define[^\n]+[^\\]\n)+)', + re.M | re.S) +# find clang-format control that we just inserted +clean_re = re.compile( + r'^/\* \$FRR indent\$ \*/\s*\n\s*/\* clang-format (on|off) \*/\s*\n', + re.M) + +def wrap_file(fn): + with open(fn, 'r') as fd: + text = fd.read() + + repl = r'/* $FRR indent$ */\n/* clang-format off */\n' + \ + r'\1' + \ + r'/* $FRR indent$ */\n/* clang-format on */\n' + + # around each DEFUN, insert an indent-on/off comment + text = defun_re.sub(repl, text) + text = define_re.sub(repl, text) + + ci = subprocess.Popen(['clang-format'], stdin = subprocess.PIPE, stdout = subprocess.PIPE) + stdout, ign = ci.communicate(text) + ci.wait() + if ci.returncode != 0: + raise IOError('clang-format returned %d' % (ci.returncode)) + + # remove the bits we inserted above + final = clean_re.sub('', stdout) + + tmpname = fn + '.indent' + with open(tmpname, 'w') as ofd: + ofd.write(final) + os.rename(tmpname, fn) + +if __name__ == '__main__': + for fn in sys.argv[1:]: + wrap_file(fn) diff --git a/tools/render_md.py b/tools/render_md.py new file mode 100644 index 0000000000..16c4bbe8a3 --- /dev/null +++ b/tools/render_md.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# written 2016 by David Lamparter, placed in Public Domain. +import sys, markdown + +template = ''' +%s + +''' + +md = markdown.Markdown(extensions=['extra', 'toc']) + +for fn in sys.argv[1:]: + with open(fn, 'r') as ifd: + with open('%s.html' % (fn), 'w') as ofd: + ofd.write((template % (md.convert(ifd.read().decode('UTF-8')))).encode('UTF-8'))