#19 #20
@ -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
2
go.mod
@ -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
|
||||||
|
@ -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}
|
||||||
|
55
internal/modules/packages_test.go
Normal file
55
internal/modules/packages_test.go
Normal 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)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user