OSDN Git Service

Support Git svn-clone at clone dialog.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / AppUtils.cpp
index 7feffa1..fe45e2f 100644 (file)
@@ -43,6 +43,9 @@
 #include "ResetDlg.h"\r
 #include "DeleteConflictDlg.h"\r
 #include "ChangedDlg.h"\r
+#include "SendMailDlg.h"\r
+#include "SVNProgressDlg.h"\r
+#include "PushDlg.h"\r
 \r
 CAppUtils::CAppUtils(void)\r
 {\r
@@ -643,7 +646,7 @@ bool CAppUtils::LaunchPAgent(CString *keyfile,CString * pRemote)
        proc += key;\r
        proc += _T("\"");\r
 \r
-    return LaunchApplication(proc, IDS_ERR_EXTDIFFSTART, false);\r
+    return LaunchApplication(proc, IDS_ERR_PAGEANT, false);\r
 }\r
 bool CAppUtils::LaunchRemoteSetting()\r
 {\r
@@ -1021,11 +1024,18 @@ bool CAppUtils::StartShowUnifiedDiff(HWND hWnd, const CTGitPath& url1, const git
        CString cmd;\r
        if(rev1 == GitRev::GetWorkingCopy())\r
        {\r
-               cmd.Format(_T("git.exe diff --stat -p %s"),rev2);\r
+               cmd.Format(_T("git.exe diff --stat -p %s "),rev2);\r
        }else\r
        {       \r
                cmd.Format(_T("git.exe diff-tree -r -p --stat %s %s"),rev1,rev2);\r
        }\r
+\r
+       if( !url1.IsEmpty() )\r
+       {\r
+               cmd+=_T(" \"");\r
+               cmd+=url1.GetGitPathString();\r
+               cmd+=_T("\" ");\r
+       }\r
        g_Git.RunLogFile(cmd,tempfile);\r
        CAppUtils::StartUnifiedDiffViewer(tempfile,rev1.Left(6)+_T(":")+rev2.Left(6));\r
 \r
@@ -1868,3 +1878,239 @@ bool CAppUtils::IsSSHPutty()
     }\r
     return false;\r
 }\r
