9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-12-30 15:15:38 +01:00
qp2/bin/qp_name
2019-01-25 11:39:31 +01:00

105 lines
2.8 KiB
Python
Executable File

#!/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 <name> [-r <new_name> | --rename=<new_name>]
Options:
-h Prints the help message
-r <new_name> --rename=<new_name> 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["<name>"]+".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["<name>"] \
+ "\" 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["<name>"]+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)