Retrieving last modified node path (Was: [augeas-devel] First tests with aug mv)
Raphaël Pinson
raphink at gmail.com
Fri Aug 1 17:53:14 UTC 2008
On Fri, Aug 1, 2008 at 7:41 PM, David Lutterkort <dlutter at redhat.com> wrote:
> On Fri, 2008-08-01 at 11:14 +0200, Raphaël Pinson wrote:
>
>
> > After talking with David on IRC, I now understand that modifying
> > tree_insert to return the path to the created node would mean to
> > modify the API, which is not acceptable. David proposes another
> > approach, which would be to store the path to this new node
> > in /augeas/last_created_node.
>
> Thanks for bringing this up on the list - definitely better to discuss
> this here. The only change I would make to what we talked on IRC is to
> put that info a little deeper in the tree, like put it
> at /augeas/tree/last_created (mostly for cosmetic reasons)
>
> > After thinking about this, I think a /augeas/last_modified_node would
> > actually be more useful, although the most obvious use of it would be
> > for insert.
> >
> > With insert, this is an obvious need :
> > aug_ins("field", "after", path) does not give me any information on
> > the node that was created, so I have no clue on what path to pass to
> > aug_set or aug_rm if I want to set or remove this node.
> >
> > On the other hand, 'aug_set("/files/etc/my/file/field[100]", "value")'
> > or 'aug_set("/files/etc/my/file/field[last()]", "value")' do not give
> > me any information either on the exact path to the node I just
> > modified, but contrarily to aug_insert, I can still refer to this
> > modified node as "/files/etc/my/file/field[100]" or
> > "/files/etc/my/file/field[last()]".
> >
> > I think it could be interesting to have a /augeas/last_modified_node
> > where every function (whether insert, set, rm, mv, etc.) would write
> > the name of the last modified node, so that the user can retrieve it
> > to reuse it:
>
> I like that idea a lot. Just thinking out loud, here's what a call to
> aug_get(aug, "/augeas/tree/last_modified", &p) after each API call would
> set teh variable p to:
>
> Previous call p (the modfied path)
> aug_init - NULL
> aug_get - no influence on value
> of /augeas/tree/last_modified
> aug_set - PATH passed to aug_set, fully qualified
> aug_insert - fully qualified path to newly created node
> aug_rm - PATH passed to aug_rm
> aug_mv - PATH passed to aug_mv as DST argument
> aug_match - no influence on value of /augeas/tree/last_modified
> aug_save - either leave /augeas/tree/last_modified unchanged or
> set to NULL
> aug_print - no influence on value of /augeas/tree/last_modified
>
I was more thinking of using the PATH resulting of the action instead of the
path passed to the API (in the case of set for example, thinking about
/files/some/path/to/field[100])...
> Some more notes:
> * you can use the return value of an aug_get on
> "/augeas/tree/last_modified" right after aug_init to see if that
> feature is supported in your version of Augeas - return of '0'
> means no, return of 1 means 'yes'
> * the path expression passed to aug_rm can actually specify more
> than one node (like 'rm /files/etc/hosts/*')
>
... but there I understand better why you would use the sent PATH instead.
> * you still can't tell whether aug_set actually created a node or
> modified an existing node - that could be fixed by changing the
> return value of aug_set, e.g. return 0 when an already existing
> node was modified, and 1 when the node had to be created first
> * should aug_save clear /augeas/tree/last_modified or leave it
> alone ?
> * Looking at the table above, I don't think a last_modified entry
> would buy us much over a last_created entry; the last_created
> entry would only be changed by aug_set, aug_mv and aug_insert
> and would be guaranteed to always refer to exactly one node
I don't quite understand what you mean by this.
Raphael
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/augeas-devel/attachments/20080801/619f08d9/attachment.htm>
More information about the augeas-devel
mailing list