func runRepoCmd(api *cait.ArchivesSpaceAPI, cmd *command) (string, error) { if err := api.Login(); err != nil { return "", err } repoID := 0 repo := new(cait.Repository) if cmd.Payload != "" { err := json.Unmarshal([]byte(cmd.Payload), repo) if err != nil { return "", fmt.Errorf("Problem unmashalling JSON repository request, %s", err) } repoID = cait.URIToID(repo.URI) } switch cmd.Action { case "create": response, err := api.CreateRepository(repo) if err != nil { return "", err } if response.Status != "Created" { return "", fmt.Errorf("Create repo status %s, %s", repo.URI, response) } src, err := json.Marshal(response) if err != nil { return "", err } return string(src), nil case "list": if repoID == 0 { repos, err := api.ListRepositories() if err != nil { return "", fmt.Errorf(`{"error": %q}`, err) } src, err := json.Marshal(repos) if err != nil { return "", fmt.Errorf(`{"error": "Cannot JSON encode %s %s"}`, cmd.Payload, err) } return string(src), nil } repo, err := api.GetRepository(repoID) if err != nil { return "", fmt.Errorf(`{"error": %q}`, err) } src, err := json.Marshal(repo) if err != nil { return "", fmt.Errorf(`{"error": "Cannot find %s %s"}`, cmd.Payload, err) } return string(src), nil case "update": responseMsg, err := api.UpdateRepository(repo) if err != nil { return "", err } src, err := json.Marshal(responseMsg) return string(src), err case "delete": repo, err := api.GetRepository(repoID) if err != nil { return "", err } responseMsg, err := api.DeleteRepository(repo) if err != nil { return "", err } src, err := json.Marshal(responseMsg) return string(src), err case "export": err := api.ExportRepository( repoID, path.Join(api.Dataset, "repositories"), fmt.Sprintf("%d.json", repoID), ) if err != nil { return "", fmt.Errorf("Exporting repositories, %s", err) } return `{"status": "ok"}`, nil } return "", fmt.Errorf("action %s not implemented for %s", cmd.Action, cmd.Subject) }