Commit 35b2a6cde0c357e68a31a4bbde17389cd838c3de
Committed by
Daniela Feitosa
1 parent
6ef63129
Exists in
master
and in
22 other branches
Command-line app for managing plugins
Run it without any arguments for usage.
Showing
2 changed files
with
190 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,177 @@ | @@ -0,0 +1,177 @@ | ||
1 | +#!/bin/sh | ||
2 | + | ||
3 | +set -e | ||
4 | + | ||
5 | +program_name=$(basename $0) | ||
6 | + | ||
7 | +if [ -e /etc/default/noosfero ]; then | ||
8 | + . /etc/default/noosfero_dir | ||
9 | +else | ||
10 | + NOOSFERO_DIR=$(readlink -f `dirname $0`/..) | ||
11 | +fi | ||
12 | + | ||
13 | +# data | ||
14 | +available_plugins_dir="$NOOSFERO_DIR/plugins" | ||
15 | +enabled_plugins_dir="$NOOSFERO_DIR/config/plugins" | ||
16 | +available_plugins=$(find "$available_plugins_dir" -maxdepth 1 -mindepth 1 -type d -not -name 'template' -printf '%f\n' | sort) | ||
17 | +enabled_plugins=$(find -L "$enabled_plugins_dir" -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | sort) | ||
18 | +disabled_plugins=$(printf "%s\n" $available_plugins $enabled_plugins_dir | sort | uniq -u) | ||
19 | + | ||
20 | +# operation defaults | ||
21 | +read_only=true | ||
22 | +quiet=false | ||
23 | + | ||
24 | +# initialization | ||
25 | +if [ -w "$enabled_plugins_dir" ]; then | ||
26 | + read_only=false | ||
27 | +fi | ||
28 | + | ||
29 | +_list() { | ||
30 | + for plugin in $available_plugins; do | ||
31 | + echo "$plugin" | ||
32 | + done | ||
33 | +} | ||
34 | + | ||
35 | +_status() { | ||
36 | + for plugin in $available_plugins; do | ||
37 | + if [ -h "$enabled_plugins_dir/$plugin" ]; then | ||
38 | + status="*" | ||
39 | + else | ||
40 | + status=" " | ||
41 | + fi | ||
42 | + echo "[$status] $plugin" | ||
43 | + done | ||
44 | +} | ||
45 | + | ||
46 | +_usage() { | ||
47 | + echo "$program_name: manages Noosfero plugins system-wide" | ||
48 | + echo | ||
49 | + echo "Usage:" | ||
50 | + echo " $program_name [OPTIONS] list" | ||
51 | + echo " $program_name [OPTIONS] status" | ||
52 | + echo " $program_name [OPTIONS] enable PLUGIN [PLUGIN ...]" | ||
53 | + echo " $program_name [OPTIONS] disable PLUGIN [PLUGIN ...]" | ||
54 | + echo " $program_name [OPTIONS] enableall" | ||
55 | + echo " $program_name [OPTIONS] disableall" | ||
56 | + echo " $program_name [OPTIONS] new PLUGIN [PLUGIN ...]" | ||
57 | + echo | ||
58 | + echo "Options:" | ||
59 | + echo " --quiet|-q" | ||
60 | + echo " Run quietly" | ||
61 | + echo " --version|-v" | ||
62 | + echo " Prints version information and exits" | ||
63 | + echo | ||
64 | +} | ||
65 | + | ||
66 | +_say(){ | ||
67 | + if [ "$quiet" = 'false' ]; then | ||
68 | + echo $@ | ||
69 | + fi | ||
70 | +} | ||
71 | + | ||
72 | +_enable(){ | ||
73 | + plugin="$1" | ||
74 | + source="$available_plugins_dir/$plugin" | ||
75 | + target=""$enabled_plugins_dir/$plugin"" | ||
76 | + if [ -h "$target" ]; then | ||
77 | + _say "$plugin already enabled" | ||
78 | + else | ||
79 | + ln -s "$source" "$target" | ||
80 | + _say "$plugin enabled" | ||
81 | + fi | ||
82 | +} | ||
83 | + | ||
84 | +_disable(){ | ||
85 | + plugin="$1" | ||
86 | + target="$enabled_plugins_dir/$plugin" | ||
87 | + if [ -h "$target" ]; then | ||
88 | + rm "$target" | ||
89 | + _say "$plugin disabled" | ||
90 | + else | ||
91 | + _say "$plugin already disabled" | ||
92 | + fi | ||
93 | +} | ||
94 | + | ||
95 | +_new(){ | ||
96 | + plugin="$1" | ||
97 | + target="$available_plugins_dir/$plugin" | ||
98 | + if [ -d "$target" ]; then | ||
99 | + _say "There is already a plugin called $plugin" | ||
100 | + exit 1 | ||
101 | + else | ||
102 | + template="$available_plugins_dir/template" | ||
103 | + mkdir "$target" | ||
104 | + | ||
105 | + plugin_name=$(echo "$plugin" | sed -e 's/^./\u&/; s/_\(.\)/\u\1/') | ||
106 | + for source_file in $(find "$template" -type f); do | ||
107 | + target_file=$(echo "$source_file" | sed -e "s/template/$plugin/g") | ||
108 | + mkdir -p $(dirname "$target_file") | ||
109 | + sed "s/TemplatePlugin/${plugin_name}Plugin/g" "$source_file" > "$target_file" | ||
110 | + done | ||
111 | + _enable "$plugin" | ||
112 | + fi | ||
113 | +} | ||
114 | + | ||
115 | +_enableall(){ | ||
116 | + for plugin in $available_plugins; do | ||
117 | + _enable "$plugin" | ||
118 | + done | ||
119 | +} | ||
120 | + | ||
121 | +_disableall() { | ||
122 | + for plugin in $enabled_plugins; do | ||
123 | + _disable "$plugin" | ||
124 | + done | ||
125 | +} | ||
126 | + | ||
127 | +if [ $# -eq 0 ]; then | ||
128 | + _usage | ||
129 | + exit 0 | ||
130 | +fi | ||
131 | + | ||
132 | +while [ ! -z "$1" ] && [ "${1##-}" != "$1" ]; do | ||
133 | + opt="$1" | ||
134 | + shift | ||
135 | + case "$opt" in | ||
136 | + -q|--quiet) | ||
137 | + quiet=true | ||
138 | + ;; | ||
139 | + -v|--version) | ||
140 | + ruby "-I$NOOSFERO_DIR/lib" -rnoosfero -e "puts \"$program_name version #{Noosfero::VERSION}\"" | ||
141 | + exit 0 | ||
142 | + ;; | ||
143 | + *) | ||
144 | + echo "Unknown option: $opt" | ||
145 | + _usage | ||
146 | + exit 1 | ||
147 | + ;; | ||
148 | + esac | ||
149 | +done | ||
150 | + | ||
151 | +command="$1" | ||
152 | +if [ -z "$command" ]; then | ||
153 | + _usage | ||
154 | + exit 1 | ||
155 | +fi | ||
156 | +shift | ||
157 | +case "$command" in | ||
158 | + list|status|usage|enableall|disableall) | ||
159 | + if [ ! -z "$1" ]; then | ||
160 | + _usage | ||
161 | + exit 1 | ||
162 | + fi | ||
163 | + _$command | ||
164 | + exit 0 | ||
165 | + ;; | ||
166 | + enable|disable|new) | ||
167 | + for plugin in $@; do | ||
168 | + _$command "$plugin" | ||
169 | + done | ||
170 | + exit 0 | ||
171 | + ;; | ||
172 | + *) | ||
173 | + echo "Unknown command: $command" | ||
174 | + _usage | ||
175 | + exit 1 | ||
176 | + ;; | ||
177 | +esac |