diff options
author | n-peugnet <n.peugnet@free.fr> | 2021-08-20 17:22:13 +0200 |
---|---|---|
committer | n-peugnet <n.peugnet@free.fr> | 2021-08-20 17:22:13 +0200 |
commit | 9f98d6ef4931f04b9023264f0e3408e4529c977d (patch) | |
tree | d05440a340287b88f2f037b9d9e2a49f68f55c69 /repo.go | |
parent | da20d649b3775c4c061ff2aeefe1cea44bac1d19 (diff) | |
download | dna-backup-9f98d6ef4931f04b9023264f0e3408e4529c977d.tar.gz dna-backup-9f98d6ef4931f04b9023264f0e3408e4529c977d.zip |
Store and Load chunks and
- also add a test for store and load
- precise channel direction in function args
Diffstat (limited to 'repo.go')
-rw-r--r-- | repo.go | 39 |
1 files changed, 29 insertions, 10 deletions
@@ -1,8 +1,6 @@ package main import ( - "crypto/sha1" - "encoding/hex" "fmt" "io" "io/fs" @@ -21,9 +19,9 @@ type File struct { Size int64 } -func ListFiles(path string, files chan File) { +func ListFiles(path string, files chan<- File) { err := filepath.Walk(path, - func(path string, i fs.FileInfo, err error) error { + func(p string, i fs.FileInfo, err error) error { if err != nil { log.Println(err) return err @@ -31,7 +29,7 @@ func ListFiles(path string, files chan File) { if i.IsDir() { return nil } - var file = File{path, i.Size()} + var file = File{p, i.Size()} files <- file return nil }) @@ -41,7 +39,7 @@ func ListFiles(path string, files chan File) { close(files) } -func ReadFiles(files chan File, chunks chan []byte) { +func ReadFiles(files <-chan File, chunks chan<- []byte) { var buff []byte var prev, read = chunkSize, 0 @@ -71,16 +69,37 @@ func ReadFiles(files chan File, chunks chan []byte) { close(chunks) } -func PrintChunks(chunks chan []byte) { +func PrintChunks(chunks <-chan []byte) { for c := range chunks { fmt.Println(c) } } -func DumpChunks(dest string, chunks chan []byte) { +func StoreChunks(dest string, chunks <-chan []byte) { + i := 0 for c := range chunks { - sum := sha1.Sum(c) - path := path.Join(dest, hex.EncodeToString(sum[:])) + path := path.Join(dest, fmt.Sprintf("%015d", i)) os.WriteFile(path, c, 0664) + i++ } } + +func LoadChunks(repo string, chunks chan<- []byte) { + err := filepath.WalkDir(repo, + func(p string, e fs.DirEntry, err error) error { + if err != nil { + log.Println(err) + return err + } + if e.IsDir() { + return nil + } + buff, err := os.ReadFile(p) + chunks <- buff + return nil + }) + if err != nil { + log.Println(err) + } + close(chunks) +} |