// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import "fmt" type argvalues struct { osargs []string goos string goarch string } type argstate struct { state argvalues initialized bool } func ssleq(s1 []string, s2 []string) bool { if len(s1) != len(s2) { return false } for i := range s1 { if s1[i] != s2[i] { return false } } return true } func (a *argstate) Merge(state argvalues) { if !a.initialized { a.state = state a.initialized = true return } if !ssleq(a.state.osargs, state.osargs) { a.state.osargs = nil } if state.goos != a.state.goos { a.state.goos = "" } if state.goarch != a.state.goarch { a.state.goarch = "" } } func (a *argstate) ArgsSummary() map[string]string { m := make(map[string]string) if len(a.state.osargs) != 0 { m["argc"] = fmt.Sprintf("%d", len(a.state.osargs)) for k, a := range a.state.osargs { m[fmt.Sprintf("argv%d", k)] = a } } if a.state.goos != "" { m["GOOS"] = a.state.goos } if a.state.goarch != "" { m["GOARCH"] = a.state.goarch } return m }