diff options
-rw-r--r-- | src/pool-import/file-hasher.go | 58 | ||||
-rw-r--r-- | src/pool-import/main.go | 21 |
2 files changed, 74 insertions, 5 deletions
diff --git a/src/pool-import/file-hasher.go b/src/pool-import/file-hasher.go new file mode 100644 index 0000000..43dc6d9 --- /dev/null +++ b/src/pool-import/file-hasher.go @@ -0,0 +1,58 @@ +// +// pool-import +// +// Copyright (C) 2016 Christian Pointner <equinox@helsinki.at> +// +// This file is part of pool-import. +// +// pool-import is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// pool-import is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with pool-import. If not, see <http://www.gnu.org/licenses/>. +// + +package main + +import ( + "bytes" + "encoding/json" + "os" + "os/exec" +) + +type FileMap map[string]string + +// TODO: actually call this via ssh +func callFileHasher() (files FileMap, err error) { + var stdin, log *os.File + if stdin, err = os.Open("sample/file-hasher-requst.json"); err != nil { + return + } + if log, err = os.OpenFile("file-hasher.log", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0640); err != nil { + return + } + + cmd := exec.Command("bin/file-hasher") + var stdout bytes.Buffer + cmd.Stdin = stdin + cmd.Stdout = &stdout + cmd.Stderr = log + + if err = cmd.Run(); err != nil { + return + } + + if err = json.NewDecoder(&stdout).Decode(&files); err != nil { + return + } + + return +} diff --git a/src/pool-import/main.go b/src/pool-import/main.go index 0963ed0..8e68d15 100644 --- a/src/pool-import/main.go +++ b/src/pool-import/main.go @@ -42,11 +42,10 @@ func Done(res rhimport.Result, userdata interface{}) bool { } func main() { - if len(os.Args) < 3 { - log.Fatal("Usage: pool-import <pool group> <directory> [ <directory [ .. ] ]") + if len(os.Args) < 2 { + log.Fatal("Usage: pool-import <pool group>") } group := os.Args[1] - directories := os.Args[2:] conf, err := rhimport.NewConfig(RD_CONF, "http://localhost/rd-bin/rdxport.cgi", "/tmp/", "snd/") if err != nil { @@ -78,7 +77,7 @@ func main() { signal.Notify(C, os.Interrupt, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM) stdlog.Println("***************************************************************") - stdlog.Printf("*** will import into group '%s' from %d directories", group, len(directories)) + stdlog.Printf("*** will import into group '%s'", group) stdlog.Println("***************************************************************") carts, err := db.GetInterface().GetPoolCartList(rddb.PoolListEntry{Group: group}) @@ -96,7 +95,19 @@ func main() { C <- syscall.SIGTERM }() - // TODO: use file-hasher to get file hashes + files, err := callFileHasher() + if err != nil { + stdlog.Fatal("Calling file hasher failed:", err) + } + + stdlog.Println("") + stdlog.Printf(" %d files", len(files)) + stdlog.Println("****************************") + for hash, path := range files { + stdlog.Printf("%s: %s", hash, path) + } + stdlog.Println("****************************") + }() <-C |