github.com/grantbow/fit@v0.7.1-0.20220916164603-1f7c88ac81e6/fitapp/Identifier.go (about) 1 package fitapp 2 3 import ( 4 "crypto/sha1" 5 "fmt" 6 bugs "github.com/grantbow/fit/issues" 7 "os" 8 "sort" 9 "strings" 10 ) 11 12 //var dops = bugs.Directory(os.PathSeparator) 13 //var sops = string(os.PathSeparator) 14 15 // getAllIds returns all the ids 16 func getAllIds(config bugs.Config) []string { 17 bugs := bugs.GetAllIssues(config) 18 idMap := make(map[string]int, 0) 19 for _, bug := range bugs { 20 idMap[strings.ToLower(string(bug.Identifier()))] += 1 21 } 22 var ids []string 23 for k := range idMap { 24 ids = append(ids, k) 25 } 26 sort.Strings(ids) 27 return ids 28 } 29 30 // IdsNone is a subcommand to print issues with no assigned tags. 31 func IdsNone(config bugs.Config) { 32 fitdir := bugs.FitDirer(config) 33 issues := readIssues(string(fitdir)) 34 sort.Sort(byDir(issues)) 35 var wantTags bool = false 36 37 allbugs := bugs.GetAllIssues(config) 38 idMap := make(map[string]int, 0) 39 for _, bug := range allbugs { 40 if bug.Identifier() == "" { 41 title := bug.Dir.ShortNamer() 42 idMap[string(title)] += 1 43 } 44 } 45 fmt.Printf("No ids assigned:\n") 46 for idx, issue := range issues { 47 //fmt.Printf("%v\n", issue) 48 for k := range idMap { 49 if issue.Name() == k { 50 //fmt.Printf("1in: %v\n2tm: %v\n", issue.Name(), k) 51 var dir bugs.Directory = fitdir + dops + bugs.Directory(issue.Name()) 52 //fmt.Printf("dir %v\n", dir) 53 b := bugs.Issue{Dir: dir, DescriptionFileName: config.DescriptionFileName} 54 name := issueNamer(b, idx) // Issue x: 55 //fmt.Printf("name %v\n", name) 56 if wantTags == false { // always 57 fmt.Printf("%s: %s\n", name, b.Title("")) 58 //keys = append(keys, fmt.Sprintf("%s: %s\n", name, b.Title(""))) 59 } else { 60 fmt.Printf("%s: %s\n", name, b.Title("tags")) 61 //keys = append(keys, fmt.Sprintf("%s: %s\n", name, b.Title("tags"))) 62 } 63 } 64 } 65 } 66 //return keys 67 return 68 } 69 70 // IdsAssigned is a subcommand to print the assigned ids. 71 func IdsAssigned(config bugs.Config) { 72 //fmt.Printf("here\n") 73 get := getAllIds(config) 74 fmt.Printf("Ids used in current tree: ") 75 if len(get) > 0 { 76 fmt.Printf("%s\n", strings.Join(get, ", ")) 77 } else { 78 fmt.Print("<none assigned yet>\n") 79 } 80 } 81 82 func generateID(val string) string { 83 hash := sha1.Sum([]byte(val)) 84 return fmt.Sprintf("b%x", hash)[0:5] 85 } 86 87 // Identifier is a subcommand to assign tags to issues. 88 func Identifier(args argumentList, config bugs.Config) { 89 if len(args) < 1 { 90 fmt.Printf("Usage: %s id <IssueID> [value]\n", os.Args[0]) 91 return 92 } 93 94 b, err := bugs.LoadIssueByHeuristic(args[0], config) 95 if err != nil { 96 fmt.Printf("Invalid IssueID: %s\n", err.Error()) 97 return 98 } 99 if len(args) > 1 { 100 var newValue string 101 if args.HasArgument("--generate-id") { 102 newValue = generateID(b.Title("")) 103 fmt.Printf("Generated id %s for issue\n", newValue) 104 } else { 105 newValue = strings.Join(args[1:], " ") 106 } 107 err := b.SetIdentifier(newValue, config) 108 if err != nil { 109 fmt.Printf("Error setting id: %s", err.Error()) 110 } 111 } else { 112 val := b.Identifier() 113 if val == "" { 114 fmt.Printf("Id not defined\n") 115 } else { 116 fmt.Printf("%s\n", val) 117 } 118 } 119 }