pp-planer/use_local_pp_lib.sh
Thorsten Bus af46e1829d feat: switch propresenter/parser to remote VCS, add local dev toggle script
Replace path repository with VCS pointing to
git.stadtmission-butzbach.de/public/propresenter-php.git.
Add use_local_pp_lib.sh to toggle between remote and local checkout.
Fix test fixture paths after repo restructure (ref/ → doc/reference_samples/).
2026-03-30 13:45:42 +02:00

115 lines
3.6 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# Toggle propresenter/parser between remote VCS and local path repository.
#
# Usage:
# ./use_local_pp_lib.sh <path> — Switch to local checkout (symlinked)
# ./use_local_pp_lib.sh --remote — Switch back to remote VCS
#
# Examples:
# ./use_local_pp_lib.sh ../propresenter
# ./use_local_pp_lib.sh /absolute/path/to/propresenter-php
# ./use_local_pp_lib.sh --remote
#
set -euo pipefail
COMPOSER_FILE="composer.json"
if [[ ! -f "$COMPOSER_FILE" ]]; then
echo "Error: $COMPOSER_FILE nicht gefunden. Bitte im Projektverzeichnis ausfuehren." >&2
exit 1
fi
if [[ $# -lt 1 ]]; then
echo "Usage: $0 <local-path> | --remote" >&2
echo "" >&2
echo " <local-path> Pfad zum lokalen propresenter-php Checkout" >&2
echo " --remote Zurueck zum Remote-Repository wechseln" >&2
exit 1
fi
switch_to_remote() {
echo "Wechsle zu Remote-VCS Repository..."
php -r '
$json = json_decode(file_get_contents("composer.json"), true);
$json["repositories"] = array_values(array_filter($json["repositories"], function($r) {
return ($r["type"] ?? "") !== "path";
}));
file_put_contents("composer.json", json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n");
'
if [[ -L "vendor/propresenter/parser" ]] || [[ -d "vendor/propresenter/parser" ]]; then
rm -rf vendor/propresenter/parser
fi
composer update propresenter/parser
echo ""
echo "propresenter/parser wird jetzt vom Remote-Repository geladen."
}
switch_to_local() {
local LOCAL_PATH="$1"
if [[ "$LOCAL_PATH" != /* ]]; then
LOCAL_PATH="$(cd "$(dirname "$LOCAL_PATH")" && pwd)/$(basename "$LOCAL_PATH")"
fi
if [[ ! -f "$LOCAL_PATH/composer.json" ]]; then
echo "Error: Keine composer.json in $LOCAL_PATH gefunden." >&2
echo "Bitte den Pfad zum propresenter-php Root-Verzeichnis angeben." >&2
exit 1
fi
local PKG_NAME
PKG_NAME=$(php -r "echo json_decode(file_get_contents('$LOCAL_PATH/composer.json'), true)['name'] ?? '';")
if [[ "$PKG_NAME" != "propresenter/parser" ]]; then
echo "Error: Package in $LOCAL_PATH ist '$PKG_NAME', erwartet 'propresenter/parser'." >&2
exit 1
fi
local REL_PATH
REL_PATH=$(python3 -c "import os; print(os.path.relpath('$LOCAL_PATH', '$(pwd)'))")
echo "Wechsle zu lokalem Checkout: $REL_PATH"
php -r '
$relPath = $argv[1];
$json = json_decode(file_get_contents("composer.json"), true);
$json["repositories"] = array_values(array_filter($json["repositories"], function($r) {
return ($r["type"] ?? "") !== "path";
}));
array_unshift($json["repositories"], [
"type" => "path",
"url" => $relPath,
"options" => ["symlink" => true],
]);
file_put_contents("composer.json", json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n");
' -- "$REL_PATH"
if [[ -L "vendor/propresenter/parser" ]] || [[ -d "vendor/propresenter/parser" ]]; then
rm -rf vendor/propresenter/parser
fi
composer update propresenter/parser
echo ""
echo "propresenter/parser ist jetzt mit $REL_PATH verlinkt (Symlink)."
echo "Aenderungen in $REL_PATH sind sofort verfuegbar."
}
case "$1" in
--remote|-r)
switch_to_remote
;;
--help|-h)
echo "Usage: $0 <local-path> | --remote"
echo ""
echo " <local-path> Pfad zum lokalen propresenter-php Checkout"
echo " --remote Zurueck zum Remote-Repository wechseln"
;;
*)
switch_to_local "$1"
;;
esac