commit:     47ad9a4eeb74a053d1fbc854fca7d13c96fb1a5b
Author:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 11 01:11:16 2019 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Mon Mar 11 04:54:44 2019 +0000
URL:        https://gitweb.gentoo.org/proj/eselect-rust.git/commit/?id=47ad9a4e

Add cleanup action

Cleanup action will make use of new find_missing_broken_symlinks() function
and should be called by ebuild during package removal.

If we detect a missing or broken symlink, we will automatically mark latest
available version as default (which will basically fix missing or broken
symlinks).

Bug: https://bugs.gentoo.org/671182
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 rust.eselect.in | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/rust.eselect.in b/rust.eselect.in
index d0f3361..1360dc2 100644
--- a/rust.eselect.in
+++ b/rust.eselect.in
@@ -177,6 +177,33 @@ set_version() {
            die -q "symlink list copying failed"
 }
 
+### cleanup action ###
+describe_cleanup() {
+       echo "This action is not to be called manually."
+}
+
+do_cleanup() {
+       [[ -z ${@} ]] || die -q "This function does not expect any arguments"
+
+       # Do we need to clean up?
+       local missing_symlinks=( $(find_missing_broken_symlinks) )
+       if [[ ${#missing_symlinks[@]} -eq 0 ]]; then
+               echo "Nothing to clean up."
+               return
+       fi
+
+       unset_version
+
+       local targets=( $(find_targets) )
+
+       if [[ ${#targets[@]} -ne 0 ]]; then
+               echo "Marking the latest still installed version as default..."
+               do_set ${#targets[@]}
+       else
+               echo "No Rust profiles left on the system. Stale symlinks 
removed."
+       fi
+}
+
 ### list action ###
 
 describe_list() {

Reply via email to