#!/bin/bash source ScriptFunctions Import File Import GoboLinux Import Log Import OptionParser Import Versions Import MetadataInstallation ### Options ################################################################### scriptDescription="Unlink a program from the ${goboLinks} hierarchy." scriptCredits="Copyright (C) 2003 Hisham Muhammad. Released under the GNU GPL." helpOnNoArguments=yes scriptUsage=" []" scriptExample="GCC 2.95.3" scriptNotes="This script 'disables' a program in the system, while keeping "\ "it in the ${goboPrograms} hierarchy. To 're-enable' it, run SymlinkProgram(1) "\ "again. If version is not specified, Current is assumed." Add_Option_Entry "u" "unmanaged" "Defines what to do with unmanaged files "\ "from package." "ask" "ask remove keep interactive" Parse_Options "$@" ### Operation ################################################################# Is_Writable "${goboPrograms}" || Verify_Superuser programname=`GuessProgramCase $(Arg 1) $(Arg 2)` if [ "$(Arg 2)" ] then versionnumber="$(Arg 2)" else versionnumber=`Get_Version "$programname" "Current"` fi if ! [ -e "$goboPrograms/$programname" ] then Log_Error "Program $programname not found." Corrections --log-name DisableProgram --dir "$goboPrograms" "$programname" Die fi if [ -z "${versionnumber}" ] then Die "No current version found and no version specified. Available versions are:\n$(All_Versions "$programname")" fi prefix="${goboPrograms}/$programname/$versionnumber" if ! Is_Directory "$prefix" then Die "$programname version $versionnumber was not found. Available versions are:\n$(All_Versions "$programname")" fi Log_Normal "Disabling ${programname}, version ${versionnumber}." disabled="${goboPrograms}/$programname/$versionnumber-Disabled" if [ "`Get_Version "$programname" "Current"`" == "$versionnumber" ] then rm -rf ${goboPrograms}/$programname/Current fi mv "$prefix" "$disabled" || Die "Couldn't disable $programname $versionnumber." filesdir=$(Get_System_Paths "$disabled") Log_Normal "Removing links..." echo "$filesdir" | RemoveBroken || Die "Couldn't cleanup links." if [ -f ${disabled}/Resources/UnmanagedFiles ] && ! Is_Entry "unmanaged" "keep" then if Is_Entry "unmanaged" "ask" then Log_Normal "There are unmanaged files present." while true do Ask_Option "Do you want to [k]eep or [r]emove them or go through them [i]nteractively?" case "$REPLY" in [Rr]) failedunmanageddirs=$(Uninstall_Unmanaged_Files "${goboPrograms}/${programname}/${versionnumber}-Disabled/Resources/UnmanagedFiles"); break;; [Ii]) Uninstall_Unmanaged_Files "${goboPrograms}/${programname}/${versionnumber}-Disabled/Resources/UnmanagedFiles" "interactive"; break;; [Kk]) break;; esac # You know what? It's ridiculous done elif Is_Entry "unmanaged" "interactive" then Log_Normal "There are unmanaged files present." Log_Verbose "Will interactivly prompt for each unmanaged files entry." Uninstall_Unmanaged_Files "${goboPrograms}/${programname}/${versionnumber}-Disabled/Resources/UnmanagedFiles" "interactive" elif Is_Entry "unmanaged" "remove" then Log_Normal "Removing unmanaged files..." failedunmanageddirs=$(Uninstall_Unmanaged_Files "${goboPrograms}/${programname}/${versionnumber}-Disabled/Resources/UnmanagedFiles") fi fi Is_Real_Nonempty_Directory "${goboPrograms}/${programname}/Settings/gconf/schemas" && Uninstall_GConf_Schemas "$programname" Is_Real_Nonempty_Directory "${disabled}/Shared/applications" && Rebuild_Desktop_Database Is_Real_Nonempty_Directory "${disabled}/Shared/mime/packages" && Rebuild_MIME_Database Is_Real_Nonempty_Directory "${disabled}/Shared/fonts" && Rebuild_Font_Cache Is_Real_Nonempty_Directory "${disabled}/Shared/omf" && Update_Scrollkeeper_Database Is_Real_Nonempty_Directory "${disabled}/lib/gtk-2.0" && Rebuild_GDK_Pixbuf_Loaders [ -f "${disabled}/Resources/XmlCatalogData" ] && Remove_From_XML_Catalog "${disabled}" Gen_Env_Cache mv "$disabled" "$prefix" || Die "Please check $disabled." Log_Normal "${programname} ${versionnumber} disabled." [ -z "${failedunmanageddirs}" ] || { Log_Terse "The following unmanaged directories were not removed since they were not empty." Log_Verbose "You have to manually delete the following directories." for dir in "${failedunmanageddirs[@]}" do Log_Normal "${dir}" done } # TODO unlink current if it's the one that was disabled.