Skip to content

Commit 710946e

Browse files
authored
Merge pull request #57 from per1234/registry-validation-capabilities
Expose Go API functions for loading library registry data files
2 parents 7f69ac5 + 121df84 commit 710946e

12 files changed

+193
-41
lines changed

Diff for: go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module arduino.cc/repository
1+
module github.com/arduino/libraries-repository-engine
22

33
go 1.14
44

Diff for: internal/libraries/db/library.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import (
2828
"regexp"
2929
"strings"
3030

31-
"arduino.cc/repository/internal/libraries/metadata"
31+
"github.com/arduino/libraries-repository-engine/internal/libraries/metadata"
3232
)
3333

3434
// FromLibraryToRelease extract a Release from LibraryMetadata. LibraryMetadata must be

Diff for: internal/libraries/git_integration_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import (
2929
"path/filepath"
3030
"testing"
3131

32-
"arduino.cc/repository/internal/libraries/db"
33-
"arduino.cc/repository/internal/libraries/gitutils"
32+
"github.com/arduino/libraries-repository-engine/internal/libraries/db"
33+
"github.com/arduino/libraries-repository-engine/internal/libraries/gitutils"
3434
"github.com/stretchr/testify/require"
3535
)
3636

Diff for: internal/libraries/repoarchive.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ import (
2828
"path/filepath"
2929
"regexp"
3030

31-
"arduino.cc/repository/internal/libraries/metadata"
32-
"arduino.cc/repository/internal/libraries/zip"
31+
"github.com/arduino/libraries-repository-engine/internal/libraries/metadata"
32+
"github.com/arduino/libraries-repository-engine/internal/libraries/zip"
3333
)
3434

3535
// ZipRepo creates a ZIP archive of the repo folder and returns its path.

Diff for: internal/libraries/repoclone.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ import (
2828
"os"
2929
"path/filepath"
3030

31-
"arduino.cc/repository/internal/libraries/db"
31+
"github.com/arduino/libraries-repository-engine/internal/libraries/db"
3232

3333
"fmt"
3434

35-
"arduino.cc/repository/internal/libraries/metadata"
35+
"github.com/arduino/libraries-repository-engine/internal/libraries/metadata"
3636
"github.com/go-git/go-git/v5"
3737
)
3838

Diff for: internal/libraries/repolist.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ import (
3333
"strings"
3434
)
3535

