From b0e076f374c8919ba29ec24a8cd27785a8e0827c Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Thu, 2 May 2013 15:30:03 -0700 Subject: [PATCH] Add output to checksums, code cleaning --- graph.go | 28 -------------------------- registry.go | 58 ++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 40 deletions(-) diff --git a/graph.go b/graph.go index f51597df9a..853f8c736b 100644 --- a/graph.go +++ b/graph.go @@ -286,31 +286,3 @@ func (graph *Graph) Heads() (map[string]*Image, error) { func (graph *Graph) imageRoot(id string) string { return path.Join(graph.Root, id) } - -func (graph *Graph) Checksums(repo Repository) ([]map[string]string, error) { - var result []map[string]string - checksums := map[string]string{} - for _, id := range repo { - img, err := graph.Get(id) - if err != nil { - return nil, err - } - err = img.WalkHistory(func(image *Image) error { - checksums[image.Id], err = image.Checksum() - return err - }) - if err != nil { - return nil, err - } - } - i := 0 - result = make([]map[string]string, len(checksums)) - for id, sum := range checksums { - result[i] = map[string]string{ - "id": id, - "checksum": sum, - } - i++ - } - return result, nil -} diff --git a/registry.go b/registry.go index 43738646db..b0faee3e71 100644 --- a/registry.go +++ b/registry.go @@ -95,7 +95,9 @@ func (graph *Graph) getImagesInRepository(repository string, authConfig *auth.Au if err != nil { return nil, err } - req.SetBasicAuth(authConfig.Username, authConfig.Password) + if authConfig != nil && len(authConfig.Username) > 0 { + req.SetBasicAuth(authConfig.Username, authConfig.Password) + } res, err := graph.getHttpClient().Do(req) if err != nil { return nil, err @@ -111,9 +113,12 @@ func (graph *Graph) getImagesInRepository(repository string, authConfig *auth.Au if err != nil { return nil, err } + imageList := []map[string]string{} + err = json.Unmarshal(jsonData, &imageList) if err != nil { + Debugf("Body: %s (%s)\n", res.Body, u) return nil, err } @@ -174,7 +179,7 @@ func (graph *Graph) getRemoteTags(stdout io.Writer, registries []string, reposit repository = "library/" + repository } for _, host := range registries { - endpoint := "https://" + host + "/v1/repositories/" + repository + "/tags" + endpoint := fmt.Sprintf("https://%s/v1/repositories/%s/tags", host, repository) req, err := http.NewRequest("GET", endpoint, nil) if err != nil { return nil, err @@ -433,12 +438,6 @@ func (graph *Graph) PushImage(stdout io.Writer, imgOrig *Image, registry string, // push a tag on the registry. // Remote has the format '/ func (graph *Graph) pushTag(remote, revision, tag, registry string, token []string) error { - - // Keep this for backward compatibility - if tag == "" { - tag = "lastest" - } - // "jsonify" the string revision = "\"" + revision + "\"" registry = "https://" + registry + "/v1" @@ -490,16 +489,17 @@ func (graph *Graph) pushPrimitive(stdout io.Writer, remote, tag, imgId, registry func (graph *Graph) PushRepository(stdout io.Writer, remote string, localRepo Repository, authConfig *auth.AuthConfig) error { client := graph.getHttpClient() - checksums, err := graph.Checksums(localRepo) - imgList := make([]map[string]string, len(checksums)) - checksums2 := make([]map[string]string, len(checksums)) + checksums, err := graph.Checksums(stdout, localRepo) if err != nil { return err } + imgList := make([]map[string]string, len(checksums)) + checksums2 := make([]map[string]string, len(checksums)) + uploadedImages, err := graph.getImagesInRepository(remote, authConfig) if err != nil { - return fmt.Errorf("Error occured while fetching the list: %v", err) + return fmt.Errorf("Error occured while fetching the list: %s", err) } // Filter list to only send images/checksums not already uploaded @@ -605,3 +605,37 @@ func (graph *Graph) PushRepository(stdout io.Writer, remote string, localRepo Re return nil } + +func (graph *Graph) Checksums(output io.Writer, repo Repository) ([]map[string]string, error) { + var result []map[string]string + checksums := map[string]string{} + for _, id := range repo { + img, err := graph.Get(id) + if err != nil { + return nil, err + } + err = img.WalkHistory(func(image *Image) error { + fmt.Fprintf(output, "Computing checksum for image %s\n", image.Id) + if _, exists := checksums[image.Id]; !exists { + checksums[image.Id], err = image.Checksum() + if err != nil { + return err + } + } + return nil + }) + if err != nil { + return nil, err + } + } + i := 0 + result = make([]map[string]string, len(checksums)) + for id, sum := range checksums { + result[i] = map[string]string{ + "id": id, + "checksum": sum, + } + i++ + } + return result, nil +}