cache: better API to access excerpts

Michael Muré created

Change summary

cache/repo_cache.go         | 32 ++++++++++++++++++++------------
commands/user_list.go       |  7 ++++++-
misc/zsh_completion/git-bug | 18 +++++++++---------
3 files changed, 35 insertions(+), 22 deletions(-)

Detailed changes

cache/repo_cache.go 🔗

@@ -387,6 +387,16 @@ func (c *RepoCache) ResolveBug(id string) (*BugCache, error) {
 	return cached, nil
 }
 
+// ResolveBugExcerpt retrieve a BugExcerpt matching the exact given id
+func (c *RepoCache) ResolveBugExcerpt(id string) (*BugExcerpt, error) {
+	e, ok := c.bugExcerpts[id]
+	if !ok {
+		return nil, bug.ErrBugNotExist
+	}
+
+	return e, nil
+}
+
 // ResolveBugPrefix retrieve a bug matching an id prefix. It fails if multiple
 // bugs match.
 func (c *RepoCache) ResolveBugPrefix(prefix string) (*BugCache, error) {
@@ -489,12 +499,6 @@ func (c *RepoCache) AllBugsIds() []string {
 	return result
 }
 
-// AllBugExcerpt return all known bug excerpt.
-// This maps is read-only.
-func (c *RepoCache) AllBugExcerpt() map[string]*BugExcerpt {
-	return c.bugExcerpts
-}
-
 // ValidLabels list valid labels
 //
 // Note: in the future, a proper label policy could be implemented where valid
@@ -708,6 +712,16 @@ func (c *RepoCache) ResolveIdentity(id string) (*IdentityCache, error) {
 	return cached, nil
 }
 
+// ResolveIdentityExcerpt retrieve a IdentityExcerpt matching the exact given id
+func (c *RepoCache) ResolveIdentityExcerpt(id string) (*IdentityExcerpt, error) {
+	e, ok := c.identitiesExcerpts[id]
+	if !ok {
+		return nil, identity.ErrIdentityNotExist
+	}
+
+	return e, nil
+}
+
 // ResolveIdentityPrefix retrieve an Identity matching an id prefix.
 // It fails if multiple identities match.
 func (c *RepoCache) ResolveIdentityPrefix(prefix string) (*IdentityCache, error) {
@@ -767,12 +781,6 @@ func (c *RepoCache) AllIdentityIds() []string {
 	return result
 }
 
-// AllIdentityExcerpt return all known identities excerpt.
-// This maps is read-only.
-func (c *RepoCache) AllIdentityExcerpt() map[string]*IdentityExcerpt {
-	return c.identitiesExcerpts
-}
-
 func (c *RepoCache) SetUserIdentity(i *IdentityCache) error {
 	err := identity.SetUserIdentity(c.repo, i.Identity)
 	if err != nil {

commands/user_list.go 🔗

@@ -17,7 +17,12 @@ func runUserLs(cmd *cobra.Command, args []string) error {
 	defer backend.Close()
 	interrupt.RegisterCleaner(backend.Close)
 
-	for _, i := range backend.AllIdentityExcerpt() {
+	for _, id := range backend.AllIdentityIds() {
+		i, err := backend.ResolveIdentityExcerpt(id)
+		if err != nil {
+			return err
+		}
+
 		fmt.Printf("%s %s\n",
 			colors.Cyan(i.HumanId()),
 			i.DisplayName(),

misc/zsh_completion/git-bug 🔗

@@ -17,15 +17,6 @@ case $state in
   ;;
   level2)
     case $words[2] in
-      status)
-        _arguments '2: :(close open)'
-      ;;
-      title)
-        _arguments '2: :(edit)'
-      ;;
-      user)
-        _arguments '2: :(adopt create ls)'
-      ;;
       bridge)
         _arguments '2: :(configure pull rm)'
       ;;
@@ -35,6 +26,15 @@ case $state in
       label)
         _arguments '2: :(add rm)'
       ;;
+      status)
+        _arguments '2: :(close open)'
+      ;;
+      title)
+        _arguments '2: :(edit)'
+      ;;
+      user)
+        _arguments '2: :(adopt create ls)'
+      ;;
       *)
         _arguments '*: :_files'
       ;;