Search in sources :

Example 31 with Version

use of aQute.bnd.version.Version in project bndtools by bndtools.

the class RepoDownloadJob method expandContentsInto.

private void expandContentsInto(RepositoryBundle bundle, List<RepositoryBundleVersion> rbvs) throws Exception {
    RepositoryPlugin repo = bundle.getRepo();
    SortedSet<Version> versions = repo.versions(bundle.getBsn());
    if (versions != null) {
        for (Version version : versions) {
            RepositoryBundleVersion rbv = new RepositoryBundleVersion(bundle, version);
            rbvs.add(rbv);
        }
    }
}
Also used : RepositoryBundleVersion(bndtools.model.repo.RepositoryBundleVersion) Version(aQute.bnd.version.Version) RepositoryBundleVersion(bndtools.model.repo.RepositoryBundleVersion) RemoteRepositoryPlugin(aQute.bnd.service.RemoteRepositoryPlugin) RepositoryPlugin(aQute.bnd.service.RepositoryPlugin)

Example 32 with Version

use of aQute.bnd.version.Version in project bnd by bndtools.

the class RemoteCommand method _distro.

public void _distro(DistroOptions opts) throws Exception {
    List<String> args = opts._arguments();
    String bsn;
    String version;
    bsn = args.remove(0);
    if (!Verifier.isBsn(bsn)) {
        error("Not a bundle symbolic name %s", bsn);
    }
    if (args.isEmpty())
        version = "0";
    else {
        version = args.remove(0);
        if (!Version.isVersion(version)) {
            error("Invalid version %s", version);
        }
    }
    File output = getFile(opts.output("distro.jar"));
    if (output.getParentFile() == null || !output.getParentFile().isDirectory()) {
        error("Cannot write to %s because parent not a directory", output);
    }
    if (output.isFile() && !output.canWrite()) {
        error("Cannot write to %s", output);
    }
    logger.debug("Starting distro {};{}", bsn, version);
    List<BundleRevisionDTO> bundleRevisons = agent.getBundleRevisons();
    logger.debug("Found {} bundle revisions", bundleRevisons.size());
    Parameters packages = new Parameters();
    List<Parameters> provided = new ArrayList<>();
    for (BundleRevisionDTO brd : bundleRevisons) {
        for (CapabilityDTO c : brd.capabilities) {
            CapabilityBuilder cb = new CapabilityBuilder(c.namespace);
            for (Entry<String, Object> e : c.attributes.entrySet()) {
                String key = e.getKey();
                Object value = e.getValue();
                if (key.equals("version")) {
                    if (value instanceof Collection || value.getClass().isArray())
                        value = Converter.cnv(tref, value);
                    else
                        value = new Version((String) value);
                }
                cb.addAttribute(key, value);
            }
            cb.addDirectives(c.directives);
            Attrs attrs = cb.toAttrs();
            if (cb.isPackage()) {
                attrs.remove(Constants.BUNDLE_SYMBOLIC_NAME_ATTRIBUTE);
                attrs.remove(Constants.BUNDLE_VERSION_ATTRIBUTE);
                String pname = attrs.remove(PackageNamespace.PACKAGE_NAMESPACE);
                if (pname == null) {
                    warning("Invalid package capability found %s", c);
                } else
                    packages.put(pname, attrs);
                logger.debug("P: {};{}", pname, attrs);
            } else if (NativeNamespace.NATIVE_NAMESPACE.equals(c.namespace)) {
                Attrs newAttrs = new Attrs();
                for (Entry<String, String> entry : attrs.entrySet()) {
                    if (entry.getKey().startsWith(NativeNamespace.NATIVE_NAMESPACE)) {
                        newAttrs.put(entry.getKey(), entry.getValue());
                    }
                }
                Parameters p = new Parameters();
                p.put(c.namespace, newAttrs);
                provided.add(p);
            } else if (!IGNORED_NAMESPACES.contains(c.namespace)) {
                logger.debug("C {};{}", c.namespace, attrs);
                Parameters p = new Parameters();
                p.put(c.namespace, attrs);
                provided.add(p);
            }
        }
    }
    if (isOk()) {
        Manifest m = new Manifest();
        Attributes main = m.getMainAttributes();
        main.putValue(Constants.BUNDLE_MANIFESTVERSION, "2");
        main.putValue(Constants.BUNDLE_SYMBOLICNAME, bsn);
        main.putValue(Constants.BUNDLE_VERSION, version);
        main.putValue(Constants.EXPORT_PACKAGE, packages.toString());
        // Make distro unresolvable
        Parameters unresolveable = new Parameters("osgi.unresolvable; filter:='(&(must.not.resolve=*)(!(must.not.resolve=*)))'");
        main.putValue(Constants.REQUIRE_CAPABILITY, unresolveable.toString());
        provided.add(new Parameters("osgi.unresolvable"));
        StringBuilder sb = new StringBuilder();
        for (Parameters parameter : provided) {
            sb.append(parameter.toString());
            sb.append(",");
        }
        String capabilities = sb.toString().substring(0, sb.length() - 1);
        main.putValue(Constants.PROVIDE_CAPABILITY, capabilities);
        if (opts.description() != null)
            main.putValue(Constants.BUNDLE_DESCRIPTION, opts.description());
        if (opts.license() != null)
            main.putValue(Constants.BUNDLE_LICENSE, opts.license());
        if (opts.copyright() != null)
            main.putValue(Constants.BUNDLE_COPYRIGHT, opts.copyright());
        if (opts.vendor() != null)
            main.putValue(Constants.BUNDLE_VENDOR, opts.vendor());
        Jar jar = new Jar("distro");
        jar.setManifest(m);
        Verifier v = new Verifier(jar);
        v.setProperty(Constants.FIXUPMESSAGES, "osgi.* namespace must not be specified with generic capabilities");
        v.verify();
        v.getErrors();
        if (isFailOk() || v.isOk()) {
            jar.updateModified(System.currentTimeMillis(), "Writing distro jar");
            jar.write(output);
        } else
            getInfo(v);
    }
}
Also used : Parameters(aQute.bnd.header.Parameters) BundleRevisionDTO(org.osgi.framework.wiring.dto.BundleRevisionDTO) ArrayList(java.util.ArrayList) Attrs(aQute.bnd.header.Attrs) Attributes(java.util.jar.Attributes) CapabilityBuilder(aQute.bnd.osgi.resource.CapabilityBuilder) Manifest(java.util.jar.Manifest) Verifier(aQute.bnd.osgi.Verifier) Entry(java.util.Map.Entry) CapabilityDTO(org.osgi.resource.dto.CapabilityDTO) Version(aQute.bnd.version.Version) Collection(java.util.Collection) Jar(aQute.bnd.osgi.Jar) File(java.io.File)

