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:
parent
2d33b53be6
commit
c91e507a89
@ -13,7 +13,6 @@ information about the defined products without actually running any build steps.
|
|||||||
from collections.abc import Mapping
|
from collections.abc import Mapping
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
import functools
|
import functools
|
||||||
import json
|
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import re
|
import re
|
||||||
@ -24,7 +23,7 @@ from typing import Callable, Dict, List, Optional, Set, Sequence, Tuple
|
|||||||
|
|
||||||
from tzk import git
|
from tzk import git
|
||||||
from tzk import tw
|
from tzk import tw
|
||||||
from tzk.util import BuildError, pushd
|
from tzk.util import alter_tiddlywiki_info, BuildError, pushd
|
||||||
|
|
||||||
|
|
||||||
def tzk_builder(func):
|
def tzk_builder(func):
|
||||||
@ -648,8 +647,22 @@ def editionify(target_folder: str, description: str) -> None:
|
|||||||
build_state['public_wiki_folder'],
|
build_state['public_wiki_folder'],
|
||||||
target_folder,
|
target_folder,
|
||||||
)
|
)
|
||||||
with (Path(target_folder) / "tiddlywiki.info").open("r") as f:
|
|
||||||
tinfo = json.load(f)
|
def editor(tinfo):
|
||||||
tinfo['description'] = description
|
tinfo['description'] = description
|
||||||
with (Path(target_folder) / "tiddlywiki.info").open("w") as f:
|
return tinfo
|
||||||
json.dump(tinfo, f)
|
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)
|
||||||
|
24
tzk/tw.py
24
tzk/tw.py
@ -114,18 +114,28 @@ def _init_tw(wiki_name: str) -> None:
|
|||||||
os.environ['TIDDLYWIKI_EDITION_PATH'] = old_edition_path
|
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
|
Add the plugins from the edition's tiddlywiki.info to the new wiki's
|
||||||
required for Node.js client-server operation to the new wiki's tiddlywiki.info.
|
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"
|
info_path = Path.cwd() / wiki_name / "tiddlywiki.info"
|
||||||
|
edition_path = Path(__file__).parent / "editions" / "tzk" / "tiddlywiki.info"
|
||||||
|
|
||||||
with info_path.open("r") as f:
|
with info_path.open("r") as f:
|
||||||
info_data = json.load(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:
|
with info_path.open("w") as f:
|
||||||
json.dump(info_data, f)
|
json.dump(info_data, f, indent=4)
|
||||||
|
|
||||||
|
|
||||||
def _init_gitignore() -> None:
|
def _init_gitignore() -> None:
|
||||||
@ -180,7 +190,7 @@ def install(wiki_name: str, tw_version_spec: str, author: Optional[str],
|
|||||||
else:
|
else:
|
||||||
_init_tw(wiki_name)
|
_init_tw(wiki_name)
|
||||||
|
|
||||||
_add_filesystem_plugins(wiki_name)
|
_restore_plugins(wiki_name)
|
||||||
_init_gitignore()
|
_init_gitignore()
|
||||||
_initial_commit()
|
_initial_commit()
|
||||||
|
|
||||||
|
17
tzk/util.py
17
tzk/util.py
@ -2,16 +2,29 @@
|
|||||||
util.py - miscellaneous utility functions
|
util.py - miscellaneous utility functions
|
||||||
"""
|
"""
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
from typing import NoReturn
|
from typing import Any, Callable, Dict, NoReturn
|
||||||
|
|
||||||
|
|
||||||
class BuildError(Exception):
|
class BuildError(Exception):
|
||||||
pass
|
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:
|
def fail(msg: str, exit_code: int = 1) -> NoReturn:
|
||||||
"Print message to stderr and quit with exit code 1."
|
"Print message to stderr and quit with exit code 1."
|
||||||
print(msg, file=sys.stderr)
|
print(msg, file=sys.stderr)
|
||||||
@ -54,4 +67,4 @@ def require_dependencies() -> None:
|
|||||||
if shutil.which("git") is None:
|
if shutil.which("git") is None:
|
||||||
fail("Git is not available. "
|
fail("Git is not available. "
|
||||||
"Please install Git and make it available on your PATH.\n"
|
"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")
|
||||||
|
Loading…
Reference in New Issue
Block a user