diff options
author | n-peugnet <n.peugnet@free.fr> | 2021-08-22 19:43:53 +0200 |
---|---|---|
committer | n-peugnet <n.peugnet@free.fr> | 2021-08-22 19:43:53 +0200 |
commit | f63d18f08e86b4135e466d5e88e03dda65466e6b (patch) | |
tree | c3455ed461a33f1d92038ea9da0b904998cb23b7 /repo.go | |
parent | 4df6871c2642dded074db47a39c75722896f8f1e (diff) | |
download | dna-backup-f63d18f08e86b4135e466d5e88e03dda65466e6b.tar.gz dna-backup-f63d18f08e86b4135e466d5e88e03dda65466e6b.zip |
add store and load files list
Diffstat (limited to 'repo.go')
-rw-r--r-- | repo.go | 43 |
1 files changed, 41 insertions, 2 deletions
@@ -11,13 +11,13 @@ repo/ │ │ ├── 000000000000001 │ │ ├── 000000000000002 │ │ ├── 000000000000003 -│ ├── dentries +│ ├── files │ └── recipe └── 00001/ ├── chunks/ │ ├── 000000000000000 │ ├── 000000000000001 - ├── dentries + ├── files └── recipe ``` */ @@ -25,6 +25,7 @@ repo/ package main import ( + "encoding/gob" "fmt" "io" "io/fs" @@ -48,6 +49,7 @@ func Commit(source string, repo string) { new := latest + 1 newPath := path.Join(repo, fmt.Sprintf("%05d", new)) newChunkPath := path.Join(newPath, "chunks") + newFilesPath := path.Join(newPath, "files") os.Mkdir(newPath, 0775) os.Mkdir(newChunkPath, 0775) newChunks := make(chan []byte, 16) @@ -56,6 +58,7 @@ func Commit(source string, repo string) { go LoadChunks(repo, oldChunks) go ReadFiles(files, newChunks) StoreChunks(newChunkPath, newChunks) + StoreFiles(newFilesPath, files) fmt.Println(files) } @@ -131,6 +134,22 @@ func ReadFiles(files []File, chunks chan<- []byte) { close(chunks) } +func StoreFiles(dest string, files []File) { + err := writeFile(dest, files) + if err != nil { + log.Println(err) + } +} + +func LoadFiles(repo string) []File { + files := make([]File, 0) + err := readFile(repo, &files) + if err != nil { + log.Println(err) + } + return files +} + func PrintChunks(chunks <-chan []byte) { for c := range chunks { fmt.Println(c) @@ -165,3 +184,23 @@ func LoadChunks(repo string, chunks chan<- []byte) { } close(chunks) } + +func writeFile(filePath string, object interface{}) error { + file, err := os.Create(filePath) + if err == nil { + encoder := gob.NewEncoder(file) + encoder.Encode(object) + } + file.Close() + return err +} + +func readFile(filePath string, object interface{}) error { + file, err := os.Open(filePath) + if err == nil { + decoder := gob.NewDecoder(file) + err = decoder.Decode(object) + } + file.Close() + return err +} |