mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Implement changes for aufs driver
This commit is contained in:
parent
52f31657cc
commit
ed18844613
3 changed files with 89 additions and 18 deletions
45
aufs/aufs.go
45
aufs/aufs.go
|
@ -119,9 +119,13 @@ func (a *AufsDriver) Create(id, parent string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintln(f, parent)
|
if _, err := fmt.Fprintln(f, parent); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
for _, i := range ids {
|
for _, i := range ids {
|
||||||
fmt.Fprintln(f, i)
|
if _, err := fmt.Fprintln(f, i); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -212,7 +216,28 @@ func (a *AufsDriver) DiffSize(id string) (int64, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AufsDriver) Changes(id string) ([]archive.Change, error) {
|
func (a *AufsDriver) Changes(id string) ([]archive.Change, error) {
|
||||||
return nil, nil
|
layers, err := a.getParentLayerPaths(id)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return archive.Changes(layers, path.Join(a.rootPath(), "diff", id))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AufsDriver) getParentLayerPaths(id string) ([]string, error) {
|
||||||
|
parentIds, err := getParentIds(a.rootPath(), id)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(parentIds) == 0 {
|
||||||
|
return nil, fmt.Errorf("Dir %s does not have any parent layers", id)
|
||||||
|
}
|
||||||
|
layers := make([]string, len(parentIds))
|
||||||
|
|
||||||
|
// Get the diff paths for all the parent ids
|
||||||
|
for i, p := range parentIds {
|
||||||
|
layers[i] = path.Join(a.rootPath(), "diff", p)
|
||||||
|
}
|
||||||
|
return layers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AufsDriver) mount(id string) error {
|
func (a *AufsDriver) mount(id string) error {
|
||||||
|
@ -221,22 +246,14 @@ func (a *AufsDriver) mount(id string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
parentIds, err := getParentIds(a.rootPath(), id)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if len(parentIds) == 0 {
|
|
||||||
return fmt.Errorf("Dir %s does not have any parent layers", id)
|
|
||||||
}
|
|
||||||
var (
|
var (
|
||||||
target = path.Join(a.rootPath(), "mnt", id)
|
target = path.Join(a.rootPath(), "mnt", id)
|
||||||
rw = path.Join(a.rootPath(), "diff", id)
|
rw = path.Join(a.rootPath(), "diff", id)
|
||||||
layers = make([]string, len(parentIds))
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Get the diff paths for all the parent ids
|
layers, err := a.getParentLayerPaths(id)
|
||||||
for i, p := range parentIds {
|
if err != nil {
|
||||||
layers[i] = path.Join(a.rootPath(), "diff", p)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := a.aufsMount(layers, rw, target); err != nil {
|
if err := a.aufsMount(layers, rw, target); err != nil {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package aufs
|
package aufs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/dotcloud/docker/archive"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -331,6 +332,60 @@ func TestGetDiff(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestChanges(t *testing.T) {
|
||||||
|
d := newDriver(t)
|
||||||
|
defer os.RemoveAll(tmp)
|
||||||
|
|
||||||
|
if err := d.Create("1", ""); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := d.Create("2", "1"); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err := d.Cleanup(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
mntPoint, err := d.Get("2")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a file to save in the mountpoint
|
||||||
|
f, err := os.Create(path.Join(mntPoint, "test.txt"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := f.WriteString("testline"); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := f.Close(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
changes, err := d.Changes("2")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(changes) != 1 {
|
||||||
|
t.Fatalf("Dir 2 should have one change from parent got %d", len(changes))
|
||||||
|
}
|
||||||
|
change := changes[0]
|
||||||
|
|
||||||
|
expectedPath := "/test.txt"
|
||||||
|
if change.Path != expectedPath {
|
||||||
|
t.Fatalf("Expected path %s got %s", expectedPath, change.Path)
|
||||||
|
}
|
||||||
|
|
||||||
|
if change.Kind != archive.ChangeAdd {
|
||||||
|
t.Fatalf("Change kind should be ChangeAdd got %s", change.Kind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: How to properly test this?
|
/* FIXME: How to properly test this?
|
||||||
func TestDiffSize(t *testing.T) {
|
func TestDiffSize(t *testing.T) {
|
||||||
d := newDriver(t)
|
d := newDriver(t)
|
||||||
|
|
|
@ -38,10 +38,9 @@ func getParentIds(root, id string) ([]string, error) {
|
||||||
s := bufio.NewScanner(f)
|
s := bufio.NewScanner(f)
|
||||||
|
|
||||||
for s.Scan() {
|
for s.Scan() {
|
||||||
if err := s.Err(); err != nil {
|
if t := s.Text(); t != "" {
|
||||||
return nil, err
|
out = append(out, s.Text())
|
||||||
}
|
}
|
||||||
out = append(out, s.Text())
|
|
||||||
}
|
}
|
||||||
return out, nil
|
return out, s.Err()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue