OSDN Git Service

Allow to set DIFFCODE::DIFF flag for unique file
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Mon, 8 Jan 2018 15:57:41 +0000 (00:57 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Mon, 8 Jan 2018 15:57:41 +0000 (00:57 +0900)
Src/DirScan.cpp
Src/HexMergeDoc.cpp

index 1c22a0d..3084b44 100644 (file)
@@ -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
                {
index a513e5c..8fa3ebb 100644 (file)
@@ -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);
 }
 
 /**