Re: [gentoo-dev] [PATCH v2 1/1] edo.eclass: add new eclass
On 16/04/2022 20.14, Sam James wrote: Bug: https://bugs.gentoo.org/744880 Signed-off-by: Sam James --- eclass/edo.eclass | 46 ++ 1 file changed, 46 insertions(+) create mode 100644 eclass/edo.eclass diff --git a/eclass/edo.eclass b/eclass/edo.eclass new file mode 100644 index ..7b4ae04c43ab --- /dev/null +++ b/eclass/edo.eclass @@ -0,0 +1,46 @@ +# Copyright 2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: edo.class +# @MAINTAINER: +# QA Team +# @AUTHOR: +# Sam James +# @SUPPORTED_EAPIS: 7 8 +# @BLURB: Convenience function to run commands verbosely and die on failure +# @DESCRIPTION: +# This eclass provides the 'edo' command, and an 'edob' variant for ebegin/eend, +# which dies (exits) on failure and logs the command used verbosely. +# + +case ${EAPI:-0} in + 7|8) ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; +esac + +if [[ -z ${_EDO_ECLASS} ]] ; then + _EDO_CLASS=1 typo: s/_CLASS/_ECLASS/ + +# @FUNCTION: edo +# @USAGE: [...] +# @DESCRIPTION: +# Executes 'command' with any given arguments and exits on failure unless +# called under 'nonfatal'. +edo() { + elog "$@" + "$@" || die -n "Failed to run command: $@ failed" +} + +# @FUNCTION: edob +# @USAGE: [...] +# @DESCRIPTION: +# Executes 'command' with ebegin & eend with any given arguments and exits +# on failure unless called under 'nonfatal'. Maybe mention that 'command' should be "short". I do not know if we want or can provide a concrete value that determines shortness. +# Intended for single commands, otherwise regular ebegin/eend should be used. I think it is obvious that it can be only used for single commands. If I am not mistaken, using multiple commands within ebegin/eend also means that those commands, or, at least all commands after the first, can not (or at least "should not") be printed/logged, as I assume that it would break eend()'s positioning. With multiple commands (e.g., cmd1, cmd2, cmd3), I'd probably suggest to edo cmd1 edo cmd2 edo cmd3 since I personally like to avoid the inflationary usage of ebegin/eend and instead recommend to use ebegin/eend only for a few long-running milestone commands in the ebuild (if any). Hence I don't like that the description line above redirects the user to ebegin/eend. It can probably simply be dropped. +edob() { + ebegin "Running $@" + "$@" + eend $? || die -n "$@ failed" +} + +fi Like ionen, I also wondered if this could be an argument to edo, but I believe this would clutter edo's implementation with argument parsing and additional logic. Hence I believe having two separate functions, as in this patch, is the way to go. Thanks Sam! - Flow
Re: [gentoo-dev] [PATCH v2 1/1] edo.eclass: add new eclass
On Sat, Apr 16, 2022 at 08:50:46PM -0400, Ionen Wolkens wrote: > e.g. if using edo to replace stuff like > # ./configure is not real autoconf! > local cmd=( > ./configure > --args > ${EXTRA_ECONF} > ) > echo ${cmd[*]}" > "${cmd[@]}" || die "cmd failed: ${cmd[*]}" Albeit on that note, when already using arrays like that edo is probably not super useful :) Just saved one line and a || die. -- ionen signature.asc Description: PGP signature
Re: [gentoo-dev] [PATCH v2 1/1] edo.eclass: add new eclass
On Sat, Apr 16, 2022 at 08:21:34PM +0200, Michał Górny wrote: > > +# @USAGE: [...] > > +# @DESCRIPTION: > > +# Executes 'command' with any given arguments and exits on failure unless > > +# called under 'nonfatal'. > > +edo() { > > + elog "$@" > > einfo? Way I see it, this could've even been just "echo", aka econf doesn't use einfo to show the ./configure command either but just simple echo. e.g. if using edo to replace stuff like # ./configure is not real autoconf! local cmd=( ./configure --args ${EXTRA_ECONF} ) echo ${cmd[*]}" "${cmd[@]}" || die "cmd failed: ${cmd[*]}" But einfo worksforme either way. Alternatively I guess it could also take switches for display behavior if don't want to have many functions using up the namespace. Not like a command would normally start with a dash (e.g. `edo -b command` is fine). -- ionen signature.asc Description: PGP signature
Re: [gentoo-dev] [PATCH v2 1/1] edo.eclass: add new eclass
On Sat, 2022-04-16 at 19:14 +0100, Sam James wrote: > Bug: https://bugs.gentoo.org/744880 > Signed-off-by: Sam James > --- > eclass/edo.eclass | 46 ++ > 1 file changed, 46 insertions(+) > create mode 100644 eclass/edo.eclass > > diff --git a/eclass/edo.eclass b/eclass/edo.eclass > new file mode 100644 > index ..7b4ae04c43ab > --- /dev/null > +++ b/eclass/edo.eclass > @@ -0,0 +1,46 @@ > +# Copyright 2022 Gentoo Authors > +# Distributed under the terms of the GNU General Public License v2 > + > +# @ECLASS: edo.class > +# @MAINTAINER: > +# QA Team > +# @AUTHOR: > +# Sam James > +# @SUPPORTED_EAPIS: 7 8 > +# @BLURB: Convenience function to run commands verbosely and die on failure > +# @DESCRIPTION: > +# This eclass provides the 'edo' command, and an 'edob' variant for > ebegin/eend, > +# which dies (exits) on failure and logs the command used verbosely. > +# > + > +case ${EAPI:-0} in > + 7|8) ;; > + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; > +esac > + > +if [[ -z ${_EDO_ECLASS} ]] ; then > + _EDO_CLASS=1 > + > +# @FUNCTION: edo How about calling it 'tokyo'? > +# @USAGE: [...] > +# @DESCRIPTION: > +# Executes 'command' with any given arguments and exits on failure unless > +# called under 'nonfatal'. > +edo() { > + elog "$@" einfo? > + "$@" || die -n "Failed to run command: $@ failed" > +} > + > +# @FUNCTION: edob > +# @USAGE: [...] > +# @DESCRIPTION: > +# Executes 'command' with ebegin & eend with any given arguments and exits > +# on failure unless called under 'nonfatal'. > +# Intended for single commands, otherwise regular ebegin/eend should be used. > +edob() { > + ebegin "Running $@" > + "$@" > + eend $? || die -n "$@ failed" > +} > + > +fi -- Best regards, Michał Górny
[gentoo-dev] [PATCH v2 1/1] edo.eclass: add new eclass
Bug: https://bugs.gentoo.org/744880 Signed-off-by: Sam James --- eclass/edo.eclass | 46 ++ 1 file changed, 46 insertions(+) create mode 100644 eclass/edo.eclass diff --git a/eclass/edo.eclass b/eclass/edo.eclass new file mode 100644 index ..7b4ae04c43ab --- /dev/null +++ b/eclass/edo.eclass @@ -0,0 +1,46 @@ +# Copyright 2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: edo.class +# @MAINTAINER: +# QA Team +# @AUTHOR: +# Sam James +# @SUPPORTED_EAPIS: 7 8 +# @BLURB: Convenience function to run commands verbosely and die on failure +# @DESCRIPTION: +# This eclass provides the 'edo' command, and an 'edob' variant for ebegin/eend, +# which dies (exits) on failure and logs the command used verbosely. +# + +case ${EAPI:-0} in + 7|8) ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; +esac + +if [[ -z ${_EDO_ECLASS} ]] ; then + _EDO_CLASS=1 + +# @FUNCTION: edo +# @USAGE: [...] +# @DESCRIPTION: +# Executes 'command' with any given arguments and exits on failure unless +# called under 'nonfatal'. +edo() { + elog "$@" + "$@" || die -n "Failed to run command: $@ failed" +} + +# @FUNCTION: edob +# @USAGE: [...] +# @DESCRIPTION: +# Executes 'command' with ebegin & eend with any given arguments and exits +# on failure unless called under 'nonfatal'. +# Intended for single commands, otherwise regular ebegin/eend should be used. +edob() { + ebegin "Running $@" + "$@" + eend $? || die -n "$@ failed" +} + +fi -- 2.35.1