OSDN Git Service

Git LogDlg "Hide unrelated changed paths" Check box work
[tortoisegit/TortoiseGitJp.git] / src / Git / GitStatusListCtrl.cpp
index b248c5b..4edf274 100644 (file)
@@ -2065,7 +2065,7 @@ bool CGitStatusListCtrl::BuildStatistics()
                if(status&(CTGitPath::LOGACTIONS_REPLACED|CTGitPath::LOGACTIONS_MODIFIED))\r
                        m_nModified++;\r
                \r
-               if(status&CTGitPath::LOGACTIONS_CONFLICT)\r
+               if(status&CTGitPath::LOGACTIONS_UNMERGED)\r
                        m_nConflicted++;\r
                \r
                if(status&(CTGitPath::LOGACTIONS_IGNORE|CTGitPath::LOGACTIONS_UNVER))\r
@@ -2303,6 +2303,26 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                if (popup.CreatePopupMenu())\r
                {\r
                        //Add Menu for verion controled file\r
+               \r
+                       if (wcStatus & CTGitPath::LOGACTIONS_UNMERGED)\r
+                       {\r
+                               if ((m_dwContextMenus & SVNSLC_POPCONFLICT)/*&&(entry->textstatus == git_wc_status_conflicted)*/)\r
+                               {\r
+                                       popup.AppendMenuIcon(IDSVNLC_EDITCONFLICT, IDS_MENUCONFLICT, IDI_CONFLICT);\r
+                               }\r
+                               if (m_dwContextMenus & SVNSLC_POPRESOLVE)\r
+                               {\r
+                                       popup.AppendMenuIcon(IDSVNLC_RESOLVECONFLICT, IDS_STATUSLIST_CONTEXT_RESOLVED, IDI_RESOLVE);\r
+                               }\r
+                               if ((m_dwContextMenus & SVNSLC_POPRESOLVE)/*&&(entry->textstatus == git_wc_status_conflicted)*/)\r
+                               {\r
+                                       //popup.AppendMenuIcon(IDSVNLC_RESOLVETHEIRS, IDS_SVNPROGRESS_MENUUSETHEIRS, IDI_RESOLVE);\r
+                                       //popup.AppendMenuIcon(IDSVNLC_RESOLVEMINE, IDS_SVNPROGRESS_MENUUSEMINE, IDI_RESOLVE);\r
+                               }\r
+                               if ((m_dwContextMenus & SVNSLC_POPCONFLICT)||(m_dwContextMenus & SVNSLC_POPRESOLVE))\r
+                                       popup.AppendMenu(MF_SEPARATOR);\r
+                       }\r
+\r
                        if (!(wcStatus &CTGitPath::LOGACTIONS_UNVER))\r
                        {\r
                                if (m_dwContextMenus & SVNSLC_POPCOMPAREWITHBASE)\r
@@ -2355,6 +2375,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                //}\r
                        }\r
                        \r
+       \r
                        ///Select Multi item\r
                        //if (GetSelectedCount() > 0)\r
                        //{\r
@@ -2402,17 +2423,17 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                        //              }\r
                        //      }\r
                        //}\r
-                       if ((GetSelectedCount() == 1)&&(!wcStatus & CTGitPath::LOGACTIONS_UNVER)\r
-                               &&(!wcStatus & CTGitPath::LOGACTIONS_IGNORE))\r
+                       if ((GetSelectedCount() == 1)&&(!(wcStatus & CTGitPath::LOGACTIONS_UNVER))\r
+                               &&(!(wcStatus & CTGitPath::LOGACTIONS_IGNORE)))\r
                        {\r
                                if (m_dwContextMenus & SVNSLC_POPSHOWLOG)\r
                                {\r
                                        popup.AppendMenuIcon(IDSVNLC_LOG, IDS_REPOBROWSE_SHOWLOG, IDI_LOG);\r
                                }\r
-//                             if (m_dwContextMenus & SVNSLC_POPBLAME)\r
-//                             {\r
-//                                     popup.AppendMenuIcon(IDSVNLC_BLAME, IDS_MENUBLAME, IDI_BLAME);\r
-//                             }\r
+                               if (m_dwContextMenus & SVNSLC_POPBLAME)\r
+                               {\r
+                                       popup.AppendMenuIcon(IDSVNLC_BLAME, IDS_MENUBLAME, IDI_BLAME);\r
+                               }\r
                        }\r
 //                     if ((wcStatus != git_wc_status_deleted)&&(wcStatus != git_wc_status_missing) && (GetSelectedCount() == 1))\r
 //                     {\r
@@ -2503,27 +2524,8 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        }\r
                                }\r
                        }\r
