bool FileExplorerUpdater::ParseSVNstate(const wxString &path, VCSstatearray &sa) { if(!wxFileName::DirExists(wxFileName(path,_T(".svn")).GetFullPath())) return false; wxArrayString output; int hresult=Exec(_T("svn stat -N ")+path,output); if(hresult!=0) return false; for(size_t i=0;i<output.GetCount();i++) { if(output[i].Len()<=7) break; VCSstate s; wxChar a=output[i][0]; switch(a) { case ' ': s.state=fvsVcUpToDate; break; case '?': s.state=fvsVcNonControlled; break; case 'A': s.state=fvsVcAdded; break; case 'M': s.state=fvsVcModified; break; case 'C': s.state=fvsVcConflict; break; case 'D': s.state=fvsVcMissing; break; case 'I': s.state=fvsVcNonControlled; break; case 'X': s.state=fvsVcExternal; break; case '!': s.state=fvsVcMissing; break; case '~': s.state=fvsVcLockStolen; break; default: break; } #ifdef __WXMSW__ wxFileName f(output[i].Mid(1).Strip(wxString::both)); f.MakeAbsolute(path); s.path=f.GetFullPath(); #else s.path=wxFileName(output[i].Mid(1).Strip(wxString::both)).GetFullPath(); #endif sa.Add(s); } return true; }
bool FileExplorerUpdater::ParseHGstate(const wxString &path, VCSstatearray &sa) { wxString parent=path; while(true) { if(wxFileName::DirExists(wxFileName(parent,_T(".hg")).GetFullPath())) break; wxString oldparent=parent; parent=wxFileName(parent).GetPath(); if(oldparent==parent||parent.IsEmpty()) return false; } if(parent.IsEmpty()) return false; wxArrayString output; wxString wdir=wxGetCwd(); wxSetWorkingDirectory(path); //TODO: Check if thread safe! int hresult=Exec(_T("hg -y stat ."),output); wxSetWorkingDirectory(wdir); if(hresult!=0) return false; for(size_t i=0;i<output.GetCount();i++) { if(output[i].Len()<=2) break; VCSstate s; wxChar a=output[i][0]; switch(a) { case 'C': //clean s.state=fvsVcUpToDate; break; case '?': //not tracked s.state=fvsVcNonControlled; break; case '!': // local copy removed -- will not see this file s.state=fvsVcMissing; break; case 'A': // added s.state=fvsVcAdded; break; case 'R': //removed from branch, but exists in local copy s.state=fvsVcMissing; break; case 'M': //modified s.state=fvsVcModified; break; default: break; } wxFileName f(output[i].Mid(2)); f.MakeAbsolute(path); s.path=f.GetFullPath(); sa.Add(s); } return true; }
bool FileExplorerUpdater::ParseCVSstate(const wxString &path, VCSstatearray &sa) { wxArrayString output; wxString wdir=wxGetCwd(); wxSetWorkingDirectory(path); Exec(_T("cvs stat -q -l ."),output); wxSetWorkingDirectory(wdir); // if(hresult!=0) // return false; for(size_t i=0;i<output.GetCount();i++) { int ind1=output[i].Find(_T("File: ")); int ind2=output[i].Find(_T("Status: ")); if(ind1<0||ind2<0) return false; wxString state=output[i].Mid(ind2+8).Strip(); VCSstate s; while(1) { if(state==_T("Up-to-date")) { s.state=fvsVcUpToDate; break; } if(state==_T("Locally Modified")) { s.state=fvsVcModified; break; } if(state==_T("Locally Added")) { s.state=fvsVcAdded; break; } break; } wxFileName f(output[i].Mid(ind1+6,ind2+6-ind1).Strip()); f.MakeAbsolute(path); s.path=f.GetFullPath(); sa.Add(s); } if(output.GetCount()>0) return true; else return false; }
bool FileExplorerUpdater::ParseBZRstate(const wxString &path, VCSstatearray &sa) { wxString parent=path; while(true) { if(wxFileName::DirExists(wxFileName(parent,_T(".bzr")).GetFullPath())) break; wxString oldparent=parent; parent=wxFileName(parent).GetPath(); if(oldparent==parent||parent.IsEmpty()) return false; } if(parent.IsEmpty()) return false; wxArrayString output; wxString rpath=parent; #ifdef __WXMSW__ int hresult=Exec(_T("cmd /c bzr stat --short ")+path,output); #else int hresult=Exec(_T("bzr stat --short ")+path,output); #endif if(hresult!=0) { return false; } for(size_t i=0;i<output.GetCount();i++) { if(output[i].Len()<=4) break; VCSstate s; wxChar a=output[i][0]; switch(a) { case '+': s.state=fvsVcUpToDate; break; case '-': s.state=fvsVcNonControlled; break; // case 'C': // s.state=fvsVcConflict; // break; case '?': s.state=fvsVcNonControlled; break; case 'R': s.state=fvsVcModified; break; case 'P': //pending merge s.state=fvsVcOutOfDate; break; } a=output[i][1]; switch(a) { case 'N': // created s.state=fvsVcAdded; break; case 'D': //deleted s.state=fvsVcMissing; break; case 'K': //kind changed case 'M': //modified s.state=fvsVcModified; break; } if(output[i][0]=='C') s.state=fvsVcConflict; wxFileName f(output[i].Mid(4)); f.MakeAbsolute(rpath); s.path=f.GetFullPath(); sa.Add(s); } return true; }