I would go for option 2 (halt on any failure). I think there can be many 
reasons why something fails, adding a property for each possible cause seems a 
bit overkill to me. If you really want to behave differently when the resolve 
fails, maybe you should do a manual ivy:resolve followed by an ivy:install?

This behavior would also be the consistent with the post-resolve tasks.
Which brings me to my next question: shouldn't the ivy:install task be a 
post-resolve task?

regards,
Maarten

----- Original Message ----
From: Xavier Hanin <[EMAIL PROTECTED]>
To: [email protected]
Sent: Wednesday, April 25, 2007 8:44:33 AM
Subject: Re: svn commit: r532027 - in /incubator/ivy/core/trunk: CHANGES.txt 
doc/doc/use/install.html src/java/org/apache/ivy/ant/IvyInstall.java 
test/java/org/apache/ivy/ant/IvyInstallTest.java

On 4/24/07, Maarten Coene <[EMAIL PROTECTED]> wrote:
> To keep a more consistent naming, I would prefer to use "haltonfailure" 
> instead of "haltonunresolved"

Yes, I was wondering myself if haltonfailure would be better. The
point is that it doesn't halt on any failure, it halts only on
unresolved dependencies. So I see 3 options:
- rename to haltonfailure and keep code as is
- rename to haltonfailure and actually halt on any failure
- add haltonfailure which halts on any failure, and keep haltonunresolved

WDYT?

Xavier

