github.com/btwiuse/jiri@v0.0.0-20191125065820-53353bcfef54/cmd/jiri/fetch_pkgs.go (about)

     1  // Copyright 2018 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 fetchPkgsFlags struct {
    14  	localManifest    bool
    15  	fetchPkgsTimeout uint
    16  	attempts         uint
    17  }
    18  
    19  var cmdFetchPkgs = &cmdline.Command{
    20  	Runner: jiri.RunnerFunc(runFetchPkgs),
    21  	Name:   "fetch-packages",
    22  	Short:  "Fetch cipd packages using JIRI_HEAD version manifest",
    23  	Long: `
    24  Fetch cipd packages using local manifest JIRI_HEAD version if -local-manifest flag is
    25  false, otherwise it fetches cipd packages using current manifest checkout version.
    26  `,
    27  }
    28  
    29  func init() {
    30  	cmdFetchPkgs.Flags.BoolVar(&fetchPkgsFlags.localManifest, "local-manifest", false, "Use local checked out manifest.")
    31  	cmdFetchPkgs.Flags.UintVar(&fetchPkgsFlags.fetchPkgsTimeout, "fetch-packages-timeout", project.DefaultPackageTimeout, "Timeout in minutes for fetching prebuilt packages using cipd.")
    32  	cmdFetchPkgs.Flags.UintVar(&fetchPkgsFlags.attempts, "attempts", 1, "Number of attempts before failing.")
    33  }
    34  
    35  func runFetchPkgs(jirix *jiri.X, args []string) (err error) {
    36  	localProjects, err := project.LocalProjects(jirix, project.FastScan)
    37  	if err != nil {
    38  		return err
    39  	}
    40  	if fetchPkgsFlags.attempts < 1 {
    41  		return jirix.UsageErrorf("Number of attempts should be >= 1")
    42  	}
    43  	jirix.Attempts = fetchPkgsFlags.attempts
    44  
    45  	// Get pkgs.
    46  	var pkgs project.Packages
    47  	var projs project.Projects
    48  	if !fetchPkgsFlags.localManifest {
    49  		projs, _, pkgs, err = project.LoadUpdatedManifest(jirix, localProjects, fetchPkgsFlags.localManifest)
    50  	} else {
    51  		projs, _, pkgs, err = project.LoadManifestFile(jirix, jirix.JiriManifestFile(), localProjects, fetchPkgsFlags.localManifest)
    52  	}
    53  	if err != nil {
    54  		return err
    55  	}
    56  	if err := project.FilterOptionalProjectsPackages(jirix, jirix.FetchingAttrs, nil, pkgs); err != nil {
    57  		return err
    58  	}
    59  	if len(pkgs) > 0 {
    60  		return project.FetchPackages(jirix, projs, pkgs, fetchPkgsFlags.fetchPkgsTimeout)
    61  	}
    62  	return nil
    63  }