From b6ce0d5839bc35201971ac1c0226fbacc056f4b1 Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Wed, 21 Oct 2020 17:26:34 +0200 Subject: [PATCH] Core and lib search command now update indexes first --- cli/core/search.go | 11 ++++++++ cli/lib/search.go | 11 ++++++++ test/test_core.py | 65 ++++++++++++++++++++++------------------------ test/test_lib.py | 9 +++---- 4 files changed, 56 insertions(+), 40 deletions(-) diff --git a/cli/core/search.go b/cli/core/search.go index a313c5765ab..0ca4b4bb9fa 100644 --- a/cli/core/search.go +++ b/cli/core/search.go @@ -16,6 +16,7 @@ package core import ( + "context" "os" "sort" "strings" @@ -23,6 +24,8 @@ import ( "github.com/arduino/arduino-cli/cli/errorcodes" "github.com/arduino/arduino-cli/cli/feedback" "github.com/arduino/arduino-cli/cli/instance" + "github.com/arduino/arduino-cli/cli/output" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/commands/core" rpc "github.com/arduino/arduino-cli/rpc/commands" "github.com/arduino/arduino-cli/table" @@ -55,6 +58,14 @@ func runSearchCommand(cmd *cobra.Command, args []string) { os.Exit(errorcodes.ErrGeneric) } + _, err = commands.UpdateIndex(context.Background(), &rpc.UpdateIndexReq{ + Instance: inst, + }, output.ProgressBar()) + if err != nil { + feedback.Errorf("Error updating index: %v", err) + os.Exit(errorcodes.ErrGeneric) + } + arguments := strings.ToLower(strings.Join(args, " ")) logrus.Infof("Executing `arduino core search` with args: '%s'", arguments) diff --git a/cli/lib/search.go b/cli/lib/search.go index e0538183f39..a5a699e5962 100644 --- a/cli/lib/search.go +++ b/cli/lib/search.go @@ -25,6 +25,8 @@ import ( "github.com/arduino/arduino-cli/cli/errorcodes" "github.com/arduino/arduino-cli/cli/feedback" "github.com/arduino/arduino-cli/cli/instance" + "github.com/arduino/arduino-cli/cli/output" + "github.com/arduino/arduino-cli/commands" "github.com/arduino/arduino-cli/commands/lib" rpc "github.com/arduino/arduino-cli/rpc/commands" "github.com/sirupsen/logrus" @@ -51,6 +53,15 @@ var searchFlags struct { func runSearchCommand(cmd *cobra.Command, args []string) { instance := instance.CreateInstanceIgnorePlatformIndexErrors() + + err := commands.UpdateLibrariesIndex(context.Background(), &rpc.UpdateLibrariesIndexReq{ + Instance: instance, + }, output.ProgressBar()) + if err != nil { + feedback.Errorf("Error updating library index: %v", err) + os.Exit(errorcodes.ErrGeneric) + } + logrus.Info("Executing `arduino lib search`") searchResp, err := lib.LibrarySearch(context.Background(), &rpc.LibrarySearchReq{ Instance: instance, diff --git a/test/test_core.py b/test/test_core.py index 51d3bab80bf..7fec0943f1c 100644 --- a/test/test_core.py +++ b/test/test_core.py @@ -48,32 +48,39 @@ def test_core_search(run_command, httpserver): # Search all Retrokit platforms result = run_command(f"core search retrokit --all --additional-urls={url}") assert result.ok - assert 3 == len(result.stdout.strip().splitlines()) - lines = [l.split(maxsplit=2) for l in result.stdout.strip().splitlines()] + lines = [l.strip().split() for l in result.stdout.strip().splitlines()] + assert 11 == len(lines) + assert ["Updating", "index:", "package_index.json", "downloaded"] in lines + assert ["Updating", "index:", "package_index.json.sig", "downloaded"] in lines assert ["Retrokits-RK002:arm", "1.0.5", "RK002"] in lines assert ["Retrokits-RK002:arm", "1.0.6", "RK002"] in lines # Search using Retrokit Package Maintainer result = run_command(f"core search Retrokits-RK002 --all --additional-urls={url}") assert result.ok - assert 3 == len(result.stdout.strip().splitlines()) - lines = [l.split(maxsplit=2) for l in result.stdout.strip().splitlines()] + lines = [l.strip().split() for l in result.stdout.strip().splitlines()] + assert 11 == len(lines) + assert ["Updating", "index:", "package_index.json", "downloaded"] in lines + assert ["Updating", "index:", "package_index.json.sig", "downloaded"] in lines assert ["Retrokits-RK002:arm", "1.0.5", "RK002"] in lines assert ["Retrokits-RK002:arm", "1.0.6", "RK002"] in lines # Search using the Retrokit Platform name result = run_command(f"core search rk002 --all --additional-urls={url}") assert result.ok - assert 3 == len(result.stdout.strip().splitlines()) - lines = [l.split(maxsplit=2) for l in result.stdout.strip().splitlines()] + assert 11 == len(lines) + assert ["Updating", "index:", "package_index.json", "downloaded"] in lines + assert ["Updating", "index:", "package_index.json.sig", "downloaded"] in lines assert ["Retrokits-RK002:arm", "1.0.5", "RK002"] in lines assert ["Retrokits-RK002:arm", "1.0.6", "RK002"] in lines # Search using a board name result = run_command(f"core search myboard --all --additional-urls={url}") assert result.ok - assert 2 == len(result.stdout.strip().splitlines()) - lines = [l.split(maxsplit=2) for l in result.stdout.strip().splitlines()] + assert 10 == len(result.stdout.strip().splitlines()) + lines = [l.strip().split() for l in result.stdout.strip().splitlines()] + assert ["Updating", "index:", "package_index.json", "downloaded"] in lines + assert ["Updating", "index:", "package_index.json.sig", "downloaded"] in lines assert ["Package:x86", "1.2.3", "Platform"] in lines @@ -95,48 +102,38 @@ def test_core_search_no_args(run_command, httpserver): result = run_command("core search") assert result.ok num_platforms = 0 - found = False - for l in result.stdout.splitlines()[1:]: # ignore the header on first line - if l: # ignore empty lines - if l.startswith("test:x86"): - found = True - num_platforms += 1 + lines = [l.strip().split() for l in result.stdout.strip().splitlines()] + # Index update output and the header are printed on the first lines + assert ["Updating", "index:", "package_index.json", "downloaded"] in lines[:6] + assert ["Updating", "index:", "package_index.json.sig", "downloaded"] in lines[:6] + assert ["ID", "Version", "Name"] == lines[5] + assert ["test:x86", "2.0.0", "test_core"] in lines[6:] + num_platforms = len(lines[6:]) # same thing in JSON format, also check the number of platforms found is the same result = run_command("core search --format json") assert result.ok platforms = json.loads(result.stdout) - found = False - platforms = json.loads(result.stdout) - for elem in platforms: - if elem.get("Name") == "test_core": - found = True - break - assert found + assert 1 == len([e for e in platforms if e.get("Name") == "test_core"]) assert len(platforms) == num_platforms # list all with additional urls, check the test core is there result = run_command(f"core search --additional-urls={url}") assert result.ok num_platforms = 0 - found = False - for l in result.stdout.splitlines()[1:]: # ignore the header on first line - if l: # ignore empty lines - if l.startswith("test:x86"): - found = True - num_platforms += 1 - assert found + lines = [l.strip().split() for l in result.stdout.strip().splitlines()] + # Index update output and the header are printed on the first lines + assert ["Updating", "index:", "package_index.json", "downloaded"] in lines[:9] + assert ["Updating", "index:", "package_index.json.sig", "downloaded"] in lines[:9] + assert ["ID", "Version", "Name"] == lines[8] + assert ["test:x86", "2.0.0", "test_core"] in lines[9:] + num_platforms = len(lines[9:]) # same thing in JSON format, also check the number of platforms found is the same result = run_command(f"core search --format json --additional-urls={url}") assert result.ok - found = False platforms = json.loads(result.stdout) - for elem in platforms: - if elem.get("Name") == "test_core": - found = True - break - assert found + assert 1 == len([e for e in platforms if e.get("Name") == "test_core"]) assert len(platforms) == num_platforms diff --git a/test/test_lib.py b/test/test_lib.py index 4a138262706..d3c4d839e30 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -204,12 +204,9 @@ def test_search(run_command): result = run_command("lib search --names") assert result.ok - out_lines = result.stdout.strip().splitlines() - # Create an array with just the name of the vars - libs = [] - for line in out_lines: - start = line.find('"') + 1 - libs.append(line[start:-1]) + lines = [l.strip() for l in result.stdout.strip().splitlines()] + assert "Updating index: library_index.json downloaded" in lines + libs = [l[6:].strip('"') for l in lines if "Name:" in l] expected = {"WiFi101", "WiFi101OTA", "Firebase Arduino based on WiFi101"} assert expected == {lib for lib in libs if "WiFi101" in lib}