Also, add the command line option /r- for non-recursive folder comparison.
<arg choice="opt" rep="norepeat"><option>/r</option></arg>
+ <arg choice="opt" rep="norepeat"><option>/r-</option></arg>
+
<arg choice="opt" rep="norepeat"><option>/e</option></arg>
<arg choice="opt" rep="norepeat"><option>/f</option>
<varlistentry>
<indexterm>
+ <primary>non-recursive folder compare</primary>
+ </indexterm>
+ <term><option>/r-</option></term>
+ <listitem>
+ <para>Compares all files within the specified folders
+ but excludes the files and subfolders within its subfolders.
+ This allows for a shorter comparison time.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <indexterm>
<primary>WinMerge window</primary>
<secondary>closing</secondary>
</indexterm>
<arg choice="opt" rep="norepeat"><option>/r</option></arg>
+ <arg choice="opt" rep="norepeat"><option>/r-</option></arg>
+
<arg choice="opt" rep="norepeat"><option>/e</option></arg>
<arg choice="opt" rep="norepeat"><option>/f</option>
<varlistentry>
<indexterm>
+ <primary>非再帰フォルダー比較</primary>
+ </indexterm>
+ <term><option>/r-</option></term>
+ <listitem>
+ <para>指定されたフォルダー内のすべてのファイルを比較しますが、
+ そのサブフォルダー内のファイルとサブフォルダーは除外します。
+ これにより、比較時間を短縮することができます。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <indexterm>
<primary>WinMergeウインドウ</primary>
<secondary>閉じる</secondary>
</indexterm>
static bool AddToRecentDocs(const PathContext& paths,
const unsigned flags[], const String desc[],
- bool recurse, const String& filter,
+ std::optional<bool> recurse, const String& filter,
const PackingInfo *infoUnpacker, const PrediffingInfo *infoPrediffer,
UINT nID, const CMainFrame::OpenFileParams *pOpenParams)
{
if (nIndex < paths.GetSize() - 1)
title += _T(" - ");
}
- if (recurse)
- params += _T("/r ");
+ if (recurse.has_value())
+ params += *recurse ? _T("/r ") : _T("/r- ");
if (!filter.empty())
params += _T("/f \"") + filter + _T("\" ");
switch (nID)
*/
bool CMainFrame::DoFileOrFolderOpen(const PathContext * pFiles /*= nullptr*/,
const fileopenflags_t dwFlags[] /*= nullptr*/, const String strDesc[] /*= nullptr*/, const String& sReportFile /*= T("")*/,
- bool bRecurse /*= false*/, CDirDoc* pDirDoc/*= nullptr*/,
+ std::optional<bool> bRecurse /*= false*/, CDirDoc* pDirDoc/*= nullptr*/,
const PackingInfo *infoUnpacker /*= nullptr*/, const PrediffingInfo *infoPrediffer /*= nullptr*/,
UINT nID /*= 0*/, const OpenFileParams *pOpenParams /*= nullptr*/)
{
bRO[2] = (dwFlags[2] & FFILEOPEN_READONLY) != 0;
};
+ bool bRecurse2 = bRecurse.has_value() ? *bRecurse : GetOptionsMgr()->GetBool(OPT_CMP_INCLUDE_SUBDIRS);
+
// pop up dialog unless arguments exist (and are compatible)
paths::PATH_EXISTENCE pathsType = paths::GetPairComparability(tFiles, IsArchiveFile);
bool allowFolderCompare = (static_cast<int>(nID) <= 0);
pOpenDoc->m_dwFlags[2] = dwFlags[2];
}
pOpenDoc->m_files = tFiles;
- pOpenDoc->m_bRecurse = bRecurse;
+ pOpenDoc->m_bRecurse = bRecurse2;
if (infoUnpacker)
pOpenDoc->m_strUnpackerPipeline = infoUnpacker->GetPluginPipeline();
CFrameWnd *pFrame = theApp.m_pOpenTemplate->CreateNewFrame(pOpenDoc, nullptr);
{
// Anything that can go wrong inside InitCompare() will yield an
// exception. There is no point in checking return value.
- pDirDoc->InitCompare(tFiles, bRecurse, pTempPathContext);
+ pDirDoc->InitCompare(tFiles, bRecurse2, pTempPathContext);
const auto* pOpenFolderParams = dynamic_cast<const OpenFolderParams*>(pOpenParams);
if (pOpenFolderParams)
bool DoFileOrFolderOpen(const PathContext *pFiles = nullptr,
const fileopenflags_t dwFlags[] = nullptr, const String strDesc[] = nullptr,
- const String& sReportFile = _T(""), bool bRecurse = false, CDirDoc *pDirDoc = nullptr,
+ const String& sReportFile = _T(""), std::optional<bool> bRecurse = false, CDirDoc *pDirDoc = nullptr,
const PackingInfo * infoUnpacker = nullptr, const PrediffingInfo * infoPrediffer = nullptr,
UINT nID = 0, const OpenFileParams *pOpenParams = nullptr);
bool DoFileOpen(UINT nID, const PathContext* pFiles,
, m_bShowCompareAsMenu(false)
, m_bEscShutdown(false)
, m_bExitIfNoDiff(Disabled)
- , m_bRecurse(false)
, m_bNonInteractive(false)
, m_nSingleInstance()
, m_bShowUsage(false)
else if (param == _T("r"))
{
// -r to compare recursively
- m_bRecurse = true;
+ if (*q == ':')
+ {
+ q = EatParam(q + 1, param);
+ m_bRecurse = (tc::ttoi(param.c_str()) != 0);
+ }
+ else
+ m_bRecurse = true;
+ }
+ else if (param == _T("r-"))
+ {
+ // -r to compare non-recursively
+ m_bRecurse = false;
}
else if (param == _T("s-"))
{
bool m_bShowCompareAsMenu; /**< Show Compare As menu. */
bool m_bEscShutdown; /**< Pressing ESC will close the application */
ExitNoDiff m_bExitIfNoDiff; /**< Exit if files are identical. */
- bool m_bRecurse; /**< Include sub folder in directories compare. */
+ std::optional<bool> m_bRecurse; /**< Include sub folder in directories compare. */
std::optional<CompareMethodType> m_nCompMethod; /**< Compare method */
bool m_bNonInteractive; /**< Suppress user's notifications. */
std::optional<int> m_nSingleInstance; /**< Allow only one instance of WinMerge executable. */