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

Side by Side Diff: go/src/infra/tools/cipd/local/pkgdef.go

Issue 1129043003: cipd: Refactor client to make it more readable. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 5 years, 7 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package cipd 5 package local
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "io" 9 "io"
10 "io/ioutil" 10 "io/ioutil"
11 "path/filepath" 11 "path/filepath"
12 "regexp" 12 "regexp"
13 "sort" 13 "sort"
14 14
15 "github.com/go-yaml/yaml" 15 "github.com/go-yaml/yaml"
16
17 "infra/tools/cipd/common"
16 ) 18 )
17 19
18 // PackageDef defines how exactly to build a package: what files to put into it, 20 // PackageDef defines how exactly to build a package: what files to put into it,
19 // how to name them, how to name the package itself, etc. It is loaded from 21 // how to name them, how to name the package itself, etc. It is loaded from
20 // *.yaml file. 22 // *.yaml file.
21 type PackageDef struct { 23 type PackageDef struct {
22 // Package defines a name of the package. 24 // Package defines a name of the package.
23 Package string 25 Package string
24 // Root defines where to search for files, relative to package file itse lf. 26 // Root defines where to search for files, relative to package file itse lf.
25 Root string 27 Root string
(...skipping 28 matching lines...) Expand all
54 56
55 // Substitute variables in all strings. 57 // Substitute variables in all strings.
56 for _, str := range out.strings() { 58 for _, str := range out.strings() {
57 *str, err = subVars(*str, vars) 59 *str, err = subVars(*str, vars)
58 if err != nil { 60 if err != nil {
59 return 61 return
60 } 62 }
61 } 63 }
62 64
63 // Validate package name right away. 65 // Validate package name right away.
64 » err = ValidatePackageName(out.Package) 66 » err = common.ValidatePackageName(out.Package)
65 if err != nil { 67 if err != nil {
66 return 68 return
67 } 69 }
68 70
69 // Make sure "file" or "dir" are used, but not both. 71 // Make sure "file" or "dir" are used, but not both.
70 for i, chunk := range out.Data { 72 for i, chunk := range out.Data {
71 if chunk.File == "" && chunk.Dir == "" { 73 if chunk.File == "" && chunk.Dir == "" {
72 return out, fmt.Errorf("files entry #%d needs 'file' or 'dir' key", i) 74 return out, fmt.Errorf("files entry #%d needs 'file' or 'dir' key", i)
73 } 75 }
74 if chunk.File != "" && chunk.Dir != "" { 76 if chunk.File != "" && chunk.Dir != "" {
(...skipping 26 matching lines...) Expand all
101 } 103 }
102 104
103 // Used to skip duplicates. 105 // Used to skip duplicates.
104 seen := map[string]File{} 106 seen := map[string]File{}
105 add := func(f File) { 107 add := func(f File) {
106 if seen[f.Name()] == nil { 108 if seen[f.Name()] == nil {
107 seen[f.Name()] = f 109 seen[f.Name()] = f
108 } 110 }
109 } 111 }
110 112
111 » log.Info("Enumerating files to zip...") 113 » log.Infof("Enumerating files to zip...")
112 for _, chunk := range def.Data { 114 for _, chunk := range def.Data {
113 // Individual file. 115 // Individual file.
114 if chunk.File != "" { 116 if chunk.File != "" {
115 file, err := WrapFile(makeAbs(chunk.File), root, nil) 117 file, err := WrapFile(makeAbs(chunk.File), root, nil)
116 if err != nil { 118 if err != nil {
117 return nil, err 119 return nil, err
118 } 120 }
119 add(file) 121 add(file)
120 continue 122 continue
121 } 123 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 re, err := regexp.Compile(expr) 186 re, err := regexp.Compile(expr)
185 if err != nil { 187 if err != nil {
186 return nil, err 188 return nil, err
187 } 189 }
188 exps = append(exps, re) 190 exps = append(exps, re)
189 } 191 }
190 192
191 return func(abs string) bool { 193 return func(abs string) bool {
192 rel, err := filepath.Rel(startDir, abs) 194 rel, err := filepath.Rel(startDir, abs)
193 if err != nil { 195 if err != nil {
194 » » » log.Warnf("Unexpected error when evaluating %s: %s", abs , err) 196 » » » log.Warningf("Unexpected error when evaluating %s: %s", abs, err)
195 return true 197 return true
196 } 198 }
197 // Do not evaluate paths outside of startDir. 199 // Do not evaluate paths outside of startDir.
198 rel = filepath.ToSlash(rel) 200 rel = filepath.ToSlash(rel)
199 if rel[:3] == "../" { 201 if rel[:3] == "../" {
200 return false 202 return false
201 } 203 }
202 for _, exp := range exps { 204 for _, exp := range exps {
203 if exp.MatchString(rel) { 205 if exp.MatchString(rel) {
204 return true 206 return true
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 badKeys = append(badKeys, key) 254 badKeys = append(badKeys, key)
253 return match 255 return match
254 } 256 }
255 return val 257 return val
256 }) 258 })
257 if len(badKeys) != 0 { 259 if len(badKeys) != 0 {
258 return res, fmt.Errorf("Values for some variables are not provid ed: %v", badKeys) 260 return res, fmt.Errorf("Values for some variables are not provid ed: %v", badKeys)
259 } 261 }
260 return res, nil 262 return res, nil
261 } 263 }
OLDNEW
« no previous file with comments | « go/src/infra/tools/cipd/local/manifest_test.go ('k') | go/src/infra/tools/cipd/local/pkgdef_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698