mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-11-14 01:53:49 +01:00
105 lines
2.8 KiB
Plaintext
105 lines
2.8 KiB
Plaintext
|
#!/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)
|
||
|
|