@@ -19,36 +19,44 @@ type releaseInfo struct {
1919 URL string `json:"html_url"`
2020}
2121
22- func CheckForUpdate (handleUpdate chan func ()) {
23- // Only check for updates in production
24- if os .Getenv ("APP_ENV" ) != "production" {
25- handleUpdate <- nil
22+ func RunWhileCheckingForUpdate (isProduction bool , f func ()) {
23+ if isProduction {
24+ f ()
2625 return
2726 }
2827
28+ newReleaseChan := make (chan * releaseInfo )
29+ go checkForUpdate (newReleaseChan )
30+ f ()
31+
32+ newRelease := <- newReleaseChan
33+ if newRelease != nil {
34+ fmt .Printf (utils .Cyan (`
35+ A new version of gh is available! %s → %s
36+ Changelog: %s
37+ Run 'brew upgrade gh' to update!` )+ "\n \n " , command .Version , newRelease .Version , newRelease .URL )
38+ }
39+ }
40+
41+ func checkForUpdate (newReleaseChan chan * releaseInfo ) {
2942 // Ignore if this stdout is not a tty
3043 if ! terminal .IsTerminal (int (os .Stdout .Fd ())) {
31- handleUpdate <- nil
44+ newReleaseChan <- nil
3245 return
3346 }
3447
3548 latestRelease , err := getLatestRelease ()
3649 if err != nil {
37- handleUpdate <- nil
50+ newReleaseChan <- nil
3851 return
3952 }
4053
4154 updateAvailable := latestRelease .Version != command .Version
4255
4356 if updateAvailable {
44- handleUpdate <- func () {
45- fmt .Printf (utils .Cyan (`
46- A new version of gh is available! %s → %s
47- Changelog: %s
48- Run 'brew upgrade gh' to update!` )+ "\n \n " , command .Version , latestRelease .Version , latestRelease .URL )
49- }
57+ newReleaseChan <- latestRelease
5058 } else {
51- handleUpdate <- nil
59+ newReleaseChan <- nil
5260 }
5361}
5462
0 commit comments