main: Also support CLI extensions in /usr/libexec/libostree/ext
In fixing https://github.com/coreos/rpm-ostree/pull/3323 I felt that it was a bit ugly we're installing `/usr/bin/ostree-container`. It's kind of an implementation detail. We want users to use `ostree container`. Let's support values outside of $PATH too. For example, this also ensures that TAB completion for `ost` expands to `ostree ` with a space.
This commit is contained in:
1 parent
7cc8481907
commit
998154f8ff
5 files changed
+45
-2
No files matched your search
@@ -3,6 +3,7 @@ exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
features=@OSTREE_FEATURES@
|
||||
cliextdir=@pkglibexecdir@/ext
|
||||
|
||||
Name: OSTree
|
||||
Description: Git for operating system binaries
|
||||
|
||||
+14
-2
@@ -41,6 +41,10 @@ static gboolean opt_verbose;
|
||||
static gboolean opt_version;
|
||||
static gboolean opt_print_current_dir;
|
||||
|
||||
// TODO: make this public? But no one sane wants to use our C headers
|
||||
// to find where to put files. Maybe we can make it printed by the CLI?
|
||||
#define _OSTREE_EXT_DIR PKGLIBEXECDIR "/ext"
|
||||
|
||||
static GOptionEntry global_entries[] = {
|
||||
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &opt_verbose, "Print debug information during command processing", NULL },
|
||||
{ "version", 0, 0, G_OPTION_ARG_NONE, &opt_version, "Print version information and exit", NULL },
|
||||
@@ -188,7 +192,7 @@ ostree_command_lookup_external (int argc,
|
||||
|
||||
// Find the first verb (ignoring all earlier flags), then
|
||||
// check if it is a known native command. Otherwise, try to look it
|
||||
// up in $PATH.
|
||||
// up in /usr/lib/ostree/ostree-$cmd or $PATH.
|
||||
// We ignore argv[0] here, the ostree binary itself is not multicall.
|
||||
for (guint arg_index = 1; arg_index < argc; arg_index++)
|
||||
{
|
||||
@@ -204,10 +208,18 @@ ostree_command_lookup_external (int argc,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
g_autofree gchar *ext_command = g_strdup_printf ("ostree-%s", current_arg);
|
||||
|
||||
/* First, search in our libdir /usr/lib/ostree/ostree-$cmd */
|
||||
g_autofree char *ext_lib = g_strconcat (_OSTREE_EXT_DIR, "/", ext_command, NULL);
|
||||
struct stat stbuf;
|
||||
if (stat (ext_lib, &stbuf) == 0)
|
||||
return g_steal_pointer (&ext_lib);
|
||||
|
||||
/* Otherwise, look in $PATH */
|
||||
if (g_find_program_in_path (ext_command) == NULL)
|
||||
return NULL;
|
||||
|
||||
return g_steal_pointer (&ext_command);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user