diff options
| author | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2020-03-15 17:16:00 +0100 |
|---|---|---|
| committer | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2020-03-15 18:44:58 +0100 |
| commit | 63a9ef331f5761410255e5f0f2177111c719e3ac (patch) | |
| tree | 986050cee85f19b454e650293664e9611bbef294 /repo/www/helpers.py | |
| parent | 4914800729158cfc6de90b3964c222c4ab225e8e (diff) | |
| download | memory-leaks-63a9ef331f5761410255e5f0f2177111c719e3ac.tar.xz | |
Generate indices for folders without READMEs
Diffstat (limited to 'repo/www/helpers.py')
| -rw-r--r-- | repo/www/helpers.py | 37 |
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) |
