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  }