X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=src%2FTortoiseProc%2FAppUtils.cpp;h=c1c0f54172133cee229ac1e70da6889642ca53d8;hb=cbdf91082a0d7513a2b938cb36354abe07e62e2a;hp=b616560eb2b26e9e9130344581147bc0512a7edb;hpb=01ed9d0cab6b52fb9922679acd9969e7fffeeb8f;p=tortoisegit%2FTortoiseGitJp.git diff --git a/src/TortoiseProc/AppUtils.cpp b/src/TortoiseProc/AppUtils.cpp index b616560..c1c0f54 100644 --- a/src/TortoiseProc/AppUtils.cpp +++ b/src/TortoiseProc/AppUtils.cpp @@ -41,6 +41,10 @@ #include "CreateBranchTagDlg.h" #include "GitSwitchDlg.h" #include "ResetDlg.h" +#include "DeleteConflictDlg.h" +#include "ChangedDlg.h" +#include "SendMailDlg.h" +#include "SVNProgressDlg.h" CAppUtils::CAppUtils(void) { @@ -50,6 +54,29 @@ CAppUtils::~CAppUtils(void) { } +int CAppUtils::StashApply(CString ref) +{ + CString cmd,out; + cmd=_T("git.exe stash apply "); + cmd+=ref; + + if(g_Git.Run(cmd,&out,CP_ACP)) + { + CMessageBox::Show(NULL,CString(_T("Stash Apply Fail!!!\n"))+out,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + + }else + { + if(CMessageBox::Show(NULL,CString(_T("Stash Apply Success\nDo you want to show change?")) + ,_T("TortoiseGit"),MB_YESNO|MB_ICONINFORMATION) == IDYES) + { + CChangedDlg dlg; + dlg.m_pathList.AddPath(CTGitPath()); + dlg.DoModal(); + } + return 0; + } + return -1; +} bool CAppUtils::GetMimeType(const CTGitPath& file, CString& mimetype) { #if 0 @@ -589,7 +616,46 @@ bool CAppUtils::LaunchApplication(const CString& sCommandLine, UINT idErrMessage CloseHandle(process.hProcess); return true; } +bool CAppUtils::LaunchPAgent(CString *keyfile,CString * pRemote) +{ + CString key,remote; + CString cmd,out; + if( pRemote == NULL) + { + remote=_T("origin"); + }else + { + remote=*pRemote; + } + if(keyfile == NULL) + { + cmd.Format(_T("git.exe config remote.%s.puttykeyfile"),remote); + g_Git.Run(cmd,&key,CP_ACP); + int start=0; + key = key.Tokenize(_T("\n"),start); + } + else + key=*keyfile; + + if(key.IsEmpty()) + return false; + CString proc=CPathUtils::GetAppDirectory(); + proc += _T("pageant.exe \""); + proc += key; + proc += _T("\""); + + return LaunchApplication(proc, IDS_ERR_PAGEANT, false); +} +bool CAppUtils::LaunchRemoteSetting() +{ + CString proc=CPathUtils::GetAppDirectory(); + proc += _T("TortoiseProc.exe /command:settings"); + proc += _T(" /path:\""); + proc += g_Git.m_CurrentDir; + proc += _T("\" /page:remote"); + return LaunchApplication(proc, IDS_ERR_EXTDIFFSTART, false); +} /** * Launch the external blame viewer */ @@ -957,11 +1023,18 @@ bool CAppUtils::StartShowUnifiedDiff(HWND hWnd, const CTGitPath& url1, const git CString cmd; if(rev1 == GitRev::GetWorkingCopy()) { - cmd.Format(_T("git.exe diff --stat -p %s"),rev2); + cmd.Format(_T("git.exe diff --stat -p %s "),rev2); }else { cmd.Format(_T("git.exe diff-tree -r -p --stat %s %s"),rev1,rev2); } + + if( !url1.IsEmpty() ) + { + cmd+=_T(" \""); + cmd+=url1.GetGitPathString(); + cmd+=_T("\" "); + } g_Git.RunLogFile(cmd,tempfile); CAppUtils::StartUnifiedDiffViewer(tempfile,rev1.Left(6)+_T(":")+rev2.Left(6)); @@ -1077,10 +1150,10 @@ bool CAppUtils::CreateBranchTag(bool IsTag,CString *CommitHash) CString force; CString track; if(dlg.m_bTrack) - track=_T("--track"); + track=_T(" --track "); if(dlg.m_bForce) - force=_T("-f"); + force=_T(" -f "); if(IsTag) { @@ -1156,35 +1229,60 @@ bool CAppUtils::Switch(CString *CommitHash) return FALSE; } -bool CAppUtils::IgnoreFile(CTGitPath &path,bool IsMask) +bool CAppUtils::IgnoreFile(CTGitPathList &path,bool IsMask) { CString ignorefile; - ignorefile=g_Git.m_CurrentDir; - ignorefile+=path.GetDirectory().GetWinPathString()+_T("\\.gitignore"); + ignorefile=g_Git.m_CurrentDir+_T("\\"); + + if(IsMask) + { + ignorefile+=path.GetCommonRoot().GetDirectory().GetWinPathString()+_T("\\.gitignore"); + + }else + { + ignorefile+=_T("\\.gitignore"); + } CStdioFile file; - if(!file.Open(ignorefile,CFile::modeCreate|CFile::modeWrite)) + if(!file.Open(ignorefile,CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate)) { CMessageBox::Show(NULL,ignorefile+_T(" Open Failure"),_T("TortoiseGit"),MB_OK); return FALSE; } CString ignorelist; - file.ReadString(ignorelist); - - if(IsMask) + CString mask; + try { - ignorelist+=_T("\n*.")+path.GetFileExtension(); - }else + //file.ReadString(ignorelist); + file.SeekToEnd(); + for(int i=0;i=0) + { + return true; + } + return false; +} + +CString CAppUtils::GetClipboardLink() +{ + if (!OpenClipboard(NULL)) + return CString(); + + CString sClipboardText; + HGLOBAL hglb = GetClipboardData(CF_TEXT); + if (hglb) + { + LPCSTR lpstr = (LPCSTR)GlobalLock(hglb); + sClipboardText = CString(lpstr); + GlobalUnlock(hglb); + } + hglb = GetClipboardData(CF_UNICODETEXT); + if (hglb) + { + LPCTSTR lpstr = (LPCTSTR)GlobalLock(hglb); + sClipboardText = lpstr; + GlobalUnlock(hglb); + } + CloseClipboard(); + + if(!sClipboardText.IsEmpty()) + { + if(sClipboardText[0] == _T('\"') && sClipboardText[sClipboardText.GetLength()-1] == _T('\"')) + sClipboardText=sClipboardText.Mid(1,sClipboardText.GetLength()-2); + + if(sClipboardText.Find( _T("http://")) == 0) + return sClipboardText; + + if(sClipboardText.Find( _T("https://")) == 0) + return sClipboardText; + + if(sClipboardText.Find( _T("git://")) == 0) + return sClipboardText; + + if(sClipboardText.Find( _T("ssh://")) == 0) + return sClipboardText; + + if(sClipboardText.GetLength()>=2) + if( sClipboardText[1] == _T(':') ) + if( (sClipboardText[0] >= 'A' && sClipboardText[0] <= 'Z') + || (sClipboardText[0] >= 'a' && sClipboardText[0] <= 'z') ) + return sClipboardText; + } + + return CString(_T("")); +} + +CString CAppUtils::ChooseRepository(CString *path) +{ + CBrowseFolder browseFolder; + browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS; + CString strCloneDirectory; + if(path) + strCloneDirectory=*path; + + CString title; + title.LoadString(IDS_CHOOSE_REPOSITORY); + + browseFolder.SetInfo(title); + + if (browseFolder.Show(NULL, strCloneDirectory) == CBrowseFolder::OK) + { + return strCloneDirectory; + + }else + { + return CString(); + } + +} + +bool CAppUtils::SendPatchMail(CTGitPathList &list,bool autoclose) +{ + CSendMailDlg dlg; + + dlg.m_PathList = list; + + if(dlg.DoModal()==IDOK) + { + if(dlg.m_PathList.GetCount() == 0) + return FALSE; + + CGitProgressDlg progDlg; + + theApp.m_pMainWnd = &progDlg; + progDlg.SetCommand(CGitProgressDlg::GitProgress_SendMail); + + progDlg.SetAutoClose(autoclose); + + progDlg.SetPathList(dlg.m_PathList); + //ProjectProperties props; + //props.ReadPropsPathList(dlg.m_pathList); + //progDlg.SetProjectProperties(props); + progDlg.SetItemCount(dlg.m_PathList.GetCount()); + + DWORD flags =0; + if(dlg.m_bAttachment) + flags |= SENDMAIL_ATTACHMENT; + if(dlg.m_bCombine) + flags |= SENDMAIL_COMBINED; + + progDlg.SetSendMailOption(dlg.m_To,dlg.m_CC,dlg.m_Subject,flags); + + progDlg.DoModal(); + + return true; + } + return false; +} +int CAppUtils::GetLogOutputEncode() +{ + CString cmd,output; + int start=0; + cmd=_T("git.exe config i18n.logOutputEncoding"); + if(g_Git.Run(cmd,&output,CP_ACP)) + { + cmd=_T("git.exe config i18n.commitencoding"); + if(g_Git.Run(cmd,&output,CP_ACP)) + return CP_UTF8; + + int start=0; + output=output.Tokenize(_T("\n"),start); + return CUnicodeUtils::GetCPCode(output); + + }else + { + output=output.Tokenize(_T("\n"),start); + return CUnicodeUtils::GetCPCode(output); + } +} +int CAppUtils::SaveCommitUnicodeFile(CString &filename, CString &message) +{ + CFile file(filename,CFile::modeReadWrite|CFile::modeCreate ); + CString cmd,output; + int cp=CP_UTF8; + + cmd=_T("git.exe config i18n.commitencoding"); + if(g_Git.Run(cmd,&output,CP_ACP)) + cp=CP_UTF8; + + int start=0; + output=output.Tokenize(_T("\n"),start); + cp=CUnicodeUtils::GetCPCode(output); + + int len=message.GetLength(); + + char * buf; + buf = new char[len*4 + 4]; + SecureZeroMemory(buf, (len*4 + 4)); + + int lengthIncTerminator = WideCharToMultiByte(cp, 0, message, -1, buf, len*4, NULL, NULL); + + file.Write(buf,lengthIncTerminator-1); + file.Close(); + delete buf; + return 0; +} \ No newline at end of file