diff --git a/src/app/_components/ScriptDetailModal.tsx b/src/app/_components/ScriptDetailModal.tsx index b3cd074..8a6f3c2 100644 --- a/src/app/_components/ScriptDetailModal.tsx +++ b/src/app/_components/ScriptDetailModal.tsx @@ -61,7 +61,11 @@ export function ScriptDetailModal({ isLoading: comparisonLoading, } = api.scripts.compareScriptContent.useQuery( { slug: script?.slug ?? "" }, - { enabled: !!script && isOpen }, + { + enabled: !!script && isOpen, + refetchOnMount: true, + staleTime: 0, + }, ); // Load script mutation @@ -547,19 +551,60 @@ export function ScriptDetailModal({ {scriptFilesData?.success && (scriptFilesData.ctExists || - scriptFilesData.installExists) && - comparisonData?.success && - !comparisonLoading && ( + scriptFilesData.installExists) && (
-
- - Status:{" "} - {comparisonData.hasDifferences - ? "Update available" - : "Up to date"} - + {comparisonData?.success ? ( + <> +
+ + Status:{" "} + {comparisonData.hasDifferences + ? "Update available" + : "Up to date"} + + + ) : comparisonLoading ? ( + <> +
+ Checking for updates... + + ) : comparisonData?.error ? ( + <> +
+ Error: {comparisonData.error} + + ) : ( + <> +
+ Status: Unknown + + )} +
)} diff --git a/src/server/services/scriptDownloader.js b/src/server/services/scriptDownloader.js index 181e0ec..0ba523c 100644 --- a/src/server/services/scriptDownloader.js +++ b/src/server/services/scriptDownloader.js @@ -519,13 +519,16 @@ export class ScriptDownloaderService { comparisonPromises.push( this.compareSingleFile(script, scriptPath, `${finalTargetDir}/${fileName}`) .then(result => { + if (result.error) { + console.error(`[Comparison] Error comparing ${result.filePath}: ${result.error}`); + } if (result.hasDifferences) { hasDifferences = true; differences.push(result.filePath); } }) - .catch(() => { - // Don't add to differences if there's an error reading files + .catch((error) => { + console.error(`[Comparison] Promise error for ${scriptPath}:`, error); }) ); } @@ -541,13 +544,16 @@ export class ScriptDownloaderService { comparisonPromises.push( this.compareSingleFile(script, installScriptPath, installScriptPath) .then(result => { + if (result.error) { + console.error(`[Comparison] Error comparing ${result.filePath}: ${result.error}`); + } if (result.hasDifferences) { hasDifferences = true; differences.push(result.filePath); } }) - .catch(() => { - // Don't add to differences if there's an error reading files + .catch((error) => { + console.error(`[Comparison] Promise error for ${installScriptPath}:`, error); }) ); } @@ -567,13 +573,16 @@ export class ScriptDownloaderService { comparisonPromises.push( this.compareSingleFile(script, alpineInstallScriptPath, alpineInstallScriptPath) .then(result => { + if (result.error) { + console.error(`[Comparison] Error comparing ${result.filePath}: ${result.error}`); + } if (result.hasDifferences) { hasDifferences = true; differences.push(result.filePath); } }) - .catch(() => { - // Don't add to differences if there's an error reading files + .catch((error) => { + console.error(`[Comparison] Promise error for ${alpineInstallScriptPath}:`, error); }) ); } catch { @@ -584,10 +593,11 @@ export class ScriptDownloaderService { // Wait for all comparisons to complete await Promise.all(comparisonPromises); + console.log(`[Comparison] Completed comparison for ${script.slug}: hasDifferences=${hasDifferences}, differences=${differences.length}`); return { hasDifferences, differences }; } catch (error) { - console.error('Error comparing script content:', error); - return { hasDifferences: false, differences: [] }; + console.error(`[Comparison] Error comparing script content for ${script.slug}:`, error); + return { hasDifferences: false, differences: [], error: error.message }; } } @@ -597,16 +607,21 @@ export class ScriptDownloaderService { const repoUrl = this.getRepoUrlForScript(script); const branch = process.env.REPO_BRANCH || 'main'; + console.log(`[Comparison] Comparing ${filePath} from ${repoUrl} (branch: ${branch})`); + // Read local content const localContent = await readFile(localPath, 'utf-8'); + console.log(`[Comparison] Local file size: ${localContent.length} bytes`); // Download remote content from the script's repository const remoteContent = await this.downloadFileFromGitHub(repoUrl, remotePath, branch); + console.log(`[Comparison] Remote file size: ${remoteContent.length} bytes`); // Apply modification only for CT scripts, not for other script types let modifiedRemoteContent; if (remotePath.startsWith('ct/')) { modifiedRemoteContent = this.modifyScriptContent(remoteContent); + console.log(`[Comparison] Applied CT script modifications`); } else { modifiedRemoteContent = remoteContent; // Don't modify tools or vm scripts } @@ -614,10 +629,17 @@ export class ScriptDownloaderService { // Compare content const hasDifferences = localContent !== modifiedRemoteContent; + if (hasDifferences) { + console.log(`[Comparison] Differences found in ${filePath}`); + } else { + console.log(`[Comparison] No differences in ${filePath}`); + } + return { hasDifferences, filePath }; } catch (error) { - console.error(`Error comparing file ${filePath}:`, error); - return { hasDifferences: false, filePath }; + console.error(`[Comparison] Error comparing file ${filePath}:`, error.message); + // Return error information so it can be handled upstream + return { hasDifferences: false, filePath, error: error.message }; } }