workdir: report current selector and ref

This commit is contained in:
2026-07-31 23:48:46 +09:00
parent 32d3f8f75e
commit 06a98fe30c
15 changed files with 395 additions and 86 deletions
@@ -1,6 +1,7 @@
<script lang="ts">
import { pushWorkspaceAlert } from '$lib/workspace/alerts/store';
import { workspaceApiPath } from '$lib/workspace/api/http';
import { formatCurrentWorkdirRevision } from '$lib/workspace/settings/workdir-revision';
import type {
CleanupWorkdirCandidate,
RuntimeCleanupExecutionResponse,
@@ -23,12 +24,13 @@
workdirs = data.workdirs?.items ?? [];
});
function commitLabel(workdir: WorkingDirectorySummary): string {
return workdir.resolved_commit ? workdir.resolved_commit.slice(0, 12) : '—';
function repositoryProvider(workdir: WorkingDirectorySummary): string | null {
return data.repositories?.items.find((repository) => repository.id === workdir.repository_id)
?.provider ?? null;
}
function selectorLabel(workdir: WorkingDirectorySummary): string {
return workdir.requested_selector ?? 'HEAD';
function currentRevision(workdir: WorkingDirectorySummary): string {
return formatCurrentWorkdirRevision(workdir, repositoryProvider(workdir));
}
function cleanupCandidate(workdir: WorkingDirectorySummary): CleanupWorkdirCandidate | undefined {
@@ -125,8 +127,7 @@
<tr>
<th>Workdir</th>
<th>Repository</th>
<th>Selector</th>
<th>Commit</th>
<th>Revision</th>
<th>Status</th>
<th>Cleanliness</th>
<th>Occupied by</th>
@@ -139,8 +140,7 @@
<tr>
<td><code>{workdir.working_directory_id}</code></td>
<td>{workdir.repository_id}</td>
<td>{selectorLabel(workdir)}</td>
<td><code>{commitLabel(workdir)}</code></td>
<td><code>{currentRevision(workdir)}</code></td>
<td>{workdir.status}</td>
<td>{workdir.cleanliness ?? 'unknown'}</td>
<td>
@@ -2,6 +2,7 @@
import { pushWorkspaceAlert } from '$lib/workspace/alerts/store';
import { workspaceApiPath } from '$lib/workspace/api/http';
import { workerConsoleHref } from '$lib/workspace/console/model';
import { formatCurrentWorkdirRevision } from '$lib/workspace/settings/workdir-revision';
import { canOpenWorkerConsole } from '$lib/workspace/sidebar/workers';
import type { CleanupWorkerCandidate, RuntimeCleanupExecutionResponse, RuntimeCleanupPlanResponse, Worker } from '$lib/workspace/sidebar/types';
import type { PageProps } from './$types';
@@ -145,9 +146,9 @@
function workerDirectory(worker: Worker): string {
const directory = worker.working_directory;
if (!directory) return '—';
const selector = directory.requested_selector ?? 'HEAD';
const commit = directory.resolved_commit ? directory.resolved_commit.slice(0, 12) : null;
return commit ? `${directory.repository_id} · ${selector} · ${commit}` : `${directory.repository_id} · ${selector}`;
const provider = data.repositories?.items.find((repository) => repository.id === directory.repository_id)
?.provider;
return `${directory.repository_id} · ${formatCurrentWorkdirRevision(directory, provider)}`;
}
</script>
@@ -2,12 +2,14 @@
import { goto } from '$app/navigation';
import { untrack } from 'svelte';
import { workspaceApiPath } from '$lib/workspace/api/http';
import { formatCurrentWorkdirRevision } from '$lib/workspace/settings/workdir-revision';
import { buildBrowserCreateWorkerRequest, defaultWorkerLaunchForm } from '$lib/workspace/sidebar/worker-launch';
import type {
BrowserCreateWorkerResponse,
BrowserWorkingDirectoryCreateResponse,
Diagnostic,
WorkerLaunchOptionsResponse,
WorkingDirectorySummary,
} from '$lib/workspace/sidebar/types';
import type { PageProps } from './$types';
@@ -22,6 +24,12 @@
diagnostics?: Diagnostic[];
};
function workdirOptionLabel(directory: WorkingDirectorySummary): string {
const provider = data.repositories?.items.find((repository) => repository.id === directory.repository_id)
?.provider;
return `${directory.repository_id} · ${formatCurrentWorkdirRevision(directory, provider)}`;
}
let { data }: PageProps = $props();
let workspaceId = $derived(data.workspaceId);
const ticketContext = untrack(() => data.ticketContext);
@@ -296,7 +304,7 @@
<option value="" disabled>Select workdir</option>
{#each availableWorkingDirectories as directory}
<option value={directory.working_directory_id}>
{directory.repository_id} · {directory.requested_selector ?? 'HEAD'}
{workdirOptionLabel(directory)}
</option>
{/each}
<option value={NEW_WORKING_DIRECTORY_VALUE}>New workdir…</option>