diff --git a/components/serverless/internal/git/fetcher.go b/components/serverless/internal/git/fetcher.go index 7baedfcdf..049e5beca 100644 --- a/components/serverless/internal/git/fetcher.go +++ b/components/serverless/internal/git/fetcher.go @@ -18,6 +18,7 @@ func (g *git2goFetcher) git2goFetch(url, outputPath string, remoteCallbacks git2 remote, err := g.lookupCreateRemote(repo, url, outputPath) if err != nil { + repo.Free() return nil, errors.Wrap(err, "while creating/using remote") } defer remote.Free() @@ -28,6 +29,7 @@ func (g *git2goFetcher) git2goFetch(url, outputPath string, remoteCallbacks git2 DownloadTags: git2go.DownloadTagsAll, }, "") if err != nil { + repo.Free() return nil, errors.Wrap(err, "while fetching remote") } return repo, nil @@ -40,7 +42,7 @@ func (g *git2goFetcher) openInitRepo(outputPath string) (*git2go.Repository, err if err == nil { return repo, nil } - g.logger.Errorf("failed to open existing repo at [%s]: %v", outputPath, err) + g.logger.Warnf("failed to open existing repo at [%s]: %v", outputPath, err) return git2go.InitRepository(outputPath, true) } @@ -49,6 +51,6 @@ func (g *git2goFetcher) lookupCreateRemote(repo *git2go.Repository, url, outputP if err == nil { return remote, nil } - g.logger.Errorf("failed to use existing origin remote at [%s]: %v", outputPath, err) + g.logger.Warnf("failed to use existing origin remote at [%s]: %v", outputPath, err) return repo.Remotes.Create("origin", url) } diff --git a/components/serverless/internal/git/go2git.go b/components/serverless/internal/git/go2git.go index 52475c6fd..6d93bb521 100644 --- a/components/serverless/internal/git/go2git.go +++ b/components/serverless/internal/git/go2git.go @@ -78,25 +78,30 @@ func (g *git2GoClient) LastCommit(options Options) (string, error) { return "", errors.Wrap(err, "while creating temporary directory") } defer os.RemoveAll(repoDir) - + repo, err := g.fetchRepo(options, repoDir) if err != nil { return "", errors.Wrap(err, "while fetching the repository") } defer repo.Free() + //branch ref, err := g.lookupBranch(repo, options.Reference) if err == nil { + defer ref.Free() return ref.Target().String(), nil } if !git2go.IsErrorCode(err, git2go.ErrorCodeNotFound) { return "", errors.Wrap(err, "while lookup branch") } + //tag commit, err := g.lookupTag(repo, options.Reference) if err != nil { return "", errors.Wrap(err, "while lookup tag") } + defer commit.Free() + return commit.Id().String(), nil } @@ -116,6 +121,7 @@ func (g *git2GoClient) Clone(path string, options Options) (string, error) { if err != nil { return "", errors.Wrap(err, "while lookup for commit") } + defer commit.Free() err = repo.ResetToCommit(commit, git2go.ResetHard, &git2go.CheckoutOptions{}) if err != nil { @@ -126,6 +132,7 @@ func (g *git2GoClient) Clone(path string, options Options) (string, error) { if err != nil { return "", errors.Wrap(err, "while getting head") } + defer ref.Free() return ref.Target().String(), nil } @@ -135,6 +142,7 @@ func (g *git2GoClient) cloneRepo(opts Options, path string) (*git2go.Repository, if err != nil { return nil, errors.Wrap(err, "while getting authentication opts") } + return g.git2goClone(opts.URL, path, authCallbacks) } func (g *git2GoClient) fetchRepo(opts Options, path string) (*git2go.Repository, error) { @@ -150,6 +158,8 @@ func (g *git2GoClient) lookupBranch(repo *git2go.Repository, branchName string) if err != nil { return nil, errors.Wrap(err, "while creating reference iterator") } + defer iter.Free() + for { item, err := iter.Next() if err != nil { @@ -158,9 +168,12 @@ func (g *git2GoClient) lookupBranch(repo *git2go.Repository, branchName string) } return nil, errors.Wrap(err, "while listing reference") } + if g.isBranch(item, branchName) { return item, nil } + + defer item.Free() } } @@ -190,6 +203,7 @@ func (g *git2GoClient) lookupTag(repo *git2go.Repository, tagName string) (*git2 } return nil, errors.Wrap(err, "while creating dwim from tag name") } + defer ref.Free() if err = repo.SetHeadDetached(ref.Target()); err != nil { return nil, errors.Wrapf(err, "while checkout to ref: %s", ref.Target().String()) @@ -198,10 +212,13 @@ func (g *git2GoClient) lookupTag(repo *git2go.Repository, tagName string) (*git2 if err != nil { return nil, errors.Wrap(err, "while getting head") } + defer head.Free() commit, err := repo.LookupCommit(head.Target()) if err != nil { return nil, errors.Wrap(err, "while getting commit from head") } + defer commit.Free() + return commit, nil }