-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathRemoveProgram
executable file
·127 lines (108 loc) · 5.27 KB
/
RemoveProgram
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
#!/bin/bash
### Imports ###################################################################
source ScriptFunctions
Import GoboLinux
Import OptionParser
Import Versions
Import MetadataInstallation
### Options ###################################################################
scriptDescription="Removes a program version from the system."
scriptCredits="Copyright (C) 2004 Andre Detsch. Released under the GNU GPL."
helpOnNoArguments=yes
scriptUsage="<program> <version>"
scriptExample="Qt 3.2.3"
Add_Option_Boolean "b" "batch" "Do not ask for confirmation."
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}"
appname=$(Arg 1)
appver=$(Arg 2)
[ "${appname}" ] || Die "Argument missing: specify the program name."
program=`GuessProgramCase ${appname}`
if [ ! -d "${goboPrograms}/${program}" ]
then
Log_Error "$program not found in $goboPrograms."
Corrections --log-name RemoveProgram --dir "$goboPrograms" "$program"
Die
fi
if ! [ "${appver}" ]
then
appvers=$(All_Versions "$appname")
numapps=$(echo "$appvers" | wc -l)
if [ $numapps = 1 ]
then
appver="$appvers"
else
Die "Argument missing: specify the program version.\nAvailable versions are:\n$(All_Versions "$appname")"
fi
fi
version=${appver}
if [ ! -d "${goboPrograms}/${program}/${version}" ]
then
Die "${program} ${version} not found in ${goboPrograms}. Available versions:\n$(All_Versions "$program")"
fi
Log_Terse "Removing $program, version $version."
Log_Verbose "Getting program file list..."
filesdir=$(Get_System_Paths "${goboPrograms}/${program}/${version}")
Is_Real_Nonempty_Directory "${goboPrograms}/${program}/${version}/share/mime/packages" && rebuildmimedb=true
Is_Real_Nonempty_Directory "${goboPrograms}/${program}/${version}/share/applications" && rebuilddesktopdb=true
Is_Real_Nonempty_Directory "${goboPrograms}/${program}/${version}/share/fonts" && rebuildfontcache=true
Is_Real_Nonempty_Directory "${goboPrograms}/${program}/${version}/share/omf" && updatescrollkeeperdb=true
Is_Real_Nonempty_Directory "${goboPrograms}/${program}/${version}/share/glib-2.0/schemas" && updateglibschemas=true
Is_Real_Nonempty_Directory "${goboPrograms}/${program}/${version}/share/glib-3.0/schemas" && updateglibschemas=true
Is_Real_Nonempty_Directory "${goboPrograms}/${program}/${version}/lib/gtk-2.0" && rebuildgdkpixbufloaders=true
Is_Real_Nonempty_Directory "${goboPrograms}/${program}/${version}/lib/gtk-3.0" && rebuildgdkpixbufloaders=true
Is_Real_Nonempty_Directory "${goboPrograms}/${program}/Settings/gconf/schemas" && Uninstall_GConf_Schemas "$program"
[ -f "${goboPrograms}/${program}/${version}/Resources/XmlCatalogData" ] && Remove_From_XML_Catalog "${goboPrograms}/${program}/${version}"
Log_Normal "Removing ${goboPrograms}/${program}/${version}..."
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
rm -rf -- ${goboPrograms}/${program}/${version}
# TODO relink current?
Quiet RemoveBroken "${goboPrograms}/${program}/Current"
Quiet rmdir ${goboPrograms}/${program}
Log_Normal "Removing broken links..."
echo "$filesdir" | RemoveBroken || Log_Error "Couldn't cleanup links."
#Log_Normal "Rebuilding Environment Cache file..."
#yes | RebuildLinks -n
[ "${rebuildmimedb}" == "true" ] && Rebuild_MIME_Database
[ "${rebuilddesktopdb}" == "true" ] && Rebuild_Desktop_Database
[ "${rebuildfontcache}" == "true" ] && Rebuild_Font_Cache
[ "${rebuildgdkpixbufloaders}" == "true" ] && Rebuild_GDK_Pixbuf_Loaders
[ "${updatescrollkeeperdb}" == "true" ] && Update_Scrollkeeper_Database
[ "${updateglibschemas}" == "true" ] && Update_GLib_Schemas
Gen_Env_Cache
Log_Normal "${program} ${version} removed."
[ -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
}