X-Git-Url: http://www.git.cypherpunks.ru/?p=nncp.git;a=blobdiff_plain;f=src%2Fcmd%2Fnncp-rm%2Fmain.go;h=814028c74cc0a23002489d9f590e43bb35bc38e3;hp=67f66574f1a9c5d48ced22f41c7a263c1861e306;hb=ba16c17a029e3a1b2c836915b2473edcee259277;hpb=6dc8ef3b800aa15476f1c745339d4445e622efbe diff --git a/src/cmd/nncp-rm/main.go b/src/cmd/nncp-rm/main.go index 67f6657..814028c 100644 --- a/src/cmd/nncp-rm/main.go +++ b/src/cmd/nncp-rm/main.go @@ -21,6 +21,7 @@ package main import ( "flag" "fmt" + "io" "log" "os" "path/filepath" @@ -43,7 +44,7 @@ func usage() { fmt.Fprintf(os.Stderr, " %s [options] {-all|-node NODE} -hdr\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] {-all|-node NODE} -area\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] {-all|-node NODE} {-rx|-tx}\n", os.Args[0]) - fmt.Fprintf(os.Stderr, " %s [options] {-all|-node NODE} -pkt PKT\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s [options] {-all|-node NODE} -pkt < ...\n", os.Args[0]) fmt.Fprintln(os.Stderr, "-older option's time units are: (s)econds, (m)inutes, (h)ours, (d)ays") fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() @@ -65,7 +66,7 @@ func main() { doArea = flag.Bool("area", false, "Remove only area/* seen files") older = flag.String("older", "", "XXX{smhd}: only older than XXX number of time units") dryRun = flag.Bool("dryrun", false, "Do not actually remove files") - pktRaw = flag.String("pkt", "", "Packet to remove") + doPkt = flag.Bool("pkt", false, "Packet to remove TODO") spoolPath = flag.String("spool", "", "Override path to spool") quiet = flag.Bool("quiet", false, "Print only errors") debug = flag.Bool("debug", false, "Print debug messages") @@ -114,6 +115,21 @@ func main() { } oldBoundary := time.Second * time.Duration(oldBoundaryRaw) + pkts := make(map[string]struct{}) + if *doPkt { + raw, err := io.ReadAll(os.Stdin) + if err != nil { + log.Fatalln("can not read -pkt from stdin:", err) + } + for _, line := range strings.Split(string(raw), "\n") { + if len(line) == 0 { + continue + } + cols := strings.Split(line, "/") + pkts[cols[len(cols)-1]] = struct{}{} + } + } + now := time.Now() if *doTmp { err = filepath.Walk( @@ -215,12 +231,14 @@ func main() { } return os.Remove(path) } - if *pktRaw != "" && filepath.Base(info.Name()) == *pktRaw { - ctx.LogI("rm", nncp.LEs{{K: "File", V: path}}, logMsg) - if *dryRun { - return nil + if len(pkts) > 0 { + if _, exists := pkts[filepath.Base(info.Name())]; exists { + ctx.LogI("rm", nncp.LEs{{K: "File", V: path}}, logMsg) + if *dryRun { + return nil + } + return os.Remove(path) } - return os.Remove(path) } if !*doSeen && !*doNoCK && !*doHdr && !*doPart && (*doRx || *doTx) && @@ -234,12 +252,12 @@ func main() { return nil }) } - if *pktRaw != "" || *doRx || *doNoCK || *doPart { + if len(pkts) > 0 || *doRx || *doNoCK || *doPart { if err = remove(nncp.TRx); err != nil { log.Fatalln("Can not remove:", err) } } - if *pktRaw != "" || *doTx || *doHdr { + if len(pkts) > 0 || *doTx || *doHdr { if err = remove(nncp.TTx); err != nil { log.Fatalln("Can not remove:", err) } @@ -315,9 +333,12 @@ func main() { return nil } if now.Sub(info.ModTime()) < oldBoundary { - ctx.LogD("rm-skip", nncp.LEs{{K: "File", V: path}}, func(les nncp.LEs) string { - return fmt.Sprintf("File %s: too fresh, skipping", path) - }) + ctx.LogD( + "rm-skip", nncp.LEs{{K: "File", V: path}}, + func(les nncp.LEs) string { + return fmt.Sprintf("File %s: too fresh, skipping", path) + }, + ) return nil } ctx.LogI(