use of org.haiku.pkg.HpkrFileExtractor in project haikudepotserver by haiku.
the class AttributeDumpTool method runHpkr.
private void runHpkr() throws IOException {
try (HpkrFileExtractor hpkrFileExtractor = new HpkrFileExtractor(hpkFile);
OutputStreamWriter streamWriter = new OutputStreamWriter(System.out);
AttributeWriter attributeWriter = new AttributeWriter(streamWriter)) {
attributeWriter.write(hpkrFileExtractor.getPackageAttributesIterator());
attributeWriter.flush();
}
}
use of org.haiku.pkg.HpkrFileExtractor in project haikudepotserver by haiku.
the class RepositoryHpkrIngressJobRunner method runImportHpkrForRepositorySource.
private void runImportHpkrForRepositorySource(ObjectContext mainContext, RepositorySource repositorySource) {
URL url = repositorySource.tryGetInternalFacingDownloadHpkrURL().orElseThrow(() -> new RuntimeException("unable to import for [" + repositorySource + "] as there is no download url able to be derived."));
// now shift the URL's data into a temporary file and then process it.
File temporaryFile = null;
try {
temporaryFile = File.createTempFile(repositorySource.getCode() + "__import", ".hpkr");
LOGGER.info("will copy repository hpkr [{}] ({}) to temporary file", repositorySource, url.toString());
FileHelper.streamUrlDataToFile(url, temporaryFile, TIMEOUT_REPOSITORY_SOURCE_FETCH);
LOGGER.info("did copy {} bytes for repository hpkr [{}] ({}) to temporary file", temporaryFile.length(), repositorySource, url);
HpkrFileExtractor fileExtractor = new HpkrFileExtractor(temporaryFile);
long startTimeMs = System.currentTimeMillis();
LOGGER.info("will process data for repository hpkr {}", repositorySource.getCode());
// import any packages that are in the repository.
Set<String> repositoryImportPkgNames = Sets.newHashSet();
PkgIterator pkgIterator = new PkgIterator(fileExtractor.getPackageAttributesIterator());
while (pkgIterator.hasNext()) {
ObjectContext pkgImportContext = serverRuntime.newContext();
Pkg pkg = pkgIterator.next();
repositoryImportPkgNames.add(pkg.getName());
try {
pkgImportService.importFrom(pkgImportContext, repositorySource.getObjectId(), pkg, shouldPopulateFromPayload);
pkgImportContext.commitChanges();
} catch (Throwable th) {
throw new RepositoryHpkrIngressException("unable to store package [" + pkg + "]", th);
}
}
// [apl 6.aug.2014] #5
// Packages may be removed from a repository. In this case there is no trigger to indicate that the
// package version should be removed. Check all of the packages that have an active version in this
// repository and then if the package simply doesn't exist in that repository any more, mark all of
// those versions are inactive.
pkgService.fetchPkgNamesWithAnyPkgVersionAssociatedWithRepositorySource(mainContext, repositorySource).forEach((persistedPkgName) -> {
if (!repositoryImportPkgNames.contains(persistedPkgName)) {
ObjectContext removalContext = serverRuntime.newContext();
RepositorySource removalRepositorySource = RepositorySource.get(removalContext, repositorySource.getObjectId());
int changes = pkgService.deactivatePkgVersionsForPkgAssociatedWithRepositorySource(removalContext, org.haiku.haikudepotserver.dataobjects.Pkg.getByName(removalContext, persistedPkgName), removalRepositorySource);
if (changes > 0) {
removalContext.commitChanges();
LOGGER.info("did remove all versions of package {} from repository source {} because this package is no longer in the repository", persistedPkgName, repositorySource);
}
}
});
LOGGER.info("did process data for repository hpkr {} in {}ms", repositorySource, System.currentTimeMillis() - startTimeMs);
} catch (Throwable th) {
throw new RuntimeException("a problem has arisen processing a repository file for repository hpkr " + repositorySource + " from url '" + url.toString() + "'", th);
} finally {
if (null != temporaryFile && temporaryFile.exists()) {
if (!temporaryFile.delete()) {
LOGGER.error("unable to delete the file; {}" + temporaryFile.getAbsolutePath());
}
}
}
}
use of org.haiku.pkg.HpkrFileExtractor in project haikudepotserver by haiku.
the class PkgDumpTool method run.
public void run() {
new CmdLineParser(this);
try (HpkrFileExtractor hpkrFileExtractor = new HpkrFileExtractor(hpkrFile);
OutputStreamWriter streamWriter = new OutputStreamWriter(System.out);
PkgWriter pkgWriter = new PkgWriter(streamWriter)) {
pkgWriter.write(new PkgIterator(hpkrFileExtractor.getPackageAttributesIterator()));
pkgWriter.flush();
} catch (Throwable th) {
LOGGER.error("unable to dump packages", th);
}
}
Aggregations