]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/sync.go
safcm: move sync.sendRecv to frontend package
[safcm/safcm.git] / cmd / safcm / sync.go
index c1ecc965eec221828788f2bf68acd1481f08d78e..2f297c8dc69288aa4017f57d4e741562740784d9 100644 (file)
@@ -44,6 +44,7 @@ type Sync struct {
 
        isTTY bool
 
+       loop    *frontend.Loop
        logFunc func(level safcm.LogLevel, escaped bool, msg string)
 }
 
@@ -66,22 +67,9 @@ func MainSync(args []string) error {
 
        flag.CommandLine.Parse(args[2:])
 
-       var level safcm.LogLevel
-       switch *optionLog {
-       case "error":
-               level = safcm.LogError
-       case "info":
-               level = safcm.LogInfo
-       case "verbose":
-               level = safcm.LogVerbose
-       case "debug":
-               level = safcm.LogDebug
-       case "debug2":
-               level = safcm.LogDebug2
-       case "debug3":
-               level = safcm.LogDebug3
-       default:
-               return fmt.Errorf("invalid -log value %q", *optionLog)
+       level, err := safcm.ParseLogLevel(*optionLog)
+       if err != nil {
+               return fmt.Errorf("-log: %v", err)
        }
 
        names := flag.Args()
@@ -127,15 +115,16 @@ func MainSync(args []string) error {
        var hosts []frontend.Host
        for _, x := range toSync {
                s := &Sync{
-                               host:      x,
-                               config:    cfg,
-                               allHosts:  allHosts,
-                               allGroups: allGroups,
-                               isTTY:     isTTY,
-                       }
+                       host:      x,
+                       config:    cfg,
+                       allHosts:  allHosts,
+                       allGroups: allGroups,
+                       isTTY:     isTTY,
+                       loop:      loop,
+               }
                s.logFunc = func(level safcm.LogLevel, escaped bool,
                        msg string) {
-                       loop.Log(s, level, escaped, msg)
+                       s.loop.Log(s, level, escaped, msg)
                }
                hosts = append(hosts, s)
        }
@@ -227,11 +216,11 @@ are only available after the hosts were contacted.
 func logEvent(x frontend.Event, level safcm.LogLevel, isTTY bool, failed *bool) {
        // We have multiple event sources so this is somewhat ugly.
        var prefix, data string
-       var color Color
+       var color frontend.Color
        if x.Error != nil {
                prefix = "[error]"
                data = x.Error.Error()
-               color = ColorRed
+               color = frontend.ColorRed
                // We logged an error, tell the caller
                *failed = true
        } else if x.Log.Level != 0 {
@@ -250,7 +239,7 @@ func logEvent(x frontend.Event, level safcm.LogLevel, isTTY bool, failed *bool)
                        prefix = "[debug2]"
                default:
                        prefix = fmt.Sprintf("[INVALID=%d]", x.Log.Level)
-                       color = ColorRed
+                       color = frontend.ColorRed
                }
                data = x.Log.Text
        } else {
@@ -267,19 +256,19 @@ func logEvent(x frontend.Event, level safcm.LogLevel, isTTY bool, failed *bool)
                        x.ConnEvent.Data = "remote helper upload in progress"
                default:
                        prefix = fmt.Sprintf("[INVALID=%d]", x.ConnEvent.Type)
-                       color = ColorRed
+                       color = frontend.ColorRed
                }
                data = x.ConnEvent.Data
        }
 
        host := x.Host.Name()
        if color != 0 {
-               host = ColorString(isTTY, color, host)
+               host = frontend.ColorString(isTTY, color, host)
        }
        // Make sure to escape control characters to prevent terminal
        // injection attacks
        if !x.Escaped {
-               data = EscapeControlCharacters(isTTY, data)
+               data = frontend.EscapeControlCharacters(isTTY, data)
        }
        log.Printf("%-9s [%s] %s", prefix, host, data)
 }
@@ -332,25 +321,3 @@ func (s *Sync) logDebugf(format string, a ...interface{}) {
 func (s *Sync) logVerbosef(format string, a ...interface{}) {
        s.log(safcm.LogVerbose, false, fmt.Sprintf(format, a...))
 }
-
-// sendRecv sends a message over conn and waits for the response. Any MsgLog
-// messages received before the final (non MsgLog) response are passed to
-// s.log.
-func (s *Sync) sendRecv(conn *rpc.Conn, msg safcm.Msg) (safcm.Msg, error) {
-       err := conn.Send(msg)
-       if err != nil {
-               return nil, err
-       }
-       for {
-               x, err := conn.Recv()
-               if err != nil {
-                       return nil, err
-               }
-               log, ok := x.(safcm.MsgLog)
-               if ok {
-                       s.log(log.Level, false, log.Text)
-                       continue
-               }
-               return x, nil
-       }
-}