Hi Neha, On Thu, 16 Feb 2023 at 03:49, Neha Malcom Francis <n-fran...@ti.com> wrote: > > Currently, bintool supports external compilable tools as single > executable files. Adding support for git repos that can be used to run > non-compilable scripting tools that cannot otherwise be present in > binman. > > Signed-off-by: Neha Malcom Francis <n-fran...@ti.com> > --- > tools/binman/bintool.py | 42 ++++++++++++++++++++++++++++++++++------- > tools/patman/tools.py | 2 ++ > 2 files changed, 37 insertions(+), 7 deletions(-) > > diff --git a/tools/binman/bintool.py b/tools/binman/bintool.py > index 8fda13ff01..a1e37699aa 100644 > --- a/tools/binman/bintool.py > +++ b/tools/binman/bintool.py > @@ -32,12 +32,13 @@ FORMAT = '%-16.16s %-12.12s %-26.26s %s' > modules = {} > > # Possible ways of fetching a tool (FETCH_COUNT is number of ways) > -FETCH_ANY, FETCH_BIN, FETCH_BUILD, FETCH_COUNT = range(4) > +FETCH_ANY, FETCH_BIN, FETCH_BUILD, FETCH_NO_BUILD, FETCH_COUNT = range(5) > > FETCH_NAMES = { > FETCH_ANY: 'any method', > FETCH_BIN: 'binary download', > - FETCH_BUILD: 'build from source' > + FETCH_BUILD: 'build from source', > + FETCH_NO_BUILD: 'download source without building'
How about FETCH_SOURCE ? > } > > # Status of tool fetching > @@ -206,7 +207,7 @@ class Bintool: > result = try_fetch(method) > if not result: > return FAIL > - if result is not True: > + if result is not True and method != FETCH_NO_BUILD: > fname, tmpdir = result > dest = os.path.join(DOWNLOAD_DESTDIR, self.name) > print(f"- writing to '{dest}'") > @@ -261,7 +262,7 @@ class Bintool: > show_status(col.RED, 'Failures', status[FAIL]) > return not status[FAIL] > > - def run_cmd_result(self, *args, binary=False, raise_on_error=True): > + def run_cmd_result(self, *args, binary=False, raise_on_error=True, > add_name=True): > """Run the bintool using command-line arguments > > Args: > @@ -278,7 +279,10 @@ class Bintool: > if self.name in self.missing_list: > return None > name = os.path.expanduser(self.name) # Expand paths containing ~ > - all_args = (name,) + args > + if add_name: > + all_args = (name,) + args > + else: > + all_args = args > env = tools.get_env_with_path() > tout.detail(f"bintool: {' '.join(all_args)}") > result = command.run_pipe( > @@ -304,7 +308,7 @@ class Bintool: > tout.debug(result.stderr) > return result > > - def run_cmd(self, *args, binary=False): > + def run_cmd(self, *args, binary=False, add_name=True): > """Run the bintool using command-line arguments > > Args: > @@ -315,7 +319,7 @@ class Bintool: > Returns: > str or bytes: Resulting stdout from the bintool > """ > - result = self.run_cmd_result(*args, binary=binary) > + result = self.run_cmd_result(*args, binary=binary, add_name=add_name) > if result: > return result.stdout > > @@ -354,6 +358,30 @@ class Bintool: > return None > return fname, tmpdir > > + @classmethod > + def fetch_from_git(cls, git_repo): > + """Fetch a bintool git repo > + > + This clones the repo and returns > + > + Args: > + git_repo (str): URL of git repo > + bintool_path (str): Relative path of the tool in the repo, after > + build is complete > + > + Returns: > + str: Directory of fetched repo > + or None on error > + """ > + dir = os.path.join(DOWNLOAD_DESTDIR, cls.name) > + os.mkdir(dir) > + print(f"- clone git repo '{git_repo}' to '{dir}'") > + tools.run('git', 'clone', '--depth', '1', git_repo, dir) > + if not os.path.exists(dir): > + print(f"- Repo '{dir}' was not produced") > + return None > + return dir > + > @classmethod > def fetch_from_url(cls, url): > """Fetch a bintool from a URL > diff --git a/tools/patman/tools.py b/tools/patman/tools.py > index 2ac814d476..b8533c72b2 100644 > --- a/tools/patman/tools.py > +++ b/tools/patman/tools.py > @@ -399,6 +399,8 @@ def tool_find(name): > fname = os.path.join(path, name) > if os.path.isfile(fname) and os.access(fname, os.X_OK): > return fname > + if os.path.isdir(fname) and os.access(fname, os.X_OK): > + return fname How come the duplication? > > def run(name, *args, **kwargs): > """Run a tool with some arguments > -- > 2.34.1 > Please can you add a test to bintool_test.py ? Regards, Simon