}
try {
final Repository repository = repositories.getRepository(repositoryId);
final File scanPath = localStorageOfRepositoryAsFile(repository);
final RepositoryItemUid p2RepoUid = repository.createUid(P2_REPOSITORY_ROOT_PATH);
final File destinationP2Repository = createTemporaryP2Repository();
try {
p2RepoUid.getLock().lock(Action.update);
// copy repository artifacts to a temporary location
final File artifacts = getP2Artifacts(configuration, repository);
final File tempArtifacts = new File(destinationP2Repository, artifacts.getName());
FileUtils.copyFile(artifacts, tempArtifacts);
// copy repository content to a temporary location
final File content = getP2Content(configuration, repository);
final File tempContent = new File(destinationP2Repository, content.getName());
FileUtils.copyFile(content, tempContent);
new SerialScanner().scan(scanPath, new ListenerSupport()
{
@Override
public void onFile(final File file) {
try {
if (!isHidden(getRelativePath(scanPath, file))) {
if (isP2ArtifactsXML(file.getPath())) {
updateP2Artifacts(repository, file, destinationP2Repository);
}
else if (isP2ContentXML(file.getPath())) {
updateP2Metadata(repository, file, destinationP2Repository);
}
}
}
catch (final Exception e) {
throw new RuntimeException(e);
}
}
});
// copy artifacts back to exposed location
FileUtils.copyFile(tempArtifacts, artifacts);
// copy content back to exposed location
FileUtils.copyFile(tempContent, content);
}
finally {
p2RepoUid.getLock().unlock();
FileUtils.deleteDirectory(destinationP2Repository);
}
}
catch (final Exception e) {