`)
}
-func process(ctx *nncp.Ctx, path string, keep, dryRun bool) bool {
+func process(ctx *nncp.Ctx, path string, keep, dryRun, stdout bool) bool {
fd, err := os.Open(path)
defer fd.Close()
if err != nil {
return true
}
- tmp, err := ioutil.TempFile(mainDir, "nncp-reass")
- if err != nil {
- log.Fatalln(err)
+ var dst io.Writer
+ var tmp *os.File
+ var sds nncp.SDS
+ if stdout {
+ dst = os.Stdout
+ sds = nncp.SDS{"path": path}
+ } else {
+ tmp, err = ioutil.TempFile(mainDir, "nncp-reass")
+ if err != nil {
+ log.Fatalln(err)
+ }
+ sds = nncp.SDS{"path": path, "tmp": tmp.Name()}
+ ctx.LogD("nncp-reass", sds, "created")
+ dst = tmp
}
- sds := nncp.SDS{"path": path, "tmp": tmp.Name()}
- ctx.LogD("nncp-reass", sds, "created")
- tmpW := bufio.NewWriter(tmp)
+ dstW := bufio.NewWriter(dst)
hasErrors := false
for chunkNum, chunkPath := range chunksPaths {
if err != nil {
log.Fatalln("Can not open file:", err)
}
- if _, err = io.Copy(tmpW, bufio.NewReader(fd)); err != nil {
+ if _, err = io.Copy(dstW, bufio.NewReader(fd)); err != nil {
log.Fatalln(err)
}
fd.Close()
}
}
}
- tmpW.Flush()
- tmp.Sync()
- tmp.Close()
+ dstW.Flush()
+ if tmp != nil {
+ tmp.Sync()
+ tmp.Close()
+ }
ctx.LogD("nncp-reass", sds, "written")
if !keep {
if err = os.Remove(path); err != nil {
hasErrors = true
}
}
+ if stdout {
+ ctx.LogI("nncp-reass", nncp.SDS{"path": path}, "done")
+ return !hasErrors
+ }
dstPathOrig := filepath.Join(mainDir, mainName)
dstPath := dstPathOrig
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")
+ 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")
}
if flag.NArg() > 0 {
- if !process(ctx, flag.Arg(0), *keep, *dryRun) {
+ if !process(ctx, flag.Arg(0), *keep, *dryRun, *stdout) {
os.Exit(1)
}
return
if _, seen := seenMetaPaths[metaPath]; seen {
continue
}
- hasErrors = hasErrors || !process(ctx, metaPath, *keep, *dryRun)
+ hasErrors = hasErrors || !process(ctx, metaPath, *keep, *dryRun, false)
seenMetaPaths[metaPath] = struct{}{}
}
}
log.Fatalln("Specified -node does not allow incoming")
}
for _, metaPath := range findMetas(ctx, *nodeOnly.Incoming) {
- hasErrors = hasErrors || !process(ctx, metaPath, *keep, *dryRun)
+ hasErrors = hasErrors || !process(ctx, metaPath, *keep, *dryRun, false)
}
}
if hasErrors {