~james-page/ubuntu/wily/juju-core/mir-fixes

« back to all changes in this revision

Viewing changes to src/launchpad.net/juju-core/store/server.go

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-03-28 08:58:42 UTC
  • mfrom: (1.1.21)
  • Revision ID: package-import@ubuntu.com-20140328085842-cyzrgc120bdfxwj0
Tags: 1.17.7-0ubuntu1
* New upstream point release, including fixes for:
  - no debug log with all providers on Ubuntu 14.04 (LP: #1294776).
* d/control: Add cpu-checker dependency to juju-local (LP: #1297077).

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
        "launchpad.net/juju-core/log"
17
17
)
18
18
 
 
19
const DefaultSeries = "precise"
 
20
 
19
21
// Server is an http.Handler that serves the HTTP API of juju
20
22
// so that juju clients can retrieve published charms.
21
23
type Server struct {
74
76
        return []string{kind, curl.Series, curl.Name, curl.User}
75
77
}
76
78
 
 
79
func (s *Server) resolveURL(url string) (*charm.URL, error) {
 
80
        ref, series, err := charm.ParseReference(url)
 
81
        if err != nil {
 
82
                return nil, err
 
83
        }
 
84
        if series == "" {
 
85
                prefSeries, err := s.store.Series(ref)
 
86
                if err != nil {
 
87
                        return nil, err
 
88
                }
 
89
                if len(prefSeries) == 0 {
 
90
                        return nil, ErrNotFound
 
91
                }
 
92
                return &charm.URL{Reference: ref, Series: prefSeries[0]}, nil
 
93
        }
 
94
        return &charm.URL{Reference: ref, Series: series}, nil
 
95
}
 
96
 
77
97
func (s *Server) serveInfo(w http.ResponseWriter, r *http.Request) {
78
98
        if r.URL.Path != "/charm-info" {
79
99
                w.WriteHeader(http.StatusNotFound)
84
104
        for _, url := range r.Form["charms"] {
85
105
                c := &charm.InfoResponse{}
86
106
                response[url] = c
87
 
                curl, err := charm.ParseURL(url)
 
107
                curl, err := s.resolveURL(url)
88
108
                var info *CharmInfo
89
109
                if err == nil {
90
110
                        info, err = s.store.CharmInfo(curl)
92
112
                var skey []string
93
113
                if err == nil {
94
114
                        skey = charmStatsKey(curl, "charm-info")
 
115
                        c.CanonicalURL = curl.String()
95
116
                        c.Sha256 = info.BundleSha256()
96
117
                        c.Revision = info.Revision()
97
118
                        c.Digest = info.Digest()
98
119
                } else {
99
 
                        if err == ErrNotFound {
 
120
                        if err == ErrNotFound && curl != nil {
100
121
                                skey = charmStatsKey(curl, "charm-missing")
101
122
                        }
102
123
                        c.Errors = append(c.Errors, err.Error())
132
153
                }
133
154
                c := &charm.EventResponse{}
134
155
                response[url] = c
135
 
                curl, err := charm.ParseURL(url)
 
156
                curl, err := s.resolveURL(url)
136
157
                var event *CharmEvent
137
158
                if err == nil {
138
159
                        event, err = s.store.CharmEvent(curl, digest)
169
190
        if !strings.HasPrefix(r.URL.Path, "/charm/") {
170
191
                panic("serveCharm: bad url")
171
192
        }
172
 
        curl, err := charm.ParseURL("cs:" + r.URL.Path[len("/charm/"):])
 
193
        curl, err := s.resolveURL("cs:" + r.URL.Path[len("/charm/"):])
173
194
        if err != nil {
174
195
                w.WriteHeader(http.StatusNotFound)
175
196
                return