From da5190739bf2c447ddc03e1a4bc0f3c761a3ba55 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 7 Feb 2025 14:50:09 +0100 Subject: [PATCH 1/3] Added integration test --- internal/integrationtest/lib/lib_test.go | 52 ++++++++++++++++-------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index ab49a35e2a7..ff46fa20c26 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -659,27 +659,47 @@ func TestInstallWithGitUrlFragmentAsBranch(t *testing.T) { _, _, err := cli.RunWithCustomEnv(envVar, "config", "init", "--dest-dir", ".") require.NoError(t, err) - libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101") - // Verifies library is not already installed - require.NoDirExists(t, libInstallDir.String()) + t.Run("InvalidRef", func(t *testing.T) { + // Test that a bad ref fails + _, _, err = cli.Run("lib", "install", "--git-url", "https://github.com/arduino-libraries/WiFi101.git#x-ref-does-not-exist", "--config-file", "arduino-cli.yaml") + require.Error(t, err) + }) - gitUrl := "https://github.com/arduino-libraries/WiFi101.git" + t.Run("RefPointingToATag", func(t *testing.T) { + gitUrl := "https://github.com/arduino-libraries/WiFi101.git" + libInstallDir := cli.SketchbookDir().Join("libraries", "WiFi101").String() - // Test that a bad ref fails - _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#x-ref-does-not-exist", "--config-file", "arduino-cli.yaml") - require.Error(t, err) + // Verifies library is not already installed + require.NoDirExists(t, libInstallDir) - // Verifies library is installed in expected path - _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#0.16.0", "--config-file", "arduino-cli.yaml") - require.NoError(t, err) - require.DirExists(t, libInstallDir.String()) + // Verifies library is installed in expected path + _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#0.16.0", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + require.DirExists(t, libInstallDir) - // Reinstall library at an existing ref - _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#master", "--config-file", "arduino-cli.yaml") - require.NoError(t, err) + // Reinstall library at an existing ref + _, _, err = cli.Run("lib", "install", "--git-url", gitUrl+"#master", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) - // Verifies library remains installed - require.DirExists(t, libInstallDir.String()) + // Verifies library remains installed + require.DirExists(t, libInstallDir) + }) + + t.Run("RefPointingToBranch", func(t *testing.T) { + libInstallDir := cli.SketchbookDir().Join("libraries", "ArduinoCloud") + + // Verify install with ref pointing to a branch + require.NoDirExists(t, libInstallDir.String()) + _, _, err = cli.Run("lib", "install", "--git-url", "https://github.com/arduino-libraries/ArduinoCloud.git#revert-2-typos", "--config-file", "arduino-cli.yaml") + require.NoError(t, err) + require.DirExists(t, libInstallDir.String()) + + // Verify that the correct branch is checked out + // https://github.com/arduino-libraries/ArduinoCloud/commit/d098d4647967b3aeb4520e7baf279e4225254dd2 + fileToTest, err := libInstallDir.Join("src", "ArduinoCloudThingBase.h").ReadFile() + require.NoError(t, err) + require.Contains(t, string(fileToTest), `#define LENGHT_M "meters"`) + }) } func TestUpdateIndex(t *testing.T) { From f73e3f132682aab762419ef49d1482fdf6e3021d Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 7 Feb 2025 14:51:26 +0100 Subject: [PATCH 2/3] Fixed library install from git when ref points to a branch --- .../libraries/librariesmanager/install.go | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/internal/arduino/libraries/librariesmanager/install.go b/internal/arduino/libraries/librariesmanager/install.go index de53ea3cd56..1d73849f81f 100644 --- a/internal/arduino/libraries/librariesmanager/install.go +++ b/internal/arduino/libraries/librariesmanager/install.go @@ -219,25 +219,15 @@ func (lmi *Installer) InstallGitLib(argURL string, overwrite bool) error { if ref != "" { depth = 0 } - repo, err := git.PlainClone(tmpInstallPath.String(), false, &git.CloneOptions{ - URL: gitURL, - Depth: depth, - Progress: os.Stdout, - }) - if err != nil { + if _, err := git.PlainClone(tmpInstallPath.String(), false, &git.CloneOptions{ + URL: gitURL, + Depth: depth, + Progress: os.Stdout, + ReferenceName: ref, + }); err != nil { return err } - if ref != "" { - if h, err := repo.ResolveRevision(ref); err != nil { - return err - } else if w, err := repo.Worktree(); err != nil { - return err - } else if err := w.Checkout(&git.CheckoutOptions{Hash: plumbing.NewHash(h.String())}); err != nil { - return err - } - } - // We don't want the installed library to be a git repository thus we delete this folder tmpInstallPath.Join(".git").RemoveAll() @@ -251,7 +241,7 @@ func (lmi *Installer) InstallGitLib(argURL string, overwrite bool) error { // parseGitArgURL tries to recover a library name from a git URL. // Returns an error in case the URL is not a valid git URL. -func parseGitArgURL(argURL string) (string, string, plumbing.Revision, error) { +func parseGitArgURL(argURL string) (string, string, plumbing.ReferenceName, error) { // On Windows handle paths with backslashes in the form C:\Path\to\library if path := paths.New(argURL); path != nil && path.Exist() { return path.Base(), argURL, "", nil @@ -289,7 +279,7 @@ func parseGitArgURL(argURL string) (string, string, plumbing.Revision, error) { return "", "", "", errors.New(i18n.Tr("invalid git url")) } // fragment == "1.0.3" - rev := plumbing.Revision(parsedURL.Fragment) + rev := plumbing.ReferenceName(parsedURL.Fragment) // gitURL == "https://github.com/arduino-libraries/SigFox.git" parsedURL.Fragment = "" gitURL := parsedURL.String() From ef4a5f446956dab5e3306364a15c39cc71376e3b Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 7 Feb 2025 15:07:13 +0100 Subject: [PATCH 3/3] Praise linter --- internal/integrationtest/lib/lib_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/integrationtest/lib/lib_test.go b/internal/integrationtest/lib/lib_test.go index ff46fa20c26..15371c80299 100644 --- a/internal/integrationtest/lib/lib_test.go +++ b/internal/integrationtest/lib/lib_test.go @@ -698,7 +698,7 @@ func TestInstallWithGitUrlFragmentAsBranch(t *testing.T) { // https://github.com/arduino-libraries/ArduinoCloud/commit/d098d4647967b3aeb4520e7baf279e4225254dd2 fileToTest, err := libInstallDir.Join("src", "ArduinoCloudThingBase.h").ReadFile() require.NoError(t, err) - require.Contains(t, string(fileToTest), `#define LENGHT_M "meters"`) + require.Contains(t, string(fileToTest), `#define LENGHT_M "meters"`) // nolint:misspell }) }