1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-06-29 01:12:24 +08:00

Merge pull request #268 from jbenet/config-version-init

Initialize Config Version
This commit is contained in:
Juan Batiz-Benet
2014-11-04 19:18:45 -08:00
7 changed files with 77 additions and 71 deletions

View File

@ -11,7 +11,6 @@ import (
config "github.com/jbenet/go-ipfs/config" config "github.com/jbenet/go-ipfs/config"
ci "github.com/jbenet/go-ipfs/crypto" ci "github.com/jbenet/go-ipfs/crypto"
peer "github.com/jbenet/go-ipfs/peer" peer "github.com/jbenet/go-ipfs/peer"
updates "github.com/jbenet/go-ipfs/updates"
u "github.com/jbenet/go-ipfs/util" u "github.com/jbenet/go-ipfs/util"
) )
@ -137,10 +136,7 @@ func initCmd(c *commander.Command, inp []string) error {
} }
// tracking ipfs version used to generate the init folder and adding update checker default setting. // tracking ipfs version used to generate the init folder and adding update checker default setting.
cfg.Version = config.Version{ cfg.Version = config.VersionDefaultValue()
Check: "error",
Current: updates.Version,
}
err = config.WriteConfigFile(filename, cfg) err = config.WriteConfigFile(filename, cfg)
if err != nil { if err != nil {

View File

@ -1,9 +1,10 @@
package main package main
import ( import (
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander" config "github.com/jbenet/go-ipfs/config"
updates "github.com/jbenet/go-ipfs/updates"
u "github.com/jbenet/go-ipfs/util" u "github.com/jbenet/go-ipfs/util"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander"
) )
var cmdIpfsVersion = &commander.Command{ var cmdIpfsVersion = &commander.Command{
@ -25,6 +26,6 @@ func versionCmd(c *commander.Command, _ []string) error {
if !number { if !number {
u.POut("ipfs version ") u.POut("ipfs version ")
} }
u.POut("%s\n", updates.Version) u.POut("%s\n", config.CurrentVersionNumber)
return nil return nil
} }

View File

@ -7,6 +7,9 @@ import (
"time" "time"
) )
// CurrentVersionNumber is the current application's version literal
const CurrentVersionNumber = "0.1.5"
// Version regulates checking if the most recent version is run // Version regulates checking if the most recent version is run
type Version struct { type Version struct {
// Current is the ipfs version for which config was generated // Current is the ipfs version for which config was generated
@ -42,27 +45,36 @@ const (
) )
// AutoUpdateSetting implements json.Unmarshaler to check values in config // AutoUpdateSetting implements json.Unmarshaler to check values in config
// supported values:
// "never" - do not auto-update
// "patch" - auto-update on new patch versions
// "minor" - auto-update on new minor (or patch) versions (Default)
// "major" - auto-update on any new version
type AutoUpdateSetting int type AutoUpdateSetting int
// AutoUpdateSetting values
const (
AutoUpdateNever AutoUpdateSetting = iota // do not auto-update
AutoUpdatePatch // only on new patch versions
AutoUpdateMinor // on new minor or patch versions (Default)
AutoUpdateMajor // on all, even Major, version changes
)
// ErrUnknownAutoUpdateSetting is returned when an unknown value is read from the config
var ErrUnknownAutoUpdateSetting = errors.New("unknown value for AutoUpdate")
// defaultCheckPeriod governs h
var defaultCheckPeriod = time.Hour * 48
// UnmarshalJSON checks the input against known strings // UnmarshalJSON checks the input against known strings
func (s *AutoUpdateSetting) UnmarshalJSON(in []byte) error { func (s *AutoUpdateSetting) UnmarshalJSON(in []byte) error {
switch strings.ToLower(string(in)) { switch strings.ToLower(string(in)) {
case `"never"`: case `"never"`:
*s = UpdateNever *s = AutoUpdateNever
case `"major"`: case `"major"`:
*s = UpdateMajor *s = AutoUpdateMajor
case `"minor"`: case `"minor"`:
*s = UpdateMinor *s = AutoUpdateMinor
case `"patch"`: case `"patch"`:
*s = UpdatePatch *s = AutoUpdatePatch
default: default:
*s = UpdateMinor *s = AutoUpdateMinor
return ErrUnknownAutoUpdateSetting return ErrUnknownAutoUpdateSetting
} }
return nil return nil
@ -76,32 +88,19 @@ func (s AutoUpdateSetting) MarshalJSON() ([]byte, error) {
// String converts valye to human readable string // String converts valye to human readable string
func (s AutoUpdateSetting) String() string { func (s AutoUpdateSetting) String() string {
switch s { switch s {
case UpdateNever: case AutoUpdateNever:
return "never" return "never"
case UpdateMajor: case AutoUpdateMajor:
return "major" return "major"
case UpdateMinor: case AutoUpdateMinor:
return "minor" return "minor"
case UpdatePatch: case AutoUpdatePatch:
return "patch" return "patch"
default: default:
return ErrUnknownAutoUpdateSetting.Error() return ErrUnknownAutoUpdateSetting.Error()
} }
} }
// ErrUnknownAutoUpdateSetting is returned when an unknown value is read from the config
var ErrUnknownAutoUpdateSetting = errors.New("unknown value for AutoUpdate")
const (
UpdateMinor AutoUpdateSetting = iota // first value so that it is the zero value and thus the default
UpdatePatch
UpdateMajor
UpdateNever
)
// defaultCheckPeriod governs h
var defaultCheckPeriod = time.Hour * 48
func (v *Version) checkPeriodDuration() time.Duration { func (v *Version) checkPeriodDuration() time.Duration {
d, err := strconv.Atoi(v.CheckPeriod) d, err := strconv.Atoi(v.CheckPeriod)
if err != nil { if err != nil {
@ -128,8 +127,18 @@ func RecordUpdateCheck(cfg *Config, filename string) {
if cfg.Version.CheckPeriod == "" { if cfg.Version.CheckPeriod == "" {
// CheckPeriod was not initialized for some reason (e.g. config file broken) // CheckPeriod was not initialized for some reason (e.g. config file broken)
cfg.Version.CheckPeriod = strconv.Itoa(int(defaultCheckPeriod)) log.Error("config.Version.CheckPeriod not set. config broken?")
} }
WriteConfigFile(filename, cfg) WriteConfigFile(filename, cfg)
} }
// VersionDefaultValue returns the default version config value (for init).
func VersionDefaultValue() Version {
return Version{
Current: CurrentVersionNumber,
Check: "error",
CheckPeriod: strconv.Itoa(int(defaultCheckPeriod)),
AutoUpdate: AutoUpdateMinor,
}
}

View File

@ -14,12 +14,12 @@ func TestAutoUpdateValues(t *testing.T) {
val AutoUpdateSetting val AutoUpdateSetting
err error err error
}{ }{
{`{"hello":123}`, UpdateMinor, nil}, // default {`{"hello":123}`, AutoUpdateNever, nil}, // zero value
{`{"AutoUpdate": "never"}`, UpdateNever, nil}, {`{"AutoUpdate": "never"}`, AutoUpdateNever, nil},
{`{"AutoUpdate": "patch"}`, UpdatePatch, nil}, {`{"AutoUpdate": "patch"}`, AutoUpdatePatch, nil},
{`{"AutoUpdate": "minor"}`, UpdateMinor, nil}, {`{"AutoUpdate": "minor"}`, AutoUpdateMinor, nil},
{`{"AutoUpdate": "major"}`, UpdateMajor, nil}, {`{"AutoUpdate": "major"}`, AutoUpdateMajor, nil},
{`{"AutoUpdate": "blarg"}`, UpdateMinor, ErrUnknownAutoUpdateSetting}, {`{"AutoUpdate": "blarg"}`, AutoUpdateMinor, ErrUnknownAutoUpdateSetting},
} }
for i, tc := range tests { for i, tc := range tests {

View File

@ -4,15 +4,15 @@ import (
"errors" "errors"
"fmt" "fmt"
config "github.com/jbenet/go-ipfs/config"
pb "github.com/jbenet/go-ipfs/net/handshake/pb" pb "github.com/jbenet/go-ipfs/net/handshake/pb"
updates "github.com/jbenet/go-ipfs/updates"
semver "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver" semver "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver"
) )
// ipfsVersion holds the current protocol version for a client running this code // ipfsVersion holds the current protocol version for a client running this code
var ipfsVersion *semver.Version var ipfsVersion *semver.Version
var clientVersion = "go-ipfs/" + updates.Version var clientVersion = "go-ipfs/" + config.CurrentVersionNumber
func init() { func init() {
var err error var err error

View File

@ -5,7 +5,7 @@ import (
"os" "os"
"time" "time"
"github.com/jbenet/go-ipfs/config" config "github.com/jbenet/go-ipfs/config"
u "github.com/jbenet/go-ipfs/util" u "github.com/jbenet/go-ipfs/util"
semver "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver" semver "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver"
@ -15,7 +15,7 @@ import (
const ( const (
// Version is the current application's version literal // Version is the current application's version literal
Version = "0.1.5" Version = config.CurrentVersionNumber
updateEndpointURL = "https://api.equinox.io/1/Updates" updateEndpointURL = "https://api.equinox.io/1/Updates"
updateAppID = "ap_YM8nz6rGm1UPg_bf63Lw6Vjz49" updateAppID = "ap_YM8nz6rGm1UPg_bf63Lw6Vjz49"
@ -150,7 +150,7 @@ func Apply(rel *check.Result) error {
// ShouldAutoUpdate decides wether a new version should be applied // ShouldAutoUpdate decides wether a new version should be applied
// checks against config setting and new version string. returns false in case of error // checks against config setting and new version string. returns false in case of error
func ShouldAutoUpdate(setting config.AutoUpdateSetting, newVer string) bool { func ShouldAutoUpdate(setting config.AutoUpdateSetting, newVer string) bool {
if setting == config.UpdateNever { if setting == config.AutoUpdateNever {
return false return false
} }
@ -165,7 +165,7 @@ func ShouldAutoUpdate(setting config.AutoUpdateSetting, newVer string) bool {
switch setting { switch setting {
case config.UpdatePatch: case config.AutoUpdatePatch:
if n[0] < c[0] { if n[0] < c[0] {
return false return false
} }
@ -176,14 +176,14 @@ func ShouldAutoUpdate(setting config.AutoUpdateSetting, newVer string) bool {
return n[2] > c[2] return n[2] > c[2]
case config.UpdateMinor: case config.AutoUpdateMinor:
if n[0] != c[0] { if n[0] != c[0] {
return false return false
} }
return n[1] > c[1] || (n[1] == c[1] && n[2] > c[2]) return n[1] > c[1] || (n[1] == c[1] && n[2] > c[2])
case config.UpdateMajor: case config.AutoUpdateMajor:
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
if n[i] < c[i] { if n[i] < c[i] {
return false return false
@ -222,7 +222,7 @@ func CliCheckForUpdates(cfg *config.Config, confFile string) error {
// there is an update available // there is an update available
// if we autoupdate // if we autoupdate
if cfg.Version.AutoUpdate != config.UpdateNever { if cfg.Version.AutoUpdate != config.AutoUpdateNever {
// and we should auto update // and we should auto update
if ShouldAutoUpdate(cfg.Version.AutoUpdate, u.Version) { if ShouldAutoUpdate(cfg.Version.AutoUpdate, u.Version) {
log.Noticef("Applying update %s", u.Version) log.Noticef("Applying update %s", u.Version)

View File

@ -21,29 +21,29 @@ func TestShouldAutoUpdate(t *testing.T) {
currV, newV string currV, newV string
should bool should bool
}{ }{
{config.UpdateNever, "0.0.1", "1.0.0", false}, {config.AutoUpdateNever, "0.0.1", "1.0.0", false},
{config.UpdateNever, "0.0.1", "0.1.0", false}, {config.AutoUpdateNever, "0.0.1", "0.1.0", false},
{config.UpdateNever, "0.0.1", "0.0.1", false}, {config.AutoUpdateNever, "0.0.1", "0.0.1", false},
{config.UpdateNever, "0.0.1", "0.0.2", false}, {config.AutoUpdateNever, "0.0.1", "0.0.2", false},
{config.UpdatePatch, "0.0.1", "1.0.0", false}, {config.AutoUpdatePatch, "0.0.1", "1.0.0", false},
{config.UpdatePatch, "0.0.1", "0.1.0", false}, {config.AutoUpdatePatch, "0.0.1", "0.1.0", false},
{config.UpdatePatch, "0.0.1", "0.0.1", false}, {config.AutoUpdatePatch, "0.0.1", "0.0.1", false},
{config.UpdatePatch, "0.0.2", "0.0.1", false}, {config.AutoUpdatePatch, "0.0.2", "0.0.1", false},
{config.UpdatePatch, "0.0.1", "0.0.2", true}, {config.AutoUpdatePatch, "0.0.1", "0.0.2", true},
{config.UpdateMinor, "0.1.1", "1.0.0", false}, {config.AutoUpdateMinor, "0.1.1", "1.0.0", false},
{config.UpdateMinor, "0.1.1", "0.2.0", true}, {config.AutoUpdateMinor, "0.1.1", "0.2.0", true},
{config.UpdateMinor, "0.1.1", "0.1.2", true}, {config.AutoUpdateMinor, "0.1.1", "0.1.2", true},
{config.UpdateMinor, "0.2.1", "0.1.9", false}, {config.AutoUpdateMinor, "0.2.1", "0.1.9", false},
{config.UpdateMinor, "0.1.2", "0.1.1", false}, {config.AutoUpdateMinor, "0.1.2", "0.1.1", false},
{config.UpdateMajor, "1.0.0", "2.0.0", true}, {config.AutoUpdateMajor, "1.0.0", "2.0.0", true},
{config.UpdateMajor, "1.0.0", "1.1.0", true}, {config.AutoUpdateMajor, "1.0.0", "1.1.0", true},
{config.UpdateMajor, "1.0.0", "1.0.1", true}, {config.AutoUpdateMajor, "1.0.0", "1.0.1", true},
{config.UpdateMajor, "2.0.0", "1.0.0", false}, // don't downgrade {config.AutoUpdateMajor, "2.0.0", "1.0.0", false}, // don't downgrade
{config.UpdateMajor, "2.5.0", "2.4.0", false}, {config.AutoUpdateMajor, "2.5.0", "2.4.0", false},
{config.UpdateMajor, "2.0.2", "2.0.1", false}, {config.AutoUpdateMajor, "2.0.2", "2.0.1", false},
} }
for i, tc := range tests { for i, tc := range tests {