X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fnncp%2Fcmd%2Fnncp-reass%2Fmain.go;h=d6df787955f1310bd19f6f8a15d6f997901cb7d0;hb=dd92823db3d72fb21a4c712a7fb052dce16443dd;hp=1bb60093f25e7120361cfa4444490261f1b427c6;hpb=c87ba6cc4d15266a13d1193eb800c8cb6c5cfa75;p=nncp.git diff --git a/src/cypherpunks.ru/nncp/cmd/nncp-reass/main.go b/src/cypherpunks.ru/nncp/cmd/nncp-reass/main.go index 1bb6009..d6df787 100644 --- a/src/cypherpunks.ru/nncp/cmd/nncp-reass/main.go +++ b/src/cypherpunks.ru/nncp/cmd/nncp-reass/main.go @@ -1,11 +1,10 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2017 Sergey Matveev +Copyright (C) 2016-2019 Sergey Matveev This program 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 -(at your option) any later version. +the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -// Send file via NNCP +// Reassembly chunked file. package main import ( @@ -42,8 +41,8 @@ import ( func usage() { fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintln(os.Stderr, "nncp-reass -- reassemble chunked files\n") - fmt.Fprintf(os.Stderr, "Usage: %s [options] [FILE]\nOptions:\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "nncp-reass -- reassemble chunked files\n\n") + fmt.Fprintf(os.Stderr, "Usage: %s [options] [FILE.nncp.meta]\nOptions:\n", os.Args[0]) flag.PrintDefaults() fmt.Fprint(os.Stderr, ` Neither FILE, nor -node nor -all can be set simultaneously, @@ -203,9 +202,13 @@ func process(ctx *nncp.Ctx, path string, keep, dryRun, stdout, dumpMeta bool) bo } } } - dstW.Flush() + if err = dstW.Flush(); err != nil { + log.Fatalln("Can not flush:", err) + } if tmp != nil { - tmp.Sync() + if err = tmp.Sync(); err != nil { + log.Fatalln("Can not sync:", err) + } tmp.Close() } ctx.LogD("nncp-reass", sds, "written") @@ -264,17 +267,19 @@ func findMetas(ctx *nncp.Ctx, dirPath string) []string { func main() { var ( - cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") - allNodes = flag.Bool("all", false, "Process all found chunked files for all nodes") - nodeRaw = flag.String("node", "", "Process all found chunked files for that node") - keep = flag.Bool("keep", false, "Do not remove chunks while assembling") - dryRun = flag.Bool("dryrun", false, "Do not assemble whole file") - dumpMeta = flag.Bool("dump", false, "Print decoded human-readable meta FILE") - stdout = flag.Bool("stdout", false, "Output reassembled FILE to stdout") - quiet = flag.Bool("quiet", false, "Print only errors") - debug = flag.Bool("debug", false, "Print debug messages") - version = flag.Bool("version", false, "Print version information") - warranty = flag.Bool("warranty", false, "Print warranty information") + cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") + allNodes = flag.Bool("all", false, "Process all found chunked files for all nodes") + nodeRaw = flag.String("node", "", "Process all found chunked files for that node") + keep = flag.Bool("keep", false, "Do not remove chunks while assembling") + dryRun = flag.Bool("dryrun", false, "Do not assemble whole file") + dumpMeta = flag.Bool("dump", false, "Print decoded human-readable FILE.nncp.meta") + stdout = flag.Bool("stdout", false, "Output reassembled FILE to stdout") + spoolPath = flag.String("spool", "", "Override path to spool") + logPath = flag.String("log", "", "Override path to logfile") + quiet = flag.Bool("quiet", false, "Print only errors") + debug = flag.Bool("debug", false, "Print debug messages") + version = flag.Bool("version", false, "Print version information") + warranty = flag.Bool("warranty", false, "Print warranty information") ) flag.Usage = usage flag.Parse() @@ -287,16 +292,10 @@ func main() { return } - cfgRaw, err := ioutil.ReadFile(nncp.CfgPathFromEnv(cfgPath)) + ctx, err := nncp.CtxFromCmdline(*cfgPath, *spoolPath, *logPath, *quiet, *debug) if err != nil { - log.Fatalln("Can not read config:", err) + log.Fatalln("Error during initialization:", err) } - ctx, err := nncp.CfgParse(cfgRaw) - if err != nil { - log.Fatalln("Can not parse config:", err) - } - ctx.Quiet = *quiet - ctx.Debug = *debug var nodeOnly *nncp.Node if *nodeRaw != "" { @@ -320,10 +319,10 @@ func main() { } if flag.NArg() > 0 { - if !process(ctx, flag.Arg(0), *keep, *dryRun, *stdout, *dumpMeta) { - os.Exit(1) + if process(ctx, flag.Arg(0), *keep, *dryRun, *stdout, *dumpMeta) { + return } - return + os.Exit(1) } hasErrors := false @@ -337,7 +336,9 @@ func main() { if _, seen := seenMetaPaths[metaPath]; seen { continue } - hasErrors = hasErrors || !process(ctx, metaPath, *keep, *dryRun, false, false) + if !process(ctx, metaPath, *keep, *dryRun, false, false) { + hasErrors = true + } seenMetaPaths[metaPath] = struct{}{} } } @@ -346,7 +347,9 @@ func main() { log.Fatalln("Specified -node does not allow incoming") } for _, metaPath := range findMetas(ctx, *nodeOnly.Incoming) { - hasErrors = hasErrors || !process(ctx, metaPath, *keep, *dryRun, false, false) + if !process(ctx, metaPath, *keep, *dryRun, false, false) { + hasErrors = true + } } } if hasErrors {