OSDN Git Service

PATCH: [ 1880857 ] Open conflict files from command line
authorKimmo Varis <kimmov@gmail.com>
Mon, 28 Jan 2008 14:13:23 +0000 (14:13 +0000)
committerKimmo Varis <kimmov@gmail.com>
Mon, 28 Jan 2008 14:13:23 +0000 (14:13 +0000)
Docs/Users/ChangeLog.txt
Src/MainFrm.cpp
Src/MainFrm.h
Src/Merge.cpp

index 2f2ff99..adceb9f 100644 (file)
@@ -5,6 +5,7 @@ to Subversion revision numbers (rXXXXX).
 WinMerge 2.7.7.4
   Detect (and read/write) UTF-8 files without BOM (#1879271)
   Tell user that file is not a conflict file (#1880423)
+  Allow opening conflict file from command line (#1880857)
   Translation updates:
   - Croatian (r4952)
   - Japanese (r4962)
index 053f738..3856091 100644 (file)
@@ -3484,6 +3484,18 @@ void CMainFrame::OnHelpTranslations()
 }
 
 /**
+ * @brief Called when user selects File/Open Conflict...
+ */
+void CMainFrame::OnFileOpenConflict()
+{
+       CString conflictFile;
+       if (SelectFile(GetSafeHwnd(), conflictFile))
+       {
+               DoOpenConflict(conflictFile);
+       }
+}
+
+/**
  * @brief Select and open conflict file for resolving.
  * This function lets user to select conflict file to resolve.
  * Then we parse conflict file to two files to "merge" and
@@ -3493,53 +3505,53 @@ void CMainFrame::OnHelpTranslations()
  * be modified anyway. Right-side file is user's file which is set as
  * modified by default so user can just save it and accept workspace
  * file as resolved file.
+ * @param [in] conflictFile Full path to conflict file to open.
+ * @return TRUE if conflict file was opened for resolving.
  */
-void CMainFrame::OnFileOpenConflict()
+BOOL CMainFrame::DoOpenConflict(LPCTSTR conflictFile)
 {
-       CString conflictFile;
-       if (SelectFile(GetSafeHwnd(), conflictFile))
+       BOOL conflictCompared = FALSE;
+       String confl = (LPCTSTR)conflictFile;
+
+       bool confFile = IsConflictFile(confl);
+       if (!confFile)
        {
-               String confl = (LPCTSTR)conflictFile;
+               CString message;
+               LangFormatString1(message, IDS_NOT_CONFLICT_FILE, confl.c_str());
+               AfxMessageBox(message, MB_ICONSTOP);
+               return FALSE;
+       }
 
-               bool confFile = IsConflictFile(confl);
-               if (!confFile)
-               {
-                       CString message;
-                       LangFormatString1(message, IDS_NOT_CONFLICT_FILE, confl.c_str());
-                       AfxMessageBox(message, MB_ICONSTOP);
-                       return;
-               }
-               
-               // Create temp files and put them into the list,
-               // from where they get deleted when MainFrame is deleted.
-               TempFile *wTemp = new TempFile();
-               String workFile = wTemp->Create(_T("confw_"));
-               m_tempFiles.push_back(wTemp);
-               TempFile *vTemp = new TempFile();
-               String revFile = vTemp->Create(_T("confv_"));
-               m_tempFiles.push_back(vTemp);
-
-               // Parse conflict file into two files.
-               bool inners;
-               bool success = ParseConflictFile(confl, workFile, revFile, inners);
+       // Create temp files and put them into the list,
+       // from where they get deleted when MainFrame is deleted.
+       TempFile *wTemp = new TempFile();
+       String workFile = wTemp->Create(_T("confw_"));
+       m_tempFiles.push_back(wTemp);
+       TempFile *vTemp = new TempFile();
+       String revFile = vTemp->Create(_T("confv_"));
+       m_tempFiles.push_back(vTemp);
 
-               if (success)
-               {
-                       // Open two parsed files to WinMerge, telling WinMerge to
-                       // save over original file (given as third filename).
-                       m_strSaveAsPath = conflictFile;
-                       String theirs = LoadResString(IDS_CONFLICT_THEIRS_FILE);
-                       String my = LoadResString(IDS_CONFLICT_MINE_FILE);
-                       m_strDescriptions[0] = theirs;
-                       m_strDescriptions[1] = my;
-
-                       DoFileOpen(revFile.c_str(), workFile.c_str(),
-                                       FFILEOPEN_READONLY | FFILEOPEN_NOMRU,
-                                       FFILEOPEN_NOMRU | FFILEOPEN_MODIFIED);
-               }
-               else
-               {
-                       LangMessageBox(IDS_ERROR_CONF_RESOLVE, MB_ICONSTOP);
-               }
+       // Parse conflict file into two files.
+       bool inners;
+       bool success = ParseConflictFile(confl, workFile, revFile, inners);
+
+       if (success)
+       {
+               // Open two parsed files to WinMerge, telling WinMerge to
+               // save over original file (given as third filename).
+               m_strSaveAsPath = conflictFile;
+               String theirs = LoadResString(IDS_CONFLICT_THEIRS_FILE);
+               String my = LoadResString(IDS_CONFLICT_MINE_FILE);
+               m_strDescriptions[0] = theirs;
+               m_strDescriptions[1] = my;
+
+               conflictCompared = DoFileOpen(revFile.c_str(), workFile.c_str(),
+                               FFILEOPEN_READONLY | FFILEOPEN_NOMRU,
+                               FFILEOPEN_NOMRU | FFILEOPEN_MODIFIED);
        }
-}
+       else
+       {
+               LangMessageBox(IDS_ERROR_CONF_RESOLVE, MB_ICONSTOP);
+       }
+       return conflictCompared;
+}
\ No newline at end of file
index 20b3624..6d0d776 100644 (file)
@@ -135,6 +135,7 @@ public:
        static void SetMainIcon(CDialog * dlg);
        void StartFlashing();
        bool AskCloseConfirmation();
+       BOOL DoOpenConflict(LPCTSTR conflictFile);
 
 // Overrides
        virtual void GetMessageString(UINT nID, CString& rMessage) const;
@@ -335,4 +336,3 @@ SyntaxColors * GetMainSyntaxColors(); // access to the singleton set of syntax c
 // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
 
 #endif // !defined(AFX_MAINFRM_H__BBCD4F8C_34E4_11D1_BAA6_00A024706EDC__INCLUDED_)
-
index 6bb11de..f7f3c0b 100644 (file)
@@ -51,6 +51,7 @@
 #include "LanguageSelect.h"
 #include "OptionsDef.h"
 #include "MergeCmdLineInfo.h"
+#include "ConflictFileParser.h"
 
 // For shutdown cleanup
 #include "charsets.h"
@@ -624,6 +625,10 @@ BOOL CMergeApp::ParseArgsAndDoOpen(MergeCmdLineInfo& cmdInfo, CMainFrame* pMainF
                        {
                                bCompared = LoadAndOpenProjectFile(sFilepath);
                        }
+                       else if (IsConflictFile((LPCTSTR)sFilepath))
+                       {
+                               bCompared = pMainFrame->DoOpenConflict(sFilepath);
+                       }
                        else
                        {
                                cmdInfo.m_dwRightFlags = FFILEOPEN_NONE;