#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
if( pRemote == NULL)\r
{\r
remote=_T("origin");\r
+ }else\r
+ {\r
+ remote=*pRemote;\r
}\r
if(keyfile == NULL)\r
{\r
cmd.Format(_T("git.exe config remote.%s.puttykeyfile"),remote);\r
g_Git.Run(cmd,&key,CP_ACP);\r
int start=0;\r
- key.Tokenize(_T("\n"),start);\r
+ key = key.Tokenize(_T("\n"),start);\r
}\r
else\r
key=*keyfile;\r
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
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
}\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