From b2ed4102763421924b29ab4bb6be1a1e5b4b9647 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 22 Mar 2025 05:22:04 -0500 Subject: [PATCH] work on setting the hostname in the patchset --- hostname.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++ hostname_linux.go | 22 +++++++++++++++++++ http.go | 37 -------------------------------- init.go | 18 ---------------- patchset.Make.go | 54 ++++++++++++----------------------------------- patchset.Send.go | 38 +++++++++++++++++++++++++++++++++ patchset.proto | 1 + 7 files changed, 127 insertions(+), 96 deletions(-) create mode 100644 hostname.go create mode 100644 hostname_linux.go diff --git a/hostname.go b/hostname.go new file mode 100644 index 0000000..85d61c6 --- /dev/null +++ b/hostname.go @@ -0,0 +1,53 @@ +// +build linux + +package main + +import ( + "fmt" + "os" + "syscall" +) + +// scutil --get ComputerName + +// getDomainName fetches the domain name using the getdomainname syscall. +func getDomainName() (string, error) { + var buf [256]byte + err := syscall.Getdomainname(buf[:]) + if err != nil { + return "", fmt.Errorf("failed to get domain name: %w", err) + } + // Trim null bytes + n := 0 + for ; n < len(buf); n++ { + if buf[n] == 0 { + break + } + } + return string(buf[:n]), nil +} + +// GetFullHostname returns the hostname + domain name (if set). +func GetFullHostname() (string, error) { + host, err := os.Hostname() + if err != nil { + return "", fmt.Errorf("failed to get hostname: %w", err) + } + + domain, err := getDomainName() + if err != nil || domain == "" { + return host, nil // fallback to short hostname + } + + return fmt.Sprintf("%s.%s", host, domain), nil +} + +func main() { + fqdn, err := GetFullHostname() + if err != nil { + fmt.Println("Error:", err) + return + } + fmt.Println("Hostname + Domain:", fqdn) +} + diff --git a/hostname_linux.go b/hostname_linux.go new file mode 100644 index 0000000..4ab6dee --- /dev/null +++ b/hostname_linux.go @@ -0,0 +1,22 @@ +package main + +import ( + "fmt" + "os" + "syscall" +) + +// GetFullHostname returns the hostname + domain name (if set). +func getFullHostname() (string, error) { + host, err := os.Hostname() + if err != nil { + return "", fmt.Errorf("failed to get hostname: %w", err) + } + + domain, err := getDomainName() + if err != nil || domain == "" { + return host, nil // fallback to short hostname + } + + return fmt.Sprintf("%s.%s", host, domain), nil +} diff --git a/http.go b/http.go index dbc0cb0..6c7b116 100644 --- a/http.go +++ b/http.go @@ -11,36 +11,6 @@ import ( "go.wit.com/log" ) -/* -func (f *Forge) HttpPostMachine(url string) ([]byte, error) { - if f.Machine == nil { - // run f.InitMachine() here? - log.Info("you must run f.InitMachine()") - return nil, fmt.Errorf("you must run f.InitMachine()") - } - if f.Machine.Hostname == "" { - log.Info("WTF. hostname is blank") - } else { - log.Info("GOOD. hostname is set to", f.Machine.Hostname) - } - log.Info("GOOD2. hostname is set to", f.Machine.Hostname) - msg, err := f.Machine.Marshal() - if err != nil { - log.Info("proto.Marshal() failed:", err) - return nil, err - } - log.Info("GOOD3. hostname is set to", f.Machine.Hostname) - - check := new(zoopb.Machine) - check.Unmarshal(msg) - if check == nil { - log.Info("WTF. check == nil") - } - log.Info("good? check.hostname =", check.Hostname) - return f.HttpPost(url, msg) -} -*/ - func (f *Forge) HttpPost(url string, data []byte) ([]byte, error) { var err error var req *http.Request @@ -50,13 +20,6 @@ func (f *Forge) HttpPost(url string, data []byte) ([]byte, error) { usr, _ := user.Current() req.Header.Set("author", usr.Username) - /* - if f.Machine == nil { - // run f.InitMachine() here? - log.Info("you must run f.InitMachine()") - return nil, fmt.Errorf("you must run f.InitMachine()") - } - */ req.Header.Set("hostname", "fixme:hostname") client := &http.Client{} diff --git a/init.go b/init.go index 883fab4..94b58d3 100644 --- a/init.go +++ b/init.go @@ -145,28 +145,10 @@ func (f *Forge) InitPB() { } func (f *Forge) InitMachine() { - /* - f.Machine = new(zoopb.Machine) - if err := f.Machine.ConfigLoad(); err != nil { - log.Log(WARN, "zoopb.ConfigLoad() failed", err) - f.Machine.InitWit() - } - */ - if f.Config.Username == "" { usr, _ := user.Current() f.Config.Username = usr.Username } - - /* - if f.Machine.Hostname == "" { - r, err := shell.RunVerbose([]string{"hostname", "-f"}) - if err == nil { - tmp := strings.Join(r.Stdout, "\n") - f.Machine.Hostname = strings.TrimSpace(tmp) - } - } - */ } // only init's the protobuf. intended to not scan or change anything diff --git a/patchset.Make.go b/patchset.Make.go index 4368719..37c7c7d 100644 --- a/patchset.Make.go +++ b/patchset.Make.go @@ -14,13 +14,20 @@ import ( timestamppb "google.golang.org/protobuf/types/known/timestamppb" ) -// creates a patchset -// works from the user branches against the devel branches -func (f *Forge) MakeDevelPatchSet(name string) (*Patchset, error) { +func (f *Forge) newPatchset(name string) *Patchset { pset := new(Patchset) pset.Name = name pset.Ctime = timestamppb.New(time.Now()) pset.Uuid = uuid.New().String() + pset.Hostname = f.Machine.hostname + + return pset +} + +// creates a patchset +// works from the user branches against the devel branches +func (f *Forge) MakeDevelPatchSet(name string) (*Patchset, error) { + pset := newPatchset(name) if os.Getenv("GIT_AUTHOR_NAME") == "" { return nil, fmt.Errorf("GIT_AUTHOR_NAME not set") } else { @@ -65,19 +72,9 @@ func (f *Forge) MakeDevelPatchSet(name string) (*Patchset, error) { return pset, nil } -func (f *Forge) SubmitDevelPatchSet(name string) (*Patchset, error) { - pset, err := f.MakeDevelPatchSet(name) - if err != nil { - return nil, err - } - if err := f.submitPatchset(pset); err != nil { - return nil, err - } - return pset, nil -} - +/* func (f *Forge) MakeMasterPatchSet() (*Patchset, error) { - pset := new(Patchset) + pset := newPatchset("masterBranchPS") dir, err := os.MkdirTemp("", "forge") if err != nil { return nil, err @@ -107,6 +104,7 @@ func (f *Forge) MakeMasterPatchSet() (*Patchset, error) { } return pset, nil } +*/ func (pset *Patchset) makePatchSetNew(repo *gitpb.Repo) error { startBranch := pset.StartBranchName @@ -244,29 +242,3 @@ func onlyWalkDirs(pDir string) error { }) return baderr } - -func (f *Forge) submitPatchset(pset *Patchset) error { - var url string - url = forgeURL + "patchset" - msg, err := pset.Marshal() - if err != nil { - log.Info("proto.Marshal() failed:", err) - return err - } - log.Info("proto.Marshal() msg len", len(msg)) - body, err := f.HttpPost(url, msg) - if err != nil { - log.Info("httpPost() failed:", err) - return err - } - - test := strings.TrimSpace(string(body)) - lines := strings.Split(test, "\n") - count := 0 - for _, line := range lines { - log.Info("got back:", line) - count += 1 - } - log.Info("Total patches:", count) - return nil -} diff --git a/patchset.Send.go b/patchset.Send.go index 00fe37e..b3d4a96 100644 --- a/patchset.Send.go +++ b/patchset.Send.go @@ -5,6 +5,7 @@ package forgepb import ( "errors" + "strings" "time" "go.wit.com/log" @@ -25,3 +26,40 @@ func (f *Forge) SendPatchSet(pset *Patchset) error { return errors.New("don't know how to send yet") } + +func (f *Forge) SubmitDevelPatchSet(name string) (*Patchset, error) { + pset, err := f.MakeDevelPatchSet(name) + if err != nil { + return nil, err + } + if err := f.submitPatchset(pset); err != nil { + return nil, err + } + return pset, nil +} + +func (f *Forge) submitPatchset(pset *Patchset) error { + var url string + url = forgeURL + "patchset" + msg, err := pset.Marshal() + if err != nil { + log.Info("proto.Marshal() failed:", err) + return err + } + log.Info("proto.Marshal() msg len", len(msg)) + body, err := f.HttpPost(url, msg) + if err != nil { + log.Info("httpPost() failed:", err) + return err + } + + test := strings.TrimSpace(string(body)) + lines := strings.Split(test, "\n") + count := 0 + for _, line := range lines { + log.Info("got back:", line) + count += 1 + } + log.Info("Total patches:", count) + return nil +} diff --git a/patchset.proto b/patchset.proto index d8c859a..e00fb1c 100644 --- a/patchset.proto +++ b/patchset.proto @@ -77,6 +77,7 @@ message Patchset { // `autogenpb:mars string endBranchHash = 11; // string state = 12; // the state of the patch string uuid = 13; // `autogenpb:sort` `autogenpb:unique` + string hostname = 14; // } message Patchsets { // `autogenpb:marshal` `autogenpb:gui`