Mirror Task

The p2.mirror task is used to copy the contents of one repository to another. The location of the destination repository must be modifiable, and if a destination repository of a type is defined then a source for that type must also be present

Note that in the examples in this section the tasks contain a </source> tag. This tag should not contain a space - it is present due to a limitation in the wiki software.

Simple Examples

A task to mirror only the contents of a metadata repository at a given location:

The repositories in the tasks can be a mixture specified kinds and co-located.

Multiple Repositories

The source or destination metadata and artifact repositories need not be co-located, although the tasks are limited to at most one artifact and one metadata destination repository.

<p2.mirror><repositorylocation="file:/myArtifactDestination"name="A new repository"kind="A"/><repositorylocation="file:/myMetaDestination"name="A new repository"kind="M"/><source><repositorylocation="http://aSource/"/>< /source></p2.mirror>

Multiple source locations can also be defined:

<p2.mirror><repositorylocation="file:/myArtifactDestination"name="A new repository"kind="A"/><repositorylocation="file:/myMetaDestination"name="A new repository"kind="M"/><source><repositorylocation="http://aSource2/"/><repositorylocation="http://aSourceMeta/"kind="M"/><repositorylocation="http://aSourceArtifact/"kind="A"/>< /source></p2.mirror>

Fileset Repositories

The source repositories can also be defined through a FileSet (see Apache Ant documentation for defining a fileset), though if the location(s) in the filesetshould be a specific kind of repository that should also be specified by again using the kind attribute:

Repository Format

By default if the destination repositories already exist then the new data is appended, this can be prevented by adding the append attribute with the value false:

<p2.mirror><repositorylocation="file:/myArtifactDestination"name="A new repository"kind="A"append="false"/><repositorylocation="file:/myMetaDestination"name="A new repository"kind="M"append="false"/><source><repositorylocation="http://aSource/"/>< /source></p2.mirror>

To create a new repository using the properties of an existing repository the format attribute is added to the repository element:

<p2.mirror><repositorylocation="file:/myArtifactDestination"name="A new repository"kind="A"format="http://somerepo/"/><repositorylocation="file:/myMetaDestination"name="A new repository"kind="M"append="false"/><source><repositorylocation="http://aSource/"/>< /source></p2.mirror>

Partial Mirroring

Its also possible to partially mirror a repository, the simplest method is to specify an individual IU which will result in the default slicing options being used. If an artifact destination repository is defined then the artifacts required by the IUs will also be mirrored.

Comparison

There are several comparators (eg. MD5, JarComparator) available which can be used to compare the contents of a repository, when these are used the artifact must either be present in the destination repository, or a baseline repository must be defined.

Composite Repository Task

The p2.composite.repository task can be used to create or to modify the child repos of a composite repository

Create

To create a composite repository and add a single child:

<p2.composite.repository><repositorylocation="file:/myDestination"name="A new repository"kind="M"/><add><repositorylocation="http://aSource/"kind="M"/></add></p2.composite.repository>

The task can be told to fail if a repository already exists at the location to prevent accidental modification by adding the failOnExists attribute

<p2.composite.repositoryfailOnExists="true"><repositorylocation="file:/myDestination"name="A new repository"kind="M"/><add><repositorylocation="http://aSource/"kind="M"/></add></p2.composite.repository>

As with the mirror task it is possible to specify a mixture of repositories, in this particular example a co-located repository will be created with the appropriate children added:

<p2.composite.repositoryfailOnExists="true"><repositorylocation="file:/myDestination"name="A new repository"/><add><repositorylocation="http://aSource/"kind="M"/><repositorylocation="http://aSource2/"kind="A"/></add></p2.composite.repository>

Modify

The syntax to add a child to an existing repository is the same as creating a new one:

<p2.composite.repository><repositorylocation="file:/myDestination"name="A new repository"/><add><repositorylocation="http://aSource/"kind="M"/><repositorylocation="http://aSource2/"kind="A"/></add></p2.composite.repository>

Children can also be removed from a composite repository:

<p2.composite.repository><repositorylocation="file:/myDestination"name="A new repository"/><remove><repositorylocation="http://aSource/"kind="M"/><repositorylocation="http://aSource2/"kind="A"/></remove></p2.composite.repository>

Pre-existing children can be removed from the repository prior to adding new children by using the append attribute:

<p2.composite.repository><repositorylocation="file:/myDestination"name="A new repository"append="false"/><add><repositorylocation="http://aSource/"kind="M"/><repositorylocation="http://aSource2/"kind="A"/></add></p2.composite.repository>

Validate

To ensure that the composite repository has consistent contents an artifact comparator can be used

<p2.composite.repositoryvalidate="org.eclipse.equinox.artifact.md5.comparator"><repositorylocation="file:/myDestination"name="A new repository"append="false"/><add><repositorylocation="http://aSource/"kind="M"/><repositorylocation="http://aSource2/"kind="A"/></add></p2.composite.repository>

Repo2Runnable

Ant task which calls the "repo to runnable" application. This application takes an existing p2 repository (local or remote), iterates over its list of IUs, and fetches all of the corresponding artifacts to a user-specified location. Once fetched, the artifacts will be in "runnable" form... that is directory-based bundles will be extracted into folders and packed JAR files will be un-packed.