MCPcopy Create free account
hub / github.com/bearlyai/OpenADE / handleGetFilePair

Function handleGetFilePair

projects/electron/src/modules/code/git.ts:1990–2072  ·  view source on GitHub ↗

* Get both before and after content for a file between two treeishes

(params: GetFilePairParams)

Source from the content-addressed store, hash-verified

1988 * Get both before and after content for a file between two treeishes
1989 */
1990async function handleGetFilePair(params: GetFilePairParams): Promise<GetFilePairResponse> {
1991 const startTime = Date.now()
1992 logger.info("[Git:getFilePair] Getting file pair", JSON.stringify({
1993 workDir: params.workDir,
1994 from: params.fromTreeish,
1995 to: params.toTreeish,
1996 filePath: params.filePath,
1997 oldPath: params.oldPath,
1998 }))
1999
2000 try {
2001 // Fast-reject generated / lock files — their diffs are never useful
2002 // and computing them freezes the renderer.
2003 if (isGeneratedFile(params.filePath)) {
2004 logger.info("[Git:getFilePair] Skipping generated file", JSON.stringify({ filePath: params.filePath }))
2005 return { before: "", after: "", tooLarge: true }
2006 }
2007
2008 // Get before content (use oldPath if it's a rename)
2009 const beforePath = params.oldPath || params.filePath
2010 const beforeResult = await handleGetFileAtTreeish({
2011 workDir: params.workDir,
2012 treeish: params.fromTreeish,
2013 filePath: beforePath,
2014 })
2015
2016 // Get after content - read from working tree (filesystem) not from git
2017 // This ensures we get uncommitted changes
2018 let afterContent = ""
2019 let afterTooLarge = false
2020 const fullPath = path.join(params.workDir, params.filePath)
2021
2022 if (fs.existsSync(fullPath)) {
2023 const stats = fs.statSync(fullPath)
2024 if (stats.size > MAX_FILE_SIZE_FOR_DIFF) {
2025 afterTooLarge = true
2026 logger.info("[Git:getFilePair] After file too large", JSON.stringify({
2027 filePath: params.filePath,
2028 size: stats.size,
2029 }))
2030 } else {
2031 afterContent = fs.readFileSync(fullPath, "utf8")
2032 }
2033 }
2034
2035 // If either file is too large, return tooLarge flag
2036 if (beforeResult.tooLarge || afterTooLarge) {
2037 logger.info("[Git:getFilePair] File too large for diff", JSON.stringify({
2038 filePath: params.filePath,
2039 beforeTooLarge: beforeResult.tooLarge,
2040 afterTooLarge,
2041 }))
2042 return {
2043 before: "",
2044 after: "",
2045 tooLarge: true,
2046 }
2047 }

Callers 1

getRuntimeFilePairFunction · 0.85

Calls 4

isGeneratedFileFunction · 0.85
handleGetFileAtTreeishFunction · 0.85
errorMethod · 0.80
exceedsLineLimitFunction · 0.70

Tested by

no test coverage detected