Skip to content

Core and lib search command now update indexes first #1043

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions cli/core/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,16 @@
package core

import (
"context"
"os"
"sort"
"strings"

"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"
Expand Down Expand Up @@ -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)

Expand Down
11 changes: 11 additions & 0 deletions cli/lib/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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,
Expand Down
65 changes: 31 additions & 34 deletions test/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand All @@ -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


Expand Down
9 changes: 3 additions & 6 deletions test/test_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down