CTGitPath CTGitPathList::GetCommonDirectory() const { if (m_commonBaseDirectory.IsEmpty()) { PathVector::const_iterator it; for(it = m_paths.begin(); it != m_paths.end(); ++it) { const CTGitPath& baseDirectory = it->GetDirectory(); if(m_commonBaseDirectory.IsEmpty()) { m_commonBaseDirectory = baseDirectory; } else if(!m_commonBaseDirectory.IsEquivalentTo(baseDirectory)) { // Different path m_commonBaseDirectory.Reset(); break; } } } // since we only checked strings, not paths, // we have to make sure now that we really return a *path* here PathVector::const_iterator iter; for(iter = m_paths.begin(); iter != m_paths.end(); ++iter) { if (!m_commonBaseDirectory.IsAncestorOf(*iter)) { m_commonBaseDirectory = m_commonBaseDirectory.GetContainingDirectory(); break; } } return m_commonBaseDirectory; }
CTGitPath CTGitPathList::GetCommonRoot() const { if (IsEmpty()) return CTGitPath(); if (GetCount() == 1) return m_paths[0]; // first entry is common root for itself // (add trailing '\\' to detect partial matches of the last path element) CString root = m_paths[0].GetWinPathString() + _T('\\'); int rootLength = root.GetLength(); // determine common path string prefix for (PathVector::const_iterator it = m_paths.begin() + 1; it != m_paths.end(); ++it) { CString path = it->GetWinPathString() + _T('\\'); int newLength = CStringUtils::GetMatchingLength(root, path); if (newLength != rootLength) { root.Delete(newLength, rootLength); rootLength = newLength; } } // remove the last (partial) path element if (rootLength > 0) root.Delete(root.ReverseFind(_T('\\')), rootLength); // done return CTGitPath(root); }
bool CTGitPathList::AreAllPathsFilesInOneDirectory() const { // Check if all the paths are files and in the same directory PathVector::const_iterator it; m_commonBaseDirectory.Reset(); for(it = m_paths.begin(); it != m_paths.end(); ++it) { if(it->IsDirectory()) { return false; } const CTGitPath& baseDirectory = it->GetDirectory(); if(m_commonBaseDirectory.IsEmpty()) { m_commonBaseDirectory = baseDirectory; } else if(!m_commonBaseDirectory.IsEquivalentTo(baseDirectory)) { // Different path m_commonBaseDirectory.Reset(); return false; } } return true; }
bool CTGitPathList::WriteToFile(const CString& sFilename, bool bANSI /* = false */) const { try { if (bANSI) { CStdioFile file(sFilename, CFile::typeText | CFile::modeReadWrite | CFile::modeCreate); PathVector::const_iterator it; for(it = m_paths.begin(); it != m_paths.end(); ++it) { CStringA line = CStringA(it->GetGitPathString()) + '\n'; file.Write(line, line.GetLength()); } file.Close(); } else { CStdioFile file(sFilename, CFile::typeBinary | CFile::modeReadWrite | CFile::modeCreate); PathVector::const_iterator it; for(it = m_paths.begin(); it != m_paths.end(); ++it) { file.WriteString(it->GetGitPathString()+_T("\n")); } file.Close(); } } catch (CFileException* pE) { CTraceToOutputDebugString::Instance()(__FUNCTION__ ": CFileException in writing temp file\n"); pE->Delete(); return false; } return true; }
CString CTGitPathList::CreateAsteriskSeparatedString() const { CString sRet; PathVector::const_iterator it; for(it = m_paths.begin(); it != m_paths.end(); ++it) { if (!sRet.IsEmpty()) sRet += _T("*"); sRet += it->GetWinPathString(); } return sRet; }
void CTSVNPathList::DeleteAllPaths(bool bTrash, bool bFilesOnly, HWND hErrorWnd) { if (m_paths.empty()) return; PathVector::const_iterator it; SortByPathname (true); // nested ones first CString sPaths; for (it = m_paths.begin(); it != m_paths.end(); ++it) { if ((it->Exists())&&((it->IsDirectory() != bFilesOnly)||!bFilesOnly)) { if (!it->IsDirectory()) ::SetFileAttributes(it->GetWinPath(), FILE_ATTRIBUTE_NORMAL); sPaths += it->GetWinPath(); sPaths += '\0'; } } if (sPaths.IsEmpty()) return; sPaths += '\0'; sPaths += '\0'; DeleteViaShell((LPCTSTR)sPaths, bTrash, hErrorWnd); Clear(); }
std::string ContextGen::printable(const PathVector& val) { std::string res; if(val.empty()) return "(empty vector)"; else res = "(vector)"; Color col(getColorMode()); for(PathVector::const_iterator it = val.begin(); it != val.end(); ++it) { res.append(col.red("\n * ")); if(it->isNative()) res.append(col.yellow("[NATIVE] ")); else if(it->isForeign()) res.append(col.yellow("[FOREIGN] ")); else res.append(col.yellow("[NEITHER] ")); // is ok, if windows parity build and unix path with windows backend res.append(it->get()); } return res; }