Skip to content

Commit b8fb384

Browse files
matteosuppocmaglie
authored andcommitted
apt.Search improvements:
- Wrap search param with * - Don't raise errors when no packages are found Signed-off-by: Matteo Suppo <matteo.suppo@gmail.com>
1 parent abcf9c2 commit b8fb384

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

apt.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,19 @@ func List() ([]*Package, error) {
4444
// Search list packages available in the system that match the search
4545
// pattern
4646
func Search(pattern string) ([]*Package, error) {
47-
cmd := exec.Command("dpkg-query", "-W", "-f=${Package}\t${Architecture}\t${db:Status-Status}\t${Version}\n", pattern)
48-
out, err := cmd.Output()
47+
res := []*Package{}
48+
49+
cmd := exec.Command("dpkg-query", "-W", "-f=${Package}\t${Architecture}\t${db:Status-Status}\t${Version}\n", "*"+pattern+"*")
50+
51+
out, err := cmd.CombinedOutput()
4952
if err != nil {
50-
return nil, fmt.Errorf("running dpkg-query: %s", err)
53+
// Avoid returning an error if the list is empty
54+
if bytes.Contains(out, []byte("no packages found matching")) {
55+
return res, nil
56+
}
57+
return nil, fmt.Errorf("running dpkg-query: %s - %s", err, out)
5158
}
5259

53-
res := []*Package{}
5460
scanner := bufio.NewScanner(bytes.NewReader(out))
5561
for scanner.Scan() {
5662
data := strings.Split(scanner.Text(), "\t")

apt_test.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,28 @@ func TestList(t *testing.T) {
3838
continue
3939
}
4040
statusCount[p.Status]++
41-
fmt.Printf("%+v\n", p)
41+
// fmt.Printf("%+v\n", p)
4242
}
4343

44-
fmt.Println("Summary:")
45-
for k, v := range statusCount {
46-
fmt.Printf(" %s: %d\n", k, v)
47-
}
44+
// fmt.Println("Summary:")
45+
// for k, v := range statusCount {
46+
// fmt.Printf(" %s: %d\n", k, v)
47+
// }
4848

4949
require.NotNil(t, dpkg, "search package 'dpkg'")
5050
require.Equal(t, "installed", dpkg.Status, "'dpkg' status")
5151
}
5252

53+
func TestSearch(t *testing.T) {
54+
list, err := Search("nonexisting")
55+
require.NoError(t, err, "running Search command")
56+
require.Empty(t, list, "Search command result")
57+
58+
list, err = Search("header")
59+
require.NoError(t, err, "running Search command")
60+
require.NotEmpty(t, list, "Search command result")
61+
}
62+
5363
func TestListUpgradable(t *testing.T) {
5464
list, err := ListUpgradable()
5565
for _, p := range list {

0 commit comments

Comments
 (0)