From db060db4b193484c991a0831668f0f6978ea662e Mon Sep 17 00:00:00 2001 From: Arsen Musayelyan Date: Wed, 28 Dec 2022 18:40:20 -0800 Subject: [PATCH] Convert distro.ParseOSRelease() into a singleton --- distro/osrelease.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/distro/osrelease.go b/distro/osrelease.go index 26f75df..b7c0d85 100644 --- a/distro/osrelease.go +++ b/distro/osrelease.go @@ -46,8 +46,16 @@ type OSRelease struct { Logo string } -// OSReleaseName returns the NAME field of the +var parsed *OSRelease + +// OSReleaseName returns a struct parsed from the system's os-release +// file. It checks /etc/os-release as well as /usr/lib/os-release. +// The returned OSRelease struct is a singleton. func ParseOSRelease(ctx context.Context) (*OSRelease, error) { + if parsed != nil { + return parsed, nil + } + fl, err := os.Open("/usr/lib/os-release") if err != nil { fl, err = os.Open("/etc/os-release") @@ -99,5 +107,6 @@ func ParseOSRelease(ctx context.Context) (*OSRelease, error) { out.Like = strings.Split(runner.Vars["ID_LIKE"].Str, " ") } + parsed = out return out, nil }