func (i *Importer) download(buk *s3.Bucket, id string) error { tmpPath := path.Join(env.DIR, "graph", ":artmp:"+id) outPath := path.Join(env.DIR, "graph", id) os.MkdirAll(tmpPath, 0755) os.MkdirAll(path.Join(outPath, "layer"), 0755) key := fmt.Sprintf("/binary/repos/%s.layer", id) rc, err := buk.GetReader(key) if err != nil { return err } cmd := exec.Command("tar", "-f", "-", "-C", tmpPath, "-x") cmd.Stdin = rc cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Run() rc.Close() img := i.extract(id, tmpPath) if img.Parent != "" { if i.alreadyExists(img.Parent) { return fmt.Errorf("Parent layer %s already installed, not overwriting\n", img.Parent) } fmt.Printf("Moving to download parent %s...\n", img.Parent) return i.download(buk, img.Parent) } return nil }