diff --git a/migrations/1789581661.sh b/migrations/1789581661.sh index cc881c26..8dce1c3e 100644 --- a/migrations/1789581661.sh +++ b/migrations/1789581661.sh @@ -2,9 +2,16 @@ echo "Install Elsewhen, the world clock plugin" omarchy-pkg-add elsewhen -# Dev checkouts do not contain plugins installed by system packages. packaged_plugin="/usr/share/omarchy/shell/plugins/omacom.elsewhen" user_plugin="$HOME/.config/omarchy/plugins/omacom.elsewhen" + +# The package moved from plugins/ to shell/plugins/ once, stranding the link an +# earlier run made to the old path. A link the user made is left alone. +if [[ -L $user_plugin && ! -e $user_plugin && $(readlink "$user_plugin") == /usr/share/omarchy/* && -d $packaged_plugin ]]; then + ln -sfn "$packaged_plugin" "$user_plugin" +fi + +# Dev checkouts do not contain plugins installed by system packages. if [[ ! $OMARCHY_PATH -ef /usr/share/omarchy && -d $packaged_plugin && ! -e $user_plugin && ! -L $user_plugin ]]; then mkdir -p "${user_plugin%/*}" ln -s "$packaged_plugin" "$user_plugin" diff --git a/test/shell.d/elsewhen-default-migration-test.sh b/test/shell.d/elsewhen-default-migration-test.sh index 2775e1bb..78dc69a9 100644 --- a/test/shell.d/elsewhen-default-migration-test.sh +++ b/test/shell.d/elsewhen-default-migration-test.sh @@ -90,6 +90,16 @@ run_migration "$ROOT" [[ $(readlink "$plugin") == "$test_dir/custom-plugin" ]] || fail "existing symlink is preserved" pass "existing symlink is preserved, including a missing target" +# An earlier revision, and a symlink once shipped under config/, pointed every +# install at the package's old path. +for tree in "$ROOT" "$test_dir/packaged"; do + ln -sfn "$test_dir/packaged/plugins/omacom.elsewhen" "$plugin" + run_migration "$tree" + [[ $(readlink "$plugin") == "$test_dir/packaged/shell/plugins/omacom.elsewhen" ]] || + fail "a stranded link to the package's old path is re-pointed (OMARCHY_PATH=$tree)" "$(readlink "$plugin")" +done +pass "a stranded link to the package's old path is re-pointed on every install" +rm "$plugin" if env TEST_PUT_RESULT=unknown HOME="$test_dir/home" OMARCHY_PATH="$ROOT" PATH="$test_dir/bin:$ROOT/bin:$PATH" \ bash -euo pipefail "$test_dir/migration.sh" >"$test_dir/output" 2>&1; then