Repository navigation
ask before editing shell profiles in install.sh and uninstall.sh - #11
Merged
Merged
Conversation
install.sh appended a source line to the user's shell profile, and uninstall.sh rewrote profiles, without asking. Neither should change a user's shell configuration without express permission. - install.sh: ask before adding the source line when run in a terminal. When stdin is not a terminal, leave the profile untouched and print the line to add. New flags: --yes adds the line without asking, --no-profile never touches the profile. Unknown options are rejected. - uninstall.sh: ask per profile before removing the source line, and list the profiles without changing them when not run in a terminal. --yes removes the line without asking. - uninstall.sh: rewrite profiles in place instead of replacing them with mv. A symlinked profile (common with dotfile managers) stays a symlink and keeps its permissions. Also stop aborting under set -e when the source line was the only line in the file (grep -v exits 1). - update.sh: pass its arguments through to install.sh. Tests: add tests/installers.bats (12 tests), run with HOME pointed at a temporary directory so nothing outside it is touched. Covers the non-interactive default, --yes, --no-profile, interactive y/n answers, symlinked profiles, file modes and the single-line profile case.
The uninstall.sh symlink test read the file mode with `stat -f %Lp ... || stat -c %a ...`. On GNU/Linux, `stat -f` is the filesystem-status form: it exits 0 with unrelated output, so the fallback never ran and the assertion failed on the Ubuntu CI job. Compare `ls -l` permissions instead, which is the same on macOS and Linux. No production code changes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
install.sh appended a source line to the user's shell profile, and uninstall.sh rewrote profiles, without asking. Neither should change a user's shell configuration without express permission.
Tests: add tests/installers.bats (12 tests), run with HOME pointed at a temporary directory so nothing outside it is touched. Covers the non-interactive default, --yes, --no-profile, interactive y/n answers, symlinked profiles, file modes and the single-line profile case.
What and why
Changes
Checklist
All PRs
bats tests/passes locallyshellcheck worktree-functions.shpasses locallyCHANGELOG.mdupdated (add entry under[Unreleased])New public functions
[ "$1" = "--help" ] && { wrktr_help <name>; return 0; }guard presentwrktr_validate || return 1at top (for session-dependent functions)_wrktr_runwraps mutations;_wrktr_is_dryrungates conditional logic_wrktr_breaker red "..."(writes to stderr)wrktr_helpcase statementdocs/wrktr.mdfunction referencedocs/wrktr.mdtests/wrktr.bats(at least one success, one failure)Behavior changes to existing functions
docs/wrktr.mdupdated if command usage or behavior description changed