-#if 0\r
-                       if (((wcStatus == git_wc_status_conflicted)||(entry->isConflicted)))\r
-                       {\r
-                               if ((m_dwContextMenus & SVNSLC_POPCONFLICT)||(m_dwContextMenus & SVNSLC_POPRESOLVE))\r
-                                       popup.AppendMenu(MF_SEPARATOR);\r
 \r
-                               if ((m_dwContextMenus & SVNSLC_POPCONFLICT)&&(entry->textstatus == git_wc_status_conflicted))\r
-                               {\r
-                                       popup.AppendMenuIcon(IDSVNLC_EDITCONFLICT, IDS_MENUCONFLICT, IDI_CONFLICT);\r
-                               }\r
-                               if (m_dwContextMenus & SVNSLC_POPRESOLVE)\r
-                               {\r
-                                       popup.AppendMenuIcon(IDSVNLC_RESOLVECONFLICT, IDS_STATUSLIST_CONTEXT_RESOLVED, IDI_RESOLVE);\r
-                               }\r
-                               if ((m_dwContextMenus & SVNSLC_POPRESOLVE)&&(entry->textstatus == git_wc_status_conflicted))\r
-                               {\r
-                                       popup.AppendMenuIcon(IDSVNLC_RESOLVETHEIRS, IDS_SVNPROGRESS_MENUUSETHEIRS, IDI_RESOLVE);\r
-                                       popup.AppendMenuIcon(IDSVNLC_RESOLVEMINE, IDS_SVNPROGRESS_MENUUSEMINE, IDI_RESOLVE);\r
-                               }\r
-                       }\r
-#endif\r
+\r
 #if 0                  \r
                        if (GetSelectedCount() > 0)\r
                        {\r
@@ -2728,6 +2730,64 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        \r
                                }\r
                                break;\r
+\r
+                       case IDSVNLC_BLAME:\r
+                               {\r
+                                       CString sCmd;\r
+                                       sCmd.Format(_T("\"%s\" /command:blame /path:\"%s\""),\r
+                                               (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), g_Git.m_CurrentDir+_T("\\")+filepath->GetWinPath());\r
+\r
+                                       CAppUtils::LaunchApplication(sCmd, NULL, false);\r
+                               }\r
+                               break;\r
+\r
+                       case IDSVNLC_LOG:\r
+                               {\r
+                                       CString sCmd;\r
+                                       sCmd.Format(_T("\"%s\" /command:log /path:\"%s\""),\r
+                                               (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), g_Git.m_CurrentDir+_T("\\")+filepath->GetWinPath());\r
+\r
+                                       CAppUtils::LaunchApplication(sCmd, NULL, false);\r
+                               }\r
+                               break;\r
+\r
+                       case IDSVNLC_EDITCONFLICT:\r
+                       {\r
+                               CAppUtils::ConflictEdit(*filepath);\r
+                               break;\r
+                       }\r
+                       case IDSVNLC_RESOLVECONFLICT:\r
+                       {\r
+                               if (CMessageBox::Show(m_hWnd, IDS_PROC_RESOLVE, IDS_APPNAME, MB_ICONQUESTION | MB_YESNO)==IDYES)\r
+                               {\r
+                                       POSITION pos = GetFirstSelectedItemPosition();\r
+                                       while (pos != 0)\r
+                                       {\r
+                                               int index;\r
+                                               index = GetNextSelectedItem(pos);\r
+                                               CTGitPath * fentry =(CTGitPath*) this->GetItemData(index);\r
+                                               if(fentry == NULL)\r
+                                                       continue;\r
+\r
+                                               if ( fentry->m_Action & CTGitPath::LOGACTIONS_UNMERGED)\r
+                                               {\r
+                                                       CString cmd,output;\r
+                                                       cmd.Format(_T("git.exe add \"%s\""),fentry->GetGitPathString());\r
+                                                       if(g_Git.Run(cmd,&output,CP_OEMCP))\r
+                                                       {\r
+                                                               CMessageBox::Show(m_hWnd, output, _T("TortoiseSVN"), MB_ICONERROR);\r
+                                                       }else\r
+                                                       {\r
+                                                               fentry->m_Action |= CTGitPath::LOGACTIONS_MODIFIED;\r
+                                                               fentry->m_Action &=~CTGitPath::LOGACTIONS_UNMERGED;\r
+                                                       }\r
+                                               }\r
+                                               \r
+                                       }\r
+                                       Show(m_dwShow, 0, m_bShowFolders);\r
+                               }\r
+                       }\r
+                       break;\r
 #if 0\r
                        case IDSVNLC_COPY:\r
                                CopySelectedEntriesToClipboard(0);\r
@@ -2960,38 +3020,6 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                                        }\r
                                }\r
                                break;\r
