Where <command> is one of:
install <FILE|URL> - install plugin from FILE/URL
- scan - look for available plugins on attached devices
+ scan <DIR> - look for available plugins on attached devices
create <DIR> - create a new plugin archive from DIR
lint <FILE> - perform a pre-distribution check on FILE
EOF
echo " (version $PLUGIN_VERSION)"
}
+parse_meta()
+{
+ local file name value IFS
+
+ file=$1
+
+ IFS='='
+ while read -r name value
+ do
+ # Ensure we have a sensible variable name
+ echo "$name" | grep -q '^PLUGIN_[A-Z_]*$' || continue
+
+ # we know that $name has no quoting/expansion chars, but we
+ # may need to do some basic surrounding-quote removal for
+ # $value, without evaluating it
+ value=$(echo "$value" | sed "s/^\([\"']\)\(.*\)\1\$/\2/g")
+
+ export $name="$value"
+ done < $file
+}
+
# How the ABI versioning works:
#
# - This script has an ABI defined ($plugin_abi)
do_install()
{
- local url name file __dest
+ local url name file __dest auto
+
+ if [ "$1" == "auto" ]; then
+ auto=y
+ shift;
+ fi
url=$1
sha256sum "$file" | cut -f1 -d' '
echo
- echo "Do you want to install this plugin? (y/N)"
- read resp
+ if [ -z "$auto" ]
+ then
+ echo "Do you want to install this plugin? (y/N)"
+ read resp
- case $resp in
- [yY]|[yY][eE][sS])
- ;;
- *)
- echo "Cancelled"
- exit 0
- ;;
- esac
+ case $resp in
+ [yY]|[yY][eE][sS])
+ ;;
+ *)
+ echo "Cancelled"
+ exit 0
+ ;;
+ esac
+ fi
__dest=$(mktemp -d)
gunzip -c "$file" | ( cd $__dest && cpio -i -d)
exit 1
fi
- . $__dest/$plugin_meta_path
+ parse_meta $__dest/$plugin_meta_path
if ! plugin_abi_check
then
__create_wrapper "$__dest" "$binary"
done
+ pb-event plugin@local \
+ name=$PLUGIN_NAME id=$PLUGIN_ID version=$PLUGIN_VERSION \
+ vendor=$PLUGIN_VENDOR vendor_id=$PLUGIN_VENDOR_ID \
+ date=$PLUGIN_DATE executables="$PLUGIN_EXECUTABLES" \
+ source_file=$url installed="yes"
+
echo "Plugin installed"
plugin_info
}
fi
(
- . $__meta_tmp/$plugin_meta_path
+ parse_meta $__meta_tmp/$plugin_meta_path
plugin_abi_check || exit 1
plugin_info
printf "\n"
printf "To run this plugin:\n"
- printf " $0 run $plugin_path\n"
+ printf " $0 install $plugin_path\n"
printf "\n"
+
+ pb-event plugin@$dev name=$PLUGIN_NAME \
+ path=$plugin_path installed="no"
)
if [ $? = 0 ]
then
do_scan()
{
- local found mnt
+ local found mnt dev locations
found=0
- for mnt in $__pb_mount_dir/*
+ dev=$1
+
+ if [ -z $dev ]; then
+ locations=$__pb_mount_dir/*
+ else
+ echo "Scanning device $dev"
+ locations=$dev
+ fi
+
+ for mnt in $locations
do
do_scan_mount $mnt
done
fi
# Sanity check metadata file
- . $meta_file
+ parse_meta $meta_file
errors=0
warnings=0
lint_fatal "No metadata file present (expecting" \
"$plugin_meta_path)"
- (sh -e "$__dest/$plugin_meta_path") >/dev/null 2>&1 ||
- lint_err "Plugin metadata file has shell errors"
-
- . "$__dest/$plugin_meta_path"
+ parse_meta "$__dest/$plugin_meta_path"
lint_metadata
for executable in ${PLUGIN_EXECUTABLES}
exit 1
;;
*)
- echo "Invalid command: $s" >&2
+ echo "Invalid command: $1" >&2
usage
exit 1
esac