copy all plugins across tiddlywiki.info when creating edition

Don't know why it doesn't do this itself. Also opened a forum thread:
https://talk.tiddlywiki.org/t/tiddlywiki-init-removing-plugins-from-the-edition/819
This commit is contained in:
Soren I. Bjornstad 2021-09-21 10:21:41 -05:00
parent 2d33b53be6
commit c91e507a89
3 changed files with 52 additions and 16 deletions

View File

@ -13,7 +13,6 @@ information about the defined products without actually running any build steps.
from collections.abc import Mapping
from contextlib import contextmanager
import functools
import json
import os
from pathlib import Path
import re
@ -24,7 +23,7 @@ from typing import Callable, Dict, List, Optional, Set, Sequence, Tuple
from tzk import git
from tzk import tw
from tzk.util import BuildError, pushd
from tzk.util import alter_tiddlywiki_info, BuildError, pushd
def tzk_builder(func):
@ -648,8 +647,22 @@ def editionify(target_folder: str, description: str) -> None:
build_state['public_wiki_folder'],
target_folder,
)
with (Path(target_folder) / "tiddlywiki.info").open("r") as f:
tinfo = json.load(f)
tinfo['description'] = description
with (Path(target_folder) / "tiddlywiki.info").open("w") as f:
json.dump(tinfo, f)
def editor(tinfo):
tinfo['description'] = description
return tinfo
alter_tiddlywiki_info(Path(target_folder) / "tiddlywiki.info", editor)
@tzk_builder
def add_plugins(plugins: Sequence[str]) -> None:
"""
Add one or more plugins to the tiddlywiki.info file.
:param plugins: A list of plugin names (e.g., "tiddlywiki/codemirror") to add.
"""
def editor(tinfo):
tinfo['plugins'].extend(plugins)
return tinfo
alter_tiddlywiki_info(Path(build_state['public_wiki_folder']) / "tiddlywiki.info",
editor)

View File

@ -114,18 +114,28 @@ def _init_tw(wiki_name: str) -> None:
os.environ['TIDDLYWIKI_EDITION_PATH'] = old_edition_path
def _add_filesystem_plugins(wiki_name: str) -> None:
def _restore_plugins(wiki_name: str) -> None:
"""
Add the "tiddlywiki/filesystem" and "tiddlywiki/tiddlyweb" plugins
required for Node.js client-server operation to the new wiki's tiddlywiki.info.
Add the plugins from the edition's tiddlywiki.info to the new wiki's
tiddlywiki.info (for some reason, this is not done automatically). Also
add the two plugins required for client-server operation.
"""
print("tzk: Adding filesystem plugins to tiddlywiki.info...")
print("tzk: Adding plugins to tiddlywiki.info...")
info_path = Path.cwd() / wiki_name / "tiddlywiki.info"
edition_path = Path(__file__).parent / "editions" / "tzk" / "tiddlywiki.info"
with info_path.open("r") as f:
info_data = json.load(f)
info_data['plugins'] = ["tiddlywiki/filesystem", "tiddlywiki/tiddlyweb"]
with edition_path.open("r") as f:
edition_data = json.load(f)
plugins = {"tiddlywiki/filesystem", "tiddlywiki/tiddlyweb"}
plugins = plugins.union(edition_data['plugins'])
info_data['plugins'] = sorted(plugins)
with info_path.open("w") as f:
json.dump(info_data, f)
json.dump(info_data, f, indent=4)
def _init_gitignore() -> None:
@ -180,7 +190,7 @@ def install(wiki_name: str, tw_version_spec: str, author: Optional[str],
else:
_init_tw(wiki_name)
_add_filesystem_plugins(wiki_name)
_restore_plugins(wiki_name)
_init_gitignore()
_initial_commit()

View File

@ -2,16 +2,29 @@
util.py - miscellaneous utility functions
"""
from contextlib import contextmanager
import json
import os
from pathlib import Path
import shutil
import sys
from typing import NoReturn
from typing import Any, Callable, Dict, NoReturn
class BuildError(Exception):
pass
def alter_tiddlywiki_info(
info_path: Path,
edit_func: Callable[[Dict[str, Any]], Dict[str, Any]]) -> None:
"Change a tiddlywiki.info (or other json file) in an arbitrary manner."
with info_path.open("r") as f:
tinfo = json.load(f)
tinfo = edit_func(tinfo)
with info_path.open("w") as f:
json.dump(tinfo, f, indent=2)
def fail(msg: str, exit_code: int = 1) -> NoReturn:
"Print message to stderr and quit with exit code 1."
print(msg, file=sys.stderr)
@ -54,4 +67,4 @@ def require_dependencies() -> None:
if shutil.which("git") is None:
fail("Git is not available. "
"Please install Git and make it available on your PATH.\n"
"https://git-scm.com/book/en/v2/Getting-Started-Installing-Git")
"https://git-scm.com/book/en/v2/Getting-Started-Installing-Git")