bool wxExVCS::IsAdminDirTopLevel( const std::string& admin_dir, const wxExFileName& fn) { if (!fn.IsOk() || admin_dir.empty()) { return false; } // The .git dir only exists in the root, so check all components. wxFileName root(fn.GetFullPath()); while (root.DirExists() && root.GetDirCount() > 0) { wxFileName path(root); path.AppendDir(admin_dir); if (path.DirExists() && !path.FileExists()) { return true; } root.RemoveLastDir(); } return false; }
const wxExVCSEntry wxExVCS::FindEntry(const wxExFileName& filename) { const int vcs = wxConfigBase::Get()->ReadLong("VCS", VCS_AUTO); if (vcs == VCS_AUTO) { if (filename.IsOk()) { for (const auto& it : m_Entries) { const bool toplevel = it.AdminDirIsTopLevel(); const std::string admin_dir = it.GetAdminDir(); if (toplevel && IsAdminDirTopLevel(admin_dir, filename)) { return it; } else if (IsAdminDir(admin_dir, filename)) { return it; } } } } else if (vcs >= VCS_START && vcs < (int)m_Entries.size()) { return m_Entries[vcs]; } return wxExVCSEntry(); }
bool wxExFile::FileSave(const wxExFileName& filename) { bool save_as = false; if (filename.IsOk()) { Assign(filename); MakeAbsolute(); save_as = true; } if (!save_as && !m_IsLoaded) { wxLogStatus("File has not been loaded"); return false; } if (m_OpenFile && !Open(m_FileName.GetFullPath(), wxFile::write)) { return false; } DoFileSave(save_as); Close(); ResetContentsChanged(); m_FileName.m_Stat.Sync(); m_Stat.Sync(); return true; }
bool wxExVCS::IsAdminDir( const std::string& admin_dir, const wxExFileName& fn) { if (admin_dir.empty() || !fn.IsOk()) { return false; } // these cannot be combined, as AppendDir is a void (2.9.1). wxFileName path(fn.GetFullPath()); path.AppendDir(admin_dir); return path.DirExists() && !path.FileExists(); }