import os def generate_breadcrumbs(content_subdir, commit, dir, files): breadcrumbs = '[/](/{})'.format(os.path.join(content_subdir, tree_join(commit, ''))) subpath = '' for segment in dir.split(os.sep): if not segment or len(segment) == 0: continue subpath = os.path.join(subpath, sanitize_file_name(segment, files)) breadcrumbs += '/[{}](/{})'.format(segment, os.path.join(content_subdir, tree_join(commit, subpath))) return breadcrumbs def sanitize_file_name(file_name, files): if not file_name.startswith('.'): return file_name file_names = [ f.name for f in files ] for i in range(1, 10): new_name = file_name.replace('.', '_' * i, 1) if not new_name in file_names: return new_name raise RuntimeError('Couldn not find unused sanitized file name') def tree_join(commit, path): return os.path.join(commit.hexsha, 't', path)