feat: découverte automatique des dépôts git (scan + montrer/cacher)
Scan borné du système de fichiers (racines configurables, défaut home ; profondeur/nombre/timeout bornés ; symlinks non suivis ; exclusions node_modules/dotdirs) qui auto-enregistre les nouveaux dépôts. Insertion atomique ON CONFLICT DO NOTHING (idempotence + anti-résurrection d'un dépôt masqué + anti-course). Scan au démarrage + bouton manuel + re-scan périodique (RepoDiscoveryService, démarré dans runDaemon). Colonne repos.hidden : masquer = conservé en DB mais exclu du dashboard et jamais ré-ajouté ; supprimer = re-découvrable. UI : bouton œil par dépôt + bascule afficher-les-masqués sur le dashboard, section Découverte dans les Réglages (racines + intervalle, allow-list stricte). Robustesse : listAllWorktrees tolère l'échec git par dépôt ; flag --no-discover (escape hatch + hermétisme des acceptations).
This commit is contained in:
@@ -3,6 +3,7 @@ import { ref } from 'vue';
|
||||
import type {
|
||||
CreateWorktreeRequest,
|
||||
CreateWorktreeResponse,
|
||||
DiscoverReposResponse,
|
||||
RepoResponse,
|
||||
ReposListResponse,
|
||||
RepoSummary,
|
||||
@@ -84,6 +85,19 @@ export const useWorktreesStore = defineStore('worktrees', () => {
|
||||
removeRepoLocal(id);
|
||||
}
|
||||
|
||||
/** Masque/ré-affiche un repo (persiste `hidden` côté serveur ; émis aussi par WS). */
|
||||
async function setHidden(id: string, hidden: boolean): Promise<void> {
|
||||
const res = await api.patch<RepoResponse>(`/api/v1/repos/${id}`, { hidden });
|
||||
upsertRepo(res.repo);
|
||||
}
|
||||
|
||||
/** Lance un scan de découverte ; les nouveaux repos arrivent par WS, on resynchronise par sûreté. */
|
||||
async function discover(): Promise<DiscoverReposResponse> {
|
||||
const res = await api.post<DiscoverReposResponse>('/api/v1/repos/discover');
|
||||
await fetchAll();
|
||||
return res;
|
||||
}
|
||||
|
||||
async function createWorktree(repoId: string, req: CreateWorktreeRequest): Promise<CreateWorktreeResponse> {
|
||||
const res = await api.post<CreateWorktreeResponse>(`/api/v1/repos/${repoId}/worktrees`, req);
|
||||
upsertWorktree(res.worktree);
|
||||
@@ -117,6 +131,9 @@ export const useWorktreesStore = defineStore('worktrees', () => {
|
||||
fetchAll,
|
||||
addRepo,
|
||||
removeRepo,
|
||||
setHidden,
|
||||
discover,
|
||||
refreshRepoWorktrees,
|
||||
createWorktree,
|
||||
deleteWorktree,
|
||||
prune,
|
||||
|
||||
Reference in New Issue
Block a user