Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(758)

Side by Side Diff: vpython/cipd/cipd.go

Issue 2963503003: [errors] Greatly simplify common/errors package. (Closed)
Patch Set: fix nits Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « vpython/application/subcommand_verify.go ('k') | vpython/options.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The LUCI Authors. All rights reserved. 1 // Copyright 2017 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0 2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file. 3 // that can be found in the LICENSE file.
4 4
5 package cipd 5 package cipd
6 6
7 import ( 7 import (
8 "golang.org/x/net/context" 8 "golang.org/x/net/context"
9 9
10 "github.com/luci/luci-go/vpython/api/vpython" 10 "github.com/luci/luci-go/vpython/api/vpython"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 } 54 }
55 55
56 // Build our aggregate template parameters. We prefer our template param eters 56 // Build our aggregate template parameters. We prefer our template param eters
57 // over the local system parameters. This allows us to override CIPD tem plate 57 // over the local system parameters. This allows us to override CIPD tem plate
58 // parameters elsewhere, and in the production case we will not override 58 // parameters elsewhere, and in the production case we will not override
59 // any CIPD template parameters. 59 // any CIPD template parameters.
60 template := common.TemplateArgs() 60 template := common.TemplateArgs()
61 if pl.Template != nil { 61 if pl.Template != nil {
62 loaderTemplate, err := pl.Template(c, e) 62 loaderTemplate, err := pl.Template(c, e)
63 if err != nil { 63 if err != nil {
64 » » » return errors.Annotate(err).Reason("failed to get CIPD t emplate arguments").Err() 64 » » » return errors.Annotate(err, "failed to get CIPD template arguments").Err()
65 } 65 }
66 for k, v := range loaderTemplate { 66 for k, v := range loaderTemplate {
67 template[k] = v 67 template[k] = v
68 } 68 }
69 } 69 }
70 70
71 // Create a single package list. Our VirtualEnv will be index 0 (need 71 // Create a single package list. Our VirtualEnv will be index 0 (need
72 // this so we can back-port it into its VirtualEnv property). 72 // this so we can back-port it into its VirtualEnv property).
73 // 73 //
74 // These will be updated to their resolved values in-place. 74 // These will be updated to their resolved values in-place.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 } 108 }
109 109
110 logging.Debugf(c, "\tUnresolved package: %s", pkg) 110 logging.Debugf(c, "\tUnresolved package: %s", pkg)
111 } 111 }
112 ef := ensure.File{ 112 ef := ensure.File{
113 PackagesBySubdir: map[string]ensure.PackageSlice{"": pslice}, 113 PackagesBySubdir: map[string]ensure.PackageSlice{"": pslice},
114 } 114 }
115 115
116 client, err := cipd.NewClient(opts) 116 client, err := cipd.NewClient(opts)
117 if err != nil { 117 if err != nil {
118 » » return errors.Annotate(err).Reason("failed to generate CIPD clie nt").Err() 118 » » return errors.Annotate(err, "failed to generate CIPD client").Er r()
119 } 119 }
120 120
121 // Start a CIPD client batch. 121 // Start a CIPD client batch.
122 client.BeginBatch(c) 122 client.BeginBatch(c)
123 defer client.EndBatch(c) 123 defer client.EndBatch(c)
124 124
125 // Resolve our ensure file. 125 // Resolve our ensure file.
126 resolved, err := ef.ResolveWith(func(pkg, vers string) (common.Pin, erro r) { 126 resolved, err := ef.ResolveWith(func(pkg, vers string) (common.Pin, erro r) {
127 pin, err := client.ResolveVersion(c, pkg, vers) 127 pin, err := client.ResolveVersion(c, pkg, vers)
128 if err != nil { 128 if err != nil {
129 » » » return pin, errors.Annotate(err).Reason("failed to resol ve package %(package)q at version %(version)q"). 129 » » » return pin, errors.Annotate(err, "failed to resolve pack age %q at version %q", pkg, vers).Err()
130 » » » » D("package", pkg).
131 » » » » D("version", vers).
132 » » » » Err()
133 } 130 }
134 131
135 logging.Fields{ 132 logging.Fields{
136 "package": pkg, 133 "package": pkg,
137 "version": vers, 134 "version": vers,
138 }.Debugf(c, "Resolved package to: %s", pin) 135 }.Debugf(c, "Resolved package to: %s", pin)
139 return pin, nil 136 return pin, nil
140 }, template) 137 }, template)
141 if err != nil { 138 if err != nil {
142 return err 139 return err
(...skipping 11 matching lines...) Expand all
154 // Ensure implement venv.PackageLoader. 151 // Ensure implement venv.PackageLoader.
155 // 152 //
156 // The packages must be valid (PackageIsComplete). If they aren't, Ensure will 153 // The packages must be valid (PackageIsComplete). If they aren't, Ensure will
157 // panic. 154 // panic.
158 // 155 //
159 // The CIPD client that is used for the operation is generated from the supplied 156 // The CIPD client that is used for the operation is generated from the supplied
160 // options, opts. 157 // options, opts.
161 func (pl *PackageLoader) Ensure(c context.Context, root string, packages []*vpyt hon.Spec_Package) error { 158 func (pl *PackageLoader) Ensure(c context.Context, root string, packages []*vpyt hon.Spec_Package) error {
162 pins, err := packagesToPins(packages) 159 pins, err := packagesToPins(packages)
163 if err != nil { 160 if err != nil {
164 » » return errors.Annotate(err).Reason("failed to convert packages t o CIPD pins").Err() 161 » » return errors.Annotate(err, "failed to convert packages to CIPD pins").Err()
165 } 162 }
166 pinSlice := common.PinSliceBySubdir{ 163 pinSlice := common.PinSliceBySubdir{
167 "": pins, 164 "": pins,
168 } 165 }
169 166
170 // Generate a CIPD client. Use the supplied root. 167 // Generate a CIPD client. Use the supplied root.
171 opts := pl.Options 168 opts := pl.Options
172 opts.Root = root 169 opts.Root = root
173 client, err := cipd.NewClient(opts) 170 client, err := cipd.NewClient(opts)
174 if err != nil { 171 if err != nil {
175 » » return errors.Annotate(err).Reason("failed to generate CIPD clie nt").Err() 172 » » return errors.Annotate(err, "failed to generate CIPD client").Er r()
176 } 173 }
177 174
178 // Start a CIPD client batch. 175 // Start a CIPD client batch.
179 client.BeginBatch(c) 176 client.BeginBatch(c)
180 defer client.EndBatch(c) 177 defer client.EndBatch(c)
181 178
182 actionMap, err := client.EnsurePackages(c, pinSlice, false) 179 actionMap, err := client.EnsurePackages(c, pinSlice, false)
183 if err != nil { 180 if err != nil {
184 » » return errors.Annotate(err).Reason("failed to install CIPD packa ges").Err() 181 » » return errors.Annotate(err, "failed to install CIPD packages").E rr()
185 } 182 }
186 if len(actionMap) > 0 { 183 if len(actionMap) > 0 {
187 errorCount := 0 184 errorCount := 0
188 for root, action := range actionMap { 185 for root, action := range actionMap {
189 errorCount += len(action.Errors) 186 errorCount += len(action.Errors)
190 for _, err := range action.Errors { 187 for _, err := range action.Errors {
191 logging.Errorf(c, "CIPD root %q action %q for pi n %q encountered error: %s", root, err.Action, err.Pin, err) 188 logging.Errorf(c, "CIPD root %q action %q for pi n %q encountered error: %s", root, err.Action, err.Pin, err)
192 } 189 }
193 } 190 }
194 if errorCount > 0 { 191 if errorCount > 0 {
195 » » » return errors.Reason("CIPD package installation encounte red %(count)d error(s)"). 192 » » » return errors.Reason("CIPD package installation encounte red %d error(s)", errorCount).Err()
196 » » » » D("count", errorCount).
197 » » » » Err()
198 } 193 }
199 } 194 }
200 return nil 195 return nil
201 } 196 }
202 197
203 func packagesToPins(packages []*vpython.Spec_Package) ([]common.Pin, error) { 198 func packagesToPins(packages []*vpython.Spec_Package) ([]common.Pin, error) {
204 pins := make([]common.Pin, len(packages)) 199 pins := make([]common.Pin, len(packages))
205 for i, pkg := range packages { 200 for i, pkg := range packages {
206 pins[i] = common.Pin{ 201 pins[i] = common.Pin{
207 PackageName: pkg.Name, 202 PackageName: pkg.Name,
208 InstanceID: pkg.Version, 203 InstanceID: pkg.Version,
209 } 204 }
210 } 205 }
211 return pins, nil 206 return pins, nil
212 } 207 }
OLDNEW
« no previous file with comments | « vpython/application/subcommand_verify.go ('k') | vpython/options.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698