[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: DefineClasses help
From: |
Mark Burgess |
Subject: |
Re: DefineClasses help |
Date: |
Wed, 26 Feb 2003 09:43:24 +0100 (MET) |
On 25 Feb, Andrew Stribblehill wrote:
> Quoting Alexander Mattausch
> <Alexander.Mattausch@physik.uni-erlangen.de> (2003-02-25 04:29:44
> GMT):
>> Andrew Stribblehill schrieb:
>>
>> >DefineClasses is defined whenever any part of your file is edited.
>> >Mark actually put some test into the editfiles source to stop people
>> >getting confused by trying this. The error message is:
>> >
>> >Class definitions inside conditionals or loops are not allowed
>> >
>> But there are circumstances under which it is sensible to define a
>> class only if a part of the file has been edited, as in this case.
>> Suse e.g. is now using a similar concept with config files in
>> /etc/sysconfig that may be read by several daemons. Editing such a
>> file means, for example, that all daemons are restarted, although
>> only one would have been necessary. Intuitively I'd put the
>> DefineClasses statement in a BeginGroup/EndGroup, then.
>
> I see what you mean, but that would diverge from the documented
> meaning of DefineClasses. The following patch adds an extra keyword,
> DefineInGroup, which defines a list (comma, colon or dot separated)
> to be defined if the group is entered, regardless of whether any
> editing is done within the group.
>
> I haven't patched the documentation.
>
> diff -ruN cfengine-2.0.5-old/src/cf.defs.h
> cfengine-2.0.5/src/cf.defs.h
> --- cfengine-2.0.5-old/src/cf.defs.h 2003-02-15 09:30:51.000000000 +0000
> +++ cfengine-2.0.5/src/cf.defs.h 2003-02-25 16:47:14.000000000 +0000
> @@ -911,7 +911,8 @@
> EditRepos,
> EditUmask,
> EditUseShell,
> - EditFilter
> + EditFilter,
> + DefineInGroup
> };
>
> enum RegExpTypes
> diff -ruN cfengine-2.0.5-old/src/edittools.c
> cfengine-2.0.5/src/edittools.c
> --- cfengine-2.0.5-old/src/edittools.c 2003-02-15 10:14:48.000000000
> +0000
> +++ cfengine-2.0.5/src/edittools.c 2003-02-25 17:12:25.000000000 +0000
> @@ -357,6 +357,7 @@
> { struct Edlist *ep, *loopstart, *loopend, *ThrowAbort();
> struct Item *filestart = NULL, *newlineptr;
> char currenteditscript[bufsize], searchstr[bufsize],
> expdata[bufsize];
> + char *sp, currentitem[maxvarsize];
> struct stat tmpstat;
> char spliton = ':';
> mode_t maskval;
> @@ -459,6 +460,16 @@
> }
> break;
>
> + case DefineInGroup:
> + for (sp = expdata; *sp != '\0'; sp++)
> + {
> + currentitem[0] = '\0';
> + sscanf(sp,"%[^,:.]",currentitem);
> + sp += strlen(currentitem);
> + AddClassToHeap(currentitem);
> + }
> + break;
> +
> case CatchAbort:
> EditVerbose("Caught Exception\n");
> break;
> diff -ruN cfengine-2.0.5-old/src/globals.c
> cfengine-2.0.5/src/globals.c
> --- cfengine-2.0.5-old/src/globals.c 2003-02-11 20:33:47.000000000 +0000
> +++ cfengine-2.0.5/src/globals.c 2003-02-25 16:48:34.000000000 +0000
> @@ -886,6 +886,7 @@
> "Umask",
> "UseShell",
> "Filter",
> + "DefineInGroup",
> NULL
> };
>
> diff -ruN cfengine-2.0.5-old/src/install.c
> cfengine-2.0.5/src/install.c
> --- cfengine-2.0.5-old/src/install.c 2003-02-16 18:39:21.000000000 +0000
> +++ cfengine-2.0.5/src/install.c 2003-02-25 16:51:31.000000000 +0000
> @@ -2683,6 +2683,12 @@
> yyerror("EndLoop without ForEachLineIn");
> }
> break;
> + case DefineInGroup:
> + if (EDITGROUPLEVEL < 0)
> + {
> + yyerror("DefineInGroup outside a group");
> + }
> + break;
> case SetLine:
> if (FOREACHLEVEL > 0)
> {
>
This sounds like a nice idea, but I need to look over this patch
carefully...soon.
M
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Work: +47 22453272 Email: Mark.Burgess@iu.hio.no
Fax : +47 22453205 WWW : http://www.iu.hio.no/~mark
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- DefineClasses help, Zeev Fisher, 2003/02/25
- Re: DefineClasses help, Andrew Stribblehill, 2003/02/25
- Re: DefineClasses help, Zeev Fisher, 2003/02/25
- Re: DefineClasses help, Alexander Mattausch, 2003/02/25
- Re: DefineClasses help, Andrew Stribblehill, 2003/02/25
- Re: DefineClasses help, Alexander Mattausch, 2003/02/25
- Re: DefineClasses help, Andrew Stribblehill, 2003/02/25
- Re: DefineClasses help, Andrew Stribblehill, 2003/02/25
- Re: DefineClasses help,
Mark Burgess <=
- DefineInGroup, Andrew Stribblehill, 2003/02/26
- Re: DefineInGroup, Alexander Mattausch, 2003/02/26
- Re: DefineClasses help, Zeev Fisher, 2003/02/25
- Re: DefineClasses help, Andrew Stribblehill, 2003/02/25
- Re: DefineClasses help, Jamie Wilkinson, 2003/02/25