diff options
-rw-r--r-- | postgresql.eselect | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/postgresql.eselect b/postgresql.eselect index 9bb009a..7ff9b83 100644 --- a/postgresql.eselect +++ b/postgresql.eselect @@ -103,19 +103,6 @@ linker() { done } -### TODO: Refactor so that it searches source directories for removal targets, -### and move the old stuff into do_update - -### Unlinker Function ### -# Takes one argument: -# - Full path to active links file (e.g. /etc/eselect/postgresql/active.links) -unlinker() { - local dir - local pattern - local findings - -} - ### Get Slots Function ### # Find all available slots in the preferred lib_dir() and return them. get_slots() { @@ -123,8 +110,8 @@ get_slots() { local found_slots for slot in $(find "${USR_PATH}/$(lib_dir)/" -maxdepth 1 -type d \ - -regex '.*postgresql-[0-9][0-9]*\.[0-9][0-9]*' | \ - sed -re 's#.*([0-9]+\.[0-9]+)$#\1#' | sort -n) + -regex '.*/postgresql-[1-9][0-9]*\.*[0-9]*' | \ + sed -re 's#.*([1-9][0-9]*\.*[0-9]*)$#\1#' | sort -n) do # Check that pg_config exists for this slot, otherwise we have # a false positive. @@ -282,19 +269,13 @@ describe_unset() { # Undo everything done by do_set(). do_unset() { local SLOT=$1 - if [[ ${SLOT} = $(active_slot) ]] ; then - echo -n "Unsetting ${SLOT} as the default installation..." - - echo "done." - echo "Setting a new slot as the default." - do_update - else - echo "Inactive slot selected. No work to do." + if [[ ${SLOT} != $(active_slot) ]] ; then + echo "Slot already inactive; no work to do." + return 0 fi local l for l in ${INCLUDE_TARGETS[@]} "${USR_PATH}/share/postgresql" ; do - # Remove target before creating the symlink [[ -h ${l} ]] && rm -f "${l}" # Check if include target still exists @@ -302,16 +283,19 @@ do_unset() { die -q "The target '${l}' exists and could not be removed!" done + for l in $(find "${USR_PATH}/bin" -type l) ; do + if [[ $(realpath ${l} | grep -c postgresql) -ge 1 ]] ; then + rm "${l}" + fi + done + for x in $(list_libdirs) ; do - if [[ -d ${USR_PATH}/${x}/postgresql-${SLOT}/${x} ]] ; then - if [[ -h "${USR_PATH}/${x}/postgresql" ]] ; then - rm -f "${USR_PATH}/${x}/postgresql" - [[ -e "${USR_PATH}/${x}/postgresql" ]] && \ - die -q "Unable to remove '${USR_PATH}/${x}/postgresql'" - fi - - unlinker "${USR_PATH}/${x}/postgresql-${SLOT}/${x}/" \ - "-name lib*" "${USR_PATH}/${x}" + if [[ -h "${USR_PATH}/${x}/postgresql" ]] ; then + for l in $(find "${USR_PATH}/${x}" -type l) ; do + if [[ $(realpath ${l} | grep -c postgresql) -ge 1 ]] ; then + rm "${l}" + fi + done fi done } @@ -401,18 +385,24 @@ do_update() { # Update paths to libs and man pages local ldpath + local pcpath local x for x in $(list_libdirs) ; do - [[ -h ${USR_PATH}/${x}/postgresql ]] && \ + if [[ -h ${USR_PATH}/${x}/postgresql ]] ; then ldpath+="${USR_PATH}/${x}/postgresql:" + pcpath+="${USR_PATH}/${x}/postgresql/pkgconfig:" + fi done ldpath="${ldpath%:}" + pcdpath="${pcpath%:}" local manpath="${USR_PATH}/share/postgresql/man/" while [[ $[--index] -gt -1 ]] ; do local curslot="${slots[$index]}" for x in $(list_libdirs) ; do local lib_path="${USR_PATH}/${x}/postgresql-${curslot}/${x}/" + local pkg_path="${lib_path}/pkgconfig" [[ -d ${lib_path} ]] && ldpath+=":${lib_path}" + [[ -d ${pkg_path} ]] && pcpath+=":${pcpath}" done local tmp_manpath="${USR_PATH}/share/postgresql-${curslot}/man/" [[ -d ${tmp_manpath} ]] && manpath+=":${tmp_manpath}" @@ -421,5 +411,6 @@ do_update() { store_config "${ENV_FILE}" LDPATH "${ldpath}" store_config "${ENV_FILE}" MANPATH "${manpath}" + store_config "${ENV_FILE}" PKG_CONFIG_PATH "${pcpath}" do_action env update &> /dev/null } |