~chrisppy/go-barefeed

d88eac15cf92662ab64f36e1dfa89b4392e7ab9b — Chris Palmer 1 year, 11 months ago ca7f0b0
comment out import/export for now
1 files changed, 142 insertions(+), 147 deletions(-)

M barefeed.go
M barefeed.go => barefeed.go +142 -147
@@ 4,14 4,9 @@
package barefeed

import (
	"archive/tar"
	"compress/gzip"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
	"time"

	"git.sr.ht/~sircmpwn/go-bare"
)


@@ 37,121 32,121 @@ type Exporter struct {

// NewImporter creates the importer based on the source path to the barefeed
// file.
func NewImporter(source ...string) *Importer {
	return &Importer{Path: filepath.Join(source...)}
}
//func NewImporter(source ...string) *Importer {
//	return &Importer{Path: filepath.Join(source...)}
//}

// Import a barefeed file to the target location
func (d *Importer) Import(target ...string) (err error) {
	var f *os.File
	f, err = os.Open(filepath.Clean(d.Path))
	if err != nil {
		return
	}

	defer func() {
		err = f.Close()
	}()

	var gzf *gzip.Reader
	gzf, err = gzip.NewReader(f)
	if err != nil {
		return
	}

	defer func() {
		err = gzf.Close()
	}()

	p := filepath.Join(target...)
	p = filepath.Join(p, "barefeed")

	tf := tar.NewReader(gzf)
	for {
		var exit bool
		if exit, err = writeFromArchive(tf, p); err != nil {
			return
		} else if exit {
			break
		}
	}

	return
}
//func (d *Importer) Import(target ...string) (err error) {
//	var f *os.File
//	f, err = os.Open(filepath.Clean(d.Path))
//	if err != nil {
//		return
//	}
//
//	defer func() {
//		err = f.Close()
//	}()
//
//	var gzf *gzip.Reader
//	gzf, err = gzip.NewReader(f)
//	if err != nil {
//		return
//	}
//
//	defer func() {
//		err = gzf.Close()
//	}()
//
//	p := filepath.Join(target...)
//	p = filepath.Join(p, "barefeed")
//
//	tf := tar.NewReader(gzf)
//	for {
//		var exit bool
//		if exit, err = writeFromArchive(tf, p); err != nil {
//			return
//		} else if exit {
//			break
//		}
//	}
//
//	return
//}

// NewExporter creates the exporter based on the directory path that contains
// the barefeed folder.
func NewExporter(directory ...string) *Exporter {
	d := filepath.Join(directory...)
	d = filepath.Join(d, "barefeed")
	return &Exporter{Path: d}
}
//func NewExporter(directory ...string) *Exporter {
//	d := filepath.Join(directory...)
//	d = filepath.Join(d, "barefeed")
//	return &Exporter{Path: d}
//}

// Export a barefeed file to the target location
func (d *Exporter) Export(target ...string) (err error) {
	if _, err = os.Stat(d.Path); err != nil {
		return
	}

	date := time.Now().Format("2006-01-02")

	path := filepath.Join(target...)
	path = filepath.Join(path, fmt.Sprintf("%s.barefeed", date))

	var f *os.File
	f, err = os.Create(path)
	if err != nil {
		return
	}
	defer func() {
		err = f.Close()
	}()

	gz := gzip.NewWriter(f)
	defer func() {
		err = gz.Close()
	}()

	tw := tar.NewWriter(gz)
	defer func() {
		err = tw.Close()
	}()

	err = filepath.Walk(d.Path, func(path string, fi os.FileInfo, e error) error {
		if e != nil {
			return e
		} else if !fi.Mode().IsRegular() {
			return nil
		}

		header, e := tar.FileInfoHeader(fi, fi.Name())
		if e != nil {
			return e
		}

		header.Name = strings.TrimPrefix(strings.Replace(path, d.Path, "", -1), string(filepath.Separator))

		if e := tw.WriteHeader(header); e != nil {
			return e
		}

		file, e := os.Open(filepath.Clean(path))
		if e != nil {
			return e
		}

		if _, e := io.Copy(tw, file); e != nil {
			if e := file.Close(); e != nil {
				return e
			}
			return e
		}

		return file.Close()
	})

	return
}
//func (d *Exporter) Export(target ...string) (err error) {
//	if _, err = os.Stat(d.Path); err != nil {
//		return
//	}
//
//	date := time.Now().Format("2006-01-02")
//
//	path := filepath.Join(target...)
//	path = filepath.Join(path, fmt.Sprintf("%s.barefeed", date))
//
//	var f *os.File
//	f, err = os.Create(path)
//	if err != nil {
//		return
//	}
//	defer func() {
//		err = f.Close()
//	}()
//
//	gz := gzip.NewWriter(f)
//	defer func() {
//		err = gz.Close()
//	}()
//
//	tw := tar.NewWriter(gz)
//	defer func() {
//		err = tw.Close()
//	}()
//
//	err = filepath.Walk(d.Path, func(path string, fi os.FileInfo, e error) error {
//		if e != nil {
//			return e
//		} else if !fi.Mode().IsRegular() {
//			return nil
//		}
//
//		header, e := tar.FileInfoHeader(fi, fi.Name())
//		if e != nil {
//			return e
//		}
//
//		header.Name = strings.TrimPrefix(strings.Replace(path, d.Path, "", -1), string(filepath.Separator))
//
//		if e := tw.WriteHeader(header); e != nil {
//			return e
//		}
//
//		file, e := os.Open(filepath.Clean(path))
//		if e != nil {
//			return e
//		}
//
//		if _, e := io.Copy(tw, file); e != nil {
//			if e := file.Close(); e != nil {
//				return e
//			}
//			return e
//		}
//
//		return file.Close()
//	})
//
//	return
//}

// Read will parse the provided directory for a barefeed directory
func Read(directory ...string) (FeedEntries, error) {


@@ 270,37 265,37 @@ func readFile(path ...string) (b Bin, err error) {
	return
}

func writeFromArchive(tf *tar.Reader, p string) (exit bool, err error) {
	var hdr *tar.Header
	hdr, err = tf.Next()
	if err == io.EOF {
		err = nil
		exit = true
		return
	} else if err != nil {
		return
	}

	path := filepath.Join(p, hdr.Name)
	info := hdr.FileInfo()
	if info.IsDir() {
		if err = os.MkdirAll(path, info.Mode()); err != nil {
			return
		}
		return
	}

	var file *os.File
	file, err = os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, info.Mode())
	if err != nil {
		return
	}

	defer func() {
		err = file.Close()
	}()

	_, err = io.Copy(file, tf)

	return
}
//func writeFromArchive(tf *tar.Reader, p string) (exit bool, err error) {
//	var hdr *tar.Header
//	hdr, err = tf.Next()
//	if err == io.EOF {
//		err = nil
//		exit = true
//		return
//	} else if err != nil {
//		return
//	}
//
//	path := filepath.Join(p, hdr.Name)
//	info := hdr.FileInfo()
//	if info.IsDir() {
//		if err = os.MkdirAll(path, info.Mode()); err != nil {
//			return
//		}
//		return
//	}
//
//	var file *os.File
//	file, err = os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, info.Mode())
//	if err != nil {
//		return
//	}
//
//	defer func() {
//		err = file.Close()
//	}()
//
//	_, err = io.Copy(file, tf)
//
//	return
//}