@@ -58,7 +58,7 @@ func reqMeta(st *state.State) *types.ReqMeta {
58
58
return req
59
59
}
60
60
61
- func updateFromResMeta (st * state.State , res * types.ResMeta , lastUpdateCheck * time.Time ) error {
61
+ func updateFromResMeta (st * state.State , res * types.ResMeta , latestKnownVersion * semver. Version , latestKnownVersionUpdatedAt * time.Time ) error {
62
62
changed := false
63
63
if st .AccountID == nil || res .AccountId != * st .AccountID {
64
64
st .AccountID = & res .AccountId
@@ -68,8 +68,18 @@ func updateFromResMeta(st *state.State, res *types.ResMeta, lastUpdateCheck *tim
68
68
st .MachineID = & res .MachineId
69
69
changed = true
70
70
}
71
- if st .LastUpdateCheckAt == nil && lastUpdateCheck != nil {
72
- st .LastUpdateCheckAt = lastUpdateCheck
71
+ if st .LatestKnownVersion == nil && latestKnownVersion != nil {
72
+ st .LatestKnownVersion = latestKnownVersion
73
+ changed = true
74
+ } else if st .LatestKnownVersion != nil && latestKnownVersion != nil && ! st .LatestKnownVersion .EQ (* latestKnownVersion ) {
75
+ st .LatestKnownVersion = latestKnownVersion
76
+ changed = true
77
+ }
78
+ if st .LastestKnownVersionUpdatedAt == nil && latestKnownVersionUpdatedAt != nil {
79
+ st .LastestKnownVersionUpdatedAt = latestKnownVersionUpdatedAt
80
+ changed = true
81
+ } else if st .LastestKnownVersionUpdatedAt != nil && latestKnownVersionUpdatedAt != nil && ! st .LastestKnownVersionUpdatedAt .Equal (* latestKnownVersionUpdatedAt ) {
82
+ st .LastestKnownVersionUpdatedAt = latestKnownVersionUpdatedAt
73
83
changed = true
74
84
}
75
85
if ! changed {
@@ -106,12 +116,7 @@ func versionCmd(
106
116
if err != nil {
107
117
return fmt .Errorf ("invalid semver received: %w" , err )
108
118
}
109
- log .Print (
110
- color .YellowString ("Update available %s -> %s." , semverVersion , nextSV ),
111
- )
112
- log .Print (
113
- color .YellowString ("Run %s to upgrade." , color .New (color .Bold ).Sprint ("humanlog version update" )),
114
- )
119
+ promptToUpdate (semverVersion , nextSV )
115
120
log .Printf ("- url: %s" , nextArtifact .Url )
116
121
log .Printf ("- sha256: %s" , nextArtifact .Sha256 )
117
122
log .Printf ("- sig: %s" , nextArtifact .Signature )
@@ -173,14 +178,14 @@ func checkForUpdate(ctx context.Context, cfg *config.Config, state *state.State)
173
178
msg := res .Msg
174
179
175
180
lastCheckAt := time .Now ()
176
- if err := updateFromResMeta (state , msg .Meta , & lastCheckAt ); err != nil {
177
- log .Printf ("failed to persist internal state: %v" , err )
178
- }
179
-
180
181
nextSV , err := msg .NextVersion .AsSemver ()
181
182
if err != nil {
182
183
return nil , nil , false , err
183
184
}
185
+ if err := updateFromResMeta (state , msg .Meta , & nextSV , & lastCheckAt ); err != nil {
186
+ log .Printf ("failed to persist internal state: %v" , err )
187
+ }
188
+
184
189
return msg .NextVersion , msg .NextArtifact , currentSV .LT (nextSV ), nil
185
190
}
186
191
@@ -207,3 +212,12 @@ func asyncCheckForUpdate(ctx context.Context, req *checkForUpdateReq, cfg *confi
207
212
}()
208
213
return out
209
214
}
215
+
216
+ func promptToUpdate (from , to semver.Version ) {
217
+ log .Print (
218
+ color .YellowString ("Update available %s -> %s." , from , to ),
219
+ )
220
+ log .Print (
221
+ color .YellowString ("Run `%s` to upgrade." , color .New (color .Bold ).Sprint ("humanlog version update" )),
222
+ )
223
+ }
0 commit comments