OSDN Git Service

FolerCompare: Fix binary flag infomation of unique files being lost
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 14 Jan 2018 06:00:40 +0000 (15:00 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 14 Jan 2018 06:00:40 +0000 (15:00 +0900)
Src/CompareEngines/ByteCompare.cpp
Src/CompareEngines/DiffUtils.cpp
Src/DiffItem.h
Src/FolderCmp.cpp
Testing/GoogleTest/ByteCompare/ByteCompare_test.cpp

index df319e7..e7c16b9 100644 (file)
@@ -262,11 +262,11 @@ int ByteCompare::CompareFiles(FileLocation *location)
                        bool bBin1 = (m_textStats[1].nzeros > 0);
 
                        if (bBin0 && bBin1)
-                               diffcode |= DIFFCODE::BIN;
+                               diffcode |= DIFFCODE::BIN | DIFFCODE::BINSIDE1 | DIFFCODE::BINSIDE2;
                        else if (bBin0)
-                               diffcode |= DIFFCODE::BINSIDE1;
+                               diffcode |= DIFFCODE::BIN | DIFFCODE::BINSIDE1;
                        else if (bBin1)
-                               diffcode |= DIFFCODE::BINSIDE2;
+                               diffcode |= DIFFCODE::BIN | DIFFCODE::BINSIDE2;
                        else
                                diffcode |= DIFFCODE::TEXT;
 
index 79b5816..35900d3 100644 (file)
@@ -234,13 +234,13 @@ int DiffUtils::diffutils_compare_files()
                switch (bin_file)
                {
                case BINFILE_SIDE1:
-                       code |= DIFFCODE::BINSIDE1;
+                       code |= DIFFCODE::BIN | DIFFCODE::BINSIDE1;
                        break;
                case BINFILE_SIDE2:
-                       code |= DIFFCODE::BINSIDE2;
+                       code |= DIFFCODE::BIN | DIFFCODE::BINSIDE2;
                        break;
                case BINFILE_SIDE1 | BINFILE_SIDE2:
-                       code |= DIFFCODE::BIN;
+                       code |= DIFFCODE::BIN | DIFFCODE::BINSIDE1 | DIFFCODE::BINSIDE2;
                        break;
                default:
                        std::ostringstream ss;
index a7c823d..f8ddbd9 100644 (file)
@@ -49,8 +49,8 @@ struct DIFFCODE
                // and each set of flags is in a different hex digit
                // to make debugging easier
                // These can always be packed down in the future
-               TEXTFLAGS=0x7, TEXT=0x1, BINSIDE1=0x2, BINSIDE2=0x3, BIN=0x4,
-               TYPEFLAGS=0x30, FILE=0x10, DIR=0x20,
+               TEXTFLAGS=0x1F, TEXT=0x1, BIN=0x2, BINSIDE1=0x4, BINSIDE2=0x8, BINSIDE3=0x10,
+               TYPEFLAGS=0x60, FILE=0x20, DIR=0x40,
                SIDEFLAGS=0x700, FIRST=0x100, SECOND=0x200, THIRD=0x400, BOTH=0x300, ALL=0x700,
                COMPAREFLAGS=0x7000, NOCMP=0x0000, SAME=0x1000, DIFF=0x2000, CMPERR=0x3000, CMPABORT=0x4000,
                COMPAREFLAGS3WAY=0x18000, DIFFALL=0x0000, DIFF1STONLY=0x8000, DIFF2NDONLY=0x10000, DIFF3RDONLY=0x18000,
@@ -149,11 +149,7 @@ public:
        bool isResultFiltered() const { return CheckFilter(diffcode, DIFFCODE::SKIPPED); }
        // type
        bool isText() const { return Check(diffcode, DIFFCODE::TEXTFLAGS, DIFFCODE::TEXT); }
-       void setText() { Set(DIFFCODE::TEXTFLAGS, DIFFCODE::TEXT); }
-       bool isBin() const { return Check(diffcode, DIFFCODE::TEXTFLAGS, DIFFCODE::BIN) ||
-                       Check(diffcode, DIFFCODE::TEXTFLAGS, DIFFCODE::BINSIDE1) ||
-                       Check(diffcode, DIFFCODE::TEXTFLAGS, DIFFCODE::BINSIDE2); }
-       void setBin() { Set(DIFFCODE::TEXTFLAGS, DIFFCODE::BIN); }
+       bool isBin() const { return (diffcode & DIFFCODE::BIN) != 0; }
        // rescan
        bool isScanNeeded() const { return ((diffcode & DIFFCODE::SCANFLAGS) == DIFFCODE::NEEDSCAN); }
 
index bd1462f..c8760be 100644 (file)
@@ -173,7 +173,8 @@ int FolderCmp::prepAndCompareFiles(CDiffContext * pCtxt, DIFFITEM &di)
                // This allows us to (faster) compare big binary files
                if (nCompMethod == CMP_CONTENT && 
                        (di.diffFileInfo[0].size > pCtxt->m_nQuickCompareLimit ||
-                       di.diffFileInfo[1].size > pCtxt->m_nQuickCompareLimit))
+                       di.diffFileInfo[1].size > pCtxt->m_nQuickCompareLimit || 
+                       (nDirs > 2 && di.diffFileInfo[2].size > pCtxt->m_nQuickCompareLimit)))
                {
                        nCompMethod = CMP_QUICK_CONTENT;
                }
@@ -383,11 +384,17 @@ int FolderCmp::prepAndCompareFiles(CDiffContext * pCtxt, DIFFITEM &di)
                                                code |= DIFFCODE::DIFF;
                                        else
                                                code |= DIFFCODE::SAME;
-                                       if (code10 & DIFFCODE::BIN || code12 & DIFFCODE::BIN)
-                                               code |= DIFFCODE::BIN;
-                                       else
+                                       if ((code10 & DIFFCODE::TEXTFLAGS) == DIFFCODE::TEXT && 
+                                           (code12 & DIFFCODE::TEXTFLAGS) == DIFFCODE::TEXT)
                                                code |= DIFFCODE::TEXT;
-
+                                       else
+                                               code |= DIFFCODE::BIN;
+                                       if ((code10 & DIFFCODE::TEXTFLAGS) == (DIFFCODE::BIN | DIFFCODE::BINSIDE1))
+                                               code |= DIFFCODE::BINSIDE2;
+                                       if ((code10 & DIFFCODE::TEXTFLAGS) == (DIFFCODE::BIN | DIFFCODE::BINSIDE2))
+                                               code |= DIFFCODE::BINSIDE1;
+                                       if ((code12 & DIFFCODE::TEXTFLAGS) == (DIFFCODE::BIN | DIFFCODE::BINSIDE2))
+                                               code |= DIFFCODE::BINSIDE3;
                                        if ((code & DIFFCODE::COMPAREFLAGS) == DIFFCODE::DIFF)
                                        {
                                                if ((code12 & DIFFCODE::COMPAREFLAGS) == DIFFCODE::SAME)
index 3ac1a5b..2c180f3 100644 (file)
@@ -121,7 +121,7 @@ namespace
                bc.SetFileData(2, pair.filedata);
 
                bc.SetCompareOptions(option);
-               EXPECT_EQ(DIFFCODE::BIN|DIFFCODE::DIFF, bc.CompareFiles(pair.location));
+               EXPECT_EQ(DIFFCODE::BIN|DIFFCODE::BINSIDE1|DIFFCODE::BINSIDE2|DIFFCODE::DIFF, bc.CompareFiles(pair.location));
                FileTextStats stats[2];
                bc.GetTextStats(0, &stats[0]);
                bc.GetTextStats(1, &stats[1]);