From c87b926a532da46f1d61243854faa1b5c373f87a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Correa=20G=C3=B3mez?= Date: Mon, 29 May 2023 23:06:31 +0200 Subject: [PATCH] Move logic to check if deviceinfo file exists to pkgs/deviceinfo (MR 37) This is mostly a preparatory commit to later be able to read the deviceinfo from multiple places. It has a bit better encapsulation, and makes the functions methods, so that they can update deviceinfo file in-place. --- cmd/mkinitfs/main.go | 16 +++------------- pkgs/deviceinfo/deviceinfo.go | 25 +++++++++++++++++-------- pkgs/deviceinfo/deviceinfo_test.go | 2 +- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/cmd/mkinitfs/main.go b/cmd/mkinitfs/main.go index 9f24f83..2480ba8 100644 --- a/cmd/mkinitfs/main.go +++ b/cmd/mkinitfs/main.go @@ -49,19 +49,9 @@ func main() { log.Default().SetFlags(log.Lmicroseconds) - deviceinfoFile := "/etc/deviceinfo" - if exists, err := misc.Exists(deviceinfoFile); !exists { - log.Printf("NOTE: %q not found, this file is required by mkinitfs.\n", deviceinfoFile) - return - } else if err != nil { - retCode = 1 - log.Printf("received unexpected error when getting status for %q: %s", deviceinfoFile, err) - return - } - - devinfo, err := deviceinfo.ReadDeviceinfo(deviceinfoFile) - if err != nil { - log.Println(err) + var devinfo deviceinfo.DeviceInfo + if err := devinfo.ReadDeviceinfo("/etc/deviceinfo"); err != nil { + log.Println("Error reading deviceinfo:", err) retCode = 1 return } diff --git a/pkgs/deviceinfo/deviceinfo.go b/pkgs/deviceinfo/deviceinfo.go index 1f9fdfe..3c509af 100644 --- a/pkgs/deviceinfo/deviceinfo.go +++ b/pkgs/deviceinfo/deviceinfo.go @@ -11,6 +11,8 @@ import ( "os" "reflect" "strings" + + "gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/misc" ) type DeviceInfo struct { @@ -21,24 +23,31 @@ type DeviceInfo struct { UbootBoardname string } -func ReadDeviceinfo(file string) (DeviceInfo, error) { - var deviceinfo DeviceInfo +// Reads the relevant entries from "file" into DeviceInfo struct +// Any already-set entries will be overwriten if they are present +// in "file" +func (d *DeviceInfo) ReadDeviceinfo(file string) error { + if exists, err := misc.Exists(file); !exists { + return fmt.Errorf("%q not found, required by mkinitfs", file) + } else if err != nil { + return fmt.Errorf("unexpected error getting status for %q: %s", file, err) + } fd, err := os.Open(file) if err != nil { - return deviceinfo, err + return err } defer fd.Close() - if err := unmarshal(fd, &deviceinfo); err != nil { - return deviceinfo, err + if err := d.unmarshal(fd); err != nil { + return err } - return deviceinfo, nil + return nil } // Unmarshals a deviceinfo into a DeviceInfo struct -func unmarshal(r io.Reader, devinfo *DeviceInfo) error { +func (d *DeviceInfo) unmarshal(r io.Reader) error { s := bufio.NewScanner(r) for s.Scan() { line := s.Text() @@ -74,7 +83,7 @@ func unmarshal(r io.Reader, devinfo *DeviceInfo) error { return fmt.Errorf("error parsing deviceinfo line, invalid format: %s", line) } - field := reflect.ValueOf(devinfo).Elem().FieldByName(fieldName) + field := reflect.ValueOf(d).Elem().FieldByName(fieldName) if !field.IsValid() { // an option that meets the deviceinfo "specification", but isn't // one we care about in this module diff --git a/pkgs/deviceinfo/deviceinfo_test.go b/pkgs/deviceinfo/deviceinfo_test.go index 9d3a396..452e64a 100644 --- a/pkgs/deviceinfo/deviceinfo_test.go +++ b/pkgs/deviceinfo/deviceinfo_test.go @@ -58,7 +58,7 @@ func TestUnmarshal(t *testing.T) { var d DeviceInfo for _, table := range tables { testName := fmt.Sprintf("unmarshal::'%s':", strings.ReplaceAll(table.in, "\n", "\\n")) - if err := unmarshal(strings.NewReader(table.in), &d); err != nil { + if err := d.unmarshal(strings.NewReader(table.in)); err != nil { t.Errorf("%s received an unexpected err: ", err) }