Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(3014)

Delta Between Two Patch Sets: cmd/juju/synctools.go

Issue 8604043: environs/tools: new package
Left Patch Set: Created 10 years, 11 months ago
Right Patch Set: environs/tools: new package Created 10 years, 11 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « [revision details] ('k') | cmd/juju/synctools_test.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
1 package main 1 package main
2 2
3 import ( 3 import (
4 "bytes" 4 "bytes"
5 "fmt" 5 "fmt"
6 "io" 6 "io"
7 "launchpad.net/gnuflag" 7 "launchpad.net/gnuflag"
8 "launchpad.net/juju-core/cmd" 8 "launchpad.net/juju-core/cmd"
9 "launchpad.net/juju-core/environs" 9 "launchpad.net/juju-core/environs"
10 "launchpad.net/juju-core/log" 10 "launchpad.net/juju-core/log"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 return cmd.CheckEmpty(args) 51 return cmd.CheckEmpty(args)
52 } 52 }
53 53
54 var officialBucketAttrs = map[string]interface{}{ 54 var officialBucketAttrs = map[string]interface{}{
55 "name": "juju-public", 55 "name": "juju-public",
56 "type": "ec2", 56 "type": "ec2",
57 "control-bucket": "juju-dist", 57 "control-bucket": "juju-dist",
58 "access-key": "", 58 "access-key": "",
59 "secret-key": "", 59 "secret-key": "",
60 "authorized-keys": "not-really", // We shouldn't need ssh access 60 "authorized-keys": "not-really", // We shouldn't need ssh access
61 }
62
63 // Find the set of tools at the 'latest' version
64 func findNewest(fullTools []*state.Tools) []*state.Tools {
65 // This assumes the zero version of Number is always less than a real
66 // number, but we don't have negative versions, so this should be fine
67 var curBest version.Number
68 var res []*state.Tools
69 for _, tool := range fullTools {
70 if curBest.Less(tool.Number) {
71 // This tool is newer than our current best,
72 // so reset the list
73 res = []*state.Tools{tool}
74 curBest = tool.Number
75 } else if curBest == tool.Number {
76 res = append(res, tool)
77 }
78 }
79 return res
80 }
81
82 // Find tools that aren't present in target
83 func findMissing(sourceTools, targetTools []*state.Tools) []*state.Tools {
84 target := make(map[version.Binary]bool, len(targetTools))
85 for _, tool := range targetTools {
86 target[tool.Binary] = true
87 }
88 var res []*state.Tools
89 for _, tool := range sourceTools {
90 if !target[tool.Binary] {
91 res = append(res, tool)
92 }
93 }
94 return res
95 } 61 }
96 62
97 func copyOne( 63 func copyOne(
98 tool *state.Tools, source environs.StorageReader, 64 tool *state.Tools, source environs.StorageReader,
99 target environs.Storage, ctx *cmd.Context, 65 target environs.Storage, ctx *cmd.Context,
100 ) error { 66 ) error {
101 toolsPath := environs.ToolsStoragePath(tool.Binary) 67 toolsPath := environs.ToolsStoragePath(tool.Binary)
102 fmt.Fprintf(ctx.Stderr, "copying %v", toolsPath) 68 fmt.Fprintf(ctx.Stderr, "copying %v", toolsPath)
103 srcFile, err := source.Get(toolsPath) 69 srcFile, err := source.Get(toolsPath)
104 if err != nil { 70 if err != nil {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 if err != nil { 114 if err != nil {
149 return err 115 return err
150 } 116 }
151 targetEnv, err := environs.NewFromName(c.EnvName) 117 targetEnv, err := environs.NewFromName(c.EnvName)
152 if err != nil { 118 if err != nil {
153 log.Errorf("cmd/juju: unable to read %q from environment", c.Env Name) 119 log.Errorf("cmd/juju: unable to read %q from environment", c.Env Name)
154 return err 120 return err
155 } 121 }
156 toolsToCopy := sourceToolsList.Public 122 toolsToCopy := sourceToolsList.Public
157 if !c.allVersions { 123 if !c.allVersions {
158 » » toolsToCopy = findNewest(toolsToCopy) 124 » » toolsToCopy = toolsToCopy.Newest()
159 } 125 }
160 fmt.Fprintf(ctx.Stderr, "found %d tools in source (%d recent ones)\n", 126 fmt.Fprintf(ctx.Stderr, "found %d tools in source (%d recent ones)\n",
161 len(sourceToolsList.Public), len(toolsToCopy)) 127 len(sourceToolsList.Public), len(toolsToCopy))
162 for _, tool := range toolsToCopy { 128 for _, tool := range toolsToCopy {
163 log.Debugf("cmd/juju: found source tool: %s", tool) 129 log.Debugf("cmd/juju: found source tool: %s", tool)
164 } 130 }
165 fmt.Fprintf(ctx.Stderr, "listing target bucket\n") 131 fmt.Fprintf(ctx.Stderr, "listing target bucket\n")
166 targetToolsList, err := environs.ListTools(targetEnv, version.Current.Ma jor) 132 targetToolsList, err := environs.ListTools(targetEnv, version.Current.Ma jor)
167 if err != nil { 133 if err != nil {
168 return err 134 return err
169 } 135 }
170 for _, tool := range targetToolsList.Private { 136 for _, tool := range targetToolsList.Private {
171 log.Debugf("cmd/juju: found target tool: %s", tool) 137 log.Debugf("cmd/juju: found target tool: %s", tool)
172 } 138 }
173 targetTools := targetToolsList.Private 139 targetTools := targetToolsList.Private
174 targetStorage := targetEnv.Storage() 140 targetStorage := targetEnv.Storage()
175 if c.publicBucket { 141 if c.publicBucket {
176 targetTools = targetToolsList.Public 142 targetTools = targetToolsList.Public
177 var ok bool 143 var ok bool
178 if targetStorage, ok = targetEnv.PublicStorage().(environs.Stora ge); !ok { 144 if targetStorage, ok = targetEnv.PublicStorage().(environs.Stora ge); !ok {
179 return fmt.Errorf("Cannot write to PublicStorage") 145 return fmt.Errorf("Cannot write to PublicStorage")
180 } 146 }
181 147
182 } 148 }
183 » missing := findMissing(toolsToCopy, targetTools) 149 » missing := toolsToCopy.Exclude(targetTools)
184 fmt.Fprintf(ctx.Stdout, "found %d tools in target; %d tools to be copied \n", 150 fmt.Fprintf(ctx.Stdout, "found %d tools in target; %d tools to be copied \n",
185 len(targetTools), len(missing)) 151 len(targetTools), len(missing))
186 err = copyTools(missing, officialEnviron.PublicStorage(), targetStorage, c.dryRun, ctx) 152 err = copyTools(missing, officialEnviron.PublicStorage(), targetStorage, c.dryRun, ctx)
187 if err != nil { 153 if err != nil {
188 return err 154 return err
189 } 155 }
190 fmt.Fprintf(ctx.Stderr, "copied %d tools\n", len(missing)) 156 fmt.Fprintf(ctx.Stderr, "copied %d tools\n", len(missing))
191 return nil 157 return nil
192 } 158 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b