[PATCH 5/5] binman: Make the tooldir configurable
Simon Glass
sjg at chromium.org
Wed Feb 22 22:20:09 CET 2023
Hi Quentin,
On Mon, 20 Feb 2023 at 04:28, Quentin Schulz
<quentin.schulz at theobroma-systems.com> wrote:
>
> Hi Simon,
>
> On 2/18/23 00:19, Simon Glass wrote:
> > Add a command-line argument for setting the tooldir, so that the default
> > can be overridden. Add this directory to the toolpath automatically.
> > Create the directory if it does not already exist.
> >
> > Put the default in the argument parser instead of the class, so that it
> > is more obvious.
> >
> > Update a few tests that expect the utility name to be provided without
> > any path (e.g. 'futility'), so they can accept a path, e.g.
> > /path/to/futility
> >
> > Update the documentation and add a few tests.
> >
> > Improve the help for --toolpath while we are here.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > tools/binman/binman.rst | 19 +++++++++++++++----
> > tools/binman/bintool.py | 8 +++++++-
> > tools/binman/bintool_test.py | 11 ++++++++---
> > tools/binman/cmdline.py | 6 +++++-
> > tools/binman/control.py | 10 ++++++++--
> > tools/binman/ftest.py | 21 +++++++++++++++++++--
> > 6 files changed, 62 insertions(+), 13 deletions(-)
> >
> > diff --git a/tools/binman/binman.rst b/tools/binman/binman.rst
> > index 29034da92f1..3b0a9c38d72 100644
> > --- a/tools/binman/binman.rst
> > +++ b/tools/binman/binman.rst
> > @@ -1407,7 +1407,15 @@ You can also use `--fetch all` to fetch all tools or `--fetch <tool>` to fetch
> > a particular tool. Some tools are built from source code, in which case you will
> > need to have at least the `build-essential` and `git` packages installed.
> >
> > -Tools are fetched into the `~/.binman-tools` directory.
> > +Tools are fetched into the `~/.binman-tools` directory. This directory is
> > +automatically added to the toolpath so there is no need to use `--toolpath` to
> > +specify it. If you want to use these tools outside binman, you may want to
> > +add this directory to your `PATH`. For example, if you use bash, add this to
> > +the end of `.bashrc`::
> > +
> > + PATH="$HOME/.binman-tools:$PATH"
> > +
> > +To select a custom directory, use the `--tooldir` option.
> >
> > Bintool Documentation
> > =====================
> > @@ -1427,8 +1435,9 @@ Binman commands and arguments
> >
> > Usage::
> >
> > - binman [-h] [-B BUILD_DIR] [-D] [-H] [--toolpath TOOLPATH] [-T THREADS]
> > - [--test-section-timeout] [-v VERBOSITY] [-V]
> > + binman [-h] [-B BUILD_DIR] [-D] [--tooldir TOOLDIR] [-H]
> > + [--toolpath TOOLPATH] [-T THREADS] [--test-section-timeout]
> > + [-v VERBOSITY] [-V]
> > {build,bintool-docs,entry-docs,ls,extract,replace,test,tool} ...
> >
> > Binman provides the following commands:
> > @@ -1453,11 +1462,13 @@ Options:
> > -D, --debug
> > Enabling debugging (provides a full traceback on error)
> >
> > +--tooldir TOOLDIR Set the directory to store tools
> > +
> > -H, --full-help
> > Display the README file
> >
> > --toolpath TOOLPATH
> > - Add a path to the directories containing tools
> > + Add a path to the list of directories containing tools
> >
> > -T THREADS, --threads THREADS
> > Number of threads to use (0=single-thread). Note that -T0 is useful for
> > diff --git a/tools/binman/bintool.py b/tools/binman/bintool.py
> > index 6ca3d886200..bd6555a0aac 100644
> > --- a/tools/binman/bintool.py
> > +++ b/tools/binman/bintool.py
> > @@ -52,7 +52,7 @@ class Bintool:
> > missing_list = []
> >
> > # Directory to store tools
> > - tooldir = os.path.join(os.getenv('HOME'), '.binman-tools')
> > + tooldir = None
> >
>
> This default is an issue since None is not a valid path and will trigger
> a TypeError......
>
> > def __init__(self, name, desc, version_regex=None, version_args='-V'):
> > self.name = name
> > @@ -113,6 +113,10 @@ class Bintool:
> > obj = cls(name)
> > return obj
> >
> > + @classmethod
> > + def set_tool_dir(cls, pathname):
> > + cls.tooldir = pathname
> > +
> > def show(self):
> > """Show a line of information about a bintool"""
> > if self.is_present():
> > @@ -210,6 +214,8 @@ class Bintool:
> > if result is not True:
> > fname, tmpdir = result
> > dest = os.path.join(self.tooldir, self.name)
> > + if not os.path.exists(self.tooldir):
>
> ..... here.
>
> I can suggest "", which seems to make os.path.exists() happy, or check
> whether tooldir is None before checking if the path stored in the
> variable exists.
>
> Also, nit: os.makedirs takes exist_ok argument to do the mkdir -p
> equivalent in Python AFAICT. (though "" does not make os.makedirs happy).
>
> > + os.makedirs(self.tooldir)
>
> Thanks for following up on the discussion :)
Thanks. I sent a new version.
Regards,
Simon
More information about the U-Boot
mailing list