# repostack users [command] [name]

> 

管理 stack 的用户配置。

```bash
# 交互信息模式（无子命令）
repostack users

# 子命令
repostack users ls
repostack users su <name>
repostack users add <name>
repostack users rm
repostack users unset
```

## 执行流程（无子命令）

<steps level="4">

#### 读取 `repostack.yaml` 获取已定义的用户列表。



#### 读取 `.repostackrc` 获取当前用户。



#### **TTY 环境**：进入交互式菜单，提供以下选项：
- **List users**：列出可用用户
- **Switch user**：选择并切换到指定用户
- **Unset user**：删除 `.repostackrc`





#### **非 TTY 环境**：输出当前用户状态以及可用用户列表，并显示后续可用命令。



#### 如果没有定义任何用户，打印黄色警告并提供手动编辑 `repostack.yaml` 的示例模板。



</steps>

## 子命令详解

### `users ls`

列出 `repostack.yaml` 中定义的所有用户。

```bash
repostack users ls
```

- 如果用户列表为空，提示 `No users defined in this stack.`。

---

### `users su <name>`

切换到指定用户。

```bash
repostack users su alice
```

- **验证**：检查 `name` 是否存在于 `repostack.yaml` 的 `users` 中。不存在则抛出 `Unknown user: alice. Available: ...`。
- **TTY 缺省 name**：在 TTY 终端中，如果省略 `<name>`，会弹出交互式选择框列出所有可用用户，上下箭头选择后回车确认。
- **非 TTY 缺省 name**：报错 `Missing user name. Usage: repostack users su <name>`。
- **副作用**：创建或覆盖 `.repostackrc` 文件，内容为 `user=<name>\n`。
- 后续所有需要用户感知的命令（如 `use`、`remove`、`sync` 等）都会读取此文件并合并该用户的配置覆盖。

---

### `users add <name>`

添加新用户。

```bash
repostack users add bob
```

- **当前状态**：尚未实现。
- 如果未提供 `name`，报错：`Missing user name. Usage: repostack users add <name>`。
- 如果提供了 `name`，输出黄色警告：`Not implemented yet. Please edit repostack.yaml manually.`，并以 exit code 1 退出。

---

### `users rm` / `users unset`

取消当前用户选择。

```bash
repostack users rm
repostack users unset
```

- 这两个子命令是**别名**，行为完全一致。
- **副作用**：删除 `.repostackrc` 文件（如果存在）。
- 删除后，如果 `repostack.yaml` 中定义了 `users`，则后续命令会再次要求你选择用户。

## 涉及文件

| 文件               | 操作           | 子命令                      |
| ---------------- | ------------ | ------------------------ |
| `repostack.yaml` | 读取           | 所有                       |
| `.repostackrc`   | 读取 / 写入 / 删除 | `su`、`rm`/`unset`、无子命令模式 |

## 错误信息

| 场景                  | 错误信息                                                   |
| ------------------- | ------------------------------------------------------ |
| `su` 缺少 name（非 TTY） | `Missing user name. Usage: repostack users su <name>`  |
| `su` 用户不存在          | `Unknown user: <name>. Available: ...`                 |
| `add` 缺少 name       | `Missing user name. Usage: repostack users add <name>` |
| 未知子命令               | `Unknown users command: <command>` + 可用列表              |

## 用户配置合并机制

当 `.repostackrc` 指向有效用户时，该用户在 `repostack.yaml` 中 `users.<name>.repos` 的定义会**覆盖**基础 `repos` 的对应字段。这意味着不同用户可以拥有不同的 `source`、`branch`、`path` 等配置。
