File history timeline (filelog) with diff-to-previous
- File history button in the preview header opens a per-file revision timeline (rev, changelist, action, user, date, description) with Diff to previous - Backend p4 filelog -l; filelogRevs parser Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
21
src/p4.ts
21
src/p4.ts
@ -71,6 +71,7 @@ export const p4 = {
|
||||
streams: () => invoke<{ Stream?: string; Name?: string; Type?: string; Parent?: string; [k: string]: unknown }[]>("p4_streams"),
|
||||
switchStream: (stream: string) => invoke<P4Info>("p4_switch_stream", { stream }),
|
||||
streamInteg: (stream: string, direction: "down" | "up") => invoke<string>("p4_stream_integ", { stream, direction }),
|
||||
filelog: (depot: string) => invoke<Record<string, unknown>>("p4_filelog", { depot }),
|
||||
jobs: () => invoke<{ Job?: string; Status?: string; Description?: string; User?: string; [k: string]: unknown }[]>("p4_jobs"),
|
||||
fix: (job: string, change: string) => invoke<string>("p4_fix", { job, change }),
|
||||
jobSpec: (job: string) => invoke<string>("p4_job_spec", { job }),
|
||||
@ -179,6 +180,26 @@ export function leaf(path?: string): string {
|
||||
return p.slice(p.lastIndexOf("/") + 1);
|
||||
}
|
||||
|
||||
// per-file revision history parsed from p4 filelog's indexed fields
|
||||
export interface FileRev { rev: string; change: string; action: string; user: string; time: string; desc: string; type: string }
|
||||
export function filelogRevs(v: Record<string, unknown>): FileRev[] {
|
||||
const out: FileRev[] = [];
|
||||
for (let i = 0; ; i++) {
|
||||
const rev = v[`rev${i}`] as string | undefined;
|
||||
if (rev == null) break;
|
||||
out.push({
|
||||
rev,
|
||||
change: (v[`change${i}`] as string) || "",
|
||||
action: (v[`action${i}`] as string) || "",
|
||||
user: (v[`user${i}`] as string) || "",
|
||||
time: (v[`time${i}`] as string) || "",
|
||||
desc: (v[`desc${i}`] as string) || "",
|
||||
type: (v[`type${i}`] as string) || "",
|
||||
});
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
// a submitted changelist with indexed file fields (depotFile0, action0, ...)
|
||||
export interface Describe extends Change { [k: string]: unknown }
|
||||
export function describeFiles(d: Describe): { depotFile: string; action: string; rev: string }[] {
|
||||
|
||||
Reference in New Issue
Block a user