aboutsummaryrefslogtreecommitdiff
path: root/repo.go
diff options
context:
space:
mode:
authorn-peugnet <n.peugnet@free.fr>2021-08-22 19:43:53 +0200
committern-peugnet <n.peugnet@free.fr>2021-08-22 19:43:53 +0200
commitf63d18f08e86b4135e466d5e88e03dda65466e6b (patch)
treec3455ed461a33f1d92038ea9da0b904998cb23b7 /repo.go
parent4df6871c2642dded074db47a39c75722896f8f1e (diff)
downloaddna-backup-f63d18f08e86b4135e466d5e88e03dda65466e6b.tar.gz
dna-backup-f63d18f08e86b4135e466d5e88e03dda65466e6b.zip
add store and load files list
Diffstat (limited to 'repo.go')
-rw-r--r--repo.go43
1 files changed, 41 insertions, 2 deletions
diff --git a/repo.go b/repo.go
index 9cde6fa..3a91407 100644
--- a/repo.go
+++ b/repo.go
@@ -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
+}