diff --git a/internal/cli/output.go b/internal/cli/output.go index 9b5e5a6..a0ab942 100644 --- a/internal/cli/output.go +++ b/internal/cli/output.go @@ -49,6 +49,7 @@ type pullItem struct { type repoItem struct { Name string `json:"name"` URI string `json:"uri"` + Author string `json:"author"` Knot string `json:"knot"` Description string `json:"description,omitempty"` CreatedAt string `json:"createdAt"` diff --git a/internal/cli/repo_list.go b/internal/cli/repo_list.go index 69471d5..61a2515 100644 --- a/internal/cli/repo_list.go +++ b/internal/cli/repo_list.go @@ -38,7 +38,7 @@ remote URL of the git repository in the current directory.`, return fmt.Errorf("list repos for %q: %w", handle, err) } - items := buildRepoItems(repos.Items) + items := buildRepoItems(repos.Items, handle) return output(items, renderRepoList) }, } @@ -73,7 +73,7 @@ func resolveHandleOrSelf(ctx context.Context, args []string) (string, error) { return ident.Handle.String(), nil } -func buildRepoItems(items []tangled.Repo) []repoItem { +func buildRepoItems(items []tangled.Repo, author string) []repoItem { result := make([]repoItem, 0, len(items)) for _, item := range items { @@ -88,6 +88,7 @@ func buildRepoItems(items []tangled.Repo) []repoItem { result = append(result, repoItem{ Name: name, URI: item.URI, + Author: author, Knot: item.Value.Knot, Description: item.Value.Description, CreatedAt: item.Value.CreatedAt, diff --git a/internal/cli/repo_view.go b/internal/cli/repo_view.go new file mode 100644 index 0000000..2246e16 --- /dev/null +++ b/internal/cli/repo_view.go @@ -0,0 +1,62 @@ +package cli + +import ( + "fmt" + + "github.com/alyraffauf/tg/tangled" + "github.com/spf13/cobra" +) + +var repoViewCmd = &cobra.Command{ + Use: "view ", + Short: "View a Tangled repository", + Long: `View details for a Tangled repository.`, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + ctx := cmd.Context() + + handle, repo, err := parseHandleRepo(args[0]) + if err != nil { + return err + } + + ident, err := resolver.ResolveHandle(ctx, handle) + if err != nil { + return fmt.Errorf("resolve handle %q: %w", handle, err) + } + + repoURI := fmt.Sprintf("at://%s/sh.tangled.repo/%s", ident.DID, repo) + + var tangledRepo *tangled.Repo + tangledRepo, err = client.GetRepo(ctx, repoURI) + if err != nil { + return fmt.Errorf("get repo %s/%s: %w", handle, repo, err) + } + + name := tangledRepo.Value.Name + if name == "" { + name = repo + } + + result := repoItem{ + Name: name, + Author: handle, + URI: repoURI, + Knot: tangledRepo.Value.Knot, + Description: tangledRepo.Value.Description, + CreatedAt: tangledRepo.Value.CreatedAt, + RepoDid: tangledRepo.Value.RepoDid, + } + return output(result, func(item repoItem) { + fmt.Printf("Name: %s\n", item.Name) + fmt.Printf("Description: %s\n", item.Description) + fmt.Printf("URI: %s\n", item.URI) + fmt.Printf("Knot: %s\n", item.Knot) + fmt.Printf("Created: %s\n", item.CreatedAt) + if item.RepoDid != "" { + fmt.Printf("Repo DID: %s\n", item.RepoDid) + } + }) + + }, +} diff --git a/internal/cli/root.go b/internal/cli/root.go index dab584e..7341ddf 100644 --- a/internal/cli/root.go +++ b/internal/cli/root.go @@ -57,6 +57,7 @@ func init() { prCmd.AddCommand(prViewCmd) rootCmd.AddCommand(repoCmd) + repoCmd.AddCommand(repoViewCmd) repoCmd.AddCommand(repoCloneCmd) repoCmd.AddCommand(repoCreateCmd) repoCmd.AddCommand(repoListCmd)