On Wed, Aug 01, 2007 at 11:49:19PM +0200, Marc Haber wrote: > On Wed, Aug 01, 2007 at 09:11:18AM +0200, Ola Lundqvist wrote: > > On Tue, Jul 31, 2007 at 11:14:37PM +0200, Marc Haber wrote: > > > A different way to implement would mean having suffixes for the > > > variable name in config.d, either FOO_FROMHERE to replace FOO's value > > > for the rest of the cron-apt run, or FOO_HERE to only replace FOO's > > > value for thi action.d item. > > > > That would be one way, but it seems rather complicated. > > I think we should do something that is backwards compatible as well. :) > > > > > Please indicate which way you'd prefer, and I'll send a modified > > > patch. I do think that the patch listed above is the easiest one. > > > > I'm not sure what I prefer. :) > > > > Maybe I prefer the _HERE approach, but keep the old way that is if > > you change SYSLOGON that is actually changed. So when restoring you > > actually need to check if that the corresponding _HERE value actually > > contain something. > > I am afraid that your way of parsing the environment won't work. One > of the difficulties is that one cannot easily distinguish between > "unset variable" and "variable set with a null value", which would be > needed to find out whether a variable is not meant to be overridden > (unset), or meant to be overridden with a null value (empty).
I do not agree. Look at this: [EMAIL PROTECTED]:~/minirc$ set | grep "^XX" [EMAIL PROTECTED]:~/minirc$ XX=1 [EMAIL PROTECTED]:~/minirc$ set | grep "^XX" XX=1 [EMAIL PROTECTED]:~/minirc$ XX= [EMAIL PROTECTED]:~/minirc$ set | grep "^XX" XX= [EMAIL PROTECTED]:~/minirc$ unset XX [EMAIL PROTECTED]:~/minirc$ set | grep "^XX" So from this I can not understand what your problem is. > I am therefore afraid that we won't get along without an explicit list > of Variables needed for the override mechanism (since we need to know > which variables to copy into the _THIS variables). In a first step, > $ACTIONF is sourced to initiate the global overrides of the plain > variables. We then copy the contents of FOO to FOO_THIS (which is the > variable that will actually be used by this iteration's code) and > source $ACTIONF again. This time, the FOO_THIS definitions inside > $ACTIONF get in effect. Well copy things from the normal variable to a this variable is an other way. Then we do not need to restore... I thought the other way around, which made it more general, but uses more memory as we need to store it as well. > It was a long day for me, so I might be wrong, but you'll point me > into the right direction. I hope you have had a good night sleep by now. :) I can accept your patch below, if you can convince that the way I get the list of variables do not work. I'm not right now. :) In any case, thanks for valuable critics. I like when people tell me I'm wrong as it make me think more. Best regards, // Ola > Suggested (untested) Patch: > --- cron-apt.orig 2007-08-01 23:11:40.000000000 +0200 > +++ cron-apt 2007-08-01 23:46:49.000000000 +0200 > @@ -482,6 +488,27 @@ > > for ACTION in $(run_parts "$ACTIONDIR") ; do > ACTIONF=$(echo $ACTION | sed "s|$ACTIONDIR/||") > + # we need this list to start things > + VARLIST="SYSLOGON MAILON DEBUG EXITON DIFFIGNORE_THIS DIFFONCHANGES" > + > + # $ACTIONF can override the _THIS variables directly, which will > + # only hold for this loop, and it can directly override the > + # unsuffixed variables, which will hold for the rest of this > + # cron-apt run. > + # The first source of $ACTIONF will initiate the global override > + # _before_ we initialize the _THIS variables for this iteration. > + if [ -f "$ACTIONCONFDIR/$ACTIONF" ] ; then > + . "$ACTIONCONFDIR/$ACTIONF" > + fi > + > + # initialize _THIS variables to original variable value > + for VAR in $VARLIST; do > + eval "${VAR}_THIS=$VAR" > + done > + > + # the second source of $ACTIONF will not do any harm to global > + # overrides (they're already in effect), but initiate the _THIS > + # overrides. > if [ -f "$ACTIONCONFDIR/$ACTIONF" ] ; then > . "$ACTIONCONFDIR/$ACTIONF" > fi > @@ -505,22 +532,22 @@ > createerrorinfo $ACTIONF > > # SYSLOG > - if [ "$SYSLOGON" = "error" ] || [ "$SYSLOGON" = > "upgrade" ] ; then > + if [ "$SYSLOGON_THIS" = "error" ] || [ > "$SYSLOGON_THIS" = "upgrade" ] ; then > createsysloginfo $ACTIONF > fi > > # MAIL > - if [ "$MAILON" = "error" ] || [ "$MAILON" = "upgrade" > ] ; then > + if [ "$MAILON_THIS" = "error" ] || [ "$MAILON_THIS" = > "upgrade" ] ; then > createmailinfo $ACTIONF > fi > > # DEBUG > - if [ "$DEBUG" = "error" ] ; then > + if [ "$DEBUG_THIS" = "error" ] ; then > createloginfo $ACTIONF > fi > > # EXIT > - if [ "$EXITON" = "error" ] ; then > + if [ "$EXITON_THIS" = "error" ] ; then > echo exit > "$STATUS" > #exit > fi > @@ -533,15 +560,15 @@ > # Upgrade has happend > > # SYSLOG > - if [ "$SYSLOGON" = "upgrade" ] ; then > + if [ "$SYSLOGON_THIS" = "upgrade" ] ; then > createsysloginfo $ACTIONF > fi > # MAIL > - if [ "$MAILON" = "upgrade" ] ; then > + if [ "$MAILON_THIS" = "upgrade" ] ; then > createmailinfo $ACTIONF > fi > # DEBUG > - if [ "$DEBUG" = "upgrade" ] ; then > + if [ "$DEBUG_THIS" = "upgrade" ] ; then > createloginfo $ACTIONF > fi > fi > @@ -550,46 +577,46 @@ > # Independent of error or not > > # SYSLOG > - if [ "$SYSLOGON" = "always" ] ; then > + if [ "$SYSLOGON_THIS" = "always" ] ; then > createsysloginfo $ACTIONF > fi > # MAIL > - if [ "$MAILON" = "always" ] ; then > + if [ "$MAILON_THIS" = "always" ] ; then > createmailinfo $ACTIONF > fi > # DEBUG > - if [ "$DEBUG" = "verbose" ] || [ "$DEBUG" = "always" ] ; > then > + if [ "$DEBUG_THIS" = "verbose" ] || [ "$DEBUG_THIS" = > "always" ] ; then > createloginfo $ACTIONF > fi > > if grep -qvE '^[[:space:]]*$|CRON-APT' "$TEMP"; then > # --- > # Now we have output > - if [ "$SYSLOGON" = "output" ]; then > + if [ "$SYSLOGON_THIS" = "output" ]; then > createsysloginfo $ACTIONF > fi > - if [ "$MAILON" = "output" ]; then > + if [ "$MAILON_THIS" = "output" ]; then > createmailinfo $ACTIONF > fi > - if [ "$DEBUG" = "upgrade" ] ; then > + if [ "$DEBUG_THIS" = "upgrade" ] ; then > createloginfo $ACTIONF > fi > fi > TLINE=$(echo "$LINE" | sed -e "s/[[:space:]]/_/g;" | \ > tr "/" "-") > - if [ -n "$DIFFIGNORE" ]; then > - DIFFIGNORELINE="--ignore-matching-lines=$DIFFIGNORE" > + if [ -n "$DIFFIGNORE_THIS" ]; then > + > DIFFIGNORELINE="--ignore-matching-lines=$DIFFIGNORE_THIS" > fi > if [ ! -r "$MAILCHDIR/$ACTIONF-$TLINE" ] || ! diff > $DIFFIGNORELINE -u "$MAILCHDIR/$ACTIONF-$TLINE" "$TEMP" > "$DIFF" ; then > cp "$TEMP" "$MAILCHDIR/$ACTIONF-$TLINE" > # What to do with diff > # OBS! FROM NOW ON "$TEMP" CAN HAVE DIFF INFORMATION > IN IT! > if [ -n "$DIFF" ] && [ -r "$DIFF" ] ; then > - if [ "$DIFFONCHANGES" = "only" ] ; then > + if [ "$DIFFONCHANGES_THIS" = "only" ] ; then > cp "$DIFF" "$TEMP" > - elif [ "$DIFFONCHANGES" = "append" ] ; then > + elif [ "$DIFFONCHANGES_THIS" = "append" ] ; then > cat "$DIFF" >> "$TEMP" > - elif [ "$DIFFONCHANGES" = "prepend" ] ; then > + elif [ "$DIFFONCHANGES_THIS" = "prepend" ] ; then > echo "----- DIFF END HERE -----" >> "$DIFF" > cat "$TEMP" >> "$DIFF" > mv "$DIFF" "$TEMP" > @@ -600,15 +627,15 @@ > # We have changes > > # MAIL > - if [ "$MAILON" = "changes" ] ; then > + if [ "$MAILON_THIS" = "changes" ] ; then > createmailinfo $ACTIONF > fi > # SYSLOG > - if [ "$SYSLOGON" = "changes" ] ; then > + if [ "$SYSLOGON_THIS" = "changes" ] ; then > createmailinfo $ACTIONF > fi > # DEBUG > - if [ "$DEBUG" = "changes" ] ; then > + if [ "$DEBUG_THIS" = "changes" ] ; then > createloginfo $ACTIONF > fi > fi > > > Greetings > Marc > > -- > ----------------------------------------------------------------------------- > Marc Haber | "I don't trust Computers. They | Mailadresse im Header > Mannheim, Germany | lose things." Winona Ryder | Fon: *49 621 72739834 > Nordisch by Nature | How to make an American Quilt | Fax: *49 3221 2323190 > -- --- Ola Lundqvist systemkonsult --- M Sc in IT Engineering ---- / [EMAIL PROTECTED] Annebergsslingan 37 \ | [EMAIL PROTECTED] 654 65 KARLSTAD | | http://opalsys.net/ Mobile: +46 (0)70-332 1551 | \ gpg/f.p.: 7090 A92B 18FE 7994 0C36 4FE4 18A1 B1CF 0FE5 3DD9 / --------------------------------------------------------------- -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]