aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmd/git-extract-issue/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/git-extract-issue/main.go')
-rw-r--r--cmd/git-extract-issue/main.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/cmd/git-extract-issue/main.go b/cmd/git-extract-issue/main.go
new file mode 100644
index 0000000..4681d4d
--- /dev/null
+++ b/cmd/git-extract-issue/main.go
@@ -0,0 +1,38 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "regexp"
+)
+
+func main() {
+ argv := os.Args
+ argc := len(argv)
+ if argc != 2 {
+ return
+ }
+ branchName := argv[1]
+ fmt.Println(extractIssueNumberFromBranchName(branchName))
+}
+
+// * 123 => #123
+// * 123-suffix => #123
+// * feature/123 => #123
+// * feature/123-suffix => #123
+// * feature/prefix-123 => prefix-123
+// * feature/prefix-123-suffix => prefix-123
+func extractIssueNumberFromBranchName(branchName string) string {
+ pattern := regexp.MustCompile(`\A(?:\w+/)?(\w+-)?(\d+)(?:-\w+)*\z`)
+ matches := pattern.FindSubmatch([]byte(branchName))
+ if len(matches) != 3 {
+ return ""
+ }
+ var prefix string
+ if len(matches[1]) == 0 {
+ prefix = "#"
+ } else {
+ prefix = string(matches[1])
+ }
+ return prefix + string(matches[2])
+}