mod: lock the version of universe for updates of package
Signed-off-by: Sam Alba <samalba@users.noreply.github.com>
This commit is contained in:
38
mod/repo.go
38
mod/repo.go
@@ -1,12 +1,14 @@
|
||||
package mod
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/go-git/go-git/v5/plumbing/transport/ssh"
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
"github.com/go-git/go-git/v5"
|
||||
"github.com/go-git/go-git/v5/plumbing"
|
||||
@@ -15,9 +17,10 @@ import (
|
||||
|
||||
type repo struct {
|
||||
contents *git.Repository
|
||||
require *Require
|
||||
}
|
||||
|
||||
func clone(require *Require, dir string, privateKeyFile, privateKeyPassword string) (*repo, error) {
|
||||
func clone(ctx context.Context, require *Require, dir string, privateKeyFile, privateKeyPassword string) (*repo, error) {
|
||||
if err := os.RemoveAll(dir); err != nil {
|
||||
return nil, fmt.Errorf("error cleaning up tmp directory")
|
||||
}
|
||||
@@ -46,10 +49,11 @@ func clone(require *Require, dir string, privateKeyFile, privateKeyPassword stri
|
||||
|
||||
rr := &repo{
|
||||
contents: r,
|
||||
require: require,
|
||||
}
|
||||
|
||||
if require.version == "" {
|
||||
latestTag, err := rr.latestTag(require.versionConstraint)
|
||||
latestTag, err := rr.latestTag(ctx, require.versionConstraint)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -57,19 +61,23 @@ func clone(require *Require, dir string, privateKeyFile, privateKeyPassword stri
|
||||
require.version = latestTag
|
||||
}
|
||||
|
||||
if err := rr.checkout(require.version); err != nil {
|
||||
if err := rr.checkout(ctx, require.version); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return rr, nil
|
||||
}
|
||||
|
||||
func (r *repo) checkout(version string) error {
|
||||
func (r *repo) checkout(ctx context.Context, version string) error {
|
||||
lg := log.Ctx(ctx)
|
||||
|
||||
h, err := r.contents.ResolveRevision(plumbing.Revision(version))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
lg.Debug().Str("repository", r.require.repo).Str("version", version).Str("commit", h.String()).Msg("checkout repo")
|
||||
|
||||
w, err := r.contents.Worktree()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -85,7 +93,12 @@ func (r *repo) checkout(version string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *repo) listTagVersions(versionConstraint string) ([]string, error) {
|
||||
func (r *repo) listTagVersions(ctx context.Context, versionConstraint string) ([]string, error) {
|
||||
lg := log.Ctx(ctx).With().
|
||||
Str("repository", r.require.repo).
|
||||
Str("versionConstraint", versionConstraint).
|
||||
Logger()
|
||||
|
||||
if versionConstraint == "" {
|
||||
versionConstraint = ">= 0"
|
||||
}
|
||||
@@ -105,19 +118,22 @@ func (r *repo) listTagVersions(versionConstraint string) ([]string, error) {
|
||||
tagV := ref.Name().Short()
|
||||
|
||||
if !strings.HasPrefix(tagV, "v") {
|
||||
// ignore wrong formatted tags
|
||||
lg.Debug().Str("tag", tagV).Msg("tag version ignored, wrong format")
|
||||
return nil
|
||||
}
|
||||
|
||||
v, err := version.NewVersion(tagV)
|
||||
if err != nil {
|
||||
// ignore invalid tag
|
||||
lg.Debug().Str("tag", tagV).Err(err).Msg("tag version ignored, parsing error")
|
||||
return nil
|
||||
}
|
||||
|
||||
if constraint.Check(v) {
|
||||
// Add tag if it matches the version constraint
|
||||
tags = append(tags, ref.Name().Short())
|
||||
lg.Debug().Str("tag", tagV).Msg("version added")
|
||||
} else {
|
||||
lg.Debug().Str("tag", tagV).Msg("tag version ignored, does not satisfy constraint")
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -130,8 +146,8 @@ func (r *repo) listTagVersions(versionConstraint string) ([]string, error) {
|
||||
return tags, nil
|
||||
}
|
||||
|
||||
func (r *repo) latestTag(versionConstraint string) (string, error) {
|
||||
versionsRaw, err := r.listTagVersions(versionConstraint)
|
||||
func (r *repo) latestTag(ctx context.Context, versionConstraint string) (string, error) {
|
||||
versionsRaw, err := r.listTagVersions(ctx, versionConstraint)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -147,5 +163,7 @@ func (r *repo) latestTag(versionConstraint string) (string, error) {
|
||||
}
|
||||
|
||||
sort.Sort(sort.Reverse(version.Collection(versions)))
|
||||
return versions[0].Original(), nil
|
||||
version := versions[0].Original()
|
||||
|
||||
return version, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user