github.com/btwiuse/jiri@v0.0.0-20191125065820-53353bcfef54/cmd/jiri/run_hooks.go (about) 1 // Copyright 2017 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "github.com/btwiuse/jiri" 9 "github.com/btwiuse/jiri/cmdline" 10 "github.com/btwiuse/jiri/project" 11 ) 12 13 var runHooksFlags struct { 14 localManifest bool 15 hookTimeout uint 16 attempts uint 17 fetchPackages bool 18 } 19 20 var cmdRunHooks = &cmdline.Command{ 21 Runner: jiri.RunnerFunc(runHooks), 22 Name: "run-hooks", 23 Short: "Run hooks using local manifest", 24 Long: ` 25 Run hooks using local manifest JIRI_HEAD version if -local-manifest flag is 26 false, else it runs hooks using current manifest checkout version. 27 `, 28 } 29 30 func init() { 31 cmdRunHooks.Flags.BoolVar(&runHooksFlags.localManifest, "local-manifest", false, "Use local checked out manifest.") 32 cmdRunHooks.Flags.UintVar(&runHooksFlags.hookTimeout, "hook-timeout", project.DefaultHookTimeout, "Timeout in minutes for running the hooks operation.") 33 cmdRunHooks.Flags.UintVar(&runHooksFlags.attempts, "attempts", 1, "Number of attempts before failing.") 34 cmdRunHooks.Flags.BoolVar(&runHooksFlags.fetchPackages, "fetch-packages", true, "Use fetching packages using jiri.") 35 } 36 37 func runHooks(jirix *jiri.X, args []string) (err error) { 38 localProjects, err := project.LocalProjects(jirix, project.FastScan) 39 if err != nil { 40 return err 41 } 42 if runHooksFlags.attempts < 1 { 43 return jirix.UsageErrorf("Number of attempts should be >= 1") 44 } 45 jirix.Attempts = runHooksFlags.attempts 46 47 // Get hooks. 48 var projs project.Projects 49 var hooks project.Hooks 50 var pkgs project.Packages 51 if !runHooksFlags.localManifest { 52 projs, hooks, pkgs, err = project.LoadUpdatedManifest(jirix, localProjects, runHooksFlags.localManifest) 53 } else { 54 projs, hooks, pkgs, err = project.LoadManifestFile(jirix, jirix.JiriManifestFile(), localProjects, runHooksFlags.localManifest) 55 } 56 if err != nil { 57 return err 58 } 59 if err = project.RunHooks(jirix, hooks, runHooksFlags.hookTimeout); err != nil { 60 return err 61 } 62 if err := project.FilterOptionalProjectsPackages(jirix, jirix.FetchingAttrs, nil, pkgs); err != nil { 63 return err 64 } 65 // Get packages if the fetchPackages is true 66 if runHooksFlags.fetchPackages && len(pkgs) > 0 { 67 // Extend timeout for packages to be 5 times the timeout of a single hook. 68 return project.FetchPackages(jirix, projs, pkgs, runHooksFlags.hookTimeout*5) 69 } 70 return nil 71 }