+\r
+CString CAppUtils::GetClipboardLink()\r
+{\r
+       if (!OpenClipboard(NULL))\r
+               return CString();\r
+\r
+       CString sClipboardText;\r
+       HGLOBAL hglb = GetClipboardData(CF_TEXT);\r
+       if (hglb)\r
+       {\r
+               LPCSTR lpstr = (LPCSTR)GlobalLock(hglb);\r
+               sClipboardText = CString(lpstr);\r
+               GlobalUnlock(hglb); \r
+       }\r
+       hglb = GetClipboardData(CF_UNICODETEXT);\r
+       if (hglb)\r
+       {\r
+               LPCTSTR lpstr = (LPCTSTR)GlobalLock(hglb);\r
+               sClipboardText = lpstr;\r
+               GlobalUnlock(hglb); \r
+       }\r
+       CloseClipboard();\r
+\r
+       if(!sClipboardText.IsEmpty())\r
+       {\r
+               if(sClipboardText[0] == _T('\"') && sClipboardText[sClipboardText.GetLength()-1] == _T('\"'))\r
+                       sClipboardText=sClipboardText.Mid(1,sClipboardText.GetLength()-2);\r
+\r
+               if(sClipboardText.Find( _T("http://")) == 0)\r
+                       return sClipboardText;\r
+               \r
+               if(sClipboardText.Find( _T("https://")) == 0)\r
+                       return sClipboardText;\r
+\r
+               if(sClipboardText.Find( _T("git://")) == 0)\r
+                       return sClipboardText;\r
+\r
+               if(sClipboardText.Find( _T("ssh://")) == 0)\r
+                       return sClipboardText;\r
+\r
+               if(sClipboardText.GetLength()>=2)\r
+                       if( sClipboardText[1] == _T(':') )\r
+                               if( (sClipboardText[0] >= 'A' &&  sClipboardText[0] <= 'Z') \r
+                                       || (sClipboardText[0] >= 'a' &&  sClipboardText[0] <= 'z') )\r
+                                       return sClipboardText;\r
+       }\r
+\r
+       return CString(_T(""));\r
+}\r
+\r
+CString CAppUtils::ChooseRepository(CString *path)\r
+{\r
+       CBrowseFolder browseFolder;\r
+       browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r
+       CString strCloneDirectory;\r
+       if(path)\r
+               strCloneDirectory=*path;\r
+\r
+       CString title;\r
+       title.LoadString(IDS_CHOOSE_REPOSITORY);\r
+\r
+       browseFolder.SetInfo(title);\r
+\r
+       if (browseFolder.Show(NULL, strCloneDirectory) == CBrowseFolder::OK) \r
+       {\r
+               return strCloneDirectory;\r
+               \r
+       }else\r
+       {\r
+               return CString();\r
+       }\r
+       \r
+}\r
+\r
+bool CAppUtils::SendPatchMail(CTGitPathList &list,bool autoclose)\r
+{\r
+       CSendMailDlg dlg;\r
+\r
+       dlg.m_PathList  = list;\r
+       \r
+       if(dlg.DoModal()==IDOK)\r
+       {\r
+               if(dlg.m_PathList.GetCount() == 0)\r
+                       return FALSE;\r
+       \r
+               CGitProgressDlg progDlg;\r
+               \r
+               theApp.m_pMainWnd = &progDlg;\r
+               progDlg.SetCommand(CGitProgressDlg::GitProgress_SendMail);\r
+                               \r
+               progDlg.SetAutoClose(autoclose);\r
+\r
+               progDlg.SetPathList(dlg.m_PathList);\r
+                               //ProjectProperties props;\r
+                               //props.ReadPropsPathList(dlg.m_pathList);\r
+                               //progDlg.SetProjectProperties(props);\r
+               progDlg.SetItemCount(dlg.m_PathList.GetCount());\r
+\r
+               DWORD flags =0;\r
+               if(dlg.m_bAttachment)\r
+                       flags |= SENDMAIL_ATTACHMENT;\r
+               if(dlg.m_bCombine)\r
+                       flags |= SENDMAIL_COMBINED;\r
+\r
+               progDlg.SetSendMailOption(dlg.m_To,dlg.m_CC,dlg.m_Subject,flags);\r
+               \r
+               progDlg.DoModal();              \r
+\r
+               return true;\r
+       }\r
+       return false;\r
+}\r
+int CAppUtils::GetLogOutputEncode()\r
+{\r
+       CString cmd,output;\r
+       int start=0;\r
+       cmd=_T("git.exe config i18n.logOutputEncoding");\r
+       if(g_Git.Run(cmd,&output,CP_ACP))\r
+       {\r
+               cmd=_T("git.exe config i18n.commitencoding");\r
+               if(g_Git.Run(cmd,&output,CP_ACP))\r
+                       return CP_UTF8;\r
+       \r
+               int start=0;\r
+               output=output.Tokenize(_T("\n"),start);\r
+               return CUnicodeUtils::GetCPCode(output);        \r
+\r
+       }else\r
+       {\r
+               output=output.Tokenize(_T("\n"),start);\r
+               return CUnicodeUtils::GetCPCode(output);\r
+       }\r
+}\r
+int CAppUtils::SaveCommitUnicodeFile(CString &filename, CString &message)\r
+{\r
+       CFile file(filename,CFile::modeReadWrite|CFile::modeCreate );\r
+       CString cmd,output;\r
+       int cp=CP_UTF8;\r
+\r
+       cmd=_T("git.exe config i18n.commitencoding");\r
+       if(g_Git.Run(cmd,&output,CP_ACP))\r
+               cp=CP_UTF8;\r
+       \r
+       int start=0;\r
+       output=output.Tokenize(_T("\n"),start);\r
+       cp=CUnicodeUtils::GetCPCode(output);    \r
+\r
+       int len=message.GetLength();\r
+\r
+       char * buf;\r
+       buf = new char[len*4 + 4];\r
+       SecureZeroMemory(buf, (len*4 + 4));\r
+\r
+       int lengthIncTerminator = WideCharToMultiByte(cp, 0, message, -1, buf, len*4, NULL, NULL);\r
+\r
+       file.Write(buf,lengthIncTerminator-1);\r
+       file.Close();\r
+       delete buf;\r
+       return 0;\r
+}\r
+\r
+bool CAppUtils::Push()\r
+{\r
+       CPushDlg dlg;\r
+//     dlg.m_Directory=this->orgCmdLinePath.GetWinPathString();\r
+       if(dlg.DoModal()==IDOK)\r
+       {\r
+//             CString dir=dlg.m_Directory;\r
+//             CString url=dlg.m_URL;\r
+               CString cmd;\r
+               CString force;\r
+               CString tags;\r
+               CString thin;\r
+\r
+               if(dlg.m_bAutoLoad)\r
+               {\r
+                       CAppUtils::LaunchPAgent(NULL,&dlg.m_URL);\r
+               }\r
+\r
+               if(dlg.m_bPack)\r
+                       thin=_T("--thin");\r
+               if(dlg.m_bTags)\r
+                       tags=_T("--tags");\r
+               if(dlg.m_bForce)\r
+                       force=_T("--force");\r
+               \r
+               cmd.Format(_T("git.exe push %s %s %s \"%s\" %s"),\r
+                               thin,tags,force,\r
+                               dlg.m_URL,\r
+                               dlg.m_BranchSourceName);\r
+               if (!dlg.m_BranchRemoteName.IsEmpty())\r
+               {\r
+                       cmd += _T(":") + dlg.m_BranchRemoteName;\r
+               }\r
+\r
+               CProgressDlg progress;\r
+               progress.m_GitCmd=cmd;\r
+               if(progress.DoModal()==IDOK)\r
+                       return TRUE;\r
+               \r
+       }\r
+       return FALSE;\r
+}\r
+\r
+bool CAppUtils::CreateMultipleDirectory(CString& szPath)\r
+{\r
+    CString strDir(szPath);\r
+    if (strDir.GetAt(strDir.GetLength()-1)!=_T('\\'))\r
+    {\r
+        strDir.AppendChar(_T('\\'));\r
+    }\r
+    std::vector<CString> vPath;\r
+    CString strTemp;\r
+    bool bSuccess = false;\r
+    \r
+    for (int i=0;i<strDir.GetLength();++i)\r
+    {\r
+        if (strDir.GetAt(i) != _T('\\')) \r
+        {\r
+            strTemp.AppendChar(strDir.GetAt(i));\r
+        }\r
+        else \r
+        {\r
+            vPath.push_back(strTemp);\r
+            strTemp.AppendChar(_T('\\'));\r
+        }\r
+    }\r
+\r
+    std::vector<CString>::const_iterator vIter;\r
+    for (vIter = vPath.begin(); vIter != vPath.end(); vIter++) \r
+    {\r
+        bSuccess = CreateDirectory(*vIter, NULL) ? true : false;    \r
+    }\r
+\r
+    return bSuccess;\r
+}\r