Example 33 with Version

use of aQute.bnd.version.Version in project bnd by bndtools.

the class RepoCommand method _copy.

public void _copy(CopyOptions options) throws Exception {
    List<String> args = options._arguments();
    String srcName = args.remove(0);
    String dstName = args.remove(0);
    RepositoryPlugin source = workspace.getRepository(srcName);
    RepositoryPlugin dest = workspace.getRepository(dstName);
    if (source == null) {
        bnd.error("No such source repository: %s, available repos %s", srcName, workspace.getRepositories());
    }
    if (dest == null) {
        bnd.error("No such destination repository: %s, available repos %s", dstName, workspace.getRepositories());
    } else if (!dest.canWrite())
        bnd.error("Destination repository cannot write: %s", dest);
    if (!bnd.isOk() || source == null || dest == null) {
        return;
    }
    logger.debug("src = {} -> {}", srcName, source);
    logger.debug("dst = {} -> {}", dstName, dest);
    @SuppressWarnings("unused")
    class Spec {

        DownloadBlocker src;

        DownloadBlocker dst;

        String bsn;

        Version version;

        public byte[] digest;
    }
    List<Spec> sources = new ArrayList<Spec>();
    for (String bsn : source.list(null)) {
        for (Version version : source.versions(bsn)) {
            logger.debug("src: {} {}", bsn, version);
            Spec spec = new Spec();
            spec.bsn = bsn;
            spec.version = version;
            spec.src = new DownloadBlocker(bnd);
            File src = source.get(bsn, version, null, spec.src);
            if (src == null) {
                bnd.error("No such entry: %s-%s", bsn, version);
            } else {
                spec.dst = findMatchingVersion(dest, bsn, version);
                sources.add(spec);
            }
        }
    }
    for (Spec spec : sources) {
        String reason = spec.src.getReason();
        if (reason != null) {
            bnd.error("Failed to find %s because: %s", spec.src.getFile(), reason);
        }
        File src = spec.src.getFile();
        if (!src.isFile()) {
            bnd.error("Not a valid file %s", spec.src.getFile());
        }
        spec.digest = SHA1.digest(src).digest();
    }
    //
    // See if we can prune the list by diffing
    //
    ResourceRepository resources = null;
    if (dest instanceof ResourceRepository)
        resources = (ResourceRepository) dest;
    nextFile: for (Iterator<Spec> i = sources.iterator(); i.hasNext(); ) {
        Spec spec = i.next();
        if (resources != null) {
            ResourceDescriptor rd = resources.getResourceDescriptor(spec.digest);
            if (rd != null)
                // Already exists
                continue nextFile;
        }
    // TODO Diff
    }
    if (!bnd.isOk())
        return;
    for (Spec spec : sources) {
        File src = spec.src.getFile();
        if (!options.dry()) {
            try (InputStream fin = IO.stream(src)) {
                PutResult put = dest.put(fin, null);
                if (put.digest != null) {
                    if (!Arrays.equals(spec.digest, put.digest)) {
                        bnd.error("Digest error in upload %s", src);
                    }
                }
            } catch (Exception e) {
                bnd.exception(e, "Exception %s in upload %s", e, src);
            }
        }
    }
    for (String bsn : source.list(null)) {
        for (Version version : source.versions(bsn)) {
            System.out.println(bsn + ";version=" + version);
        }
    }
}
Also used : BufferedInputStream(java.io.BufferedInputStream) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) RepositoryPlugin(aQute.bnd.service.RepositoryPlugin) DownloadBlocker(aQute.bnd.build.DownloadBlocker) UnsupportedEncodingException(java.io.UnsupportedEncodingException) IOException(java.io.IOException) Version(aQute.bnd.version.Version) Iterator(java.util.Iterator) ResourceRepository(aQute.bnd.service.repository.ResourceRepository) File(java.io.File) PutResult(aQute.bnd.service.RepositoryPlugin.PutResult) ResourceDescriptor(aQute.bnd.service.repository.SearchableRepository.ResourceDescriptor)

