mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
fix(checkpointing): improve error handling and messaging for Git issues (#6801)
This commit is contained in:
@@ -912,17 +912,31 @@ export const useGeminiStream = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let commitHash = await gitService?.createFileSnapshot(
|
if (!gitService) {
|
||||||
`Snapshot for ${toolCall.request.name}`,
|
onDebugMessage(
|
||||||
);
|
`Checkpointing is enabled but Git service is not available. Failed to create snapshot for ${filePath}. Ensure Git is installed and working properly.`,
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let commitHash: string | undefined;
|
||||||
|
try {
|
||||||
|
commitHash = await gitService.createFileSnapshot(
|
||||||
|
`Snapshot for ${toolCall.request.name}`,
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
onDebugMessage(
|
||||||
|
`Failed to create new snapshot: ${getErrorMessage(error)}. Attempting to use current commit.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (!commitHash) {
|
if (!commitHash) {
|
||||||
commitHash = await gitService?.getCurrentCommitHash();
|
commitHash = await gitService.getCurrentCommitHash();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!commitHash) {
|
if (!commitHash) {
|
||||||
onDebugMessage(
|
onDebugMessage(
|
||||||
`Failed to create snapshot for ${filePath}. Skipping restorable tool call.`,
|
`Failed to create snapshot for ${filePath}. Checkpointing may not be working properly. Ensure Git is installed and the project directory is accessible.`,
|
||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -959,9 +973,9 @@ export const useGeminiStream = (
|
|||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
onDebugMessage(
|
onDebugMessage(
|
||||||
`Failed to write restorable tool call file: ${getErrorMessage(
|
`Failed to create checkpoint for ${filePath}: ${getErrorMessage(
|
||||||
error,
|
error,
|
||||||
)}`,
|
)}. This may indicate a problem with Git or file system permissions.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,13 @@ export class GitService {
|
|||||||
'Checkpointing is enabled, but Git is not installed. Please install Git or disable checkpointing to continue.',
|
'Checkpointing is enabled, but Git is not installed. Please install Git or disable checkpointing to continue.',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
this.setupShadowGitRepository();
|
try {
|
||||||
|
await this.setupShadowGitRepository();
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to initialize checkpointing: ${error instanceof Error ? error.message : 'Unknown error'}. Please check that Git is working properly or disable checkpointing.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
verifyGitAvailability(): Promise<boolean> {
|
verifyGitAvailability(): Promise<boolean> {
|
||||||
@@ -105,10 +111,16 @@ export class GitService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async createFileSnapshot(message: string): Promise<string> {
|
async createFileSnapshot(message: string): Promise<string> {
|
||||||
const repo = this.shadowGitRepository;
|
try {
|
||||||
await repo.add('.');
|
const repo = this.shadowGitRepository;
|
||||||
const commitResult = await repo.commit(message);
|
await repo.add('.');
|
||||||
return commitResult.commit;
|
const commitResult = await repo.commit(message);
|
||||||
|
return commitResult.commit;
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to create checkpoint snapshot: ${error instanceof Error ? error.message : 'Unknown error'}. Checkpointing may not be working properly.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async restoreProjectFromSnapshot(commitHash: string): Promise<void> {
|
async restoreProjectFromSnapshot(commitHash: string): Promise<void> {
|
||||||
|
|||||||
Reference in New Issue
Block a user