Search in sources :

Example 21 with Description

use of aQute.lib.getopt.Description in project bnd by bndtools.

the class Main method _jpm.

/**
	 * Initialize the repository and other global vars.
	 * 
	 * @param opts the options
	 * @throws IOException
	 */
@Description("Just Another Package Manager for Java (\"jpm help jpm\" to see a list of global options)")
public void _jpm(JpmOptions opts) throws IOException {
    try {
        setExceptions(opts.exceptions());
        setTrace(opts.trace());
        setPedantic(opts.pedantic());
        Platform platform = Platform.getPlatform(this, opts.os());
        if (opts.base() != null)
            base = IO.getFile(base, opts.base());
        if (opts.settings() != null) {
            settings = new Settings(opts.settings());
            logger.debug("Using settings file: {}", opts.settings());
        } else {
            settings = new Settings(platform.getConfigFile());
            logger.debug("Using settings file: {}", platform.getConfigFile());
        }
        File homeDir;
        File binDir;
        String home = settings.get(JPM_CONFIG_HOME);
        String bin = settings.get(JPM_CONFIG_BIN);
        if (opts.home() != null) {
            logger.debug("home set");
            homeDir = IO.getFile(base, opts.home());
            binDir = new File(homeDir, "bin");
        } else if (opts.user()) {
            logger.debug("user set");
            homeDir = platform.getLocal();
            binDir = new File(homeDir, "bin");
        } else if (!opts.global() && home != null) {
            logger.debug("global or in settings");
            homeDir = new File(home);
            binDir = new File(bin);
        } else {
            logger.debug("default");
            homeDir = platform.getGlobal();
            binDir = platform.getGlobalBinDir();
        }
        logger.debug("home={}, bin={}", homeDir, binDir);
        if (opts.bindir() != null) {
            logger.debug("bindir set");
            binDir = new File(opts.bindir());
            if (!binDir.isAbsolute())
                binDir = new File(base, opts.bindir());
            binDir = binDir.getAbsoluteFile();
        } else if (bin != null && !opts.user() && !opts.global()) {
            binDir = new File(bin);
        }
        logger.debug("home={}, bin={}", homeDir, binDir);
        url = opts.library();
        if (url == null)
            url = settings.get("library.url");
        jpm = new JustAnotherPackageManager(this, platform, homeDir, binDir);
        platform.setJpm(jpm);
        jpm.setLibrary(url == null ? null : new URI(url));
        try {
            this.options = opts;
            if (opts.xtesting())
                jpm.setUnderTest();
            CommandLine handler = opts._command();
            List<String> arguments = opts._arguments();
            if (arguments.isEmpty()) {
                Justif j = new Justif();
                Formatter f = j.formatter();
                handler.help(f, this);
                err.println(j.wrap());
            } else {
                String cmd = arguments.remove(0);
                String help = handler.execute(this, cmd, arguments);
                if (help != null) {
                    err.println(help);
                }
            }
            if (options.width() > 0)
                this.width = options.width();
        } finally {
            jpm.close();
        }
    } catch (InvocationTargetException t) {
        Throwable tt = t;
        while (tt instanceof InvocationTargetException) tt = ((InvocationTargetException) tt).getTargetException();
        exception(tt, "%s", tt);
    } catch (Throwable t) {
        exception(t, "Failed %s", t);
    } finally {
        // Check if we need to wait for it to finish
        if (opts.key()) {
            System.out.println("Hit a key to continue ...");
            System.in.read();
        }
    }
    if (!check(opts.failok())) {
        System.exit(getErrors().size());
    }
}
Also used : JustAnotherPackageManager(aQute.jpm.lib.JustAnotherPackageManager) CommandLine(aQute.lib.getopt.CommandLine) Platform(aQute.jpm.platform.Platform) Justif(aQute.lib.justif.Justif) Formatter(java.util.Formatter) RandomAccessFile(java.io.RandomAccessFile) File(java.io.File) URI(java.net.URI) Settings(aQute.lib.settings.Settings) InvocationTargetException(java.lang.reflect.InvocationTargetException) Description(aQute.lib.getopt.Description)

Example 22 with Description

use of aQute.lib.getopt.Description in project bnd by bndtools.

the class Main method _version.

/**
	 * Show the current version
	 * 
	 * @throws IOException
	 */
@Description("Show the current version of jpm")
public void _version(VersionOptions options) throws IOException {
    Enumeration<URL> urls = getClass().getClassLoader().getResources("META-INF/MANIFEST.MF");
    while (urls.hasMoreElements()) {
        URL url = urls.nextElement();
        logger.debug("found manifest {}", url);
        Manifest m = new Manifest(url.openStream());
        String name = m.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME);
        if (name != null && name.trim().equals("biz.aQute.jpm.run")) {
            out.println(m.getMainAttributes().getValue(Constants.BUNDLE_VERSION));
            return;
        }
    }
    error("No version found in jar");
}
Also used : Manifest(java.util.jar.Manifest) URL(java.net.URL) Description(aQute.lib.getopt.Description)

