|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/8] Add core.sh and wrapper function
On Thu, 9 Apr 2015, George Dunlap wrote:
> On Thu, Apr 9, 2015 at 8:29 PM, George Dunlap
> <george.dunlap@xxxxxxxxxxxxx> wrote:
> > Add core functionality and an executable to run it
> >
> > Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
> > ---
> > CC: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
>
> Hmm, not sure where the 0/8 for this patch went... anyway, you can
> also find this series here:
>
> git://xenbits.xenproject.org/people/gdunlap/raisin.git out/librarify/v1
>
I have applied as is patches #2 #3 #6 and #7.
I dropped patch #1 and applied the others to the existing code base. I
needed to make a few changes to do so, but they are mostly unmodified.
> > ---
> > lib/core.sh | 147
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > raise | 16 +++++++
> > 2 files changed, 163 insertions(+)
> > create mode 100644 lib/core.sh
> > create mode 100755 raise
> >
> > diff --git a/lib/core.sh b/lib/core.sh
> > new file mode 100644
> > index 0000000..46b02e0
> > --- /dev/null
> > +++ b/lib/core.sh
> > @@ -0,0 +1,147 @@
> > +#!/usr/bin/env bash
> > +
> > +RAISIN_HELP=()
> > +
> > +# Core calling convention functionality
> > +#
> > +# $arg_parse
> > +#
> > +# Parse $@. Begin with every element that a '=' in it being treated
> > +# as a variable assignment: declare the LHS a local variable and set
> > +# it to the RHS. Once you reach an element without a '=' in it, or
> > +# a '--', put all further elements into the array args.
> > +#
> > +# $requireargs VARNAME1 [VARNAME2, ...]
> > +#
> > +# Check to see that VARNAME1 is defined, and throw an error if not.
> > +#
> > +# default VARNAME "VALUE" ; $default_post
> > +#
> > +# Check to see is VARNAME is defined; if not, declare it a local
> > +# variable and set it to VALUE.
> > +#
> > +# Example usage:
> > +#
> > +# function log()
> > +# {
> > +# local i;
> > +#
> > +# $arg_parse
> > +#
> > +# default tmpdir "/tmp"; $default_post
> > +#
> > +# $requireargs filename
> > +#
> > +# for $i in ${args[@]} ; do
> > +# echo "$i" > $tmpdir/$filename
> > +# done
> > +#
> > +# [[ -n "$flower" ] && echo $flower
> > +# }
> > +
> > +arg_parse_cmd=\
> > +"local -a args;
> > +local _a;
> > +local _vn;
> > +local _m;
> > +
> > +_m=true;
> > +
> > +for _a in \"\$@\" ; do
> > + false && echo \"Evaluating \${_a} [[ \"\${_a/=}\" = \"\${_a}\" ]]\";
> > + if \$_m && [[ \"\${_a/=}\" != \"\${_a}\" ]] ; then
> > + false && echo Parameter;
> > + _vn=\${_a%%=*};
> > + eval \"local \$_vn\";
> > + eval \"\$_a\";
> > + elif \$_m && [[ \"\${_a}\" == \"--\" ]] ; then
> > + false && echo Separator;
> > + _m=false;
> > + else
> > + false && echo Argument;
> > + _m=false;
> > + args+=(\"\$_a\");
> > + fi;
> > +done"
> > +
> > +arg_parse="eval $arg_parse_cmd"
> > +
> > +# Pass in either the current function name, or the name of the script
> > +requireargs="eval _func=\"\$FUNCNAME\" ; eval [[ -n \\\"\$_func\\\" ]] ||
> > _func=\$0 ; eval _require-args \$_func"
> > +
> > +function _require-args()
> > +{
> > + local _arg
> > + local _args
> > +
> > + _args=($@)
> > +
> > + for _arg in ${_args[@]:1} ; do
> > + eval "[[ -n \"\${$_arg}\" ]] || fail \"${_args[0]}: Missing $_arg\""
> > + done
> > +}
> > +
> > +function default()
> > +{
> > + # l0: eval i="5"
> > + # l1: default_post="eval $1=\"$2\""
> > + # l3: eval "if [[ -z \"\$$1\" ]] ; then default_post=\"eval
> > \$1=\\\"$2\\\"\" ; fi"
> > + eval "if [[ -z \"\$$1\" ]] ; then default_post=\"eval local
> > \$1=\\\"$2\\\"\" ; else unset default_post ; fi"
> > +}
> > +
> > +function fail()
> > +{
> > + echo FATAL "$@" 1>&2
> > + [[ -n "$fail_cleanup" ]] && $fail_cleanup
> > + exit 1
> > +}
> > +
> > +function info()
> > +{
> > + echo INFO "$@" 1>&2
> > +}
> > +
> > +function error()
> > +{
> > + echo ERROR "$@" 1>&2
> > +}
> > +
> > +RAISIN_HELP+=("help List available commands")
> > +function help()
> > +{
> > + echo "Usage: $0 command [arguments...]"
> > + echo " Run '$0 help' for a list of commands, or '$0 command-help' for"
> > + echo " help on a particular command."
> > + echo
> > +
> > + for i in "${RAISIN_HELP[@]}" ; do
> > + echo "$i"
> > + done
> > +
> > + echo
> > +
> > + exit 0
> > +}
> > +
> > +function cmdline()
> > +{
> > + local cmd;
> > +
> > + [[ "$#" -eq "0" ]] && help
> > +
> > + $arg_parse
> > +
> > + # If the command is not defined, then print help and exit
> > + if ! type "${args[0]}" 2>/dev/null | grep -q 'function' ; then
> > + echo "Unknown function: ${args[0]}"
> > + echo
> > + help
> > + fi
> > +
> > + info Running "${args[0]}"
> > + "${args[0]}" "${args[@]:1}" || exit 1
> > +
> > + if ! [[ -z "$RET" ]] ; then
> > + echo $RET
> > + fi
> > +}
> > diff --git a/raise b/raise
> > new file mode 100755
> > index 0000000..7f3faae
> > --- /dev/null
> > +++ b/raise
> > @@ -0,0 +1,16 @@
> > +#!/usr/bin/env bash
> > +
> > +# Include your defaults
> > +if [[ -e "./config" ]] ; then
> > + . ./config
> > +fi
> > +
> > +# To use this as a library, set RAISIN_PATH appropriately
> > +[[ -z "$RAISIN_PATH" ]] && RAISIN_PATH="$PWD/lib"
> > +
> > +# Then as many as the sub-libraries as you need
> > +. ${RAISIN_PATH}/core.sh
> > +
> > +# And do your own thing rather than running commands
> > +# I suggest defining a "main" function of your own and running it like
> > this.
> > +cmdline "$@"
> > --
> > 1.9.1
> >
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@xxxxxxxxxxxxx
> > http://lists.xen.org/xen-devel
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |