[Winmerge-svn] SF.net SVN: winmerge: [4154] trunk/Src
Windows visual diff and merge for files and directories
Brought to you by:
christianlist,
grimmdp
From: <ki...@us...> - 2007-03-08 22:04:46
|
Revision: 4154 http://svn.sourceforge.net/winmerge/?rev=4154&view=rev Author: kimmov Date: 2007-03-08 14:04:42 -0800 (Thu, 08 Mar 2007) Log Message: ----------- PATCH: [ 1676802 ] Move compare options to DiffContext Modified Paths: -------------- trunk/Src/ByteComparator.cpp trunk/Src/ByteComparator.h trunk/Src/Changes.txt trunk/Src/CompareOptions.cpp trunk/Src/CompareOptions.h trunk/Src/DiffContext.cpp trunk/Src/DiffContext.h trunk/Src/DirDoc.cpp trunk/Src/DirDoc.h trunk/Src/FolderCmp.cpp Modified: trunk/Src/ByteComparator.cpp =================================================================== --- trunk/Src/ByteComparator.cpp 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/ByteComparator.cpp 2007-03-08 22:04:42 UTC (rev 4154) @@ -3,12 +3,13 @@ * * @brief Implements ByteComparator class. */ -// RCS ID line follows -- this is updated by CVS +// ID line follows -- this is updated by SVN // $Id$ #include "stdafx.h" #include "ByteComparator.h" #include "FileTextStats.h" +#include "CompareOptions.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -112,21 +113,13 @@ /** * @brief Constructor taking compare options as parameters. - * @param [in] ignore_case Ignore character case. - * @param [in] ignore_space_change Ignore change in whitespace. - * @param [in] ignore_all_space Ignore all whitespace chars. - * @param [in] ignore_eol_diff Ignore EOL byte differences. - * @param [in] ignore_blank_lines Ignore blank lines. - * @note Parameters are same than diffutils options. + * @param [in] options Compare options. */ -ByteComparator::ByteComparator(int ignore_case, int ignore_space_change, - int ignore_all_space, int ignore_eol_diff, int ignore_blank_lines) +ByteComparator::ByteComparator(const QuickCompareOptions * options) // settings -: m_ignore_case(!!ignore_case) -, m_ignore_space_change(!!ignore_space_change) -, m_ignore_all_space(!!ignore_all_space) -, m_ignore_eol_diff(!!ignore_eol_diff) -, m_ignore_blank_lines(!!ignore_blank_lines) +: m_ignore_case(options->m_bIgnoreCase) +, m_ignore_eol_diff(options->m_bIgnoreEOLDifference) +, m_ignore_blank_lines(options->m_bIgnoreBlankLines) // state , m_wsflag(false) , m_eol0(false) @@ -136,6 +129,15 @@ , m_bol0(true) , m_bol1(true) { + if (options->m_ignoreWhitespace == WHITESPACE_IGNORE_CHANGE) + m_ignore_space_change = true; + else + m_ignore_space_change = false; + + if (options->m_ignoreWhitespace == WHITESPACE_IGNORE_ALL) + m_ignore_all_space = true; + else + m_ignore_all_space = false; } /** Modified: trunk/Src/ByteComparator.h =================================================================== --- trunk/Src/ByteComparator.h 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/ByteComparator.h 2007-03-08 22:04:42 UTC (rev 4154) @@ -3,12 +3,13 @@ * * @brief Declaration file for ByteComparator class. */ -// RCS ID line follows -- this is updated by CVS +// ID line follows -- this is updated by SVN // $Id$ #ifndef ByteComparator_h_included #define ByteComparator_h_included +class QuickCompareOptions; struct FileTextStats; @@ -24,8 +25,7 @@ class ByteComparator { public: - ByteComparator(int ignore_case, int ignore_space_change, int ignore_all_space, - int ignore_eol_diff, int ignore_blank_lines); + ByteComparator(const QuickCompareOptions * options); public: /** @brief Return values for CompareBuffers method. */ Modified: trunk/Src/Changes.txt =================================================================== --- trunk/Src/Changes.txt 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/Changes.txt 2007-03-08 22:04:42 UTC (rev 4154) @@ -12,6 +12,9 @@ Src: DirActions.cpp Fix comment about contributors file Src: AboutDlg.cpp + PATCH: [ 1676802 ] Move compare options to DiffContext + Src: ByteComparator.cpp ByteComparator.h CompareOptions.cpp CompareOptions.h + DiffContext.cpp DiffContext.h DirDoc.cpp DirDoc.h FolderCmp.cpp 2007-03-07 Kimmo PATCH: [ 1675087 ] New copy confirmation dialog Modified: trunk/Src/CompareOptions.cpp =================================================================== --- trunk/Src/CompareOptions.cpp 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/CompareOptions.cpp 2007-03-08 22:04:42 UTC (rev 4154) @@ -3,6 +3,8 @@ * * @brief Compare options implementation. */ +// ID line follows -- this is updated by SVN +// $Id: ByteComparator.h 3397 2006-07-27 10:41:24Z kimmov $ #include "stdafx.h" #include "Diff.h" @@ -23,20 +25,10 @@ } /** - * @brief Default constructor. - */ -DiffutilsOptions::DiffutilsOptions() -: m_outputStyle(DIFF_OUTPUT_NORMAL) -, m_contextLines(0) -, m_filterCommentsLines(0) -{ -} - -/** * @brief Sets options from DIFFOPTIONS structure. * @param [in] options Diffutils options. */ -void DiffutilsOptions::SetFromDiffOptions(const DIFFOPTIONS & options) +void CompareOptions::SetFromDiffOptions(const DIFFOPTIONS &options) { switch (options.nIgnoreWhitespace) { @@ -53,9 +45,37 @@ _RPTF0(_CRT_ERROR, "Unknown whitespace ignore value!"); break; } - m_bIgnoreBlankLines = options.bIgnoreBlankLines; - m_bIgnoreCase = options.bIgnoreCase; - m_bIgnoreEOLDifference = options.bIgnoreEol; + m_bIgnoreBlankLines = !!options.bIgnoreBlankLines; + m_bIgnoreCase = !!options.bIgnoreCase; + m_bIgnoreEOLDifference = !!options.bIgnoreEol; +} + +/** + * @brief Default constructor. + */ +QuickCompareOptions::QuickCompareOptions() +: m_bStopAfterFirstDiff(FALSE) +{ + +} + +/** + * @brief Default constructor. + */ +DiffutilsOptions::DiffutilsOptions() +: m_outputStyle(DIFF_OUTPUT_NORMAL) +, m_contextLines(0) +, m_filterCommentsLines(0) +{ +} + +/** + * @brief Sets options from DIFFOPTIONS structure. + * @param [in] options Diffutils options. + */ +void DiffutilsOptions::SetFromDiffOptions(const DIFFOPTIONS & options) +{ + CompareOptions::SetFromDiffOptions(options); m_filterCommentsLines = options.bFilterCommentsLines; } Modified: trunk/Src/CompareOptions.h =================================================================== --- trunk/Src/CompareOptions.h 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/CompareOptions.h 2007-03-08 22:04:42 UTC (rev 4154) @@ -3,6 +3,8 @@ * * @brief Compare options classes and types. */ +// ID line follows -- this is updated by SVN +// $Id$ #ifndef CompareOptions_h_included #define CompareOptions_h_included @@ -82,6 +84,7 @@ { public: CompareOptions(); + virtual void SetFromDiffOptions(const DIFFOPTIONS & options); enum WhitespaceIgnoreChoices m_ignoreWhitespace; /**< Ignore whitespace characters */ bool m_bIgnoreBlankLines; /**< Ignore blank lines (both sides) */ @@ -99,13 +102,26 @@ { public: DiffutilsOptions(); - void SetFromDiffOptions(const DIFFOPTIONS & options); void SetToDiffUtils(); void GetAsDiffOptions(DIFFOPTIONS &options); + virtual void SetFromDiffOptions(const DIFFOPTIONS & options); enum DiffOutputType m_outputStyle; /**< Output style (for patch files) */ int m_contextLines; /**< Number of context lines (for patch files) */ int m_filterCommentsLines;/**< Ignore Multiline comments differences.*/ }; +/** + * @brief Compare options used with Quick compare -method. + * This class has some Quick Compare specifics in addition to general compare + * options. + */ +class QuickCompareOptions : public CompareOptions +{ +public: + QuickCompareOptions(); + + BOOL m_bStopAfterFirstDiff; /**< Optimize compare by stopping after first difference? */ +}; + #endif // CompareOptions_h_included Modified: trunk/Src/DiffContext.cpp =================================================================== --- trunk/Src/DiffContext.cpp 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/DiffContext.cpp 2007-03-08 22:04:42 UTC (rev 4154) @@ -23,13 +23,14 @@ * * @brief Implementation of CDiffContext */ -// RCS ID line follows -- this is updated by CVS +// ID line follows -- this is updated by SVN // $Id$ ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include <shlwapi.h> #include "Merge.h" +#include "CompareOptions.h" #include "CompareStats.h" #include "version.h" #include "FilterList.h" @@ -69,6 +70,7 @@ , m_bStopAfterFirstDiff(FALSE) , m_pFilterList(NULL) , m_bCollectReady(FALSE) +, m_pCompareOptions(NULL) { m_paths.SetLeft(pszLeft); m_paths.SetRight(pszRight); @@ -109,6 +111,7 @@ CDiffContext::~CDiffContext() { + delete m_pCompareOptions; delete m_pFilterList; DeleteCriticalSection(&m_criticalSect); } @@ -236,8 +239,47 @@ dfi.version = GetFixedFileVersion(spath); } +/** + * @brief Create compare-method specific compare options class. + * This function creates a compare options class that is specific for + * selectec compare method. Compare options class is initialized from + * given set of options. + * @param [in] compareMethod Selectec compare method. + * @param [in] options Initial set of compare options. + * @return TRUE if creation succeeds. + */ +BOOL CDiffContext::CreateCompareOptions(int compareMethod, const DIFFOPTIONS & options) +{ + if (m_pCompareOptions) + delete m_pCompareOptions; + + switch (compareMethod) + { + case CMP_CONTENT: + m_pCompareOptions = new DiffutilsOptions(); + break; + + case CMP_QUICK_CONTENT: + m_pCompareOptions = new QuickCompareOptions(); + break; + + default: + // No really options to set.. + break; + } + + if (m_pCompareOptions == NULL) + return FALSE; + + m_nCompMethod = compareMethod; + m_pCompareOptions->SetFromDiffOptions(options); + + return TRUE; +} + /** @brief Forward call to retrieve plugin info (winds up in DirDoc) */ -void CDiffContext::FetchPluginInfos(const CString& filteredFilenames, PackingInfo ** infoUnpacker, PrediffingInfo ** infoPrediffer) +void CDiffContext::FetchPluginInfos(const CString& filteredFilenames, + PackingInfo ** infoUnpacker, PrediffingInfo ** infoPrediffer) { ASSERT(m_piPluginInfos); m_piPluginInfos->FetchPluginInfos(filteredFilenames, infoUnpacker, infoPrediffer); Modified: trunk/Src/DiffContext.h =================================================================== --- trunk/Src/DiffContext.h 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/DiffContext.h 2007-03-08 22:04:42 UTC (rev 4154) @@ -3,7 +3,7 @@ * * @brief Declarations of CDiffContext and diff structures */ -// RCS ID line follows -- this is updated by CVS +// ID line follows -- this is updated by SVN // $Id$ #if !defined(AFX_DIFFCONTEXT_H__D3CC86BE_F11E_11D2_826C_00A024706EDC__INCLUDED_) @@ -29,6 +29,8 @@ class CompareStats; class IAbortable; class FilterList; +class CompareOptions; +struct DIFFOPTIONS; // Interface for reporting current file, as diff traverses file tree /*class IDiffStatus @@ -83,8 +85,11 @@ BOOL UpdateInfoFromDiskHalf(DIFFITEM & di, BOOL bLeft); void UpdateStatusFromDisk(POSITION diffpos, BOOL bLeft, BOOL bRight); + BOOL CreateCompareOptions(int compareMethod, const DIFFOPTIONS & options); + // retrieve or manufacture plugin info for specified file comparison - void FetchPluginInfos(const CString& filteredFilenames, PackingInfo ** infoUnpacker, PrediffingInfo ** infoPrediffer); + void FetchPluginInfos(const CString& filteredFilenames, + PackingInfo ** infoUnpacker, PrediffingInfo ** infoPrediffer); bool ShouldAbort() const; void SetAbortable(IAbortable * piAbortable) { m_piAbortable = piAbortable; } @@ -102,6 +107,7 @@ FilterList * m_pFilterList; /**< Filter list for line filters */ CRITICAL_SECTION m_criticalSect; /**< Critical section protecting list access. */ BOOL m_bCollectReady; /**< Tells collection phase is done. */ + CompareOptions *m_pCompareOptions; /**< Compare options for folder compare */ private: CList<DIFFITEM,DIFFITEM&> *m_pList; /**< Pointer to list, used to access list */ Modified: trunk/Src/DirDoc.cpp =================================================================== --- trunk/Src/DirDoc.cpp 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/DirDoc.cpp 2007-03-08 22:04:42 UTC (rev 4154) @@ -24,7 +24,7 @@ * @brief Implementation file for CDirDoc * */ -// RCS ID line follows -- this is updated by CVS +// ID line follows -- this is updated by SVN // $Id$ // @@ -77,15 +77,6 @@ , m_bMarkedRescan(FALSE) , m_pTempPathContext(NULL) { - DIFFOPTIONS options = {0}; - - options.nIgnoreWhitespace = GetOptionsMgr()->GetInt(OPT_CMP_IGNORE_WHITESPACE); - options.bIgnoreBlankLines = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_BLANKLINES); - options.bFilterCommentsLines = GetOptionsMgr()->GetBool(OPT_CMP_FILTER_COMMENTLINES); - options.bIgnoreCase = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_CASE); - options.bIgnoreEol = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_EOL); - - m_diffOptions.SetFromDiffOptions(options); } /** @@ -336,14 +327,21 @@ LoadLineFilterList(); + DIFFOPTIONS options = {0}; + options.nIgnoreWhitespace = GetOptionsMgr()->GetInt(OPT_CMP_IGNORE_WHITESPACE); + options.bIgnoreBlankLines = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_BLANKLINES); + options.bFilterCommentsLines = GetOptionsMgr()->GetBool(OPT_CMP_FILTER_COMMENTLINES); + options.bIgnoreCase = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_CASE); + options.bIgnoreEol = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_EOL); + + m_pCtxt->CreateCompareOptions(GetOptionsMgr()->GetInt(OPT_CMP_METHOD), options); + m_pCtxt->m_hDirFrame = pf->GetSafeHwnd(); m_pCtxt->m_bGuessEncoding = GetOptionsMgr()->GetBool(OPT_CP_DETECT); - m_pCtxt->m_nCompMethod = GetOptionsMgr()->GetInt(OPT_CMP_METHOD); m_pCtxt->m_bIgnoreSmallTimeDiff = GetOptionsMgr()->GetBool(OPT_IGNORE_SMALL_FILETIME); m_pCtxt->m_bStopAfterFirstDiff = GetOptionsMgr()->GetBool(OPT_CMP_STOP_AFTER_FIRST); m_pCtxt->m_nQuickCompareLimit = GetOptionsMgr()->GetInt(OPT_CMP_QUICK_LIMIT); m_pCtxt->m_pCompareStats = m_pCompareStats; - m_diffOptions.SetToDiffUtils(); // Set total items count since we don't collect items if (m_bMarkedRescan) @@ -732,15 +730,6 @@ */ void CDirDoc::RefreshOptions() { - DIFFOPTIONS options = {0}; - - options.nIgnoreWhitespace = GetOptionsMgr()->GetInt(OPT_CMP_IGNORE_WHITESPACE); - options.bIgnoreBlankLines = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_BLANKLINES); - options.bFilterCommentsLines = GetOptionsMgr()->GetBool(OPT_CMP_FILTER_COMMENTLINES); - options.bIgnoreCase = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_CASE); - options.bIgnoreEol = GetOptionsMgr()->GetBool(OPT_CMP_IGNORE_EOL); - - m_diffOptions.SetFromDiffOptions(options); if (m_pDirView) m_pDirView->RefreshOptions(); } Modified: trunk/Src/DirDoc.h =================================================================== --- trunk/Src/DirDoc.h 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/DirDoc.h 2007-03-08 22:04:42 UTC (rev 4154) @@ -23,7 +23,7 @@ * @brief Declaration file for CDirDoc * */ -// RCS ID line follows -- this is updated by CVS +// ID line follows -- this is updated by SVN // $Id$ #if !defined(AFX_DIRDOC_H__0B17B4C1_356F_11D1_95CD_444553540000__INCLUDED_) @@ -171,7 +171,6 @@ PluginManager m_pluginman; BOOL m_bReuseCloses; /**< Are we closing because of reuse? */ BOOL m_bMarkedRescan; /**< If TRUE next rescan scans only marked items */ - DiffutilsOptions m_diffOptions; /**< Compare options for folder compare */ }; //{{AFX_INSERT_LOCATION}} Modified: trunk/Src/FolderCmp.cpp =================================================================== --- trunk/Src/FolderCmp.cpp 2007-03-08 17:54:47 UTC (rev 4153) +++ trunk/Src/FolderCmp.cpp 2007-03-08 22:04:42 UTC (rev 4154) @@ -3,7 +3,10 @@ * * @brief Implementation file for FolderCmp */ +// ID line follows -- this is updated by SVN +// $Id: files.cpp 3845 2006-11-24 22:32:35Z kimmov $ + #include "stdafx.h" #include "paths.h" #include "FilterList.h" @@ -224,6 +227,10 @@ int bin_flag = 0; int bin_file = 0; // bitmap for binary files + DiffutilsOptions *pOptions = + dynamic_cast<DiffutilsOptions *>(m_pCtx->m_pCompareOptions); + pOptions->SetToDiffUtils(); + // Do the actual comparison (generating a change script) struct change *script = NULL; BOOL success = Diff2Files(&script, depth, &bin_flag, FALSE, &bin_file); @@ -358,6 +365,9 @@ */ int FolderCmp::byte_compare_files(BOOL bStopAfterFirstDiff, const IAbortable * piAbortable) { + QuickCompareOptions *pOptions = + dynamic_cast<QuickCompareOptions*>(m_pCtx->m_pCompareOptions); + // Close any descriptors open for diffutils m_diffFileData.Reset(); @@ -394,8 +404,7 @@ eof[i] = false; } - ByteComparator comparator(ignore_case_flag, ignore_space_change_flag - , ignore_all_space_flag, ignore_eol_diff, ignore_blank_lines_flag); + ByteComparator comparator(pOptions); // Begin loop // we handle the files in WMCMPBUFF sized buffers (variable buff[][]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |