From f00a3066c3db2acd2acbc635c9d31c32b85662ef Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Tue, 9 Jan 2018 00:57:41 +0900 Subject: [PATCH] Allow to set DIFFCODE::DIFF flag for unique file --- Src/DirScan.cpp | 33 +++------------------------------ Src/HexMergeDoc.cpp | 44 ++++++++------------------------------------ 2 files changed, 11 insertions(+), 66 deletions(-) diff --git a/Src/DirScan.cpp b/Src/DirScan.cpp index 1c22a0d57..3084b4425 100644 --- a/Src/DirScan.cpp +++ b/Src/DirScan.cpp @@ -745,36 +745,9 @@ void CompareDiffItem(DIFFITEM &di, CDiffContext * pCtxt) ) { di.diffcode.diffcode |= DIFFCODE::INCLUDED; - // 2. Add unique files - // We must compare unique files to itself to detect encoding - if (di.diffcode.isSideFirstOnly() || di.diffcode.isSideSecondOnly() || (nDirs > 2 && di.diffcode.isSideThirdOnly())) - { - int nCurrentCompMethod = pCtxt->GetCompareMethod(); - if (nCurrentCompMethod != CMP_DATE && - nCurrentCompMethod != CMP_DATE_SIZE && - nCurrentCompMethod != CMP_SIZE) - { - FolderCmp folderCmp; - unsigned diffCode = folderCmp.prepAndCompareFiles(pCtxt, di); - - // Add possible binary flag for unique items - if (diffCode & DIFFCODE::BIN) - di.diffcode.diffcode |= DIFFCODE::BIN; - StoreDiffData(di, pCtxt, &folderCmp); - } - else - { - StoreDiffData(di, pCtxt, NULL); - } - } - // 3. Compare two files - else - { - // Really compare - FolderCmp folderCmp; - di.diffcode.diffcode |= folderCmp.prepAndCompareFiles(pCtxt, di); - StoreDiffData(di, pCtxt, &folderCmp); - } + FolderCmp folderCmp; + di.diffcode.diffcode |= folderCmp.prepAndCompareFiles(pCtxt, di); + StoreDiffData(di, pCtxt, &folderCmp); } else { diff --git a/Src/HexMergeDoc.cpp b/Src/HexMergeDoc.cpp index a513e5c6c..8fa3ebbed 100644 --- a/Src/HexMergeDoc.cpp +++ b/Src/HexMergeDoc.cpp @@ -61,46 +61,18 @@ static int Try(HRESULT hr, UINT type = MB_OKCANCEL|MB_ICONSTOP); */ static void UpdateDiffItem(int nBuffers, DIFFITEM &di, CDiffContext *pCtxt) { - di.diffcode.diffcode |= DIFFCODE::SIDEFLAGS; + di.diffcode.setSideNone(); for (int nBuffer = 0; nBuffer < nBuffers; nBuffer++) { di.diffFileInfo[nBuffer].ClearPartial(); - di.diffFileInfo[nBuffer].ClearPartial(); - if (!pCtxt->UpdateInfoFromDiskHalf(di, nBuffer)) - { - if (nBuffer == 0) - di.diffcode.diffcode &= ~DIFFCODE::FIRST; - else if (nBuffer == 1) - di.diffcode.diffcode &= ~DIFFCODE::SECOND; - else - di.diffcode.diffcode &= ~DIFFCODE::THIRD; - } - } - // 1. Clear flags - di.diffcode.diffcode &= ~(DIFFCODE::TEXTFLAGS | DIFFCODE::COMPAREFLAGS); - // 2. Process unique files - // We must compare unique files to itself to detect encoding - if (!di.diffcode.existAll()) - { - int compareMethod = pCtxt->GetCompareMethod(); - if (compareMethod != CMP_DATE && compareMethod != CMP_DATE_SIZE && - compareMethod != CMP_SIZE) - { - di.diffcode.diffcode |= DIFFCODE::SAME; - FolderCmp folderCmp; - int diffCode = folderCmp.prepAndCompareFiles(pCtxt, di); - // Add possible binary flag for unique items - if (diffCode & DIFFCODE::BIN) - di.diffcode.diffcode |= DIFFCODE::BIN; - } - } - // 3. Compare two files - else - { - // Really compare - FolderCmp folderCmp; - di.diffcode.diffcode |= folderCmp.prepAndCompareFiles(pCtxt, di); + if (pCtxt->UpdateInfoFromDiskHalf(di, nBuffer)) + di.diffcode.diffcode |= DIFFCODE::FIRST << nBuffers; } + // Clear flags + di.diffcode.diffcode &= ~(DIFFCODE::TEXTFLAGS | DIFFCODE::COMPAREFLAGS | DIFFCODE::COMPAREFLAGS3WAY); + // Really compare + FolderCmp folderCmp; + di.diffcode.diffcode |= folderCmp.prepAndCompareFiles(pCtxt, di); } /** -- 2.11.0