Commit 35b2a6cde0c357e68a31a4bbde17389cd838c3de

Authored by Antonio Terceiro
Committed by Daniela Feitosa
1 parent 6ef63129

Command-line app for managing plugins

Run it without any arguments for usage.
plugins/template/lib/template_plugin.rb 0 → 100644
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
  1 +class TemplatePlugin < Noosfero::Plugin
  2 +
  3 + def self.plugin_name
  4 + # FIXME
  5 + "TemplatePlugin"
  6 + end
  7 +
  8 + def self.plugin_description
  9 + # FIXME
  10 + _("A plugin that does this and that.")
  11 + end
  12 +
  13 +end
script/noosfero-plugins 0 → 100755
@@ -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