From 095f59babbfbff5728102b2a64eec2a8b1af537f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lilian=20J=C3=B3nsd=C3=B3ttir?= Date: Sat, 27 Jul 2024 16:37:01 -0700 Subject: [PATCH] move filemode parsing to its own package why doesn't the std lib have this??? --- internal/filemode/filemode.go | 25 +++++++++++++++++++++++++ main.go | 21 ++++----------------- 2 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 internal/filemode/filemode.go diff --git a/internal/filemode/filemode.go b/internal/filemode/filemode.go new file mode 100644 index 0000000..81900d1 --- /dev/null +++ b/internal/filemode/filemode.go @@ -0,0 +1,25 @@ +package filemode + +import ( + "io/fs" + "strconv" +) + +// Parse parses a string of 3 or 4 numbers as a *NIX filesystem permission. +// +// "0777" or "777" -> fs.FileMode(0777) +// +// "0644" or "644" -> fs.FileMode(0644) +func Parse(in string) (fs.FileMode, error) { + if in == "" { + return fs.FileMode(0), nil + } + if len(in) == 3 { + in = "0" + in + } + md, e := strconv.ParseUint(in, 8, 64) + if e != nil { + return 0, e + } + return fs.FileMode(md), nil +} diff --git a/main.go b/main.go index 97655a8..d4236a5 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "strconv" "time" + "git.burning.moe/celediel/gt/internal/filemode" "git.burning.moe/celediel/gt/internal/files" "git.burning.moe/celediel/gt/internal/filter" "git.burning.moe/celediel/gt/internal/prompt" @@ -90,7 +91,7 @@ var ( ) if f == nil { - md, e := parseMode(m) + md, e := filemode.Parse(m) if e != nil { return e } @@ -118,7 +119,7 @@ var ( beforeCommands = func(ctx *cli.Context) (err error) { // setup filter if f == nil { - md, e := parseMode(m) + md, e := filemode.Parse(m) if e != nil { return e } @@ -130,7 +131,7 @@ var ( beforeTrash = func(_ *cli.Context) (err error) { if f == nil { - md, e := parseMode(m) + md, e := filemode.Parse(m) if e != nil { return e } @@ -558,17 +559,3 @@ func confirmTrash(confirm bool, fs files.Files) error { } return nil } - -func parseMode(in string) (fs.FileMode, error) { - if in == "" { - return fs.FileMode(0), nil - } - if len(m) == 3 { - in = "0" + in - } - md, e := strconv.ParseUint(in, 8, 64) - if e != nil { - return 0, e - } - return fs.FileMode(md), nil -}