From 8caefed85ae0253a1ea5b95a5a0ad25146b5d6d7 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 3 Jun 2018 21:00:55 -0400 Subject: cow-dedupe: Use sd_notify as appropriate --- .gitmodules | 6 ++++++ go/src/cow-dedupe/dedupe.go | 15 ++++++++++++++- go/src/git.lukeshu.com/go/libsystemd | 1 + go/src/golang.org/x/sys | 1 + go/src/lib/statusline/daemonstatus.go | 30 ++++++++++++++++++++++++++++++ go/src/lib/statusline/tee.go | 21 +++++++++++++++++++++ 6 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 .gitmodules create mode 160000 go/src/git.lukeshu.com/go/libsystemd create mode 160000 go/src/golang.org/x/sys create mode 100644 go/src/lib/statusline/daemonstatus.go create mode 100644 go/src/lib/statusline/tee.go diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f0ba993 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "go/src/git.lukeshu.com/go/libsystemd"] + path = go/src/git.lukeshu.com/go/libsystemd + url = https://git.lukeshu.com/go/libsystemd +[submodule "go/src/golang.org/x/sys"] + path = go/src/golang.org/x/sys + url = https://go.googlesource.com/sys diff --git a/go/src/cow-dedupe/dedupe.go b/go/src/cow-dedupe/dedupe.go index 84f03f8..4913f3d 100644 --- a/go/src/cow-dedupe/dedupe.go +++ b/go/src/cow-dedupe/dedupe.go @@ -28,7 +28,20 @@ func errhandle(err error) { } func myStatusLine() statusline.StatusLine { - return statusline.StopWatch(statusline.RateLimit(statusline.New(os.Stderr), time.Second/2), time.Second) + var outs []statusline.StatusLine + if C.isatty(2) != 0 { + outs = append(outs, statusline.StopWatch(statusline.RateLimit(statusline.New(os.Stderr), time.Second/2), time.Second)) + } + if os.Getenv("NOTIFY_SOCKET") != "" { + outs = append(outs, statusline.RateLimit(statusline.DaemonStatus(0), time.Second/2)) + } + if len(outs) == 0 { + outs = append(outs, statusline.New(os.Stderr)) + } + if len(outs) == 1 { + return outs[0] + } + return statusline.Tee(outs...) } func getFiemaps(paths []string) map[string][]string { diff --git a/go/src/git.lukeshu.com/go/libsystemd b/go/src/git.lukeshu.com/go/libsystemd new file mode 160000 index 0000000..0a43955 --- /dev/null +++ b/go/src/git.lukeshu.com/go/libsystemd @@ -0,0 +1 @@ +Subproject commit 0a43955333992153412a6b8a99b2825c3d0a74ca diff --git a/go/src/golang.org/x/sys b/go/src/golang.org/x/sys new file mode 160000 index 0000000..c11f84a --- /dev/null +++ b/go/src/golang.org/x/sys @@ -0,0 +1 @@ +Subproject commit c11f84a56e43e20a78cee75a7c034031ecf57d1f diff --git a/go/src/lib/statusline/daemonstatus.go b/go/src/lib/statusline/daemonstatus.go new file mode 100644 index 0000000..49599a7 --- /dev/null +++ b/go/src/lib/statusline/daemonstatus.go @@ -0,0 +1,30 @@ +package statusline + +import ( + "git.lukeshu.com/go/libsystemd/sd_daemon" +) + +type daemonStatus struct { + pid int +} + +func DaemonStatus(pid int) StatusLine { + return &daemonStatus{pid: pid} +} + +func (sl *daemonStatus) Put(line string) { + sd_daemon.Notification{ + PID: sl.pid, + State: "STATUS=" + line, + }.Send(false) +} + +func (sl *daemonStatus) End(keep bool) { + if keep { + return + } + sd_daemon.Notification{ + PID: sl.pid, + State: "STATUS=", + }.Send(false) +} diff --git a/go/src/lib/statusline/tee.go b/go/src/lib/statusline/tee.go new file mode 100644 index 0000000..a762a01 --- /dev/null +++ b/go/src/lib/statusline/tee.go @@ -0,0 +1,21 @@ +package statusline + +type tee struct { + outs []StatusLine +} + +func Tee(outs ...StatusLine) StatusLine { + return &tee{outs: outs} +} + +func (sl *tee) Put(line string) { + for _, out := range sl.outs { + out.Put(line) + } +} + +func (sl *tee) End(keep bool) { + for _, out := range sl.outs { + out.End(keep) + } +} -- cgit v1.2.3