X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=scripts%2Fcore%2Ffunctions.sh;h=09d8836a898094f326e19354b31041f28749094e;hb=6d2ec9becc9374e514a30f49763eca1f071d0e73;hp=f6c4a714c852282fde76e4d860ba3f146f0ffb71;hpb=759f330706f48c0344e5c1356f959524fe334a22;p=feisty_meow.git diff --git a/scripts/core/functions.sh b/scripts/core/functions.sh index f6c4a714..09d8836a 100644 --- a/scripts/core/functions.sh +++ b/scripts/core/functions.sh @@ -78,6 +78,17 @@ if [ -z "$skip_all" ]; then IFS="$HOLDIFS" } + # sets the variable in parameter 1 to the value in parameter 2, but only if + # that variable was undefined. + function set_var_if_undefined() + { + local var_name="$1"; shift + local var_value="$1"; shift + if [ -z "${!var_name}" ]; then + eval export $var_name="$var_value" + fi + } + function success_sound() { if [ ! -z "$CLAM_FINISH_SOUND" ]; then @@ -281,10 +292,12 @@ if [ -z "$skip_all" ]; then fi } - # switches from an X:/ form to an /X/path form. + # switches from an X:/ form to a /cygdrive/X/path form. this is only useful + # for the cygwin environment currently. function dos_to_unix_path() { # we always remove dos slashes in favor of forward slashes. - echo "$1" | sed -e 's/\\/\//g' | sed -e 's/\([a-zA-Z]\):\/\(.*\)/\/\1\/\2/' +#old: echo "$1" | sed -e 's/\\/\//g' | sed -e 's/\([a-zA-Z]\):\/\(.*\)/\/\1\/\2/' + echo "$1" | sed -e 's/\\/\//g' | sed -e 's/\([a-zA-Z]\):\/\(.*\)/\/cygdrive\/\1\/\2/' } # returns a successful value (0) if this system is debian or ubuntu. @@ -354,7 +367,7 @@ if [ -z "$skip_all" ]; then if [ -z "$wheres_nechung" ]; then echo "The nechung oracle program cannot be found. You may want to consider" echo "rebuilding the feisty meow applications with this command:" - echo "bash $FEISTY_MEOW_SCRIPTS/generator/bootstrap_build.sh" + echo "bash $FEISTY_MEOW_SCRIPTS/generator/produce_feisty_meow.sh" else $wheres_nechung fi @@ -364,14 +377,14 @@ if [ -z "$skip_all" ]; then function regenerate() { # do the bootstrapping process again. echo "regenerating feisty meow script environment." - bash $FEISTY_MEOW_SCRIPTS/core/bootstrap_shells.sh + bash $FEISTY_MEOW_SCRIPTS/core/reconfigure_feisty_meow.sh echo # force a full reload by turning off sentinel variable and alias. # the nethack one is used by fred's customizations. # interesting note perhaps: found that the NETHACKOPTIONS variable was # not being unset correctly when preceded by an alias. split them up # like they are now due to that bug. - unset -v CORE_ALIASES_LOADED FEISTY_MEOW_GENERATED NECHUNG NETHACKOPTIONS + unset -v CORE_ALIASES_LOADED FEISTY_MEOW_LOADING_DOCK NECHUNG NETHACKOPTIONS unset -f function_sentinel # reload feisty meow environment in current shell. source $FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh @@ -413,27 +426,30 @@ if [ -z "$skip_all" ]; then # use our default example user if there was no name provided. user=fred fi - if [ ! -d "$FEISTY_MEOW_DIR/customizing/$user" ]; then + if [ ! -d "$FEISTY_MEOW_APEX/customizing/$user" ]; then echo "The customization folder provided for $user should be:" - echo " '$FEISTY_MEOW_DIR/customizing/$user'" + echo " '$FEISTY_MEOW_APEX/customizing/$user'" echo "but that folder does not exist. Skipping customization." return 1 fi regenerate >/dev/null - pushd "$FEISTY_MEOW_GENERATED/custom" &>/dev/null - local incongruous_files="$(bash "$FEISTY_MEOW_SCRIPTS/files/list_non_dupes.sh" "$FEISTY_MEOW_DIR/customizing/$user" "$FEISTY_MEOW_GENERATED/custom")" - if [ ${#incongruous_files} -ge 1 ]; then + pushd "$FEISTY_MEOW_LOADING_DOCK/custom" &>/dev/null + local incongruous_files="$(bash "$FEISTY_MEOW_SCRIPTS/files/list_non_dupes.sh" "$FEISTY_MEOW_APEX/customizing/$user" "$FEISTY_MEOW_LOADING_DOCK/custom")" + +#echo "the incongruous files list is: $incongruous_files" + # disallow a single character result, since we get "*" as result when nothing exists yet. + if [ ${#incongruous_files} -ge 2 ]; then echo "cleaning unknown older overrides..." perl "$FEISTY_MEOW_SCRIPTS/files/safedel.pl" $incongruous_files echo fi popd &>/dev/null echo "copying custom overrides for $user" - mkdir "$FEISTY_MEOW_GENERATED/custom" 2>/dev/null - perl "$FEISTY_MEOW_SCRIPTS/text/cpdiff.pl" "$FEISTY_MEOW_DIR/customizing/$user" "$FEISTY_MEOW_GENERATED/custom" - if [ -d "$FEISTY_MEOW_DIR/customizing/$user/scripts" ]; then + mkdir -p "$FEISTY_MEOW_LOADING_DOCK/custom" 2>/dev/null + perl "$FEISTY_MEOW_SCRIPTS/text/cpdiff.pl" "$FEISTY_MEOW_APEX/customizing/$user" "$FEISTY_MEOW_LOADING_DOCK/custom" + if [ -d "$FEISTY_MEOW_APEX/customizing/$user/scripts" ]; then echo "copying custom scripts for $user" - \cp -R "$FEISTY_MEOW_DIR/customizing/$user/scripts" "$FEISTY_MEOW_GENERATED/custom/" + \cp -R "$FEISTY_MEOW_APEX/customizing/$user/scripts" "$FEISTY_MEOW_LOADING_DOCK/custom/" fi echo regenerate @@ -462,6 +478,16 @@ if [ -z "$skip_all" ]; then sed -i -e "s%$pattern%$replacement%g" "$file" } + # goes to a particular directory passed as parameter 1, and then removes all + # the parameters after that from that directory. + function push_whack_pop() + { + local dir="$1"; shift + pushd "$dir" &>/dev/null + rm -rf $* &>/dev/null + popd &>/dev/null + } + function spacem() { while [ $# -gt 0 ]; do @@ -470,23 +496,38 @@ if [ -z "$skip_all" ]; then echo "failure to find a file or directory named '$arg'." continue fi + + # first we will capture the output of the character replacement operation for reporting. + # this is done first since some filenames can't be properly renamed in perl (e.g. if they + # have pipe characters apparently). + intermediate_name="$(bash "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg")" + local saw_intermediate_result=0 + if [ -z "$intermediate_name" ]; then + # make sure we report something, if there are no further name changes. + intermediate_name="'$arg'" + else + # now zap the first part of the name off (since original name isn't needed). + intermediate_name="$(echo $intermediate_name | sed -e 's/.*=> //')" + saw_intermediate_result=1 + fi + # first we rename the file to be lower case. - perl $FEISTY_MEOW_SCRIPTS/files/renlower.pl "$arg" &>/dev/null - # oops, now the name is all lower-case. we need to make the - # same adjustment. - arg2="$(echo "$arg" | tr A-Z a-z)" - # we definitely wanted to adjust the case first, rather than doing all - # the wacky stuff this script does to the filename... we will capture - # the output of the replace operaton for reporting. - final_name="$(bash "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg2")" + actual_file="$(echo $intermediate_name | sed -e "s/'\([^']*\)'/\1/")" + final_name="$(perl $FEISTY_MEOW_SCRIPTS/files/renlower.pl "$actual_file")" + local saw_final_result=0 if [ -z "$final_name" ]; then - # make sure we report something, if there are no further name changes. - final_name="$arg2" + final_name="$intermediate_name" + else + final_name="$(echo $final_name | sed -e 's/.*=> //')" + saw_final_result=1 + fi +#echo intermed=$saw_intermediate_result +#echo final=$saw_final_result + + if [[ $saw_intermediate_result != 0 || $saw_final_result != 0 ]]; then + # printout the combined operation results. + echo "'$arg' => $final_name" fi - # now zap the intermediate part of the name off. - final_name="$(echo $final_name | sed -e 's/.*=> //')" - # printout the combined operation results. - echo "'$arg' => $final_name" done } @@ -537,6 +578,27 @@ return 0 function function_sentinel() { return 0; } if [ ! -z "$SHELL_DEBUG" ]; then echo "feisty meow function definitions done."; fi - + + ############## + + # test code for set_var_if_undefined. + run_test=0 + if [ $run_test != 0 ]; then + echo running tests on set_var_if_undefined. + flagrant=petunia + set_var_if_undefined flagrant forknordle + check_result "testing if defined variable would be whacked" + if [ $flagrant != petunia ]; then + echo set_var_if_undefined failed to leave the test variable alone + exit 1 + fi + unset bobblehead_stomper + set_var_if_undefined bobblehead_stomper endurance + if [ $bobblehead_stomper != endurance ]; then + echo set_var_if_undefined failed to set a variable that was not defined yet + exit 1 + fi + fi + fi