From ffebd8a56d3eb47889d5b245b5a545b034e4172a Mon Sep 17 00:00:00 2001 From: Theis Date: Wed, 6 Mar 2024 07:50:36 +0100 Subject: [PATCH 1/4] feat: added the grouping feature, currently untested --- src_code/go_src/cocommit.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src_code/go_src/cocommit.go b/src_code/go_src/cocommit.go index eaa202d..1f70c7f 100644 --- a/src_code/go_src/cocommit.go +++ b/src_code/go_src/cocommit.go @@ -24,6 +24,9 @@ var all_flag = false // DefaultExclude -> A list that contains users marked with ex meaning // they should not be included in all and negations var defExclude = []string{} +// Group map for adding people as a group +var groups = make(map[string][]user) + func main() { @@ -50,10 +53,23 @@ func main() { users[info[0]] = usr users[info[1]] = usr // Adds users with the ex tag to the defExclude list - if len(info) > 4 { + if len(info) == 4 { if info[4] == "ex" { defExclude = append(defExclude, info[2]) } + } else if len(info) > 5 { + // Group assignment + for _, group := range info[5:] { + if groups[group] == nil { + groups[group] = []user{usr} + } else { + //TODO: Try and find a cleaner way of doing this + usr_lst := groups[group] + usr_lst = append(usr_lst, usr) + groups[group] = usr_lst + } + + } } } @@ -79,6 +95,10 @@ func main() { if args[1] == "all" || args[1] == "All" { all_flag = true goto skip_loop + } else if groups[args[1]] != nil { + // Selects everybody that isn't the group members and adds them to the defExclude + excludeMode = group_selection(groups[args[1]], excludeMode) + goto skip_loop } // Loop that adds users @@ -132,6 +152,15 @@ func main() { } +func group_selection(group []user, excludeMode []string) []string { + for _, user := range users { + if !(slices.Contains(group, user)) { + excludeMode = append(defExclude, user.username) + } + } + return excludeMode +} + func add_x_users(excludeMode []string) { if len(defExclude) > 0 { excludeMode = append(excludeMode, defExclude...) From 5aa8fe27035b64e8b41746e10d58f08169035fb2 Mon Sep 17 00:00:00 2001 From: Theis Date: Wed, 6 Mar 2024 10:23:24 +0100 Subject: [PATCH 2/4] fix: Think I fixed the syntax for group declartion --- src_code/go_src/cocommit.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src_code/go_src/cocommit.go b/src_code/go_src/cocommit.go index 1f70c7f..cd61fac 100644 --- a/src_code/go_src/cocommit.go +++ b/src_code/go_src/cocommit.go @@ -48,7 +48,14 @@ func main() { // reads the input of authors file and formats accordingly for scanner.Scan() { - info := strings.Split(scanner.Text(), "|") + input_str := scanner.Text() + group_info := []string{} + if strings.Contains(input_str, ";;") { + input := strings.Split(input_str, ";;") + input_str = input[0] + group_info = append(group_info, strings.Split(input[1],"|")...) + } + info := strings.Split(input_str, "|") usr := user{username: info[2], email: info[3]} users[info[0]] = usr users[info[1]] = usr @@ -57,9 +64,9 @@ func main() { if info[4] == "ex" { defExclude = append(defExclude, info[2]) } - } else if len(info) > 5 { + } else if len(group_info) > 0 { // Group assignment - for _, group := range info[5:] { + for _, group := range group_info { if groups[group] == nil { groups[group] = []user{usr} } else { From aa81eb0e7370ac25a6debe996605698ebc5d8c17 Mon Sep 17 00:00:00 2001 From: Theis Date: Wed, 6 Mar 2024 11:25:39 +0100 Subject: [PATCH 3/4] fix: fixed index out of bounds error --- src_code/go_src/cocommit.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src_code/go_src/cocommit.go b/src_code/go_src/cocommit.go index cd61fac..4f1676d 100644 --- a/src_code/go_src/cocommit.go +++ b/src_code/go_src/cocommit.go @@ -60,7 +60,7 @@ func main() { users[info[0]] = usr users[info[1]] = usr // Adds users with the ex tag to the defExclude list - if len(info) == 4 { + if len(info) == 5 { if info[4] == "ex" { defExclude = append(defExclude, info[2]) } @@ -75,10 +75,8 @@ func main() { usr_lst = append(usr_lst, usr) groups[group] = usr_lst } - } } - } if err := scanner.Err(); err != nil { @@ -162,9 +160,10 @@ func main() { func group_selection(group []user, excludeMode []string) []string { for _, user := range users { if !(slices.Contains(group, user)) { - excludeMode = append(defExclude, user.username) + excludeMode = append(excludeMode, user.username) } } + return excludeMode } From 27a755ce81ae7ff0b4b8fc153c546f5c7d0ce1b6 Mon Sep 17 00:00:00 2001 From: Theis Date: Wed, 6 Mar 2024 12:47:26 +0100 Subject: [PATCH 4/4] test: added a test for grouping --- src_code/go_src/cocommit.go | 19 ++++++++++--------- src_code/go_src/cocommit_test.go | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src_code/go_src/cocommit.go b/src_code/go_src/cocommit.go index 4f1676d..b059648 100644 --- a/src_code/go_src/cocommit.go +++ b/src_code/go_src/cocommit.go @@ -17,20 +17,22 @@ type user struct { // Map of all th users in the author file var users = make(map[string]user) + // String builder for building the commit message var sb strings.Builder + // Flag that can be toggled to include all users in a commit message (excluding defExclude) var all_flag = false -// DefaultExclude -> A list that contains users marked with ex meaning + +// DefaultExclude -> A list that contains users marked with ex meaning // they should not be included in all and negations var defExclude = []string{} + // Group map for adding people as a group var groups = make(map[string][]user) - func main() { - // Reads a shell env variable :: author_file authors := os.Getenv("author_file") @@ -53,8 +55,8 @@ func main() { if strings.Contains(input_str, ";;") { input := strings.Split(input_str, ";;") input_str = input[0] - group_info = append(group_info, strings.Split(input[1],"|")...) - } + group_info = append(group_info, strings.Split(input[1], "|")...) + } info := strings.Split(input_str, "|") usr := user{username: info[2], email: info[3]} users[info[0]] = usr @@ -70,7 +72,7 @@ func main() { if groups[group] == nil { groups[group] = []user{usr} } else { - //TODO: Try and find a cleaner way of doing this + //TODO: Try and find a cleaner way of doing this usr_lst := groups[group] usr_lst = append(usr_lst, usr) groups[group] = usr_lst @@ -128,14 +130,13 @@ func main() { } // Skip label for adding all - skip_loop: - +skip_loop: + if len(excludeMode) > 0 || all_flag { // adds all users not in the excludeMode list add_x_users(excludeMode) } - // commit msg built commit := sb_build() diff --git a/src_code/go_src/cocommit_test.go b/src_code/go_src/cocommit_test.go index 7113b44..5c62140 100644 --- a/src_code/go_src/cocommit_test.go +++ b/src_code/go_src/cocommit_test.go @@ -98,6 +98,29 @@ func Test_exclude_by_default(t *testing.T) { } } +func Test_commit_with_grouping(t *testing.T) { + for k := range groups { + delete(groups, k) + } + + defExclude = []string{} + + groups["test1"] = []user{users["test1"]} + + excludeMode := group_selection(groups["test1"], []string{}) + + sb.Reset() + + add_x_users(excludeMode) + + commit := sb_build() + + if commit != "\nCo-authored-by: test1 " { + t.Fatalf("String built incorrectly. Strings did not match: Created -> %s Expected -> Co-authored-by: test ",commit) + } + +} +