OSDN Git Service

2005-07-22 Perry
authorPerry Rapp <elsapo@users.sourceforge.net>
Fri, 22 Jul 2005 02:30:03 +0000 (02:30 +0000)
committerPerry Rapp <elsapo@users.sourceforge.net>
Fri, 22 Jul 2005 02:30:03 +0000 (02:30 +0000)
 PATCH: [ 1242339 ] Fix CMergeDoc::Rescan to set bIdentical in all cases
  Src: DiffWrapper.cpp DiffWrapper.h MergeDoc.cpp PatchTool.cpp

Src/DiffWrapper.cpp
Src/DiffWrapper.h
Src/MergeDoc.cpp
Src/PatchTool.cpp
Src/readme.txt

index 7300242..52fdd87 100644 (file)
@@ -333,12 +333,15 @@ BOOL CDiffWrapper::RunFileDiff()
        {
                m_status.bBinaries = TRUE;
                if (bin_flag == -1)
-                       m_status.bBinariesIdentical = FALSE;
+                       m_status.bIdentical = FALSE;
                else
-                       m_status.bBinariesIdentical = TRUE;
+                       m_status.bIdentical = TRUE;
        }
        else
+       { // text files according to diffutils, so change script exists
+               m_status.bIdentical = (script == 0);
                m_status.bBinaries = FALSE;
+       }
        m_status.bLeftMissingNL = inf[0].missing_newline;
        m_status.bRightMissingNL = inf[1].missing_newline;
 
index 11eff25..8541e13 100644 (file)
@@ -113,8 +113,10 @@ struct DIFFSTATUS
        BOOL bLeftMissingNL; /**< Left file is missing EOL before EOF */
        BOOL bRightMissingNL; /**< Right file is missing EOL before EOF */
        BOOL bBinaries; /**< Files are binaries */
-       BOOL bBinariesIdentical; /**< Binary files are identical. */
+       BOOL bIdentical; /**< diffutils said files are identical */
        BOOL bPatchFileFailed; /**< Creating patch file failed */
+
+       DIFFSTATUS() { memset(this, 0, sizeof(*this)); } // start out with all flags clear
 };
 
 /**
index a116a16..d5e5325 100644 (file)
@@ -326,7 +326,6 @@ int CMergeDoc::Rescan(BOOL &bBinary, BOOL &bIdentical,
                BOOL bForced /* =FALSE */)
 {
        DIFFOPTIONS diffOptions = {0};
-       DIFFSTATUS status = {0};
        DiffFileInfo fileInfo;
        BOOL diffSuccess;
        int nResult = RESCAN_OK;
@@ -383,6 +382,7 @@ int CMergeDoc::Rescan(BOOL &bBinary, BOOL &bIdentical,
        diffSuccess = m_diffWrapper.RunFileDiff();
 
        // Read diff-status
+       DIFFSTATUS status;
        m_diffWrapper.GetDiffStatus(&status);
        if (bBinary) // believe caller if we were told these are binaries
                status.bBinaries = TRUE;
@@ -398,14 +398,15 @@ int CMergeDoc::Rescan(BOOL &bBinary, BOOL &bIdentical,
                                status.bRightMissingNL);
        }
 
+       // set identical/diff result as recorded by diffutils
+       bIdentical = status.bIdentical;
+
        // Determine errors and binary file compares
        if (!diffSuccess)
                nResult = RESCAN_FILE_ERR;
        else if (status.bBinaries)
        {
                bBinary = TRUE;
-               if (status.bBinariesIdentical)
-                       bIdentical = TRUE;
        }
        else
        {
index 7783e6c..79f4e52 100644 (file)
@@ -47,7 +47,7 @@ void CPatchTool::AddFiles(CString file1, CString file2)
  */
 int CPatchTool::CreatePatch()
 {
-       DIFFSTATUS status = {0};
+       DIFFSTATUS status;
        BOOL bResult = TRUE;
        BOOL bDiffSuccess;
        int retVal = 0;
index 3aa4d89..5001d31 100644 (file)
@@ -1,3 +1,7 @@
+2005-07-22 Perry
+ PATCH: [ 1242339 ] Fix CMergeDoc::Rescan to set bIdentical in all cases
+  Src: DiffWrapper.cpp DiffWrapper.h MergeDoc.cpp PatchTool.cpp
+
 2005-07-21 Perry
  PATCH: [ 1226311 ] Record notes about why compare failed
   Src: DiffItem.h DiffWrapper.cpp DiffWrapper.h