36-
func loadRepoListFromFile(filename string) ([]*Repo, error) {
36+
// LoadRepoListFromFile returns an unfiltered list of library registry entries loaded from the given data file.
37+
func LoadRepoListFromFile(filename string) ([]*Repo, error) {
3738
file, err := os.Open(filename)
3839
if err != nil {
3940
return nil, err
@@ -153,9 +154,9 @@ func toListOfUniqueRepos(repos []*Repo) []*Repo {
153154
return finalRepos
154155
}
155156

156-
// ListRepos loads a list from the given filename.
157+
// ListRepos returns a filtered list of library registry entries loaded from the given data file.
157158
func ListRepos(reposFilename string) ([]*Repo, error) {
158-
repos, err := loadRepoListFromFile(reposFilename)
159+
repos, err := LoadRepoListFromFile(reposFilename)
159160
if err != nil {
160161
return nil, err
161162
}

Diff for: internal/libraries/repolist_test.go

-25
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,6 @@ import (
2929
"github.com/stretchr/testify/require"
3030
)
3131

32-
func TestListRepos(t *testing.T) {
33-
repos, err := ListRepos("./testdata/git_test_repos.txt")
34-
35-
require.Equal(t, 11, len(repos))
36-
37-
require.Equal(t, "https://github.com/PaulStoffregen/OctoWS2811.git", repos[0].URL)
38-
require.Equal(t, "https://github.com/PaulStoffregen/AltSoftSerial.git", repos[1].URL)
39-
40-
require.Equal(t, "https://github.com/Cheong2K/ble-sdk-arduino.git", repos[2].URL)
41-
require.Equal(t, "https://github.com/arduino-libraries/Bridge.git", repos[3].URL)
42-
require.Equal(t, "https://github.com/adafruit/Adafruit_ADS1X15.git", repos[4].URL)
43-
require.Equal(t, "https://github.com/adafruit/Adafruit_ADXL345.git", repos[5].URL)
44-
require.Equal(t, "https://github.com/adafruit/Adafruit_AHRS.git", repos[6].URL)
45-
require.Equal(t, "https://github.com/adafruit/Adafruit_AM2315.git", repos[7].URL)
46-
require.Equal(t, "https://github.com/arduino-libraries/Scheduler.git", repos[8].URL)
47-
require.Equal(t, "https://github.com/arduino-libraries/SD.git", repos[9].URL)
48-
require.Equal(t, "https://github.com/arduino-libraries/Servo.git", repos[10].URL)
49-
require.Error(t, err)
50-
51-
error, ok := err.(GitURLsError)
52-
require.True(t, ok)
53-
require.Equal(t, "https://github.com/arduino-libraries", error.Repos[0].URL)
54-
require.Equal(t, "[email protected]:PaulStoffregen/Audio.git", error.Repos[1].URL)
55-
}
56-
5732
func TestRepoFolderPathDetermination(t *testing.T) {
5833
repo := &Repo{URL: "https://github.com/arduino-libraries/Servo.git"}
5934
f, err := repo.AsFolder()

Diff for: internal/libraries/zip/ziphelper.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import (
3030
"os/exec"
3131
"path/filepath"
3232

33-
"arduino.cc/repository/internal/libraries/file"
33+
"github.com/arduino/libraries-repository-engine/internal/libraries/file"
3434
)
3535

3636
// Directory creates a new zip archive that contains a copy of "rootFolder" into "zipFile".

Diff for: libraries/repolist.go

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// This file is part of libraries-repository-engine.
2+
//
3+
// Copyright 2021 ARDUINO SA (http://www.arduino.cc/)
4+
//
5+
// This program is free software: you can redistribute it and/or modify
6+
// it under the terms of the GNU Affero General Public License as published
7+
// by the Free Software Foundation, either version 3 of the License, or
8+
// (at your option) any later version.
9+
//
10+
// This program is distributed in the hope that it will be useful,
11+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
// GNU Affero General Public License for more details.
14+
//
15+
// You should have received a copy of the GNU Affero General Public License
16+
// along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
//
18+
// You can be released from the requirements of the above licenses by purchasing
19+
// a commercial license. Buying such a license is mandatory if you want to
20+
// modify or otherwise use the software for commercial activities involving the
21+
// Arduino software without disclosing the source code of your own applications.
22+
// To purchase a commercial license, send an email to [email protected].
23+
24+
package libraries
25+
26+
import (
27+
"github.com/arduino/libraries-repository-engine/internal/libraries"
28+
)
29+
30+
// LoadRepoListFromFile returns an unfiltered list of library registry entries loaded from the given data file.
31+
func LoadRepoListFromFile(filename string) ([]*Repo, error) {
32+
return libraries.LoadRepoListFromFile(filename)
33+
}
34+
35+
// Repo is the type for the library repository data.
36+
type Repo = libraries.Repo
37+
38+
// ListRepos returns a filtered list of library registry entries loaded from the given data file.
39+
func ListRepos(reposFilename string) ([]*Repo, error) {
40+
return libraries.ListRepos(reposFilename)
41+
}

Diff for: libraries/repolist_test.go

+135
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
// This file is part of libraries-repository-engine.
2+
//
3+
// Copyright 2021 ARDUINO SA (http://www.arduino.cc/)
4+
//
5+
// This program is free software: you can redistribute it and/or modify
6+
// it under the terms of the GNU Affero General Public License as published
7+
// by the Free Software Foundation, either version 3 of the License, or
8+
// (at your option) any later version.
9+
//
10+
// This program is distributed in the hope that it will be useful,
11+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
// GNU Affero General Public License for more details.
14+
//
15+
// You should have received a copy of the GNU Affero General Public License
16+
// along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
//
18+
// You can be released from the requirements of the above licenses by purchasing
19+
// a commercial license. Buying such a license is mandatory if you want to
20+
// modify or otherwise use the software for commercial activities involving the
21+
// Arduino software without disclosing the source code of your own applications.
22+
// To purchase a commercial license, send an email to [email protected].
23+
24+
package libraries
25+
26+
import (
27+
"testing"
28+
29+
"github.com/arduino/libraries-repository-engine/internal/libraries"
30+
"github.com/stretchr/testify/assert"
31+
"github.com/stretchr/testify/require"
32+
)
33+
34+
func TestLoadRepoListFromFile(t *testing.T) {
35+
_, err := LoadRepoListFromFile("./testdata/nonexistent.txt")
36+
assert.Error(t, err, "Attempt to load non-existent registry data file")
37+
38+
repos, err := LoadRepoListFromFile("./testdata/git_test_repos.txt")
39+
require.NoError(t, err)
40+
41+
reposAssertion := []*Repo{
42+
{
43+
URL: "https://github.com/arduino-libraries",
44+
Types: []string{"Arduino"},
45+
LibraryName: "libraries",
46+
},
47+
{
48+
URL: "[email protected]:PaulStoffregen/Audio.git",
49+
Types: []string{"Contributed"},
50+
LibraryName: "Audio",
51+
},
52+
{
53+
URL: "https://github.com/PaulStoffregen/OctoWS2811.git",
54+
Types: []string{"Arduino", "Contributed"},
55+
LibraryName: "OctoWS2811",
56+
},
57+
{
58+
URL: "https://github.com/PaulStoffregen/AltSoftSerial.git",
59+
Types: []string{"Contributed"},
60+
LibraryName: "AltSoftSerial",
61+
},
62+
{
63+
URL: "https://github.com/Cheong2K/ble-sdk-arduino.git",
64+
Types: []string{"Contributed"},
65+
LibraryName: "ble-sdk-arduino",
66+
},
67+
{
68+
URL: "https://github.com/arduino-libraries/Bridge.git",
69+
Types: []string{"Contributed"},
70+
LibraryName: "Bridge",
71+
},
72+
{
73+
URL: "https://github.com/adafruit/Adafruit_ADS1X15.git",
74+
Types: []string{"Recommended"},
75+
LibraryName: "Adafruit_ADS1X15",
76+
},
77+
{
78+
URL: "https://github.com/adafruit/Adafruit_ADXL345.git",
79+
Types: []string{"Recommended"},
80+
LibraryName: "Adafruit_ADXL345",
81+
},
82+
{
83+
URL: "https://github.com/adafruit/Adafruit_AHRS.git",
84+
Types: []string{"Recommended"},
85+
LibraryName: "Adafruit_AHRS",
86+
},
87+
{
88+
URL: "https://github.com/adafruit/Adafruit_AM2315.git",
89+
Types: []string{"Recommended"},
90+
LibraryName: "Adafruit_AM2315",
91+
},
92+
{
93+
URL: "https://github.com/arduino-libraries/Scheduler.git",
94+
Types: []string{"Arduino"},
95+
LibraryName: "Scheduler",
96+
},
97+
{
98+
URL: "https://github.com/arduino-libraries/SD.git",
99+
Types: []string{"Arduino"},
100+
LibraryName: "SD",
101+
},
102+
{
103+
URL: "https://github.com/arduino-libraries/Servo.git",
104+
Types: []string{"Arduino"},
105+
LibraryName: "Servo",
106+
},
107+
}
108+
109+
assert.Equal(t, reposAssertion, repos)
110+
}
111+
112+
func TestListRepos(t *testing.T) {
113+
repos, err := ListRepos("./testdata/git_test_repos.txt")
114+
115+
require.Equal(t, 11, len(repos))
116+
117+
require.Equal(t, "https://github.com/PaulStoffregen/OctoWS2811.git", repos[0].URL)
118+
require.Equal(t, "https://github.com/PaulStoffregen/AltSoftSerial.git", repos[1].URL)
119+
120+
require.Equal(t, "https://github.com/Cheong2K/ble-sdk-arduino.git", repos[2].URL)
121+
require.Equal(t, "https://github.com/arduino-libraries/Bridge.git", repos[3].URL)
122+
require.Equal(t, "https://github.com/adafruit/Adafruit_ADS1X15.git", repos[4].URL)
123+
require.Equal(t, "https://github.com/adafruit/Adafruit_ADXL345.git", repos[5].URL)
124+
require.Equal(t, "https://github.com/adafruit/Adafruit_AHRS.git", repos[6].URL)
125+
require.Equal(t, "https://github.com/adafruit/Adafruit_AM2315.git", repos[7].URL)
126+
require.Equal(t, "https://github.com/arduino-libraries/Scheduler.git", repos[8].URL)
127+
require.Equal(t, "https://github.com/arduino-libraries/SD.git", repos[9].URL)
128+
require.Equal(t, "https://github.com/arduino-libraries/Servo.git", repos[10].URL)
129+
require.Error(t, err)
130+
131+
error, ok := err.(libraries.GitURLsError)
132+
require.True(t, ok)
133+
require.Equal(t, "https://github.com/arduino-libraries", error.Repos[0].URL)
134+
require.Equal(t, "[email protected]:PaulStoffregen/Audio.git", error.Repos[1].URL)
135+
}

Diff for: sync_libraries.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ import (
3232
"os"
3333
"path/filepath"
3434

35-
"arduino.cc/repository/internal/libraries"
36-
"arduino.cc/repository/internal/libraries/db"
37-
"arduino.cc/repository/internal/libraries/gitutils"
38-
"arduino.cc/repository/internal/libraries/hash"
3935
cc "github.com/arduino/golang-concurrent-workers"
36+
"github.com/arduino/libraries-repository-engine/internal/libraries"
37+
"github.com/arduino/libraries-repository-engine/internal/libraries/db"
38+
"github.com/arduino/libraries-repository-engine/internal/libraries/gitutils"
39+
"github.com/arduino/libraries-repository-engine/internal/libraries/hash"
4040
"github.com/go-git/go-git/v5/plumbing"
4141
)
4242

0 commit comments

Comments
 (0)