#!/usr/bin/env python2 """ Displays the names of all the files in which the provider/subroutine/function given as argument is used. With the -r flag, the name can be changed in the whole quantum package. Usage: qp_name [-r | --rename=] Options: -h Prints the help message -r --rename= Renames the provider / subroutine / function and all its occurences Note: It is safe to create a commit before renaming a provider, and then to check what has changed using git diff. """ import re import sys import os try: from docopt import docopt from qp_path import QP_SRC, QP_ROOT except ImportError: print "source .quantum_package.rc" raise def main(arguments): """Main function""" # Check that name exist in */IRPF90_man print "Checking that name exists..." all_modules = os.listdir(QP_SRC) f = arguments[""]+".l" found = False for mod in all_modules: if os.path.isdir(os.path.join(QP_SRC, mod, "IRPF90_man")): for filename in os.listdir(os.path.join(QP_SRC, mod, "IRPF90_man")): if filename == f: found = True break if found: break if not found: print "Error:" print "The variable/subroutine/function \""+arguments[""] \ + "\" was not found in the sources." print "Did you compile the code at the root?" print "Continue? [y/N] ", cont = sys.stdin.read(1).strip() in ["y", "Y"] if not cont: print "Aborted" sys.exit(1) # Now search in all the files if arguments["--rename"]: print "Replacing..." else: print "Searching..." name = re.compile(r"\b"+arguments[""]+r"\b", re.IGNORECASE) for mod in all_modules: dirname = os.path.join(QP_SRC, mod) if not os.path.isdir(dirname): continue for filename in os.listdir(dirname): if "." not in filename: continue filename = os.path.join(dirname, filename) if not os.path.isfile(filename): continue with open(filename, "r") as f: f_in = f.read() if name.search(f_in): print filename if arguments["--rename"]: f_new = name.sub(arguments["--rename"], f_in) with open(filename, "w") as f: f.write(f_new) print "Done" with open(os.path.join(QP_ROOT, "REPLACE"), 'a') as f: print >>f, "qp_name "+" ".join(sys.argv[1:]) if __name__ == '__main__': ARGS = docopt(__doc__) main(ARGS)