feat(worktrees): création intelligente (auto) + commit/push/promotion + grille agrandissable
- addWorktree résout la branche par dépôt (branchExists) : checkout si présente, suivi de origin/<b> si seulement remote, sinon création (-b) depuis la branche par défaut. Corrige le 'fatal: invalid reference' sur les groupes hétérogènes ; newBranch -> mode (déprécié, mappé en route).
- Nouvelles opérations git : commit (add -A), push (upstream auto), promotion « en principal » (la branche du worktree devient le checkout principal, sans merge ni conflit, ancienne branche conservée). Routes /worktrees/{commit,push,promote} auditées + GET /repos/:id/branches.
- Web : actions Commit/Push/Promouvoir sur WorktreeCard, sélecteur de branche de base (datalist) dans RepoSection et GroupSessionModal, agrandissement d'un terminal au choix dans TerminalGrid.
- Court-circuite la session de groupe quand aucun worktree n'a pu être créé (fini le masquage par « no resolvable worktree »).
- Tests : git.ts (branchExists/listBranches/commitAll/auto), worktree-manager (commit/promote/branches) ; acceptance P5 étend le scénario worktree de groupe sur branche neuve + commit + promotion.
This commit is contained in:
@@ -109,11 +109,25 @@ export interface HookRunResult {
|
||||
output: string;
|
||||
durationMs: number;
|
||||
}
|
||||
/**
|
||||
* Stratégie de résolution de la branche d'un nouveau worktree :
|
||||
* - `auto` (défaut) : détecte l'existence de la branche — checkout si elle existe en local, suivi de
|
||||
* `origin/<branch>` si elle n'existe que sur le remote, sinon création (`-b`). Robuste pour les
|
||||
* groupes hétérogènes où la branche peut déjà exister dans certains dépôts mais pas d'autres.
|
||||
* - `create` : force la création (`-b`), échoue si la branche existe déjà.
|
||||
* - `checkout` : force le checkout d'une branche existante, échoue si elle est absente.
|
||||
*/
|
||||
export type WorktreeBranchMode = 'auto' | 'create' | 'checkout';
|
||||
/** Action réellement effectuée par la résolution `auto` (feedback UI). */
|
||||
export type WorktreeBranchAction = 'created' | 'reused' | 'tracked';
|
||||
|
||||
export interface CreateWorktreeRequest {
|
||||
branch: string;
|
||||
/** true : créer la branche (`-b`) ; false : checkout d'une branche existante. */
|
||||
newBranch: boolean;
|
||||
/** point de départ de la nouvelle branche (défaut : HEAD courant du repo). */
|
||||
/** stratégie de résolution de la branche (défaut : `auto`). Voir {@link WorktreeBranchMode}. */
|
||||
mode?: WorktreeBranchMode;
|
||||
/** @deprecated remplacé par `mode` ; mappé : true→create, false→checkout, absent→auto. */
|
||||
newBranch?: boolean;
|
||||
/** point de départ d'une branche créée (défaut : branche par défaut du dépôt, sinon HEAD). */
|
||||
baseRef?: string;
|
||||
/** chemin cible du worktree (défaut : `<parent>/<repo>-wt-<branch>`). */
|
||||
path?: string;
|
||||
@@ -126,6 +140,35 @@ export interface CreateWorktreeResponse {
|
||||
worktree: WorktreeSummary;
|
||||
hookResults: HookRunResult[];
|
||||
session: SessionSummary | null;
|
||||
/** action effective de la résolution de branche (créée / réutilisée / suivie du remote). */
|
||||
action: WorktreeBranchAction;
|
||||
}
|
||||
|
||||
/** GET /api/v1/repos/:id/branches — branches locales/remote pour alimenter un sélecteur de base. */
|
||||
export interface RepoBranchesResponse {
|
||||
local: string[];
|
||||
remote: string[];
|
||||
/** branche par défaut du dépôt (origin/HEAD), ou null si indéterminée. */
|
||||
default: string | null;
|
||||
}
|
||||
|
||||
/** POST /api/v1/repos/:id/worktrees/commit — `git add -A` puis commit dans le worktree visé. */
|
||||
export interface CommitWorktreeRequest {
|
||||
path: string;
|
||||
message: string;
|
||||
}
|
||||
/** POST /api/v1/repos/:id/worktrees/push — pousse la branche du worktree (upstream auto si absent). */
|
||||
export interface PushWorktreeRequest {
|
||||
path: string;
|
||||
}
|
||||
/**
|
||||
* POST /api/v1/repos/:id/worktrees/promote — « passer en principal » : la branche du worktree devient
|
||||
* le checkout principal du dépôt (le worktree est supprimé, l'ancienne branche principale est conservée).
|
||||
*/
|
||||
export interface PromoteWorktreeRequest {
|
||||
path: string;
|
||||
/** outrepasse les garde-fous d'arbre sale (worktree/checkout principal). */
|
||||
force?: boolean;
|
||||
}
|
||||
export interface AdoptWorktreeRequest {
|
||||
path: string;
|
||||
|
||||
Reference in New Issue
Block a user