Discussion:
Filterchain's LineContains on LoadProperties is blocking the reading of properties
Anuerin Diaz
2018-04-19 01:58:13 UTC
Permalink
Hi,

I am trying to selectively load properties using the LoadProperties and
FilterChain+LineContains tasks. However based on my test if the Filterchain
starts to contain any "<contains/>" element then it will start discarding
all contents of the property file being read. This was tested using ant
1.10.1 adn 1.10.3 in a Java 1.8 VM hosted in a Windows 10 64-bit machine.

Below is my build xml and sample.properties file. The initialize target
has different variations that I tried to do to isolate the problem. What
could be the problem in this instance? Thanks.

-- build.xml ---

<project name="MyProject" basedir=".">
<target name="initialize">
<echo>Starting load...</echo>
<loadproperties srcFile="${basedir}/01_PropertyFiles/sample.properties">

<filterchain>
<linecontains>
<contains value="ws.user" />
<contains value="ws.password" />
<contains value="wl.user" />
<contains value="wl.password" />
</linecontains>
</filterchain>

<!--filterchain>

<filterreader classname="org.apache.tools.ant.filters.LineContains">
<param type="contains" value="user"/>
<param type="contains" value="password"/>
</filterreader>


</filterchain-->


</loadproperties>
<echo>${ws.user} - ${ws.password}</echo>
<echo>${wl.user} - ${wl.password}</echo>

<echo>${placebo.prop} should be printed as a literal. </echo>

</target>

</project>


-- end of build.xml ---

---- sample.properties ----
placebo.prop=dontprintme
ws.user=dilbert
ws.password=washere
wl.user=felix
wl.password=lantern

ps.xser=dummy
---- end of sample.properties ----
--
"Programming, an artform that fights back"

Anuerin G. Diaz
Registered Linux User #246176
http://ramfree17.net/capsule , when you absolutely have nothing else better
to do
Jaikiran Pai
2018-04-19 04:21:00 UTC
Permalink
Hi Anuerin,

Ifthere are more than one"contains" elements of the "linecontains", then
as noted in the documentation[1]"and" will be used toevaluate whether
the line contains those strings. So in the exampleyou pasted, the
properties file will be looked for lines containing ws.user AND
ws.password AND wl.user AND wl.password, which obviously won't be
satisfied for the sample.properties.

[1] https://ant.apache.org/manual/Types/filterchain.html#linecontains

-Jaikiran
Post by Anuerin Diaz
Hi,
I am trying to selectively load properties using the LoadProperties and
FilterChain+LineContains tasks. However based on my test if the Filterchain
starts to contain any "<contains/>" element then it will start discarding
all contents of the property file being read. This was tested using ant
1.10.1 adn 1.10.3 in a Java 1.8 VM hosted in a Windows 10 64-bit machine.
Below is my build xml and sample.properties file. The initialize target
has different variations that I tried to do to isolate the problem. What
could be the problem in this instance? Thanks.
-- build.xml ---
<project name="MyProject" basedir=".">
<target name="initialize">
<echo>Starting load...</echo>
<loadproperties srcFile="${basedir}/01_PropertyFiles/sample.properties">
<filterchain>
<linecontains>
<contains value="ws.user" />
<contains value="ws.password" />
<contains value="wl.user" />
<contains value="wl.password" />
</linecontains>
</filterchain>
<!--filterchain>
<filterreader classname="org.apache.tools.ant.filters.LineContains">
<param type="contains" value="user"/>
<param type="contains" value="password"/>
</filterreader>
</filterchain-->
</loadproperties>
<echo>${ws.user} - ${ws.password}</echo>
<echo>${wl.user} - ${wl.password}</echo>
<echo>${placebo.prop} should be printed as a literal. </echo>
</target>
</project>
-- end of build.xml ---
---- sample.properties ----
placebo.prop=dontprintme
ws.user=dilbert
ws.password=washere
wl.user=felix
wl.password=lantern
ps.xser=dummy
---- end of sample.properties ----
---------------------------------------------------------------------
To unsubscribe, e-mail: user-***@ant.apache.org
For additional commands, e-mail: user-***@ant.apache.org
Anuerin Diaz
2018-04-19 04:33:18 UTC
Permalink
Thanks Jaikiran. That is a very subtle behavior. I will try switching it
to LineContainsRegExp. Is there another alternative of switching the
behavior to OR?
Post by Jaikiran Pai
Hi Anuerin,
Ifthere are more than one"contains" elements of the "linecontains", then
as noted in the documentation[1]"and" will be used toevaluate whether the
line contains those strings. So in the exampleyou pasted, the properties
file will be looked for lines containing ws.user AND ws.password AND
wl.user AND wl.password, which obviously won't be satisfied for the
sample.properties.
[1] https://ant.apache.org/manual/Types/filterchain.html#linecontains
-Jaikiran
Post by Anuerin Diaz
Hi,
I am trying to selectively load properties using the LoadProperties and
FilterChain+LineContains tasks. However based on my test if the Filterchain
starts to contain any "<contains/>" element then it will start discarding
all contents of the property file being read. This was tested using ant
1.10.1 adn 1.10.3 in a Java 1.8 VM hosted in a Windows 10 64-bit machine.
Below is my build xml and sample.properties file. The initialize target
has different variations that I tried to do to isolate the problem. What
could be the problem in this instance? Thanks.
-- build.xml ---
<project name="MyProject" basedir=".">
<target name="initialize">
<echo>Starting load...</echo>
<loadproperties srcFile="${basedir}/01_Propert
yFiles/sample.properties">
<filterchain>
<linecontains>
<contains value="ws.user" />
<contains value="ws.password" />
<contains value="wl.user" />
<contains value="wl.password" />
</linecontains>
</filterchain>
<!--filterchain>
<filterreader classname="org.apache.tools.an
t.filters.LineContains">
<param type="contains" value="user"/>
<param type="contains" value="password"/>
</filterreader>
</filterchain-->
</loadproperties>
<echo>${ws.user} - ${ws.password}</echo>
<echo>${wl.user} - ${wl.password}</echo>
<echo>${placebo.prop} should be printed as a literal. </echo>
</target>
</project>
-- end of build.xml ---
---- sample.properties ----
placebo.prop=dontprintme
ws.user=dilbert
ws.password=washere
wl.user=felix
wl.password=lantern
ps.xser=dummy
---- end of sample.properties ----
---------------------------------------------------------------------
--
"Programming, an artform that fights back"

