{
if (isValidRepository()) {
deleteYumTempDirs();
final File repoBaseDir = RepositoryUtils.getBaseDir(groupRepository);
RepositoryItemUid groupRepoMdUid = groupRepository.createUid("/" + PATH_OF_REPOMD_XML);
try {
groupRepoMdUid.getLock().lock(Action.update);
final List<File> memberReposBaseDirs = getBaseDirsOfMemberRepositories();
if (memberReposBaseDirs.size() > 1) {
log.debug("Merging repository group '{}' out of {}", groupRepository.getId(), memberReposBaseDirs);
commandLineExecutor.exec(buildCommand(repoBaseDir, memberReposBaseDirs));
MetadataProcessor.processMergedMetadata(groupRepository, memberReposBaseDirs);
log.debug("Group repository '{}' merged", groupRepository.getId());
}
else {
// delete without using group repository API as group repositories does not allow delete (read only)
File groupRepodata = new File(repoBaseDir, PATH_OF_REPODATA);
deleteQuietly(groupRepodata);
if (memberReposBaseDirs.size() == 1) {
log.debug(
"Copying Yum metadata from {} to group repository {}",
memberReposBaseDirs.get(0), groupRepository.getId()
);
copyDirectory(new File(memberReposBaseDirs.get(0), PATH_OF_REPODATA), groupRepodata);
}
}
}
finally {
groupRepoMdUid.getLock().unlock();
}
deleteYumTempDirs();
return new YumRepositoryImpl(repoBaseDir, groupRepository.getId(), null);