Cleaned up fs.LayerStore.AddLayer()

This commit is contained in:
Solomon Hykes 2013-03-13 14:20:07 -07:00
parent 68e173ad50
commit 1b34630b8c

View file

@ -4,7 +4,6 @@ import (
"errors"
"fmt"
"github.com/dotcloud/docker/future"
"io"
"io/ioutil"
"os"
"path"
@ -88,33 +87,13 @@ func (store *LayerStore) AddLayer(id string, archive Archive) (string, error) {
if _, err := os.Stat(store.layerPath(id)); err == nil {
return "", fmt.Errorf("Layer already exists: %v", id)
}
errors := make(chan error)
// Untar
tmp, err := store.Mktemp()
defer os.RemoveAll(tmp)
if err != nil {
return "", fmt.Errorf("Mktemp failed: %s", err)
}
untarR, untarW := io.Pipe()
go func() {
errors <- Untar(untarR, tmp)
}()
_, err = io.Copy(untarW, archive)
untarW.Close()
if err != nil {
return "", err
}
// Wait for goroutines
for i := 0; i < 1; i += 1 {
select {
case err := <-errors:
{
if err != nil {
return "", err
}
}
}
if err := Untar(archive, tmp); err != nil {
return "", nil
}
layer := store.layerPath(id)
if !store.Exists(id) {