void CRepositoryBrowser::FileSaveAs(const CString path) { CTGitPath gitPath(path); CGitHash hash; if (g_Git.GetHash(hash, m_sRevision)) { MessageBox(g_Git.GetGitLastErr(_T("Could not get hash of ") + m_sRevision + _T(".")), _T("TortoiseGit"), MB_ICONERROR); return; } CString filename; filename.Format(_T("%s-%s%s"), (LPCTSTR)gitPath.GetBaseFilename(), (LPCTSTR)hash.ToString().Left(g_Git.GetShortHASHLength()), (LPCTSTR)gitPath.GetFileExtension()); CFileDialog dlg(FALSE, NULL, filename, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL); CString currentpath(g_Git.CombinePath(gitPath.GetContainingDirectory())); dlg.m_ofn.lpstrInitialDir = currentpath; CString cmd, out; INT_PTR ret = dlg.DoModal(); SetCurrentDirectory(g_Git.m_CurrentDir); if (ret == IDOK) { filename = dlg.GetPathName(); if (g_Git.GetOneFile(m_sRevision, gitPath, filename)) { out.Format(IDS_STATUSLIST_CHECKOUTFILEFAILED, (LPCTSTR)gitPath.GetGitPathString(), (LPCTSTR)m_sRevision, (LPCTSTR)filename); MessageBox(g_Git.GetGitLastErr(out, CGit::GIT_CMD_GETONEFILE), _T("TortoiseGit"), MB_ICONERROR); return; } } }
string userpath() { char path[PATH_MAX]; if(::userpath(path)) { string result(path); result.transform("\\", "/"); if(result.endswith("/") == false) result.append("/"); return result; } return currentpath(); }