78 lines
1.8 KiB
Python
Executable file
78 lines
1.8 KiB
Python
Executable file
#!/usr/bin/python3
|
|
|
|
from sys import argv
|
|
from lib import echo, script, scriptLines
|
|
import lib
|
|
import data
|
|
|
|
db = data.DB()
|
|
|
|
cmd = argv[1]
|
|
|
|
if cmd == 'versions':
|
|
p = script ('list-tags')
|
|
echo (p)
|
|
|
|
elif cmd == 'dir':
|
|
version = argv[2]
|
|
path = argv[3]
|
|
p = script ('get-dir', version, path)
|
|
echo (p)
|
|
|
|
elif cmd == 'file':
|
|
version = argv[2]
|
|
path = argv[3]
|
|
ext = path[-2:]
|
|
|
|
if ext == '.c' or ext == '.h':
|
|
tokens = scriptLines ('tokenize-file', version, path)
|
|
toBe = True
|
|
for tok in tokens:
|
|
toBe = not toBe
|
|
if toBe and db.defs.exists (tok) and lib.isIdent (tok):
|
|
tok = b'\033[31m' + tok + b'\033[0m'
|
|
else:
|
|
tok = lib.unescape (tok)
|
|
echo (tok)
|
|
else:
|
|
p = script ('get-file', version, path)
|
|
echo (p)
|
|
|
|
elif cmd == 'ident':
|
|
version = argv[2]
|
|
ident = argv[3]
|
|
|
|
if not db.defs.exists (ident):
|
|
print (argv[0] + ': Unknown identifier: ' + ident)
|
|
exit()
|
|
|
|
vers = db.vers.get (version).iter()
|
|
defs = db.defs.get (ident).iter (dummy=True)
|
|
refs = db.refs.get (ident).iter (dummy=True)
|
|
|
|
id2, type, dline = next (defs)
|
|
id3, rlines = next (refs)
|
|
|
|
dBuf = []
|
|
rBuf = []
|
|
|
|
for id1, path in vers:
|
|
while id1 > id2:
|
|
id2, type, dline = next (defs)
|
|
while id1 > id3:
|
|
id3, rlines = next (refs)
|
|
if id1 == id2:
|
|
dBuf.append ((path, type, dline))
|
|
if id1 == id3:
|
|
rBuf.append ((path, rlines))
|
|
|
|
print ('Defined in', len (dBuf), 'files:')
|
|
for path, type, dline in sorted (dBuf):
|
|
print (path + ': ' + str (dline) + ' (' + type + ')')
|
|
|
|
print ('\nReferenced in', len (rBuf), 'files:')
|
|
for path, rlines in sorted (rBuf):
|
|
print (path + ': ' + rlines)
|
|
|
|
else:
|
|
print (argv[0] + ': Unknown subcommand: ' + cmd)
|