From 0e370425bd9d918a845a1ccec4aa936f9f440b65 Mon Sep 17 00:00:00 2001 From: Shuo Date: Sat, 30 May 2020 19:15:12 +0800 Subject: [PATCH 1/2] A: v1.6.1 --- internal/base/base.go | 8 ++------ internal/leetcode/topic_tag.go | 7 ++++--- internal/version/version.go | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/internal/base/base.go b/internal/base/base.go index 79657f50e..37cd115b0 100644 --- a/internal/base/base.go +++ b/internal/base/base.go @@ -10,7 +10,6 @@ import ( "os" "path/filepath" "strings" - "sync" ) // CmdName - base.CmdName @@ -19,11 +18,8 @@ const ( URL = "https://github.com/openset/leetcode/tree/master" ) -// base var -var ( - Commands []*Command - Mutex sync.Mutex -) +// Commands - base.Commands +var Commands []*Command // Command - base.Command type Command struct { diff --git a/internal/leetcode/topic_tag.go b/internal/leetcode/topic_tag.go index c6e9d4cc9..cf127e472 100644 --- a/internal/leetcode/topic_tag.go +++ b/internal/leetcode/topic_tag.go @@ -9,12 +9,13 @@ import ( "regexp" "sort" "strconv" + "sync" - "github.com/openset/leetcode/internal/base" "github.com/openset/leetcode/internal/client" ) var ( + mu sync.Mutex initTags []TagType tagsFile = filepath.Join("tag", "tags.json") ) @@ -135,10 +136,10 @@ func GetTopicTag(slug string) (tt TopicTagType) { } func saveTags(tags []TagType) { - base.Mutex.Lock() + mu.Lock() + defer mu.Unlock() tags = append(GetTags(), tags...) filePutContents(tagsFile, jsonEncode(tagsUnique(tags))) - base.Mutex.Unlock() } func tagsUnique(tags []TagType) []TagType { diff --git a/internal/version/version.go b/internal/version/version.go index 6886a1b9d..79daf648c 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -8,7 +8,7 @@ import ( "github.com/openset/leetcode/internal/base" ) -const version = "1.6.0" +const version = "1.6.1" // CmdVersion - version.CmdVersion var CmdVersion = &base.Command{ From c9460fbcca7320dbbb1f0adca04e704bbe8dbf16 Mon Sep 17 00:00:00 2001 From: Shuo Date: Sat, 30 May 2020 19:57:47 +0800 Subject: [PATCH 2/2] A: v1.6.2 --- internal/base/base.go | 41 ++++----------------------------------- internal/base/cmd.go | 45 +++++++++++++++++++++++++++++++++++++++++++ internal/base/run.go | 25 ++++++++++++++++++++++++ main.go | 29 ++++------------------------ 4 files changed, 78 insertions(+), 62 deletions(-) create mode 100644 internal/base/cmd.go create mode 100644 internal/base/run.go diff --git a/internal/base/base.go b/internal/base/base.go index 37cd115b0..43bec5f6a 100644 --- a/internal/base/base.go +++ b/internal/base/base.go @@ -12,44 +12,11 @@ import ( "strings" ) -// CmdName - base.CmdName -const ( - CmdName = "leetcode" - URL = "https://github.com/openset/leetcode/tree/master" -) +// URL - base.URL +const URL = "https://github.com/openset/leetcode/tree/master" -// Commands - base.Commands -var Commands []*Command - -// Command - base.Command -type Command struct { - Run func(cmd *Command, args []string) - UsageLine string - Short string - Long string - Hidden bool -} - -// Name - base.Name -func (c *Command) Name() string { - name := c.UsageLine - if i := strings.Index(name, " "); i > 0 { - name = name[0:i] - } - return name -} - -// Usage - base.Usage -func (c *Command) Usage() { - fmt.Printf("usage: %s %s\n\n", CmdName, c.UsageLine) - fmt.Printf("Run '%s help %s' for details.\n", CmdName, c.Name()) -} - -// UsageHelp - base.UsageHelp -func (c *Command) UsageHelp() { - fmt.Printf("usage: %s %s\n\n", CmdName, c.UsageLine) - fmt.Println(c.Long) -} +// CmdName - base.CmdName +var CmdName = filepath.Base(os.Args[0]) // Usage - base.Usage func Usage() { diff --git a/internal/base/cmd.go b/internal/base/cmd.go new file mode 100644 index 000000000..5678bb9ff --- /dev/null +++ b/internal/base/cmd.go @@ -0,0 +1,45 @@ +// Package base provides base support. +package base + +import ( + "fmt" + "strings" +) + +// Commands - base.Commands +var Commands []*Command + +// Command - base.Command +type Command struct { + Run func(cmd *Command, args []string) + UsageLine string + Short string + Long string + Hidden bool +} + +// Name - base.Command.Name +func (c *Command) Name() string { + name := c.UsageLine + if i := strings.Index(name, " "); i > 0 { + name = name[0:i] + } + return name +} + +// Usage - base.Command.Usage +func (c *Command) Usage() { + fmt.Printf("usage: %s %s\n\n", CmdName, c.UsageLine) + fmt.Printf("Run '%s help %s' for details.\n", CmdName, c.Name()) +} + +// UsageHelp - base.Command.UsageHelp +func (c *Command) UsageHelp() { + fmt.Printf("usage: %s %s\n\n", CmdName, c.UsageLine) + fmt.Println(c.Long) +} + +// Register - base.Register +func Register(cmds ...*Command) { + Commands = append(Commands, cmds...) +} diff --git a/internal/base/run.go b/internal/base/run.go new file mode 100644 index 000000000..f53173354 --- /dev/null +++ b/internal/base/run.go @@ -0,0 +1,25 @@ +package base + +import ( + "flag" + "fmt" +) + +func Run() { + flag.Usage = Usage + flag.Parse() + if flag.NArg() < 1 { + flag.Usage() + return + } + args := flag.Args() + cmdName := flag.Arg(0) + for _, cmd := range Commands { + if cmd.Name() == cmdName { + cmd.Run(cmd, args[1:]) + return + } + } + fmt.Printf("%s %s: unknown command\n\n", CmdName, cmdName) + fmt.Printf("Run '%s help' for usage.\n", CmdName) +} diff --git a/main.go b/main.go index 2724d739f..1b7032cec 100644 --- a/main.go +++ b/main.go @@ -2,9 +2,6 @@ package main import ( - "flag" - "fmt" - "github.com/openset/leetcode/internal/base" "github.com/openset/leetcode/internal/build" "github.com/openset/leetcode/internal/clean" @@ -22,8 +19,8 @@ import ( "github.com/openset/leetcode/internal/version" ) -func init() { - base.Commands = []*base.Command{ +func main() { + base.Register( readme.CmdReadme, page.CmdPage, tag.CmdTag, @@ -38,24 +35,6 @@ func init() { version.CmdVersion, help.CmdHelp, post.CmdPost, - } -} - -func main() { - flag.Usage = base.Usage - flag.Parse() - if flag.NArg() < 1 { - flag.Usage() - return - } - args := flag.Args() - cmdName := flag.Arg(0) - for _, cmd := range base.Commands { - if cmd.Name() == cmdName { - cmd.Run(cmd, args[1:]) - return - } - } - fmt.Printf("%s %s: unknown command\n\n", base.CmdName, cmdName) - fmt.Printf("Run '%s help' for usage.\n", base.CmdName) + ) + base.Run() }