diff options
Diffstat (limited to 'repo/www/make-deps.py')
| -rwxr-xr-x | repo/www/make-deps.py | 77 |
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) |
