Browse Source

sde-config-package: introduced helper implementing 'get' action, and using the new package_parse()

karasz/new-early
Alejandro Mery 15 years ago
parent
commit
0abee64286
1 changed files with 128 additions and 0 deletions
  1. +128
    -0
      bin/sde-config-package

+ 128
- 0
bin/sde-config-package

@ -0,0 +1,128 @@
#!/bin/sh
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: bin/sde-config-package
# Copyright (C) 2009 The OpenSDE Project
#
# More information can be found in the files COPYING and README.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. A copy of the
# GNU General Public License can be found in the file COPYING.
# --- SDE-COPYRIGHT-NOTE-END ---
#Description: Alters the description of a package
#Alias: pkg
[ -n "$SDEROOT" ] ||
export SDEROOT=$( cd "${0%/*}/.."; pwd -P )
. "$SDEROOT/lib/libsde.in"
. "$SDEROOT/lib/sde-package.in"
config_usage() {
local progname=$(echo ${0##*/} | tr '-' ' ')
[ $# -eq 0 ] || echo_error "$@"
cat <<-EOT
Usage: $progname <pkg>* <action> [<tag> [<value>]]*
Actions:
get returns the content of a tag
set sets a tag value, removing any previous value
add appends a new value for a tag
remove removes a tag, optionally matching a pattern
show dumps the fully description
lint cleans the description
EOT
exit 1
}
# parse arguments
shortopts='?'
longopts='help'
options=$( getopt -o "$shortopts" -l "$longopts" -- "$@" )
[ $? -eq 0 ] || config_usage
eval set -- "$options"
while [ $# -gt 0 ]; do
case "$1" in
--help)
config_usage
;;
--)
shift; break
;;
-*)
config_usage "$1: Not implemented"
;;
*)
break
esac
shift
done
# extract packages list
#
pkgs=
while [ $# -gt 1 ]; do
case "$1" in
get|set|add|remove|show|list) # action
break;
esac
x=$(package_parse "$1" | tr '\n' ' ')
if [ -n "$x" ]; then
pkgs="$pkgs $x"
shift
else
config_usage "$1: Invalid package"
fi
done
pkgs=$(echo "$pkgs" | sed -e 's,^ \+,,' -e 's, \+$,,')
[ -n "$pkgs" -a $# -gt 0 ] || config_usage
action="$1"; shift
tag2pattern() {
local tag=$(echo "$tag" | tr 'a-z' 'A-Z')
local pattern=$(grep -e '^\[' "$SDEROOT/etc/desc_format" | grep -e "\[$tag\]" |
sed -e 's, *(\*) *$,,' -e 's, \+,\\|,g' | tr -d '[]')
if [ -z "$pattern" ]; then
return;
elif expr "$pattern" : '.*|' > /dev/null; then
pattern="\\($pattern\\)"
fi
echo "^\[$pattern\]"
}
case "$action" in
get)
# extract given tags
pattern=
for tag; do
x=$(tag2pattern "$tag")
if [ -n "$x" ]; then
pattern="$pattern -e '$x'"
else
echo_error "$tag: Invalid tag"
fi
done
files=
for x in $pkgs; do
files="$files $x/${x#*/}.desc"
done
cd "$SDEROOT/package"
eval "grep $pattern $files"
;;
*)
echo_error "$action: Not yet implemented."
esac

Loading…
Cancel
Save