#8 new flag UpMajor.

This commit is contained in:
Gorbunov Kirill Andreevich 2024-03-17 15:41:25 +03:00
parent 3a60ffbf91
commit 974c685136
5 changed files with 84 additions and 14 deletions

View File

@ -30,7 +30,7 @@ import (
"go.unistack.org/micro/v4/logger" "go.unistack.org/micro/v4/logger"
"go.unistack.org/micro/v4/options" "go.unistack.org/micro/v4/options"
"golang.org/x/mod/modfile" "golang.org/x/mod/modfile"
"golang.org/x/mod/semver"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
) )
@ -149,17 +149,26 @@ func main() {
updateOptions := modules.UpdateOptions{ updateOptions := modules.UpdateOptions{
Pre: false, Pre: false,
Major: false, Major: false,
UpMajor: false,
Cached: true, Cached: true,
OnUpdate: func(u modules.Update) { OnUpdate: func(u modules.Update) {
var modpath string // new mod path with major
if u.Err != nil { if u.Err != nil {
logger.Errorf(ctx, "%s: failed: %v", u.Module.Path, u.Err) logger.Errorf(ctx, "%s: failed: %v", u.Module.Path, u.Err)
return return
} }
v, ok := modules.ModMajor(u.Module.Path) modpath = u.Module.Path
if ok && !strings.Contains(u.Version, v) { v := semver.Major(u.Version)
u.Module.Path = u.Module.Path[:len(u.Module.Path)-2] + v p := modules.ModPrefix(modpath)
if !strings.HasPrefix(u.Module.Version, v) && v != "v1" && v != "v0" {
switch strings.HasPrefix(u.Module.Path, "gopkg.in") {
case true:
modpath = p + "." + v
case false:
modpath = p + "/" + v
} }
mvs[u.Module.Path] = u }
mvs[modpath] = u
}, },
} }

2
go.mod
View File

@ -31,7 +31,7 @@ require (
) )
require ( require (
dario.cat/mergo v1.0.0 // indirect dario.cat/mergo v1.0.0
github.com/Microsoft/go-winio v0.6.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 // indirect
github.com/VictoriaMetrics/metrics v1.24.0 // indirect github.com/VictoriaMetrics/metrics v1.24.0 // indirect

View File

@ -250,7 +250,8 @@ type UpdateOptions struct {
Modules []module.Version Modules []module.Version
Pre bool Pre bool
Cached bool Cached bool
Major bool Major bool // Major true compare only major
UpMajor bool // UpMajor module up with major
} }
// Updates finds updates for a set of specified modules. // Updates finds updates for a set of specified modules.
@ -276,13 +277,13 @@ func Updates(opt UpdateOptions) {
ch <- Update{Module: m, Err: err} ch <- Update{Module: m, Err: err}
return nil return nil
} }
prefix, ok := ModMajor(mod.Path) major := semver.Major(m.Version)
var v string var v string
switch ok { switch opt.UpMajor {
case true: case true:
v = mod.MaxVersion(prefix, opt.Pre)
default:
v = mod.MaxVersion("", opt.Pre) v = mod.MaxVersion("", opt.Pre)
case false:
v = mod.MaxVersion(major, opt.Pre)
} }
if IsNewerVersion(m.Version, v, opt.Major) { if IsNewerVersion(m.Version, v, opt.Major) {
ch <- Update{Module: m, Version: v} ch <- Update{Module: m, Version: v}

View File

@ -0,0 +1,55 @@
package modules
import "testing"
func TestModMajor(t *testing.T) {
type args struct {
modpath string
}
var tests = []struct {
name string
args args
want string
want1 bool
}{
{"Test #1",
args{
"github.com/jackc/chunkreader/v2",
},
"v2",
true,
},
{"Test #2",
args{
"github.com/jackc/chunkreader",
},
"",
true,
},
{"Test #3",
args{
"gopkg.in/yaml.v2",
},
"v2",
true,
},
{"Test #4",
args{
"github.com/jackc/chunkreader/v1",
},
"",
false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, got1 := ModMajor(tt.args.modpath)
if got != tt.want {
t.Errorf("ModMajor() got = %v, want %v", got, tt.want)
}
if got1 != tt.want1 {
t.Errorf("ModMajor() got1 = %v, want %v", got1, tt.want1)
}
})
}
}

View File

@ -210,6 +210,11 @@ func (g *Gitea) RequestOpen(ctx context.Context, branch string, path string, mod
var cmd *exec.Cmd var cmd *exec.Cmd
var out []byte var out []byte
cmd = exec.CommandContext(ctx, epath, "mod", "edit", fmt.Sprintf("-droprequire=%s", mod.Module.Path))
if out, err = cmd.CombinedOutput(); err != nil {
logger.Fatalf(ctx, "failed to run go mod edit: %s err: %v", out, err)
}
cmd = exec.CommandContext(ctx, epath, "mod", "edit", fmt.Sprintf("-require=%s@%s", path, mod.Version)) cmd = exec.CommandContext(ctx, epath, "mod", "edit", fmt.Sprintf("-require=%s@%s", path, mod.Version))
if out, err = cmd.CombinedOutput(); err != nil { if out, err = cmd.CombinedOutput(); err != nil {
logger.Fatalf(ctx, "failed to run go mod edit: %s err: %v", out, err) logger.Fatalf(ctx, "failed to run go mod edit: %s err: %v", out, err)