From 95daa9ce99e7003c3470dae1a294e168e20cf700 Mon Sep 17 00:00:00 2001 From: linonetwo Date: Sun, 8 Feb 2026 17:58:48 +0800 Subject: [PATCH] fix --- src/services/git/gitOperations.ts | 10 ++++++++++ src/services/git/index.ts | 28 +++++++++++++++++++--------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/services/git/gitOperations.ts b/src/services/git/gitOperations.ts index 8fe98edd..e28dd656 100644 --- a/src/services/git/gitOperations.ts +++ b/src/services/git/gitOperations.ts @@ -1076,6 +1076,11 @@ export async function handleGitUploadPack( request.pipe(git.stdin); git.stdout.pipe(response); + // Handle stdin errors to prevent process from hanging + git.stdin.on('error', (error: Error) => { + console.error('Git upload-pack stdin error:', error.message); + }); + git.stderr.on('data', (data: Buffer) => { console.debug('Git upload-pack stderr:', data.toString()); }); @@ -1125,6 +1130,11 @@ export async function handleGitReceivePack( request.pipe(git.stdin); git.stdout.pipe(response); + // Handle stdin errors to prevent process from hanging + git.stdin.on('error', (error: Error) => { + console.error('Git receive-pack stdin error:', error.message); + }); + git.stderr.on('data', (data: Buffer) => { console.debug('Git receive-pack stderr:', data.toString()); }); diff --git a/src/services/git/index.ts b/src/services/git/index.ts index 1d6d860d..4b9e97ce 100644 --- a/src/services/git/index.ts +++ b/src/services/git/index.ts @@ -483,8 +483,10 @@ export class Git implements IGitService { */ public async getGitExecutablePath(): Promise { const platform = process.platform; - const gitExecutable = platform === 'win32' ? 'git.exe' : 'git'; - return path.join(LOCAL_GIT_DIRECTORY, 'cmd', gitExecutable); + if (platform === 'win32') { + return path.join(LOCAL_GIT_DIRECTORY, 'cmd', 'git.exe'); + } + return path.join(LOCAL_GIT_DIRECTORY, 'bin', 'git'); } /** @@ -493,7 +495,7 @@ export class Git implements IGitService { public async handleInfoRefs(workspaceId: string, service: string, _request: IncomingMessage, response: ServerResponse): Promise { const repoPath = await this.getWorkspaceRepoPath(workspaceId); if (!repoPath) { - response.statusCode = 404; + response.writeHead(404, { 'Content-Type': 'text/plain' }); response.end('Workspace not found'); return; } @@ -502,7 +504,10 @@ export class Git implements IGitService { await gitOperations.handleGitInfoReferences(repoPath, service, response); } catch (error) { logger.error('Git info/refs error:', { error, workspaceId, service }); - throw error; + if (!response.headersSent) { + response.writeHead(500, { 'Content-Type': 'text/plain' }); + response.end('Git info/refs failed'); + } } } @@ -512,7 +517,7 @@ export class Git implements IGitService { public async handleUploadPack(workspaceId: string, request: IncomingMessage, response: ServerResponse): Promise { const repoPath = await this.getWorkspaceRepoPath(workspaceId); if (!repoPath) { - response.statusCode = 404; + response.writeHead(404, { 'Content-Type': 'text/plain' }); response.end('Workspace not found'); return; } @@ -521,7 +526,10 @@ export class Git implements IGitService { await gitOperations.handleGitUploadPack(repoPath, request, response); } catch (error) { logger.error('Git upload-pack error:', { error, workspaceId }); - throw error; + if (!response.headersSent) { + response.writeHead(500, { 'Content-Type': 'text/plain' }); + response.end('Git upload-pack failed'); + } } } @@ -531,18 +539,20 @@ export class Git implements IGitService { public async handleReceivePack(workspaceId: string, request: IncomingMessage, response: ServerResponse): Promise { const repoPath = await this.getWorkspaceRepoPath(workspaceId); if (!repoPath) { - response.statusCode = 404; + response.writeHead(404, { 'Content-Type': 'text/plain' }); response.end('Workspace not found'); return; } try { await gitOperations.handleGitReceivePack(repoPath, request, response); - // Notify git state change after successful push this.notifyGitStateChange(repoPath, 'sync'); } catch (error) { logger.error('Git receive-pack error:', { error, workspaceId }); - throw error; + if (!response.headersSent) { + response.writeHead(500, { 'Content-Type': 'text/plain' }); + response.end('Git receive-pack failed'); + } } } }