Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initialize Config Version #268

Merged
merged 3 commits into from
Nov 5, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions cmd/ipfs/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
config "github.com/jbenet/go-ipfs/config"
ci "github.com/jbenet/go-ipfs/crypto"
peer "github.com/jbenet/go-ipfs/peer"
updates "github.com/jbenet/go-ipfs/updates"
u "github.com/jbenet/go-ipfs/util"
)

Expand Down Expand Up @@ -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.
cfg.Version = config.Version{
Check: "error",
Current: updates.Version,
}
cfg.Version = config.VersionDefaultValue()

err = config.WriteConfigFile(filename, cfg)
if err != nil {
Expand Down
7 changes: 4 additions & 3 deletions cmd/ipfs/version.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package main

import (
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander"
updates "github.com/jbenet/go-ipfs/updates"
config "github.com/jbenet/go-ipfs/config"
u "github.com/jbenet/go-ipfs/util"

"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander"
)

var cmdIpfsVersion = &commander.Command{
Expand All @@ -25,6 +26,6 @@ func versionCmd(c *commander.Command, _ []string) error {
if !number {
u.POut("ipfs version ")
}
u.POut("%s\n", updates.Version)
u.POut("%s\n", config.CurrentVersionNumber)
return nil
}
65 changes: 37 additions & 28 deletions config/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import (
"time"
)

// CurrentVersionNumber is the current application's version literal
const CurrentVersionNumber = "0.1.5"

// Version regulates checking if the most recent version is run
type Version struct {
// Current is the ipfs version for which config was generated
Expand Down Expand Up @@ -42,27 +45,36 @@ const (
)

// 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

// 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
func (s *AutoUpdateSetting) UnmarshalJSON(in []byte) error {

switch strings.ToLower(string(in)) {
case `"never"`:
*s = UpdateNever
*s = AutoUpdateNever
case `"major"`:
*s = UpdateMajor
*s = AutoUpdateMajor
case `"minor"`:
*s = UpdateMinor
*s = AutoUpdateMinor
case `"patch"`:
*s = UpdatePatch
*s = AutoUpdatePatch
default:
*s = UpdateMinor
*s = AutoUpdateMinor
return ErrUnknownAutoUpdateSetting
}
return nil
Expand All @@ -76,32 +88,19 @@ func (s AutoUpdateSetting) MarshalJSON() ([]byte, error) {
// String converts valye to human readable string
func (s AutoUpdateSetting) String() string {
switch s {
case UpdateNever:
case AutoUpdateNever:
return "never"
case UpdateMajor:
case AutoUpdateMajor:
return "major"
case UpdateMinor:
case AutoUpdateMinor:
return "minor"
case UpdatePatch:
case AutoUpdatePatch:
return "patch"
default:
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 {
d, err := strconv.Atoi(v.CheckPeriod)
if err != nil {
Expand All @@ -128,8 +127,18 @@ func RecordUpdateCheck(cfg *Config, filename string) {

if cfg.Version.CheckPeriod == "" {
// 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)
}

// 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,
}
}
12 changes: 6 additions & 6 deletions config/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ func TestAutoUpdateValues(t *testing.T) {
val AutoUpdateSetting
err error
}{
{`{"hello":123}`, UpdateMinor, nil}, // default
{`{"AutoUpdate": "never"}`, UpdateNever, nil},
{`{"AutoUpdate": "patch"}`, UpdatePatch, nil},
{`{"AutoUpdate": "minor"}`, UpdateMinor, nil},
{`{"AutoUpdate": "major"}`, UpdateMajor, nil},
{`{"AutoUpdate": "blarg"}`, UpdateMinor, ErrUnknownAutoUpdateSetting},
{`{"hello":123}`, AutoUpdateNever, nil}, // zero value
{`{"AutoUpdate": "never"}`, AutoUpdateNever, nil},
{`{"AutoUpdate": "patch"}`, AutoUpdatePatch, nil},
{`{"AutoUpdate": "minor"}`, AutoUpdateMinor, nil},
{`{"AutoUpdate": "major"}`, AutoUpdateMajor, nil},
{`{"AutoUpdate": "blarg"}`, AutoUpdateMinor, ErrUnknownAutoUpdateSetting},
}

for i, tc := range tests {
Expand Down
4 changes: 2 additions & 2 deletions net/handshake/handshake1.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ import (
"errors"
"fmt"

config "github.com/jbenet/go-ipfs/config"
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"
)

// ipfsVersion holds the current protocol version for a client running this code
var ipfsVersion *semver.Version
var clientVersion = "go-ipfs/" + updates.Version
var clientVersion = "go-ipfs/" + config.CurrentVersionNumber

func init() {
var err error
Expand Down
14 changes: 7 additions & 7 deletions updates/updates.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"os"
"time"

"github.com/jbenet/go-ipfs/config"
config "github.com/jbenet/go-ipfs/config"
u "github.com/jbenet/go-ipfs/util"

semver "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver"
Expand All @@ -15,7 +15,7 @@ import (

const (
// Version is the current application's version literal
Version = "0.1.5"
Version = config.CurrentVersionNumber

updateEndpointURL = "https://api.equinox.io/1/Updates"
updateAppID = "ap_YM8nz6rGm1UPg_bf63Lw6Vjz49"
Expand Down Expand Up @@ -150,7 +150,7 @@ func Apply(rel *check.Result) error {
// ShouldAutoUpdate decides wether a new version should be applied
// checks against config setting and new version string. returns false in case of error
func ShouldAutoUpdate(setting config.AutoUpdateSetting, newVer string) bool {
if setting == config.UpdateNever {
if setting == config.AutoUpdateNever {
return false
}

Expand All @@ -165,7 +165,7 @@ func ShouldAutoUpdate(setting config.AutoUpdateSetting, newVer string) bool {

switch setting {

case config.UpdatePatch:
case config.AutoUpdatePatch:
if n[0] < c[0] {
return false
}
Expand All @@ -176,14 +176,14 @@ func ShouldAutoUpdate(setting config.AutoUpdateSetting, newVer string) bool {

return n[2] > c[2]

case config.UpdateMinor:
case config.AutoUpdateMinor:
if n[0] != c[0] {
return false
}

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++ {
if n[i] < c[i] {
return false
Expand Down Expand Up @@ -222,7 +222,7 @@ func CliCheckForUpdates(cfg *config.Config, confFile string) error {
// there is an update available

// if we autoupdate
if cfg.Version.AutoUpdate != config.UpdateNever {
if cfg.Version.AutoUpdate != config.AutoUpdateNever {
// and we should auto update
if ShouldAutoUpdate(cfg.Version.AutoUpdate, u.Version) {
log.Noticef("Applying update %s", u.Version)
Expand Down
46 changes: 23 additions & 23 deletions updates/updates_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,29 +21,29 @@ func TestShouldAutoUpdate(t *testing.T) {
currV, newV string
should bool
}{
{config.UpdateNever, "0.0.1", "1.0.0", false},
{config.UpdateNever, "0.0.1", "0.1.0", false},
{config.UpdateNever, "0.0.1", "0.0.1", false},
{config.UpdateNever, "0.0.1", "0.0.2", false},

{config.UpdatePatch, "0.0.1", "1.0.0", false},
{config.UpdatePatch, "0.0.1", "0.1.0", false},
{config.UpdatePatch, "0.0.1", "0.0.1", false},
{config.UpdatePatch, "0.0.2", "0.0.1", false},
{config.UpdatePatch, "0.0.1", "0.0.2", true},

{config.UpdateMinor, "0.1.1", "1.0.0", false},
{config.UpdateMinor, "0.1.1", "0.2.0", true},
{config.UpdateMinor, "0.1.1", "0.1.2", true},
{config.UpdateMinor, "0.2.1", "0.1.9", false},
{config.UpdateMinor, "0.1.2", "0.1.1", false},

{config.UpdateMajor, "1.0.0", "2.0.0", true},
{config.UpdateMajor, "1.0.0", "1.1.0", true},
{config.UpdateMajor, "1.0.0", "1.0.1", true},
{config.UpdateMajor, "2.0.0", "1.0.0", false}, // don't downgrade
{config.UpdateMajor, "2.5.0", "2.4.0", false},
{config.UpdateMajor, "2.0.2", "2.0.1", false},
{config.AutoUpdateNever, "0.0.1", "1.0.0", false},
{config.AutoUpdateNever, "0.0.1", "0.1.0", false},
{config.AutoUpdateNever, "0.0.1", "0.0.1", false},
{config.AutoUpdateNever, "0.0.1", "0.0.2", false},

{config.AutoUpdatePatch, "0.0.1", "1.0.0", false},
{config.AutoUpdatePatch, "0.0.1", "0.1.0", false},
{config.AutoUpdatePatch, "0.0.1", "0.0.1", false},
{config.AutoUpdatePatch, "0.0.2", "0.0.1", false},
{config.AutoUpdatePatch, "0.0.1", "0.0.2", true},

{config.AutoUpdateMinor, "0.1.1", "1.0.0", false},
{config.AutoUpdateMinor, "0.1.1", "0.2.0", true},
{config.AutoUpdateMinor, "0.1.1", "0.1.2", true},
{config.AutoUpdateMinor, "0.2.1", "0.1.9", false},
{config.AutoUpdateMinor, "0.1.2", "0.1.1", false},

{config.AutoUpdateMajor, "1.0.0", "2.0.0", true},
{config.AutoUpdateMajor, "1.0.0", "1.1.0", true},
{config.AutoUpdateMajor, "1.0.0", "1.0.1", true},
{config.AutoUpdateMajor, "2.0.0", "1.0.0", false}, // don't downgrade
{config.AutoUpdateMajor, "2.5.0", "2.4.0", false},
{config.AutoUpdateMajor, "2.0.2", "2.0.1", false},
}

for i, tc := range tests {
Expand Down