[ 
https://issues.apache.org/jira/browse/IVY-615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12532218
 ] 

Maarten Coene commented on IVY-615:
-----------------------------------

The getAndCheck method calls the check method. This check method does the 
following:

{code}
    private boolean check(Resource resource, File dest, String algorithm) 
throws IOException {
        Resource csRes = resource.clone(resource.getName() + "." + algorithm);
        if (csRes.exists()) {
           ..
        } else {
            return false;
        }
    }
 {code}

If you say an IOException is thrown because of trying to download a .sha1 
artifact, this would mean that the csRes.exists() in the code above returned 
true for a resource (the .sha1 resource) that doesn't exist. 

Can you verify the following:
- Did you create your own SvnResource class?
- Does the exists() method returns false for the .sha1 resource?

regards,
Maarten

> problems with download() method when extending BasicResolver
> ------------------------------------------------------------
>
>                 Key: IVY-615
>                 URL: https://issues.apache.org/jira/browse/IVY-615
>             Project: Ivy
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.0.0-alpha-2
>            Reporter: Adrian Woodhead
>
> When trying to create a SvnResolver I have run into an issue which seems to 
> originate in BasicResolver. I extend RepositoryResolver which ultimately 
> extends BasicResolver. I implement various methods in my classes to have 
> dependent files downloaded from subversion over the svn+ssh protocol  which 
> works OK, however files are downloaded into the local ivy repository as 
> FILENAME.EXT.part and never renamed to have the .part removed even though 
> they are completely downloaded. I tracked the issue down to this method in 
> BasicResolver:
> public DownloadReport download(Artifact[] artifacts, DownloadOptions options)
> The code on line 808 is executed:
> adr.setSize(getAndCheck(artifactRef.getResource(), tmp));
> This in turn tries to download a .sha1 file for my resource which fails 
> (there isn't one) which throws an IOException. This means that the code 
> following where the file is renamed to have the .part removed is never 
> executed. I don't know enough about the internals of Ivy to say what the best 
> way to fix this is so I did the following which almost certainly is not the 
> best solution:
>     try {
>          adr.setSize(getAndCheck(artifactRef.getResource(), tmp));
>     } catch (IOException e) {
>         Message.warn(e.getMessage());
>     }
> I didn't want to change the Ivy code so I moved the entire download method 
> into my class and then noticed it wouldn't compile due to the object defined 
> at line 104:
>     private URLRepository extartifactrep = new URLRepository(); // used only 
> to download
> I'm not sure why URLRepository is hardcoded here, surely this should use a 
> method like getRepository() in RepositoryResolver to get the actual 
> repository in use, which in my case is not a URLRepository but my own 
> SvnRepository. My suggestion would be to move the Repository member variable 
> and getter and setter from RepositoryResolver up into BasicResolver and 
> change line 805 in BasicResolver from
>     extartifactrep.get(artifactRef.getResource().getName(), tmp);
> to 
>     getRepository().get(artifactRef.getResource().getName(), tmp);

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to