From c38494df6d307ec977b31760541a2c60003350a0 Mon Sep 17 00:00:00 2001 From: coyotte508 Date: Fri, 21 Nov 2025 13:54:43 +0000 Subject: [PATCH] add queued commit support --- packages/hub/src/lib/commit.ts | 21 +++++++++++++++++-- packages/hub/src/lib/delete-file.ts | 2 ++ packages/hub/src/lib/delete-files.ts | 2 ++ packages/hub/src/lib/upload-file.ts | 2 ++ .../hub/src/lib/upload-files-with-progress.ts | 2 ++ packages/hub/src/lib/upload-files.ts | 2 ++ packages/hub/src/types/api/api-commit.ts | 6 ++++++ 7 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/hub/src/lib/commit.ts b/packages/hub/src/lib/commit.ts index 0c1154ddfa..ffbc2d664b 100644 --- a/packages/hub/src/lib/commit.ts +++ b/packages/hub/src/lib/commit.ts @@ -127,15 +127,26 @@ export type CommitParams = { */ useXet?: boolean; // Credentials are optional due to custom fetch functions or cookie auth + + /** + * If queued, will not return commit information in the output + */ + mode?: "queued" | "immediate"; } & Partial; export interface CommitOutput { pullRequestUrl?: string; - commit: { + /** + * Unset if queued commit, or empty commit + */ + commit?: { oid: string; url: string; }; - hookOutput: string; + /** + * Unset if queued commit, or empty commit + */ + hookOutput?: string; } function isFileOperation(op: CommitOperation): op is CommitBlob { @@ -640,6 +651,7 @@ export async function* commitIter(params: CommitParams): AsyncGenerator { return commit({ @@ -31,5 +32,6 @@ export function deleteFile( isPullRequest: params.isPullRequest, parentCommit: params.parentCommit, fetch: params.fetch, + mode: params.mode, }); } diff --git a/packages/hub/src/lib/delete-files.ts b/packages/hub/src/lib/delete-files.ts index 956bd473e4..d5ca8b93d6 100644 --- a/packages/hub/src/lib/delete-files.ts +++ b/packages/hub/src/lib/delete-files.ts @@ -12,6 +12,7 @@ export function deleteFiles( branch?: CommitParams["branch"]; isPullRequest?: CommitParams["isPullRequest"]; parentCommit?: CommitParams["parentCommit"]; + mode?: CommitParams["mode"]; fetch?: CommitParams["fetch"]; } & CredentialsParams ): Promise { @@ -29,5 +30,6 @@ export function deleteFiles( isPullRequest: params.isPullRequest, parentCommit: params.parentCommit, fetch: params.fetch, + mode: params.mode, }); } diff --git a/packages/hub/src/lib/upload-file.ts b/packages/hub/src/lib/upload-file.ts index da051cb0d5..71bae911f6 100644 --- a/packages/hub/src/lib/upload-file.ts +++ b/packages/hub/src/lib/upload-file.ts @@ -16,6 +16,7 @@ export function uploadFile( useWebWorkers?: CommitParams["useWebWorkers"]; abortSignal?: CommitParams["abortSignal"]; useXet?: CommitParams["useXet"]; + mode?: CommitParams["mode"]; } & Partial ): Promise { const path = @@ -45,5 +46,6 @@ export function uploadFile( useWebWorkers: params.useWebWorkers, abortSignal: params.abortSignal, useXet: params.useXet, + mode: params.mode, }); } diff --git a/packages/hub/src/lib/upload-files-with-progress.ts b/packages/hub/src/lib/upload-files-with-progress.ts index 8009cad544..0c7e538ab5 100644 --- a/packages/hub/src/lib/upload-files-with-progress.ts +++ b/packages/hub/src/lib/upload-files-with-progress.ts @@ -30,6 +30,7 @@ export async function* uploadFilesWithProgress( abortSignal?: CommitParams["abortSignal"]; maxFolderDepth?: CommitParams["maxFolderDepth"]; useXet?: CommitParams["useXet"]; + mode?: CommitParams["mode"]; /** * Set this to true in order to have progress events for hashing */ @@ -53,6 +54,7 @@ export async function* uploadFilesWithProgress( useWebWorkers: params.useWebWorkers, abortSignal: params.abortSignal, useXet: params.useXet, + mode: params.mode, fetch: async (input, init) => { if (!init) { return fetch(input); diff --git a/packages/hub/src/lib/upload-files.ts b/packages/hub/src/lib/upload-files.ts index 585273fa98..4efa6c9e0f 100644 --- a/packages/hub/src/lib/upload-files.ts +++ b/packages/hub/src/lib/upload-files.ts @@ -15,6 +15,7 @@ export function uploadFiles( fetch?: CommitParams["fetch"]; useWebWorkers?: CommitParams["useWebWorkers"]; maxFolderDepth?: CommitParams["maxFolderDepth"]; + mode?: CommitParams["mode"]; abortSignal?: CommitParams["abortSignal"]; useXet?: CommitParams["useXet"]; } & Partial @@ -37,5 +38,6 @@ export function uploadFiles( useWebWorkers: params.useWebWorkers, abortSignal: params.abortSignal, useXet: params.useXet, + mode: params.mode, }); } diff --git a/packages/hub/src/types/api/api-commit.ts b/packages/hub/src/types/api/api-commit.ts index 39b3c74f62..6975df03da 100644 --- a/packages/hub/src/types/api/api-commit.ts +++ b/packages/hub/src/types/api/api-commit.ts @@ -143,6 +143,12 @@ export interface ApiCommitHeader { * - When committing on a branch: Will make sure that there were no intermediate commits */ parentCommit?: string; + /** + * queued => commit is pending + * immediate => commit is processed immediately + * flush => all pending commits are processed and merged into one commit + */ + mode?: "queued" | "immediate" | "flush"; } export interface ApiCommitDeletedEntry {