Search in sources :

Example 1 with HpkrFileExtractor

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();
    }
}
Also used : AttributeWriter(org.haiku.pkg.output.AttributeWriter) HpkrFileExtractor(org.haiku.pkg.HpkrFileExtractor)

Example 2 with HpkrFileExtractor

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());
            }
        }
    }
}
Also used : Pkg(org.haiku.pkg.model.Pkg) URL(java.net.URL) HpkrFileExtractor(org.haiku.pkg.HpkrFileExtractor) RepositoryHpkrIngressException(org.haiku.haikudepotserver.repository.model.RepositoryHpkrIngressException) PkgIterator(org.haiku.pkg.PkgIterator) RepositorySource(org.haiku.haikudepotserver.dataobjects.RepositorySource) ObjectContext(org.apache.cayenne.ObjectContext) File(java.io.File)

Example 3 with HpkrFileExtractor

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);
    }
}
Also used : PkgWriter(org.haiku.pkg.output.PkgWriter) PkgIterator(org.haiku.pkg.PkgIterator) CmdLineParser(org.kohsuke.args4j.CmdLineParser) OutputStreamWriter(java.io.OutputStreamWriter) HpkrFileExtractor(org.haiku.pkg.HpkrFileExtractor)

Aggregations

HpkrFileExtractor (org.haiku.pkg.HpkrFileExtractor)3 PkgIterator (org.haiku.pkg.PkgIterator)2 File (java.io.File)1 OutputStreamWriter (java.io.OutputStreamWriter)1 URL (java.net.URL)1 ObjectContext (org.apache.cayenne.ObjectContext)1 RepositorySource (org.haiku.haikudepotserver.dataobjects.RepositorySource)1 RepositoryHpkrIngressException (org.haiku.haikudepotserver.repository.model.RepositoryHpkrIngressException)1 Pkg (org.haiku.pkg.model.Pkg)1 AttributeWriter (org.haiku.pkg.output.AttributeWriter)1 PkgWriter (org.haiku.pkg.output.PkgWriter)1 CmdLineParser (org.kohsuke.args4j.CmdLineParser)1