claude_code_toolkit/cli/commands/
repo.rs

1use crate::{ config::manager::ConfigurationManager, error::* };
2use console::{ Emoji, style };
3
4static SUCCESS: Emoji<'_, '_> = Emoji("✅ ", "");
5static INFO: Emoji<'_, '_> = Emoji("ℹ️ ", "");
6
7pub async fn handle_add_repo(repo: String) -> Result<()> {
8  println!("{}Adding repository {} for Claude secret sync", INFO, style(&repo).bold());
9
10  let config_manager = ConfigurationManager::new()?;
11  config_manager.add_repository(repo.clone()).await?;
12
13  println!("{}Successfully added repository {}", SUCCESS, style(&repo).bold());
14  // Show which secrets will be synced from config
15  let config = config_manager.load_config().await?;
16  let secret_names: Vec<String> = config.credentials.field_mappings.values().cloned().collect();
17  println!("{}", style(format!("Will sync: {}", secret_names.join(", "))).dim());
18  println!("{}", style("Run 'claude-code sync now' to sync immediately").dim());
19
20  Ok(())
21}
22
23pub async fn handle_remove_repo(repo: String) -> Result<()> {
24  println!("{}Removing repository {}", INFO, style(&repo).bold());
25
26  let config_manager = ConfigurationManager::new()?;
27  config_manager.remove_repository(&repo).await?;
28
29  println!("{}Successfully removed repository {}", SUCCESS, style(&repo).bold());
30
31  Ok(())
32}
33
34pub async fn handle_list_repos() -> Result<()> {
35  let config_manager = ConfigurationManager::new()?;
36  let config = config_manager.load_config().await?;
37
38  if config.github.repositories.is_empty() {
39    println!("{}", style("No repositories configured").yellow());
40    println!("{}", style("Use 'claude-code repo add <owner/repo>' to add a repository").dim());
41    return Ok(());
42  }
43
44  println!("{}", style("Configured Repositories:").bold());
45  println!();
46
47  for repo in &config.github.repositories {
48    println!("  {}", style(&repo.repo).cyan());
49    let secret_names: Vec<String> = config.credentials.field_mappings.values().cloned().collect();
50    println!("    Secrets: {}", style(secret_names.join(", ")).dim());
51  }
52
53  println!();
54  println!("{}", style("Tip: Use 'gh repo list' to see all your available repositories").dim());
55
56  Ok(())
57}