commit:     d50f77c79f3a7e2ce129ef69ff4cc662d1b95ad6
Author:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 22 18:19:34 2016 +0000
Commit:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
CommitDate: Fri Jan 22 18:19:34 2016 +0000
URL:        https://gitweb.gentoo.org/proj/eselect-php.git/commit/?id=d50f77c7

Clean up and document the cleanup_sapi() function.

 src/php.eselect.in.in | 47 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 33 insertions(+), 14 deletions(-)

diff --git a/src/php.eselect.in.in b/src/php.eselect.in.in
index 7e52f53..63b9d42 100644
--- a/src/php.eselect.in.in
+++ b/src/php.eselect.in.in
@@ -173,23 +173,42 @@ parse_target_major_version() {
        esac
 }
 
+# Remove dead active symlinks for the given SAPI.
+#
+# If a symlink for an SAPI is dead, then that SAPI is at least
+# partially broken. For example, if the symlink to php-cgi is dead,
+# then CGI just isn't going to work -- the SAPI is broken. It
+# therefore makes sense to run update() after we find and remove any
+# broken links. The update at least has the potential to leave things
+# working.
+#
+# There is one potential caveat to that approach, for SAPIs with more
+# than one active symlink. What if "phpize" is broken but "php" is OK?
+# (Forget for the moment how that might happen...). Do we want to
+# update() the entire SAPI because one of the symlinks is dead?
+# Answer: I guess.
+#
+# INPUT:
+#
+# The name of the SAPI to clean up.
+#
+# OUTPUT:
+#
+# If any symlinks are removed, that fact will be announced. If an
+# update occurs, that will be noted as well
+#
 cleanup_sapi() {
        local sapi="${1}"
-       local l="${sapi}_link"
-       local link=${!l}
-       if [[ -L $link && ! -e $link ]] ; then
-               echo -n "Broken link for ${sapi}"
-               if update_sapi $1 ; then
-                       echo ", updated version to $(get_sapi_active_target 
"${sapi}")"
-                       return
-               else
-                       rm $link || die "failed to remove ${link}"
-
-                       return
-               fi
-       fi
+       local link_dir=$(sapi_active_link_dir "${sapi}")
 
-       return 1
+       for link_name in $(sapi_active_link_names "${sapi}"); do
+               local link_path="${link_dir}/${link_name}"
+               if [[ -L "${link_path}" && ! -e "${link_path}" ]] ; then
+                       rm -f "${link_path}" || die "failed to remove 
${link_path}"
+                       echo "Removed broken symlink ${link_path}."
+                       update_sapi "${sapi}" # Try to fix it.
+               fi
+       done
 }
 
 update_sapi() {

Reply via email to