aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dna/drive.go36
-rw-r--r--export/exporter.go24
-rw-r--r--main.go5
-rw-r--r--repo/export.go (renamed from repo/export_dir.go)8
4 files changed, 45 insertions, 28 deletions
diff --git a/dna/drive.go b/dna/drive.go
index 013c4b4..0f62d5e 100644
--- a/dna/drive.go
+++ b/dna/drive.go
@@ -25,6 +25,7 @@ import (
"os"
"path/filepath"
+ "github.com/n-peugnet/dna-backup/export"
"github.com/n-peugnet/dna-backup/logger"
"github.com/n-peugnet/dna-backup/utils"
)
@@ -56,23 +57,6 @@ type Header struct {
Files uint64
}
-type dnaVersion struct {
- Input dnaInput
- Output dnaOutput
-}
-
-type dnaInput struct {
- Chunks io.WriteCloser
- Recipe io.WriteCloser
- Files io.WriteCloser
-}
-
-type dnaOutput struct {
- Chunks io.ReadCloser
- Recipe io.ReadCloser
- Files io.ReadCloser
-}
-
func New(
destination string,
poolCount int,
@@ -105,20 +89,28 @@ func New(
}
}
-func (d *DnaDrive) VersionInput() (dnaInput, <-chan bool) {
+func (d *DnaDrive) ExportVersion() (export.Input, <-chan bool) {
rChunks, wChunks := io.Pipe()
rRecipe, wRecipe := io.Pipe()
rFiles, wFiles := io.Pipe()
- version := dnaVersion{
- Input: dnaInput{wChunks, wRecipe, wFiles},
- Output: dnaOutput{rChunks, rRecipe, rFiles},
+ version := export.Version{
+ Input: export.Input{
+ Chunks: wChunks,
+ Recipe: wRecipe,
+ Files: wFiles,
+ },
+ Output: export.Output{
+ Chunks: rChunks,
+ Recipe: rRecipe,
+ Files: rFiles,
+ },
}
end := make(chan bool)
go d.writeVersion(version.Output, end)
return version.Input, end
}
-func (d *DnaDrive) writeVersion(output dnaOutput, end chan<- bool) {
+func (d *DnaDrive) writeVersion(output export.Output, end chan<- bool) {
var err error
var recipe, files, version bytes.Buffer
n := d.write(output.Chunks, d.pools[1:], Forward)
diff --git a/export/exporter.go b/export/exporter.go
new file mode 100644
index 0000000..208fbd7
--- /dev/null
+++ b/export/exporter.go
@@ -0,0 +1,24 @@
+package export
+
+import "io"
+
+type Version struct {
+ Input
+ Output
+}
+
+type Input struct {
+ Chunks io.WriteCloser
+ Recipe io.WriteCloser
+ Files io.WriteCloser
+}
+
+type Output struct {
+ Chunks io.ReadCloser
+ Recipe io.ReadCloser
+ Files io.ReadCloser
+}
+
+type Exporter interface {
+ ExportVersion() (input Input, end <-chan bool)
+}
diff --git a/main.go b/main.go
index ae180b9..ce1c4b3 100644
--- a/main.go
+++ b/main.go
@@ -22,8 +22,10 @@ import (
"fmt"
"os"
+ "github.com/n-peugnet/dna-backup/dna"
"github.com/n-peugnet/dna-backup/logger"
"github.com/n-peugnet/dna-backup/repo"
+ "github.com/n-peugnet/dna-backup/utils"
)
type command struct {
@@ -137,7 +139,8 @@ func exportMain(args []string) error {
r := repo.NewRepo(source, chunkSize)
switch format {
case "dir":
- r.ExportDir(dest, trackSize)
+ exporter := dna.New(dest, 96, trackSize, 10000, utils.ZlibWriter, utils.ZlibReader)
+ r.Export(exporter)
case "csv":
fmt.Println("csv")
default:
diff --git a/repo/export_dir.go b/repo/export.go
index bffa7f0..dd12077 100644
--- a/repo/export_dir.go
+++ b/repo/export.go
@@ -20,18 +20,16 @@ package repo
import (
"io"
- "github.com/n-peugnet/dna-backup/dna"
+ "github.com/n-peugnet/dna-backup/export"
"github.com/n-peugnet/dna-backup/logger"
- "github.com/n-peugnet/dna-backup/utils"
)
-func (r *Repo) ExportDir(dest string, trackSize int) {
+func (r *Repo) Export(exporter export.Exporter) {
r.Init()
- exporter := dna.New(dest, 96, trackSize, 10000, utils.ZlibWriter, utils.ZlibReader)
chunks := r.loadChunks(r.versions)
for i := range r.versions {
var err error
- input, end := exporter.VersionInput()
+ input, end := exporter.ExportVersion()
if len(chunks[i]) > 0 {
for _, c := range chunks[i] {
_, err := io.Copy(input.Chunks, c.Reader())