-                       case IDSVNLC_LOG:\r
-                               {\r
-                                       CString sCmd;\r
-                                       sCmd.Format(_T("\"%s\" /command:log /path:\"%s\""),\r
-                                               (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), filepath.GetWinPath());\r
-\r
-                                       if (!filepath.IsUrl())\r
-                                       {\r
-                                               sCmd += _T(" /propspath:\"");\r
-                                               sCmd += filepath.GetWinPathString();\r
-                                               sCmd += _T("\"");\r
-                                       }       \r
-\r
-                                       CAppUtils::LaunchApplication(sCmd, NULL, false);\r
-                               }\r
-                               break;\r
-                       case IDSVNLC_BLAME:\r
-                               {\r
-                                       CString sCmd;\r
-                                       sCmd.Format(_T("\"%s\" /command:blame /path:\"%s\""),\r
-                                               (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("TortoiseProc.exe")), filepath.GetWinPath());\r
-\r
-                                       if (!filepath.IsUrl())\r
-                                       {\r
-                                               sCmd += _T(" /propspath:\"");\r
-                                               sCmd += filepath.GetWinPathString();\r
-                                               sCmd += _T("\"");\r
-                                       }       \r
-\r
-                                       CAppUtils::LaunchApplication(sCmd, NULL, false);\r
-                               }\r
-                               break;\r
                        case IDSVNLC_OPEN:\r
                                {\r
                                        int ret = (int)ShellExecute(this->m_hWnd, NULL, filepath.GetWinPath(), NULL, NULL, SW_SHOW);\r
@@ -3454,47 +3482,7 @@ void CGitStatusListCtrl::OnContextMenuList(CWnd * pWnd, CPoint point)
                        case IDSVNLC_EDITCONFLICT:\r
                                SVNDiff::StartConflictEditor(filepath);\r
                                break;\r
-                       case IDSVNLC_RESOLVECONFLICT:\r
-                       case IDSVNLC_RESOLVEMINE:\r
-                       case IDSVNLC_RESOLVETHEIRS:\r
-                               {\r
-                                       git_wc_conflict_choice_t result = git_wc_conflict_choose_merged;\r
-                                       switch (cmd)\r
-                                       {\r
-                                       case IDSVNLC_RESOLVETHEIRS:\r
-                                               result = git_wc_conflict_choose_theirs_full;\r
-                                               break;\r
-                                       case IDSVNLC_RESOLVEMINE:\r
-                                               result = git_wc_conflict_choose_mine_full;\r
-                                               break;\r
-                                       case IDSVNLC_RESOLVECONFLICT:\r
-                                               result = git_wc_conflict_choose_merged;\r
-                                               break;\r
-                                       }\r
-                                       if (CMessageBox::Show(m_hWnd, IDS_PROC_RESOLVE, IDS_APPNAME, MB_ICONQUESTION | MB_YESNO)==IDYES)\r
-                                       {\r
-                                               SVN git;\r
-                                               POSITION pos = GetFirstSelectedItemPosition();\r
-                                               while (pos != 0)\r
-                                               {\r
-                                                       int index;\r
-                                                       index = GetNextSelectedItem(pos);\r
-                                                       FileEntry * fentry = m_arStatusArray[m_arListArray[index]];\r
-                                                       if (!git.Resolve(fentry->GetPath(), result, FALSE))\r
-                                                       {\r
-                                                               CMessageBox::Show(m_hWnd, git.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);\r
-                                                       }\r
-                                                       else\r
-                                                       {\r
-                                                               fentry->status = git_wc_status_modified;\r
-                                                               fentry->textstatus = git_wc_status_modified;\r
-                                                               fentry->isConflicted = false;\r
-                                                       }\r
-                                               }\r
-                                               Show(m_dwShow, 0, m_bShowFolders);\r
-                                       }\r
-                               }\r
-                               break;\r
+                       \r
                        case IDSVNLC_ADD:\r
                                {\r
                                        SVN git;\r
@@ -4327,7 +4315,11 @@ void CGitStatusListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
                                // brown  : missing, deleted, replaced\r
                                // green  : merged (or potential merges)\r
                                // red    : conflicts or sure conflicts\r
-                               if(entry->m_Action & CTGitPath::LOGACTIONS_CONFLICT)\r
+                               if(entry->m_Action & CTGitPath::LOGACTIONS_GRAY)\r
+                               {\r
+                                       crText = RGB(128,128,128);\r
+\r
+                               }else if(entry->m_Action & CTGitPath::LOGACTIONS_UNMERGED)\r
                                {\r
                                        crText = m_Colors.GetColor(CColors::Conflict);\r
 \r
@@ -5330,8 +5322,12 @@ int CGitStatusListCtrl::UpdateWithGitPathList(CTGitPathList &list)
        m_arStatusArray.clear();\r
        for(int i=0;i<list.GetCount();i++)\r
        {\r
-               CTGitPath * gitpatch=(CTGitPath*)&list[i];\r
-               gitpatch->m_Checked = TRUE;\r
+               CTGitPath * gitpath=(CTGitPath*)&list[i];\r
+               \r
+               if(gitpath ->m_Action & CTGitPath::LOGACTIONS_HIDE)\r
+                       continue;\r
+\r
+               gitpath->m_Checked = TRUE;\r
                m_arStatusArray.push_back((CTGitPath*)&list[i]);\r
        }\r
        return 0;\r