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