From 02d614432874557cf725b99b984270f9e2ef6fe8 Mon Sep 17 00:00:00 2001 From: Isaac Guerreiro Date: Tue, 24 Aug 2021 02:35:21 -0300 Subject: [PATCH 1/2] Some helper functions for in download check if blake3 file already exist for some file, check if they're the same and choose if you want to update or not --- cmd/update.go | 43 +++++++++++++++++++++++++++++++++++++++++++ cmd/update_test.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 cmd/update.go create mode 100644 cmd/update_test.go diff --git a/cmd/update.go b/cmd/update.go new file mode 100644 index 0000000..ce94cee --- /dev/null +++ b/cmd/update.go @@ -0,0 +1,43 @@ +package cmd + +import ( + "bytes" + "io" + "io/ioutil" + "log" + "os" + "path/filepath" + "strings" + + "lukechampine.com/blake3" +) + +func CreateCheckSumFile(writePath string, filename string, reader io.ReadCloser) { + fileExtBlake3 := addBlakeExtension(filename) + file, _ := os.Create(filepath.Join(writePath, fileExtBlake3)) + var fileBytes []byte + fileBytes, _ = ioutil.ReadAll(reader) + byteHash := blake3.Sum256(fileBytes) + + hashReader := bytes.NewReader(byteHash[:]) + + if _, err := io.Copy(file, hashReader); err != nil { // that side effect I mentioned in the above for loop makes this possible to do out of loop. + log.Fatal(err) + } +} + +func isEqualFiles(writePath string, filename string, reader io.ReadCloser) bool { + fileExtBlake3 := addBlakeExtension(filename) + previousHash, _ := ioutil.ReadFile(filepath.Join(writePath, fileExtBlake3)) + var fileBytes []byte + fileBytes, _ = ioutil.ReadAll(reader) + newHash := blake3.Sum256(fileBytes) + return bytes.Equal(previousHash, newHash[:]) +} + +func addBlakeExtension(fileName string) string { + if pos := strings.LastIndexByte(fileName, '.'); pos != -1 { + return fileName[:pos] + ".blake3" + } + return fileName + ".blake3" +} diff --git a/cmd/update_test.go b/cmd/update_test.go new file mode 100644 index 0000000..0fe2e64 --- /dev/null +++ b/cmd/update_test.go @@ -0,0 +1,33 @@ +package cmd + +import ( + "fmt" + "log" + "net/http" +) + +func ExampleCreateCheckSumFile() { + response, err := http.Get("https://ftp.expasy.org/databases/rhea/rdf/rhea.rdf.gz") + + if err != nil { + log.Fatal(err) + } + + defer response.Body.Close() + + CreateCheckSumFile("../data/build", "rhea.rdf.gz", response.Body) + fmt.Println("Hello") + // Output: Hell +} + +func ExampleIsEqualFiles() { + response, err := http.Get("https://ftp.expasy.org/databases/rhea/rdf/rhea.rdf.gz") + + if err != nil { + log.Fatal(err) + } + + defer response.Body.Close() + fmt.Println(isEqualFiles("../data/build", "rhea.rdf.gz", response.Body)) + //Output: true +} From 15f9661f02a86eb1c2257462b0703ecbd2ad106c Mon Sep 17 00:00:00 2001 From: Isaac Guerreiro Date: Tue, 7 Sep 2021 21:35:27 -0300 Subject: [PATCH 2/2] Go mod and test function updated --- cmd/update_test.go | 14 -------------- data/build/rhea.rdf.blake3 | 2 ++ go.mod | 1 + 3 files changed, 3 insertions(+), 14 deletions(-) create mode 100644 data/build/rhea.rdf.blake3 diff --git a/cmd/update_test.go b/cmd/update_test.go index 0fe2e64..0691aa3 100644 --- a/cmd/update_test.go +++ b/cmd/update_test.go @@ -6,20 +6,6 @@ import ( "net/http" ) -func ExampleCreateCheckSumFile() { - response, err := http.Get("https://ftp.expasy.org/databases/rhea/rdf/rhea.rdf.gz") - - if err != nil { - log.Fatal(err) - } - - defer response.Body.Close() - - CreateCheckSumFile("../data/build", "rhea.rdf.gz", response.Body) - fmt.Println("Hello") - // Output: Hell -} - func ExampleIsEqualFiles() { response, err := http.Get("https://ftp.expasy.org/databases/rhea/rdf/rhea.rdf.gz") diff --git a/data/build/rhea.rdf.blake3 b/data/build/rhea.rdf.blake3 new file mode 100644 index 0000000..a3057f7 --- /dev/null +++ b/data/build/rhea.rdf.blake3 @@ -0,0 +1,2 @@ +�䊰*Mg�T5p2 +k�-��||">�T�!�ro: \ No newline at end of file diff --git a/go.mod b/go.mod index c646280..1bdc0f8 100644 --- a/go.mod +++ b/go.mod @@ -22,4 +22,5 @@ require ( golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gopkg.in/ini.v1 v1.62.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + lukechampine.com/blake3 v1.0.0 // indirect )