summaryrefslogtreecommitdiff
path: root/repo/www/make-deps.py
diff options
context:
space:
mode:
Diffstat (limited to 'repo/www/make-deps.py')
-rwxr-xr-xrepo/www/make-deps.py77
1 files changed, 30 insertions, 47 deletions
diff --git a/repo/www/make-deps.py b/repo/www/make-deps.py
index c2a88e1..b7c71d7 100755
--- a/repo/www/make-deps.py
+++ b/repo/www/make-deps.py
@@ -6,30 +6,18 @@ We want to compute:
- a list of leaf pages,
- a list of auto-generated indices,
-
- dependencies for leaf pages:
OUTPUT/foo/bar.html: foo/bar.txt | OUTPUT/foo
-
- special case for READMEs:
OUTPUT/foo/index.html: foo/README.txt foo | OUTPUT/foo
-
-- dependencies for auto-generated indices:
- OUTPUT/foo/index.html: foo | OUTPUT/foo
"""
-from collections import defaultdict
-from dataclasses import dataclass, field
from os import path
from sys import argv, exit
-from typing import List, Set
from git import Repo
-
-@dataclass
-class Directory:
- files: List[str] = field(default_factory=list)
- subfolders: Set[str] = field(default_factory=set)
+from helpers import compute_directories
def parse_arguments(args):
@@ -39,62 +27,57 @@ def parse_arguments(args):
return argv[1].split(), argv[2]
-def find_sources(extensions, repository):
- patterns = (f'**.{ext}' for ext in extensions)
- zero = '\x00'
- return repository.git.ls_files('-z', *patterns).strip(zero).split(zero)
-
-
-def compute_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)
+def pjoin(directory, item):
+ return (
+ path.join(directory, item)
+ if item # Avoid trailing slash for top-level files.
+ else directory
+ )
- return directories
-
-def write_dependencies(deps, directories, top_dir, out_dir):
+def write_dependencies(deps_file, directories, top_dir, out_dir):
pages = list()
+ autoindices = list()
for dpath, d in directories.items():
+ autoindex = True
+
+ src_dir = pjoin(top_dir, dpath)
for f in d.files:
+ src_path = path.join(src_dir, f)
+
name, _ = path.splitext(f)
+ deps = [src_path]
+
if name == 'README':
name = 'index'
+ deps.append(src_dir)
+ autoindex = False
- html_dir = (
- path.join(out_dir, dpath)
- if dpath
- else out_dir
- )
-
+ html_dir = pjoin(out_dir, dpath)
html_path = path.join(html_dir, name+'.html')
- src_path = path.join(top_dir, dpath, f)
- print(f'{html_path}: {src_path} | {html_dir}', file=deps)
+ print(f'{html_path}: {" ".join(deps)} | {html_dir}', file=deps_file)
pages.append(html_path)
- print(file=deps)
- print(f'pages = {" ".join(pages)}', file=deps)
+ if autoindex:
+ autoindices.append(
+ path.join(out_dir, dpath, 'index.html')
+ )
+
+ print(file=deps_file)
+ print(f'pages = {" ".join(pages)}', file=deps_file)
+ print(f'autoindices = {" ".join(autoindices)}', file=deps_file)
def main(arguments):
extensions, out_dir = parse_arguments(arguments)
repository = Repo(search_parent_directories=True)
- top_dir = repository.working_dir
-
- source_files = find_sources(extensions, repository)
+ top_dir = path.relpath(repository.working_dir, path.curdir)
- directories = compute_directories(source_files, top_dir)
+ directories = compute_directories(extensions, repository)
with open('deps.mk', 'w') as deps:
write_dependencies(deps, directories, top_dir, out_dir)