Anuerin G. Diaz
Registered Linux User #246176
http://ramfree17.net/capsule , when you absolutely have nothing else better
to do
Jaikiran Pai
2018-04-19 04:40:48 UTC
Permalink
Post by Anuerin Diaz
Is there another alternative of switching the
behavior to OR?
Looking at the code, I don't see a way to switch it to OR. However, I do
think it might make a good enhancement to allow users to configure this
behaviour as an attribute of the "linecontains" filter (which will
default to AND). That way they aren't forced to use LineContainsRegExp
for something simple like this. Would you like to create a enhancement
request here[1], so that it can be tracked?


[1] https://bz.apache.org/bugzilla/enter_bug.cgi?product=Ant

-Jaikiran


---------------------------------------------------------------------
To unsubscribe, e-mail: user-***@ant.apache.org
For additional commands, e-mail: user-***@ant.apache.org
Anuerin Diaz
2018-04-19 04:53:06 UTC
Permalink
I will log the enhancement request as this can get messy if there are no
common properties and the option is multiple loading of the same file.
Post by Jaikiran Pai
Post by Anuerin Diaz
Is there another alternative of switching the
behavior to OR?
Looking at the code, I don't see a way to switch it to OR. However, I do
think it might make a good enhancement to allow users to configure this
behaviour as an attribute of the "linecontains" filter (which will
default to AND). That way they aren't forced to use LineContainsRegExp
for something simple like this. Would you like to create a enhancement
request here[1], so that it can be tracked?
[1] https://bz.apache.org/bugzilla/enter_bug.cgi?product=Ant
-Jaikiran
---------------------------------------------------------------------
Anuerin Diaz
2018-04-19 05:08:56 UTC
Permalink
https://bz.apache.org/bugzilla/show_bug.cgi?id=62313 has been logged.
Thanks!
Post by Anuerin Diaz
I will log the enhancement request as this can get messy if there are no
common properties and the option is multiple loading of the same file.
Post by Jaikiran Pai
Post by Anuerin Diaz
Is there another alternative of switching the
behavior to OR?
Looking at the code, I don't see a way to switch it to OR. However, I do
think it might make a good enhancement to allow users to configure this
behaviour as an attribute of the "linecontains" filter (which will
default to AND). That way they aren't forced to use LineContainsRegExp
for something simple like this. Would you like to create a enhancement
request here[1], so that it can be tracked?
[1] https://bz.apache.org/bugzilla/enter_bug.cgi?product=Ant
-Jaikiran
---------------------------------------------------------------------
--
"Programming, an artform that fights back"

Anuerin G. Diaz
Registered Linux User #246176
http://ramfree17.net/capsule , when you absolutely have nothing else better
to do
Loading...