Skip to content

Instantly share code, notes, and snippets.

@cardil
Created May 18, 2021 13:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cardil/120788c677bf6b02c9f2029a05081468 to your computer and use it in GitHub Desktop.
Save cardil/120788c677bf6b02c9f2029a05081468 to your computer and use it in GitHub Desktop.
func waitForUser() pkgupgrade.BackgroundOperation {
file, err := homedir.Expand(
fmt.Sprintf("~/.cache/waitForUser-%s.sock", uuid.NewString()),
)
ensure.NoError(err)
var mod time.Time
check := func() (bool, error) {
res, err := os.Stat(file)
if err != nil {
return false, err
}
return res.ModTime().After(mod), nil
}
setup := func(c pkgupgrade.Context) {
f, err := os.Create(file)
if err != nil {
c.T.Fatal(err)
}
c.Log.Info("Update a file to continue: ", f.Name())
res, err := os.Stat(f.Name())
if err != nil {
c.T.Fatal(err)
}
mod = res.ModTime()
}
verify := func(c pkgupgrade.Context) {
for {
if done, err := check(); done {
err = os.Remove(file)
if err != nil {
c.T.Fatal(err)
}
break
} else if err != nil {
c.T.Fatal("Problem checking file: ", err)
}
c.Log.Debug("Waiting for a file to update: ", file)
time.Sleep(time.Second)
}
}
return pkgupgrade.NewBackgroundVerification(
"waitForUser", setup, verify)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment