#!/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, QP_PLUGINS except ImportError: print "source .quantum_package.rc" raise def main(arguments): # 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__': arguments = docopt(__doc__) main(arguments)