[augeas-devel] Inconsistent matching of multiple predicates (involving last/position)

Mol, Xavier (SCC) xavier.mol at kit.edu
Fri Aug 28 12:24:12 UTC 2015


Hi again,

for some reason I cannot explain, now a couple of things work suddenly as expected:

augtool> match $master/*[last()]
/files/etc/auto.master/3 = +
augtool> match $master/*[position() = 2]
/files/etc/auto.master/#comment[1] = Sample auto.master file
augtool> match $master/*[label() != '#comment'][last()]
/files/etc/auto.master/3 = +


Though not everything does...

augtool> match $master/*[label() != '#comment']
/files/etc/auto.master/1 = /misc
/files/etc/auto.master/2 = /net
/files/etc/auto.master/3 = +
augtool> match $master/*[label() != '#comment'][position() = 2]
  (no matches)


Yes, I did edit a copy of automaster.aug, just to experiment with a labeled mount point, but I moved back the original, so virtually nothing should have changed, besides the timestamps on automaster.aug. Is there maybe some kind of cacheing in Augeas, which could have updated just now (instead of when I installed the new packages)?

Best regards,
Xavier.

> -----Original Message-----
> From: augeas-devel-bounces at redhat.com [mailto:augeas-devel-bounces at redhat.com] On Behalf Of Mol, Xavier (SCC)
> Sent: Friday, August 28, 2015 1:58 PM
> To: Dominic Cleal
> Cc: augeas-devel at redhat.com
> Subject: Re: [augeas-devel] Inconsistent matching of multiple predicates (involving last/position)
> 
> Hi Dominic,
> 
> I've updated Augeas, but for me the results stay the same...
> 
> augtool> match /augeas/version
> /augeas/version = 1.4.0
> augtool> match $master/*[label() != '#comment'][map]
> /files/etc/auto.master/1 = /misc
> /files/etc/auto.master/2 = /net
> /files/etc/auto.master/3 = +
> augtool> match $master/*[label() != '#comment'][position() = 2]
>   (no matches)
> augtool> match $master/*[label() != '#comment'][last()]
>   (no matches)
> 
> 
> Maybe I misunderstand how to use last()/position() in the first place, because even this fails:
> 
> augtool> match $master/*[last()]
>   (no matches)
> augtool> match $master/*[position() = 1]
>   (no matches)
> 
> 
> This should return the very last and first node, regardless whether it’s a comment or a mapping, right? Though it may work, if I mess
> around with the lens and introduce a label for the mount points.
> 
> augtool> print $master/*[label() != '#comment']
> /files/etc/auto.master/mount[1] = "/misc"
> /files/etc/auto.master/mount[1]/map = "/etc/auto.misc"
> /files/etc/auto.master/mount[2] = "/net"
> /files/etc/auto.master/mount[2]/map = "-hosts"
> /files/etc/auto.master/mount[3] = "+"
> /files/etc/auto.master/mount[3]/map = "auto.master"
> augtool> match $master/mount[last()]
> /files/etc/auto.master/mount[3] = +
> augtool> match $master/mount[position() = 2]
> /files/etc/auto.master/mount[2] = /net
> 
> 
> > > I'd guess position() is the position under the original node, not in the
> > > filtered results (!= '#comment').
> Then this would qualify as a bug, correct? Quote from the Augeas wiki "Multiple predicates are evaluated by filtering node sets
> successively".
> 
> match $master/*[label() != '#comment'][position() = 2]
> 
> _in general_ should not yield the same result as
> 
> match $master/*[position() = 2][label() != '#comment']
> 
> which is what you assume position() does (the result will be the same only if the filter for comments has no effect, e.g. when both first
> nodes are no comment)?
> 
> 
> Best regards,
> Xavier.
> 
> > -----Original Message-----
> > From: augeas-devel-bounces at redhat.com [mailto:augeas-devel-bounces at redhat.com] On Behalf Of Mol, Xavier (SCC)
> > Sent: Friday, August 28, 2015 11:02 AM
> > To: Dominic Cleal
> > Cc: augeas-devel at redhat.com
> > Subject: Re: [augeas-devel] Inconsistent matching of multiple predicates (involving last/position)
> >
> > Thank you for your quick reply, Dominic!
> >
> > I'll see if I can update Augeas first.
> >
> > Best regards,
> > Xavier.
> >
> > > -----Original Message-----
> > > From: Dominic Cleal [mailto:dcleal at redhat.com]
> > > Sent: Friday, August 28, 2015 10:58 AM
> > > To: Mol, Xavier (SCC)
> > > Cc: augeas-devel at redhat.com
> > > Subject: Re: Inconsistent matching of multiple predicates (involving last/position)
> > >
> > > On 28/08/15 09:50, Mol, Xavier (SCC) wrote:
> > > > What Augeas version?
> > > > 	augeas-1.0.0-10.el6.x86_64
> > >
> > > This is quite old, it appears to have been fixed some time since.
> > >
> > > > augtool> defvar master /files/etc/auto.master
> > > > augtool> match $master/*[map]
> > > > /files/etc/auto.master/1 = /misc
> > > > /files/etc/auto.master/2 = /net
> > > > /files/etc/auto.master/3 = +
> > > > augtool> match $master/*[label() != '#comment']
> > > > /files/etc/auto.master/1 = /misc
> > > > /files/etc/auto.master/2 = /net
> > > > /files/etc/auto.master/3 = +
> > > >
> > > > **)
> > > > augtool> match $master/*[map][last()]
> > > > /files/etc/auto.master/3 = +
> > > > augtool> match $master/*[map][position() = 2]
> > > > /files/etc/auto.master/2 = /net
> > > > augtool> match $master/*[label() != '#comment'][last()]
> > > >   (no matches)
> > >
> > > On 1.4.0:
> > >
> > > augtool> match $master/*[label() != '#comment'][last()]
> > > /files/etc/auto.master/3 = +
> > >
> > > > augtool> match $master/*[label() != '#comment'][position() = 2]
> > > >   (no matches)
> > >
> > > augtool> match $master/*[label() != '#comment'][position() = 3]
> > > /files/etc/auto.master/1 = /misc
> > > augtool> match $master/*[label() != '#comment'][position() = 6]
> > > /files/etc/auto.master/2 = /net
> > >
> > >
> > > A git bisect would probably narrow down which commit fixed it, as I
> > > can't remember now.  If you need it fixed in el6, please file a BZ with
> > > Red Hat.
> > >
> > > --
> > > Dominic Cleal
> > > Red Hat Engineering
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 6401 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/augeas-devel/attachments/20150828/7df1a92f/attachment.p7s>


More information about the augeas-devel mailing list