-
Notifications
You must be signed in to change notification settings - Fork 0
feat(installer): add legacy migration and prevent recursive loops #12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -19,7 +19,7 @@ fi | |
| usage() { | ||
| cat <<'USAGE' | ||
| Usage: install.sh [--prefix PATH] [--force] [--with-ui] | ||
| [--auto] [--yes] | ||
| [--auto] [--yes] | ||
| [--profiles minimal|dev|ops[,..]] | ||
| [--features gnu_over_bsd,build_flags,...] | ||
| [--install brew,asdf,doppler,...] | ||
|
|
@@ -71,7 +71,7 @@ GET_BASHED_GIT_SIGNING=0 | |
|
|
||
| while [[ $# -gt 0 ]]; do | ||
| case "$1" in | ||
| --prefix) | ||
| --prefix) | ||
| if [[ $# -lt 2 ]]; then | ||
| echo "Error: --prefix requires a value" >&2 | ||
| usage | ||
|
|
@@ -515,6 +515,41 @@ if [[ "$DRY_RUN" -eq 1 ]]; then | |
| echo " Installers: ${INSTALLS:-<none>}" | ||
| fi | ||
|
|
||
| # @internal | ||
| migrate_legacy() { | ||
| local legacy_rc_d="$HOME/.bashrc.d" | ||
| local legacy_secrets_d="$HOME/.secrets.d" | ||
|
|
||
| if [[ -d "$legacy_rc_d" && ! -L "$legacy_rc_d" ]]; then | ||
| echo "Migrating legacy .bashrc.d to $PREFIX/bashrc.d..." | ||
| mkdir -p "$PREFIX/bashrc.d" | ||
| # Copy files, avoid error if empty | ||
| find "$legacy_rc_d" -type f -exec cp -p {} "$PREFIX/bashrc.d/" \; | ||
| rm -rf "$legacy_rc_d" | ||
|
Comment on lines
+527
to
+528
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Using |
||
| fi | ||
|
|
||
| if [[ -d "$legacy_secrets_d" && ! -L "$legacy_secrets_d" ]]; then | ||
| echo "Migrating legacy .secrets.d to $PREFIX/secrets.d..." | ||
| mkdir -p "$PREFIX/secrets.d" | ||
| chmod 700 "$PREFIX/secrets.d" | ||
| find "$legacy_secrets_d" -type f -exec cp -p {} "$PREFIX/secrets.d/" \; | ||
| rm -rf "$legacy_secrets_d" | ||
|
Comment on lines
+535
to
+536
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| fi | ||
|
Comment on lines
+519
to
+537
|
||
|
|
||
| # Detect and fix "template as file" loop hazard | ||
| for f in "$HOME/.bashrc" "$HOME/.bash_profile"; do | ||
| if [[ -f "$f" && ! -L "$f" ]]; then | ||
| if grep -q "@file bashrc" "$f" || grep -q "@file bash_profile" "$f"; then | ||
| if [[ "$LINK_DOTFILES" -eq 0 ]]; then | ||
| echo "Detected recursive loop hazard in $f. Cleaning..." | ||
| backup_file "$f" | ||
| echo "# get-bashed: recovered from loop" > "$f" | ||
| fi | ||
|
Comment on lines
+539
to
+547
|
||
| fi | ||
| fi | ||
| done | ||
| } | ||
|
|
||
| mkdir -p "$PREFIX" | ||
| export GET_BASHED_HOME="$PREFIX" | ||
| export GET_BASHED_VIMRC_MODE="$VIMRC_MODE" | ||
|
|
@@ -538,6 +573,8 @@ cp -f "$REPO_DIR/inputrc" "$PREFIX/inputrc" | |
| cp -f "$REPO_DIR/vimrc" "$PREFIX/vimrc" | ||
| cp -f "$REPO_DIR/gitconfig" "$PREFIX/gitconfig" | ||
|
|
||
| migrate_legacy | ||
|
|
||
|
Comment on lines
573
to
+577
|
||
| # secrets.d bootstrap (only inside GET_BASHED_HOME) | ||
| mkdir -p "$PREFIX/secrets.d" | ||
| chmod 700 "$PREFIX/secrets.d" | ||
|
|
@@ -597,10 +634,10 @@ else | |
| # shellcheck disable=SC2016 | ||
| BASHRC_LINE="# get-bashed: source modular bashrc" | ||
| # shellcheck disable=SC2016 | ||
| BASHRC_SNIP='if [[ -r "$HOME/.get-bashed/bashrc" ]]; then source "$HOME/.get-bashed/bashrc"; fi' | ||
| BASHRC_SNIP="if [[ -r \"$PREFIX/bashrc\" ]]; then source \"$PREFIX/bashrc\"; fi" | ||
| BASH_PROFILE_LINE="# get-bashed: source login bash_profile" | ||
| # shellcheck disable=SC2016 | ||
| BASH_PROFILE_SNIP='if [[ -r "$HOME/.get-bashed/bash_profile" ]]; then source "$HOME/.get-bashed/bash_profile"; fi' | ||
| BASH_PROFILE_SNIP="if [[ -r \"$PREFIX/bash_profile\" ]]; then source \"$PREFIX/bash_profile\"; fi" | ||
|
|
||
| ensure_block "$HOME/.bashrc" "$BASHRC_LINE" "$BASHRC_SNIP" | ||
| ensure_block "$HOME/.bash_profile" "$BASH_PROFILE_LINE" "$BASH_PROFILE_SNIP" | ||
|
Comment on lines
634
to
643
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The
migrate_legacyfunction performs destructive operations (likerm -rf) and modifies the filesystem, but it does not respect the$DRY_RUNflag. This violates the expectation that--dry-runshould not modify the system.