Example 34 with Version

use of aQute.bnd.version.Version in project bnd by bndtools.

the class RepoCommand method findMatchingVersion.

private DownloadBlocker findMatchingVersion(RepositoryPlugin dest, String bsn, Version version) throws Exception {
    Version floor = version.getWithoutQualifier();
    Version ceiling = new Version(floor.getMajor() + 1, 0, 0);
    VersionRange range = new VersionRange(true, floor, ceiling, false);
    SortedSet<Version> versions = dest.versions(bsn);
    if (versions == null || versions.isEmpty())
        return null;
    for (Version v : range.filter(versions)) {
    // First one is highest
    // TODO Diff
    }
    return null;
}
Also used : Version(aQute.bnd.version.Version) VersionRange(aQute.bnd.version.VersionRange)

Example 35 with Version

use of aQute.bnd.version.Version in project bnd by bndtools.

the class MavenVersionTest method testNull.

public void testNull() {
    MavenVersion mv = MavenVersion.parseString(null);
    assertEquals(new Version(0, 0, 0), mv.getOSGiVersion());
    assertFalse(mv.isSnapshot());
}
Also used : MavenVersion(aQute.bnd.version.MavenVersion) Version(aQute.bnd.version.Version) MavenVersion(aQute.bnd.version.MavenVersion)

Aggregations

Version (aQute.bnd.version.Version)168 File (java.io.File)64 RepositoryPlugin (aQute.bnd.service.RepositoryPlugin)27 Attrs (aQute.bnd.header.Attrs)19 MavenVersion (aQute.bnd.version.MavenVersion)19 ArrayList (java.util.ArrayList)19 HashMap (java.util.HashMap)18 IOException (java.io.IOException)17 Jar (aQute.bnd.osgi.Jar)16 Workspace (aQute.bnd.build.Workspace)13 Project (aQute.bnd.build.Project)12 RevisionRef (aQute.service.library.Library.RevisionRef)12 Matcher (java.util.regex.Matcher)12 Parameters (aQute.bnd.header.Parameters)11 VersionRange (aQute.bnd.version.VersionRange)11 SortedList (aQute.lib.collections.SortedList)9 Processor (aQute.bnd.osgi.Processor)8 ResourceDescriptor (aQute.bnd.service.repository.SearchableRepository.ResourceDescriptor)8 FileNotFoundException (java.io.FileNotFoundException)8 LinkedHashMap (java.util.LinkedHashMap)8