-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathDisableProgram
executable file
·133 lines (117 loc) �� 5.18 KB
/
DisableProgram
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/bash
source ScriptFunctions
Import File
Import GoboLinux
Import Log
Import OptionParser
Import Versions
Import MetadataInstallation
### Options ###################################################################
scriptDescription="Unlink a program from the ${goboIndex} hierarchy."
scriptCredits="Copyright (C) 2003 Hisham Muhammad. Released under the GNU GPL."
helpOnNoArguments=yes
scriptUsage="<program> [<version>]"
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}" || Die "Needs write access to ${goboPrograms}"
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
allversions=$(All_Versions "$programname")
if [ $(echo "$allversions" | wc -l) != 1 ]
then
Die "No current version found and no version specified. Available versions are:\n$allversions"
else
versionnumber="$allversions"
fi
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."
progsettings="$goboPrograms/$programname/Settings"
if [[ -d "$progsettings" ]]
then
entries=("$goboPrograms/$programname"/*)
if [[ ${#entries[@]} = 2 ]]
then
mv "$progsettings" "$progsettings-Disabled"
Log_Normal "Removing links at settings..."
find "$goboSettings" -type l | RemoveBroken
mv "$progsettings-Disabled" "$progsettings"
fi
fi
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}/share/applications" && Rebuild_Desktop_Database
Is_Real_Nonempty_Directory "${disabled}/share/mime/packages" && Rebuild_MIME_Database
Is_Real_Nonempty_Directory "${disabled}/share/fonts" && Rebuild_Font_Cache
Is_Real_Nonempty_Directory "${disabled}/share/omf" && Update_Scrollkeeper_Database
Is_Real_Nonempty_Directory "${disabled}/share/glib-2.0/schemas" && Update_GLib_Schemas
Is_Real_Nonempty_Directory "${disabled}/share/glib-3.0/schemas" && Update_GLib_Schemas
Is_Real_Nonempty_Directory "${disabled}/lib/gtk-2.0" && Rebuild_GDK_Pixbuf_Loaders
Is_Real_Nonempty_Directory "${disabled}/lib/gtk-3.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.