Argument ordering in the call to distro.select() is mixed up, the
filter is mistaken for names, fix that.
Signed-off-by: Jan Lindemann <jan@janware.com>
Exceptions raised by the build command are handled and changed,
messing up the stack trace. Re-raise the original exception from the
exception handler to fix that.
Signed-off-by: Jan Lindemann <jan@janware.com>
Add Cmd.print_help(). By default, it prints a help message. If passed
an integer exit_status, it also calls sys.exit(exit_status).
Signed-off-by: Jan Lindemann <jan@janware.com>
Push cmds.Cmd._add_subcommands() as lib.Cmd.load_subcommands() one
step up to the top of the type hierarchy ladder.
By default, it does the same thing, i.e. load subcommands matching
frobnicate.Cmd* if called on class CmdFrobnicate.
This commit also replaces invocations of Cmd._add_subcommands() by
invocations of this new method.
Signed-off-by: Jan Lindemann <jan@janware.com>
Make "secrets install" digest archives with a more elaborate layout.
It selects secrets from archives containing:
default/path/to/secret.jw-secret
com/janware/grautvornix/path/to/secret.jw-secret
Signed-off-by: Jan Lindemann <jan@janware.com>
Add a module cmds.secrets.lib.tar. Secrets handling demands treating
tar archive members more individually, jw.pkg.lib.TarIo is not a good
fit for that, so try with a different module. To be merged
eventually.
Signed-off-by: Jan Lindemann <jan@janware.com>
Add get(), which does pretty much what FileContext.get() does, but
with auto-instantiating a FileContext instance. Input processing
filters can be passed, too, all *args and **kwargs are passed
unchanged to the FileContext's constructor.
Signed-off-by: Jan Lindemann <jan@janware.com>
Add a run() function. It constructs a pipeline from various possible
types, and runs its data parameter through it.
Signed-off-by: Jan Lindemann <jan@janware.com>
lib.Distro._install()'s default implementation allows to install
packages specified as direct links, but only to the local machine.
Implement installation to arbitrary hosts specified with --target.
Signed-off-by: Jan Lindemann <jan@janware.com>
Modify copy():
- Allow the source argument src_uri to be a list of URIs, in which
case copy should return a list of paths instead of one path
- Change the dst_uri parameter to dst, signalling that it now also
tolerates a FileContext
- Use the CopyContext class to manage the source and target
FileContext instances
Signed-off-by: Jan Lindemann <jan@janware.com>
Add a URI abstraction module. The class is designed to replace less
unified attempts at URI parsing throughout the jw-pkg code base.
Signed-off-by: Jan Lindemann <jan@janware.com>
Make FileContext.is_dir() usable:
- Add follow_symlinks parameter meant to do the obvious
- Fix missing await
Signed-off-by: Jan Lindemann <jan@janware.com>
The output of /usr/bin/stat is decoded once the Result object is
decoded as a whole, and then again individually, which fails of
course. Fix that.
Signed-off-by: Jan Lindemann <jan@janware.com>
Enclose ExecContext._run() in an open() / close() - pair. This is
convenient for the caller in that it doesn't need to take care of
opening and closing for one call only, and inconvenient in that it
forces the caller to conciously add an open() / close() - pair around
multiple run() calls where it wants the context to stay open in
between. Or use the ExecContext as a context manager.
Signed-off-by: Jan Lindemann <jan@janware.com>
There are a couple of assert statements in the codebase which can
make jw-pkg fail without any detail whatsoever if --backtrace is not
specified, fix that.
Signed-off-by: Jan Lindemann <jan@janware.com>
Add DistroContext.install(). It takes a tar file containing secrets,
decrypts it, and installs all secrets needed on target and present in
that file. For every file that should be extracted, it logs if it
acutally did something or didn't.
It also features an only_missing argument, which is just a stub for
"allow to define somy extraction policy with respect to replacing all
/ some / not replace / whatever. Not thought through.
Signed-off-by: Jan Lindemann <jan@janware.com>
Allow to pass ready-made FileContext objects to CopyContext's
destructor so it doesn't need to instantiate them itself.
Signed-off-by: Jan Lindemann <jan@janware.com>
FileContext's _open() and _close() are called everytime their wrapper
is called, which tasks the caller with keeping track of whether they
were already called or not. Be a little easier on the caller, keep
track in an open count, and call _open() only once for multiple calls
to open(), and close() likewise. The caller still needs to make sure
the number of open() and close() calls matches.
Signed-off-by: Jan Lindemann <jan@janware.com>
Rename command "distro" to "pkg" together with "info", its last
remaining subcommand. "distro" is often used in the sense of "Linux
distribution", which would be too narrow for the targets jw-pkg could
theoretically support.
Signed-off-by: Jan Lindemann <jan@janware.com>
With the exception of the "info" subcommand, nearly all of distro's
subcommands deal with package managing, so push them into their own
command category.
Signed-off-by: Jan Lindemann <jan@janware.com>
--uri is unnecessarily generic in that it could mean the URI of
anything. --target makes it clearer that operations are to be
exectuted on that target.
Signed-off-by: Jan Lindemann <jan@janware.com>
Add keyword-argument description to Cmd.__init__(), and default it to
help. Also, add a property .description returning it, and add it to
add_parser() so that it shows up in the usage message.
Signed-off-by: Jan Lindemann <jan@janware.com>