Automatically prompt for update

This commit is contained in:
Jingwen Owen Ou 2013-12-19 13:40:36 -08:00
Родитель a54faff669
Коммит 4dfb4c58db
2 изменённых файлов: 27 добавлений и 5 удалений

Просмотреть файл

@ -44,6 +44,12 @@ func (r *Runner) Execute() ExecError {
return newExecError(nil)
}
updater := NewUpdater()
err := updater.PromptForUpdate()
if err != nil {
return newExecError(err)
}
expandAlias(args)
slurpGlobalFlags(args)
@ -78,7 +84,7 @@ func (r *Runner) Execute() ExecError {
}
}
err := git.Spawn(args.Command, args.Params...)
err = git.Spawn(args.Command, args.Params...)
return newExecError(err)
}

Просмотреть файл

@ -29,12 +29,28 @@ type Updater struct {
CurrentVersion string
}
func (update *Updater) WantUpdate() bool {
if update.CurrentVersion == "dev" || readTime(updateTimestampPath).After(time.Now()) {
func (updater *Updater) PromptForUpdate() (err error) {
if updater.wantUpdate() {
fmt.Println("Would you like to check for updates?")
fmt.Print("Type Y to update gh: ")
var confirm string
fmt.Scan(&confirm)
if confirm == "Y" || confirm == "y" {
err = updater.Update()
}
}
return
}
func (updater *Updater) wantUpdate() bool {
if updater.CurrentVersion == "dev" || readTime(updateTimestampPath).After(time.Now()) {
return false
}
wait := 12*time.Hour + randDuration(8*time.Hour)
// the next update is in about 14 days
wait := 13*24*time.Hour + randDuration(24*time.Hour)
return writeTime(updateTimestampPath, time.Now().Add(wait))
}
@ -174,7 +190,7 @@ func readTime(path string) time.Time {
if err != nil {
return time.Now().Add(1000 * time.Hour)
}
t, err := time.Parse(time.RFC3339, string(p))
t, err := time.Parse(time.RFC3339, strings.TrimSpace(string(p)))
if err != nil {
return time.Now().Add(1000 * time.Hour)
}