OSDN Git Service

PATCH: [ 800420 ] Fix recursive compare and cleanup recursive usage
authorKimmo Varis <kimmov@gmail.com>
Sun, 7 Sep 2003 11:02:59 +0000 (11:02 +0000)
committerKimmo Varis <kimmov@gmail.com>
Sun, 7 Sep 2003 11:02:59 +0000 (11:02 +0000)
Src/DiffThread.cpp
Src/DiffThread.h
Src/DirDoc.cpp
Src/DirDoc.h
Src/MainFrm.cpp
Src/readme.txt

index 31236bb..5f11f16 100644 (file)
@@ -61,10 +61,11 @@ CDiffContext * CDiffThread::SetContext(CDiffContext * pCtx)
 /**
  * @brief Start directory compare thread
  */
-UINT CDiffThread::CompareDirectories(CString dir1, CString dir2)
+UINT CDiffThread::CompareDirectories(CString dir1, CString dir2, BOOL bRecursive)
 {
        diffParam.path1 = dir1;
        diffParam.path2 = dir2;
+       diffParam.bRecursive = bRecursive;
        diffParam.context = m_pDiffContext;
        diffParam.msgUIUpdate = m_msgUpdateUI;
        diffParam.hWindow = m_hWnd;
@@ -101,6 +102,7 @@ UINT CDiffThread::GetThreadState()
 
 /**
  * @brief Directory compare thread function
+ *
  * Calls diffutils's compare_files() and after compare is ready
  * sends message to UI so UI can update itself.
  */
@@ -111,7 +113,7 @@ UINT DiffThread(LPVOID lpParam)
        UINT msgID = myStruct->msgUIUpdate;
 
        bool casesensitive = false;
-       int depth = -1;
+       int depth = myStruct->bRecursive ? -1 : 0;
        CString subdir; // blank to start at roots specified in diff context
        DirScan(subdir, myStruct->context, casesensitive, depth);
        
index f19ff21..63498ec 100644 (file)
@@ -49,6 +49,7 @@ struct DiffFuncStruct
        UINT msgStatusUpdate;
        HWND hWindow;
        UINT nThreadState;
+       BOOL bRecursive;
 };
 
 /**
@@ -61,7 +62,7 @@ public:
        CDiffThread();
        ~CDiffThread();
        CDiffContext * SetContext(CDiffContext * pCtx);
-       UINT CompareDirectories(CString dir1, CString dir2);
+       UINT CompareDirectories(CString dir1, CString dir2,     BOOL bRecursive);
        void SetHwnd(HWND hWnd);
        void SetMessageIDs(UINT updateMsg, UINT statusMsg);
        UINT GetThreadState();
index 56097b9..0709f0d 100644 (file)
@@ -41,8 +41,6 @@
 #include "paths.h"
 #include "WaitStatusCursor.h"
 
-extern int recursive;
-
 #ifdef _DEBUG
 #define new DEBUG_NEW
 #undef THIS_FILE
@@ -62,6 +60,7 @@ CDirDoc::CDirDoc()
        m_pCtxt=NULL;
        m_bReuseMergeDocs = TRUE;
        m_pFilter = NULL;
+       m_bRecursive = FALSE;
 }
 
 CDirDoc::~CDirDoc()
@@ -241,7 +240,7 @@ void CDirDoc::Rescan()
        m_diffThread.SetHwnd(m_pDirView->GetSafeHwnd());
        m_diffThread.SetMessageIDs(MSG_UI_UPDATE, MSG_STAT_UPDATE);
        m_diffThread.CompareDirectories(m_pCtxt->m_strNormalizedLeft,
-               m_pCtxt->m_strNormalizedRight);
+                       m_pCtxt->m_strNormalizedRight, m_bRecursive);
 
        gLog.Write(_T("Directory scan complete\r\n"));
 
@@ -631,3 +630,11 @@ BOOL CDirDoc::GetReadOnly(BOOL bLeft) const
        else
                return m_bRORight;
 }
+
+/**
+ * @brief Enable/disable recursive directory compare
+ */
+void CDirDoc::SetRecursive(BOOL bRecursive)
+{
+       m_bRecursive = bRecursive;
+}
index 2adc224..09aec18 100644 (file)
@@ -79,6 +79,7 @@ public:
 
 // Implementation
 public:
+       void SetRecursive(BOOL bRecursive);
        BOOL GetReadOnly(BOOL bLeft) const;
        void SetReadOnly(BOOL bLeft, BOOL bReadOnly);
        void ReadSettings();
@@ -122,6 +123,7 @@ private:
        BOOL m_bReuseMergeDocs; // policy to reuse existing merge docs
        BOOL m_bROLeft;
        BOOL m_bRORight;
+       BOOL m_bRecursive;
 };
 
 /// callback for file/directory filtering during diff
index d1664ac..b002d03 100644 (file)
@@ -63,7 +63,6 @@
 static char THIS_FILE[] = __FILE__;
 #endif
 
-extern int recursive;
 CMainFrame *mf = NULL;
 CLogFile gLog(_T("WinMerge.log"), NULL, TRUE);
 
@@ -932,8 +931,6 @@ BOOL CMainFrame::DoFileOpen(LPCTSTR pszLeft /*=NULL*/, LPCTSTR pszRight /*=NULL*
        // open the diff
        if (pathsType == IS_EXISTING_DIR)
        {
-               recursive = bRecurse;
-
                if (pDirDoc)
                {
                        CDiffContext *pCtxt = new CDiffContext(strLeft, strRight);
@@ -941,6 +938,7 @@ BOOL CMainFrame::DoFileOpen(LPCTSTR pszLeft /*=NULL*/, LPCTSTR pszRight /*=NULL*
                        {
                                pDirDoc->SetReadOnly(TRUE, FALSE);
                                pDirDoc->SetReadOnly(FALSE, FALSE);
+                               pDirDoc->SetRecursive(bRecurse);
                                pDirDoc->SetDiffContext(pCtxt);
                                pCtxt->SetRegExp(strExt);
                                pDirDoc->Rescan();
@@ -954,7 +952,6 @@ BOOL CMainFrame::DoFileOpen(LPCTSTR pszLeft /*=NULL*/, LPCTSTR pszRight /*=NULL*
        }
        else
        {
-               recursive = FALSE;
                ShowMergeDoc(pDirDoc, strLeft, strRight);
        }
        return TRUE;
index c140001..d904628 100644 (file)
@@ -1,3 +1,7 @@
+2003-09-07 Kimmo
+ PATCH: [ 800420 ] Fix recursive compare and cleanup recursive usage
+  WinMerge: DiffThread.h DiffThread.cpp DirDoc.h DirDoc.cpp MainFrm.cpp
+
 2003-09-06 Perry
  PATCH: [ 795082 ] Display Private Build version in about box
  WinMerge: Merge.cpp Merge.rc resource.h