ResolveTaskOrProject resolves a ref that could be either a task or project. Supports optional task/ or project/ prefix. Without prefix, tries both. Errors if the ref matches in both tables.
(db *sql.DB, ref string, includeArchived bool)
| 136 | // Supports optional task/ or project/ prefix. Without prefix, tries both. |
| 137 | // Errors if the ref matches in both tables. |
| 138 | func ResolveTaskOrProject(db *sql.DB, ref string, includeArchived bool) (kind string, slug string, err error) { |
| 139 | if strings.HasPrefix(ref, "task/") { |
| 140 | t, err := ResolveTask(db, strings.TrimPrefix(ref, "task/"), includeArchived) |
| 141 | if err != nil { |
| 142 | return "", "", err |
| 143 | } |
| 144 | return "task", t.Slug, nil |
| 145 | } |
| 146 | if strings.HasPrefix(ref, "project/") { |
| 147 | p, err := ResolveProject(db, strings.TrimPrefix(ref, "project/"), includeArchived) |
| 148 | if err != nil { |
| 149 | return "", "", err |
| 150 | } |
| 151 | return "project", p.Slug, nil |
| 152 | } |
| 153 | |
| 154 | t, tErr := ResolveTask(db, ref, includeArchived) |
| 155 | p, pErr := ResolveProject(db, ref, includeArchived) |
| 156 | |
| 157 | switch { |
| 158 | case tErr == nil && pErr == nil: |
| 159 | return "", "", fmt.Errorf( |
| 160 | "ambiguous ref %q: matches task %q and project %q; use 'task/%s' or 'project/%s'", |
| 161 | ref, t.Slug, p.Slug, ref, ref) |
| 162 | case tErr == nil: |
| 163 | return "task", t.Slug, nil |
| 164 | case pErr == nil: |
| 165 | return "project", p.Slug, nil |
| 166 | default: |
| 167 | return "", "", fmt.Errorf("no task or project matching %q", ref) |
| 168 | } |
| 169 | } |
nothing calls this directly
no test coverage detected