>
> regards,
> Maarten
>
> ----- Original Message ----
> From: "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED]
> Sent: Tuesday, April 24, 2007 7:53:21 PM
> Subject: svn commit: r532027 - in /incubator/ivy/core/trunk: CHANGES.txt 
> doc/doc/use/install.html src/java/org/apache/ivy/ant/IvyInstall.java 
> test/java/org/apache/ivy/ant/IvyInstallTest.java
>
> Author: xavier
> Date: Tue Apr 24 10:53:20 2007
> New Revision: 532027
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=532027
> Log:
> BUG: ivy:install ant task does not fail on error (IVY-475) (thanks to Jeffrey 
> Blatttman)
>
> Added:
>     incubator/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java
> Modified:
>     incubator/ivy/core/trunk/CHANGES.txt
>     incubator/ivy/core/trunk/doc/doc/use/install.html
>     incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java
>
> Modified: incubator/ivy/core/trunk/CHANGES.txt
> URL: 
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/CHANGES.txt?view=diff&rev=532027&r1=532026&r2=532027
> ==============================================================================
> --- incubator/ivy/core/trunk/CHANGES.txt (original)
> +++ incubator/ivy/core/trunk/CHANGES.txt Tue Apr 24 10:53:20 2007
> @@ -13,6 +13,7 @@
>       Ingo Adler
>      Stephane Baillez
>      Karl Baum
> +    Jeffrey Blatttman
>      Matthieu Brouillard
>      Kristian Cibulskis
>      Pierre Hägnestrand
> @@ -43,6 +44,9 @@
>      Johan Stuyts
>      John Williams
>
> +   version in SVN
> +=====================================
> +- BUG: ivy:install ant task does not fail on error (IVY-475) (thanks to 
> Jeffrey Blatttman)
>
>     2.0.0-alpha1-incubating
>  =====================================
>
> Modified: incubator/ivy/core/trunk/doc/doc/use/install.html
> URL: 
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/doc/doc/use/install.html?view=diff&rev=532027&r1=532026&r2=532027
> ==============================================================================
> --- incubator/ivy/core/trunk/doc/doc/use/install.html (original)
> +++ incubator/ivy/core/trunk/doc/doc/use/install.html Tue Apr 24 10:53:20 2007
> @@ -56,6 +56,8 @@
>          <td>No, defaults to false</td></tr>
>      <tr><td>matcher</td><td>the name of the matcher to use to find the 
> modules to install</td>
>          <td>No, defaults to exact</td></tr>
> +    <tr><td>haltonunresolved</td><td>true to fail build on unresolved 
> dependencies <span class="since">since 2.0</span></td>
> +        <td>No, defaults to true</td></tr>
>  </tbody>
>  </table>
>  <h1>Examples</h1>
>
> Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java
> URL: 
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java?view=diff&rev=532027&r1=532026&r2=532027
> ==============================================================================
> --- incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java 
> (original)
> +++ incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyInstall.java Tue 
> Apr 24 10:53:20 2007
> @@ -25,12 +25,13 @@
>  import org.apache.ivy.plugins.matcher.PatternMatcher;
>  import org.apache.ivy.util.filter.FilterHelper;
>  import org.apache.tools.ant.BuildException;
> -
> +import org.apache.ivy.core.report.ResolveReport;
> +import org.apache.tools.ant.BuildException;
>
>  /**
>   * Allow to install a module or a set of module from repository to another 
> one.
> - *
> - *
> + *
> + *
>   * @author Xavier Hanin
>   *
>   */
> @@ -38,13 +39,14 @@
>      private String  _organisation;
>      private String  _module;
>      private String  _revision;
> -    private File     _cache;
> +    private File     _cache;
>      private boolean _overwrite = false;
>      private String _from;
>      private String _to;
>      private boolean _transitive;
>      private String _type;
>      private String _matcher = PatternMatcher.EXACT;
> +    private boolean _haltOnUnresolved = true;
>
>      public void execute() throws BuildException {
>          Ivy ivy = getIvyInstance();
> @@ -58,12 +60,12 @@
>          if (_module == null && PatternMatcher.EXACT.equals(_matcher)) {
>              throw new BuildException("no module name provided for ivy 
> publish task: It can either be set explicitely via the attribute 'module' or 
> via 'ivy.module' property or a prior call to <resolve/>");
>          } else if (_module == null && 
> !PatternMatcher.EXACT.equals(_matcher)) {
> -            _module = PatternMatcher.ANY_EXPRESSION;
> +            _module = PatternMatcher.ANY_EXPRESSION;
>          }
>          if (_revision == null && PatternMatcher.EXACT.equals(_matcher)) {
>              throw new BuildException("no module revision provided for ivy 
> publish task: It can either be set explicitely via the attribute 'revision' 
> or via 'ivy.revision' property or a prior call to <resolve/>");
>          } else if (_revision == null && 
> !PatternMatcher.EXACT.equals(_matcher)) {
> -            _revision = PatternMatcher.ANY_EXPRESSION;
> +            _revision = PatternMatcher.ANY_EXPRESSION;
>          }
>          if (_from == null) {
>              throw new BuildException("no from resolver name: please provide 
> it through parameter 'from'");
> @@ -72,13 +74,26 @@
>              throw new BuildException("no to resolver name: please provide it 
> through parameter 'to'");
>          }
>          ModuleRevisionId mrid = ModuleRevisionId.newInstance(_organisation, 
> _module, _revision);
> +        ResolveReport report;
>          try {
> -            ivy.install(mrid, _from, _to, _transitive, doValidate(settings), 
> _overwrite, FilterHelper.getArtifactTypeFilter(_type), _cache, _matcher);
> +            report = ivy.install(mrid, _from, _to, _transitive, 
> doValidate(settings), _overwrite, FilterHelper.getArtifactTypeFilter(_type), 
> _cache, _matcher);
>          } catch (Exception e) {
>              throw new BuildException("impossible to install "+ mrid +": "+e, 
> e);
>          }
> +
> +        if (report.getUnresolvedDependencies().length > 0 && 
> isHaltonunresolved()) {
> +            throw new 
> BuildException(report.getUnresolvedDependencies().length
> +                    +" unresolved dependencies - see output for details");
> +        }
>      }
> -
> +
> +    public boolean isHaltonunresolved() {
> +        return _haltOnUnresolved;
> +    }
> +    public void setHaltonunresolved(boolean haltOnUnresolved) {
> +        _haltOnUnresolved = haltOnUnresolved;
> +    }
> +
>      public File getCache() {
>          return _cache;
>      }
> @@ -134,11 +149,11 @@
>      public void setType(String type) {
>          _type = type;
>      }
> -
> +
>      public String getMatcher() {
>          return _matcher;
>      }
> -
> +
>      public void setMatcher(String matcher) {
>          _matcher = matcher;
>      }
>
> Added: 
> incubator/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java
> URL: 
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java?view=auto&rev=532027
> ==============================================================================
> --- incubator/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java 
> (added)
> +++ incubator/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyInstallTest.java 
> Tue Apr 24 10:53:20 2007
> @@ -0,0 +1,101 @@
> +/*
> + *  Licensed to the Apache Software Foundation (ASF) under one or more
> + *  contributor license agreements.  See the NOTICE file distributed with
> + *  this work for additional information regarding copyright ownership.
> + *  The ASF licenses this file to You under the Apache License, Version 2.0
> + *  (the "License"); you may not use this file except in compliance with
> + *  the License.  You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *
> + *  Unless required by applicable law or agreed to in writing, software
> + *  distributed under the License is distributed on an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + *  See the License for the specific language governing permissions and
> + *  limitations under the License.
> + *
> + */
> +package org.apache.ivy.ant;
> +
> +import java.io.File;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.tools.ant.BuildException;
> +import org.apache.tools.ant.Project;
> +import org.apache.tools.ant.taskdefs.Delete;
> +
> +
> +public class IvyInstallTest extends TestCase {
> +    private File _cache;
> +    private IvyInstall _install;
> +    private Project _project;
> +
> +    protected void setUp() throws Exception {
> +        createCache();
> +        cleanTestLib();
> +        _project = new Project();
> +        _project.setProperty("ivy.settings.file", 
> "test/repositories/ivysettings.xml");
> +
> +        _install = new IvyInstall();
> +        _install.setProject(_project);
> +        _install.setCache(_cache);
> +    }
> +
> +    private void createCache() {
> +        _cache = new File("build/cache");
> +        _cache.mkdirs();
> +    }
> +
> +    protected void tearDown() throws Exception {
> +        cleanCache();
> +        cleanTestLib();
> +    }
> +
> +    private void cleanCache() {
> +        Delete del = new Delete();
> +        del.setProject(new Project());
> +        del.setDir(_cache);
> +        del.execute();
> +    }
> +
> +    private void cleanTestLib() {
> +        Delete del = new Delete();
> +        del.setProject(new Project());
> +        del.setDir(new File("build/test/lib"));
> +        del.execute();
> +    }
> +
> +    public void testDependencyNotFoundFailure() {
> +        _install.setOrganisation("xxx");
> +        _install.setModule("yyy");
> +        _install.setRevision("zzz");
> +        _install.setFrom("test");
> +        _install.setTo("1");
> +
> +        try {
> +            _install.execute();
> +            fail("unknown dependency, failure expected 
> (haltunresolved=true)");
> +        } catch (BuildException be) {
> +            // success
> +            assertTrue("invalid exception message, it should contain '1 
> unresolved',"
> +                    +" but it's: '"+be.getMessage()+"'",
> +                    be.getMessage().indexOf("1 unresolved") != -1);
> +        }
> +    }
> +
> +    public void testDependencyNotFoundSuccess() {
> +        _install.setOrganisation("xxx");
> +        _install.setModule("yyy");
> +        _install.setRevision("zzz");
> +        _install.setFrom("test");
> +        _install.setTo("1");
> +        _install.setHaltonunresolved(false);
> +
> +        try {
> +            _install.execute();
> +        } catch (BuildException be) {
> +            fail("unknown dependency, failure unexepected 
> (haltunresolved=false)");
> +        }
> +    }
> +}
>
>
>
>
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
>


-- 
Learn Ivy at ApacheCon: http://www.eu.apachecon.com/
Manage your dependencies with Ivy!
http://incubator.apache.org/ivy/




__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com

Reply via email to