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  }