func runUpdate(jirix *jiri.X, _ []string) error { seq := jirix.NewSeq() // Create the $JIRI_ROOT/.jiri_root directory if it doesn't already exist. // // TODO(toddw): Remove this logic after the transition to .jiri_root is done. // The bootstrapping logic should create this directory, and jiri should fail // if the directory doesn't exist. if err := seq.MkdirAll(jirix.RootMetaDir(), 0755).Done(); err != nil { return err } // Update all projects to their latest version. // Attempt <attemptsFlag> times before failing. updateFn := func() error { return project.UpdateUniverse(jirix, gcFlag) } if err := retry.Function(jirix.Context, updateFn, retry.AttemptsOpt(attemptsFlag)); err != nil { return err } if err := project.WriteUpdateHistorySnapshot(jirix, ""); err != nil { return err } // Only attempt the bin dir transition after the update has succeeded, to // avoid messy partial states. return project.TransitionBinDir(jirix) }
func runUpdate(env *cmdline.Env, _ []string) error { ctx := tool.NewContextFromEnv(env) // Create a snapshot of the current state of all projects and // write it to the $JIRI_ROOT/.update_history folder. root, err := project.JiriRoot() if err != nil { return err } snapshotFile := filepath.Join(root, ".update_history", time.Now().Format(time.RFC3339)) if err := project.CreateSnapshot(ctx, snapshotFile); err != nil { return err } // Update all projects to their latest version. // Attempt <attemptsFlag> times before failing. updateFn := func() error { return project.UpdateUniverse(ctx, gcFlag) } return retry.Function(ctx, updateFn, retry.AttemptsOpt(attemptsFlag)) }