Example 23 with Description

use of aQute.lib.getopt.Description in project bnd by bndtools.

the class Main method _update.

@Description("Perform updates for installed commands and services")
public void _update(UpdateOptions opts) throws Exception {
    if (!jpm.hasAccess()) {
        error("No write acces, might require administrator or root privileges (sudo in *nix)");
        return;
    }
    ArrayList<String> refs = new ArrayList<String>();
    for (CommandData data : jpm.getCommands()) {
        refs.add(data.name);
    }
    for (ServiceData data : jpm.getServices()) {
        refs.add(data.name);
    }
    ArrayList<UpdateMemo> notFound = new ArrayList<JustAnotherPackageManager.UpdateMemo>();
    ArrayList<UpdateMemo> upToDate = new ArrayList<JustAnotherPackageManager.UpdateMemo>();
    ArrayList<UpdateMemo> toUpdate = new ArrayList<JustAnotherPackageManager.UpdateMemo>();
    ArrayList<CommandData> datas = new ArrayList<CommandData>();
    if (opts._arguments().size() == 0) {
        datas.addAll(jpm.getCommands());
        datas.addAll(jpm.getServices());
    } else {
        for (String pattern : opts._arguments()) {
            Glob glob = new Glob(pattern);
            for (String name : refs) {
                if (glob.matcher(name).matches()) {
                    CommandData data = jpm.getCommand(name);
                    if (data == null) {
                        Service service = jpm.getService(name);
                        if (service != null) {
                            data = service.getServiceData();
                        }
                    }
                    if (data != null) {
                        datas.add(data);
                    }
                }
            }
        }
    }
    for (CommandData data : datas) {
        jpm.listUpdates(notFound, upToDate, toUpdate, data, opts.staged());
    }
    if (opts.all() || opts._arguments().size() > 0) {
        for (UpdateMemo memo : toUpdate) {
            jpm.update(memo);
        }
        out.format("%d command(s) updated%n", toUpdate.size());
    } else {
        Justif justif = new Justif(100, 20, 50);
        StringBuilder sb = new StringBuilder();
        Formatter f = new Formatter(sb);
        if (upToDate.size() > 0) {
            f.format("Up to date:%n");
            for (UpdateMemo memo : upToDate) {
                if (memo.current instanceof ServiceData) {
                    f.format(" - %s (service) \t0- %s%n", memo.current.name, memo.current.version);
                } else {
                    f.format(" - %s \t0- %s%n", memo.current.name, memo.current.version);
                }
            }
            f.format("%n");
        }
        if (toUpdate.size() > 0) {
            f.format("Update available:%n");
            for (UpdateMemo memo : toUpdate) {
                if (memo.current instanceof ServiceData) {
                    f.format(" - %s (service) \t0- %s \t1-> %s%n", memo.current.name, memo.current.version, memo.best.version);
                } else {
                    f.format(" - %s \t0- %s \t1-> %s%n", memo.current.name, memo.current.version, memo.best.version);
                }
            }
            f.format("%n");
        }
        if (notFound.size() > 0) {
            if (opts.staged()) {
                f.format("Information not found (local install ?):%n");
            } else {
                f.format("Information not found (try including staging versions with the --staged (-s) flag)%n");
            }
            for (UpdateMemo memo : notFound) {
                if (memo.current instanceof ServiceData) {
                    f.format(" - %s (service)%n", memo.current.name);
                } else {
                    f.format(" - %s%n", memo.current.name);
                }
            }
        }
        if (toUpdate.size() > 0) {
            f.format("%nIn order to apply all possible updates, run jpm update again with the --all (or -a) flag.%n");
        }
        f.flush();
        justif.wrap(sb);
        out.println(sb.toString());
        f.close();
    }
}
Also used : JustAnotherPackageManager(aQute.jpm.lib.JustAnotherPackageManager) Justif(aQute.lib.justif.Justif) Formatter(java.util.Formatter) ArrayList(java.util.ArrayList) UpdateMemo(aQute.jpm.lib.JustAnotherPackageManager.UpdateMemo) Service(aQute.jpm.lib.Service) ServiceData(aQute.jpm.lib.ServiceData) Glob(aQute.libg.glob.Glob) CommandData(aQute.jpm.lib.CommandData) Description(aQute.lib.getopt.Description)

Example 24 with Description

use of aQute.lib.getopt.Description in project bnd by bndtools.

the class Main method _service.

@Description("Manage the jpm4j services")
public void _service(ServiceOptions opts) throws Exception {
    if (opts._arguments().isEmpty()) {
        for (ServiceData sd : jpm.getServices()) print(sd);
        return;
    }
    List<String> cmdline = opts._arguments();
    String name = cmdline.remove(0);
    Service s = jpm.getService(name);
    if (opts.remove()) {
        if (!jpm.hasAccess()) {
            error("No write access to remove service %s", name);
            return;
        }
        if (s == null) {
            error("No such service %s to remove", name);
            return;
        }
        s.stop();
        s.remove();
        return;
    }
    if (opts.create() != null) {
        logger.debug("create service");
        if (s != null) {
            error("Service already exists, cannot be created: %s. Update or remove it first", name);
            return;
        }
        ArtifactData target = jpm.getCandidate(opts.create());
        if (target == null) {
            error("Cannot find candidate for coordinates", opts.create());
            return;
        }
        ServiceData data = new ServiceData();
        CommandData cmd = jpm.parseCommandData(target);
        for (Field f : cmd.getClass().getFields()) {
            f.set(data, f.get(cmd));
        }
        logger.debug("service data {}", cmd);
        data.name = name;
        updateServiceData(data, opts);
        logger.debug("update service data");
        String result = jpm.createService(data, false);
        if (result != null)
            error("Create service failed: %s", result);
        return;
    }
    if (s == null) {
        error("No such service: %s", name);
        return;
    }
    ServiceData data = s.getServiceData();
    if (updateServiceData(data, opts) || opts.coordinates() != null || opts.update()) {
        if (!jpm.hasAccess()) {
            error("No write access to update service %s", name);
            return;
        }
        if (opts.coordinates() != null || opts.update()) {
            String coordinates = opts.coordinates();
            if (coordinates == null) {
                error("No coordinate found in old service record");
                return;
            }
            int n = coordinates.indexOf('@');
            if (n > 0)
                coordinates = coordinates.substring(0, n);
            logger.debug("Updating from coordinate: {}", coordinates);
            ArtifactData target = jpm.getCandidate(coordinates);
            if (target == null) {
                error("No candidates found for %s (%s)", coordinates, opts.staged() ? "staged" : "only masters");
                return;
            }
            CommandData cmd = jpm.parseCommandData(target);
            for (Field f : cmd.getClass().getFields()) {
                f.set(data, f.get(cmd));
            }
            data.name = name;
        }
        String result = jpm.createService(data, true);
        if (result != null)
            error("Update service failed: %s", result);
        else if (s.isRunning())
            warning("Changes will not affect the currently running process");
    }
    Data.details(data, out);
}
Also used : Field(java.lang.reflect.Field) Service(aQute.jpm.lib.Service) CommandData(aQute.jpm.lib.CommandData) ServiceData(aQute.jpm.lib.ServiceData) ArtifactData(aQute.jpm.lib.ArtifactData) Description(aQute.lib.getopt.Description)

Example 25 with Description

use of aQute.lib.getopt.Description in project bnd by bndtools.

the class Main method _log.

@Description("Show the service log")
public void _log(logOptions opts) throws Exception {
    String s = opts._arguments().isEmpty() ? null : opts._arguments().get(0);
    if (s == null) {
        error("No such service %s", s);
        return;
    }
    Service service = jpm.getService(s);
    if (service == null) {
        error("No such service %s", s);
        return;
    }
    ServiceData data = service.getServiceData();
    File logFile = new File(data.log);
    if (!logFile.isFile()) {
        error("Log file %s for service %s is not a file", logFile, s);
        return;
    }
    if (opts.clear()) {
        IO.delete(logFile);
        logFile.createNewFile();
    }
    try (RandomAccessFile raf = new RandomAccessFile(logFile, "r")) {
        long start = Math.max(logFile.length() - 2000, 0);
        while (true) {
            long l = raf.length();
            byte[] buffer = new byte[(int) (l - start)];
            raf.seek(start);
            raf.read(buffer);
            out.write(buffer);
            start = l;
            if (!service.isRunning() || !opts.tail())
                return;
            if (l == raf.length())
                Thread.sleep(100);
        }
    }
}
Also used : RandomAccessFile(java.io.RandomAccessFile) Service(aQute.jpm.lib.Service) RandomAccessFile(java.io.RandomAccessFile) File(java.io.File) ServiceData(aQute.jpm.lib.ServiceData) Description(aQute.lib.getopt.Description)

Aggregations

Description (aQute.lib.getopt.Description)63 File (java.io.File)31 Jar (aQute.bnd.osgi.Jar)14 Project (aQute.bnd.build.Project)12 InvocationTargetException (java.lang.reflect.InvocationTargetException)12 Instructions (aQute.bnd.osgi.Instructions)10 CommandLine (aQute.lib.getopt.CommandLine)10 Justif (aQute.lib.justif.Justif)8 IOException (java.io.IOException)8 ArrayList (java.util.ArrayList)8 Workspace (aQute.bnd.build.Workspace)7 PomFromManifest (aQute.bnd.maven.PomFromManifest)7 Service (aQute.jpm.lib.Service)7 Manifest (java.util.jar.Manifest)7 FileResource (aQute.bnd.osgi.FileResource)6 Resource (aQute.bnd.osgi.Resource)6 Analyzer (aQute.bnd.osgi.Analyzer)5 RepositoryPlugin (aQute.bnd.service.RepositoryPlugin)5 CommandData (aQute.jpm.lib.CommandData)5 ServiceData (aQute.jpm.lib.ServiceData)5