diff --git a/src/plus/webviews/patchDetails/patchDetailsWebview.ts b/src/plus/webviews/patchDetails/patchDetailsWebview.ts index ffe830c..6d28653 100644 --- a/src/plus/webviews/patchDetails/patchDetailsWebview.ts +++ b/src/plus/webviews/patchDetails/patchDetailsWebview.ts @@ -301,17 +301,39 @@ export class PatchDetailsWebviewProvider this.host.title = mode === 'create' ? 'Create Cloud Patch' : 'Cloud Patch Details'; } - private applyPatch(_params: ApplyPatchParams) { + private async applyPatch(params: ApplyPatchParams) { // if (params.details.repoPath == null || params.details.commit == null) return; // void this.container.git.applyPatchCommit(params.details.repoPath, params.details.commit, { // branchName: params.targetRef, // }); - if (this._context.draft == null) return; - if (this._context.draft.draftType === 'local') return; - const draft = this._context.draft; - const changeset = draft.changesets?.[0]; + if (this._context.draft == null || this._context.draft.draftType === 'local' || !params.selected?.length) { + return; + } + + const changeset = this._context.draft.changesets?.[0]; if (changeset == null) return; - console.log(changeset); + + for (const patch of changeset.patches) { + if (!params.selected.includes(patch.id)) continue; + + try { + console.log(patch); + let commit = patch.commit; + if (!commit) { + commit = await this.getOrCreateCommitForPatch(patch.gkRepositoryId); + } + if (!commit) { + // TODO: say we can't apply this patch + continue; + } + + void this.container.git.applyPatchCommit(commit.repoPath, commit.ref, { + branchName: patch.baseBranchName, + }); + } catch (ex) { + void window.showErrorMessage(`Unable apply patch to '${patch.baseRef}': ${ex.message}`); + } + } } private closeView() {