On 2011-01-18, at 5:16 PM, Yaneva, Elena wrote:
> Hello,
>
> I have a few questions regarding the mirror application:
>
> My use-case:
> I have a repository and I want to mirror it. And from the repository I want
> to get only an installable unit and all its dependencies, and not to download
> the whole repository.
>
> And the questions:
> Is there a way to mirror both the artifact and metadata repository in one
> iteration or you have to call the artifact and metadata application one after
> the other like that:
> Metadata:
> -application org.eclipse.equinox.p2.metadata.repository.mirrorApplication
> -source file:C:/workspace/workspace_MirrorApplication/TestMirroringRepo
> -destination file:C:/tmp/testRepo3 -roots FirstPlugin
> Artifact:
> -application org.eclipse.equinox.p2.artifact.repository.mirrorApplication
> -source file:C:/workspace/workspace_MirrorApplication/TestMirroringRepo
> -destination file:C:/tmp/testRepo3 -roots FirstPlugin
>
> If I have to call them twice, there is a lot of duplicate tasks performed
> like the dependencies resolution and repositories loading.
Even though all the code is here, to my surprise, I could not
find any application doing that out of the box... Contributions welcome :) It
probably suffice to just create a new application.
>
> 2. I’m using the “-roots” parameter as an argument, in order to call the
> dependency resolution mechanism in the mirror application and to download
> only the root and all its dependencies.
> The metadata mirroring works perfectly. However, in the artifact mirror case
> I found an issue:
>
> The bug:
> The ”-roots” parameter does not work and always downloads the whole artifact
> repository.
>
> I debugged the case and the problem is that in
> theorg.eclipse.equinox.p2.internal.repository.tools.MirrorApplication.initializeIUs()
> method, the queryResult variable does not get populated with correct result.
> It should return, in the example case, installable unit “FirstPlugin” with
> the version it found in the metadata repository.
>
> The root cause:
> And the root cause is that the metadata repository is not initialized.
> The source repository (the one we want to mirror from) is not added as a
> child to the compositeMetadataRepository, because of a check.
> The check is:
> If medatada application: the source repository is added only to the
> compositeMetadataRepository
> If artifact application: the source repository is added only to the
> compositeArtifactRepository
> This is done in the getCompositeMetadataRepository() method of
> theorg.eclipse.equinox.p2.internal.repository.tool.AbstractApplication class.
>
> Actually, the metadata repository has to be added in both cases, because the
> metadata is needed for the dependency resolution.
> When I changed the check in the artifact case, everything worked perfectly
> and only the needed plugins were mirrored.
Given how far you went in this analysis, I would appreciate if you
could open a bug (https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Equinox)
and attach a patch.
>
> Is there a better way to solve my use-case? Maybe a Mirror Ant Task or
> another application – in the code of the MirrorApplication there are comments
> about old and new application?
> It would be great if there was only one application that does both tasks –
> metadata and artifact mirroring.
We currently provide an ant task, named p2.mirror that does what you
are after:
http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm
you can also find examples of it at
http://wiki.eclipse.org/Equinox/p2/Ant_Tasks
HTH
PaScaL
>
> Thank you,
> Elena
>
> _______________________________________________
> p2-dev mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/p2-dev
_______________________________________________
p2-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/p2-dev