int nCol = 1;\r
CString entryname = GitPath->GetGitPathString();\r
int icon_idx = 0;\r
-// if (entry->isfolder)\r
-// icon_idx = m_nIconFolder;\r
-// else\r
+ if (GitPath->IsDirectory())\r
+ icon_idx = m_nIconFolder;\r
+ else\r
{\r
icon_idx = SYS_IMAGE_LIST().GetPathIconIndex(*GitPath);\r
}\r
popup.AppendMenuIcon(IDSVNLC_COMPARE, IDS_LOG_COMPAREWITHBASE, IDI_DIFF);\r
popup.SetDefaultItem(IDSVNLC_COMPARE, FALSE);\r
}\r
+\r
+ if (m_dwContextMenus & this->GetContextMenuBit(IDSVNLC_COMPAREWC))\r
+ {\r
+ if( (!m_CurrentVersion.IsEmpty()) && m_CurrentVersion != GIT_REV_ZERO)\r
+ popup.AppendMenuIcon(IDSVNLC_COMPAREWC, IDS_LOG_POPUP_COMPARE, IDI_DIFF);\r
+ }\r
//Select one items\r
if (GetSelectedCount() == 1)\r
{\r
popup.AppendMenuIcon(IDSVNLC_ADD, IDS_STATUSLIST_CONTEXT_ADD, IDI_ADD);\r
}\r
}\r
+\r
+ if (m_dwContextMenus & SVNSLC_POPDELETE)\r
+ {\r
+ popup.AppendMenuIcon(IDSVNLC_DELETE, IDS_MENUREMOVE, IDI_DELETE);\r
+ }\r
//}\r
//if ( (wcStatus == git_wc_status_unversioned) || (wcStatus == git_wc_status_deleted) )\r
//{\r
}\r
\r
\r
-#if 0 \r
+ \r
if (GetSelectedCount() > 0)\r
{\r
-\r
+#if 0 \r
if ((!entry->IsFolder())&&(wcStatus >= git_wc_status_normal)\r
&&(wcStatus!=git_wc_status_missing)&&(wcStatus!=git_wc_status_deleted)\r
&&(wcStatus!=git_wc_status_added))\r
popup.AppendMenu(MF_SEPARATOR);\r
popup.AppendMenuIcon(IDSVNLC_PROPERTIES, IDS_STATUSLIST_CONTEXT_PROPERTIES, IDI_PROPERTIES);\r
}\r
+#endif \r
popup.AppendMenu(MF_SEPARATOR);\r
popup.AppendMenuIcon(IDSVNLC_COPY, IDS_STATUSLIST_CONTEXT_COPY, IDI_COPYCLIP);\r
popup.AppendMenuIcon(IDSVNLC_COPYEXT, IDS_STATUSLIST_CONTEXT_COPYEXT, IDI_COPYCLIP);\r
+#if 0\r
if ((m_dwContextMenus & SVNSLC_POPCHANGELISTS)&&(XPorLater)\r
&&(wcStatus != git_wc_status_unversioned)&&(wcStatus != git_wc_status_none))\r
{\r
popup.AppendMenu(MF_POPUP|MF_STRING, (UINT_PTR)changelistSubMenu.GetSafeHmenu(), temp);\r
}\r
}\r
- }\r
#endif\r
+ }\r
+\r
int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0);\r
\r
m_bBlock = TRUE;\r
bool bForce = false;\r
switch (cmd)\r
{\r
+ case IDSVNLC_VIEWREV:\r
+ OpenFile(filepath,NOTEPAD2);\r
+ break;\r
case IDSVNLC_OPEN:\r
- {\r
- CString file;\r
- if(this->m_CurrentVersion.IsEmpty() || m_CurrentVersion == GIT_REV_ZERO)\r
- {\r
- file= filepath->GetWinPath();\r
- }else\r
- {\r
- CString temppath;\r
- GetTempPath(temppath);\r
- file.Format(_T("%s%s_%s%s"),\r
- temppath, \r
- filepath->GetBaseFilename(),\r
- m_CurrentVersion.Left(6),\r
- filepath->GetFileExtension());\r
-\r
- }\r
- int ret = (int)ShellExecute(this->m_hWnd, NULL,file, NULL, NULL, SW_SHOW);\r
- if (ret <= HINSTANCE_ERROR)\r
- {\r
- CString cmd = _T("RUNDLL32 Shell32,OpenAs_RunDLL ");\r
- cmd += file;\r
- CAppUtils::LaunchApplication(cmd, NULL, false);\r
- }\r
- }\r
+ OpenFile(filepath,OPEN);\r
break;\r
case IDSVNLC_OPENWITH:\r
- {\r
- CString file;\r
- if(m_CurrentVersion.IsEmpty() || m_CurrentVersion == GIT_REV_ZERO)\r
- {\r
- file= filepath->GetWinPath();\r
- }else\r
- {\r
- CString temppath;\r
- GetTempPath(temppath);\r
- file.Format(_T("%s%s_%s%s"),\r
- temppath, \r
- filepath->GetBaseFilename(),\r
- m_CurrentVersion.Left(6),\r
- filepath->GetFileExtension());\r
-\r
- }\r
-\r
- CString cmd = _T("RUNDLL32 Shell32,OpenAs_RunDLL ");\r
- cmd += file + _T(" ");\r
- CAppUtils::LaunchApplication(cmd, NULL, false);\r
- }\r
+ OpenFile(filepath,OPEN_WITH);\r
break;\r
case IDSVNLC_EXPLORE:\r
{\r
ShellExecute(this->m_hWnd, _T("explore"), filepath->GetDirectory().GetWinPath(), NULL, NULL, SW_SHOW);\r
}\r
break;\r
+\r
+ // Compare current version and work copy. \r
+ case IDSVNLC_COMPAREWC:\r
+ {\r
+ POSITION pos = GetFirstSelectedItemPosition();\r
+ while ( pos )\r
+ {\r
+ int index = GetNextSelectedItem(pos);\r
+ StartDiffWC(index);\r
+ }\r
+ }\r
+ break;\r
+ // Compare with base version. when current version is zero, compare workcopy and HEAD. \r
case IDSVNLC_COMPARE:\r
{\r
POSITION pos = GetFirstSelectedItemPosition();\r
case IDSVNLC_ADD:\r
{ // The add went ok, but we now need to run through the selected items again\r
// and update their status\r
+ std::vector<int> selectIndex;\r
+\r
POSITION pos = GetFirstSelectedItemPosition();\r
int index;\r
while ((index = GetNextSelectedItem(pos)) >= 0)\r
{\r
+ selectIndex.push_back(index);\r
+ }\r
+ for(int i=0;i<selectIndex.size();i++)\r
+ {\r
+ index=selectIndex[i];\r
+\r
CTGitPath * path=(CTGitPath*)GetItemData(index);\r
ASSERT(path);\r
if(path == NULL)\r
continue;\r
CString cmd;\r
- cmd.Format(_T("git.exe add %s"),path->GetGitPathString());\r
+ cmd.Format(_T("git.exe add \"%s\""),path->GetGitPathString());\r
CString output;\r
- if(!g_Git.Run(cmd,&output,CP_OEMCP))\r
+ if(!g_Git.Run(cmd,&output,CP_ACP))\r
{\r
path->m_Action = CTGitPath::LOGACTIONS_ADDED;\r
SetEntryCheck(path,index,true);\r
}\r
break;\r
\r
+ case IDSVNLC_DELETE:\r
+ {\r
+ //Collect paths\r
+ std::vector<int> selectIndex;\r
+\r
+ POSITION pos = GetFirstSelectedItemPosition();\r
+ int index;\r
+ while ((index = GetNextSelectedItem(pos)) >= 0)\r
+ {\r
+ selectIndex.push_back(index);\r
+ }\r
+\r
+ //Create file-list ('\0' separated) for SHFileOperation\r
+ CString filelist;\r
+ for(int i=0;i<selectIndex.size();i++)\r
+ {\r
+ index=selectIndex[i];\r
+\r
+ CTGitPath * path=(CTGitPath*)GetItemData(index);\r
+ ASSERT(path);\r
+ if(path == NULL)\r
+ continue;\r
+\r
+ filelist += path->GetWinPathString();\r
+ filelist += _T("|");\r
+ }\r
+ filelist += _T("|");\r
+ int len = filelist.GetLength();\r
+ TCHAR * buf = new TCHAR[len+2];\r
+ _tcscpy_s(buf, len+2, filelist);\r
+ for (int i=0; i<len; ++i)\r
+ if (buf[i] == '|')\r
+ buf[i] = 0;\r
+ SHFILEOPSTRUCT fileop;\r
+ fileop.hwnd = this->m_hWnd;\r
+ fileop.wFunc = FO_DELETE;\r
+ fileop.pFrom = buf;\r
+ fileop.pTo = NULL;\r
+ fileop.fFlags = FOF_NO_CONNECTED_ELEMENTS | ((GetAsyncKeyState(VK_SHIFT) & 0x8000) ? 0 : FOF_ALLOWUNDO);\r
+ fileop.lpszProgressTitle = _T("deleting file");\r
+ int result = SHFileOperation(&fileop);\r
+ delete [] buf;\r
+\r
+ if ( (result==0) && (!fileop.fAnyOperationsAborted) )\r
+ {\r
+ SetRedraw(FALSE);\r
+ POSITION pos = NULL;\r
+ while ((pos = GetFirstSelectedItemPosition()) != 0)\r
+ {\r
+ int index = GetNextSelectedItem(pos);\r
+ if (GetCheck(index))\r
+ m_nSelected--;\r
+ m_nTotal--;\r
+\r
+ RemoveListEntry(index);\r
+ }\r
+ SetRedraw(TRUE);\r
+ }\r
+ }\r
+ break;\r
+\r
case IDSVNLC_BLAME:\r
{\r
CString sCmd;\r
{\r
CString cmd,output;\r
cmd.Format(_T("git.exe add \"%s\""),fentry->GetGitPathString());\r
- if(g_Git.Run(cmd,&output,CP_OEMCP))\r
+ if(g_Git.Run(cmd,&output,CP_ACP))\r
{\r
CMessageBox::Show(m_hWnd, output, _T("TortoiseSVN"), MB_ICONERROR);\r
}else\r
CString str;\r
str.Format(IDS_PROC_WARNREVERT,GetSelectedCount());\r
\r
- if (!bConfirm || CMessageBox::Show(this->m_hWnd, str, _T("TortoiseSVN"), MB_YESNO | MB_ICONQUESTION)==IDYES)\r
+ if (!bConfirm || CMessageBox::Show(this->m_hWnd, str, _T("TortoiseGit"), MB_YESNO | MB_ICONQUESTION)==IDYES)\r
{\r
CTGitPathList targetList;\r
FillListOfSelectedItemPaths(targetList);\r
CTGitPath *path=(CTGitPath*)GetItemData(nItem);\r
if (path->GetGitPathString()==targetList[i].GetGitPathString())\r
{\r
- RemoveListEntry(nItem);\r
+ if(path->m_Action & CTGitPath::LOGACTIONS_ADDED)\r
+ {\r
+ path->m_Action = CTGitPath::LOGACTIONS_UNVER;\r
+ SetEntryCheck(path,nItem,false);\r
+ SetItemGroup(nItem,1);\r
+ this->m_StatusFileList.RemoveItem(*path);\r
+ this->m_UnRevFileList.AddPath(*path);\r
+ //this->m_IgnoreFileList.RemoveItem(*path);\r
+\r
+ }else\r
+ {\r
+ RemoveListEntry(nItem);\r
+ }\r
break;\r
}\r
}\r
}\r
}\r
break;\r
-#if 0\r
+\r
case IDSVNLC_COPY:\r
CopySelectedEntriesToClipboard(0);\r
break;\r
case IDSVNLC_COPYEXT:\r
CopySelectedEntriesToClipboard((DWORD)-1);\r
break;\r
+\r
+ case IDSVNLC_SAVEAS:\r
+ FileSaveAs(filepath);\r
+ break;\r
+\r
+ case IDSVNLC_REVERTTOREV:\r
+ RevertSelectedItemToVersion();\r
+ break;\r
+#if 0\r
case IDSVNLC_PROPERTIES:\r
{\r
CTSVNPathList targetList;\r
}\r
break;\r
\r
- case IDSVNLC_COMPARE:\r
- {\r
- POSITION pos = GetFirstSelectedItemPosition();\r
- while ( pos )\r
- {\r
- int index = GetNextSelectedItem(pos);\r
- StartDiff(index);\r
- }\r
- }\r
- break;\r
- case IDSVNLC_COMPAREWC:\r
+ case IDSVNLC_COMPAREWC:\r
{\r
POSITION pos = GetFirstSelectedItemPosition();\r
while ( pos )\r
}\r
}\r
break;\r
- case IDSVNLC_OPEN:\r
- {\r
- int ret = (int)ShellExecute(this->m_hWnd, NULL, filepath.GetWinPath(), NULL, NULL, SW_SHOW);\r
- if (ret <= HINSTANCE_ERROR)\r
- {\r
- CString cmd = _T("RUNDLL32 Shell32,OpenAs_RunDLL ");\r
- cmd += filepath.GetWinPathString();\r
- CAppUtils::LaunchApplication(cmd, NULL, false);\r
- }\r
- }\r
- break;\r
- case IDSVNLC_OPENWITH:\r
- {\r
- CString cmd = _T("RUNDLL32 Shell32,OpenAs_RunDLL ");\r
- cmd += filepath.GetWinPathString() + _T(" ");\r
- CAppUtils::LaunchApplication(cmd, NULL, false);\r
- }\r
- break;\r
- case IDSVNLC_EXPLORE:\r
- {\r
- ShellExecute(this->m_hWnd, _T("explore"), filepath.GetDirectory().GetWinPath(), NULL, NULL, SW_SHOW);\r
- }\r
- break;\r
+ \r
case IDSVNLC_REMOVE:\r
{\r
SVN git;\r
}\r
}\r
break;\r
- case IDSVNLC_IGNOREMASK:\r
- {\r
- CString name = _T("*")+filepath.GetFileExtension();\r
- CTSVNPathList ignorelist;\r
- FillListOfSelectedItemPaths(ignorelist, true);\r
- std::set<CTSVNPath> parentlist;\r
- for (int i=0; i<ignorelist.GetCount(); ++i)\r
- {\r
- parentlist.insert(ignorelist[i].GetContainingDirectory());\r
- }\r
- std::set<CTSVNPath>::iterator it;\r
- std::vector<CString> toremove;\r
- SetRedraw(FALSE);\r
- for (it = parentlist.begin(); it != parentlist.end(); ++it)\r
- {\r
- CTSVNPath parentFolder = (*it).GetDirectory();\r
- SVNProperties props(parentFolder, SVNRev::REV_WC, false);\r
- CStringA value;\r
- for (int i=0; i<props.GetCount(); i++)\r
- {\r
- CString propname(props.GetItemName(i).c_str());\r
- if (propname.CompareNoCase(_T("git:ignore"))==0)\r
- {\r
- stdstring stemp;\r
- // treat values as normal text even if they're not\r
- value = (char *)props.GetItemValue(i).c_str();\r
- }\r
- }\r
- if (value.IsEmpty())\r
- value = name;\r
- else\r
- {\r
- value = value.Trim("\n\r");\r
- value += "\n";\r
- value += name;\r
- value.Remove('\r');\r
- }\r
- if (!props.Add(_T("git:ignore"), (LPCSTR)value))\r
- {\r
- CString temp;\r
- temp.Format(IDS_ERR_FAILEDIGNOREPROPERTY, (LPCTSTR)name);\r
- CMessageBox::Show(this->m_hWnd, temp, _T("TortoiseSVN"), MB_ICONERROR);\r
- }\r
- else\r
- {\r
- CTSVNPath basepath;\r
- int nListboxEntries = GetItemCount();\r
- for (int i=0; i<nListboxEntries; ++i)\r
- {\r
- FileEntry * entry = GetListEntry(i);\r
- ASSERT(entry != NULL);\r
- if (entry == NULL)\r
- continue;\r
- if (basepath.IsEmpty())\r
- basepath = entry->basepath;\r
- // since we ignored files with a mask (e.g. *.exe)\r
- // we have to find find all files in the same\r
- // folder (IsAncestorOf() returns TRUE for _all_ children,\r
- // not just the immediate ones) which match the\r
- // mask and remove them from the list too.\r
- if ((entry->status == git_wc_status_unversioned)&&(parentFolder.IsAncestorOf(entry->path)))\r
- {\r
- CString f = entry->path.GetSVNPathString();\r
- if (f.Mid(parentFolder.GetSVNPathString().GetLength()).Find('/')<=0)\r
- {\r
- if (CStringUtils::WildCardMatch(name, f))\r
- {\r
- if (GetCheck(i))\r
- m_nSelected--;\r
- m_nTotal--;\r
- toremove.push_back(f);\r
- }\r
- }\r
- }\r
- }\r
- if (!m_bIgnoreRemoveOnly)\r
- {\r
- SVNStatus status;\r
- git_wc_status2_t * s;\r
- CTSVNPath gitPath;\r
- s = status.GetFirstFileStatus(parentFolder, gitPath, false, git_depth_empty);\r
- if (s!=0)\r
- {\r
- // first check if the folder isn't already present in the list\r
- bool bFound = false;\r
- for (int i=0; i<nListboxEntries; ++i)\r
- {\r
- FileEntry * entry = GetListEntry(i);\r
- if (entry->path.IsEquivalentTo(gitPath))\r
- {\r
- bFound = true;\r
- break;\r
- }\r
- }\r
- if (!bFound)\r
- {\r
- FileEntry * entry = new FileEntry();\r
- entry->path = gitPath;\r
- entry->basepath = basepath;\r
- entry->status = SVNStatus::GetMoreImportant(s->text_status, s->prop_status);\r
- entry->textstatus = s->text_status;\r
- entry->propstatus = s->prop_status;\r
- entry->remotestatus = SVNStatus::GetMoreImportant(s->repos_text_status, s->repos_prop_status);\r
- entry->remotetextstatus = s->repos_text_status;\r
- entry->remotepropstatus = s->repos_prop_status;\r
- entry->inunversionedfolder = false;\r
- entry->checked = true;\r
- entry->inexternal = false;\r
- entry->direct = false;\r
- entry->isfolder = true;\r
- entry->last_commit_date = 0;\r
- entry->last_commit_rev = 0;\r
- entry->remoterev = 0;\r
- if (s->entry)\r
- {\r
- if (s->entry->url)\r
- {\r
- entry->url = CUnicodeUtils::GetUnicode(CPathUtils::PathUnescape(s->entry->url));\r
- }\r
- }\r
- if (s->entry && s->entry->present_props)\r
- {\r
- entry->present_props = s->entry->present_props;\r
- }\r
- m_arStatusArray.push_back(entry);\r
- m_arListArray.push_back(m_arStatusArray.size()-1);\r
- AddEntry(entry, langID, GetItemCount());\r
- }\r
- }\r
- }\r
- }\r
- }\r
- for (std::vector<CString>::iterator it = toremove.begin(); it != toremove.end(); ++it)\r
- {\r
- int nListboxEntries = GetItemCount();\r
- for (int i=0; i<nListboxEntries; ++i)\r
- {\r
- if (GetListEntry(i)->path.GetSVNPathString().Compare(*it)==0)\r
- {\r
- RemoveListEntry(i);\r
- break;\r
- }\r
- }\r
- }\r
- SetRedraw(TRUE);\r
- }\r
- break;\r
- case IDSVNLC_EDITCONFLICT:\r
- SVNDiff::StartConflictEditor(filepath);\r
- break;\r
- \r
+\r
+\r
case IDSVNLC_ADD:\r
{\r
SVN git;\r
}\r
}\r
break;\r
- case IDSVNLC_LOCK:\r
- {\r
- CTSVNPathList itemsToLock;\r
- FillListOfSelectedItemPaths(itemsToLock);\r
- CInputDlg inpDlg;\r
- inpDlg.m_sTitle.LoadString(IDS_MENU_LOCK);\r
- CStringUtils::RemoveAccelerators(inpDlg.m_sTitle);\r
- inpDlg.m_sHintText.LoadString(IDS_LOCK_MESSAGEHINT);\r
- inpDlg.m_sCheckText.LoadString(IDS_LOCK_STEALCHECK);\r
- ProjectProperties props;\r
- props.ReadPropsPathList(itemsToLock);\r
- props.nMinLogSize = 0; // the lock message is optional, so no minimum!\r
- inpDlg.m_pProjectProperties = &props;\r
- if (inpDlg.DoModal()==IDOK)\r
- {\r
- CSVNProgressDlg progDlg;\r
- progDlg.SetCommand(CSVNProgressDlg::SVNProgress_Lock);\r
- progDlg.SetOptions(inpDlg.m_iCheck ? ProgOptLockForce : ProgOptNone);\r
- progDlg.SetPathList(itemsToLock);\r
- progDlg.SetCommitMessage(inpDlg.m_sInputText);\r
- progDlg.DoModal();\r
- // refresh!\r
- CWnd* pParent = GetParent();\r
- if (NULL != pParent && NULL != pParent->GetSafeHwnd())\r
- {\r
- pParent->SendMessage(SVNSLNM_NEEDSREFRESH);\r
- }\r
- }\r
- }\r
- break;\r
- case IDSVNLC_UNLOCKFORCE:\r
- bForce = true;\r
- case IDSVNLC_UNLOCK:\r
- {\r
- CTSVNPathList itemsToUnlock;\r
- FillListOfSelectedItemPaths(itemsToUnlock);\r
- CSVNProgressDlg progDlg;\r
- progDlg.SetCommand(CSVNProgressDlg::SVNProgress_Unlock);\r
- progDlg.SetOptions(bForce ? ProgOptLockForce : ProgOptNone);\r
- progDlg.SetPathList(itemsToUnlock);\r
- progDlg.DoModal();\r
- // refresh!\r
- CWnd* pParent = GetParent();\r
- if (NULL != pParent && NULL != pParent->GetSafeHwnd())\r
- {\r
- pParent->SendMessage(SVNSLNM_NEEDSREFRESH);\r
- }\r
- }\r
- break;\r
+\r
case IDSVNLC_REPAIRMOVE:\r
{\r
POSITION pos = GetFirstSelectedItemPosition();\r
*pResult = 0;\r
if (m_bBlock)\r
return;\r
-#if 0\r
+\r
if (pNMLV->iItem < 0)\r
{\r
if (!IsGroupViewEnabled())\r
GetItem(&lv);\r
if (lv.iGroupId == group)\r
{\r
- FileEntry * entry = GetListEntry(i);\r
+ CTGitPath *entry=(CTGitPath*)GetItemData(i);\r
+\r
if (!bFirst)\r
{\r
bCheck = !GetCheck(i);\r
NotifyCheck();\r
return;\r
}\r
-#endif\r
-// FileEntry * entry = GetListEntry(pNMLV->iItem);\r
-// if (entry)\r
- {\r
-// if (entry->isConflicted)\r
-// {\r
-// gitDiff::StartConflictEditor(entry->GetPath());\r
-// }\r
-// else\r
- {\r
- StartDiff(pNMLV->iItem);\r
- }\r
+\r
+ CTGitPath *file=(CTGitPath*)GetItemData(pNMLV->iItem);\r
+\r
+ if( file->m_Action&CTGitPath::LOGACTIONS_UNMERGED )\r
+ {\r
+ CAppUtils::ConflictEdit(*file,false);\r
+\r
+ }else\r
+ {\r
+ StartDiff(pNMLV->iItem);\r
}\r
\r
}\r
+void CGitStatusListCtrl::StartDiffWC(int fileindex)\r
+{\r
+ if(fileindex<0)\r
+ return;\r
+\r
+ CString Ver;\r
+ if(this->m_CurrentVersion.IsEmpty() || m_CurrentVersion== GIT_REV_ZERO)\r
+ return;\r
+\r
+ CTGitPath file1=*(CTGitPath*)GetItemData(fileindex);\r
+\r
+ CGitDiff::Diff(&file1,&file1,\r
+ CString(GIT_REV_ZERO),\r
+ m_CurrentVersion);\r
+\r
+}\r
\r
void CGitStatusListCtrl::StartDiff(int fileindex)\r
{\r
\r
if(this->m_CurrentVersion.IsEmpty() || m_CurrentVersion== GIT_REV_ZERO)\r
{\r
- if(!g_Git.IsInitRepos())\r
+ if( g_Git.IsInitRepos())\r
+ CGitDiff::DiffNull((CTGitPath*)GetItemData(fileindex),\r
+ CString(GIT_REV_ZERO)); \r
+ else if( file1.m_Action&CTGitPath::LOGACTIONS_DELETED )\r
+ CGitDiff::DiffNull((CTGitPath*)GetItemData(fileindex),\r
+ GitRev::GetHead(),false); \r
+ else\r
CGitDiff::Diff(&file1,&file2,\r
CString(GIT_REV_ZERO),\r
GitRev::GetHead());\r
- else\r
- CGitDiff::DiffNull((CTGitPath*)GetItemData(fileindex),\r
- CString(GIT_REV_ZERO));\r
}else\r
{\r
CGitDiff::Diff(&file1,&file2,\r
\r
bool CGitStatusListCtrl::CopySelectedEntriesToClipboard(DWORD dwCols)\r
{\r
-#if 0\r
+\r
static CString ponly(MAKEINTRESOURCE(IDS_STATUSLIST_PROPONLY));\r
static HINSTANCE hResourceHandle(AfxGetResourceHandle());\r
WORD langID = (WORD)CRegStdWORD(_T("Software\\TortoiseGit\\LanguageID"), GetUserDefaultLangID());\r
int index;\r
while ((index = GetNextSelectedItem(pos)) >= 0)\r
{\r
- FileEntry * entry = GetListEntry(index);\r
- sClipboard += entry->GetDisplayName();\r
+ CTGitPath * entry = (CTGitPath*)GetItemData(index);\r
+ if(entry == NULL)\r
+ continue;\r
+\r
+ sClipboard += entry->GetWinPathString();\r
if (selection & SVNSLC_COLFILENAME)\r
{\r
- sClipboard += _T("\t")+entry->path.GetFileOrDirectoryName();\r
+ sClipboard += _T("\t")+entry->GetFileOrDirectoryName();\r
}\r
if (selection & SVNSLC_COLEXT)\r
{\r
- sClipboard += _T("\t")+entry->path.GetFileExtension();\r
+ sClipboard += _T("\t")+entry->GetFileExtension();\r
}\r
+ \r
if (selection & SVNSLC_COLSTATUS)\r
{\r
+#if 0\r
if (entry->isNested)\r
{\r
temp.LoadString(IDS_STATUSLIST_NESTED);\r
_tcscat_s(buf, 100, ponly);\r
temp = buf;\r
}\r
- sClipboard += _T("\t")+temp;\r
+#endif\r
+ sClipboard += _T("\t")+entry->GetActionName();\r
}\r
+#if 0\r
if (selection & SVNSLC_COLTEXTSTATUS)\r
{\r
+\r
if (entry->isNested)\r
{\r
temp.LoadString(IDS_STATUSLIST_NESTED);\r
}\r
sClipboard += _T("\t")+temp;\r
}\r
+#endif\r
+#if 0\r
if (selection & SVNSLC_COLREMOTESTATUS)\r
{\r
if (entry->isNested)\r
temp.Empty();\r
sClipboard += _T("\t")+temp;\r
}\r
+\r
if (selection & SVNSLC_COLDATE)\r
{\r
TCHAR datebuf[SVN_DATE_BUFFER];\r
sClipboard += _T("\t") + value;\r
}\r
}\r
+#endif\r
+ if (selection & SVNSLC_COLADD)\r
+ {\r
+ sClipboard += _T("\t")+entry->m_StatAdd;\r
+ }\r
+ if (selection & SVNSLC_COLDEL)\r
+ {\r
+ sClipboard += _T("\t")+entry->m_StatDel;\r
+ }\r
\r
sClipboard += _T("\r\n");\r
}\r
\r
return CStringUtils::WriteAsciiStringToClipboard(sClipboard);\r
-#endif\r
+\r
return TRUE;\r
\r
}\r
\r
//if(m_UnRevFileList.GetCount()>0)\r
{\r
- _tcsncpy_s(groupname, 1024, (LPCTSTR)_T("No Version Control"), 1023);\r
+ _tcsncpy_s(groupname, 1024, (LPCTSTR)_T("Not Versioned"), 1023);\r
grp.pszHeader = groupname;\r
grp.iGroupId = groupindex;\r
grp.uAlign = LVGA_HEADER_LEFT;\r
\r
//if(m_IgnoreFileList.GetCount()>0)\r
{\r
- _tcsncpy_s(groupname, 1024, (LPCTSTR)_T("Ignored File"), 1023);\r
+ _tcsncpy_s(groupname, 1024, (LPCTSTR)_T("Ignored"), 1023);\r
grp.pszHeader = groupname;\r
grp.iGroupId = groupindex;\r
grp.uAlign = LVGA_HEADER_LEFT;\r
}f\r
\r
#endif\r
+\r
+void CGitStatusListCtrl::FileSaveAs(CTGitPath *path)\r
+{\r
+ CString filename;\r
+ filename.Format(_T("%s-%s%s"),path->GetBaseFilename(),this->m_CurrentVersion.Left(6),path->GetFileExtension());\r
+ CFileDialog dlg(FALSE,NULL,\r
+ filename, \r
+ OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\r
+ NULL);\r
+ CString currentpath;\r
+ currentpath=g_Git.m_CurrentDir+_T("\\");\r
+ currentpath+=path->GetWinPathString();\r
+\r
+ dlg.m_ofn.lpstrInitialDir=currentpath.GetBuffer();\r
+\r
+ CString cmd,out; \r
+ if(dlg.DoModal()==IDOK)\r
+ {\r
+ filename = dlg.GetFileName();\r
+ if(m_CurrentVersion == GIT_REV_ZERO)\r
+ {\r
+ cmd.Format(_T("copy /Y \"%s\" \"%s\""),path->GetWinPath(),filename);\r
+ if(g_Git.Run(cmd,&out,CP_ACP))\r
+ {\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+ return;\r
+ }\r
+\r
+ }else\r
+ {\r
+ cmd.Format(_T("git.exe cat-file -p %s:\"%s\""),m_CurrentVersion,path->GetGitPathString());\r
+ if(g_Git.RunLogFile(cmd,filename))\r
+ {\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+ return;\r
+ }\r
+ }\r
+ }\r
+\r
+}\r
+\r
+int CGitStatusListCtrl::RevertSelectedItemToVersion()\r
+{\r
+ if(this->m_CurrentVersion.IsEmpty())\r
+ return 0;\r
+ if(this->m_CurrentVersion == GIT_REV_ZERO)\r
+ return 0;\r
+\r
+ POSITION pos = GetFirstSelectedItemPosition();\r
+ int index;\r
+ CString cmd,out;\r
+ int count =0;\r
+ while ((index = GetNextSelectedItem(pos)) >= 0)\r
+ {\r
+ CTGitPath *fentry=(CTGitPath*)GetItemData(index);\r
+ cmd.Format(_T("git.exe checkout %s -- \"%s\""),m_CurrentVersion,fentry->GetGitPathString());\r
+ out.Empty();\r
+ if(g_Git.Run(cmd,&out,CP_ACP))\r
+ {\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+ }\r
+ count++;\r
+ }\r
+\r
+ out.Format(_T("%d files revert to %s"),count,m_CurrentVersion.Left(6));\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+ return 0;\r
+}\r
+\r
+void CGitStatusListCtrl::OpenFile(CTGitPath*filepath,int mode)\r
+{\r
+ CString file;\r
+ if(this->m_CurrentVersion.IsEmpty() || m_CurrentVersion == GIT_REV_ZERO)\r
+ {\r
+ file= filepath->GetWinPath();\r
+ }else\r
+ {\r
+ CString temppath;\r
+ GetTempPath(temppath);\r
+ file.Format(_T("%s%s_%s%s"),\r
+ temppath, \r
+ filepath->GetBaseFilename(),\r
+ m_CurrentVersion.Left(6),\r
+ filepath->GetFileExtension());\r
+ CString cmd,out;\r
+ cmd.Format(_T("git.exe cat-file -p %s:\"%s\""),m_CurrentVersion,filepath->GetGitPathString());\r
+ if(g_Git.RunLogFile(cmd,file))\r
+ {\r
+ CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
+ return;\r
+ }\r
+\r
+ }\r
+ if(mode == NOTEPAD2)\r
+ {\r
+ CString sCmd;\r
+ sCmd.Format(_T("\"%s\" \"%s\""),\r
+ (LPCTSTR)(CPathUtils::GetAppDirectory()+_T("notepad2.exe")), file);\r
+\r
+ CAppUtils::LaunchApplication(sCmd, NULL, false);\r
+ return ;\r
+ }\r
+ int ret = HINSTANCE_ERROR;\r
+\r
+ if(mode == OPEN )\r
+ {\r
+ ret = (int)ShellExecute(this->m_hWnd, NULL,file, NULL, NULL, SW_SHOW);\r
+ \r
+ if (ret > HINSTANCE_ERROR)\r
+ {\r
+ return;\r
+ }\r
+ }\r
+\r
+ {\r
+ CString cmd = _T("RUNDLL32 Shell32,OpenAs_RunDLL ");\r
+ cmd += file;\r
+ CAppUtils::LaunchApplication(cmd, NULL, false);\r
+ }\r
+ \r
+}
\ No newline at end of file