You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ivy-commits@incubator.apache.org by "Adrian Woodhead (JIRA)" <ji...@apache.org> on 2007/10/03 10:01:50 UTC

[jira] Created: (IVY-615) problems with download() method when extending BasicResolver

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.


[jira] Commented: (IVY-615) problems with download() method when extending BasicResolver

Posted by "Adrian Woodhead (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/IVY-615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12532447 ] 

Adrian Woodhead commented on IVY-615:
-------------------------------------

Thanks Maarten, that was indeed the issue, I wasn't clear on what methods I needed to implement on my various classes. I now implemented the exists() method properly in my resource and removed the download() method from my resolver class and it seems to work just fine now. I still find the reference to URLRepository in the base class strange but it doesn't seem to break anything on my side so it's ok. 

> 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.


[jira] Closed: (IVY-615) problems with download() method when extending BasicResolver

Posted by "Adrian Woodhead (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/IVY-615?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Adrian Woodhead closed IVY-615.
-------------------------------

    Resolution: Fixed

Problem wasn't in IVY but in my extended code where the resource exists() method wasn't properly implemented.

> 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.


[jira] Commented: (IVY-615) problems with download() method when extending BasicResolver

Posted by "Maarten Coene (JIRA)" <ji...@apache.org>.
    [ 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.