diff --git a/elixir/filters/makefiledir.py b/elixir/filters/makefiledir.py index 77a7e42..73015c7 100755 --- a/elixir/filters/makefiledir.py +++ b/elixir/filters/makefiledir.py @@ -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: diff --git a/elixir/filters/makefilefile.py b/elixir/filters/makefilefile.py index 5cc27b0..be60bef 100755 --- a/elixir/filters/makefilefile.py +++ b/elixir/filters/makefilefile.py @@ -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: diff --git a/elixir/filters/makefilesrctree.py b/elixir/filters/makefilesrctree.py index d9caf00..4149439 100755 --- a/elixir/filters/makefilesrctree.py +++ b/elixir/filters/makefilesrctree.py @@ -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: diff --git a/elixir/query.py b/elixir/query.py index ec44e75..8562a43 100755 --- a/elixir/query.py +++ b/elixir/query.py @@ -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