diff options
Diffstat (limited to 'tools/dev/wc-ng/count-progress.py')
-rwxr-xr-x | tools/dev/wc-ng/count-progress.py | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/tools/dev/wc-ng/count-progress.py b/tools/dev/wc-ng/count-progress.py new file mode 100755 index 0000000..bf06512 --- /dev/null +++ b/tools/dev/wc-ng/count-progress.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python +# +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# + +import os, sys + +SKIP = ['deprecated.c', + 'entries.c', + 'entries.h', + 'old-and-busted.c'] + +TERMS = ['svn_wc_adm_access_t', + 'svn_wc_entry_t', + 'svn_wc__node_', + 'svn_wc__db_temp_', + 'svn_wc__db_node_hidden', + 'svn_wc__loggy', + 'svn_wc__db_wq_add', + ] + + +def get_files_in(path): + names = os.listdir(path) + for skip in SKIP: + try: + names.remove(skip) + except ValueError: + pass + return [os.path.join(path, fname) for fname in names + if fname.endswith('.c') or fname.endswith('.h')] + + +def count_terms_in(path): + files = get_files_in(path) + counts = {} + for term in TERMS: + counts[term] = 0 + for filepath in get_files_in(path): + contents = open(filepath).read() + for term in TERMS: + counts[term] += contents.count(term) + return counts + + +def print_report(wcroot): + client = count_terms_in(os.path.join(wcroot, 'subversion', 'libsvn_client')) + wc = count_terms_in(os.path.join(wcroot, 'subversion', 'libsvn_wc')) + + client_total = 0 + wc_total = 0 + + FMT = '%22s |%14s |%10s |%6s' + SEP = '%s+%s+%s+%s' % (23*'-', 15*'-', 11*'-', 7*'-') + + print(FMT % ('', 'libsvn_client', 'libsvn_wc', 'Total')) + print(SEP) + for term in TERMS: + print(FMT % (term, client[term], wc[term], client[term] + wc[term])) + client_total += client[term] + wc_total += wc[term] + print(SEP) + print(FMT % ('Total', client_total, wc_total, client_total + wc_total)) + + +def usage(): + print("""\ +Usage: %s [WCROOT] + %s --help + +Show statistics related to outstanding WC-NG code conversion work +items in working copy branch root WCROOT. If WCROOT is omitted, this +program will attempt to guess it using the assumption that it is being +run from within the working copy of interest.""" +% (sys.argv[0], sys.argv[0])) + + sys.exit(0) + + +if __name__ == '__main__': + if len(sys.argv) > 1: + if '--help' in sys.argv[1:]: + usage() + + print_report(sys.argv[1]) + else: + cwd = os.path.abspath(os.getcwd()) + idx = cwd.rfind(os.sep + 'subversion') + if idx > 0: + wcroot = cwd[:idx] + else: + idx = cwd.rfind(os.sep + 'tools') + if idx > 0: + wcroot = cwd[:idx] + elif os.path.exists(os.path.join(cwd, 'subversion')): + wcroot = cwd + else: + print("ERROR: the root of 'trunk' cannot be located -- please provide") + sys.exit(1) + print_report(wcroot) |