summaryrefslogtreecommitdiff
path: root/repo/www/helpers.py
diff options
context:
space:
mode:
authorKévin Le Gouguec <kevin.legouguec@gmail.com>2020-03-15 17:16:00 +0100
committerKévin Le Gouguec <kevin.legouguec@gmail.com>2020-03-15 18:44:58 +0100
commit63a9ef331f5761410255e5f0f2177111c719e3ac (patch)
tree986050cee85f19b454e650293664e9611bbef294 /repo/www/helpers.py
parent4914800729158cfc6de90b3964c222c4ab225e8e (diff)
downloadmemory-leaks-63a9ef331f5761410255e5f0f2177111c719e3ac.tar.xz
Generate indices for folders without READMEs
Diffstat (limited to 'repo/www/helpers.py')
-rw-r--r--repo/www/helpers.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/repo/www/helpers.py b/repo/www/helpers.py
new file mode 100644
index 0000000..57f679d
--- /dev/null
+++ b/repo/www/helpers.py
@@ -0,0 +1,37 @@
+from collections import defaultdict
+from dataclasses import dataclass, field
+from os import path
+from typing import List, Set
+
+
+@dataclass
+class Directory:
+ files: List[str] = field(default_factory=list)
+ subfolders: Set[str] = field(default_factory=set)
+
+
+def _find_files(extensions, repository):
+ patterns = (f'**.{ext}' for ext in extensions)
+ zero = '\x00'
+ return repository.git.ls_files('-z', *patterns).strip(zero).split(zero)
+
+
+def _fill_directories(files, top_dir):
+ directories = defaultdict(Directory)
+
+ for f in files:
+ fdir, fname = path.split(f)
+
+ directories[fdir].files.append(fname)
+
+ if fdir:
+ parent, child = path.split(fdir)
+ directories[parent].subfolders.add(child)
+
+ return directories
+
+
+def compute_directories(extensions, repository):
+ files = _find_files(extensions, repository)
+ top_dir = path.relpath(repository.working_dir, path.curdir)
+ return _fill_directories(files, top_dir)