From 768b22ab031be36d65fbbd97b4600ad268f8d818 Mon Sep 17 00:00:00 2001 From: suguo Date: Thu, 1 Sep 2022 06:43:03 +0800 Subject: [PATCH] init --- .gitignore | 3 ++- go.mod | 3 +++ main.go | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 go.mod create mode 100644 main.go diff --git a/.gitignore b/.gitignore index f4d432a..c7ed815 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ # Dependency directories (remove the comment below to include it) # vendor/ - +.vscode/ +version diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d46fd17 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module myschools.me/suguo/version + +go 1.19 diff --git a/main.go b/main.go new file mode 100644 index 0000000..5b6c568 --- /dev/null +++ b/main.go @@ -0,0 +1,65 @@ +package main + +import ( + "fmt" + "io/ioutil" + "os" + "os/user" + "strconv" +) + +func main() { + if len(os.Args) < 2 { + return + } + + u, err := user.Current() + if err != nil { + fmt.Print("none") + return + } + dir := fmt.Sprintf("%s/.version", u.HomeDir) + if err := os.MkdirAll(dir, os.ModePerm); err != nil { + fmt.Print("none") + return + } + fname := fmt.Sprintf(`%s/%s`, dir, os.Args[1]) + v, err := versionGet(&fname) + if err != nil { + fmt.Print("none") + } + versionSet(&fname, v) + fmt.Print(v) +} + +func versionGet(fname *string) (v uint64, err error) { + f, err := os.OpenFile(*fname, os.O_RDONLY|os.O_CREATE, 0600) + if err != nil { + return + } + defer f.Close() + + b, err := ioutil.ReadAll(f) + if err != nil { + return + } + + v, _ = strconv.ParseUint(string(b), 10, 64) + v++ + return +} + +func versionSet(fname *string, v uint64) error { + f, err := os.OpenFile(*fname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) + if err != nil { + return err + } + defer f.Close() + + buf := strconv.FormatUint(v, 10) + if _, err := f.WriteString(buf); err != nil { + return err + } + + return nil +}