Skip to content

Commit

Permalink
uninstall: try to determine initialization file
Browse files Browse the repository at this point in the history
uninstall: TIL that `fgrep` is deprecated...
  • Loading branch information
gaelicWizard committed Feb 20, 2022
1 parent 444cb8f commit 118861f
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 24 deletions.
63 changes: 42 additions & 21 deletions test/install/uninstall.bats
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,37 @@

load ../test_helper

# Determine which config file to use based on OS.
case $OSTYPE in
darwin*)
export BASH_IT_CONFIG_FILE=.bash_profile
;;
*)
export BASH_IT_CONFIG_FILE=.bashrc
;;
esac

function local_setup {
setup_test_fixture
}

@test "uninstall: verify that the uninstall script exists" {
assert_file_exist "$BASH_IT/uninstall.sh"
@test "uninstall: run the uninstall script with existing backup 'bashrc'" {
BASH_IT_CONFIG_FILE=.bashrc

echo "test file content for backup" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak"
echo "test file content for original BASH_IT file" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
local md5_bak=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak" | awk '{print $1}')

run "${BASH_IT?}/uninstall.sh"
assert_success

assert_file_not_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.uninstall"
assert_file_not_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak"
assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"

local md5_conf=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')

assert_equal "$md5_bak" "$md5_conf"
}

@test "uninstall: run the uninstall script with an existing backup file" {
cd "$BASH_IT"
@test "uninstall: run the uninstall script with existing backup 'bash_profile'" {
BASH_IT_CONFIG_FILE=.bash_profile

echo "test file content for backup" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak"
echo "test file content for original file" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
echo "test file content for original BASH_IT file" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
local md5_bak=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak" | awk '{print $1}')

./uninstall.sh

run "${BASH_IT?}/uninstall.sh"
assert_success

assert_file_not_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.uninstall"
Expand All @@ -40,14 +44,31 @@ function local_setup {
assert_equal "$md5_bak" "$md5_conf"
}

@test "uninstall: run the uninstall script without an existing backup file" {
cd "$BASH_IT"
@test "uninstall: run the uninstall script without existing backup 'bashrc" {
BASH_IT_CONFIG_FILE=.bashrc

echo "test file content for original file" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
echo "test file content for original BASH_IT file" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
local md5_orig=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')

./uninstall.sh
run "${BASH_IT?}/uninstall.sh"
assert_success

assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.uninstall"
assert_file_not_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.bak"
assert_file_not_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"

local md5_uninstall=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.uninstall" | awk '{print $1}')

assert_equal "$md5_orig" "$md5_uninstall"
}

@test "uninstall: run the uninstall script without existing backup 'bash_profile" {
BASH_IT_CONFIG_FILE=.bash_profile

echo "test file content for original BASH_IT file" > "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE"
local md5_orig=$(md5sum "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')

run "${BASH_IT?}/uninstall.sh"
assert_success

assert_file_exist "$BASH_IT_TEST_HOME/$BASH_IT_CONFIG_FILE.uninstall"
Expand Down
24 changes: 21 additions & 3 deletions uninstall.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,30 @@

: "${BASH_IT:=${HOME?}/.bash_it}"

CONFIG_FILE=".bashrc"
if [[ ! -e ~/.bashrc && -e ~/.bash_profile ]]; then
# legacy Mac or WSL or just no backup file
if [[ ! -e ~/.bashrc && ! -e ~/.bash_profile && ! -e ~/.bashrc.bak && ! -e ~/.bash_profile.bak ]]; then
echo "We can't locate your configuration files, so we can't uninstall..."
return
elif grep -F -q -- BASH_IT ~/.bashrc && grep -F -q -- BASH_IT ~/.bash_profile; then
echo "We can't figure out if Bash-it is loaded from ~/.bashrc or ~/.bash_profile..."
return
elif grep -F -q -- BASH_IT ~/.bashrc || [[ -e ~/.bashrc.bak && ! -e ~/.bashrc ]]; then
CONFIG_FILE=".bashrc"
elif grep -F -q -- BASH_IT ~/.bash_profile || [[ -e ~/.bash_profile.bak && ! -e ~/.bash_profile ]]; then
CONFIG_FILE=".bash_profile"
else
echo "Bash-it does not appear to be installed."
return
fi

# possible states:
# - both .bash* /and/ .bash*.bak, /and/ both config reference `$BASH_IT`: no solution
# - both config and bak, but only one references `$BASH_IT`: that one
# - both config, only one bak, but other references `$BASH_IT`: the other one?
# - both config, no bak, with `$BASH_IT` reference: that one
# - one config, no bak, but no `$BASH_IT` reference: wut
# - no config, with bak, with `$BASH_IT`: re-create???
# - no config, no bak: nothing.

BACKUP_FILE=$CONFIG_FILE.bak

if [[ ! -e "${HOME?}/$BACKUP_FILE" ]]; then
Expand Down

0 comments on commit 118861f

Please sign in to comment.