diff options
| author | Laria Carolin Chabowski <laria@laria.me> | 2017-08-08 08:05:52 +0200 | 
|---|---|---|
| committer | Laria Carolin Chabowski <laria@laria.me> | 2017-09-26 21:35:40 +0200 | 
| commit | bab0697f0e8a98cfa28c7527ee616e954c7afe91 (patch) | |
| tree | 33c602bf39c4707ab4826ed6ba25c403cb07fe70 | |
| parent | a845956238e6a41479a7abd59f5c39e71f3f85f4 (diff) | |
| download | petrific-bab0697f0e8a98cfa28c7527ee616e954c7afe91.tar.gz petrific-bab0697f0e8a98cfa28c7527ee616e954c7afe91.tar.bz2 petrific-bab0697f0e8a98cfa28c7527ee616e954c7afe91.zip | |
Add OpenWritable to fs interfaces
| -rw-r--r-- | backup/backup_test.go | 6 | ||||
| -rw-r--r-- | backup/restore.go | 12 | ||||
| -rw-r--r-- | fs/fs.go | 3 | ||||
| -rw-r--r-- | fs/memory.go | 6 | ||||
| -rw-r--r-- | fs/os.go | 10 | 
5 files changed, 26 insertions, 11 deletions
| diff --git a/backup/backup_test.go b/backup/backup_test.go index 67fbb6a..da14117 100644 --- a/backup/backup_test.go +++ b/backup/backup_test.go @@ -49,13 +49,13 @@ func mkfile(t *testing.T, d fs.Dir, name string, exec bool, content []byte) {  		t.Fatalf("Could not create file %s: %s", name, err)  	} -	rwc, err := f.Open() +	wc, err := f.OpenWritable()  	if err != nil {  		t.Fatalf("Could not create file %s: %s", name, err)  	} -	defer rwc.Close() +	defer wc.Close() -	if _, err := rwc.Write(content); err != nil { +	if _, err := wc.Write(content); err != nil {  		t.Fatalf("Could not create file %s: %s", name, err)  	}  } diff --git a/backup/restore.go b/backup/restore.go index 6a03200..3a384a9 100644 --- a/backup/restore.go +++ b/backup/restore.go @@ -7,6 +7,7 @@ import (  	"code.laria.me/petrific/storage"  	"fmt"  	"io" +	"math/rand"  	"os"  ) @@ -48,21 +49,22 @@ func RestoreDir(s storage.Storage, id objects.ObjectId, root fs.Dir) error {  	for name, file_info := range tree {  		switch file_info.Type() {  		case objects.TETFile: -			tmpname := fmt.Sprintf(".petrific-%d-%s", os.Getpid(), id) +			tmpname := fmt.Sprintf(".petrific-%d-%08x%08x%08x%08x", os.Getpid(), rand.Uint32(), rand.Uint32(), rand.Uint32(), rand.Uint32())  			new_file, err := root.CreateChildFile(tmpname, execBitFromACL(file_info.ACL()))  			if err != nil {  				return err  			} -			rwc, err := new_file.Open() + +			wc, err := new_file.OpenWritable()  			if err != nil {  				return err  			} -			if err := RestoreFile(s, file_info.(objects.TreeEntryFile).Ref, rwc); err != nil { -				rwc.Close() +			if err := RestoreFile(s, file_info.(objects.TreeEntryFile).Ref, wc); err != nil { +				wc.Close()  				return err  			} -			rwc.Close() +			wc.Close()  			if err := root.RenameChild(tmpname, name); err != nil {  				return err @@ -23,7 +23,8 @@ type File interface {  type RegularFile interface {  	File -	Open() (io.ReadWriteCloser, error) +	Open() (io.ReadCloser, error) +	OpenWritable() (io.WriteCloser, error)  }  type Dir interface { diff --git a/fs/memory.go b/fs/memory.go index 221ff36..2bc11dc 100644 --- a/fs/memory.go +++ b/fs/memory.go @@ -40,7 +40,11 @@ type memfsFile struct {  func (memfsFile) Type() FileType { return FFile } -func (f memfsFile) Open() (io.ReadWriteCloser, error) { +func (f memfsFile) Open() (io.ReadCloser, error) { +	return f, nil +} + +func (f memfsFile) OpenWritable() (io.WriteCloser, error) {  	return f, nil  } @@ -58,7 +58,7 @@ func (f osFile) Delete() error {  	return os.RemoveAll(f.fullpath)  } -func (f osFile) Open() (io.ReadWriteCloser, error) { +func (f osFile) Open() (io.ReadCloser, error) {  	fh, err := os.Open(f.fullpath)  	if err != nil {  		return nil, err @@ -66,6 +66,14 @@ func (f osFile) Open() (io.ReadWriteCloser, error) {  	return fh, nil  } +func (f osFile) OpenWritable() (io.WriteCloser, error) { +	fh, err := os.Create(f.fullpath) +	if err != nil { +		return nil, err +	} +	return fh, nil +} +  func (f osFile) Readdir() (list []File, err error) {  	fh, err := os.Open(f.fullpath)  	if err != nil { | 
