query: Move 'exists' command to a function

This commit is contained in:
Franciszek Stachura 2025-02-25 23:39:10 +01:00 committed by Théo Lebrun
parent 2a93ee95fb
commit ac5a64b972
4 changed files with 19 additions and 17 deletions

View file

@ -21,7 +21,7 @@ class MakefileDirFilter(Filter):
if filedir != '/':
filedir += '/'
if ctx.query.query('exist', ctx.tag, filedir + m.group(1) + '/Makefile'):
if ctx.query.file_exists(ctx.tag, filedir + m.group(1) + '/Makefile'):
self.makefiledir.append(m.group(1))
return f'__KEEPMAKEFILEDIR__{ encode_number(len(self.makefiledir)) }/{ m.group(2) }'
else:

View file

@ -21,7 +21,7 @@ class MakefileFileFilter(Filter):
if filedir != '/':
filedir += '/'
if ctx.query.query('exist', ctx.tag, filedir + m.group(1)):
if ctx.query.file_exists(ctx.tag, filedir + m.group(1)):
self.makefilefile.append(m.group(1))
return f'__KEEPMAKEFILEFILE__{ encode_number(len(self.makefilefile)) }{ m.group(2) }'
else:

View file

@ -15,7 +15,7 @@ class MakefileSrcTreeFilter(Filter):
def transform_raw_code(self, ctx, code: str) -> str:
def keep_makefilesrctree(m):
if ctx.query.query('exist', ctx.tag, '/' + m.group(1)):
if ctx.query.file_exists(ctx.tag, '/' + m.group(1)):
self.makefilesrctree.append(m.group(1))
return f'__KEEPMAKEFILESRCTREE__{ encode_number(len(self.makefilesrctree)) }{ m.group(2) }'
else:

View file

@ -94,20 +94,7 @@ class Query:
elif cmd == 'exist':
version = args[0]
path = args[1]
if version not in self.file_cache:
version_cache = set()
last_dir = None
for _, path in self.db.vers.get(version).iter():
dirname, filename = os.path.split(path)
if dirname != last_dir:
last_dir = dirname
version_cache.add(dirname)
version_cache.add(path)
self.file_cache[version] = version_cache
return path.strip('/') in self.file_cache[version]
return self.file_exists(version, path)
elif cmd == 'dir':
version = args[0]
@ -178,6 +165,21 @@ class Query:
else:
return 'Unknown subcommand: ' + cmd + '\n'
# Returns True if file exists
def file_exists(self, version, path):
if version not in self.file_cache:
version_cache = set()
last_dir = None
for _, path in self.db.vers.get(version).iter():
dirname, filename = os.path.split(path)
if dirname != last_dir:
last_dir = dirname
version_cache.add(dirname)
version_cache.add(path)
self.file_cache[version] = version_cache
return path.strip('/') in self.file_cache[version]
# Returns the contents of the specified file
# Tokens are marked for further processing