diff options
| author | Enrico Zini <enrico@enricozini.org> | 2009-09-29 15:08:02 +0100 |
|---|---|---|
| committer | Enrico Zini <enrico@enricozini.org> | 2009-09-29 15:08:02 +0100 |
| commit | 006621455482edd8abf46a05292120745f99f7ec (patch) | |
| tree | ff1318ccc409a3dd0519035ce2949ac8a48e969e /rep/ept | |
| download | libept-006621455482edd8abf46a05292120745f99f7ec.tar.gz | |
Initial import
Diffstat (limited to 'rep/ept')
93 files changed, 20364 insertions, 0 deletions
diff --git a/rep/ept/apt/apt.cc.gcov.html b/rep/ept/apt/apt.cc.gcov.html new file mode 100644 index 0000000..ee60a5c --- /dev/null +++ b/rep/ept/apt/apt.cc.gcov.html @@ -0,0 +1,707 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/apt.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - apt.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">323</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">76.8 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">248</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** \file +<span class="lineNum"> 2 </span> : * High-level front-end to libapt-pkg, as a data provider for the ept framework. +<span class="lineNum"> 3 </span> : */ +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /* +<span class="lineNum"> 6 </span> : * Copyright (C) 2007,2008 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 7 </span> : * +<span class="lineNum"> 8 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 9 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 10 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 11 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 12 </span> : * +<span class="lineNum"> 13 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 14 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 15 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 16 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 17 </span> : * +<span class="lineNum"> 18 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 19 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 20 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 21 </span> : */ +<span class="lineNum"> 22 </span> : +<span class="lineNum"> 23 </span> : #include <ept/apt/apt.h> +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <apt-pkg/error.h> +<span class="lineNum"> 26 </span> : #include <apt-pkg/init.h> +<span class="lineNum"> 27 </span> : #include <apt-pkg/progress.h> +<span class="lineNum"> 28 </span> : #include <apt-pkg/sourcelist.h> +<span class="lineNum"> 29 </span> : #include <apt-pkg/pkgcachegen.h> +<span class="lineNum"> 30 </span> : #include <apt-pkg/policy.h> +<span class="lineNum"> 31 </span> : #include <apt-pkg/cachefile.h> +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 34 </span> : #include <sys/stat.h> +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : #include <vector> +<span class="lineNum"> 37 </span> : #include <algorithm> +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : #include <iostream> +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : using namespace std; +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : namespace ept { +<span class="lineNum"> 44 </span> : namespace apt { +<span class="lineNum"> 45 </span> : using core::aptTimestamp; +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span><span class="lineNoCov"> 0 : Exception::Exception(const std::string& context) throw ()</span> +<span class="lineNum"> 48 </span><span class="lineNoCov"> 0 : : Generic(context)</span> +<span class="lineNum"> 49 </span> : { +<span class="lineNum"> 50 </span> : // Concatenate all errors and warnings found +<span class="lineNum"> 51 </span><span class="lineNoCov"> 0 : string err;</span> +<span class="lineNum"> 52 </span><span class="lineNoCov"> 0 : while (!_error->empty())</span> +<span class="lineNum"> 53 </span> : { +<span class="lineNum"> 54 </span><span class="lineNoCov"> 0 : bool type = _error->PopMessage(err);</span> +<span class="lineNum"> 55 </span><span class="lineNoCov"> 0 : if (type)</span> +<span class="lineNum"> 56 </span><span class="lineNoCov"> 0 : m_message += "E: " + err + "\n";</span> +<span class="lineNum"> 57 </span> : else +<span class="lineNum"> 58 </span><span class="lineNoCov"> 0 : m_message += "W: " + err + "\n";</span> +<span class="lineNum"> 59 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 60 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span><span class="lineCov"> 29 : static void aptInit ()</span> +<span class="lineNum"> 63 </span> : { +<span class="lineNum"> 64 </span><span class="lineCov"> 29 : if (_config->FindB("Initialized"))</span> +<span class="lineNum"> 65 </span><span class="lineCov"> 29 : return;</span> +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span><span class="lineNoCov"> 0 : if (!pkgInitConfig (*_config))</span> +<span class="lineNum"> 68 </span><span class="lineNoCov"> 0 : throw Exception("initialising apt configuration");</span> +<span class="lineNum"> 69 </span> : +<span class="lineNum"> 70 </span><span class="lineNoCov"> 0 : _config->Set("Initialized", 1);</span> +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span> : /* +<span class="lineNum"> 73 </span> : _config->Set("Dir", CACHE_DIR); +<span class="lineNum"> 74 </span> : _config->Set("Dir::Cache", "cache"); +<span class="lineNum"> 75 </span> : _config->Set("Dir::State", "state"); +<span class="lineNum"> 76 </span> : _config->Set("Dir::Etc", "etc"); +<span class="lineNum"> 77 </span> : _config->Set("Dir::State::status", CACHE_DIR "dpkg-status"); +<span class="lineNum"> 78 </span> : */ +<span class="lineNum"> 79 </span><span class="lineNoCov"> 0 : if (!pkgInitSystem (*_config, _system))</span> +<span class="lineNum"> 80 </span><span class="lineNoCov"> 0 : throw Exception("initialising apt system");</span> +<span class="lineNum"> 81 </span> : } +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span> : struct AptImplementation +<span class="lineNum"> 84 </span> : { +<span class="lineNum"> 85 </span> : pkgSourceList* m_list; +<span class="lineNum"> 86 </span> : MMap *m; +<span class="lineNum"> 87 </span> : OpProgress progress; +<span class="lineNum"> 88 </span> : pkgCache* m_cache; +<span class="lineNum"> 89 </span> : pkgPolicy* m_policy; +<span class="lineNum"> 90 </span> : pkgCacheFile* m_depcache; +<span class="lineNum"> 91 </span> : time_t m_open_timestamp; +<span class="lineNum"> 92 </span> : +<span class="lineNum"> 93 </span><span class="lineCov"> 29 : AptImplementation() : m_list(0), m(0), m_cache(0), m_policy(0), m_depcache(0), m_open_timestamp(0)</span> +<span class="lineNum"> 94 </span> : { +<span class="lineNum"> 95 </span> : // Init the apt library if needed +<span class="lineNum"> 96 </span><span class="lineCov"> 29 : aptInit();</span> +<span class="lineNum"> 97 </span> : +<span class="lineNum"> 98 </span><span class="lineCov"> 29 : m_open_timestamp = aptTimestamp();</span> +<span class="lineNum"> 99 </span> : +<span class="lineNum"> 100 </span><span class="lineCov"> 29 : m_list = new pkgSourceList;</span> +<span class="lineNum"> 101 </span><span class="lineCov"> 58 : if (!m_list->ReadMainList())</span> +<span class="lineNum"> 102 </span><span class="lineNoCov"> 0 : throw Exception("reading list of sources");</span> +<span class="lineNum"> 103 </span> : +<span class="lineNum"> 104 </span><span class="lineCov"> 29 : bool res = pkgMakeStatusCache(*m_list, progress, &m, true);</span> +<span class="lineNum"> 105 </span><span class="lineCov"> 29 : progress.Done();</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 29 : if (!res)</span> +<span class="lineNum"> 107 </span><span class="lineNoCov"> 0 : throw Exception("Reading the package lists or status file");</span> +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span><span class="lineCov"> 29 : m_cache = new pkgCache(m);</span> +<span class="lineNum"> 110 </span><span class="lineCov"> 58 : m_policy = new pkgPolicy(m_cache);</span> +<span class="lineNum"> 111 </span><span class="lineCov"> 58 : if (!ReadPinFile(*m_policy))</span> +<span class="lineNum"> 112 </span><span class="lineNoCov"> 0 : throw Exception("Reading the policy pin file");</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 29 : }</span> +<span class="lineNum"> 114 </span> : +<span class="lineNum"> 115 </span><span class="lineCov"> 29 : ~AptImplementation()</span> +<span class="lineNum"> 116 </span> : { +<span class="lineNum"> 117 </span><span class="lineCov"> 29 : if (m_depcache) delete m_depcache;</span> +<span class="lineNum"> 118 </span><span class="lineCov"> 29 : if (m_policy) delete m_policy;</span> +<span class="lineNum"> 119 </span><span class="lineCov"> 29 : if (m_cache) delete m_cache;</span> +<span class="lineNum"> 120 </span><span class="lineCov"> 29 : if (m) delete m;</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 29 : if (m_list) delete m_list;</span> +<span class="lineNum"> 122 </span><span class="lineCov"> 29 : }</span> +<span class="lineNum"> 123 </span> : +<span class="lineNum"> 124 </span><span class="lineCov"> 3980 : pkgCache& cache()</span> +<span class="lineNum"> 125 </span> : { +<span class="lineNum"> 126 </span><span class="lineCov"> 3980 : return *m_cache;</span> +<span class="lineNum"> 127 </span> : } +<span class="lineNum"> 128 </span> : +<span class="lineNum"> 129 </span><span class="lineCov"> 16099 : pkgPolicy& policy()</span> +<span class="lineNum"> 130 </span> : { +<span class="lineNum"> 131 </span><span class="lineCov"> 16099 : return *m_policy;</span> +<span class="lineNum"> 132 </span> : } +<span class="lineNum"> 133 </span> : +<span class="lineNum"> 134 </span><span class="lineCov"> 1 : pkgCacheFile& depcache()</span> +<span class="lineNum"> 135 </span> : { +<span class="lineNum"> 136 </span><span class="lineCov"> 1 : if (!m_depcache)</span> +<span class="lineNum"> 137 </span> : { +<span class="lineNum"> 138 </span><span class="lineCov"> 1 : m_depcache = new pkgCacheFile;</span> +<span class="lineNum"> 139 </span><span class="lineCov"> 1 : if (!m_depcache->Open(progress, false))</span> +<span class="lineNum"> 140 </span><span class="lineNoCov"> 0 : throw Exception("Opening the cache file");</span> +<span class="lineNum"> 141 </span> : } +<span class="lineNum"> 142 </span><span class="lineCov"> 1 : return *m_depcache;</span> +<span class="lineNum"> 143 </span> : } +<span class="lineNum"> 144 </span> : }; +<span class="lineNum"> 145 </span> : +<span class="lineNum"> 146 </span> : // Sort a version list by package file locality +<span class="lineNum"> 147 </span><span class="lineCov"> 39519 : bool localityCompare(const pkgCache::VerFile* a, const pkgCache::VerFile* b)</span> +<span class="lineNum"> 148 </span> : { +<span class="lineNum"> 149 </span><span class="lineCov"> 39519 : if (a == 0 && b == 0)</span> +<span class="lineNum"> 150 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 151 </span><span class="lineCov"> 39519 : if (a == 0)</span> +<span class="lineNum"> 152 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 153 </span><span class="lineCov"> 39519 : if (b == 0)</span> +<span class="lineNum"> 154 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 155 </span> : +<span class="lineNum"> 156 </span><span class="lineCov"> 39519 : if (a->File == b->File)</span> +<span class="lineNum"> 157 </span><span class="lineCov"> 39060 : return a->Offset < b->Offset;</span> +<span class="lineNum"> 158 </span><span class="lineCov"> 459 : return a->File < b->File;</span> +<span class="lineNum"> 159 </span> : } +<span class="lineNum"> 160 </span> : +<span class="lineNum"> 161 </span> : // Iterate records using the algorithm used by apt-cache dumpavail +<span class="lineNum"> 162 </span> : struct RecordIteratorImpl +<span class="lineNum"> 163 </span> : { +<span class="lineNum"> 164 </span> : mutable int _ref; +<span class="lineNum"> 165 </span> : AptImplementation& apt; +<span class="lineNum"> 166 </span> : vector<pkgCache::VerFile*> vflist; +<span class="lineNum"> 167 </span> : pkgCache::PkgFileIterator lastFile; +<span class="lineNum"> 168 </span> : FileFd file; +<span class="lineNum"> 169 </span> : size_t lastOffset; +<span class="lineNum"> 170 </span> : +<span class="lineNum"> 171 </span><span class="lineCov"> 9 : RecordIteratorImpl(AptImplementation& apt) : _ref(0), apt(apt), vflist(0)</span> +<span class="lineNum"> 172 </span> : { +<span class="lineNum"> 173 </span> : // We already have an estimate of how many versions we're about to find +<span class="lineNum"> 174 </span><span class="lineCov"> 9 : vflist.reserve(apt.cache().HeaderP->PackageCount + 1);</span> +<span class="lineNum"> 175 </span> : +<span class="lineNum"> 176 </span> : // Populate the vector of versions to print +<span class="lineNum"> 177 </span><span class="lineCov"> 34002 : for (pkgCache::PkgIterator pi = apt.cache().PkgBegin(); !pi.end(); ++pi)</span> +<span class="lineNum"> 178 </span> : { +<span class="lineNum"> 179 </span><span class="lineCov"> 33993 : if (pi->VersionList == 0)</span> +<span class="lineNum"> 180 </span><span class="lineCov"> 17901 : continue;</span> +<span class="lineNum"> 181 </span> : +<span class="lineNum"> 182 </span> : /* Get the candidate version or fallback on the installed version, +<span class="lineNum"> 183 </span> : * as usual */ +<span class="lineNum"> 184 </span><span class="lineCov"> 16092 : pkgCache::VerIterator vi = apt.policy().GetCandidateVer(pi);</span> +<span class="lineNum"> 185 </span><span class="lineCov"> 16092 : if (vi.end() == true)</span> +<span class="lineNum"> 186 </span> : { +<span class="lineNum"> 187 </span><span class="lineCov"> 1926 : if (pi->CurrentVer == 0)</span> +<span class="lineNum"> 188 </span><span class="lineCov"> 1926 : continue;</span> +<span class="lineNum"> 189 </span><span class="lineNoCov"> 0 : vi = pi.CurrentVer();</span> +<span class="lineNum"> 190 </span> : } +<span class="lineNum"> 191 </span> : +<span class="lineNum"> 192 </span> : // Choose a valid file that contains the record for this version +<span class="lineNum"> 193 </span><span class="lineCov"> 14166 : pkgCache::VerFileIterator vfi = vi.FileList();</span> +<span class="lineNum"> 194 </span><span class="lineCov"> 24507 : for ( ; !vfi.end(); ++vfi)</span> +<span class="lineNum"> 195 </span><span class="lineCov"> 14166 : if ((vfi.File()->Flags & pkgCache::Flag::NotSource) == 0)</span> +<span class="lineNum"> 196 </span><span class="lineCov"> 3825 : break;</span> +<span class="lineNum"> 197 </span> : +<span class="lineNum"> 198 </span> : // Handle packages whose candidate version is currently installed +<span class="lineNum"> 199 </span> : // from outside the archives (like from a locally built .deb +<span class="lineNum"> 200 </span><span class="lineCov"> 14166 : if (vfi.end() == true)</span> +<span class="lineNum"> 201 </span> : { +<span class="lineNum"> 202 </span><span class="lineCov"> 20682 : for (pkgCache::VerIterator cur = pi.VersionList(); cur.end() != true; cur++)</span> +<span class="lineNum"> 203 </span> : { +<span class="lineNum"> 204 </span><span class="lineCov"> 20763 : for (vfi = cur.FileList(); vfi.end() == false; vfi++)</span> +<span class="lineNum"> 205 </span> : { +<span class="lineNum"> 206 </span><span class="lineCov"> 10422 : if ((vfi.File()->Flags & pkgCache::Flag::NotSource) == 0)</span> +<span class="lineNum"> 207 </span> : { +<span class="lineNum"> 208 </span><span class="lineCov"> 81 : vfi = vi.FileList();</span> +<span class="lineNum"> 209 </span><span class="lineCov"> 81 : break;</span> +<span class="lineNum"> 210 </span> : } +<span class="lineNum"> 211 </span> : } +<span class="lineNum"> 212 </span> : +<span class="lineNum"> 213 </span><span class="lineCov"> 10422 : if (vfi.end() == false)</span> +<span class="lineNum"> 214 </span><span class="lineCov"> 81 : break;</span> +<span class="lineNum"> 215 </span> : } +<span class="lineNum"> 216 </span> : } +<span class="lineNum"> 217 </span><span class="lineCov"> 14166 : if (!vfi.end())</span> +<span class="lineNum"> 218 </span><span class="lineCov"> 3906 : vflist.push_back(vfi);</span> +<span class="lineNum"> 219 </span> : } +<span class="lineNum"> 220 </span> : +<span class="lineNum"> 221 </span> : //cerr << vflist.size() << " versions found" << endl; +<span class="lineNum"> 222 </span> : +<span class="lineNum"> 223 </span><span class="lineCov"> 9 : sort(vflist.begin(), vflist.end(), localityCompare);</span> +<span class="lineNum"> 224 </span> : +<span class="lineNum"> 225 </span> : //for (size_t i = 0; i < vflist.size(); ++i) +<span class="lineNum"> 226 </span> : //{ +<span class="lineNum"> 227 </span> : // pkgCache::PkgFileIterator fi(apt.cache(), vflist[i]->File + apt.cache().PkgFileP); +<span class="lineNum"> 228 </span> : // cerr << i << ": " << fi.FileName() << ":" << vflist[i]->Offset << "-" << vflist[i]->Size << endl; +<span class="lineNum"> 229 </span> : //} +<span class="lineNum"> 230 </span> : //cerr << "Done indexing." << endl; +<span class="lineNum"> 231 </span><span class="lineCov"> 9 : }</span> +<span class="lineNum"> 232 </span> : +<span class="lineNum"> 233 </span><span class="lineCov"> 9 : ~RecordIteratorImpl()</span> +<span class="lineNum"> 234 </span> : { +<span class="lineNum"> 235 </span><span class="lineCov"> 9 : if (file.IsOpen())</span> +<span class="lineNum"> 236 </span><span class="lineCov"> 9 : file.Close();</span> +<span class="lineNum"> 237 </span><span class="lineCov"> 9 : }</span> +<span class="lineNum"> 238 </span> : +<span class="lineNum"> 239 </span><span class="lineCov"> 14 : void ref() { ++_ref; }</span> +<span class="lineNum"> 240 </span><span class="lineCov"> 14 : bool unref() { return --_ref == 0; }</span> +<span class="lineNum"> 241 </span> : +<span class="lineNum"> 242 </span><span class="lineCov"> 3906 : size_t size() { return vflist.size(); }</span> +<span class="lineNum"> 243 </span> : +<span class="lineNum"> 244 </span><span class="lineCov"> 3906 : string record(size_t idx)</span> +<span class="lineNum"> 245 </span> : { +<span class="lineNum"> 246 </span> : //cerr << "Access record " << idx << endl; +<span class="lineNum"> 247 </span> : //cerr << "lastfile: " << (lastFile.Cache() != 0) << endl; +<span class="lineNum"> 248 </span> : // We can't reuse the file that was already open: open the new one +<span class="lineNum"> 249 </span><span class="lineCov"> 3906 : if ((lastFile.Cache() == 0) || vflist[idx]->File + apt.cache().PkgFileP != lastFile)</span> +<span class="lineNum"> 250 </span> : { +<span class="lineNum"> 251 </span> : //cerr << "Needs open/reopen" << endl; +<span class="lineNum"> 252 </span><span class="lineCov"> 18 : lastFile = pkgCache::PkgFileIterator(apt.cache(), vflist[idx]->File + apt.cache().PkgFileP);</span> +<span class="lineNum"> 253 </span><span class="lineCov"> 18 : if (!lastFile.IsOk())</span> +<span class="lineNum"> 254 </span><span class="lineNoCov"> 0 : throw Exception(string("Reading the data record for a package from file ") + lastFile.FileName());</span> +<span class="lineNum"> 255 </span> : //cerr << "Ok for " << lastFile.FileName() << endl; +<span class="lineNum"> 256 </span><span class="lineCov"> 18 : if (file.IsOpen())</span> +<span class="lineNum"> 257 </span><span class="lineCov"> 9 : file.Close();</span> +<span class="lineNum"> 258 </span><span class="lineCov"> 18 : if (!file.Open(lastFile.FileName(), FileFd::ReadOnly))</span> +<span class="lineNum"> 259 </span><span class="lineNoCov"> 0 : throw Exception(string("Opening file ") + lastFile.FileName());</span> +<span class="lineNum"> 260 </span> : //cerr << "Opened " << lastFile.FileName() << endl; +<span class="lineNum"> 261 </span><span class="lineCov"> 18 : lastOffset = 0;</span> +<span class="lineNum"> 262 </span> : } +<span class="lineNum"> 263 </span> : +<span class="lineNum"> 264 </span> : //cerr << "Reading from " << lastFile.FileName() << ":" << vflist[idx]->Offset << "-" << vflist[idx]->Size << " (lastOffset: " << lastOffset << ")" << endl; +<span class="lineNum"> 265 </span> : +<span class="lineNum"> 266 </span> : // If we start near were we ended, avoid a seek and enlarge the read a bit +<span class="lineNum"> 267 </span><span class="lineCov"> 3906 : size_t slack = vflist[idx]->Offset - lastOffset;</span> +<span class="lineNum"> 268 </span> : //cerr << "Slack: " << slack << endl; +<span class="lineNum"> 269 </span><span class="lineCov"> 3906 : if (slack > 8)</span> +<span class="lineNum"> 270 </span> : { +<span class="lineNum"> 271 </span> : //cerr << "Slack too big: seek to " << vflist[idx]->Offset << endl; +<span class="lineNum"> 272 </span><span class="lineCov"> 171 : slack = 0;</span> +<span class="lineNum"> 273 </span><span class="lineCov"> 171 : if (!file.Seek(vflist[idx]->Offset))</span> +<span class="lineNum"> 274 </span><span class="lineNoCov"> 0 : throw Exception(string("Cannot seek to package record in file ") + lastFile.FileName());</span> +<span class="lineNum"> 275 </span> : } +<span class="lineNum"> 276 </span> : +<span class="lineNum"> 277 </span><span class="lineCov"> 3906 : char buffer[vflist[idx]->Size + slack + 1];</span> +<span class="lineNum"> 278 </span><span class="lineCov"> 3906 : if (!file.Read(buffer, vflist[idx]->Size + slack))</span> +<span class="lineNum"> 279 </span><span class="lineNoCov"> 0 : throw Exception(string("Cannot read package record in file ") + lastFile.FileName());</span> +<span class="lineNum"> 280 </span><span class="lineCov"> 3906 : buffer[vflist[idx]->Size + slack] = '\n';</span> +<span class="lineNum"> 281 </span> : //cerr << "Data read (slack: " << slack << ")" << endl; +<span class="lineNum"> 282 </span> : +<span class="lineNum"> 283 </span><span class="lineCov"> 3906 : lastOffset = vflist[idx]->Offset + vflist[idx]->Size;</span> +<span class="lineNum"> 284 </span> : +<span class="lineNum"> 285 </span><span class="lineCov"> 3906 : return string(buffer+slack);</span> +<span class="lineNum"> 286 </span> : } +<span class="lineNum"> 287 </span> : }; +<span class="lineNum"> 288 </span> : +<span class="lineNum"> 289 </span><span class="lineCov"> 20 : Apt::Iterator::Iterator(const Iterator& i)</span> +<span class="lineNum"> 290 </span> : { +<span class="lineNum"> 291 </span><span class="lineCov"> 20 : if (i.cur)</span> +<span class="lineNum"> 292 </span> : { +<span class="lineNum"> 293 </span><span class="lineCov"> 10 : pkgCache::PkgIterator* p = new pkgCache::PkgIterator;</span> +<span class="lineNum"> 294 </span><span class="lineCov"> 10 : *p = *static_cast<pkgCache::PkgIterator*>(i.cur);</span> +<span class="lineNum"> 295 </span><span class="lineCov"> 10 : cur = p;</span> +<span class="lineNum"> 296 </span> : } else +<span class="lineNum"> 297 </span><span class="lineCov"> 10 : cur = 0;</span> +<span class="lineNum"> 298 </span><span class="lineCov"> 20 : }</span> +<span class="lineNum"> 299 </span> : +<span class="lineNum"> 300 </span><span class="lineNoCov"> 0 : Apt::Iterator& Apt::Iterator::operator=(const Iterator& i)</span> +<span class="lineNum"> 301 </span> : { +<span class="lineNum"> 302 </span><span class="lineNoCov"> 0 : if (cur != i.cur)</span> +<span class="lineNum"> 303 </span> : { +<span class="lineNum"> 304 </span><span class="lineNoCov"> 0 : if (cur) delete static_cast<pkgCache::PkgIterator*>(cur);</span> +<span class="lineNum"> 305 </span><span class="lineNoCov"> 0 : if (i.cur)</span> +<span class="lineNum"> 306 </span> : { +<span class="lineNum"> 307 </span><span class="lineNoCov"> 0 : pkgCache::PkgIterator* p = new pkgCache::PkgIterator;</span> +<span class="lineNum"> 308 </span><span class="lineNoCov"> 0 : *p = *static_cast<pkgCache::PkgIterator*>(i.cur);</span> +<span class="lineNum"> 309 </span><span class="lineNoCov"> 0 : cur = p;</span> +<span class="lineNum"> 310 </span> : } else +<span class="lineNum"> 311 </span><span class="lineNoCov"> 0 : cur = 0;</span> +<span class="lineNum"> 312 </span> : } +<span class="lineNum"> 313 </span><span class="lineNoCov"> 0 : return *this;</span> +<span class="lineNum"> 314 </span> : } +<span class="lineNum"> 315 </span> : +<span class="lineNum"> 316 </span><span class="lineCov"> 3605 : Apt::Iterator::~Iterator()</span> +<span class="lineNum"> 317 </span> : { +<span class="lineNum"> 318 </span><span class="lineCov"> 3605 : if (cur) delete static_cast<pkgCache::PkgIterator*>(cur);</span> +<span class="lineNum"> 319 </span><span class="lineCov"> 3605 : }</span> +<span class="lineNum"> 320 </span><span class="lineCov"> 5364 : std::string Apt::Iterator::operator*()</span> +<span class="lineNum"> 321 </span> : { +<span class="lineNum"> 322 </span><span class="lineCov"> 5364 : return static_cast<pkgCache::PkgIterator*>(cur)->Name();</span> +<span class="lineNum"> 323 </span> : } +<span class="lineNum"> 324 </span><span class="lineCov"> 7152 : Apt::Iterator& Apt::Iterator::operator++()</span> +<span class="lineNum"> 325 </span> : { +<span class="lineNum"> 326 </span><span class="lineCov"> 7152 : pkgCache::PkgIterator* iter = static_cast<pkgCache::PkgIterator*>(cur);</span> +<span class="lineNum"> 327 </span><span class="lineCov"> 7152 : ++*iter;</span> +<span class="lineNum"> 328 </span><span class="lineCov"> 22260 : while (!iter->end() && (*iter)->VersionList == 0)</span> +<span class="lineNum"> 329 </span><span class="lineCov"> 7956 : ++*iter;</span> +<span class="lineNum"> 330 </span><span class="lineCov"> 7152 : if (iter->end())</span> +<span class="lineNum"> 331 </span> : { +<span class="lineNum"> 332 </span><span class="lineCov"> 4 : delete iter;</span> +<span class="lineNum"> 333 </span><span class="lineCov"> 4 : cur = 0;</span> +<span class="lineNum"> 334 </span> : } +<span class="lineNum"> 335 </span><span class="lineCov"> 7152 : return *this;</span> +<span class="lineNum"> 336 </span> : } +<span class="lineNum"> 337 </span><span class="lineNoCov"> 0 : bool Apt::Iterator::operator==(const Iterator& i) const</span> +<span class="lineNum"> 338 </span> : { +<span class="lineNum"> 339 </span><span class="lineNoCov"> 0 : if (cur == 0 && i.cur == 0)</span> +<span class="lineNum"> 340 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 341 </span><span class="lineNoCov"> 0 : if (cur == 0 || i.cur == 0)</span> +<span class="lineNum"> 342 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 343 </span><span class="lineNoCov"> 0 : pkgCache::PkgIterator* iter1 = static_cast<pkgCache::PkgIterator*>(cur);</span> +<span class="lineNum"> 344 </span><span class="lineNoCov"> 0 : pkgCache::PkgIterator* iter2 = static_cast<pkgCache::PkgIterator*>(i.cur);</span> +<span class="lineNum"> 345 </span><span class="lineNoCov"> 0 : return *iter1 == *iter2;</span> +<span class="lineNum"> 346 </span> : } +<span class="lineNum"> 347 </span><span class="lineCov"> 7157 : bool Apt::Iterator::operator!=(const Iterator& i) const</span> +<span class="lineNum"> 348 </span> : { +<span class="lineNum"> 349 </span><span class="lineCov"> 7157 : if (cur == 0 && i.cur == 0)</span> +<span class="lineNum"> 350 </span><span class="lineCov"> 4 : return false;</span> +<span class="lineNum"> 351 </span><span class="lineCov"> 7153 : if (cur == 0 || i.cur == 0)</span> +<span class="lineNum"> 352 </span><span class="lineCov"> 7153 : return true;</span> +<span class="lineNum"> 353 </span><span class="lineNoCov"> 0 : pkgCache::PkgIterator* iter1 = static_cast<pkgCache::PkgIterator*>(cur);</span> +<span class="lineNum"> 354 </span><span class="lineNoCov"> 0 : pkgCache::PkgIterator* iter2 = static_cast<pkgCache::PkgIterator*>(i.cur);</span> +<span class="lineNum"> 355 </span><span class="lineNoCov"> 0 : return *iter1 != *iter2;</span> +<span class="lineNum"> 356 </span> : } +<span class="lineNum"> 357 </span> : +<span class="lineNum"> 358 </span> : +<span class="lineNum"> 359 </span><span class="lineCov"> 9 : Apt::RecordIterator::RecordIterator(RecordIteratorImpl* impl, size_t pos)</span> +<span class="lineNum"> 360 </span><span class="lineCov"> 9 : : impl(impl), pos(pos), cur_pos(pos)</span> +<span class="lineNum"> 361 </span> : { +<span class="lineNum"> 362 </span><span class="lineCov"> 9 : if (impl)</span> +<span class="lineNum"> 363 </span> : { +<span class="lineNum"> 364 </span><span class="lineCov"> 9 : impl->ref();</span> +<span class="lineNum"> 365 </span><span class="lineCov"> 9 : cur = impl->record(pos);</span> +<span class="lineNum"> 366 </span><span class="lineCov"> 9 : cur_pos = pos;</span> +<span class="lineNum"> 367 </span> : } +<span class="lineNum"> 368 </span><span class="lineCov"> 9 : }</span> +<span class="lineNum"> 369 </span><span class="lineCov"> 10 : Apt::RecordIterator::RecordIterator(const RecordIterator& r)</span> +<span class="lineNum"> 370 </span><span class="lineCov"> 10 : : impl(r.impl), pos(r.pos), cur(r.cur), cur_pos(r.cur_pos)</span> +<span class="lineNum"> 371 </span> : { +<span class="lineNum"> 372 </span><span class="lineCov"> 10 : if (impl)</span> +<span class="lineNum"> 373 </span><span class="lineCov"> 5 : impl->ref();</span> +<span class="lineNum"> 374 </span><span class="lineCov"> 10 : }</span> +<span class="lineNum"> 375 </span><span class="lineCov"> 3500 : Apt::RecordIterator::~RecordIterator()</span> +<span class="lineNum"> 376 </span> : { +<span class="lineNum"> 377 </span><span class="lineCov"> 3500 : if (impl && impl->unref())</span> +<span class="lineNum"> 378 </span><span class="lineCov"> 1 : delete impl;</span> +<span class="lineNum"> 379 </span><span class="lineCov"> 3500 : }</span> +<span class="lineNum"> 380 </span><span class="lineCov"> 3906 : std::string Apt::RecordIterator::operator*()</span> +<span class="lineNum"> 381 </span> : { +<span class="lineNum"> 382 </span><span class="lineCov"> 3906 : if (cur_pos != pos)</span> +<span class="lineNum"> 383 </span> : { +<span class="lineNum"> 384 </span><span class="lineCov"> 3464 : cur = impl->record(pos);</span> +<span class="lineNum"> 385 </span><span class="lineCov"> 3464 : cur_pos = pos;</span> +<span class="lineNum"> 386 </span> : } +<span class="lineNum"> 387 </span><span class="lineCov"> 3906 : return cur;</span> +<span class="lineNum"> 388 </span> : } +<span class="lineNum"> 389 </span><span class="lineCov"> 868 : std::string* Apt::RecordIterator::operator->()</span> +<span class="lineNum"> 390 </span> : { +<span class="lineNum"> 391 </span><span class="lineCov"> 868 : if (cur_pos != pos)</span> +<span class="lineNum"> 392 </span> : { +<span class="lineNum"> 393 </span><span class="lineCov"> 433 : cur = impl->record(pos);</span> +<span class="lineNum"> 394 </span><span class="lineCov"> 433 : cur_pos = pos;</span> +<span class="lineNum"> 395 </span> : } +<span class="lineNum"> 396 </span><span class="lineCov"> 868 : return &cur;</span> +<span class="lineNum"> 397 </span> : } +<span class="lineNum"> 398 </span><span class="lineCov"> 3906 : Apt::RecordIterator& Apt::RecordIterator::operator++()</span> +<span class="lineNum"> 399 </span> : { +<span class="lineNum"> 400 </span><span class="lineCov"> 3906 : ++pos;</span> +<span class="lineNum"> 401 </span><span class="lineCov"> 3906 : if (pos >= impl->size())</span> +<span class="lineNum"> 402 </span> : { +<span class="lineNum"> 403 </span> : // If we reach the end, we become an end iterator +<span class="lineNum"> 404 </span><span class="lineCov"> 9 : if (impl && impl->unref())</span> +<span class="lineNum"> 405 </span><span class="lineCov"> 8 : delete impl;</span> +<span class="lineNum"> 406 </span><span class="lineCov"> 9 : impl = 0;</span> +<span class="lineNum"> 407 </span><span class="lineCov"> 9 : pos = 0;</span> +<span class="lineNum"> 408 </span> : } +<span class="lineNum"> 409 </span><span class="lineCov"> 3906 : return *this;</span> +<span class="lineNum"> 410 </span> : } +<span class="lineNum"> 411 </span><span class="lineNoCov"> 0 : Apt::RecordIterator& Apt::RecordIterator::operator=(const RecordIterator& r)</span> +<span class="lineNum"> 412 </span> : { +<span class="lineNum"> 413 </span> : // Increment first, to avoid it reaching zero on assignment to self +<span class="lineNum"> 414 </span><span class="lineNoCov"> 0 : if (r.impl) r.impl->ref();</span> +<span class="lineNum"> 415 </span><span class="lineNoCov"> 0 : if (impl && impl->unref())</span> +<span class="lineNum"> 416 </span><span class="lineNoCov"> 0 : delete impl;</span> +<span class="lineNum"> 417 </span><span class="lineNoCov"> 0 : impl = r.impl;</span> +<span class="lineNum"> 418 </span><span class="lineNoCov"> 0 : pos = r.pos;</span> +<span class="lineNum"> 419 </span><span class="lineNoCov"> 0 : cur = r.cur;</span> +<span class="lineNum"> 420 </span><span class="lineNoCov"> 0 : cur_pos = r.cur_pos;</span> +<span class="lineNum"> 421 </span><span class="lineNoCov"> 0 : return *this;</span> +<span class="lineNum"> 422 </span> : } +<span class="lineNum"> 423 </span><span class="lineNoCov"> 0 : bool Apt::RecordIterator::operator==(const RecordIterator& ri) const</span> +<span class="lineNum"> 424 </span> : { +<span class="lineNum"> 425 </span><span class="lineNoCov"> 0 : return impl == ri.impl && pos == ri.pos;</span> +<span class="lineNum"> 426 </span> : } +<span class="lineNum"> 427 </span><span class="lineCov"> 3915 : bool Apt::RecordIterator::operator!=(const RecordIterator& ri) const</span> +<span class="lineNum"> 428 </span> : { +<span class="lineNum"> 429 </span><span class="lineCov"> 3915 : return impl != ri.impl || pos != ri.pos;</span> +<span class="lineNum"> 430 </span> : } +<span class="lineNum"> 431 </span> : +<span class="lineNum"> 432 </span> : +<span class="lineNum"> 433 </span><span class="lineCov"> 28 : Apt::Apt() : impl(new AptImplementation()) {}</span> +<span class="lineNum"> 434 </span><span class="lineCov"> 28 : Apt::~Apt() { delete impl; }</span> +<span class="lineNum"> 435 </span> : +<span class="lineNum"> 436 </span><span class="lineCov"> 4 : Apt::iterator Apt::begin() const</span> +<span class="lineNum"> 437 </span> : { +<span class="lineNum"> 438 </span><span class="lineCov"> 4 : pkgCache::PkgIterator* p = new pkgCache::PkgIterator;</span> +<span class="lineNum"> 439 </span><span class="lineCov"> 4 : *p = impl->cache().PkgBegin();</span> +<span class="lineNum"> 440 </span><span class="lineCov"> 4 : return Apt::Iterator(p);</span> +<span class="lineNum"> 441 </span> : } +<span class="lineNum"> 442 </span> : +<span class="lineNum"> 443 </span><span class="lineCov"> 3581 : Apt::iterator Apt::end() const</span> +<span class="lineNum"> 444 </span> : { +<span class="lineNum"> 445 </span><span class="lineCov"> 3581 : return Apt::Iterator();</span> +<span class="lineNum"> 446 </span> : } +<span class="lineNum"> 447 </span> : +<span class="lineNum"> 448 </span><span class="lineCov"> 9 : Apt::record_iterator Apt::recordBegin() const</span> +<span class="lineNum"> 449 </span> : { +<span class="lineNum"> 450 </span><span class="lineCov"> 9 : return Apt::RecordIterator(new RecordIteratorImpl(*impl));</span> +<span class="lineNum"> 451 </span> : } +<span class="lineNum"> 452 </span> : +<span class="lineNum"> 453 </span><span class="lineCov"> 3481 : Apt::record_iterator Apt::recordEnd() const</span> +<span class="lineNum"> 454 </span> : { +<span class="lineNum"> 455 </span><span class="lineCov"> 3481 : return Apt::RecordIterator();</span> +<span class="lineNum"> 456 </span> : } +<span class="lineNum"> 457 </span> : +<span class="lineNum"> 458 </span><span class="lineNoCov"> 0 : size_t Apt::size() const</span> +<span class="lineNum"> 459 </span> : { +<span class="lineNum"> 460 </span><span class="lineNoCov"> 0 : return impl->cache().HeaderP->PackageCount;</span> +<span class="lineNum"> 461 </span> : } +<span class="lineNum"> 462 </span> : +<span class="lineNum"> 463 </span><span class="lineCov"> 16 : time_t Apt::timestamp()</span> +<span class="lineNum"> 464 </span> : { +<span class="lineNum"> 465 </span><span class="lineCov"> 16 : return aptTimestamp();</span> +<span class="lineNum"> 466 </span> : } +<span class="lineNum"> 467 </span> : +<span class="lineNum"> 468 </span><span class="lineCov"> 5 : bool Apt::isValid(const std::string& pkg) const</span> +<span class="lineNum"> 469 </span> : { +<span class="lineNum"> 470 </span><span class="lineCov"> 5 : pkgCache::PkgIterator pi = impl->cache().FindPkg(pkg);</span> +<span class="lineNum"> 471 </span><span class="lineCov"> 5 : return !pi.end();</span> +<span class="lineNum"> 472 </span> : } +<span class="lineNum"> 473 </span> : +<span class="lineNum"> 474 </span><span class="lineCov"> 4 : Version Apt::validate(const Version& ver) const</span> +<span class="lineNum"> 475 </span> : { +<span class="lineNum"> 476 </span><span class="lineCov"> 4 : pkgCache::PkgIterator pi = impl->cache().FindPkg(ver.name());</span> +<span class="lineNum"> 477 </span><span class="lineCov"> 5 : if (pi.end()) return Version();</span> +<span class="lineNum"> 478 </span><span class="lineCov"> 4 : for (pkgCache::VerIterator vi = pi.VersionList(); !vi.end(); vi++)</span> +<span class="lineNum"> 479 </span> : { +<span class="lineNum"> 480 </span><span class="lineCov"> 3 : const char* v = vi.VerStr();</span> +<span class="lineNum"> 481 </span><span class="lineCov"> 3 : if (v == 0) continue;</span> +<span class="lineNum"> 482 </span><span class="lineCov"> 3 : if (ver.version() == v)</span> +<span class="lineNum"> 483 </span><span class="lineCov"> 2 : return ver;</span> +<span class="lineNum"> 484 </span> : } +<span class="lineNum"> 485 </span><span class="lineCov"> 1 : return Version();</span> +<span class="lineNum"> 486 </span> : } +<span class="lineNum"> 487 </span> : +<span class="lineNum"> 488 </span><span class="lineCov"> 4 : Version Apt::candidateVersion(const std::string& pkg) const</span> +<span class="lineNum"> 489 </span> : { +<span class="lineNum"> 490 </span><span class="lineCov"> 4 : pkgCache::PkgIterator pi = impl->cache().FindPkg(pkg);</span> +<span class="lineNum"> 491 </span><span class="lineCov"> 4 : if (pi.end()) return Version();</span> +<span class="lineNum"> 492 </span><span class="lineCov"> 3 : pkgCache::VerIterator vi = impl->policy().GetCandidateVer(pi);</span> +<span class="lineNum"> 493 </span><span class="lineCov"> 3 : if (vi.end()) return Version();</span> +<span class="lineNum"> 494 </span><span class="lineCov"> 3 : return Version(pkg, vi.VerStr());</span> +<span class="lineNum"> 495 </span> : } +<span class="lineNum"> 496 </span> : +<span class="lineNum"> 497 </span><span class="lineCov"> 2 : Version Apt::installedVersion(const std::string& pkg) const</span> +<span class="lineNum"> 498 </span> : { +<span class="lineNum"> 499 </span><span class="lineCov"> 2 : pkgCache::PkgIterator pi = impl->cache().FindPkg(pkg);</span> +<span class="lineNum"> 500 </span><span class="lineCov"> 2 : if (pi.end()) return Version();</span> +<span class="lineNum"> 501 </span><span class="lineCov"> 1 : if (pi->CurrentVer == 0) return Version();</span> +<span class="lineNum"> 502 </span><span class="lineCov"> 1 : pkgCache::VerIterator vi = pi.CurrentVer();</span> +<span class="lineNum"> 503 </span><span class="lineCov"> 1 : if (vi.end()) return Version();</span> +<span class="lineNum"> 504 </span><span class="lineCov"> 1 : return Version(pkg, vi.VerStr());</span> +<span class="lineNum"> 505 </span> : } +<span class="lineNum"> 506 </span> : +<span class="lineNum"> 507 </span><span class="lineCov"> 4 : Version Apt::anyVersion(const std::string& pkg) const</span> +<span class="lineNum"> 508 </span> : { +<span class="lineNum"> 509 </span><span class="lineCov"> 4 : pkgCache::PkgIterator pi = impl->cache().FindPkg(pkg);</span> +<span class="lineNum"> 510 </span><span class="lineCov"> 4 : if (pi.end()) return Version();</span> +<span class="lineNum"> 511 </span> : +<span class="lineNum"> 512 </span><span class="lineCov"> 3 : pkgCache::VerIterator vi = impl->policy().GetCandidateVer(pi);</span> +<span class="lineNum"> 513 </span><span class="lineCov"> 3 : if (vi.end())</span> +<span class="lineNum"> 514 </span> : { +<span class="lineNum"> 515 </span><span class="lineNoCov"> 0 : if (pi->CurrentVer == 0) return Version();</span> +<span class="lineNum"> 516 </span><span class="lineNoCov"> 0 : vi = pi.CurrentVer();</span> +<span class="lineNum"> 517 </span><span class="lineNoCov"> 0 : if (vi.end()) return Version();</span> +<span class="lineNum"> 518 </span> : } +<span class="lineNum"> 519 </span><span class="lineCov"> 3 : return Version(pkg, vi.VerStr());</span> +<span class="lineNum"> 520 </span> : } +<span class="lineNum"> 521 </span> : +<span class="lineNum"> 522 </span><span class="lineCov"> 2 : PackageState Apt::state(const std::string& pkg) const</span> +<span class="lineNum"> 523 </span> : { +<span class="lineNum"> 524 </span><span class="lineCov"> 2 : pkgCache::PkgIterator pi = impl->cache().FindPkg(pkg);</span> +<span class="lineNum"> 525 </span><span class="lineCov"> 2 : if (pi.end()) return PackageState();</span> +<span class="lineNum"> 526 </span><span class="lineCov"> 1 : pkgDepCache::StateCache sc = impl->depcache()[pi];</span> +<span class="lineNum"> 527 </span> : +<span class="lineNum"> 528 </span><span class="lineCov"> 1 : unsigned int flags = PackageState::Valid;</span> +<span class="lineNum"> 529 </span> : +<span class="lineNum"> 530 </span> : // Check if the package is installed +<span class="lineNum"> 531 </span><span class="lineCov"> 1 : if (pi->CurrentState != pkgCache::State::ConfigFiles &&</span> +<span class="lineNum"> 532 </span> : pi->CurrentState != pkgCache::State::NotInstalled && +<span class="lineNum"> 533 </span> : pi->CurrentVer != 0) +<span class="lineNum"> 534 </span> : { +<span class="lineNum"> 535 </span> : // Try to get a VerIterator to the installed version +<span class="lineNum"> 536 </span><span class="lineCov"> 1 : pkgCache::VerIterator inst = pi.CurrentVer();</span> +<span class="lineNum"> 537 </span><span class="lineCov"> 1 : if (!inst.end())</span> +<span class="lineNum"> 538 </span> : { +<span class="lineNum"> 539 </span> : // If we made it so far, it is installed +<span class="lineNum"> 540 </span><span class="lineCov"> 1 : flags |= PackageState::Installed;</span> +<span class="lineNum"> 541 </span> : +<span class="lineNum"> 542 </span> : // Now check if it is upgradable +<span class="lineNum"> 543 </span><span class="lineCov"> 1 : pkgCache::VerIterator cand = impl->policy().GetCandidateVer(pi);</span> +<span class="lineNum"> 544 </span> : +<span class="lineNum"> 545 </span> : // If the candidate version is different than the installed one, then +<span class="lineNum"> 546 </span> : // it is installable +<span class="lineNum"> 547 </span><span class="lineCov"> 1 : if (!cand.end() && inst != cand)</span> +<span class="lineNum"> 548 </span><span class="lineNoCov"> 0 : flags |= PackageState::Upgradable;</span> +<span class="lineNum"> 549 </span> : } +<span class="lineNum"> 550 </span> : } +<span class="lineNum"> 551 </span><span class="lineCov"> 1 : if (sc.Install())</span> +<span class="lineNum"> 552 </span><span class="lineNoCov"> 0 : flags |= PackageState::Install;</span> +<span class="lineNum"> 553 </span><span class="lineCov"> 1 : if ((sc.iFlags & pkgDepCache::ReInstall) == pkgDepCache::ReInstall)</span> +<span class="lineNum"> 554 </span><span class="lineNoCov"> 0 : flags |= PackageState::ReInstall;</span> +<span class="lineNum"> 555 </span><span class="lineCov"> 1 : if (sc.Keep())</span> +<span class="lineNum"> 556 </span><span class="lineCov"> 1 : flags |= PackageState::Keep;</span> +<span class="lineNum"> 557 </span><span class="lineCov"> 1 : if (sc.Delete())</span> +<span class="lineNum"> 558 </span><span class="lineNoCov"> 0 : flags |= PackageState::Remove;</span> +<span class="lineNum"> 559 </span><span class="lineCov"> 1 : if ((sc.iFlags & pkgDepCache::Purge) == pkgDepCache::Purge)</span> +<span class="lineNum"> 560 </span><span class="lineNoCov"> 0 : flags |= PackageState::Purge;</span> +<span class="lineNum"> 561 </span><span class="lineCov"> 1 : if (sc.NowBroken())</span> +<span class="lineNum"> 562 </span><span class="lineNoCov"> 0 : flags |= PackageState::NowBroken;</span> +<span class="lineNum"> 563 </span><span class="lineCov"> 1 : if (sc.InstBroken())</span> +<span class="lineNum"> 564 </span><span class="lineNoCov"> 0 : flags |= PackageState::WillBreak;</span> +<span class="lineNum"> 565 </span> : +<span class="lineNum"> 566 </span><span class="lineCov"> 1 : return PackageState(flags);</span> +<span class="lineNum"> 567 </span> : } +<span class="lineNum"> 568 </span> : +<span class="lineNum"> 569 </span><span class="lineCov"> 1 : std::string Apt::rawRecord(const std::string& ver) const</span> +<span class="lineNum"> 570 </span> : { +<span class="lineNum"> 571 </span> : // TODO: possibly reimplement using a single lump of apt code, to avoid +<span class="lineNum"> 572 </span> : // repeating lookups +<span class="lineNum"> 573 </span><span class="lineCov"> 1 : return rawRecord(anyVersion(ver));</span> +<span class="lineNum"> 574 </span> : } +<span class="lineNum"> 575 </span> : +<span class="lineNum"> 576 </span><span class="lineCov"> 4 : std::string Apt::rawRecord(const Version& ver) const</span> +<span class="lineNum"> 577 </span> : { +<span class="lineNum"> 578 </span><span class="lineCov"> 4 : pkgCache::PkgIterator pi = impl->cache().FindPkg(ver.name());</span> +<span class="lineNum"> 579 </span><span class="lineCov"> 4 : if (pi.end()) return std::string();</span> +<span class="lineNum"> 580 </span><span class="lineCov"> 5 : for (pkgCache::VerIterator vi = pi.VersionList(); !vi.end(); vi++)</span> +<span class="lineNum"> 581 </span> : { +<span class="lineNum"> 582 </span><span class="lineCov"> 4 : const char* v = vi.VerStr();</span> +<span class="lineNum"> 583 </span><span class="lineCov"> 4 : if (v == 0) continue;</span> +<span class="lineNum"> 584 </span><span class="lineCov"> 4 : if (ver.version() == v)</span> +<span class="lineNum"> 585 </span> : { +<span class="lineNum"> 586 </span> : // Code taken and adapted from apt-cache's DisplayRecord +<span class="lineNum"> 587 </span> : +<span class="lineNum"> 588 </span> : // Find an appropriate file +<span class="lineNum"> 589 </span><span class="lineCov"> 3 : pkgCache::VerFileIterator vfi = vi.FileList();</span> +<span class="lineNum"> 590 </span><span class="lineCov"> 3 : for (; !vfi.end(); vfi++)</span> +<span class="lineNum"> 591 </span><span class="lineCov"> 3 : if ((vfi.File()->Flags & pkgCache::Flag::NotSource) == 0)</span> +<span class="lineNum"> 592 </span><span class="lineCov"> 3 : break;</span> +<span class="lineNum"> 593 </span><span class="lineCov"> 3 : if (vfi.end())</span> +<span class="lineNum"> 594 </span><span class="lineNoCov"> 0 : vfi = vi.FileList();</span> +<span class="lineNum"> 595 </span> : +<span class="lineNum"> 596 </span> : // Check and load the package list file +<span class="lineNum"> 597 </span><span class="lineCov"> 3 : pkgCache::PkgFileIterator pfi = vfi.File();</span> +<span class="lineNum"> 598 </span><span class="lineCov"> 3 : if (!pfi.IsOk())</span> +<span class="lineNum"> 599 </span><span class="lineNoCov"> 0 : throw Exception(string("Reading the data record for a package version from file ") + pfi.FileName());</span> +<span class="lineNum"> 600 </span> : +<span class="lineNum"> 601 </span><span class="lineCov"> 3 : FileFd pkgf(pfi.FileName(), FileFd::ReadOnly);</span> +<span class="lineNum"> 602 </span><span class="lineCov"> 6 : if (_error->PendingError() == true)</span> +<span class="lineNum"> 603 </span><span class="lineNoCov"> 0 : return std::string();</span> +<span class="lineNum"> 604 </span> : +<span class="lineNum"> 605 </span> : // Read the record and then write it out again. +<span class="lineNum"> 606 </span><span class="lineCov"> 3 : char* buffer = new char[vfi->Size+1];</span> +<span class="lineNum"> 607 </span><span class="lineCov"> 3 : buffer[vfi->Size] = '\n';</span> +<span class="lineNum"> 608 </span><span class="lineCov"> 3 : if (!pkgf.Seek(vfi->Offset) || !pkgf.Read(buffer, vfi->Size))</span> +<span class="lineNum"> 609 </span> : { +<span class="lineNum"> 610 </span><span class="lineNoCov"> 0 : delete[] buffer;</span> +<span class="lineNum"> 611 </span><span class="lineNoCov"> 0 : return std::string();</span> +<span class="lineNum"> 612 </span> : } +<span class="lineNum"> 613 </span> : +<span class="lineNum"> 614 </span><span class="lineCov"> 3 : std::string res(buffer, vfi->Size);</span> +<span class="lineNum"> 615 </span><span class="lineCov"> 6 : delete[] buffer;</span> +<span class="lineNum"> 616 </span><span class="lineCov"> 3 : return res;</span> +<span class="lineNum"> 617 </span> : } +<span class="lineNum"> 618 </span> : } +<span class="lineNum"> 619 </span><span class="lineCov"> 1 : return std::string();</span> +<span class="lineNum"> 620 </span> : } +<span class="lineNum"> 621 </span> : +<span class="lineNum"> 622 </span><span class="lineCov"> 2 : void Apt::checkCacheUpdates()</span> +<span class="lineNum"> 623 </span> : { +<span class="lineNum"> 624 </span><span class="lineCov"> 2 : if (impl->m_open_timestamp < timestamp())</span> +<span class="lineNum"> 625 </span> : { +<span class="lineNum"> 626 </span> : // Crudely reopen everything +<span class="lineNum"> 627 </span><span class="lineCov"> 1 : delete impl;</span> +<span class="lineNum"> 628 </span><span class="lineCov"> 1 : impl = new AptImplementation;</span> +<span class="lineNum"> 629 </span> : } +<span class="lineNum"> 630 </span><span class="lineCov"> 2 : }</span> +<span class="lineNum"> 631 </span> : +<span class="lineNum"> 632 </span><span class="lineCov"> 1 : void Apt::invalidateTimestamp()</span> +<span class="lineNum"> 633 </span> : { +<span class="lineNum"> 634 </span><span class="lineCov"> 1 : impl->m_open_timestamp = 0;</span> +<span class="lineNum"> 635 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 636 </span> : +<span class="lineNum"> 637 </span> : } +<span class="lineNum"> 638 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 639 </span> : +<span class="lineNum"> 640 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/apt.h.gcov.html b/rep/ept/apt/apt.h.gcov.html new file mode 100644 index 0000000..7bde4c7 --- /dev/null +++ b/rep/ept/apt/apt.h.gcov.html @@ -0,0 +1,286 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/apt.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - apt.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">6</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">50.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">3</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #ifndef EPT_APT_APT_H +<span class="lineNum"> 3 </span> : #define EPT_APT_APT_H +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /** \file +<span class="lineNum"> 6 </span> : * High-level front-end to libapt-pkg, as a data provider for the ept framework. +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2007,2008 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 13 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 14 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 15 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 20 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 23 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <wibble/exception.h> +<span class="lineNum"> 28 </span> : #include <ept/apt/version.h> +<span class="lineNum"> 29 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : #include <iterator> +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : namespace ept { +<span class="lineNum"> 34 </span> : namespace apt { +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : class Exception : public wibble::exception::Generic +<span class="lineNum"> 37 </span> : { +<span class="lineNum"> 38 </span> : protected: +<span class="lineNum"> 39 </span> : std::string m_message; +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : public: +<span class="lineNum"> 42 </span> : Exception(const std::string& context) throw (); +<span class="lineNum"> 43 </span><span class="lineNoCov"> 0 : ~Exception() throw () {}</span> +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span><span class="lineNoCov"> 0 : virtual const char* type() const throw () { return "Apt"; }</span> +<span class="lineNum"> 46 </span><span class="lineNoCov"> 0 : virtual std::string desc() const throw () { return m_message; }</span> +<span class="lineNum"> 47 </span> : }; +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span> : class Apt; +<span class="lineNum"> 50 </span> : class AptImplementation; +<span class="lineNum"> 51 </span> : class RecordIteratorImpl; +<span class="lineNum"> 52 </span> : using core::PackageState; +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span> : /** +<span class="lineNum"> 55 </span> : * High-level access to the Apt cache, as a data provider for the ept +<span class="lineNum"> 56 </span> : * framework. +<span class="lineNum"> 57 </span> : * +<span class="lineNum"> 58 </span> : * This class wraps the Apt cache and allows to query it in various ways. +<span class="lineNum"> 59 </span> : */ +<span class="lineNum"> 60 </span> : class Apt +<span class="lineNum"> 61 </span> : { +<span class="lineNum"> 62 </span> : protected: +<span class="lineNum"> 63 </span> : AptImplementation* impl; +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span> : public: +<span class="lineNum"> 66 </span> : // Iterate Packages in the Apt cache +<span class="lineNum"> 67 </span> : class Iterator : public std::iterator<std::input_iterator_tag, std::string, void, void, void> +<span class="lineNum"> 68 </span> : { +<span class="lineNum"> 69 </span> : void* cur; +<span class="lineNum"> 70 </span> : +<span class="lineNum"> 71 </span> : protected: +<span class="lineNum"> 72 </span> : // Construct a valid iterator +<span class="lineNum"> 73 </span><span class="lineCov"> 4 : Iterator(void* cur) : cur(cur) {}</span> +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span> : // Construct and end iterator +<span class="lineNum"> 76 </span><span class="lineCov"> 3581 : Iterator() : cur(0) {}</span> +<span class="lineNum"> 77 </span> : +<span class="lineNum"> 78 </span> : public: +<span class="lineNum"> 79 </span> : // Copy constructor +<span class="lineNum"> 80 </span> : Iterator(const Iterator&); +<span class="lineNum"> 81 </span> : ~Iterator(); +<span class="lineNum"> 82 </span> : std::string operator*(); +<span class="lineNum"> 83 </span> : Iterator& operator++(); +<span class="lineNum"> 84 </span> : Iterator& operator=(const Iterator&); +<span class="lineNum"> 85 </span> : bool operator==(const Iterator&) const; +<span class="lineNum"> 86 </span> : bool operator!=(const Iterator&) const; +<span class="lineNum"> 87 </span> : +<span class="lineNum"> 88 </span> : // FIXME: Iterator operator++(int); cannot be easily implemented +<span class="lineNum"> 89 </span> : // because of how Apt's pkgIterator works +<span class="lineNum"> 90 </span> : +<span class="lineNum"> 91 </span> : friend class Apt; +<span class="lineNum"> 92 </span> : }; +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span> : // Iterate Package records in the Apt cache +<span class="lineNum"> 95 </span> : class RecordIterator : public std::iterator<std::input_iterator_tag, std::string, void, void, void> +<span class="lineNum"> 96 </span> : { +<span class="lineNum"> 97 </span> : RecordIteratorImpl* impl; +<span class="lineNum"> 98 </span> : size_t pos; +<span class="lineNum"> 99 </span> : std::string cur; +<span class="lineNum"> 100 </span> : size_t cur_pos; +<span class="lineNum"> 101 </span> : +<span class="lineNum"> 102 </span> : protected: +<span class="lineNum"> 103 </span> : // Construct a valid iterator +<span class="lineNum"> 104 </span> : RecordIterator(RecordIteratorImpl* cur, size_t pos = 0); +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span> : // Construct and end iterator +<span class="lineNum"> 107 </span><span class="lineCov"> 3481 : RecordIterator() : impl(0), pos(0), cur_pos(0) {}</span> +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span> : public: +<span class="lineNum"> 110 </span> : // Copy constructor +<span class="lineNum"> 111 </span> : RecordIterator(const RecordIterator& r); +<span class="lineNum"> 112 </span> : +<span class="lineNum"> 113 </span> : ~RecordIterator(); +<span class="lineNum"> 114 </span> : std::string operator*(); +<span class="lineNum"> 115 </span> : std::string* operator->(); +<span class="lineNum"> 116 </span> : RecordIterator& operator++(); +<span class="lineNum"> 117 </span> : RecordIterator& operator=(const RecordIterator& r); +<span class="lineNum"> 118 </span> : bool operator==(const RecordIterator&) const; +<span class="lineNum"> 119 </span> : bool operator!=(const RecordIterator&) const; +<span class="lineNum"> 120 </span> : +<span class="lineNum"> 121 </span> : // FIXME: Iterator operator++(int); cannot be easily implemented +<span class="lineNum"> 122 </span> : // because of how Apt's pkgIterator works +<span class="lineNum"> 123 </span> : +<span class="lineNum"> 124 </span> : friend class Apt; +<span class="lineNum"> 125 </span> : }; +<span class="lineNum"> 126 </span> : +<span class="lineNum"> 127 </span> : typedef Iterator iterator; +<span class="lineNum"> 128 </span> : typedef RecordIterator record_iterator; +<span class="lineNum"> 129 </span> : +<span class="lineNum"> 130 </span> : /** +<span class="lineNum"> 131 </span> : * Create the Apt data provider +<span class="lineNum"> 132 </span> : */ +<span class="lineNum"> 133 </span> : Apt(); +<span class="lineNum"> 134 </span> : ~Apt(); +<span class="lineNum"> 135 </span> : +<span class="lineNum"> 136 </span> : iterator begin() const; +<span class="lineNum"> 137 </span> : iterator end() const; +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span> : record_iterator recordBegin() const; +<span class="lineNum"> 140 </span> : record_iterator recordEnd() const; +<span class="lineNum"> 141 </span> : +<span class="lineNum"> 142 </span> : +<span class="lineNum"> 143 </span> : /// Return the number of packages in the archive +<span class="lineNum"> 144 </span> : size_t size() const; +<span class="lineNum"> 145 </span> : +<span class="lineNum"> 146 </span> : /** +<span class="lineNum"> 147 </span> : * Validate a package name, returning trye if it exists in the APT database, +<span class="lineNum"> 148 </span> : * or false if it does not. +<span class="lineNum"> 149 </span> : */ +<span class="lineNum"> 150 </span> : bool isValid(const std::string& pkg) const; +<span class="lineNum"> 151 </span> : +<span class="lineNum"> 152 </span> : /// Validate a package name, returning it if it exists in the APT database, +<span class="lineNum"> 153 </span> : /// or returning the empty string if it does not. +<span class="lineNum"> 154 </span> : std::string validate(const std::string& pkg) const +<span class="lineNum"> 155 </span> : { +<span class="lineNum"> 156 </span> : if (isValid(pkg)) +<span class="lineNum"> 157 </span> : return pkg; +<span class="lineNum"> 158 </span> : return std::string(); +<span class="lineNum"> 159 </span> : } +<span class="lineNum"> 160 </span> : +<span class="lineNum"> 161 </span> : /// Validate a Version, returning it if it exists in the APT database, or +<span class="lineNum"> 162 </span> : /// returning the invalid version if it does not. +<span class="lineNum"> 163 </span> : Version validate(const Version& ver) const; +<span class="lineNum"> 164 </span> : +<span class="lineNum"> 165 </span> : /// Return the installed version for a package +<span class="lineNum"> 166 </span> : Version installedVersion(const std::string& pkg) const; +<span class="lineNum"> 167 </span> : +<span class="lineNum"> 168 </span> : /// Return the candidate version for a package +<span class="lineNum"> 169 </span> : Version candidateVersion(const std::string& pkg) const; +<span class="lineNum"> 170 </span> : +<span class="lineNum"> 171 </span> : /** +<span class="lineNum"> 172 </span> : * Return the candidate version for a package, if available, or the +<span class="lineNum"> 173 </span> : * installed version otherwise +<span class="lineNum"> 174 </span> : */ +<span class="lineNum"> 175 </span> : Version anyVersion(const std::string& pkg) const; +<span class="lineNum"> 176 </span> : +<span class="lineNum"> 177 </span> : /// Return state information on a package +<span class="lineNum"> 178 </span> : PackageState state(const std::string& pkg) const; +<span class="lineNum"> 179 </span> : +<span class="lineNum"> 180 </span> : /** +<span class="lineNum"> 181 </span> : * Perform a package search. +<span class="lineNum"> 182 </span> : * +<span class="lineNum"> 183 </span> : * All packages for which the functor filter returns true, are passed to +<span class="lineNum"> 184 </span> : * the functor out. +<span class="lineNum"> 185 </span> : */ +<span class="lineNum"> 186 </span> : //template<typename FILTER, typename OUT> +<span class="lineNum"> 187 </span> : //void search(const FILTER& filter, OUT& out); +<span class="lineNum"> 188 </span> : +<span class="lineNum"> 189 </span> : /// Get the raw package record for the given Version +<span class="lineNum"> 190 </span> : std::string rawRecord(const std::string& pkg) const; +<span class="lineNum"> 191 </span> : +<span class="lineNum"> 192 </span> : /// Get the raw package record for the given Version +<span class="lineNum"> 193 </span> : std::string rawRecord(const Version& ver) const; +<span class="lineNum"> 194 </span> : +<span class="lineNum"> 195 </span> : /// Timestamp of when the apt index was last modified +<span class="lineNum"> 196 </span> : time_t timestamp(); +<span class="lineNum"> 197 </span> : +<span class="lineNum"> 198 </span> : /** +<span class="lineNum"> 199 </span> : * Check if the cache has been changed by another process, and reopen it if +<span class="lineNum"> 200 </span> : * that is the case. +<span class="lineNum"> 201 </span> : * +<span class="lineNum"> 202 </span> : * Note that this method can invalidate all existing iterators. +<span class="lineNum"> 203 </span> : */ +<span class="lineNum"> 204 </span> : void checkCacheUpdates(); +<span class="lineNum"> 205 </span> : +<span class="lineNum"> 206 </span> : /** +<span class="lineNum"> 207 </span> : * Invalidate the cache timestamp used to track cache updates. +<span class="lineNum"> 208 </span> : * +<span class="lineNum"> 209 </span> : * @warning Do not use this method: it is here only to support the test +<span class="lineNum"> 210 </span> : * cases, and may disappear in any future version. +<span class="lineNum"> 211 </span> : */ +<span class="lineNum"> 212 </span> : void invalidateTimestamp(); +<span class="lineNum"> 213 </span> : }; +<span class="lineNum"> 214 </span> : +<span class="lineNum"> 215 </span> : } +<span class="lineNum"> 216 </span> : } +<span class="lineNum"> 217 </span> : +<span class="lineNum"> 218 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 219 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/apt.test.h.gcov.html b/rep/ept/apt/apt.test.h.gcov.html new file mode 100644 index 0000000..cd79123 --- /dev/null +++ b/rep/ept/apt/apt.test.h.gcov.html @@ -0,0 +1,259 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/apt.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - apt.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">99</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">99</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 5 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 6 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 7 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 10 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 11 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 12 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 15 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 16 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 17 </span> : */ +<span class="lineNum"> 18 </span> : +<span class="lineNum"> 19 </span> : #include <ept/test.h> +<span class="lineNum"> 20 </span> : #include <ept/apt/apt.h> +<span class="lineNum"> 21 </span> : #include <set> +<span class="lineNum"> 22 </span> : #include <algorithm> +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span> : using namespace std; +<span class="lineNum"> 25 </span> : using namespace ept; +<span class="lineNum"> 26 </span> : using namespace ept::apt; +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span><span class="lineCov"> 26 : struct TestApt : AptTestEnvironment {</span> +<span class="lineNum"> 29 </span> : Apt apt; +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : // Check that iterations iterates among some packages +<span class="lineNum"> 32 </span><span class="lineCov"> 1 : Test iterators()</span> +<span class="lineNum"> 33 </span> : { +<span class="lineNum"> 34 </span><span class="lineCov"> 1 : Apt::iterator i = apt.begin();</span> +<span class="lineNum"> 35 </span><span class="lineCov"> 1 : assert(i != apt.end());</span> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span><span class="lineCov"> 1 : size_t count = 0;</span> +<span class="lineNum"> 38 </span><span class="lineCov"> 1789 : for (; i != apt.end(); ++i)</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 1788 : ++count;</span> +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span><span class="lineCov"> 1 : assert(count > 100);</span> +<span class="lineNum"> 42 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span> : // Check that iteration gives some well-known packages +<span class="lineNum"> 45 </span><span class="lineCov"> 1 : Test aptExists()</span> +<span class="lineNum"> 46 </span> : { +<span class="lineNum"> 47 </span><span class="lineCov"> 1 : set<string> packages;</span> +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span><span class="lineCov"> 1 : std::copy(apt.begin(), apt.end(), inserter(packages, packages.begin()));</span> +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineCov"> 1 : assert(packages.find("libsp1") != packages.end());</span> +<span class="lineNum"> 52 </span> : // TODO this exposes a bug somewhere... sp definitely is among +<span class="lineNum"> 53 </span> : // the packages +<span class="lineNum"> 54 </span> : // assert(packages.find("sp") != packages.end()); +<span class="lineNum"> 55 </span><span class="lineCov"> 2 : assert(packages.find("") == packages.end());</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span> : // Check that timestamp gives some meaningful timestamp +<span class="lineNum"> 59 </span><span class="lineCov"> 1 : Test timestamp()</span> +<span class="lineNum"> 60 </span> : { +<span class="lineNum"> 61 </span><span class="lineCov"> 1 : time_t ts = apt.timestamp();</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 1 : assert(ts > 1000000);</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span> : // Check the package validator +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : Test validity()</span> +<span class="lineNum"> 67 </span> : { +<span class="lineNum"> 68 </span><span class="lineCov"> 1 : assert(apt.isValid("apt"));</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 2 : assert(!apt.isValid("this-package-does-not-really-exists"));</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span> : // Check the version instantiators +<span class="lineNum"> 73 </span><span class="lineCov"> 1 : Test versions()</span> +<span class="lineNum"> 74 </span> : { +<span class="lineNum"> 75 </span><span class="lineCov"> 1 : std::string pkg("apt");</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 1 : Version ver = apt.candidateVersion(pkg);</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 1 : assert(ver.isValid());</span> +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span><span class="lineCov"> 2 : ver = apt.installedVersion(pkg);</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 1 : assert(ver.isValid());</span> +<span class="lineNum"> 81 </span> : +<span class="lineNum"> 82 </span><span class="lineCov"> 2 : ver = apt.anyVersion(pkg);</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 1 : assert(ver.isValid());</span> +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span><span class="lineCov"> 2 : std::string pkg1("this-package-does-not-really-exists");</span> +<span class="lineNum"> 86 </span><span class="lineCov"> 2 : ver = apt.candidateVersion(pkg1);</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 1 : assert(!ver.isValid());</span> +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span><span class="lineCov"> 2 : ver = apt.installedVersion(pkg1);</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 1 : assert(!ver.isValid());</span> +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span><span class="lineCov"> 2 : ver = apt.anyVersion(pkg1);</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 1 : assert(!ver.isValid());</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 95 </span> : +<span class="lineNum"> 96 </span> : // Check the version validator +<span class="lineNum"> 97 </span><span class="lineCov"> 1 : Test versionValidity()</span> +<span class="lineNum"> 98 </span> : { +<span class="lineNum"> 99 </span><span class="lineCov"> 1 : Version ver = apt.candidateVersion("apt");</span> +<span class="lineNum"> 100 </span><span class="lineCov"> 2 : assert(apt.validate(ver) == ver);</span> +<span class="lineNum"> 101 </span> : +<span class="lineNum"> 102 </span><span class="lineCov"> 1 : ver = Version("this-package-does-not-really-exists", "0.1");</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 2 : assert(!apt.validate(ver).isValid());</span> +<span class="lineNum"> 104 </span> : +<span class="lineNum"> 105 </span><span class="lineCov"> 1 : ver = Version("apt", "0.31415");</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 2 : assert(!apt.validate(ver).isValid());</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span> : // Check the raw record accessor +<span class="lineNum"> 110 </span><span class="lineCov"> 1 : Test rawRecord()</span> +<span class="lineNum"> 111 </span> : { +<span class="lineNum"> 112 </span><span class="lineCov"> 1 : string pkg("sp");</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 1 : Version ver = apt.candidateVersion(pkg);</span> +<span class="lineNum"> 114 </span><span class="lineCov"> 1 : assert(apt.validate(ver) == ver);</span> +<span class="lineNum"> 115 </span> : +<span class="lineNum"> 116 </span><span class="lineCov"> 1 : string record = apt.rawRecord(ver);</span> +<span class="lineNum"> 117 </span><span class="lineCov"> 1 : assert(record.find("Package: sp") != string::npos);</span> +<span class="lineNum"> 118 </span><span class="lineCov"> 2 : assert(record.find("Section: text") != string::npos);</span> +<span class="lineNum"> 119 </span> : +<span class="lineNum"> 120 </span><span class="lineCov"> 2 : record = apt.rawRecord(Version("sp", "0.31415"));</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 2 : assert_eq(record, string());</span> +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span><span class="lineCov"> 1 : assert_eq(apt.rawRecord(pkg), apt.rawRecord(apt.anyVersion(pkg)));</span> +<span class="lineNum"> 124 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 125 </span> : +<span class="lineNum"> 126 </span> : // Check the package state accessor +<span class="lineNum"> 127 </span><span class="lineCov"> 1 : Test state()</span> +<span class="lineNum"> 128 </span> : { +<span class="lineNum"> 129 </span><span class="lineCov"> 1 : PackageState s = apt.state("kdenetwork");</span> +<span class="lineNum"> 130 </span><span class="lineCov"> 2 : assert(s.isValid());</span> +<span class="lineNum"> 131 </span><span class="lineCov"> 2 : assert(s.isInstalled());</span> +<span class="lineNum"> 132 </span> : +<span class="lineNum"> 133 </span><span class="lineCov"> 2 : s = apt.state("this-package-does-not-really-exists");</span> +<span class="lineNum"> 134 </span><span class="lineCov"> 2 : assert(!s.isValid());</span> +<span class="lineNum"> 135 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 136 </span> : +<span class="lineNum"> 137 </span> : // Check the record iterator (accessing with *) +<span class="lineNum"> 138 </span><span class="lineCov"> 1 : Test recordIteration()</span> +<span class="lineNum"> 139 </span> : { +<span class="lineNum"> 140 </span><span class="lineCov"> 1 : size_t count = 0;</span> +<span class="lineNum"> 141 </span><span class="lineCov"> 435 : for (Apt::record_iterator i = apt.recordBegin();</span> +<span class="lineNum"> 142 </span> : i != apt.recordEnd(); ++i) +<span class="lineNum"> 143 </span> : { +<span class="lineNum"> 144 </span><span class="lineCov"> 434 : assert((*i).size() > 8);</span> +<span class="lineNum"> 145 </span><span class="lineCov"> 434 : assert_eq((*i).substr(0, 8), "Package:");</span> +<span class="lineNum"> 146 </span><span class="lineCov"> 434 : ++count;</span> +<span class="lineNum"> 147 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 148 </span><span class="lineCov"> 2 : assert(count > 200);</span> +<span class="lineNum"> 149 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 150 </span> : +<span class="lineNum"> 151 </span> : // Check the record iterator (accessing with ->) +<span class="lineNum"> 152 </span><span class="lineCov"> 1 : Test recordIteration2()</span> +<span class="lineNum"> 153 </span> : { +<span class="lineNum"> 154 </span><span class="lineCov"> 1 : size_t count = 0;</span> +<span class="lineNum"> 155 </span><span class="lineCov"> 435 : for (Apt::record_iterator i = apt.recordBegin();</span> +<span class="lineNum"> 156 </span> : i != apt.recordEnd(); ++i) +<span class="lineNum"> 157 </span> : { +<span class="lineNum"> 158 </span><span class="lineCov"> 434 : assert(i->size() > 8);</span> +<span class="lineNum"> 159 </span><span class="lineCov"> 868 : assert_eq(i->substr(0, 8), "Package:");</span> +<span class="lineNum"> 160 </span><span class="lineCov"> 434 : ++count;</span> +<span class="lineNum"> 161 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 162 </span><span class="lineCov"> 2 : assert(count > 200);</span> +<span class="lineNum"> 163 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 164 </span> : +<span class="lineNum"> 165 </span> : // Check that the iterators can be used with the algorithms +<span class="lineNum"> 166 </span><span class="lineCov"> 1 : Test stlIteration()</span> +<span class="lineNum"> 167 </span> : { +<span class="lineNum"> 168 </span><span class="lineCov"> 1 : vector<string> out;</span> +<span class="lineNum"> 169 </span><span class="lineCov"> 1 : std::copy(apt.begin(), apt.end(), back_inserter(out));</span> +<span class="lineNum"> 170 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 171 </span> : +<span class="lineNum"> 172 </span> : // Check that the iterators can be used with the algorithms +<span class="lineNum"> 173 </span><span class="lineCov"> 1 : Test stlRecordIteration()</span> +<span class="lineNum"> 174 </span> : { +<span class="lineNum"> 175 </span><span class="lineCov"> 1 : vector<string> out;</span> +<span class="lineNum"> 176 </span><span class="lineCov"> 1 : std::copy(apt.recordBegin(), apt.recordEnd(), back_inserter(out));</span> +<span class="lineNum"> 177 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 178 </span> : +<span class="lineNum"> 179 </span> : // Check that checkUpdates will keep a working Apt object +<span class="lineNum"> 180 </span><span class="lineCov"> 1 : Test checkUpdates()</span> +<span class="lineNum"> 181 </span> : { +<span class="lineNum"> 182 </span><span class="lineCov"> 1 : assert(apt.isValid("apt"));</span> +<span class="lineNum"> 183 </span><span class="lineCov"> 1 : apt.checkCacheUpdates();</span> +<span class="lineNum"> 184 </span><span class="lineCov"> 2 : assert(apt.isValid("apt"));</span> +<span class="lineNum"> 185 </span><span class="lineCov"> 1 : apt.invalidateTimestamp(); </span> +<span class="lineNum"> 186 </span><span class="lineCov"> 1 : apt.checkCacheUpdates();</span> +<span class="lineNum"> 187 </span><span class="lineCov"> 2 : assert(apt.isValid("apt"));</span> +<span class="lineNum"> 188 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 189 </span> : +<span class="lineNum"> 190 </span> : }; +<span class="lineNum"> 191 </span> : +<span class="lineNum"> 192 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/index.html b/rep/ept/apt/index.html new file mode 100644 index 0000000..9a94d3e --- /dev/null +++ b/rep/ept/apt/index.html @@ -0,0 +1,182 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - ept/apt</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">880</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">89.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">785</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="apt.cc.gcov.html">apt.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=77 height=10 alt="76.8%"><img src="../../snow.png" width=23 height=10 alt="76.8%"></td></tr></table> + </td> + <td class="coverPerHi">76.8 %</td> + <td class="coverNumHi">248 / 323 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="apt.h.gcov.html">apt.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=50 height=10 alt="50.0%"><img src="../../snow.png" width=50 height=10 alt="50.0%"></td></tr></table> + </td> + <td class="coverPerHi">50.0 %</td> + <td class="coverNumHi">3 / 6 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="apt.test.h.gcov.html">apt.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">99 / 99 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="packagerecord.cc.gcov.html">packagerecord.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=91 height=10 alt="90.9%"><img src="../../snow.png" width=9 height=10 alt="90.9%"></td></tr></table> + </td> + <td class="coverPerHi">90.9 %</td> + <td class="coverNumHi">40 / 44 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="packagerecord.h.gcov.html">packagerecord.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=95 height=10 alt="95.4%"><img src="../../snow.png" width=5 height=10 alt="95.4%"></td></tr></table> + </td> + <td class="coverPerHi">95.4 %</td> + <td class="coverNumHi">62 / 65 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="packagerecord.test.h.gcov.html">packagerecord.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=88 height=10 alt="88.5%"><img src="../../snow.png" width=12 height=10 alt="88.5%"></td></tr></table> + </td> + <td class="coverPerHi">88.5 %</td> + <td class="coverNumHi">46 / 52 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="recordparser.cc.gcov.html">recordparser.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">62 / 62 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="recordparser.h.gcov.html">recordparser.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">8 / 8 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="recordparser.test.h.gcov.html">recordparser.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">107 / 107 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="version.cc.gcov.html">version.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=88 height=10 alt="88.2%"><img src="../../snow.png" width=12 height=10 alt="88.2%"></td></tr></table> + </td> + <td class="coverPerHi">88.2 %</td> + <td class="coverNumHi">30 / 34 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="version.h.gcov.html">version.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">9 / 9 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="version.test.h.gcov.html">version.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">71 / 71 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/packagerecord.cc.gcov.html b/rep/ept/apt/packagerecord.cc.gcov.html new file mode 100644 index 0000000..bf04344 --- /dev/null +++ b/rep/ept/apt/packagerecord.cc.gcov.html @@ -0,0 +1,185 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/packagerecord.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - packagerecord.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">44</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">90.9 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">40</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** \file +<span class="lineNum"> 2 </span> : * Parser for APT records, with specialised accessors for package records +<span class="lineNum"> 3 </span> : */ +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /* +<span class="lineNum"> 6 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 7 </span> : * +<span class="lineNum"> 8 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 9 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 10 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 11 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 12 </span> : * +<span class="lineNum"> 13 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 14 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 15 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 16 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 17 </span> : * +<span class="lineNum"> 18 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 19 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 20 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 21 </span> : */ +<span class="lineNum"> 22 </span> : +<span class="lineNum"> 23 </span> : #include <ept/apt/packagerecord.h> +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <cctype> +<span class="lineNum"> 26 </span> : #include <cstdlib> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : //#include <iostream> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : using namespace std; +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : namespace ept { +<span class="lineNum"> 33 </span> : namespace apt { +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span><span class="lineCov"> 5210 : size_t PackageRecord::parseSize(size_t def, const std::string& str) const</span> +<span class="lineNum"> 36 </span> : { +<span class="lineNum"> 37 </span><span class="lineCov"> 5210 : if (str == string())</span> +<span class="lineNum"> 38 </span><span class="lineCov"> 54 : return def;</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 5156 : return (size_t)strtoul(str.c_str(), NULL, 10);</span> +<span class="lineNum"> 40 </span> : } +<span class="lineNum"> 41 </span> : +<span class="lineNum"> 42 </span><span class="lineCov"> 1 : std::string PackageRecord::parseShortDescription(const std::string& def, const std::string& str) const</span> +<span class="lineNum"> 43 </span> : { +<span class="lineNum"> 44 </span><span class="lineCov"> 1 : if (str == std::string())</span> +<span class="lineNum"> 45 </span><span class="lineNoCov"> 0 : return def;</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 1 : size_t pos = str.find("\n");</span> +<span class="lineNum"> 47 </span><span class="lineCov"> 1 : if (pos == std::string::npos)</span> +<span class="lineNum"> 48 </span><span class="lineNoCov"> 0 : return str;</span> +<span class="lineNum"> 49 </span> : else +<span class="lineNum"> 50 </span><span class="lineCov"> 1 : return str.substr(0, pos);</span> +<span class="lineNum"> 51 </span> : } +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span><span class="lineCov"> 1 : std::string PackageRecord::parseLongDescription(const std::string& def, const std::string& str) const</span> +<span class="lineNum"> 54 </span> : { +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : if (str == std::string())</span> +<span class="lineNum"> 56 </span><span class="lineNoCov"> 0 : return def;</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 1 : size_t pos = str.find("\n");</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 1 : if (pos == std::string::npos)</span> +<span class="lineNum"> 59 </span><span class="lineNoCov"> 0 : return str;</span> +<span class="lineNum"> 60 </span> : else +<span class="lineNum"> 61 </span> : { +<span class="lineNum"> 62 </span> : // Trim trailing spaces +<span class="lineNum"> 63 </span><span class="lineCov"> 1 : for (++pos; pos < str.size() && isspace(str[pos]); ++pos)</span> +<span class="lineNum"> 64 </span> : ; +<span class="lineNum"> 65 </span><span class="lineCov"> 1 : return str.substr(pos);</span> +<span class="lineNum"> 66 </span> : } +<span class="lineNum"> 67 </span> : } +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span><span class="lineCov"> 2605 : std::set<std::string> PackageRecord::parseTags(const std::set<std::string>& def, const std::string& str) const</span> +<span class="lineNum"> 70 </span> : { +<span class="lineNum"> 71 </span><span class="lineCov"> 2605 : if (str == string())</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 2604 : return def;</span> +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span><span class="lineCov"> 1 : set<string> res;</span> +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span><span class="lineCov"> 1 : size_t pos = 0;</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 13 : while (pos < str.size())</span> +<span class="lineNum"> 78 </span> : { +<span class="lineNum"> 79 </span><span class="lineCov"> 12 : string tag;</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 12 : size_t i = str.find(", ", pos);</span> +<span class="lineNum"> 81 </span><span class="lineCov"> 12 : if (i == string::npos)</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 1 : tag = str.substr(pos);</span> +<span class="lineNum"> 83 </span> : else +<span class="lineNum"> 84 </span><span class="lineCov"> 11 : tag = str.substr(pos, i-pos);</span> +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span> : // Check if we need curly brace expansion +<span class="lineNum"> 87 </span><span class="lineCov"> 12 : if (tag[tag.size() - 1] == '}')</span> +<span class="lineNum"> 88 </span> : { +<span class="lineNum"> 89 </span><span class="lineCov"> 1 : size_t begin = tag.find('{');</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 1 : if (begin != string::npos)</span> +<span class="lineNum"> 91 </span> : { +<span class="lineNum"> 92 </span><span class="lineCov"> 1 : string prefix(tag, 0, begin);</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 1 : ++begin;</span> +<span class="lineNum"> 94 </span> : size_t end; +<span class="lineNum"> 95 </span><span class="lineCov"> 4 : while ((end = tag.find(',', begin)) != string::npos)</span> +<span class="lineNum"> 96 </span> : { +<span class="lineNum"> 97 </span><span class="lineCov"> 2 : res.insert(prefix + tag.substr(begin, end-begin));</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 2 : begin = end + 1;</span> +<span class="lineNum"> 99 </span> : } +<span class="lineNum"> 100 </span><span class="lineCov"> 1 : res.insert(prefix + tag.substr(begin, tag.size() - 1 - begin));</span> +<span class="lineNum"> 101 </span> : } +<span class="lineNum"> 102 </span> : } else { +<span class="lineNum"> 103 </span><span class="lineCov"> 11 : res.insert(tag);</span> +<span class="lineNum"> 104 </span> : } +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span><span class="lineCov"> 12 : if (i == string::npos)</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 1 : break;</span> +<span class="lineNum"> 108 </span> : else +<span class="lineNum"> 109 </span><span class="lineCov"> 11 : pos = i + 2;</span> +<span class="lineNum"> 110 </span> : } +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span><span class="lineCov"> 1 : return res;</span> +<span class="lineNum"> 113 </span> : } +<span class="lineNum"> 114 </span> : +<span class="lineNum"> 115 </span> : } +<span class="lineNum"> 116 </span> : } +<span class="lineNum"> 117 </span> : +<span class="lineNum"> 118 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/packagerecord.h.gcov.html b/rep/ept/apt/packagerecord.h.gcov.html new file mode 100644 index 0000000..afd295c --- /dev/null +++ b/rep/ept/apt/packagerecord.h.gcov.html @@ -0,0 +1,243 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/packagerecord.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - packagerecord.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">65</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">95.4 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">62</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_APT_PACKAGERECORD_H +<span class="lineNum"> 2 </span> : #define EPT_APT_PACKAGERECORD_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** \file +<span class="lineNum"> 5 </span> : * Parser for APT records, with specialised accessors for package records +<span class="lineNum"> 6 </span> : */ +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : /* +<span class="lineNum"> 9 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 12 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 13 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 14 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 17 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 18 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 19 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 20 </span> : * +<span class="lineNum"> 21 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 22 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 23 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 24 </span> : */ +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include <ept/apt/recordparser.h> +<span class="lineNum"> 27 </span> : #include <set> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : namespace ept { +<span class="lineNum"> 30 </span> : namespace apt { +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : /** +<span class="lineNum"> 33 </span> : * RecordParser specialised with access methods for common Debian package +<span class="lineNum"> 34 </span> : * information. +<span class="lineNum"> 35 </span> : */ +<span class="lineNum"> 36 </span> : class PackageRecord : public RecordParser +<span class="lineNum"> 37 </span><span class="lineCov"> 7 : {</span> +<span class="lineNum"> 38 </span><span class="lineCov"> 1 : bool parseBool(bool& def, const std::string& str) const</span> +<span class="lineNum"> 39 </span> : { +<span class="lineNum"> 40 </span> : // Believe it or not, this is what apt does to interpret bool fields +<span class="lineNum"> 41 </span><span class="lineCov"> 1 : if (str == "no" || str == "false" || str == "without" ||</span> +<span class="lineNum"> 42 </span> : str == "off" || str == "disable") +<span class="lineNum"> 43 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span><span class="lineCov"> 1 : if (str == "yes" || str == "true" || str == "with" ||</span> +<span class="lineNum"> 46 </span> : str == "on" || str == "enable") +<span class="lineNum"> 47 </span><span class="lineCov"> 1 : return true;</span> +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span><span class="lineNoCov"> 0 : return def;</span> +<span class="lineNum"> 50 </span> : } +<span class="lineNum"> 51 </span><span class="lineCov"> 10436 : std::string parseString(const std::string& def, const std::string& str) const</span> +<span class="lineNum"> 52 </span> : { +<span class="lineNum"> 53 </span><span class="lineCov"> 10436 : if (str == std::string())</span> +<span class="lineNum"> 54 </span><span class="lineNoCov"> 0 : return def;</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 10436 : return str;</span> +<span class="lineNum"> 56 </span> : } +<span class="lineNum"> 57 </span> : std::string parseShortDescription(const std::string& def, const std::string& str) const; +<span class="lineNum"> 58 </span> : std::string parseLongDescription(const std::string& def, const std::string& str) const; +<span class="lineNum"> 59 </span> : size_t parseSize(size_t def, const std::string& str) const; +<span class="lineNum"> 60 </span> : std::set<std::string> parseTags(const std::set<std::string>& def, const std::string& str) const; +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span> : public: +<span class="lineNum"> 63 </span><span class="lineCov"> 6 : PackageRecord() : RecordParser() {}</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 1 : PackageRecord(const std::string& str) : RecordParser(str) {}</span> +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span><span class="lineCov"> 7813 : std::string package(const std::string& def = std::string()) const</span> +<span class="lineNum"> 67 </span> : { +<span class="lineNum"> 68 </span><span class="lineCov"> 7813 : return parseString(def, lookup("Package"));</span> +<span class="lineNum"> 69 </span> : } +<span class="lineNum"> 70 </span><span class="lineCov"> 1 : std::string priority(const std::string& def = std::string()) const</span> +<span class="lineNum"> 71 </span> : { +<span class="lineNum"> 72 </span><span class="lineCov"> 1 : return parseString(def, lookup("Priority"));</span> +<span class="lineNum"> 73 </span> : } +<span class="lineNum"> 74 </span><span class="lineCov"> 1 : std::string section(const std::string& def = std::string()) const</span> +<span class="lineNum"> 75 </span> : { +<span class="lineNum"> 76 </span><span class="lineCov"> 1 : return parseString(def, lookup("Section"));</span> +<span class="lineNum"> 77 </span> : } +<span class="lineNum"> 78 </span><span class="lineCov"> 2605 : size_t installedSize(size_t def = 0) const</span> +<span class="lineNum"> 79 </span> : { +<span class="lineNum"> 80 </span><span class="lineCov"> 2605 : return parseSize(def, lookup("Installed-Size"));</span> +<span class="lineNum"> 81 </span> : } +<span class="lineNum"> 82 </span><span class="lineCov"> 1 : std::string maintainer(const std::string& def = std::string()) const</span> +<span class="lineNum"> 83 </span> : { +<span class="lineNum"> 84 </span><span class="lineCov"> 1 : return parseString(def, lookup("Maintainer"));</span> +<span class="lineNum"> 85 </span> : } +<span class="lineNum"> 86 </span><span class="lineCov"> 1 : std::string architecture(const std::string& def = std::string()) const</span> +<span class="lineNum"> 87 </span> : { +<span class="lineNum"> 88 </span><span class="lineCov"> 1 : return parseString(def, lookup("Architecture"));</span> +<span class="lineNum"> 89 </span> : } +<span class="lineNum"> 90 </span><span class="lineCov"> 1 : std::string source(const std::string& def = std::string()) const</span> +<span class="lineNum"> 91 </span> : { +<span class="lineNum"> 92 </span><span class="lineCov"> 1 : return parseString(def, lookup("Source"));</span> +<span class="lineNum"> 93 </span> : } +<span class="lineNum"> 94 </span><span class="lineCov"> 1 : std::string version(const std::string& def = std::string()) const</span> +<span class="lineNum"> 95 </span> : { +<span class="lineNum"> 96 </span><span class="lineCov"> 1 : return parseString(def, lookup("Version"));</span> +<span class="lineNum"> 97 </span> : } +<span class="lineNum"> 98 </span><span class="lineCov"> 1 : std::string replaces(const std::string& def = std::string()) const</span> +<span class="lineNum"> 99 </span> : { +<span class="lineNum"> 100 </span><span class="lineCov"> 1 : return parseString(def, lookup("Replaces"));</span> +<span class="lineNum"> 101 </span> : } +<span class="lineNum"> 102 </span><span class="lineCov"> 1 : std::string depends(const std::string& def = std::string()) const</span> +<span class="lineNum"> 103 </span> : { +<span class="lineNum"> 104 </span><span class="lineCov"> 1 : return parseString(def, lookup("Depends"));</span> +<span class="lineNum"> 105 </span> : } +<span class="lineNum"> 106 </span><span class="lineCov"> 1 : std::string preDepends(const std::string& def = std::string()) const</span> +<span class="lineNum"> 107 </span> : { +<span class="lineNum"> 108 </span><span class="lineCov"> 1 : return parseString(def, lookup("Pre-Depends"));</span> +<span class="lineNum"> 109 </span> : } +<span class="lineNum"> 110 </span><span class="lineCov"> 1 : std::string recommends(const std::string& def = std::string()) const</span> +<span class="lineNum"> 111 </span> : { +<span class="lineNum"> 112 </span><span class="lineCov"> 1 : return parseString(def, lookup("Recommends"));</span> +<span class="lineNum"> 113 </span> : } +<span class="lineNum"> 114 </span><span class="lineCov"> 1 : std::string suggests(const std::string& def = std::string()) const</span> +<span class="lineNum"> 115 </span> : { +<span class="lineNum"> 116 </span><span class="lineCov"> 1 : return parseString(def, lookup("Suggests"));</span> +<span class="lineNum"> 117 </span> : } +<span class="lineNum"> 118 </span><span class="lineCov"> 1 : std::string enhances(const std::string& def = std::string()) const</span> +<span class="lineNum"> 119 </span> : { +<span class="lineNum"> 120 </span><span class="lineCov"> 1 : return parseString(def, lookup("Enhances"));</span> +<span class="lineNum"> 121 </span> : } +<span class="lineNum"> 122 </span><span class="lineCov"> 1 : std::string provides(const std::string& def = std::string()) const</span> +<span class="lineNum"> 123 </span> : { +<span class="lineNum"> 124 </span><span class="lineCov"> 1 : return parseString(def, lookup("Provides"));</span> +<span class="lineNum"> 125 </span> : } +<span class="lineNum"> 126 </span><span class="lineCov"> 1 : std::string conflicts(const std::string& def = std::string()) const</span> +<span class="lineNum"> 127 </span> : { +<span class="lineNum"> 128 </span><span class="lineCov"> 1 : return parseString(def, lookup("Conflicts"));</span> +<span class="lineNum"> 129 </span> : } +<span class="lineNum"> 130 </span><span class="lineCov"> 1 : std::string filename(const std::string& def = std::string()) const</span> +<span class="lineNum"> 131 </span> : { +<span class="lineNum"> 132 </span><span class="lineCov"> 1 : return parseString(def, lookup("Filename"));</span> +<span class="lineNum"> 133 </span> : } +<span class="lineNum"> 134 </span><span class="lineCov"> 2605 : size_t packageSize(size_t def = 0) const</span> +<span class="lineNum"> 135 </span> : { +<span class="lineNum"> 136 </span><span class="lineCov"> 2605 : return parseSize(def, lookup("Size"));</span> +<span class="lineNum"> 137 </span> : } +<span class="lineNum"> 138 </span><span class="lineCov"> 1 : std::string md5sum(const std::string& def = std::string()) const</span> +<span class="lineNum"> 139 </span> : { +<span class="lineNum"> 140 </span><span class="lineCov"> 1 : return parseString(def, lookup("MD5sum"));</span> +<span class="lineNum"> 141 </span> : } +<span class="lineNum"> 142 </span><span class="lineCov"> 1 : std::string sha1(const std::string& def = std::string()) const</span> +<span class="lineNum"> 143 </span> : { +<span class="lineNum"> 144 </span><span class="lineCov"> 1 : return parseString(def, lookup("SHA1"));</span> +<span class="lineNum"> 145 </span> : } +<span class="lineNum"> 146 </span><span class="lineCov"> 1 : std::string sha256(const std::string& def = std::string()) const</span> +<span class="lineNum"> 147 </span> : { +<span class="lineNum"> 148 </span><span class="lineCov"> 1 : return parseString(def, lookup("SHA256"));</span> +<span class="lineNum"> 149 </span> : } +<span class="lineNum"> 150 </span><span class="lineCov"> 2605 : std::string description(const std::string& def = std::string()) const</span> +<span class="lineNum"> 151 </span> : { +<span class="lineNum"> 152 </span><span class="lineCov"> 2605 : return parseString(def, lookup("Description"));</span> +<span class="lineNum"> 153 </span> : } +<span class="lineNum"> 154 </span><span class="lineCov"> 1 : std::string shortDescription(const std::string& def = std::string()) const</span> +<span class="lineNum"> 155 </span> : { +<span class="lineNum"> 156 </span><span class="lineCov"> 1 : return parseShortDescription(def, lookup("Description"));</span> +<span class="lineNum"> 157 </span> : } +<span class="lineNum"> 158 </span><span class="lineCov"> 1 : std::string longDescription(const std::string& def = std::string()) const</span> +<span class="lineNum"> 159 </span> : { +<span class="lineNum"> 160 </span><span class="lineCov"> 1 : return parseLongDescription(def, lookup("Description"));</span> +<span class="lineNum"> 161 </span> : } +<span class="lineNum"> 162 </span><span class="lineCov"> 1 : bool buildEssential(bool def = false) const</span> +<span class="lineNum"> 163 </span> : { +<span class="lineNum"> 164 </span><span class="lineCov"> 1 : return parseBool(def, lookup("Build-Essential"));</span> +<span class="lineNum"> 165 </span> : } +<span class="lineNum"> 166 </span><span class="lineCov"> 2605 : std::set<std::string> tag(const std::set<std::string>& def = std::set<std::string>()) const</span> +<span class="lineNum"> 167 </span> : { +<span class="lineNum"> 168 </span><span class="lineCov"> 2605 : return parseTags(def, lookup("Tag"));</span> +<span class="lineNum"> 169 </span> : } +<span class="lineNum"> 170 </span> : }; +<span class="lineNum"> 171 </span> : +<span class="lineNum"> 172 </span> : } +<span class="lineNum"> 173 </span> : } +<span class="lineNum"> 174 </span> : +<span class="lineNum"> 175 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 176 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/packagerecord.test.h.gcov.html b/rep/ept/apt/packagerecord.test.h.gcov.html new file mode 100644 index 0000000..c2c2709 --- /dev/null +++ b/rep/ept/apt/packagerecord.test.h.gcov.html @@ -0,0 +1,205 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/packagerecord.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - packagerecord.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">52</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">88.5 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">46</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 5 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 6 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 7 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 10 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 11 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 12 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 15 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 16 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 17 </span> : */ +<span class="lineNum"> 18 </span> : +<span class="lineNum"> 19 </span> : #include <ept/test.h> +<span class="lineNum"> 20 </span> : #include <ept/apt/packagerecord.h> +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : namespace std { +<span class="lineNum"> 23 </span><span class="lineNoCov"> 0 : ostream& operator<<(ostream& out, const set<string>& s)</span> +<span class="lineNum"> 24 </span> : { +<span class="lineNum"> 25 </span><span class="lineNoCov"> 0 : for (set<string>::const_iterator i = s.begin();</span> +<span class="lineNum"> 26 </span> : i != s.end(); ++i) +<span class="lineNum"> 27 </span><span class="lineNoCov"> 0 : if (i == s.begin())</span> +<span class="lineNum"> 28 </span><span class="lineNoCov"> 0 : out << *i;</span> +<span class="lineNum"> 29 </span> : else +<span class="lineNum"> 30 </span><span class="lineNoCov"> 0 : out << ", " << *i;</span> +<span class="lineNum"> 31 </span><span class="lineNoCov"> 0 : return out;</span> +<span class="lineNum"> 32 </span> : } +<span class="lineNum"> 33 </span> : } +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : using namespace std; +<span class="lineNum"> 36 </span> : using namespace ept; +<span class="lineNum"> 37 </span> : using namespace ept::apt; +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : struct TestAptPackagerecord { +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : // Check that the supported fields are understood +<span class="lineNum"> 42 </span><span class="lineCov"> 1 : Test supportedFields()</span> +<span class="lineNum"> 43 </span> : { +<span class="lineNum"> 44 </span> : string record = +<span class="lineNum"> 45 </span> : "Package: apt\n" +<span class="lineNum"> 46 </span> : "Priority: important\n" +<span class="lineNum"> 47 </span> : "Section: admin\n" +<span class="lineNum"> 48 </span> : "Installed-Size: 4368\n" +<span class="lineNum"> 49 </span> : "Maintainer: APT Development Team <deity@lists.debian.org>\n" +<span class="lineNum"> 50 </span> : "Architecture: amd64\n" +<span class="lineNum"> 51 </span> : "Source: apt\n" +<span class="lineNum"> 52 </span> : "Version: 0.6.46.4-0.1\n" +<span class="lineNum"> 53 </span> : "Replaces: libapt-pkg-doc (<< 0.3.7), libapt-pkg-dev (<< 0.3.7)\n" +<span class="lineNum"> 54 </span> : "Provides: libapt-pkg-libc6.3-6-3.11\n" +<span class="lineNum"> 55 </span> : "Depends: libc6 (>= 2.3.5-1), libgcc1 (>= 1:4.1.1-12), libstdc++6 (>= 4.1.1-12), debian-archive-keyring\n" +<span class="lineNum"> 56 </span> : "Pre-Depends: debtags (maybe)\n" +<span class="lineNum"> 57 </span> : "Suggests: aptitude | synaptic | gnome-apt | wajig, dpkg-dev, apt-doc, bzip2\n" +<span class="lineNum"> 58 </span> : "Recommends: debtags (maybe)\n" +<span class="lineNum"> 59 </span> : "Enhances: debian\n" +<span class="lineNum"> 60 </span> : "Conflicts: marameo\n" +<span class="lineNum"> 61 </span> : "Filename: pool/main/a/apt/apt_0.6.46.4-0.1_amd64.deb\n" +<span class="lineNum"> 62 </span> : "Size: 1436478\n" +<span class="lineNum"> 63 </span> : "MD5sum: 1776421f80d6300c77a608e77a9f4a15\n" +<span class="lineNum"> 64 </span> : "SHA1: 1bd7337d2df56d267632cf72ac930c0a4895898f\n" +<span class="lineNum"> 65 </span> : "SHA256: b92442ab60046b4d0728245f39cc932f26e17db9f7933a5ec9aaa63172f51fda\n" +<span class="lineNum"> 66 </span> : "Description: Advanced front-end for dpkg\n" +<span class="lineNum"> 67 </span> : " This is Debian's next generation front-end for the dpkg package manager.\n" +<span class="lineNum"> 68 </span> : " It provides the apt-get utility and APT dselect method that provides a\n" +<span class="lineNum"> 69 </span> : " simpler, safer way to install and upgrade packages.\n" +<span class="lineNum"> 70 </span> : " .\n" +<span class="lineNum"> 71 </span> : " APT features complete installation ordering, multiple source capability\n" +<span class="lineNum"> 72 </span> : " and several other unique features, see the Users Guide in apt-doc.\n" +<span class="lineNum"> 73 </span> : "Build-Essential: yes\n" +<span class="lineNum"> 74 </span><span class="lineCov"> 1 : "Tag: admin::package-management, filetransfer::ftp, filetransfer::http, hardware::storage:cd, interface::commandline, network::client, protocol::{ftp,http,ipv6}, role::program, suite::debian, use::downloading, use::searching, works-with::software:package\n";</span> +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span><span class="lineCov"> 1 : PackageRecord p(record);</span> +<span class="lineNum"> 77 </span> : +<span class="lineNum"> 78 </span><span class="lineCov"> 1 : assert_eq(p.size(), 24u);</span> +<span class="lineNum"> 79 </span> : +<span class="lineNum"> 80 </span><span class="lineCov"> 2 : assert_eq(p.package(), "apt");</span> +<span class="lineNum"> 81 </span><span class="lineCov"> 1 : assert_eq(p.priority(), "important");</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 1 : assert_eq(p.section(), "admin");</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 1 : assert_eq(p.installedSize(), 4368u);</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 2 : assert_eq(p.maintainer(), "APT Development Team <deity@lists.debian.org>");</span> +<span class="lineNum"> 85 </span><span class="lineCov"> 1 : assert_eq(p.architecture(), "amd64");</span> +<span class="lineNum"> 86 </span><span class="lineCov"> 1 : assert_eq(p.source(), "apt");</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 1 : assert_eq(p.version(), "0.6.46.4-0.1");</span> +<span class="lineNum"> 88 </span><span class="lineCov"> 1 : assert_eq(p.replaces(), "libapt-pkg-doc (<< 0.3.7), libapt-pkg-dev (<< 0.3.7)");</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 1 : assert_eq(p.provides(), "libapt-pkg-libc6.3-6-3.11");</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 1 : assert_eq(p.depends(), "libc6 (>= 2.3.5-1), libgcc1 (>= 1:4.1.1-12), libstdc++6 (>= 4.1.1-12), debian-archive-keyring");</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 1 : assert_eq(p.preDepends(), "debtags (maybe)");</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 1 : assert_eq(p.recommends(), "debtags (maybe)");</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 1 : assert_eq(p.suggests(), "aptitude | synaptic | gnome-apt | wajig, dpkg-dev, apt-doc, bzip2");</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 1 : assert_eq(p.enhances(), "debian");</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 1 : assert_eq(p.conflicts(), "marameo");</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 1 : assert_eq(p.filename(), "pool/main/a/apt/apt_0.6.46.4-0.1_amd64.deb");</span> +<span class="lineNum"> 97 </span><span class="lineCov"> 1 : assert_eq(p.packageSize(), 1436478u);</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 2 : assert_eq(p.md5sum(), "1776421f80d6300c77a608e77a9f4a15");</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 1 : assert_eq(p.sha1(), "1bd7337d2df56d267632cf72ac930c0a4895898f");</span> +<span class="lineNum"> 100 </span><span class="lineCov"> 1 : assert_eq(p.sha256(), "b92442ab60046b4d0728245f39cc932f26e17db9f7933a5ec9aaa63172f51fda");</span> +<span class="lineNum"> 101 </span> : assert_eq(p.description(), "Advanced front-end for dpkg\n" +<span class="lineNum"> 102 </span> : " This is Debian's next generation front-end for the dpkg package manager.\n" +<span class="lineNum"> 103 </span> : " It provides the apt-get utility and APT dselect method that provides a\n" +<span class="lineNum"> 104 </span> : " simpler, safer way to install and upgrade packages.\n" +<span class="lineNum"> 105 </span> : " .\n" +<span class="lineNum"> 106 </span> : " APT features complete installation ordering, multiple source capability\n" +<span class="lineNum"> 107 </span><span class="lineCov"> 1 : " and several other unique features, see the Users Guide in apt-doc.");</span> +<span class="lineNum"> 108 </span><span class="lineCov"> 1 : assert_eq(p.shortDescription(), "Advanced front-end for dpkg");</span> +<span class="lineNum"> 109 </span> : assert_eq(p.longDescription(), +<span class="lineNum"> 110 </span> : "This is Debian's next generation front-end for the dpkg package manager.\n" +<span class="lineNum"> 111 </span> : " It provides the apt-get utility and APT dselect method that provides a\n" +<span class="lineNum"> 112 </span> : " simpler, safer way to install and upgrade packages.\n" +<span class="lineNum"> 113 </span> : " .\n" +<span class="lineNum"> 114 </span> : " APT features complete installation ordering, multiple source capability\n" +<span class="lineNum"> 115 </span><span class="lineCov"> 1 : " and several other unique features, see the Users Guide in apt-doc.");</span> +<span class="lineNum"> 116 </span><span class="lineCov"> 1 : assert_eq(p.buildEssential(), true);</span> +<span class="lineNum"> 117 </span> : +<span class="lineNum"> 118 </span><span class="lineCov"> 1 : std::set<std::string> tags;</span> +<span class="lineNum"> 119 </span><span class="lineCov"> 1 : tags.insert("admin::package-management");</span> +<span class="lineNum"> 120 </span><span class="lineCov"> 2 : tags.insert("filetransfer::ftp");</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 2 : tags.insert("filetransfer::http");</span> +<span class="lineNum"> 122 </span><span class="lineCov"> 2 : tags.insert("hardware::storage:cd");</span> +<span class="lineNum"> 123 </span><span class="lineCov"> 2 : tags.insert("interface::commandline");</span> +<span class="lineNum"> 124 </span><span class="lineCov"> 2 : tags.insert("network::client");</span> +<span class="lineNum"> 125 </span><span class="lineCov"> 2 : tags.insert("protocol::ftp");</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 2 : tags.insert("protocol::http");</span> +<span class="lineNum"> 127 </span><span class="lineCov"> 2 : tags.insert("protocol::ipv6");</span> +<span class="lineNum"> 128 </span><span class="lineCov"> 2 : tags.insert("role::program");</span> +<span class="lineNum"> 129 </span><span class="lineCov"> 2 : tags.insert("suite::debian");</span> +<span class="lineNum"> 130 </span><span class="lineCov"> 2 : tags.insert("use::downloading");</span> +<span class="lineNum"> 131 </span><span class="lineCov"> 2 : tags.insert("use::searching");</span> +<span class="lineNum"> 132 </span><span class="lineCov"> 2 : tags.insert("works-with::software:package");</span> +<span class="lineNum"> 133 </span><span class="lineCov"> 2 : assert_eq(p.tag(), tags);</span> +<span class="lineNum"> 134 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 135 </span> : +<span class="lineNum"> 136 </span> : }; +<span class="lineNum"> 137 </span> : +<span class="lineNum"> 138 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/recordparser.cc.gcov.html b/rep/ept/apt/recordparser.cc.gcov.html new file mode 100644 index 0000000..f1f46c3 --- /dev/null +++ b/rep/ept/apt/recordparser.cc.gcov.html @@ -0,0 +1,237 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/recordparser.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - recordparser.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">62</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">62</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** \file +<span class="lineNum"> 2 </span> : * Parser for APT records +<span class="lineNum"> 3 </span> : */ +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /* +<span class="lineNum"> 6 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 7 </span> : * +<span class="lineNum"> 8 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 9 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 10 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 11 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 12 </span> : * +<span class="lineNum"> 13 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 14 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 15 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 16 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 17 </span> : * +<span class="lineNum"> 18 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 19 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 20 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 21 </span> : */ +<span class="lineNum"> 22 </span> : +<span class="lineNum"> 23 </span> : #include <ept/apt/recordparser.h> +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <algorithm> +<span class="lineNum"> 26 </span> : #include <cctype> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : //#include <iostream> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : using namespace std; +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : namespace ept { +<span class="lineNum"> 33 </span> : namespace apt { +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : struct rpcompare +<span class="lineNum"> 36 </span> : { +<span class="lineNum"> 37 </span> : const RecordParser& rp; +<span class="lineNum"> 38 </span><span class="lineCov"> 2618 : rpcompare(const RecordParser& rp) : rp(rp) {}</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 177724 : bool operator()(size_t a, size_t b)</span> +<span class="lineNum"> 40 </span> : { +<span class="lineNum"> 41 </span><span class="lineCov"> 177724 : return rp.name(a) < rp.name(b);</span> +<span class="lineNum"> 42 </span> : } +<span class="lineNum"> 43 </span> : }; +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span><span class="lineCov"> 2618 : void RecordParser::scan(const std::string& str)</span> +<span class="lineNum"> 46 </span> : { +<span class="lineNum"> 47 </span><span class="lineCov"> 2618 : buffer = str;</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 2618 : ends.clear();</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 2618 : sorted.clear();</span> +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span> : //cerr << "PARSE " << endl << buffer << "*****" << endl; +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : // Scan the buffer, taking note of all ending offsets of the various fields +<span class="lineNum"> 54 </span><span class="lineCov"> 2618 : size_t pos = 0;</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 2618 : size_t idx = 0;</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 59427 : while (pos < buffer.size() - 1)</span> +<span class="lineNum"> 57 </span> : { +<span class="lineNum"> 58 </span> : //cerr << "PREPOS " << pos << " left: " << buffer.substr(pos, 10) << endl; +<span class="lineNum"> 59 </span><span class="lineCov"> 56809 : pos = buffer.find("\n", pos);</span> +<span class="lineNum"> 60 </span> : //cerr << "POSTPOS " << pos << " left: " << (pos == string::npos ? "NONE" : buffer.substr(pos, 10)) << endl; +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span> : // The buffer does not end with a newline +<span class="lineNum"> 63 </span><span class="lineCov"> 56809 : if (pos == string::npos)</span> +<span class="lineNum"> 64 </span> : { +<span class="lineNum"> 65 </span> : //cerr << "ENDNOTEOL" << endl; +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : pos = buffer.size();</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 1 : ends.push_back(pos);</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 1 : sorted.push_back(idx++);</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 1 : break;</span> +<span class="lineNum"> 70 </span> : } +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span><span class="lineCov"> 56808 : ++pos;</span> +<span class="lineNum"> 73 </span> : //cerr << "POSTPOSINC " << pos << " left: " << buffer.substr(pos, 10) << endl; +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span> : // The buffer ends with a newline +<span class="lineNum"> 76 </span><span class="lineCov"> 56808 : if (pos == buffer.size())</span> +<span class="lineNum"> 77 </span> : { +<span class="lineNum"> 78 </span> : //cerr << "ENDEOL" << endl; +<span class="lineNum"> 79 </span><span class="lineCov"> 11 : ends.push_back(pos);</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 11 : sorted.push_back(idx++);</span> +<span class="lineNum"> 81 </span><span class="lineCov"> 11 : break;</span> +<span class="lineNum"> 82 </span> : } +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span> : // Terminate parsing on double newlines +<span class="lineNum"> 85 </span><span class="lineCov"> 56797 : if (buffer[pos] == '\n')</span> +<span class="lineNum"> 86 </span> : { +<span class="lineNum"> 87 </span> : //cerr << "ENDDOUBLENL" << endl; +<span class="lineNum"> 88 </span><span class="lineCov"> 2606 : ends.push_back(pos);</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 2606 : sorted.push_back(idx++);</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 2606 : break;</span> +<span class="lineNum"> 91 </span> : } +<span class="lineNum"> 92 </span> : +<span class="lineNum"> 93 </span> : // Mark the end of the field if it's not a continuation line +<span class="lineNum"> 94 </span><span class="lineCov"> 54191 : if (!isspace(buffer[pos]))</span> +<span class="lineNum"> 95 </span> : { +<span class="lineNum"> 96 </span> : //cerr << "INNERFIELD" << endl; +<span class="lineNum"> 97 </span><span class="lineCov"> 34233 : ends.push_back(pos);</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 34233 : sorted.push_back(idx++);</span> +<span class="lineNum"> 99 </span> : } //else +<span class="lineNum"> 100 </span> : //cerr << "CONTLINE" << endl; +<span class="lineNum"> 101 </span> : } +<span class="lineNum"> 102 </span> : +<span class="lineNum"> 103 </span> : // Sort the sorted array +<span class="lineNum"> 104 </span><span class="lineCov"> 2618 : sort(sorted.begin(), sorted.end(), rpcompare(*this));</span> +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span> : //for (size_t i = 0; i < ends.size(); ++i) +<span class="lineNum"> 107 </span> : // cerr << ends[i] << "\t" << name(i) << "\t" << sorted[i] << "\t" << name(sorted[i]) << endl; +<span class="lineNum"> 108 </span><span class="lineCov"> 2618 : }</span> +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span><span class="lineCov"> 465183 : std::string RecordParser::field(size_t idx) const</span> +<span class="lineNum"> 111 </span> : { +<span class="lineNum"> 112 </span><span class="lineCov"> 465183 : if (idx >= ends.size())</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 2664 : return string();</span> +<span class="lineNum"> 114 </span><span class="lineCov"> 462519 : if (idx == 0)</span> +<span class="lineNum"> 115 </span><span class="lineCov"> 52771 : return buffer.substr(0, ends[0]);</span> +<span class="lineNum"> 116 </span> : else +<span class="lineNum"> 117 </span><span class="lineCov"> 409748 : return buffer.substr(ends[idx-1], ends[idx]-ends[idx-1]);</span> +<span class="lineNum"> 118 </span> : } +<span class="lineNum"> 119 </span> : +<span class="lineNum"> 120 </span><span class="lineCov"> 446879 : std::string RecordParser::name(size_t idx) const</span> +<span class="lineNum"> 121 </span> : { +<span class="lineNum"> 122 </span><span class="lineCov"> 446879 : string res = field(idx);</span> +<span class="lineNum"> 123 </span><span class="lineCov"> 446879 : size_t pos = res.find(":");</span> +<span class="lineNum"> 124 </span><span class="lineCov"> 446879 : if (pos == string::npos)</span> +<span class="lineNum"> 125 </span><span class="lineCov"> 1 : return res;</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 446878 : return res.substr(0, pos);</span> +<span class="lineNum"> 127 </span> : } +<span class="lineNum"> 128 </span> : +<span class="lineNum"> 129 </span><span class="lineCov"> 18279 : std::string RecordParser::lookup(size_t idx) const</span> +<span class="lineNum"> 130 </span> : { +<span class="lineNum"> 131 </span><span class="lineCov"> 18279 : string res = field(idx);</span> +<span class="lineNum"> 132 </span><span class="lineCov"> 18279 : size_t pos = res.find(":");</span> +<span class="lineNum"> 133 </span><span class="lineCov"> 18279 : if (pos == string::npos)</span> +<span class="lineNum"> 134 </span><span class="lineCov"> 2662 : return res;</span> +<span class="lineNum"> 135 </span> : // Skip initial whitespace after the : +<span class="lineNum"> 136 </span><span class="lineCov"> 15617 : for (++pos; pos < res.size() && isspace(res[pos]); ++pos)</span> +<span class="lineNum"> 137 </span> : ; +<span class="lineNum"> 138 </span><span class="lineCov"> 15617 : res = res.substr(pos);</span> +<span class="lineNum"> 139 </span> : // Trim spaces at the end +<span class="lineNum"> 140 </span><span class="lineCov"> 46850 : while (!res.empty() && isspace(res[res.size() - 1]))</span> +<span class="lineNum"> 141 </span><span class="lineCov"> 15616 : res.resize(res.size() - 1);</span> +<span class="lineNum"> 142 </span><span class="lineCov"> 15617 : return res;</span> +<span class="lineNum"> 143 </span> : } +<span class="lineNum"> 144 </span> : +<span class="lineNum"> 145 </span><span class="lineCov"> 18283 : size_t RecordParser::index(const std::string& str) const</span> +<span class="lineNum"> 146 </span> : { +<span class="lineNum"> 147 </span> : int begin, end; +<span class="lineNum"> 148 </span> : +<span class="lineNum"> 149 </span> : /* Binary search */ +<span class="lineNum"> 150 </span><span class="lineCov"> 18283 : begin = -1, end = size();</span> +<span class="lineNum"> 151 </span><span class="lineCov"> 109703 : while (end - begin > 1)</span> +<span class="lineNum"> 152 </span> : { +<span class="lineNum"> 153 </span><span class="lineCov"> 73137 : int cur = (end + begin) / 2;</span> +<span class="lineNum"> 154 </span> : //cerr << "Test " << cur << " " << str << " < " << name(cur) << endl; +<span class="lineNum"> 155 </span><span class="lineCov"> 73137 : if (name(sorted[cur]) > str)</span> +<span class="lineNum"> 156 </span><span class="lineCov"> 32507 : end = cur;</span> +<span class="lineNum"> 157 </span> : else +<span class="lineNum"> 158 </span><span class="lineCov"> 40630 : begin = cur;</span> +<span class="lineNum"> 159 </span> : } +<span class="lineNum"> 160 </span> : +<span class="lineNum"> 161 </span><span class="lineCov"> 18283 : if (begin == -1 || name(sorted[begin]) != str)</span> +<span class="lineNum"> 162 </span><span class="lineCov"> 2661 : return size();</span> +<span class="lineNum"> 163 </span> : else +<span class="lineNum"> 164 </span><span class="lineCov"> 15622 : return sorted[begin];</span> +<span class="lineNum"> 165 </span> : } +<span class="lineNum"> 166 </span> : +<span class="lineNum"> 167 </span> : } +<span class="lineNum"> 168 </span> : } +<span class="lineNum"> 169 </span> : +<span class="lineNum"> 170 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/recordparser.h.gcov.html b/rep/ept/apt/recordparser.h.gcov.html new file mode 100644 index 0000000..60082e3 --- /dev/null +++ b/rep/ept/apt/recordparser.h.gcov.html @@ -0,0 +1,162 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/recordparser.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - recordparser.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">8</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">8</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_APT_RECORDPARSER_H +<span class="lineNum"> 2 </span> : #define EPT_APT_RECORDPARSER_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** \file +<span class="lineNum"> 5 </span> : * Parser for APT records +<span class="lineNum"> 6 </span> : */ +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : /* +<span class="lineNum"> 9 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 12 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 13 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 14 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 17 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 18 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 19 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 20 </span> : * +<span class="lineNum"> 21 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 22 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 23 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 24 </span> : */ +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include <vector> +<span class="lineNum"> 27 </span> : #include <string> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : namespace ept { +<span class="lineNum"> 30 </span> : namespace apt { +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : /** +<span class="lineNum"> 33 </span> : * Access the fields of a package record contained inside a std::string. +<span class="lineNum"> 34 </span> : * +<span class="lineNum"> 35 </span> : * Implementation note: this implementation should take advantage of +<span class="lineNum"> 36 </span> : * std::string sharing buffer space among them. +<span class="lineNum"> 37 </span> : */ +<span class="lineNum"> 38 </span> : class RecordParser +<span class="lineNum"> 39 </span><span class="lineCov"> 19 : {</span> +<span class="lineNum"> 40 </span> : /// Buffer containing the whole record +<span class="lineNum"> 41 </span> : std::string buffer; +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : /// End offsets of the various fields in the record +<span class="lineNum"> 44 </span> : std::vector<size_t> ends; +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span> : /// Indexes on the ends vector, sorted by field name +<span class="lineNum"> 47 </span> : std::vector<size_t> sorted; +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span> : public: +<span class="lineNum"> 50 </span><span class="lineCov"> 6 : RecordParser() {}</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 13 : RecordParser(const std::string& str) { scan(str); }</span> +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : /// Index a new record +<span class="lineNum"> 54 </span> : void scan(const std::string& str); +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span> : /** +<span class="lineNum"> 57 </span> : * Get the index of the field with the given name. +<span class="lineNum"> 58 </span> : * +<span class="lineNum"> 59 </span> : * size() is returned if not found +<span class="lineNum"> 60 </span> : */ +<span class="lineNum"> 61 </span> : size_t index(const std::string& str) const; +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : /// Return the field by its index +<span class="lineNum"> 64 </span> : std::string field(size_t idx) const; +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span> : /// Return the name of a field by its index +<span class="lineNum"> 67 </span> : std::string name(size_t idx) const; +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span> : /// Return the content of a field by its index +<span class="lineNum"> 70 </span> : std::string lookup(size_t idx) const; +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span> : /// Return the content of a field by its name +<span class="lineNum"> 73 </span><span class="lineCov"> 18273 : std::string lookup(const std::string& name) const { return lookup(index(name)); }</span> +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span> : /// Return the content of a field by its index +<span class="lineNum"> 76 </span><span class="lineCov"> 6 : std::string operator[](size_t idx) const { return lookup(idx); }</span> +<span class="lineNum"> 77 </span> : +<span class="lineNum"> 78 </span> : /// Return the content of a field by its name +<span class="lineNum"> 79 </span><span class="lineCov"> 19 : std::string operator[](const std::string& name) const { return lookup(name); }</span> +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span> : /// Return the entire record +<span class="lineNum"> 82 </span> : const std::string& record() const { return buffer; } +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span> : /// Return the entire record +<span class="lineNum"> 85 </span><span class="lineCov"> 1 : std::string record() { return buffer; }</span> +<span class="lineNum"> 86 </span> : +<span class="lineNum"> 87 </span> : /// Return the number of fields in the record +<span class="lineNum"> 88 </span><span class="lineCov"> 20972 : size_t size() const { return ends.size(); }</span> +<span class="lineNum"> 89 </span> : }; +<span class="lineNum"> 90 </span> : +<span class="lineNum"> 91 </span> : } +<span class="lineNum"> 92 </span> : } +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 95 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/recordparser.test.h.gcov.html b/rep/ept/apt/recordparser.test.h.gcov.html new file mode 100644 index 0000000..477be3f --- /dev/null +++ b/rep/ept/apt/recordparser.test.h.gcov.html @@ -0,0 +1,295 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/recordparser.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - recordparser.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">107</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">107</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 5 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 6 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 7 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 10 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 11 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 12 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 15 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 16 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 17 </span> : */ +<span class="lineNum"> 18 </span> : +<span class="lineNum"> 19 </span> : #include <ept/test.h> +<span class="lineNum"> 20 </span> : #include <ept/apt/recordparser.h> +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : //#include <iostream> +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span> : using namespace std; +<span class="lineNum"> 25 </span> : using namespace ept; +<span class="lineNum"> 26 </span> : using namespace ept::apt; +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span><span class="lineCov"> 12 : struct TestAptRecordparser {</span> +<span class="lineNum"> 29 </span> : std::string record; +<span class="lineNum"> 30 </span><span class="lineCov"> 12 : TestAptRecordparser()</span> +<span class="lineNum"> 31 </span><span class="lineCov"> 12 : {</span> +<span class="lineNum"> 32 </span> : record = +<span class="lineNum"> 33 </span> : "A:\n" +<span class="lineNum"> 34 </span> : "D: da de di do du\n" +<span class="lineNum"> 35 </span> : "B: b\n" +<span class="lineNum"> 36 </span> : "C: c \n" +<span class="lineNum"> 37 </span> : "Desc: this is the beginning\n" +<span class="lineNum"> 38 </span> : " this is the continuation\n" +<span class="lineNum"> 39 </span><span class="lineCov"> 12 : " this is the end\n";</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 12 : }</span> +<span class="lineNum"> 41 </span> : +<span class="lineNum"> 42 </span> : // Check that the fields are identified and broken up correctly +<span class="lineNum"> 43 </span><span class="lineCov"> 1 : Test parsing()</span> +<span class="lineNum"> 44 </span> : { +<span class="lineNum"> 45 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span><span class="lineCov"> 1 : assert_eq(p.record(), record);</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 1 : assert_eq(p.size(), 5u);</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineCov"> 1 : Test fieldTuples()</span> +<span class="lineNum"> 52 </span> : { +<span class="lineNum"> 53 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 1 : assert_eq(p.field(0), "A:\n");</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : assert_eq(p.field(1), "D: da de di do du\n");</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 1 : assert_eq(p.field(2), "B: b\n");</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 1 : assert_eq(p.field(3), "C: c \n");</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 1 : assert_eq(p.field(4), "Desc: this is the beginning\n this is the continuation\n this is the end\n");</span> +<span class="lineNum"> 59 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 60 </span> : +<span class="lineNum"> 61 </span><span class="lineCov"> 1 : Test fieldKeys()</span> +<span class="lineNum"> 62 </span> : { +<span class="lineNum"> 63 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 1 : assert_eq(p.name(0), "A");</span> +<span class="lineNum"> 65 </span><span class="lineCov"> 1 : assert_eq(p.name(1), "D");</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : assert_eq(p.name(2), "B");</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 1 : assert_eq(p.name(3), "C");</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 1 : assert_eq(p.name(4), "Desc");</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 70 </span> : +<span class="lineNum"> 71 </span><span class="lineCov"> 1 : Test fieldValues()</span> +<span class="lineNum"> 72 </span> : { +<span class="lineNum"> 73 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 1 : assert_eq(p[0], "");</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 1 : assert_eq(p[1], "da de di do du");</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 1 : assert_eq(p[2], "b");</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 1 : assert_eq(p[3], "c");</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 1 : assert_eq(p[4], "this is the beginning\n this is the continuation\n this is the end");</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span> : // Check that the field search by name finds all the fields +<span class="lineNum"> 82 </span><span class="lineCov"> 1 : Test findByName()</span> +<span class="lineNum"> 83 </span> : { +<span class="lineNum"> 84 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span><span class="lineCov"> 1 : assert_eq(p.index("A"), 0u);</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 2 : assert_eq(p.index("D"), 1u);</span> +<span class="lineNum"> 88 </span><span class="lineCov"> 2 : assert_eq(p.index("B"), 2u);</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 2 : assert_eq(p.index("C"), 3u);</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 2 : assert_eq(p.index("Desc"), 4u);</span> +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span><span class="lineCov"> 2 : assert_eq(p.name(p.index("A")), "A");</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 2 : assert_eq(p.name(p.index("B")), "B");</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 2 : assert_eq(p.name(p.index("C")), "C");</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 2 : assert_eq(p.name(p.index("D")), "D");</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 2 : assert_eq(p.name(p.index("Desc")), "Desc");</span> +<span class="lineNum"> 97 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 98 </span> : +<span class="lineNum"> 99 </span><span class="lineCov"> 1 : Test indexing()</span> +<span class="lineNum"> 100 </span> : { +<span class="lineNum"> 101 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 102 </span><span class="lineCov"> 1 : assert_eq(p["A"], "");</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 2 : assert_eq(p["B"], "b");</span> +<span class="lineNum"> 104 </span><span class="lineCov"> 2 : assert_eq(p["C"], "c");</span> +<span class="lineNum"> 105 </span><span class="lineCov"> 2 : assert_eq(p["D"], "da de di do du");</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 2 : assert_eq(p["Desc"], "this is the beginning\n this is the continuation\n this is the end");</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span><span class="lineCov"> 1 : Test missingBehaviour()</span> +<span class="lineNum"> 110 </span> : { +<span class="lineNum"> 111 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 112 </span> : // Missing fields give empty strings +<span class="lineNum"> 113 </span><span class="lineCov"> 1 : assert_eq(p.field(100), "");</span> +<span class="lineNum"> 114 </span><span class="lineCov"> 1 : assert_eq(p.name(100), "");</span> +<span class="lineNum"> 115 </span><span class="lineCov"> 1 : assert_eq(p[100], "");</span> +<span class="lineNum"> 116 </span><span class="lineCov"> 1 : assert_eq(p["Missing"], "");</span> +<span class="lineNum"> 117 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span> : // Check that scanning twice replaces the old fields +<span class="lineNum"> 120 </span><span class="lineCov"> 1 : Test rescan()</span> +<span class="lineNum"> 121 </span> : { +<span class="lineNum"> 122 </span> : std::string record = +<span class="lineNum"> 123 </span> : "A: a\n" +<span class="lineNum"> 124 </span> : "B: b\n" +<span class="lineNum"> 125 </span><span class="lineCov"> 1 : "C: c\n";</span> +<span class="lineNum"> 126 </span> : +<span class="lineNum"> 127 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 128 </span><span class="lineCov"> 1 : assert_eq(p.size(), 3u);</span> +<span class="lineNum"> 129 </span><span class="lineCov"> 2 : assert_eq(p["A"], "a");</span> +<span class="lineNum"> 130 </span><span class="lineCov"> 2 : assert_eq(p["B"], "b");</span> +<span class="lineNum"> 131 </span><span class="lineCov"> 2 : assert_eq(p["C"], "c");</span> +<span class="lineNum"> 132 </span> : +<span class="lineNum"> 133 </span> : std::string record1 = +<span class="lineNum"> 134 </span> : "Foo: bar\n" +<span class="lineNum"> 135 </span><span class="lineCov"> 2 : "A: different\n";</span> +<span class="lineNum"> 136 </span> : +<span class="lineNum"> 137 </span><span class="lineCov"> 1 : p.scan(record1);</span> +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span> : //for (size_t i = 0; i < p.size(); ++i) +<span class="lineNum"> 140 </span> : // cerr << ">> " << i << "==" << p.index(p.name(i)) << " " << p.name(i) << " " << p[i] << endl; +<span class="lineNum"> 141 </span> : +<span class="lineNum"> 142 </span><span class="lineCov"> 1 : assert_eq(p.size(), 2u);</span> +<span class="lineNum"> 143 </span><span class="lineCov"> 2 : assert_eq(p["A"], "different");</span> +<span class="lineNum"> 144 </span><span class="lineCov"> 2 : assert_eq(p["B"], "");</span> +<span class="lineNum"> 145 </span><span class="lineCov"> 2 : assert_eq(p["C"], "");</span> +<span class="lineNum"> 146 </span><span class="lineCov"> 2 : assert_eq(p["Foo"], "bar");</span> +<span class="lineNum"> 147 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 148 </span> : +<span class="lineNum"> 149 </span> : // Real-life example +<span class="lineNum"> 150 </span><span class="lineCov"> 1 : Test realLife()</span> +<span class="lineNum"> 151 </span> : { +<span class="lineNum"> 152 </span> : string record = +<span class="lineNum"> 153 </span> : "Package: apt\n" +<span class="lineNum"> 154 </span> : "Priority: important\n" +<span class="lineNum"> 155 </span> : "Section: admin\n" +<span class="lineNum"> 156 </span> : "Installed-Size: 4368\n" +<span class="lineNum"> 157 </span> : "Maintainer: APT Development Team <deity@lists.debian.org>\n" +<span class="lineNum"> 158 </span> : "Architecture: amd64\n" +<span class="lineNum"> 159 </span> : "Version: 0.6.46.4-0.1\n" +<span class="lineNum"> 160 </span> : "Replaces: libapt-pkg-doc (<< 0.3.7), libapt-pkg-dev (<< 0.3.7)\n" +<span class="lineNum"> 161 </span> : "Provides: libapt-pkg-libc6.3-6-3.11\n" +<span class="lineNum"> 162 </span> : "Depends: libc6 (>= 2.3.5-1), libgcc1 (>= 1:4.1.1-12), libstdc++6 (>= 4.1.1-12), debian-archive-keyring\n" +<span class="lineNum"> 163 </span> : "Suggests: aptitude | synaptic | gnome-apt | wajig, dpkg-dev, apt-doc, bzip2\n" +<span class="lineNum"> 164 </span> : "Filename: pool/main/a/apt/apt_0.6.46.4-0.1_amd64.deb\n" +<span class="lineNum"> 165 </span> : "Size: 1436478\n" +<span class="lineNum"> 166 </span> : "MD5sum: 1776421f80d6300c77a608e77a9f4a15\n" +<span class="lineNum"> 167 </span> : "SHA1: 1bd7337d2df56d267632cf72ac930c0a4895898f\n" +<span class="lineNum"> 168 </span> : "SHA256: b92442ab60046b4d0728245f39cc932f26e17db9f7933a5ec9aaa63172f51fda\n" +<span class="lineNum"> 169 </span> : "Description: Advanced front-end for dpkg\n" +<span class="lineNum"> 170 </span> : " This is Debian's next generation front-end for the dpkg package manager.\n" +<span class="lineNum"> 171 </span> : " It provides the apt-get utility and APT dselect method that provides a\n" +<span class="lineNum"> 172 </span> : " simpler, safer way to install and upgrade packages.\n" +<span class="lineNum"> 173 </span> : " .\n" +<span class="lineNum"> 174 </span> : " APT features complete installation ordering, multiple source capability\n" +<span class="lineNum"> 175 </span> : " and several other unique features, see the Users Guide in apt-doc.\n" +<span class="lineNum"> 176 </span> : "Build-Essential: yes\n" +<span class="lineNum"> 177 </span><span class="lineCov"> 1 : "Tag: admin::package-management, filetransfer::ftp, filetransfer::http, hardware::storage:cd, interface::commandline, network::client, protocol::{ftp,http,ipv6}, role::program, suite::debian, use::downloading, use::searching, works-with::software:package\n";</span> +<span class="lineNum"> 178 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 179 </span> : +<span class="lineNum"> 180 </span><span class="lineCov"> 1 : assert_eq(p.size(), 19u);</span> +<span class="lineNum"> 181 </span> : +<span class="lineNum"> 182 </span><span class="lineCov"> 1 : string rec1;</span> +<span class="lineNum"> 183 </span><span class="lineCov"> 20 : for (size_t i = 0; i < p.size(); ++i)</span> +<span class="lineNum"> 184 </span><span class="lineCov"> 19 : rec1 += p.field(i);</span> +<span class="lineNum"> 185 </span><span class="lineCov"> 1 : assert_eq(record, rec1);</span> +<span class="lineNum"> 186 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 187 </span> : +<span class="lineNum"> 188 </span> : // Various buffer termination patterns +<span class="lineNum"> 189 </span><span class="lineCov"> 1 : Test bufferTermination()</span> +<span class="lineNum"> 190 </span> : { +<span class="lineNum"> 191 </span> : std::string record = +<span class="lineNum"> 192 </span> : "A: a\n" +<span class="lineNum"> 193 </span><span class="lineCov"> 1 : "B: b";</span> +<span class="lineNum"> 194 </span> : +<span class="lineNum"> 195 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 196 </span><span class="lineCov"> 1 : assert_eq(p.size(), 2u);</span> +<span class="lineNum"> 197 </span><span class="lineCov"> 2 : assert_eq(p["A"], "a");</span> +<span class="lineNum"> 198 </span><span class="lineCov"> 2 : assert_eq(p["B"], "b");</span> +<span class="lineNum"> 199 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 200 </span> : +<span class="lineNum"> 201 </span><span class="lineCov"> 1 : Test bufferTermination2()</span> +<span class="lineNum"> 202 </span> : { +<span class="lineNum"> 203 </span> : std::string record = +<span class="lineNum"> 204 </span> : "A: a\n" +<span class="lineNum"> 205 </span><span class="lineCov"> 1 : "B: b\n\n";</span> +<span class="lineNum"> 206 </span> : +<span class="lineNum"> 207 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 208 </span><span class="lineCov"> 1 : assert_eq(p.size(), 2u);</span> +<span class="lineNum"> 209 </span><span class="lineCov"> 2 : assert_eq(p["A"], "a");</span> +<span class="lineNum"> 210 </span><span class="lineCov"> 2 : assert_eq(p["B"], "b");</span> +<span class="lineNum"> 211 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 212 </span> : +<span class="lineNum"> 213 </span><span class="lineCov"> 1 : Test bufferTermination3()</span> +<span class="lineNum"> 214 </span> : { +<span class="lineNum"> 215 </span> : std::string record = +<span class="lineNum"> 216 </span> : "A: a\n" +<span class="lineNum"> 217 </span> : "B: b\n\n" +<span class="lineNum"> 218 </span><span class="lineCov"> 1 : "C: c\n";</span> +<span class="lineNum"> 219 </span> : +<span class="lineNum"> 220 </span><span class="lineCov"> 1 : RecordParser p(record);</span> +<span class="lineNum"> 221 </span><span class="lineCov"> 1 : assert_eq(p.size(), 2u);</span> +<span class="lineNum"> 222 </span><span class="lineCov"> 2 : assert_eq(p["A"], "a");</span> +<span class="lineNum"> 223 </span><span class="lineCov"> 2 : assert_eq(p["B"], "b");</span> +<span class="lineNum"> 224 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 225 </span> : +<span class="lineNum"> 226 </span> : }; +<span class="lineNum"> 227 </span> : +<span class="lineNum"> 228 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/version.cc.gcov.html b/rep/ept/apt/version.cc.gcov.html new file mode 100644 index 0000000..d850ed3 --- /dev/null +++ b/rep/ept/apt/version.cc.gcov.html @@ -0,0 +1,154 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/version.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - version.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">34</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">88.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">30</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** \file +<span class="lineNum"> 2 </span> : * Provide a very lightweight Version class that represent a package with a +<span class="lineNum"> 3 </span> : * version, with very cheap value copy operations. +<span class="lineNum"> 4 </span> : */ +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : /* +<span class="lineNum"> 7 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 10 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 11 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 12 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 15 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 16 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 17 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 18 </span> : * +<span class="lineNum"> 19 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 20 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 21 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 22 </span> : */ +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span> : #include <ept/apt/version.h> +<span class="lineNum"> 25 </span> : #include <apt-pkg/debversion.h> +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : using namespace std; +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : namespace ept { +<span class="lineNum"> 30 </span> : namespace apt { +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span><span class="lineCov"> 4 : std::string Version::upstreamVersion() const</span> +<span class="lineNum"> 33 </span> : { +<span class="lineNum"> 34 </span> : // Skip the epoch, if it is there +<span class="lineNum"> 35 </span><span class="lineCov"> 4 : size_t start = m_version.find(':');</span> +<span class="lineNum"> 36 </span><span class="lineCov"> 4 : if (start == string::npos)</span> +<span class="lineNum"> 37 </span><span class="lineCov"> 3 : start = 0;</span> +<span class="lineNum"> 38 </span> : else +<span class="lineNum"> 39 </span><span class="lineCov"> 1 : ++start;</span> +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : // Skip everything after the trailing '-', if it is there +<span class="lineNum"> 42 </span><span class="lineCov"> 4 : size_t end = m_version.rfind('-');</span> +<span class="lineNum"> 43 </span><span class="lineCov"> 4 : if (end == string::npos)</span> +<span class="lineNum"> 44 </span><span class="lineCov"> 1 : end = m_version.size();</span> +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span><span class="lineCov"> 4 : return m_version.substr(start, end-start);</span> +<span class="lineNum"> 47 </span> : } +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span> : /* Version comparison by Debian policy */ +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineCov"> 4 : bool Version::operator<=(const Version& pkg) const</span> +<span class="lineNum"> 52 </span> : { +<span class="lineNum"> 53 </span><span class="lineCov"> 4 : if (name() < pkg.name())</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 1 : return true;</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 3 : if (name() == pkg.name())</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 3 : return debVS.CmpVersion(version(), pkg.version()) <= 0;</span> +<span class="lineNum"> 57 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 58 </span> : } +<span class="lineNum"> 59 </span><span class="lineCov"> 5 : bool Version::operator<(const Version& pkg) const</span> +<span class="lineNum"> 60 </span> : { +<span class="lineNum"> 61 </span><span class="lineCov"> 5 : if (name() < pkg.name())</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 1 : return true;</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 4 : if (name() == pkg.name())</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 4 : return debVS.CmpVersion(version(), pkg.version()) < 0;</span> +<span class="lineNum"> 65 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 66 </span> : } +<span class="lineNum"> 67 </span><span class="lineCov"> 4 : bool Version::operator>=(const Version& pkg) const</span> +<span class="lineNum"> 68 </span> : { +<span class="lineNum"> 69 </span><span class="lineCov"> 4 : if (name() > pkg.name())</span> +<span class="lineNum"> 70 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 4 : if (name() == pkg.name())</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 3 : return debVS.CmpVersion(version(), pkg.version()) >= 0;</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 74 </span> : } +<span class="lineNum"> 75 </span><span class="lineCov"> 5 : bool Version::operator>(const Version& pkg) const</span> +<span class="lineNum"> 76 </span> : { +<span class="lineNum"> 77 </span><span class="lineCov"> 5 : if (name() > pkg.name())</span> +<span class="lineNum"> 78 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 5 : if (name() == pkg.name())</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 4 : return debVS.CmpVersion(version(), pkg.version()) > 0;</span> +<span class="lineNum"> 81 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 82 </span> : } +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span> : } +<span class="lineNum"> 85 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 86 </span> : +<span class="lineNum"> 87 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/version.h.gcov.html b/rep/ept/apt/version.h.gcov.html new file mode 100644 index 0000000..0f48a29 --- /dev/null +++ b/rep/ept/apt/version.h.gcov.html @@ -0,0 +1,161 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/version.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - version.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">9</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">9</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_APT_VERSION_H +<span class="lineNum"> 2 </span> : #define EPT_APT_VERSION_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** \file +<span class="lineNum"> 5 </span> : * Representation of a package with a version +<span class="lineNum"> 6 </span> : */ +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : /* +<span class="lineNum"> 9 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 12 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 13 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 14 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 17 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 18 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 19 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 20 </span> : * +<span class="lineNum"> 21 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 22 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 23 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 24 </span> : */ +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include <string> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : namespace ept { +<span class="lineNum"> 29 </span> : namespace apt { +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : /** +<span class="lineNum"> 32 </span> : * Lightweight Version class that represent a package with a version, with very +<span class="lineNum"> 33 </span> : * cheap value copy operations. +<span class="lineNum"> 34 </span> : * +<span class="lineNum"> 35 </span> : * This class can be used to query package information from various information +<span class="lineNum"> 36 </span> : * sources. The purpose is create a middle ground that makes sure that all +<span class="lineNum"> 37 </span> : * sort of different information sources about packages are referring to the +<span class="lineNum"> 38 </span> : * same package. +<span class="lineNum"> 39 </span> : */ +<span class="lineNum"> 40 </span> : class Version +<span class="lineNum"> 41 </span><span class="lineCov"> 55 : {</span> +<span class="lineNum"> 42 </span> : protected: +<span class="lineNum"> 43 </span> : std::string m_name; +<span class="lineNum"> 44 </span> : std::string m_version; +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span> : public: +<span class="lineNum"> 47 </span> : /** +<span class="lineNum"> 48 </span> : * Create an invalid Version +<span class="lineNum"> 49 </span> : */ +<span class="lineNum"> 50 </span><span class="lineCov"> 7 : Version() {}</span> +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span> : /** +<span class="lineNum"> 53 </span> : * Create a Version from strings +<span class="lineNum"> 54 </span> : */ +<span class="lineNum"> 55 </span><span class="lineCov"> 34 : Version(const std::string& name, const std::string& version)</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 34 : : m_name(name), m_version(version) {}</span> +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span> : /** +<span class="lineNum"> 59 </span> : * Return the package name +<span class="lineNum"> 60 </span> : */ +<span class="lineNum"> 61 </span><span class="lineCov"> 81 : std::string name() const { return m_name; }</span> +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : /** +<span class="lineNum"> 64 </span> : * Return the package version, or the empty string if this is a +<span class="lineNum"> 65 </span> : * versionless package. +<span class="lineNum"> 66 </span> : */ +<span class="lineNum"> 67 </span><span class="lineCov"> 38 : std::string version() const { return m_version; }</span> +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span> : /** +<span class="lineNum"> 70 </span> : * Return the upstream part of the version +<span class="lineNum"> 71 </span> : */ +<span class="lineNum"> 72 </span> : std::string upstreamVersion() const; +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span> : /** +<span class="lineNum"> 75 </span> : * Return true if this package contains a valid value +<span class="lineNum"> 76 </span> : */ +<span class="lineNum"> 77 </span><span class="lineCov"> 11 : bool isValid() const { return !m_name.empty() && !m_version.empty(); }</span> +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span> : /** +<span class="lineNum"> 80 </span> : * Comparison operators +<span class="lineNum"> 81 </span> : */ +<span class="lineNum"> 82 </span><span class="lineCov"> 9 : bool operator==(const Version& pkg) const { return m_name == pkg.m_name && m_version == pkg.m_version; }</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 5 : bool operator!=(const Version& pkg) const { return m_name != pkg.m_name || m_version != pkg.m_version; }</span> +<span class="lineNum"> 84 </span> : bool operator<=(const Version& pkg) const; +<span class="lineNum"> 85 </span> : bool operator<(const Version& pkg) const; +<span class="lineNum"> 86 </span> : bool operator>=(const Version& pkg) const; +<span class="lineNum"> 87 </span> : bool operator>(const Version& pkg) const; +<span class="lineNum"> 88 </span> : }; +<span class="lineNum"> 89 </span> : +<span class="lineNum"> 90 </span> : } +<span class="lineNum"> 91 </span> : } +<span class="lineNum"> 92 </span> : +<span class="lineNum"> 93 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 94 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/apt/version.test.h.gcov.html b/rep/ept/apt/version.test.h.gcov.html new file mode 100644 index 0000000..0f645e7 --- /dev/null +++ b/rep/ept/apt/version.test.h.gcov.html @@ -0,0 +1,203 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/apt/version.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/apt</a> - version.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">71</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">71</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 5 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 6 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 7 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 10 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 11 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 12 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 15 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 16 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 17 </span> : */ +<span class="lineNum"> 18 </span> : +<span class="lineNum"> 19 </span> : #include <ept/test.h> +<span class="lineNum"> 20 </span> : #include <ept/apt/version.h> +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : using namespace std; +<span class="lineNum"> 23 </span> : using namespace ept::apt; +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : struct TestAptVersion { +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : // Basic test for invalid version +<span class="lineNum"> 28 </span><span class="lineCov"> 1 : Test invalid()</span> +<span class="lineNum"> 29 </span> : { +<span class="lineNum"> 30 </span><span class="lineCov"> 1 : Version test;</span> +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span><span class="lineCov"> 1 : assert_eq(test.name(), "");</span> +<span class="lineNum"> 33 </span><span class="lineCov"> 1 : assert_eq(test.version(), "");</span> +<span class="lineNum"> 34 </span><span class="lineCov"> 1 : assert_eq(test.isValid(), false);</span> +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 1 : string p = test.name();</span> +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span><span class="lineCov"> 1 : assert_eq(p, string());</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : // Basic test for version +<span class="lineNum"> 42 </span><span class="lineCov"> 1 : Test basic()</span> +<span class="lineNum"> 43 </span> : { +<span class="lineNum"> 44 </span><span class="lineCov"> 1 : Version test("test", "1.0");</span> +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span><span class="lineCov"> 2 : assert_eq(test.name(), "test");</span> +<span class="lineNum"> 47 </span><span class="lineCov"> 1 : assert_eq(test.version(), "1.0");</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 1 : assert_eq(test.isValid(), true);</span> +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span><span class="lineCov"> 1 : string p = test.name();</span> +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span><span class="lineCov"> 1 : assert_eq(p, "test");</span> +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span><span class="lineCov"> 1 : Version v(p, "1.1");</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 2 : assert_eq(v.name(), "test");</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 1 : assert_eq(v.version(), "1.1");</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 1 : assert_eq(v.isValid(), true);</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span> : // Comparison semanthics +<span class="lineNum"> 61 </span><span class="lineCov"> 1 : Test comparison()</span> +<span class="lineNum"> 62 </span> : { +<span class="lineNum"> 63 </span><span class="lineCov"> 1 : Version test("test", "1.0");</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 2 : Version test1("test", "1.0");</span> +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span><span class="lineCov"> 2 : assert(test == test1);</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 2 : assert(! (test != test1));</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 2 : assert(! (test < test1));</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 2 : assert(! (test > test1));</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 2 : assert(test <= test1);</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 2 : assert(test >= test1);</span> +<span class="lineNum"> 72 </span> : +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span><span class="lineCov"> 2 : Version test2("test2", "1.0");</span> +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span><span class="lineCov"> 2 : assert(test != test2);</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 2 : assert(test != test2);</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 2 : assert(test < test2);</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 2 : assert(! (test > test2));</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 2 : assert(test <= test2);</span> +<span class="lineNum"> 81 </span><span class="lineCov"> 2 : assert(! (test >= test2));</span> +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span><span class="lineCov"> 2 : Version test3("test", "2.0");</span> +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span><span class="lineCov"> 2 : assert(test != test3);</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 2 : assert(test != test3);</span> +<span class="lineNum"> 88 </span><span class="lineCov"> 2 : assert(test < test3);</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 2 : assert(! (test > test3));</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 2 : assert(test <= test3);</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 2 : assert(! (test >= test3));</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span> : // Value-copy semanthics +<span class="lineNum"> 95 </span><span class="lineCov"> 1 : Test valueCopy()</span> +<span class="lineNum"> 96 </span> : { +<span class="lineNum"> 97 </span><span class="lineCov"> 1 : Version test("test", "1.0");</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 1 : Version test1 = test;</span> +<span class="lineNum"> 99 </span> : +<span class="lineNum"> 100 </span><span class="lineCov"> 1 : assert(test == test1);</span> +<span class="lineNum"> 101 </span> : +<span class="lineNum"> 102 </span><span class="lineCov"> 1 : Version test2;</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 1 : test2 = test;</span> +<span class="lineNum"> 104 </span><span class="lineCov"> 1 : assert(test == test2);</span> +<span class="lineNum"> 105 </span><span class="lineCov"> 2 : assert(test1 == test2);</span> +<span class="lineNum"> 106 </span> : +<span class="lineNum"> 107 </span><span class="lineCov"> 2 : Version test3("test", "1.0");</span> +<span class="lineNum"> 108 </span><span class="lineCov"> 2 : assert(test == test3);</span> +<span class="lineNum"> 109 </span><span class="lineCov"> 2 : assert(test1 == test3);</span> +<span class="lineNum"> 110 </span><span class="lineCov"> 2 : assert(test2 == test3);</span> +<span class="lineNum"> 111 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 112 </span> : +<span class="lineNum"> 113 </span> : // Extraction of upstream version +<span class="lineNum"> 114 </span><span class="lineCov"> 1 : Test upstreamVersion()</span> +<span class="lineNum"> 115 </span> : { +<span class="lineNum"> 116 </span><span class="lineCov"> 1 : assert_eq(Version("a", "10.0").upstreamVersion(), "10.0");</span> +<span class="lineNum"> 117 </span><span class="lineCov"> 2 : assert_eq(Version("a", "10.0-1").upstreamVersion(), "10.0");</span> +<span class="lineNum"> 118 </span><span class="lineCov"> 2 : assert_eq(Version("a", "10.0~foo.1-1.0").upstreamVersion(), "10.0~foo.1");</span> +<span class="lineNum"> 119 </span><span class="lineCov"> 2 : assert_eq(Version("a", "1.0:10.0~foo.1-1.0").upstreamVersion(), "10.0~foo.1");</span> +<span class="lineNum"> 120 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 121 </span> : +<span class="lineNum"> 122 </span> : // Debian policy comparison semanthics +<span class="lineNum"> 123 </span><span class="lineCov"> 1 : Test policyComparison()</span> +<span class="lineNum"> 124 </span> : { +<span class="lineNum"> 125 </span><span class="lineCov"> 1 : assert(Version("a", "10.0") > Version("a", "2.1"));</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 2 : assert(Version("a", "1:10.0") < Version("a", "2:2.1"));</span> +<span class="lineNum"> 127 </span><span class="lineCov"> 2 : assert(Version("a", "10.0-1") < Version("a", "10.0-2"));</span> +<span class="lineNum"> 128 </span><span class="lineCov"> 2 : assert(Version("a", "10.0-2") > Version("a", "10.0-1"));</span> +<span class="lineNum"> 129 </span><span class="lineCov"> 2 : assert(Version("a", "1:10.0-1") <= Version("a", "1:10.0-1"));</span> +<span class="lineNum"> 130 </span><span class="lineCov"> 2 : assert(Version("a", "1:10.0-1") >= Version("a", "1:10.0-1"));</span> +<span class="lineNum"> 131 </span> : // TODO: add more +<span class="lineNum"> 132 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 133 </span> : +<span class="lineNum"> 134 </span> : }; +<span class="lineNum"> 135 </span> : +<span class="lineNum"> 136 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt.cpp.gcov.html b/rep/ept/core/apt.cpp.gcov.html new file mode 100644 index 0000000..159b490 --- /dev/null +++ b/rep/ept/core/apt.cpp.gcov.html @@ -0,0 +1,90 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt.cpp</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - apt.cpp</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">7</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">7</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 3 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : namespace wfs = wibble::sys::fs; +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : namespace ept { +<span class="lineNum"> 8 </span> : namespace core { +<span class="lineNum"> 9 </span><span class="lineCov"> 45 : time_t aptTimestamp()</span> +<span class="lineNum"> 10 </span> : { +<span class="lineNum"> 11 </span> : std::auto_ptr<struct stat> st = wfs::stat( +<span class="lineNum"> 12 </span><span class="lineCov"> 45 : _config->FindFile( "Dir::Cache::pkgcache" ) );</span> +<span class="lineNum"> 13 </span><span class="lineCov"> 45 : time_t t1 = st.get() == NULL ? 0 : st->st_mtime;</span> +<span class="lineNum"> 14 </span> : +<span class="lineNum"> 15 </span> : std::auto_ptr<struct stat> st1 = wfs::stat( +<span class="lineNum"> 16 </span><span class="lineCov"> 45 : _config->FindFile( "Dir::State::status" ) );</span> +<span class="lineNum"> 17 </span><span class="lineCov"> 45 : time_t t2 = st1.get() == NULL ? 0 : st1->st_mtime;</span> +<span class="lineNum"> 18 </span> : +<span class="lineNum"> 19 </span><span class="lineCov"> 45 : return t1 > t2 ? t1 : t2;</span> +<span class="lineNum"> 20 </span> : } +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : } +<span class="lineNum"> 23 </span><span class="lineCov"> 6 : }</span> +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt.h.gcov.html b/rep/ept/core/apt.h.gcov.html new file mode 100644 index 0000000..b8d3ec9 --- /dev/null +++ b/rep/ept/core/apt.h.gcov.html @@ -0,0 +1,474 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - apt.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">173</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">79.8 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">138</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : #include <string> +<span class="lineNum"> 4 </span> : #include <wibble/test.h> +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : #include <ept/token.h> +<span class="lineNum"> 7 </span> : #include <ept/core/source.h> +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : #include <iostream> +<span class="lineNum"> 10 </span> : #include <wibble/exception.h> +<span class="lineNum"> 11 </span> : +<span class="lineNum"> 12 </span> : #include <apt-pkg/pkgcache.h> +<span class="lineNum"> 13 </span> : #include <apt-pkg/sourcelist.h> +<span class="lineNum"> 14 </span> : #include <apt-pkg/error.h> +<span class="lineNum"> 15 </span> : #include <apt-pkg/policy.h> +<span class="lineNum"> 16 </span> : #include <apt-pkg/cachefile.h> +<span class="lineNum"> 17 </span> : #include <apt-pkg/progress.h> +<span class="lineNum"> 18 </span> : #include <apt-pkg/pkgcachegen.h> +<span class="lineNum"> 19 </span> : #include <apt-pkg/init.h> +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : #ifndef EPT_APT_H +<span class="lineNum"> 22 </span> : #define EPT_APT_H +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span> : namespace ept { +<span class="lineNum"> 25 </span> : namespace core { +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span><span class="lineNoCov"> 0 : struct AptException : wibble::exception::Generic {</span> +<span class="lineNum"> 28 </span><span class="lineNoCov"> 0 : std::string desc() const throw () {</span> +<span class="lineNum"> 29 </span><span class="lineNoCov"> 0 : return "APT Error";</span> +<span class="lineNum"> 30 </span> : } +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span><span class="lineNoCov"> 0 : AptException( const std::string &ctx ) : Generic( ctx ) {</span> +<span class="lineNum"> 33 </span><span class="lineNoCov"> 0 : while ( !_error->empty() ) {</span> +<span class="lineNum"> 34 </span><span class="lineNoCov"> 0 : std::string err;</span> +<span class="lineNum"> 35 </span><span class="lineNoCov"> 0 : _error->PopMessage( err );</span> +<span class="lineNum"> 36 </span><span class="lineNoCov"> 0 : std::cerr << err << std::endl;</span> +<span class="lineNum"> 37 </span><span class="lineNoCov"> 0 : addContext( err );</span> +<span class="lineNum"> 38 </span> : } +<span class="lineNum"> 39 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 40 </span> : }; +<span class="lineNum"> 41 </span> : +<span class="lineNum"> 42 </span> : struct PackageState { +<span class="lineNum"> 43 </span> : enum Query { +<span class="lineNum"> 44 </span> : Install = 1 << 0, +<span class="lineNum"> 45 </span> : Upgrade = 1 << 1, +<span class="lineNum"> 46 </span> : Keep = 1 << 2, +<span class="lineNum"> 47 </span> : Remove = 1 << 3, +<span class="lineNum"> 48 </span> : Installed = 1 << 4, +<span class="lineNum"> 49 </span> : Upgradable = 1 << 5, +<span class="lineNum"> 50 </span> : NowBroken = 1 << 6, +<span class="lineNum"> 51 </span> : WillBreak = 1 << 7, +<span class="lineNum"> 52 </span> : ReInstall = 1 << 8, +<span class="lineNum"> 53 </span> : Purge = 1 << 9, +<span class="lineNum"> 54 </span> : Hold = 1 << 10, +<span class="lineNum"> 55 </span> : Valid = 1 << 11 +<span class="lineNum"> 56 </span> : }; +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span> : typedef unsigned state; +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span><span class="lineCov"> 3786 : operator unsigned() { return m_state; };</span> +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span> : PackageState &operator=( unsigned i ) { +<span class="lineNum"> 63 </span> : m_state = i; +<span class="lineNum"> 64 </span> : return *this; +<span class="lineNum"> 65 </span> : } +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span><span class="lineCov"> 5218 : PackageState &operator|=( const PackageState &s ) {</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 5218 : m_state |= s.m_state;</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 5218 : return *this;</span> +<span class="lineNum"> 70 </span> : } +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span><span class="lineCov"> 9003 : PackageState( unsigned a ) {</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 9003 : m_state = a;</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 9003 : }</span> +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span><span class="lineCov"> 1 : PackageState() : m_state( 0 ) {}</span> +<span class="lineNum"> 77 </span> : +<span class="lineNum"> 78 </span> : // FIXME this probably needs to be used consistently in core and out of core +<span class="lineNum"> 79 </span><span class="lineCov"> 2 : bool isValid() const { return m_state & Valid; }</span> +<span class="lineNum"> 80 </span> : // FIXME compatibility API for non-core apt +<span class="lineNum"> 81 </span><span class="lineCov"> 1 : bool isInstalled() const { return installed(); }</span> +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span><span class="lineCov"> 2 : bool install() const { return m_state & Install; }</span> +<span class="lineNum"> 84 </span> : // reinstall() implies install() +<span class="lineNum"> 85 </span> : bool reinstall() const { return m_state & ReInstall; } +<span class="lineNum"> 86 </span> : bool remove() const { return m_state & Remove; } +<span class="lineNum"> 87 </span> : // purge() implies remove() +<span class="lineNum"> 88 </span><span class="lineCov"> 3775 : bool purge() const { return m_state & Purge; }</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 3780 : bool keep() const { return m_state & Keep; }</span> +<span class="lineNum"> 90 </span> : bool willBreak() const { return m_state & WillBreak; } +<span class="lineNum"> 91 </span> : // upgrade() implies install() +<span class="lineNum"> 92 </span> : bool upgrade() const { return hasNewVersion() && install(); } +<span class="lineNum"> 93 </span> : // newInsstal() implies install() +<span class="lineNum"> 94 </span> : bool newInstall() const { return !installed() && install(); } +<span class="lineNum"> 95 </span> : bool hold() const { return m_state & Hold; } +<span class="lineNum"> 96 </span> : +<span class="lineNum"> 97 </span><span class="lineCov"> 1 : bool installed() const { return m_state & Installed; }</span> +<span class="lineNum"> 98 </span> : bool hasNewVersion() const { return m_state & Upgradable; } +<span class="lineNum"> 99 </span> : bool upgradable() const { return hasNewVersion() && !hold(); } +<span class="lineNum"> 100 </span> : bool held() const { return hasNewVersion() && hold(); } +<span class="lineNum"> 101 </span> : bool nowBroken() const { return m_state & NowBroken; } +<span class="lineNum"> 102 </span> : +<span class="lineNum"> 103 </span> : bool modify() const { return install() || remove(); } +<span class="lineNum"> 104 </span> : +<span class="lineNum"> 105 </span> : protected: +<span class="lineNum"> 106 </span> : unsigned m_state; +<span class="lineNum"> 107 </span> : }; +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span> : time_t aptTimestamp(); +<span class="lineNum"> 110 </span> : +<span class="lineNum"> 111 </span> : // wrap the apt's database +<span class="lineNum"> 112 </span> : struct AptDatabase { +<span class="lineNum"> 113 </span><span class="lineCov"> 5093 : pkgCache &cache() {</span> +<span class="lineNum"> 114 </span><span class="lineCov"> 5093 : if ( !m_cache )</span> +<span class="lineNum"> 115 </span><span class="lineCov"> 20 : openCache();</span> +<span class="lineNum"> 116 </span><span class="lineCov"> 5093 : return *m_cache;</span> +<span class="lineNum"> 117 </span> : } +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span><span class="lineCov"> 3793 : pkgDepCache &state() {</span> +<span class="lineNum"> 120 </span><span class="lineCov"> 3793 : if ( !m_state )</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 5 : openState();</span> +<span class="lineNum"> 122 </span><span class="lineCov"> 3793 : return *m_state;</span> +<span class="lineNum"> 123 </span> : } +<span class="lineNum"> 124 </span> : +<span class="lineNum"> 125 </span><span class="lineCov"> 1436 : pkgPolicy &policy() {</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 1436 : if ( !m_policy )</span> +<span class="lineNum"> 127 </span><span class="lineNoCov"> 0 : openCache();</span> +<span class="lineNum"> 128 </span><span class="lineCov"> 1436 : return *m_policy;</span> +<span class="lineNum"> 129 </span> : } +<span class="lineNum"> 130 </span> : +<span class="lineNum"> 131 </span> : OpProgress *m_progress; +<span class="lineNum"> 132 </span> : bool m_tryWriteable; +<span class="lineNum"> 133 </span> : bool m_writeable; +<span class="lineNum"> 134 </span> : +<span class="lineNum"> 135 </span> : time_t timestamp() { +<span class="lineNum"> 136 </span> : return aptTimestamp(); +<span class="lineNum"> 137 </span> : } +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span><span class="lineCov"> 73 : AptDatabase() {</span> +<span class="lineNum"> 140 </span><span class="lineCov"> 73 : m_cache = 0;</span> +<span class="lineNum"> 141 </span><span class="lineCov"> 73 : m_state = 0;</span> +<span class="lineNum"> 142 </span><span class="lineCov"> 73 : m_policy = 0;</span> +<span class="lineNum"> 143 </span><span class="lineCov"> 73 : m_progress = new OpProgress();</span> +<span class="lineNum"> 144 </span><span class="lineCov"> 73 : m_tryWriteable = true;</span> +<span class="lineNum"> 145 </span><span class="lineCov"> 73 : m_writeable = false;</span> +<span class="lineNum"> 146 </span><span class="lineCov"> 73 : }</span> +<span class="lineNum"> 147 </span> : +<span class="lineNum"> 148 </span> : void setProgress( OpProgress *p ) { +<span class="lineNum"> 149 </span> : m_progress = p; +<span class="lineNum"> 150 </span> : } +<span class="lineNum"> 151 </span> : +<span class="lineNum"> 152 </span> : bool writeable() { +<span class="lineNum"> 153 </span> : if ( !m_cache ) +<span class="lineNum"> 154 </span> : openCache(); +<span class="lineNum"> 155 </span> : return m_writeable; +<span class="lineNum"> 156 </span> : } +<span class="lineNum"> 157 </span> : +<span class="lineNum"> 158 </span><span class="lineCov"> 5 : void openState() {</span> +<span class="lineNum"> 159 </span><span class="lineCov"> 5 : m_state = new pkgDepCache( &cache(), m_policy );</span> +<span class="lineNum"> 160 </span><span class="lineCov"> 5 : m_state->Init( m_progress );</span> +<span class="lineNum"> 161 </span><span class="lineCov"> 5 : m_progress->Done();</span> +<span class="lineNum"> 162 </span><span class="lineCov"> 5 : }</span> +<span class="lineNum"> 163 </span> : +<span class="lineNum"> 164 </span><span class="lineCov"> 20 : void openCache() {</span> +<span class="lineNum"> 165 </span><span class="lineCov"> 20 : if ( !_config->FindB("Initialized") ) {</span> +<span class="lineNum"> 166 </span><span class="lineNoCov"> 0 : pkgInitConfig(*_config);</span> +<span class="lineNum"> 167 </span><span class="lineNoCov"> 0 : _config->Set("Initialized", 1);</span> +<span class="lineNum"> 168 </span><span class="lineNoCov"> 0 : pkgInitSystem(*_config, _system);</span> +<span class="lineNum"> 169 </span> : } +<span class="lineNum"> 170 </span> : +<span class="lineNum"> 171 </span><span class="lineCov"> 20 : m_writeable = m_tryWriteable;</span> +<span class="lineNum"> 172 </span> : +<span class="lineNum"> 173 </span><span class="lineCov"> 20 : if ( m_tryWriteable ) {</span> +<span class="lineNum"> 174 </span> : try { +<span class="lineNum"> 175 </span><span class="lineCov"> 20 : _system->Lock();</span> +<span class="lineNum"> 176 </span><span class="lineNoCov"> 0 : } catch ( std::exception e ) {</span> +<span class="lineNum"> 177 </span><span class="lineNoCov"> 0 : m_tryWriteable = false;</span> +<span class="lineNum"> 178 </span><span class="lineNoCov"> 0 : openCache();</span> +<span class="lineNum"> 179 </span><span class="lineNoCov"> 0 : m_tryWriteable = true;</span> +<span class="lineNum"> 180 </span><span class="lineNoCov"> 0 : throw;</span> +<span class="lineNum"> 181 </span> : } +<span class="lineNum"> 182 </span> : } +<span class="lineNum"> 183 </span> : +<span class="lineNum"> 184 </span><span class="lineCov"> 20 : pkgSourceList list;</span> +<span class="lineNum"> 185 </span><span class="lineCov"> 20 : if ( list.ReadMainList() == false ) {</span> +<span class="lineNum"> 186 </span><span class="lineNoCov"> 0 : _error->DumpErrors();</span> +<span class="lineNum"> 187 </span> : throw wibble::exception::System( +<span class="lineNum"> 188 </span><span class="lineNoCov"> 0 : "The list of sources could not be read." );</span> +<span class="lineNum"> 189 </span> : } +<span class="lineNum"> 190 </span> : +<span class="lineNum"> 191 </span><span class="lineCov"> 20 : MMap *m = 0;</span> +<span class="lineNum"> 192 </span><span class="lineCov"> 20 : bool Res = pkgMakeStatusCache( list, *m_progress, &m, !m_writeable );</span> +<span class="lineNum"> 193 </span> : +<span class="lineNum"> 194 </span><span class="lineCov"> 20 : if ( !Res ) {</span> +<span class="lineNum"> 195 </span> : std::cerr << "The package lists or status file " +<span class="lineNum"> 196 </span><span class="lineNoCov"> 0 : "could not be parsed or opened." << std::endl;</span> +<span class="lineNum"> 197 </span> : throw AptException( +<span class="lineNum"> 198 </span> : "The package lists or status file " +<span class="lineNum"> 199 </span><span class="lineNoCov"> 0 : "could not be parsed or opened." );</span> +<span class="lineNum"> 200 </span> : } +<span class="lineNum"> 201 </span> : +<span class="lineNum"> 202 </span><span class="lineCov"> 20 : m_cache = new pkgCache( m, true );</span> +<span class="lineNum"> 203 </span><span class="lineCov"> 40 : m_policy = new pkgPolicy( m_cache );</span> +<span class="lineNum"> 204 </span><span class="lineCov"> 40 : if ( ReadPinFile( *m_policy ) == false )</span> +<span class="lineNum"> 205 </span><span class="lineNoCov"> 0 : throw wibble::exception::System( "error reading pin file" );</span> +<span class="lineNum"> 206 </span><span class="lineCov"> 20 : m_progress->Done();</span> +<span class="lineNum"> 207 </span><span class="lineCov"> 20 : }</span> +<span class="lineNum"> 208 </span> : +<span class="lineNum"> 209 </span><span class="lineCov"> 74 : void invalidate() {</span> +<span class="lineNum"> 210 </span><span class="lineCov"> 74 : if ( _config->FindB("Initialized") ) {</span> +<span class="lineNum"> 211 </span><span class="lineCov"> 74 : _system->UnLock();</span> +<span class="lineNum"> 212 </span> : } +<span class="lineNum"> 213 </span> : +<span class="lineNum"> 214 </span><span class="lineCov"> 74 : delete m_state;</span> +<span class="lineNum"> 215 </span><span class="lineCov"> 74 : m_state = 0;</span> +<span class="lineNum"> 216 </span><span class="lineCov"> 74 : delete m_policy;</span> +<span class="lineNum"> 217 </span><span class="lineCov"> 74 : m_policy = 0;</span> +<span class="lineNum"> 218 </span><span class="lineCov"> 74 : delete m_cache;</span> +<span class="lineNum"> 219 </span><span class="lineCov"> 74 : m_cache = 0;</span> +<span class="lineNum"> 220 </span><span class="lineCov"> 74 : }</span> +<span class="lineNum"> 221 </span> : +<span class="lineNum"> 222 </span> : pkgCache::VerIterator anyVersion( pkgCache::PkgIterator pi ) { +<span class="lineNum"> 223 </span> : if ( pi.end() ) return pkgCache::VerIterator(); +<span class="lineNum"> 224 </span> : return pi.VersionList(); +<span class="lineNum"> 225 </span> : } +<span class="lineNum"> 226 </span> : +<span class="lineNum"> 227 </span><span class="lineCov"> 5 : Token candidateVersion( Token p ) {</span> +<span class="lineNum"> 228 </span><span class="lineCov"> 5 : pkgCache::PkgIterator pi = cache().FindPkg( p.package() );</span> +<span class="lineNum"> 229 </span><span class="lineCov"> 6 : if ( pi.end() ) return Token();</span> +<span class="lineNum"> 230 </span><span class="lineCov"> 4 : pkgCache::VerIterator vi = policy().GetCandidateVer( pi );</span> +<span class="lineNum"> 231 </span><span class="lineCov"> 4 : if ( vi.end() ) return Token();</span> +<span class="lineNum"> 232 </span> : +<span class="lineNum"> 233 </span><span class="lineCov"> 4 : Token t; t._id = p.package() + "_" + vi.VerStr();</span> +<span class="lineNum"> 234 </span><span class="lineCov"> 4 : return t;</span> +<span class="lineNum"> 235 </span> : } +<span class="lineNum"> 236 </span> : +<span class="lineNum"> 237 </span><span class="lineCov"> 1432 : pkgCache::VerIterator candidateVersion( pkgCache::PkgIterator pi ) {</span> +<span class="lineNum"> 238 </span><span class="lineCov"> 1432 : if ( pi.end() ) return pkgCache::VerIterator();</span> +<span class="lineNum"> 239 </span><span class="lineCov"> 1432 : pkgCache::VerIterator vi = policy().GetCandidateVer( pi );</span> +<span class="lineNum"> 240 </span><span class="lineCov"> 1432 : if ( vi.end() ) return pkgCache::VerIterator();</span> +<span class="lineNum"> 241 </span><span class="lineCov"> 1432 : return vi;</span> +<span class="lineNum"> 242 </span> : } +<span class="lineNum"> 243 </span> : +<span class="lineNum"> 244 </span><span class="lineCov"> 1432 : pkgCache::VerIterator installedVersion( pkgCache::PkgIterator pi ) {</span> +<span class="lineNum"> 245 </span><span class="lineCov"> 1432 : if ( pi.end() ) return pkgCache::VerIterator();</span> +<span class="lineNum"> 246 </span> : pkgCache::VerIterator vi = pkgCache::VerIterator( cache(), +<span class="lineNum"> 247 </span><span class="lineCov"> 1432 : cache().VerP + pi->CurrentVer );</span> +<span class="lineNum"> 248 </span><span class="lineCov"> 1432 : if ( vi.end() ) return pkgCache::VerIterator();</span> +<span class="lineNum"> 249 </span><span class="lineCov"> 1432 : return vi;</span> +<span class="lineNum"> 250 </span> : } +<span class="lineNum"> 251 </span> : +<span class="lineNum"> 252 </span><span class="lineCov"> 27 : pkgCache::PkgIterator lookupPackage( Token t ) {</span> +<span class="lineNum"> 253 </span><span class="lineCov"> 27 : return cache().FindPkg( t.package() );</span> +<span class="lineNum"> 254 </span> : } +<span class="lineNum"> 255 </span> : +<span class="lineNum"> 256 </span><span class="lineCov"> 5 : pkgCache::VerIterator lookupVersion( Token t ) {</span> +<span class="lineNum"> 257 </span><span class="lineCov"> 5 : if ( !t.hasVersion() )</span> +<span class="lineNum"> 258 </span><span class="lineCov"> 5 : t = candidateVersion( t );</span> +<span class="lineNum"> 259 </span><span class="lineCov"> 5 : pkgCache::PkgIterator pi = lookupPackage( t );</span> +<span class="lineNum"> 260 </span><span class="lineCov"> 5 : if ( pi.end() )</span> +<span class="lineNum"> 261 </span><span class="lineCov"> 1 : return pkgCache::VerIterator();</span> +<span class="lineNum"> 262 </span><span class="lineCov"> 4 : for (pkgCache::VerIterator vi = pi.VersionList(); !vi.end(); ++vi)</span> +<span class="lineNum"> 263 </span><span class="lineCov"> 4 : if ( t.version() == vi.VerStr() )</span> +<span class="lineNum"> 264 </span><span class="lineCov"> 4 : return vi;</span> +<span class="lineNum"> 265 </span><span class="lineNoCov"> 0 : return pkgCache::VerIterator();</span> +<span class="lineNum"> 266 </span> : } +<span class="lineNum"> 267 </span> : +<span class="lineNum"> 268 </span> : static pkgCache::VerFileIterator lookupVersionFile( +<span class="lineNum"> 269 </span><span class="lineCov"> 5 : pkgCache::VerIterator vi )</span> +<span class="lineNum"> 270 </span> : { +<span class="lineNum"> 271 </span><span class="lineCov"> 5 : if ( vi.end() )</span> +<span class="lineNum"> 272 </span><span class="lineCov"> 1 : return pkgCache::VerFileIterator();</span> +<span class="lineNum"> 273 </span><span class="lineCov"> 4 : pkgCache::VerFileIterator vfi = vi.FileList();</span> +<span class="lineNum"> 274 </span><span class="lineCov"> 4 : for ( ; !vfi.end(); vfi++ )</span> +<span class="lineNum"> 275 </span><span class="lineCov"> 4 : if ( ( vfi.File()->Flags & pkgCache::Flag::NotSource ) == 0)</span> +<span class="lineNum"> 276 </span><span class="lineCov"> 4 : break;</span> +<span class="lineNum"> 277 </span><span class="lineCov"> 4 : if ( vfi.end() )</span> +<span class="lineNum"> 278 </span><span class="lineNoCov"> 0 : vfi = vi.FileList();</span> +<span class="lineNum"> 279 </span><span class="lineCov"> 4 : return vfi;</span> +<span class="lineNum"> 280 </span> : } +<span class="lineNum"> 281 </span> : +<span class="lineNum"> 282 </span><span class="lineNoCov"> 0 : PackageState invalidState() {</span> +<span class="lineNum"> 283 </span><span class="lineNoCov"> 0 : return PackageState( PackageState::NowBroken | PackageState::Keep );</span> +<span class="lineNum"> 284 </span> : } +<span class="lineNum"> 285 </span> : +<span class="lineNum"> 286 </span><span class="lineCov"> 3784 : PackageState packageState( pkgCache::PkgIterator P )</span> +<span class="lineNum"> 287 </span> : { +<span class="lineNum"> 288 </span><span class="lineCov"> 3784 : PackageState s = 0;</span> +<span class="lineNum"> 289 </span><span class="lineCov"> 3784 : if ( P.end() )</span> +<span class="lineNum"> 290 </span><span class="lineNoCov"> 0 : return invalidState();</span> +<span class="lineNum"> 291 </span><span class="lineCov"> 3784 : if ( ! ( P->CurrentState == pkgCache::State::ConfigFiles</span> +<span class="lineNum"> 292 </span> : || P->CurrentState == pkgCache::State::NotInstalled ) ) +<span class="lineNum"> 293 </span><span class="lineCov"> 1432 : s |= PackageState::Installed;</span> +<span class="lineNum"> 294 </span><span class="lineCov"> 3784 : if ( s & PackageState::Installed &&</span> +<span class="lineNum"> 295 </span> : candidateVersion( P ) != installedVersion( P ) ) +<span class="lineNum"> 296 </span><span class="lineCov"> 1 : s |= PackageState::Upgradable;</span> +<span class="lineNum"> 297 </span><span class="lineCov"> 3784 : pkgDepCache::StateCache S = state()[ P ];</span> +<span class="lineNum"> 298 </span><span class="lineCov"> 3784 : if ( S.Install() )</span> +<span class="lineNum"> 299 </span><span class="lineCov"> 3 : s |= PackageState::Install;</span> +<span class="lineNum"> 300 </span><span class="lineCov"> 3784 : if ( ( S.iFlags & pkgDepCache::ReInstall )</span> +<span class="lineNum"> 301 </span> : == pkgDepCache::ReInstall ) +<span class="lineNum"> 302 </span><span class="lineNoCov"> 0 : s |= PackageState::ReInstall;</span> +<span class="lineNum"> 303 </span><span class="lineCov"> 3784 : if ( S.Keep() )</span> +<span class="lineNum"> 304 </span><span class="lineCov"> 3780 : s |= PackageState::Keep;</span> +<span class="lineNum"> 305 </span><span class="lineCov"> 3784 : if ( S.Delete() )</span> +<span class="lineNum"> 306 </span><span class="lineCov"> 1 : s |= PackageState::Remove;</span> +<span class="lineNum"> 307 </span><span class="lineCov"> 3784 : if ( ( S.iFlags & pkgDepCache::Purge ) == pkgDepCache::Purge )</span> +<span class="lineNum"> 308 </span><span class="lineNoCov"> 0 : s |= PackageState::Purge;</span> +<span class="lineNum"> 309 </span><span class="lineCov"> 3784 : if ( S.NowBroken() )</span> +<span class="lineNum"> 310 </span><span class="lineCov"> 1 : s |= PackageState::NowBroken;</span> +<span class="lineNum"> 311 </span><span class="lineCov"> 3784 : if ( S.InstBroken() )</span> +<span class="lineNum"> 312 </span><span class="lineNoCov"> 0 : s |= PackageState::WillBreak;</span> +<span class="lineNum"> 313 </span><span class="lineCov"> 3784 : if ( P->SelectedState == pkgCache::State::Hold )</span> +<span class="lineNum"> 314 </span><span class="lineNoCov"> 0 : s |= PackageState::Hold;</span> +<span class="lineNum"> 315 </span><span class="lineCov"> 3784 : return s;</span> +<span class="lineNum"> 316 </span> : } +<span class="lineNum"> 317 </span> : +<span class="lineNum"> 318 </span><span class="lineCov"> 1 : PackageState packageState( Token t ) {</span> +<span class="lineNum"> 319 </span><span class="lineCov"> 1 : t = validate( t );</span> +<span class="lineNum"> 320 </span><span class="lineCov"> 1 : if ( t.valid() )</span> +<span class="lineNum"> 321 </span><span class="lineCov"> 1 : return packageState( lookupPackage( t ) );</span> +<span class="lineNum"> 322 </span><span class="lineNoCov"> 0 : return invalidState();</span> +<span class="lineNum"> 323 </span> : } +<span class="lineNum"> 324 </span> : +<span class="lineNum"> 325 </span><span class="lineCov"> 4 : Token validate( Token t ) {</span> +<span class="lineNum"> 326 </span><span class="lineCov"> 4 : if ( t.hasVersion() )</span> +<span class="lineNum"> 327 </span><span class="lineNoCov"> 0 : return lookupVersion( t ).end() ? Token() : t;</span> +<span class="lineNum"> 328 </span><span class="lineCov"> 4 : return lookupPackage( t ).end() ? Token() : t;</span> +<span class="lineNum"> 329 </span> : } +<span class="lineNum"> 330 </span> : +<span class="lineNum"> 331 </span><span class="lineCov"> 73 : ~AptDatabase() {</span> +<span class="lineNum"> 332 </span><span class="lineCov"> 73 : invalidate();</span> +<span class="lineNum"> 333 </span><span class="lineCov"> 73 : }</span> +<span class="lineNum"> 334 </span> : +<span class="lineNum"> 335 </span> : protected: +<span class="lineNum"> 336 </span> : pkgCache *m_cache; +<span class="lineNum"> 337 </span> : pkgDepCache *m_state; +<span class="lineNum"> 338 </span> : pkgPolicy *m_policy; +<span class="lineNum"> 339 </span> : }; +<span class="lineNum"> 340 </span> : +<span class="lineNum"> 341 </span> : template< typename Internal > +<span class="lineNum"> 342 </span> : struct AptInternalList { +<span class="lineNum"> 343 </span> : Internal m_head; +<span class="lineNum"> 344 </span> : typedef Internal Type; +<span class="lineNum"> 345 </span><span class="lineCov"> 11331 : AptInternalList tail() const {</span> +<span class="lineNum"> 346 </span><span class="lineCov"> 11331 : AptInternalList t = *this;</span> +<span class="lineNum"> 347 </span><span class="lineCov"> 11331 : t.m_head++;</span> +<span class="lineNum"> 348 </span> : return t; +<span class="lineNum"> 349 </span> : } +<span class="lineNum"> 350 </span><span class="lineCov"> 7554 : const Internal &head() const { return m_head; }</span> +<span class="lineNum"> 351 </span><span class="lineCov"> 3781 : Internal &head() { return m_head; }</span> +<span class="lineNum"> 352 </span><span class="lineCov"> 11334 : bool empty() const { return m_head.end(); }</span> +<span class="lineNum"> 353 </span><span class="lineCov"> 3 : AptInternalList( Internal head ) : m_head( head ) {}</span> +<span class="lineNum"> 354 </span> : AptInternalList() {} +<span class="lineNum"> 355 </span> : }; +<span class="lineNum"> 356 </span> : +<span class="lineNum"> 357 </span> : namespace version { +<span class="lineNum"> 358 </span> : +<span class="lineNum"> 359 </span> : typedef enum { Package, VersionString, Section, Architecture, +<span class="lineNum"> 360 </span> : Depends, Recommends, Record } PropertyId; +<span class="lineNum"> 361 </span> : +<span class="lineNum"> 362 </span> : typedef pkgCache::VerIterator Internal; +<span class="lineNum"> 363 </span> : template< PropertyId > struct PropertyType {}; +<span class="lineNum"> 364 </span> : +<span class="lineNum"> 365 </span> : } +<span class="lineNum"> 366 </span> : +<span class="lineNum"> 367 </span> : namespace package { +<span class="lineNum"> 368 </span> : +<span class="lineNum"> 369 </span> : typedef enum { Name, Versions, AnyVersion, State, CandidateVersion, +<span class="lineNum"> 370 </span> : InstalledVersion } PropertyId; +<span class="lineNum"> 371 </span> : typedef pkgCache::PkgIterator Internal; +<span class="lineNum"> 372 </span> : template< PropertyId > struct PropertyType {}; +<span class="lineNum"> 373 </span> : +<span class="lineNum"> 374 </span> : struct VersionList { +<span class="lineNum"> 375 </span> : version::Internal m_head; +<span class="lineNum"> 376 </span> : VersionList tail() const; +<span class="lineNum"> 377 </span> : const version::Internal &head() const { return m_head; } +<span class="lineNum"> 378 </span> : version::Internal &head() { return m_head; } +<span class="lineNum"> 379 </span> : }; +<span class="lineNum"> 380 </span> : +<span class="lineNum"> 381 </span> : typedef AptInternalList< Internal > InternalList; +<span class="lineNum"> 382 </span> : +<span class="lineNum"> 383 </span> : } +<span class="lineNum"> 384 </span> : +<span class="lineNum"> 385 </span> : namespace record { +<span class="lineNum"> 386 </span> : +<span class="lineNum"> 387 </span> : typedef enum { Record, Name, Priority, Section, InstalledSize, Maintainer, +<span class="lineNum"> 388 </span> : Architecture, SourcePackage, Version, Description, +<span class="lineNum"> 389 </span> : ShortDescription, LongDescription, PackageSize } PropertyId; +<span class="lineNum"> 390 </span> : +<span class="lineNum"> 391 </span> : extern const char *fields[]; +<span class="lineNum"> 392 </span> : +<span class="lineNum"> 393 </span> : typedef pkgCache::VerFileIterator Internal; +<span class="lineNum"> 394 </span> : +<span class="lineNum"> 395 </span> : template< PropertyId > struct PropertyType { +<span class="lineNum"> 396 </span> : typedef std::string T; +<span class="lineNum"> 397 </span> : }; +<span class="lineNum"> 398 </span> : +<span class="lineNum"> 399 </span> : } +<span class="lineNum"> 400 </span> : } +<span class="lineNum"> 401 </span> : } +<span class="lineNum"> 402 </span> : +<span class="lineNum"> 403 </span> : #include <ept/core/apt/package.h> +<span class="lineNum"> 404 </span> : #include <ept/core/apt/version.h> +<span class="lineNum"> 405 </span> : #include <ept/core/apt/record.h> +<span class="lineNum"> 406 </span> : +<span class="lineNum"> 407 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt.test.h.gcov.html b/rep/ept/core/apt.test.h.gcov.html new file mode 100644 index 0000000..8586911 --- /dev/null +++ b/rep/ept/core/apt.test.h.gcov.html @@ -0,0 +1,162 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - apt.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">60</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">60</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #include <ept/config.h> +<span class="lineNum"> 3 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 4 </span> : #include <ept/core/list.h> +<span class="lineNum"> 5 </span> : #include <ept/test.h> +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : using namespace ept::core; +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : struct TestCoreApt : AptTestEnvironment +<span class="lineNum"> 10 </span><span class="lineCov"> 12 : {</span> +<span class="lineNum"> 11 </span> : package::Source pkgs; +<span class="lineNum"> 12 </span> : version::Source vers; +<span class="lineNum"> 13 </span> : ept::Token t; +<span class="lineNum"> 14 </span> : +<span class="lineNum"> 15 </span><span class="lineCov"> 12 : TestCoreApt() : pkgs( db ), vers( db ) {</span> +<span class="lineNum"> 16 </span><span class="lineCov"> 12 : t._id = "sp";</span> +<span class="lineNum"> 17 </span><span class="lineCov"> 12 : }</span> +<span class="lineNum"> 18 </span> : +<span class="lineNum"> 19 </span><span class="lineCov"> 1 : Test token() {</span> +<span class="lineNum"> 20 </span><span class="lineCov"> 1 : assert_eq( t.package(), "sp" );</span> +<span class="lineNum"> 21 </span><span class="lineCov"> 2 : assert_eq( t.version(), "" );</span> +<span class="lineNum"> 22 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span><span class="lineCov"> 1 : Test tokenVersion() {</span> +<span class="lineNum"> 25 </span><span class="lineCov"> 1 : ept::Token t2;</span> +<span class="lineNum"> 26 </span><span class="lineCov"> 1 : t2._id = "libwibble-dev_0.1.10";</span> +<span class="lineNum"> 27 </span><span class="lineCov"> 1 : assert_eq( t2.package(), "libwibble-dev" );</span> +<span class="lineNum"> 28 </span><span class="lineCov"> 1 : assert_eq( t2.version(), "0.1.10" );</span> +<span class="lineNum"> 29 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span><span class="lineCov"> 1 : Test packageName() {</span> +<span class="lineNum"> 32 </span><span class="lineCov"> 1 : assert_eq( t.package(), pkgs.get< package::Name >( t ) );</span> +<span class="lineNum"> 33 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : template< typename List > +<span class="lineNum"> 36 </span><span class="lineCov"> 1 : void checkPackageNameList( List l ) {</span> +<span class="lineNum"> 37 </span><span class="lineCov"> 3779 : while ( !l.empty() ) {</span> +<span class="lineNum"> 38 </span><span class="lineCov"> 3777 : assert_eq( l.token().package(), l.property() );</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 3777 : l = l.tail();</span> +<span class="lineNum"> 40 </span> : } +<span class="lineNum"> 41 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : template< typename List > +<span class="lineNum"> 44 </span><span class="lineCov"> 1 : void checkVersionPackageList( List l ) {</span> +<span class="lineNum"> 45 </span><span class="lineCov"> 1810 : while ( !l.empty() ) {</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 1808 : assert_eq( l.property().package(), l.token().package() );</span> +<span class="lineNum"> 47 </span><span class="lineCov"> 3616 : assert_eq( l.property().version(), "" );</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 1808 : l = l.tail();</span> +<span class="lineNum"> 49 </span> : } +<span class="lineNum"> 50 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span><span class="lineCov"> 1 : Test packageCount() {</span> +<span class="lineNum"> 53 </span> : assert_eq( list::count( pkgs.list< package::Name >() ), +<span class="lineNum"> 54 </span><span class="lineCov"> 1 : 3777 );</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span><span class="lineCov"> 1 : Test packageNameList() {</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 1 : checkPackageNameList( pkgs.list< package::Name >() );</span> +<span class="lineNum"> 59 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 60 </span> : +<span class="lineNum"> 61 </span><span class="lineCov"> 1 : Test versionCount() {</span> +<span class="lineNum"> 62 </span> : assert_eq( list::count( vers.list< version::Package >() ), +<span class="lineNum"> 63 </span><span class="lineCov"> 1 : 1808 );</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : Test versionPackage() {</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 1 : checkVersionPackageList( vers.list< version::Package >() );</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 69 </span> : +<span class="lineNum"> 70 </span><span class="lineCov"> 1 : Test validate() {</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 1 : assert_eq( t, db.validate( t ) );</span> +<span class="lineNum"> 72 </span> : assert_neq( ept::Token( "libfoobar" ), +<span class="lineNum"> 73 </span><span class="lineCov"> 2 : db.validate( ept::Token( "libfooar" ) ) );</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 2 : assert_eq( ept::Token(), db.validate( ept::Token( "libfoobar" ) ) );</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 76 </span> : +<span class="lineNum"> 77 </span><span class="lineCov"> 1 : Test packageState() {</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 1 : assert( db.packageState( t ) & PackageState::Keep );</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span><span class="lineCov"> 1 : Test packageState2() {</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 1 : assert( pkgs.get< package::State >( t ) & PackageState::Keep );</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span><span class="lineCov"> 1 : Test exists() {</span> +<span class="lineNum"> 86 </span><span class="lineCov"> 1 : assert( pkgs.exists( t ) );</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 2 : assert( !pkgs.exists( ept::Token( "nonexistent-package" ) ) );</span> +<span class="lineNum"> 88 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 89 </span> : +<span class="lineNum"> 90 </span><span class="lineCov"> 1 : Test invalidate() {</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 1 : assert( pkgs.exists( t ) );</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 1 : db.invalidate();</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 2 : assert( pkgs.exists( t ) );</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 95 </span> : }; +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/action.h.gcov.html b/rep/ept/core/apt/action.h.gcov.html new file mode 100644 index 0000000..08b2810 --- /dev/null +++ b/rep/ept/core/apt/action.h.gcov.html @@ -0,0 +1,202 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt/action.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/core/apt</a> - action.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">48</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">85.4 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">41</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : #include <string> +<span class="lineNum"> 4 </span> : #include <ept/token.h> +<span class="lineNum"> 5 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 6 </span> : #include <apt-pkg/algorithms.h> +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : #ifndef EPT_APT_ACTION_H +<span class="lineNum"> 9 </span> : #define EPT_APT_ACTION_H +<span class="lineNum"> 10 </span> : +<span class="lineNum"> 11 </span> : namespace ept { +<span class="lineNum"> 12 </span> : namespace core { +<span class="lineNum"> 13 </span> : namespace package { +<span class="lineNum"> 14 </span> : +<span class="lineNum"> 15 </span><span class="lineCov"> 13 : struct Action {</span> +<span class="lineNum"> 16 </span> : enum Type { Install, ReInstall, Remove, Keep, Purge, SystemUpgrade }; +<span class="lineNum"> 17 </span> : Token m_token; +<span class="lineNum"> 18 </span> : Type m_type; +<span class="lineNum"> 19 </span> : +<span class="lineNum"> 20 </span><span class="lineCov"> 4 : Token token() { return m_token; }</span> +<span class="lineNum"> 21 </span> : Type type() { return m_type; } +<span class="lineNum"> 22 </span> : +<span class="lineNum"> 23 </span><span class="lineCov"> 4 : void apply( package::Source &pkgs )</span> +<span class="lineNum"> 24 </span> : { +<span class="lineNum"> 25 </span><span class="lineCov"> 4 : Type a = m_type;</span> +<span class="lineNum"> 26 </span><span class="lineCov"> 4 : pkgDepCache &dc = pkgs.db().state();</span> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span><span class="lineCov"> 4 : if ( a == SystemUpgrade ) {</span> +<span class="lineNum"> 29 </span><span class="lineNoCov"> 0 : pkgDistUpgrade( dc );</span> +<span class="lineNum"> 30 </span> : } else { +<span class="lineNum"> 31 </span><span class="lineCov"> 4 : if ( !pkgs.exists( m_token ) )</span> +<span class="lineNum"> 32 </span><span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 33 </span><span class="lineCov"> 4 : pkgCache::PkgIterator p = pkgs.lookupToken( m_token );</span> +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span><span class="lineCov"> 4 : pkgProblemResolver fix( &dc );</span> +<span class="lineNum"> 36 </span><span class="lineCov"> 8 : if ( a == Install || a == ReInstall ) {</span> +<span class="lineNum"> 37 </span><span class="lineCov"> 2 : fix.Clear( p );</span> +<span class="lineNum"> 38 </span><span class="lineCov"> 2 : fix.Protect( p );</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 2 : dc.MarkInstall( p, true );</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 2 : fix.InstallProtect();</span> +<span class="lineNum"> 41 </span><span class="lineCov"> 2 : if ( a == ReInstall )</span> +<span class="lineNum"> 42 </span><span class="lineNoCov"> 0 : dc.SetReInstall( p, true );</span> +<span class="lineNum"> 43 </span><span class="lineCov"> 2 : } else if ( a == Remove || a == Purge ) {</span> +<span class="lineNum"> 44 </span><span class="lineNoCov"> 0 : fix.Clear( p );</span> +<span class="lineNum"> 45 </span><span class="lineNoCov"> 0 : fix.Protect( p );</span> +<span class="lineNum"> 46 </span><span class="lineNoCov"> 0 : fix.Remove( p );</span> +<span class="lineNum"> 47 </span><span class="lineNoCov"> 0 : dc.MarkDelete( p, a == Purge ? true : false );</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 2 : } else if ( a == Keep ) {</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 2 : fix.Clear( p );</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 2 : fix.Protect( p );</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 2 : dc.MarkKeep( p, true );</span> +<span class="lineNum"> 52 </span> : } +<span class="lineNum"> 53 </span><span class="lineCov"> 4 : fix.Resolve( true );</span> +<span class="lineNum"> 54 </span> : } +<span class="lineNum"> 55 </span> : } +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span> : bool redundant( package::Source &pkgs ) { +<span class="lineNum"> 58 </span> : if ( m_type == SystemUpgrade ) { +<span class="lineNum"> 59 </span> : // check whether we have any upgradable packages +<span class="lineNum"> 60 </span> : return false; +<span class="lineNum"> 61 </span> : } +<span class="lineNum"> 62 </span> : if ( !pkgs.exists( m_token ) ) +<span class="lineNum"> 63 </span> : return true; +<span class="lineNum"> 64 </span> : PackageState s = pkgs.db().packageState( m_token ); +<span class="lineNum"> 65 </span> : Type a = m_type; +<span class="lineNum"> 66 </span> : // if ( a == Keep && !s.upgradable() ) +<span class="lineNum"> 67 </span> : // return true; +<span class="lineNum"> 68 </span> : if ( ( a == Install || a == ReInstall ) +<span class="lineNum"> 69 </span> : && ( !s.upgradable() && s.installed() ) ) +<span class="lineNum"> 70 </span> : return true; +<span class="lineNum"> 71 </span> : if ( ( a == Remove || a == Purge ) && !s.installed() ) +<span class="lineNum"> 72 </span> : return true; +<span class="lineNum"> 73 </span> : return false; +<span class="lineNum"> 74 </span> : } +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span><span class="lineCov"> 6 : Action( Token t, Type a )</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 6 : : m_token( t ), m_type( a )</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 6 : {}</span> +<span class="lineNum"> 79 </span> : }; +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span><span class="lineCov"> 2 : struct ActionList {</span> +<span class="lineNum"> 82 </span> : typedef std::vector< Action > List; +<span class="lineNum"> 83 </span> : List m_list; +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span> : void clear() { +<span class="lineNum"> 86 </span> : m_list.clear(); +<span class="lineNum"> 87 </span> : } +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span><span class="lineCov"> 1 : bool empty() {</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 1 : return m_list.empty();</span> +<span class="lineNum"> 91 </span> : } +<span class="lineNum"> 92 </span> : +<span class="lineNum"> 93 </span><span class="lineCov"> 3 : void add( Action a ) {</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 3 : List::iterator rm = m_list.end(), i;</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 3 : for ( i = m_list.begin(); i != m_list.end(); ++i ) {</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 2 : if ( i->token() == a.token() ) {</span> +<span class="lineNum"> 97 </span><span class="lineCov"> 2 : rm = i;</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 2 : break;</span> +<span class="lineNum"> 99 </span> : } +<span class="lineNum"> 100 </span> : } +<span class="lineNum"> 101 </span><span class="lineCov"> 3 : if ( rm != m_list.end() )</span> +<span class="lineNum"> 102 </span><span class="lineCov"> 2 : m_list.erase( rm );</span> +<span class="lineNum"> 103 </span> : // if ( a.type() != Action::Keep ) +<span class="lineNum"> 104 </span><span class="lineCov"> 3 : m_list.push_back( a );</span> +<span class="lineNum"> 105 </span><span class="lineCov"> 3 : }</span> +<span class="lineNum"> 106 </span> : +<span class="lineNum"> 107 </span> : Action latest() { +<span class="lineNum"> 108 </span> : return m_list.back(); +<span class="lineNum"> 109 </span> : } +<span class="lineNum"> 110 </span> : +<span class="lineNum"> 111 </span><span class="lineCov"> 1 : void replay( package::Source &pkgs ) {</span> +<span class="lineNum"> 112 </span><span class="lineCov"> 2 : for ( List::iterator i = m_list.begin(); i != m_list.end(); ++i ) {</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 1 : i->apply( pkgs );</span> +<span class="lineNum"> 114 </span> : } +<span class="lineNum"> 115 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 116 </span> : +<span class="lineNum"> 117 </span> : void prune( package::Source &pkgs ) { +<span class="lineNum"> 118 </span> : List l; +<span class="lineNum"> 119 </span> : std::swap( l, m_list ); +<span class="lineNum"> 120 </span> : for ( List::iterator i = m_list.begin(); i != m_list.end(); ++i ) { +<span class="lineNum"> 121 </span> : if ( !i->redundant( pkgs ) ) +<span class="lineNum"> 122 </span> : m_list.push_back( *i ); +<span class="lineNum"> 123 </span> : } +<span class="lineNum"> 124 </span> : /* We want to do but can't bind reference parameters.... (or +<span class="lineNum"> 125 </span> : maybe use remove_copy_if or whatever ... ugly +<span class="lineNum"> 126 </span> : std::remove_if( m_list.begin(), m_list.end(), std::bind2nd( +<span class="lineNum"> 127 </span> : std::mem_fun_ref( &Action::redundant ), pkgs ) ); */ +<span class="lineNum"> 128 </span> : } +<span class="lineNum"> 129 </span> : }; +<span class="lineNum"> 130 </span> : +<span class="lineNum"> 131 </span> : } +<span class="lineNum"> 132 </span> : } +<span class="lineNum"> 133 </span> : } +<span class="lineNum"> 134 </span> : +<span class="lineNum"> 135 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/action.test.h.gcov.html b/rep/ept/core/apt/action.test.h.gcov.html new file mode 100644 index 0000000..86e5fcc --- /dev/null +++ b/rep/ept/core/apt/action.test.h.gcov.html @@ -0,0 +1,108 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt/action.test.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/core/apt</a> - action.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">29</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">29</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #include <ept/core/apt/action.h> +<span class="lineNum"> 3 </span> : #include <ept/test.h> +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : using namespace ept::core; +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : struct TestAptAction : AptTestEnvironment +<span class="lineNum"> 8 </span><span class="lineCov"> 3 : {</span> +<span class="lineNum"> 9 </span> : package::Source pkgs; +<span class="lineNum"> 10 </span><span class="lineCov"> 3 : TestAptAction() : pkgs( db ) {}</span> +<span class="lineNum"> 11 </span> : +<span class="lineNum"> 12 </span><span class="lineCov"> 1 : Test basic() {</span> +<span class="lineNum"> 13 </span><span class="lineCov"> 1 : ept::Token t( "sp" );</span> +<span class="lineNum"> 14 </span><span class="lineCov"> 2 : package::Action a( t, package::Action::Install );</span> +<span class="lineNum"> 15 </span><span class="lineCov"> 1 : a.apply( pkgs );</span> +<span class="lineNum"> 16 </span><span class="lineCov"> 1 : assert( pkgs.get< package::State >( t ).install() );</span> +<span class="lineNum"> 17 </span><span class="lineCov"> 1 : a = package::Action( t, package::Action::Keep );</span> +<span class="lineNum"> 18 </span><span class="lineCov"> 1 : a.apply( pkgs );</span> +<span class="lineNum"> 19 </span><span class="lineCov"> 1 : assert( pkgs.get< package::State >( t ).keep() );</span> +<span class="lineNum"> 20 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span><span class="lineCov"> 1 : Test revert() {</span> +<span class="lineNum"> 23 </span><span class="lineCov"> 1 : ept::Token t( "sp" );</span> +<span class="lineNum"> 24 </span><span class="lineCov"> 2 : package::Action a( t, package::Action::Install );</span> +<span class="lineNum"> 25 </span><span class="lineCov"> 1 : a.apply( pkgs );</span> +<span class="lineNum"> 26 </span><span class="lineCov"> 1 : assert( pkgs.get< package::State >( t ).install() );</span> +<span class="lineNum"> 27 </span><span class="lineCov"> 1 : pkgs.revertStates();</span> +<span class="lineNum"> 28 </span><span class="lineCov"> 1 : assert( pkgs.get< package::State >( t ).keep() );</span> +<span class="lineNum"> 29 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span><span class="lineCov"> 1 : Test keep() {</span> +<span class="lineNum"> 32 </span><span class="lineCov"> 1 : package::ActionList al;</span> +<span class="lineNum"> 33 </span><span class="lineCov"> 1 : ept::Token t( "sp" );</span> +<span class="lineNum"> 34 </span><span class="lineCov"> 2 : al.add( package::Action( t, package::Action::Install ) );</span> +<span class="lineNum"> 35 </span><span class="lineCov"> 1 : assert( !al.empty() );</span> +<span class="lineNum"> 36 </span><span class="lineCov"> 2 : al.add( package::Action( t, package::Action::Remove ) );</span> +<span class="lineNum"> 37 </span><span class="lineCov"> 1 : al.add( package::Action( t, package::Action::Keep ) );</span> +<span class="lineNum"> 38 </span><span class="lineCov"> 1 : al.replay( pkgs );</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 1 : assert( pkgs.get< package::State >( t ).keep() );</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 41 </span> : }; +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/index.html b/rep/ept/core/apt/index.html new file mode 100644 index 0000000..ebae680 --- /dev/null +++ b/rep/ept/core/apt/index.html @@ -0,0 +1,155 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - ept/core/apt</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">334</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">91.9 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">307</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="action.h.gcov.html">action.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=85 height=10 alt="85.4%"><img src="../../../snow.png" width=15 height=10 alt="85.4%"></td></tr></table> + </td> + <td class="coverPerHi">85.4 %</td> + <td class="coverNumHi">41 / 48 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="action.test.h.gcov.html">action.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">29 / 29 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="package.h.gcov.html">package.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=94 height=10 alt="93.9%"><img src="../../../snow.png" width=6 height=10 alt="93.9%"></td></tr></table> + </td> + <td class="coverPerHi">93.9 %</td> + <td class="coverNumHi">31 / 33 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="record.cpp.gcov.html">record.cpp</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">1 / 1 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="record.h.gcov.html">record.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=86 height=10 alt="86.5%"><img src="../../../snow.png" width=14 height=10 alt="86.5%"></td></tr></table> + </td> + <td class="coverPerHi">86.5 %</td> + <td class="coverNumHi">83 / 96 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="record.test.h.gcov.html">record.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">29 / 29 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="recordparser.cpp.gcov.html">recordparser.cpp</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=95 height=10 alt="95.2%"><img src="../../../snow.png" width=5 height=10 alt="95.2%"></td></tr></table> + </td> + <td class="coverPerHi">95.2 %</td> + <td class="coverNumHi">59 / 62 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="recordparser.h.gcov.html">recordparser.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">4 / 4 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="version.h.gcov.html">version.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=94 height=10 alt="93.8%"><img src="../../../snow.png" width=6 height=10 alt="93.8%"></td></tr></table> + </td> + <td class="coverPerHi">93.8 %</td> + <td class="coverNumHi">30 / 32 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/package.h.gcov.html b/rep/ept/core/apt/package.h.gcov.html new file mode 100644 index 0000000..deea250 --- /dev/null +++ b/rep/ept/core/apt/package.h.gcov.html @@ -0,0 +1,194 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt/package.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/core/apt</a> - package.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">33</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">93.9 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">31</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : #ifndef EPT_APT_PACKAGE_H +<span class="lineNum"> 4 </span> : #define EPT_APT_PACKAGE_H +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : namespace ept { +<span class="lineNum"> 7 </span> : namespace core { +<span class="lineNum"> 8 </span> : namespace package { +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span> : struct Setup { +<span class="lineNum"> 11 </span> : typedef ept::Token Token; +<span class="lineNum"> 12 </span> : typedef package::Internal Internal; +<span class="lineNum"> 13 </span> : typedef package::PropertyId PropertyId; +<span class="lineNum"> 14 </span> : typedef package::InternalList InternalList; +<span class="lineNum"> 15 </span> : }; +<span class="lineNum"> 16 </span> : +<span class="lineNum"> 17 </span> : template<> struct PropertyType< Name > { typedef std::string T; }; +<span class="lineNum"> 18 </span> : template<> struct PropertyType< Versions > { typedef VersionList T; }; +<span class="lineNum"> 19 </span> : template<> struct PropertyType< AnyVersion > { typedef Token T; }; +<span class="lineNum"> 20 </span> : template<> struct PropertyType< State > { typedef PackageState T; }; +<span class="lineNum"> 21 </span> : template<> struct PropertyType< CandidateVersion > { typedef Token T; }; +<span class="lineNum"> 22 </span> : template<> struct PropertyType< InstalledVersion > { typedef Token T; }; +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span> : struct Source : core::Source< Source, Setup, PropertyType > +<span class="lineNum"> 25 </span><span class="lineCov"> 15 : {</span> +<span class="lineNum"> 26 </span> : AptDatabase &m_db; +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span><span class="lineCov"> 15 : Source( AptDatabase &db ) : m_db( db ) {}</span> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span><span class="lineCov"> 3 : InternalList listInternal() {</span> +<span class="lineNum"> 31 </span><span class="lineCov"> 3 : return InternalList( m_db.cache().PkgBegin() );</span> +<span class="lineNum"> 32 </span> : } +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span><span class="lineCov"> 17 : Internal lookupToken( Token t ) {</span> +<span class="lineNum"> 35 </span><span class="lineCov"> 17 : return m_db.lookupPackage( t );</span> +<span class="lineNum"> 36 </span> : } +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span><span class="lineCov"> 3777 : Token getToken( Internal i ) {</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 3777 : Token t;</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 3777 : t._id = i.Name();</span> +<span class="lineNum"> 41 </span><span class="lineNoCov"> 0 : return t;</span> +<span class="lineNum"> 42 </span> : } +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span><span class="lineCov"> 8 : bool exists( Token t ) {</span> +<span class="lineNum"> 45 </span><span class="lineCov"> 8 : if ( t.hasVersion() )</span> +<span class="lineNum"> 46 </span><span class="lineNoCov"> 0 : return !m_db.lookupVersion( t ).end();</span> +<span class="lineNum"> 47 </span> : else +<span class="lineNum"> 48 </span><span class="lineCov"> 8 : return !lookupToken( t ).end();</span> +<span class="lineNum"> 49 </span> : } +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span> : Token versionToken( pkgCache::VerIterator vi ) { +<span class="lineNum"> 52 </span> : if ( vi.end() ) +<span class="lineNum"> 53 </span> : return Token(); +<span class="lineNum"> 54 </span> : return Token( std::string( vi.ParentPkg().Name() ) + "_" + vi.VerStr() ); +<span class="lineNum"> 55 </span> : } +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span> : template< PropertyId p > +<span class="lineNum"> 58 </span> : typename PropertyType< p >::T getInternal( Internal ); +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span> : template< typename List > +<span class="lineNum"> 61 </span><span class="lineCov"> 1 : void revertState( List l ) {</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 3779 : while ( !l.empty() ) {</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 3777 : PackageState s = getInternal< State >( l.head() );</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 3777 : if ( !s.keep() || s.purge() ) {</span> +<span class="lineNum"> 65 </span><span class="lineCov"> 2 : pkgDepCache::StateCache &S = db().state()[ l.head() ];</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 2 : db().state().MarkKeep( l.head(), false, false );</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 2 : S.iFlags &= ~pkgDepCache::Purge;</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 2 : S.iFlags &= ~pkgDepCache::ReInstall;</span> +<span class="lineNum"> 69 </span> : } +<span class="lineNum"> 70 </span><span class="lineCov"> 3777 : l = l.tail();</span> +<span class="lineNum"> 71 </span> : } +<span class="lineNum"> 72 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span><span class="lineCov"> 1 : void revertStates() {</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 1 : pkgDepCache::ActionGroup group( db().state() );</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 1 : revertState( listInternal() );</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span> : typedef ComposedList< State > ChangeList; +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span> : static bool isChanged( Token t, PackageState s ); +<span class="lineNum"> 82 </span> : static bool isUpgradable( Token t, PackageState s ); +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span> : PropertyFilter< State, __typeof( &isChanged ) >::T changedList() { +<span class="lineNum"> 85 </span> : return propertyFilter< State >( isChanged ); +<span class="lineNum"> 86 </span> : } +<span class="lineNum"> 87 </span> : +<span class="lineNum"> 88 </span> : PropertyFilter< State, __typeof( &isUpgradable ) >::T upgradableList() { +<span class="lineNum"> 89 </span> : return propertyFilter< State >( isUpgradable ); +<span class="lineNum"> 90 </span> : } +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span><span class="lineCov"> 9 : AptDatabase &db() { return m_db; }</span> +<span class="lineNum"> 93 </span> : }; +<span class="lineNum"> 94 </span> : +<span class="lineNum"> 95 </span><span class="lineCov"> 3778 : template<> inline std::string Source::getInternal< Name >( Internal i ) {</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 3778 : return i.Name();</span> +<span class="lineNum"> 97 </span> : } +<span class="lineNum"> 98 </span> : +<span class="lineNum"> 99 </span><span class="lineCov"> 3783 : template<> inline PackageState Source::getInternal< State >( Internal i ) {</span> +<span class="lineNum"> 100 </span><span class="lineCov"> 3783 : return m_db.packageState( i );</span> +<span class="lineNum"> 101 </span> : } +<span class="lineNum"> 102 </span> : +<span class="lineNum"> 103 </span> : template<> inline Token Source::getInternal< CandidateVersion >( Internal i ) { +<span class="lineNum"> 104 </span> : return versionToken( m_db.candidateVersion( i ) ); +<span class="lineNum"> 105 </span> : } +<span class="lineNum"> 106 </span> : +<span class="lineNum"> 107 </span> : template<> inline Token Source::getInternal< AnyVersion >( Internal i ) { +<span class="lineNum"> 108 </span> : return versionToken( m_db.candidateVersion( i ) ); +<span class="lineNum"> 109 </span> : } +<span class="lineNum"> 110 </span> : +<span class="lineNum"> 111 </span> : template<> inline Token Source::getInternal< InstalledVersion >( Internal i ) { +<span class="lineNum"> 112 </span> : return versionToken( m_db.installedVersion( i ) ); +<span class="lineNum"> 113 </span> : } +<span class="lineNum"> 114 </span> : +<span class="lineNum"> 115 </span> : inline bool Source::isChanged( Token, PackageState s ) { +<span class="lineNum"> 116 </span> : return s.modify(); +<span class="lineNum"> 117 </span> : } +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span> : inline bool Source::isUpgradable( Token, PackageState s ) { +<span class="lineNum"> 120 </span> : return s.upgradable(); +<span class="lineNum"> 121 </span> : } +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span> : } +<span class="lineNum"> 124 </span> : } +<span class="lineNum"> 125 </span> : } +<span class="lineNum"> 126 </span> : +<span class="lineNum"> 127 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/record.cpp.gcov.html b/rep/ept/core/apt/record.cpp.gcov.html new file mode 100644 index 0000000..453b7a7 --- /dev/null +++ b/rep/ept/core/apt/record.cpp.gcov.html @@ -0,0 +1,83 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt/record.cpp</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/core/apt</a> - record.cpp</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">1</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">1</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : namespace ept { +<span class="lineNum"> 4 </span> : namespace core { +<span class="lineNum"> 5 </span> : namespace record { +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : // needs to be kept in sync with record::PropertyId, see apt.h +<span class="lineNum"> 8 </span> : const char *fields[] = { +<span class="lineNum"> 9 </span> : "", "Package", "Priority", "Section", "Installed-Size", +<span class="lineNum"> 10 </span> : "Maintainer", "Architecture", "Source", "Version", +<span class="lineNum"> 11 </span> : "Description", "", "", "Size" +<span class="lineNum"> 12 </span> : }; +<span class="lineNum"> 13 </span> : +<span class="lineNum"> 14 </span> : } +<span class="lineNum"> 15 </span> : } +<span class="lineNum"> 16 </span><span class="lineCov"> 3 : }</span> +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/record.h.gcov.html b/rep/ept/core/apt/record.h.gcov.html new file mode 100644 index 0000000..4e0e3a4 --- /dev/null +++ b/rep/ept/core/apt/record.h.gcov.html @@ -0,0 +1,355 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt/record.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/core/apt</a> - record.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">96</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">86.5 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">83</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : #include <ept/core/apt/recordparser.h> +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : #ifndef EPT_APT_RECORD_H +<span class="lineNum"> 6 </span> : #define EPT_APT_RECORD_H +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : namespace ept { +<span class="lineNum"> 9 </span> : namespace core { +<span class="lineNum"> 10 </span> : namespace record { +<span class="lineNum"> 11 </span> : +<span class="lineNum"> 12 </span> : struct Source; +<span class="lineNum"> 13 </span> : +<span class="lineNum"> 14 </span> : struct InternalList { +<span class="lineNum"> 15 </span> : Source *m_source; +<span class="lineNum"> 16 </span> : size_t m_idx; +<span class="lineNum"> 17 </span> : +<span class="lineNum"> 18 </span> : Internal head(); +<span class="lineNum"> 19 </span> : const Internal head() const; +<span class="lineNum"> 20 </span> : bool empty() const; +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span><span class="lineCov"> 870 : InternalList tail() const {</span> +<span class="lineNum"> 23 </span><span class="lineCov"> 870 : InternalList t = *this;</span> +<span class="lineNum"> 24 </span><span class="lineCov"> 870 : ++ t.m_idx;</span> +<span class="lineNum"> 25 </span> : return t; +<span class="lineNum"> 26 </span> : } +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span><span class="lineCov"> 2 : InternalList( Source &s )</span> +<span class="lineNum"> 29 </span><span class="lineCov"> 2 : : m_source( &s ), m_idx( 0 )</span> +<span class="lineNum"> 30 </span><span class="lineCov"> 2 : {}</span> +<span class="lineNum"> 31 </span> : }; +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : struct Setup { +<span class="lineNum"> 34 </span> : typedef ept::Token Token; +<span class="lineNum"> 35 </span> : typedef record::Internal Internal; +<span class="lineNum"> 36 </span> : typedef record::PropertyId PropertyId; +<span class="lineNum"> 37 </span> : typedef record::InternalList InternalList; +<span class="lineNum"> 38 </span> : }; +<span class="lineNum"> 39 </span> : +<span class="lineNum"> 40 </span> : template<> struct PropertyType< InstalledSize > { typedef int T; }; +<span class="lineNum"> 41 </span> : template<> struct PropertyType< PackageSize > { typedef int T; }; +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : struct Parser: RecordParser +<span class="lineNum"> 44 </span><span class="lineCov"> 1310 : {</span> +<span class="lineNum"> 45 </span> : bool parseBool(bool& def, const std::string& str) const +<span class="lineNum"> 46 </span> : { +<span class="lineNum"> 47 </span> : // Believe it or not, this is what apt does to interpret bool fields +<span class="lineNum"> 48 </span> : if (str == "no" || str == "false" || str == "without" || +<span class="lineNum"> 49 </span> : str == "off" || str == "disable") +<span class="lineNum"> 50 </span> : return false; +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span> : if (str == "yes" || str == "true" || str == "with" || +<span class="lineNum"> 53 </span> : str == "on" || str == "enable") +<span class="lineNum"> 54 </span> : return true; +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span> : return def; +<span class="lineNum"> 57 </span> : } +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span> : public: +<span class="lineNum"> 60 </span> : Parser() : RecordParser() {} +<span class="lineNum"> 61 </span><span class="lineCov"> 1310 : Parser(const std::string& str) : RecordParser(str) {}</span> +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : template< PropertyId p > +<span class="lineNum"> 64 </span> : typename PropertyType< p >::T parse( typename PropertyType< p >::T def, +<span class="lineNum"> 65 </span> : std::string data ); +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span> : template< typename T > +<span class="lineNum"> 68 </span> : struct Default { +<span class="lineNum"> 69 </span> : static T def; +<span class="lineNum"> 70 </span> : }; +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span> : template< typename T > T parse( const T &def, +<span class="lineNum"> 73 </span> : const std::string &field ) const; +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span> : template< PropertyId p > +<span class="lineNum"> 76 </span> : typename PropertyType< p >::T get( +<span class="lineNum"> 77 </span> : const typename PropertyType< p >::T &def +<span class="lineNum"> 78 </span><span class="lineCov"> 1308 : = Default< typename PropertyType< p >::T >::def ) const</span> +<span class="lineNum"> 79 </span> : { +<span class="lineNum"> 80 </span> : return parse< typename PropertyType< p >::T >( def, +<span class="lineNum"> 81 </span><span class="lineCov"> 1308 : lookup( fields[ p ] ) );</span> +<span class="lineNum"> 82 </span> : } +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span> : }; +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span><span class="lineCov"> 25 : template< typename T > T Parser::Default< T >::def = T();</span> +<span class="lineNum"> 87 </span> : +<span class="lineNum"> 88 </span> : template<> inline std::string Parser::get< ShortDescription >( +<span class="lineNum"> 89 </span><span class="lineCov"> 2 : const std::string& def ) const</span> +<span class="lineNum"> 90 </span> : { +<span class="lineNum"> 91 </span><span class="lineCov"> 2 : std::string str = lookup( fields[ Description ] );</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 4 : if (str == std::string())</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 1 : return def;</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 1 : size_t pos = str.find("\n");</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 1 : if (pos == std::string::npos)</span> +<span class="lineNum"> 96 </span><span class="lineNoCov"> 0 : return str;</span> +<span class="lineNum"> 97 </span> : else +<span class="lineNum"> 98 </span><span class="lineCov"> 1 : return str.substr(0, pos);</span> +<span class="lineNum"> 99 </span> : } +<span class="lineNum"> 100 </span> : +<span class="lineNum"> 101 </span> : template<> inline std::string Parser::get< LongDescription >( +<span class="lineNum"> 102 </span> : const std::string& def ) const +<span class="lineNum"> 103 </span> : { +<span class="lineNum"> 104 </span> : std::string str = lookup( fields[ Description ] ); +<span class="lineNum"> 105 </span> : if (str == std::string()) +<span class="lineNum"> 106 </span> : return def; +<span class="lineNum"> 107 </span> : size_t pos = str.find("\n"); +<span class="lineNum"> 108 </span> : if (pos == std::string::npos) +<span class="lineNum"> 109 </span> : return str; +<span class="lineNum"> 110 </span> : else +<span class="lineNum"> 111 </span> : { +<span class="lineNum"> 112 </span> : // Trim trailing spaces +<span class="lineNum"> 113 </span> : for (++pos; pos < str.size() && isspace(str[pos]); ++pos) +<span class="lineNum"> 114 </span> : ; +<span class="lineNum"> 115 </span> : return str.substr(pos); +<span class="lineNum"> 116 </span> : } +<span class="lineNum"> 117 </span> : } +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span> : template<> inline std::string Parser::parse< std::string >( +<span class="lineNum"> 120 </span><span class="lineCov"> 1307 : const std::string& def, const std::string& str) const</span> +<span class="lineNum"> 121 </span> : { +<span class="lineNum"> 122 </span><span class="lineCov"> 1307 : if (str == std::string())</span> +<span class="lineNum"> 123 </span><span class="lineNoCov"> 0 : return def;</span> +<span class="lineNum"> 124 </span><span class="lineCov"> 1307 : return str;</span> +<span class="lineNum"> 125 </span> : } +<span class="lineNum"> 126 </span> : +<span class="lineNum"> 127 </span> : template<> inline int Parser::parse< int >( +<span class="lineNum"> 128 </span><span class="lineCov"> 1 : const int& def, const std::string& str) const</span> +<span class="lineNum"> 129 </span> : { +<span class="lineNum"> 130 </span><span class="lineCov"> 1 : if (str == string())</span> +<span class="lineNum"> 131 </span><span class="lineNoCov"> 0 : return def;</span> +<span class="lineNum"> 132 </span><span class="lineCov"> 1 : return (size_t)strtoul(str.c_str(), NULL, 10);</span> +<span class="lineNum"> 133 </span> : } +<span class="lineNum"> 134 </span> : +<span class="lineNum"> 135 </span> : struct Source : core::Source< Source, Setup, PropertyType > +<span class="lineNum"> 136 </span><span class="lineCov"> 6 : {</span> +<span class="lineNum"> 137 </span> : AptDatabase &m_db; +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span> : /* caching */ +<span class="lineNum"> 140 </span> : pkgCache::PkgFileIterator lastFile; +<span class="lineNum"> 141 </span> : FileFd file; +<span class="lineNum"> 142 </span> : size_t lastOffset; +<span class="lineNum"> 143 </span> : +<span class="lineNum"> 144 </span> : /* in-order retrieval of records, for InternalList */ +<span class="lineNum"> 145 </span> : typedef vector< pkgCache::VerFile * > VfList; +<span class="lineNum"> 146 </span> : VfList m_vflist; +<span class="lineNum"> 147 </span> : +<span class="lineNum"> 148 </span><span class="lineCov"> 1742 : VfList &vfList() {</span> +<span class="lineNum"> 149 </span><span class="lineCov"> 1742 : if ( m_vflist.size() > 0 )</span> +<span class="lineNum"> 150 </span><span class="lineCov"> 1741 : return m_vflist;</span> +<span class="lineNum"> 151 </span> : +<span class="lineNum"> 152 </span><span class="lineCov"> 1 : m_vflist.reserve(m_db.cache().HeaderP->PackageCount + 1);</span> +<span class="lineNum"> 153 </span> : +<span class="lineNum"> 154 </span> : // Populate the vector of versions to print +<span class="lineNum"> 155 </span><span class="lineCov"> 3778 : for (pkgCache::PkgIterator pi = m_db.cache().PkgBegin(); !pi.end(); ++pi)</span> +<span class="lineNum"> 156 </span> : { +<span class="lineNum"> 157 </span><span class="lineCov"> 3777 : if (pi->VersionList == 0)</span> +<span class="lineNum"> 158 </span><span class="lineCov"> 1989 : continue;</span> +<span class="lineNum"> 159 </span> : +<span class="lineNum"> 160 </span><span class="lineCov"> 3596 : for( pkgCache::VerIterator vi = pi.VersionList(); !vi.end(); ++vi ) {</span> +<span class="lineNum"> 161 </span> : +<span class="lineNum"> 162 </span> : // Choose a valid file that contains the record for this version +<span class="lineNum"> 163 </span><span class="lineCov"> 1808 : pkgCache::VerFileIterator vfi = vi.FileList();</span> +<span class="lineNum"> 164 </span><span class="lineCov"> 3181 : for ( ; !vfi.end(); ++vfi )</span> +<span class="lineNum"> 165 </span><span class="lineCov"> 1808 : if ((vfi.File()->Flags & pkgCache::Flag::NotSource) == 0)</span> +<span class="lineNum"> 166 </span><span class="lineCov"> 435 : break;</span> +<span class="lineNum"> 167 </span> : +<span class="lineNum"> 168 </span><span class="lineCov"> 1808 : if ( !vfi.end() )</span> +<span class="lineNum"> 169 </span><span class="lineCov"> 435 : m_vflist.push_back( vfi );</span> +<span class="lineNum"> 170 </span> : } +<span class="lineNum"> 171 </span> : } +<span class="lineNum"> 172 </span> : +<span class="lineNum"> 173 </span><span class="lineCov"> 1 : sort(m_vflist.begin(), m_vflist.end(), localityCompare);</span> +<span class="lineNum"> 174 </span><span class="lineCov"> 1 : return m_vflist;</span> +<span class="lineNum"> 175 </span> : } +<span class="lineNum"> 176 </span> : +<span class="lineNum"> 177 </span><span class="lineCov"> 6 : Source( AptDatabase &db ) : m_db( db ) {}</span> +<span class="lineNum"> 178 </span> : +<span class="lineNum"> 179 </span><span class="lineCov"> 2 : InternalList listInternal() {</span> +<span class="lineNum"> 180 </span><span class="lineCov"> 2 : return InternalList( *this );</span> +<span class="lineNum"> 181 </span> : } +<span class="lineNum"> 182 </span> : +<span class="lineNum"> 183 </span><span class="lineCov"> 5 : Internal lookupToken( Token t ) {</span> +<span class="lineNum"> 184 </span><span class="lineCov"> 5 : return m_db.lookupVersionFile( m_db.lookupVersion( t ) );</span> +<span class="lineNum"> 185 </span> : } +<span class="lineNum"> 186 </span> : +<span class="lineNum"> 187 </span> : // Sort a version list by package file locality +<span class="lineNum"> 188 </span> : static bool localityCompare(const pkgCache::VerFile* a, +<span class="lineNum"> 189 </span><span class="lineCov"> 4371 : const pkgCache::VerFile* b)</span> +<span class="lineNum"> 190 </span> : { +<span class="lineNum"> 191 </span><span class="lineCov"> 4371 : if (a == 0 && b == 0)</span> +<span class="lineNum"> 192 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 193 </span><span class="lineCov"> 4371 : if (a == 0)</span> +<span class="lineNum"> 194 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 195 </span><span class="lineCov"> 4371 : if (b == 0)</span> +<span class="lineNum"> 196 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 197 </span> : +<span class="lineNum"> 198 </span><span class="lineCov"> 4371 : if (a->File == b->File)</span> +<span class="lineNum"> 199 </span><span class="lineCov"> 4371 : return a->Offset < b->Offset;</span> +<span class="lineNum"> 200 </span><span class="lineNoCov"> 0 : return a->File < b->File;</span> +<span class="lineNum"> 201 </span> : } +<span class="lineNum"> 202 </span> : +<span class="lineNum"> 203 </span> : void invalidate() { +<span class="lineNum"> 204 </span> : core::Source< Source, Setup, PropertyType >::invalidate(); +<span class="lineNum"> 205 </span> : lastFile = pkgCache::PkgFileIterator(); +<span class="lineNum"> 206 </span> : } +<span class="lineNum"> 207 </span> : +<span class="lineNum"> 208 </span><span class="lineCov"> 1311 : std::string getRecord( Internal vfi ) {</span> +<span class="lineNum"> 209 </span><span class="lineCov"> 1311 : if ( vfi.Cache() == 0 || vfi.end() )</span> +<span class="lineNum"> 210 </span><span class="lineCov"> 1 : return "";</span> +<span class="lineNum"> 211 </span> : +<span class="lineNum"> 212 </span><span class="lineCov"> 1310 : if ((lastFile.Cache() == 0)</span> +<span class="lineNum"> 213 </span> : || vfi->File + m_db.cache().PkgFileP != lastFile) +<span class="lineNum"> 214 </span> : { +<span class="lineNum"> 215 </span> : lastFile = pkgCache::PkgFileIterator( +<span class="lineNum"> 216 </span><span class="lineCov"> 5 : m_db.cache(), vfi->File + m_db.cache().PkgFileP);</span> +<span class="lineNum"> 217 </span><span class="lineCov"> 5 : if (!lastFile.IsOk())</span> +<span class="lineNum"> 218 </span> : throw wibble::exception::System( +<span class="lineNum"> 219 </span> : std::string("Reading the" +<span class="lineNum"> 220 </span> : " data record for a package from file ") +<span class="lineNum"> 221 </span><span class="lineNoCov"> 0 : + lastFile.FileName() );</span> +<span class="lineNum"> 222 </span><span class="lineCov"> 5 : if (file.IsOpen())</span> +<span class="lineNum"> 223 </span><span class="lineNoCov"> 0 : file.Close();</span> +<span class="lineNum"> 224 </span><span class="lineCov"> 5 : if (!file.Open(lastFile.FileName(), FileFd::ReadOnly))</span> +<span class="lineNum"> 225 </span> : throw wibble::exception::System( std::string("Opening file ") +<span class="lineNum"> 226 </span><span class="lineNoCov"> 0 : + lastFile.FileName() );</span> +<span class="lineNum"> 227 </span><span class="lineCov"> 5 : lastOffset = 0;</span> +<span class="lineNum"> 228 </span> : } +<span class="lineNum"> 229 </span> : +<span class="lineNum"> 230 </span> : // If we start near were we ended, avoid a seek +<span class="lineNum"> 231 </span> : // and enlarge the read a bit +<span class="lineNum"> 232 </span><span class="lineCov"> 1310 : size_t slack = vfi->Offset - lastOffset;</span> +<span class="lineNum"> 233 </span><span class="lineCov"> 1310 : if ( slack > 128 ) // mornfall: was 8, making it 128</span> +<span class="lineNum"> 234 </span> : { +<span class="lineNum"> 235 </span><span class="lineCov"> 871 : slack = 0;</span> +<span class="lineNum"> 236 </span><span class="lineCov"> 871 : if ( !file.Seek( vfi->Offset ) )</span> +<span class="lineNum"> 237 </span> : throw wibble::exception::System( +<span class="lineNum"> 238 </span> : std::string("Cannot seek to package record in file ") +<span class="lineNum"> 239 </span><span class="lineNoCov"> 0 : + lastFile.FileName() );</span> +<span class="lineNum"> 240 </span> : } +<span class="lineNum"> 241 </span> : +<span class="lineNum"> 242 </span><span class="lineCov"> 1310 : char buffer[vfi->Size + slack + 1];</span> +<span class="lineNum"> 243 </span><span class="lineCov"> 1310 : if (!file.Read(buffer, vfi->Size + slack))</span> +<span class="lineNum"> 244 </span> : throw wibble::exception::System( +<span class="lineNum"> 245 </span> : std::string("Cannot read package " +<span class="lineNum"> 246 </span><span class="lineNoCov"> 0 : "record in file ") + lastFile.FileName() );</span> +<span class="lineNum"> 247 </span> : +<span class="lineNum"> 248 </span><span class="lineCov"> 1310 : buffer[vfi->Size + slack] = '\0';</span> +<span class="lineNum"> 249 </span> : //cerr << "Data read (slack: " << slack << ")" << endl; +<span class="lineNum"> 250 </span> : +<span class="lineNum"> 251 </span><span class="lineCov"> 1310 : lastOffset = vfi->Offset + vfi->Size;</span> +<span class="lineNum"> 252 </span> : +<span class="lineNum"> 253 </span><span class="lineCov"> 1310 : return string(buffer+slack);</span> +<span class="lineNum"> 254 </span> : } +<span class="lineNum"> 255 </span> : +<span class="lineNum"> 256 </span><span class="lineCov"> 435 : Token getToken( Internal i ) {</span> +<span class="lineNum"> 257 </span><span class="lineCov"> 435 : Token t;</span> +<span class="lineNum"> 258 </span><span class="lineCov"> 435 : t._id = getInternal< Name >( i ) + "_" + getInternal< Version >( i );</span> +<span class="lineNum"> 259 </span><span class="lineNoCov"> 0 : return t;</span> +<span class="lineNum"> 260 </span> : } +<span class="lineNum"> 261 </span> : +<span class="lineNum"> 262 </span> : template< PropertyId p > +<span class="lineNum"> 263 </span><span class="lineCov"> 1310 : typename PropertyType< p >::T getInternal( Internal i ) {</span> +<span class="lineNum"> 264 </span><span class="lineCov"> 1310 : Parser rec( getRecord( i ) );</span> +<span class="lineNum"> 265 </span><span class="lineCov"> 1310 : return rec.get< p >();</span> +<span class="lineNum"> 266 </span> : } +<span class="lineNum"> 267 </span> : }; +<span class="lineNum"> 268 </span> : +<span class="lineNum"> 269 </span><span class="lineCov"> 1 : template<> inline std::string Source::getInternal< Record >( Internal i ) {</span> +<span class="lineNum"> 270 </span><span class="lineCov"> 1 : assert( !i.end() );</span> +<span class="lineNum"> 271 </span><span class="lineCov"> 1 : return getRecord( i );</span> +<span class="lineNum"> 272 </span> : } +<span class="lineNum"> 273 </span> : +<span class="lineNum"> 274 </span><span class="lineCov"> 870 : inline const Internal InternalList::head() const {</span> +<span class="lineNum"> 275 </span> : return pkgCache::VerFileIterator( m_source->m_db.cache(), +<span class="lineNum"> 276 </span><span class="lineCov"> 870 : m_source->vfList()[ m_idx ] );</span> +<span class="lineNum"> 277 </span> : } +<span class="lineNum"> 278 </span> : +<span class="lineNum"> 279 </span><span class="lineCov"> 872 : inline bool InternalList::empty() const {</span> +<span class="lineNum"> 280 </span><span class="lineCov"> 872 : return m_idx == m_source->vfList().size();</span> +<span class="lineNum"> 281 </span> : } +<span class="lineNum"> 282 </span> : +<span class="lineNum"> 283 </span> : +<span class="lineNum"> 284 </span> : } +<span class="lineNum"> 285 </span> : } +<span class="lineNum"> 286 </span> : } +<span class="lineNum"> 287 </span> : +<span class="lineNum"> 288 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/record.test.h.gcov.html b/rep/ept/core/apt/record.test.h.gcov.html new file mode 100644 index 0000000..afee746 --- /dev/null +++ b/rep/ept/core/apt/record.test.h.gcov.html @@ -0,0 +1,123 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt/record.test.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/core/apt</a> - record.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">29</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">29</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : #include <ept/test.h> +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : using namespace ept::core; +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : struct TestAptRecord : AptTestEnvironment +<span class="lineNum"> 9 </span><span class="lineCov"> 6 : {</span> +<span class="lineNum"> 10 </span> : record::Source recs; +<span class="lineNum"> 11 </span> : ept::Token t; +<span class="lineNum"> 12 </span> : +<span class="lineNum"> 13 </span><span class="lineCov"> 6 : TestAptRecord() : recs( db ) {</span> +<span class="lineNum"> 14 </span><span class="lineCov"> 6 : t._id = "sp";</span> +<span class="lineNum"> 15 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 16 </span> : +<span class="lineNum"> 17 </span><span class="lineCov"> 1 : Test checkLookup() {</span> +<span class="lineNum"> 18 </span><span class="lineCov"> 1 : recs.get< record::Record >( t );</span> +<span class="lineNum"> 19 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span><span class="lineCov"> 1 : Test checkLookupValue() {</span> +<span class="lineNum"> 22 </span><span class="lineCov"> 1 : assert_eq( recs.get< record::Name >( t ), t.package() );</span> +<span class="lineNum"> 23 </span> : assert_eq( recs.get< record::Maintainer >( t ), +<span class="lineNum"> 24 </span><span class="lineCov"> 2 : "Neil Roeth <neil@debian.org>" );</span> +<span class="lineNum"> 25 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span><span class="lineCov"> 1 : Test checkLookupNumeric() {</span> +<span class="lineNum"> 28 </span> : assert_eq( recs.get< record::InstalledSize >( t ), +<span class="lineNum"> 29 </span><span class="lineCov"> 1 : 600 );</span> +<span class="lineNum"> 30 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span><span class="lineCov"> 1 : Test checkShortDescription() {</span> +<span class="lineNum"> 33 </span> : assert_eq( recs.get< record::ShortDescription >( t ), +<span class="lineNum"> 34 </span><span class="lineCov"> 1 : "James Clark's SGML parsing tools" );</span> +<span class="lineNum"> 35 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : template< typename List > +<span class="lineNum"> 38 </span><span class="lineCov"> 1 : void checkRecordNameList( List l ) {</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 437 : while ( !l.empty() ) {</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 435 : assert_eq( l.property(), l.token().package() );</span> +<span class="lineNum"> 41 </span><span class="lineCov"> 435 : l = l.tail();</span> +<span class="lineNum"> 42 </span> : } +<span class="lineNum"> 43 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span><span class="lineCov"> 1 : Test checkList() {</span> +<span class="lineNum"> 46 </span> : // there are 435 valid records in the list file +<span class="lineNum"> 47 </span> : assert_eq( list::count( recs.list< +<span class="lineNum"> 48 </span><span class="lineCov"> 1 : record::Name >() ), 435 );</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 1 : checkRecordNameList( recs.list< record::Name >() );</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span><span class="lineCov"> 1 : Test nonexistent() {</span> +<span class="lineNum"> 53 </span> : assert_eq( recs.get< record::ShortDescription >( +<span class="lineNum"> 54 </span><span class="lineCov"> 1 : ept::Token( "nonexistent-package" ) ), "" );</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 56 </span> : }; +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/recordparser.cpp.gcov.html b/rep/ept/core/apt/recordparser.cpp.gcov.html new file mode 100644 index 0000000..de47e25 --- /dev/null +++ b/rep/ept/core/apt/recordparser.cpp.gcov.html @@ -0,0 +1,239 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt/recordparser.cpp</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/core/apt</a> - recordparser.cpp</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">62</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">95.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">59</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** \file +<span class="lineNum"> 2 </span> : * Parser for APT records +<span class="lineNum"> 3 </span> : */ +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /* +<span class="lineNum"> 6 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 7 </span> : * +<span class="lineNum"> 8 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 9 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 10 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 11 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 12 </span> : * +<span class="lineNum"> 13 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 14 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 15 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 16 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 17 </span> : * +<span class="lineNum"> 18 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 19 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 20 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 21 </span> : */ +<span class="lineNum"> 22 </span> : +<span class="lineNum"> 23 </span> : #include <ept/core/apt/recordparser.h> +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <algorithm> +<span class="lineNum"> 26 </span> : #include <cctype> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : //#include <iostream> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : using namespace std; +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : namespace ept { +<span class="lineNum"> 33 </span> : namespace core { +<span class="lineNum"> 34 </span> : namespace record { +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : struct rpcompare +<span class="lineNum"> 37 </span> : { +<span class="lineNum"> 38 </span> : const RecordParser& rp; +<span class="lineNum"> 39 </span><span class="lineCov"> 1310 : rpcompare(const RecordParser& rp) : rp(rp) {}</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 89600 : bool operator()(size_t a, size_t b)</span> +<span class="lineNum"> 41 </span> : { +<span class="lineNum"> 42 </span><span class="lineCov"> 89600 : return rp.name(a) < rp.name(b);</span> +<span class="lineNum"> 43 </span> : } +<span class="lineNum"> 44 </span> : }; +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span><span class="lineCov"> 1310 : void RecordParser::scan(const std::string& str)</span> +<span class="lineNum"> 47 </span> : { +<span class="lineNum"> 48 </span><span class="lineCov"> 1310 : buffer = str;</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 1310 : ends.clear();</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 1310 : sorted.clear();</span> +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span> : //cerr << "PARSE " << endl << buffer << "*****" << endl; +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span> : // Scan the buffer, taking note of all ending offsets of the various fields +<span class="lineNum"> 55 </span><span class="lineCov"> 1310 : size_t pos = 0;</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 1310 : size_t idx = 0;</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 29815 : while (pos < buffer.size() - 1)</span> +<span class="lineNum"> 58 </span> : { +<span class="lineNum"> 59 </span> : //cerr << "PREPOS " << pos << " left: " << buffer.substr(pos, 10) << endl; +<span class="lineNum"> 60 </span><span class="lineCov"> 28505 : pos = buffer.find("\n", pos);</span> +<span class="lineNum"> 61 </span> : //cerr << "POSTPOS " << pos << " left: " << (pos == string::npos ? "NONE" : buffer.substr(pos, 10)) << endl; +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : // The buffer does not end with a newline +<span class="lineNum"> 64 </span><span class="lineCov"> 28505 : if (pos == string::npos)</span> +<span class="lineNum"> 65 </span> : { +<span class="lineNum"> 66 </span> : //cerr << "ENDNOTEOL" << endl; +<span class="lineNum"> 67 </span><span class="lineCov"> 1 : pos = buffer.size();</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 1 : ends.push_back(pos);</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 1 : sorted.push_back(idx++);</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 1 : break;</span> +<span class="lineNum"> 71 </span> : } +<span class="lineNum"> 72 </span> : +<span class="lineNum"> 73 </span><span class="lineCov"> 28504 : ++pos;</span> +<span class="lineNum"> 74 </span> : //cerr << "POSTPOSINC " << pos << " left: " << buffer.substr(pos, 10) << endl; +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span> : // The buffer ends with a newline +<span class="lineNum"> 77 </span><span class="lineCov"> 28504 : if (pos == buffer.size())</span> +<span class="lineNum"> 78 </span> : { +<span class="lineNum"> 79 </span> : //cerr << "ENDEOL" << endl; +<span class="lineNum"> 80 </span><span class="lineCov"> 1309 : ends.push_back(pos);</span> +<span class="lineNum"> 81 </span><span class="lineCov"> 1309 : sorted.push_back(idx++);</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 1309 : break;</span> +<span class="lineNum"> 83 </span> : } +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span> : // Terminate parsing on double newlines +<span class="lineNum"> 86 </span><span class="lineCov"> 27195 : if (buffer[pos] == '\n')</span> +<span class="lineNum"> 87 </span> : { +<span class="lineNum"> 88 </span> : //cerr << "ENDDOUBLENL" << endl; +<span class="lineNum"> 89 </span><span class="lineNoCov"> 0 : ends.push_back(pos);</span> +<span class="lineNum"> 90 </span><span class="lineNoCov"> 0 : sorted.push_back(idx++);</span> +<span class="lineNum"> 91 </span><span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 92 </span> : } +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span> : // Mark the end of the field if it's not a continuation line +<span class="lineNum"> 95 </span><span class="lineCov"> 27195 : if (!isspace(buffer[pos]))</span> +<span class="lineNum"> 96 </span> : { +<span class="lineNum"> 97 </span> : //cerr << "INNERFIELD" << endl; +<span class="lineNum"> 98 </span><span class="lineCov"> 17224 : ends.push_back(pos);</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 17224 : sorted.push_back(idx++);</span> +<span class="lineNum"> 100 </span> : } //else +<span class="lineNum"> 101 </span> : //cerr << "CONTLINE" << endl; +<span class="lineNum"> 102 </span> : } +<span class="lineNum"> 103 </span> : +<span class="lineNum"> 104 </span> : // Sort the sorted array +<span class="lineNum"> 105 </span><span class="lineCov"> 1310 : sort(sorted.begin(), sorted.end(), rpcompare(*this));</span> +<span class="lineNum"> 106 </span> : +<span class="lineNum"> 107 </span> : //for (size_t i = 0; i < ends.size(); ++i) +<span class="lineNum"> 108 </span> : // cerr << ends[i] << "\t" << name(i) << "\t" << sorted[i] << "\t" << name(sorted[i]) << endl; +<span class="lineNum"> 109 </span><span class="lineCov"> 1310 : }</span> +<span class="lineNum"> 110 </span> : +<span class="lineNum"> 111 </span><span class="lineCov"> 187124 : std::string RecordParser::field(size_t idx) const</span> +<span class="lineNum"> 112 </span> : { +<span class="lineNum"> 113 </span><span class="lineCov"> 187124 : if (idx >= ends.size())</span> +<span class="lineNum"> 114 </span><span class="lineCov"> 1 : return string();</span> +<span class="lineNum"> 115 </span><span class="lineCov"> 187123 : if (idx == 0)</span> +<span class="lineNum"> 116 </span><span class="lineCov"> 16577 : return buffer.substr(0, ends[0]);</span> +<span class="lineNum"> 117 </span> : else +<span class="lineNum"> 118 </span><span class="lineCov"> 170546 : return buffer.substr(ends[idx-1], ends[idx]-ends[idx-1]);</span> +<span class="lineNum"> 119 </span> : } +<span class="lineNum"> 120 </span> : +<span class="lineNum"> 121 </span><span class="lineCov"> 185814 : std::string RecordParser::name(size_t idx) const</span> +<span class="lineNum"> 122 </span> : { +<span class="lineNum"> 123 </span><span class="lineCov"> 185814 : string res = field(idx);</span> +<span class="lineNum"> 124 </span><span class="lineCov"> 185814 : size_t pos = res.find(":");</span> +<span class="lineNum"> 125 </span><span class="lineCov"> 185814 : if (pos == string::npos)</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 2 : return res;</span> +<span class="lineNum"> 127 </span><span class="lineCov"> 185812 : return res.substr(0, pos);</span> +<span class="lineNum"> 128 </span> : } +<span class="lineNum"> 129 </span> : +<span class="lineNum"> 130 </span><span class="lineCov"> 1310 : std::string RecordParser::lookup(size_t idx) const</span> +<span class="lineNum"> 131 </span> : { +<span class="lineNum"> 132 </span><span class="lineCov"> 1310 : string res = field(idx);</span> +<span class="lineNum"> 133 </span><span class="lineCov"> 1310 : size_t pos = res.find(":");</span> +<span class="lineNum"> 134 </span><span class="lineCov"> 1310 : if (pos == string::npos)</span> +<span class="lineNum"> 135 </span><span class="lineCov"> 1 : return res;</span> +<span class="lineNum"> 136 </span> : // Skip initial whitespace after the : +<span class="lineNum"> 137 </span><span class="lineCov"> 1309 : for (++pos; pos < res.size() && isspace(res[pos]); ++pos)</span> +<span class="lineNum"> 138 </span> : ; +<span class="lineNum"> 139 </span><span class="lineCov"> 1309 : res = res.substr(pos);</span> +<span class="lineNum"> 140 </span> : // Trim spaces at the end +<span class="lineNum"> 141 </span><span class="lineCov"> 3927 : while (!res.empty() && isspace(res[res.size() - 1]))</span> +<span class="lineNum"> 142 </span><span class="lineCov"> 1309 : res.resize(res.size() - 1);</span> +<span class="lineNum"> 143 </span><span class="lineCov"> 1309 : return res;</span> +<span class="lineNum"> 144 </span> : } +<span class="lineNum"> 145 </span> : +<span class="lineNum"> 146 </span><span class="lineCov"> 1310 : size_t RecordParser::index(const std::string& str) const</span> +<span class="lineNum"> 147 </span> : { +<span class="lineNum"> 148 </span> : int begin, end; +<span class="lineNum"> 149 </span> : +<span class="lineNum"> 150 </span> : /* Binary search */ +<span class="lineNum"> 151 </span><span class="lineCov"> 1310 : begin = -1, end = size();</span> +<span class="lineNum"> 152 </span><span class="lineCov"> 7924 : while (end - begin > 1)</span> +<span class="lineNum"> 153 </span> : { +<span class="lineNum"> 154 </span><span class="lineCov"> 5304 : int cur = (end + begin) / 2;</span> +<span class="lineNum"> 155 </span> : //cerr << "Test " << cur << " " << str << " < " << name(cur) << endl; +<span class="lineNum"> 156 </span><span class="lineCov"> 5304 : if (name(sorted[cur]) > str)</span> +<span class="lineNum"> 157 </span><span class="lineCov"> 1724 : end = cur;</span> +<span class="lineNum"> 158 </span> : else +<span class="lineNum"> 159 </span><span class="lineCov"> 3580 : begin = cur;</span> +<span class="lineNum"> 160 </span> : } +<span class="lineNum"> 161 </span> : +<span class="lineNum"> 162 </span><span class="lineCov"> 1310 : if (begin == -1 || name(sorted[begin]) != str)</span> +<span class="lineNum"> 163 </span><span class="lineCov"> 1 : return size();</span> +<span class="lineNum"> 164 </span> : else +<span class="lineNum"> 165 </span><span class="lineCov"> 1309 : return sorted[begin];</span> +<span class="lineNum"> 166 </span> : } +<span class="lineNum"> 167 </span> : +<span class="lineNum"> 168 </span> : } +<span class="lineNum"> 169 </span> : } +<span class="lineNum"> 170 </span> : } +<span class="lineNum"> 171 </span> : +<span class="lineNum"> 172 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/recordparser.h.gcov.html b/rep/ept/core/apt/recordparser.h.gcov.html new file mode 100644 index 0000000..13eb803 --- /dev/null +++ b/rep/ept/core/apt/recordparser.h.gcov.html @@ -0,0 +1,165 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt/recordparser.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/core/apt</a> - recordparser.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">4</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">4</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #ifndef EPT_CORE_APT_RECORDPARSER_H +<span class="lineNum"> 3 </span> : #define EPT_CORE_APT_RECORDPARSER_H +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /** \file +<span class="lineNum"> 6 </span> : * Parser for APT records +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 13 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 14 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 15 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 20 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 23 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <vector> +<span class="lineNum"> 28 </span> : #include <string> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : namespace ept { +<span class="lineNum"> 31 </span> : namespace core { +<span class="lineNum"> 32 </span> : namespace record { +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : /** +<span class="lineNum"> 35 </span> : * Access the fields of a package record contained inside a std::string. +<span class="lineNum"> 36 </span> : * +<span class="lineNum"> 37 </span> : * Implementation note: this implementation should take advantage of +<span class="lineNum"> 38 </span> : * std::string sharing buffer space among them. +<span class="lineNum"> 39 </span> : */ +<span class="lineNum"> 40 </span> : class RecordParser +<span class="lineNum"> 41 </span><span class="lineCov"> 1310 : {</span> +<span class="lineNum"> 42 </span> : /// Buffer containing the whole record +<span class="lineNum"> 43 </span> : std::string buffer; +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span> : /// End offsets of the various fields in the record +<span class="lineNum"> 46 </span> : std::vector<size_t> ends; +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span> : /// Indexes on the ends vector, sorted by field name +<span class="lineNum"> 49 </span> : std::vector<size_t> sorted; +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span> : public: +<span class="lineNum"> 52 </span> : RecordParser() {} +<span class="lineNum"> 53 </span><span class="lineCov"> 1310 : RecordParser(const std::string& str) { scan(str); }</span> +<span class="lineNum"> 54 </span> : +<span class="lineNum"> 55 </span> : /// Index a new record +<span class="lineNum"> 56 </span> : void scan(const std::string& str); +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span> : /** +<span class="lineNum"> 59 </span> : * Get the index of the field with the given name. +<span class="lineNum"> 60 </span> : * +<span class="lineNum"> 61 </span> : * size() is returned if not found +<span class="lineNum"> 62 </span> : */ +<span class="lineNum"> 63 </span> : size_t index(const std::string& str) const; +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span> : /// Return the field by its index +<span class="lineNum"> 66 </span> : std::string field(size_t idx) const; +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span> : /// Return the name of a field by its index +<span class="lineNum"> 69 </span> : std::string name(size_t idx) const; +<span class="lineNum"> 70 </span> : +<span class="lineNum"> 71 </span> : /// Return the content of a field by its index +<span class="lineNum"> 72 </span> : std::string lookup(size_t idx) const; +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span> : /// Return the content of a field by its name +<span class="lineNum"> 75 </span><span class="lineCov"> 1310 : std::string lookup(const std::string& name) const { return lookup(index(name)); }</span> +<span class="lineNum"> 76 </span> : +<span class="lineNum"> 77 </span> : /// Return the content of a field by its index +<span class="lineNum"> 78 </span> : std::string operator[](size_t idx) const { return lookup(idx); } +<span class="lineNum"> 79 </span> : +<span class="lineNum"> 80 </span> : /// Return the content of a field by its name +<span class="lineNum"> 81 </span> : std::string operator[](const std::string& name) const { return lookup(name); } +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span> : /// Return the entire record +<span class="lineNum"> 84 </span> : const std::string& record() const { return buffer; } +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span> : /// Return the entire record +<span class="lineNum"> 87 </span> : std::string record() { return buffer; } +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span> : /// Return the number of fields in the record +<span class="lineNum"> 90 </span><span class="lineCov"> 1311 : size_t size() const { return ends.size(); }</span> +<span class="lineNum"> 91 </span> : }; +<span class="lineNum"> 92 </span> : +<span class="lineNum"> 93 </span> : } +<span class="lineNum"> 94 </span> : } +<span class="lineNum"> 95 </span> : } +<span class="lineNum"> 96 </span> : +<span class="lineNum"> 97 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 98 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/apt/version.h.gcov.html b/rep/ept/core/apt/version.h.gcov.html new file mode 100644 index 0000000..b17fdfb --- /dev/null +++ b/rep/ept/core/apt/version.h.gcov.html @@ -0,0 +1,160 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/apt/version.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/core/apt</a> - version.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">32</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">93.8 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">30</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #ifndef EPT_CORE_APT_VERSION_H +<span class="lineNum"> 3 </span> : #define EPT_CORE_APT_VERSION_H +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : namespace ept { +<span class="lineNum"> 6 </span> : namespace core { +<span class="lineNum"> 7 </span> : namespace version { +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span><span class="lineCov"> 3616 : struct InternalList {</span> +<span class="lineNum"> 10 </span> : package::Internal m_pkg; +<span class="lineNum"> 11 </span> : Internal m_ver; +<span class="lineNum"> 12 </span> : +<span class="lineNum"> 13 </span> : typedef Internal Type; +<span class="lineNum"> 14 </span> : +<span class="lineNum"> 15 </span><span class="lineCov"> 3616 : InternalList tail() const {</span> +<span class="lineNum"> 16 </span><span class="lineCov"> 3616 : InternalList t = *this;</span> +<span class="lineNum"> 17 </span><span class="lineCov"> 3616 : t.m_ver ++;</span> +<span class="lineNum"> 18 </span><span class="lineCov"> 3616 : t.seek();</span> +<span class="lineNum"> 19 </span> : return t; +<span class="lineNum"> 20 </span> : } +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span><span class="lineCov"> 5424 : const Internal head() const {</span> +<span class="lineNum"> 23 </span><span class="lineCov"> 5424 : return m_ver;</span> +<span class="lineNum"> 24 </span> : } +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : Internal head() { +<span class="lineNum"> 27 </span> : return m_ver; +<span class="lineNum"> 28 </span> : } +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span><span class="lineCov"> 3618 : bool empty() const {</span> +<span class="lineNum"> 31 </span><span class="lineCov"> 3618 : return m_pkg.end();</span> +<span class="lineNum"> 32 </span> : } +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span><span class="lineCov"> 3618 : void seek()</span> +<span class="lineNum"> 35 </span> : { +<span class="lineNum"> 36 </span><span class="lineCov"> 14790 : while ( m_ver.end() && !m_pkg.end() ) {</span> +<span class="lineNum"> 37 </span><span class="lineCov"> 7554 : m_pkg ++;</span> +<span class="lineNum"> 38 </span><span class="lineCov"> 7554 : m_ver = m_pkg.VersionList();</span> +<span class="lineNum"> 39 </span> : } +<span class="lineNum"> 40 </span><span class="lineCov"> 3618 : }</span> +<span class="lineNum"> 41 </span> : +<span class="lineNum"> 42 </span><span class="lineCov"> 2 : InternalList( package::Internal i )</span> +<span class="lineNum"> 43 </span><span class="lineCov"> 2 : : m_pkg( i )</span> +<span class="lineNum"> 44 </span> : { +<span class="lineNum"> 45 </span><span class="lineCov"> 2 : m_ver = m_pkg.VersionList();</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 2 : seek();</span> +<span class="lineNum"> 47 </span><span class="lineCov"> 2 : }</span> +<span class="lineNum"> 48 </span> : }; +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : struct Setup { +<span class="lineNum"> 51 </span> : typedef ept::Token Token; +<span class="lineNum"> 52 </span> : typedef version::Internal Internal; +<span class="lineNum"> 53 </span> : typedef version::PropertyId PropertyId; +<span class="lineNum"> 54 </span> : typedef version::InternalList InternalList; +<span class="lineNum"> 55 </span> : }; +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span> : struct Source : core::Source< Source, Setup, PropertyType > +<span class="lineNum"> 58 </span><span class="lineCov"> 12 : {</span> +<span class="lineNum"> 59 </span> : AptDatabase &m_db; +<span class="lineNum"> 60 </span><span class="lineCov"> 12 : Source( AptDatabase &db ) : m_db( db ) {}</span> +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span><span class="lineCov"> 2 : InternalList listInternal() {</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 2 : return InternalList( m_db.cache().PkgBegin() );</span> +<span class="lineNum"> 64 </span> : } +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span><span class="lineCov"> 1808 : Token getToken( Internal i ) {</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 1808 : Token t;</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 1808 : t._id = std::string( i.ParentPkg().Name() ) + "_" + i.VerStr();</span> +<span class="lineNum"> 69 </span><span class="lineNoCov"> 0 : return t;</span> +<span class="lineNum"> 70 </span> : } +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span> : Internal lookupToken( Token t ) { +<span class="lineNum"> 73 </span> : return m_db.lookupVersion( t ); +<span class="lineNum"> 74 </span> : } +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span> : template< PropertyId p > +<span class="lineNum"> 77 </span> : typename PropertyType< p >::T getInternal( Internal ); +<span class="lineNum"> 78 </span> : }; +<span class="lineNum"> 79 </span> : +<span class="lineNum"> 80 </span> : template<> struct PropertyType< Package > { typedef Token T; }; +<span class="lineNum"> 81 </span> : +<span class="lineNum"> 82 </span><span class="lineCov"> 3616 : template<> inline Token Source::getInternal< Package >( Internal i ) {</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 3616 : assert( !i.end() );</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 3616 : Token t;</span> +<span class="lineNum"> 85 </span><span class="lineCov"> 7232 : t._id = i.ParentPkg().Name();</span> +<span class="lineNum"> 86 </span><span class="lineNoCov"> 0 : return t;</span> +<span class="lineNum"> 87 </span> : } +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span> : } +<span class="lineNum"> 90 </span> : } +<span class="lineNum"> 91 </span> : } +<span class="lineNum"> 92 </span> : +<span class="lineNum"> 93 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/desktop.h.gcov.html b/rep/ept/core/desktop.h.gcov.html new file mode 100644 index 0000000..27d0be3 --- /dev/null +++ b/rep/ept/core/desktop.h.gcov.html @@ -0,0 +1,344 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/desktop.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - desktop.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">103</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">94.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">97</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /// -*- C++ -*- (c) 2006, 2007 Petr Rockai <me@mornfall.net> +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : #include <wibble/string.h> +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : #include <ept/token.h> +<span class="lineNum"> 6 </span> : #include <ept/core/desktopfile.h> +<span class="lineNum"> 7 </span> : #include <ept/core/source.h> +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : #include <set> +<span class="lineNum"> 10 </span> : #include <vector> +<span class="lineNum"> 11 </span> : #include <fstream> +<span class="lineNum"> 12 </span> : #include <sstream> +<span class="lineNum"> 13 </span> : #include <iterator> +<span class="lineNum"> 14 </span> : #include <functional> +<span class="lineNum"> 15 </span> : +<span class="lineNum"> 16 </span> : #include <dirent.h> +<span class="lineNum"> 17 </span> : +<span class="lineNum"> 18 </span> : #ifndef EPT_CORE_DESKTOP_H +<span class="lineNum"> 19 </span> : #define EPT_CORE_DESKTOP_H +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : namespace ept { +<span class="lineNum"> 22 </span> : namespace core { +<span class="lineNum"> 23 </span> : namespace desktop { +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : typedef enum { Name, Group, ShortDescription, Package, Icon } PropertyId; +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : template< PropertyId > struct PropertyType {}; +<span class="lineNum"> 28 </span> : template<> struct PropertyType< Name > { typedef std::string T; }; +<span class="lineNum"> 29 </span> : template<> struct PropertyType< Group > { typedef std::string T; }; +<span class="lineNum"> 30 </span> : template<> struct PropertyType< ShortDescription > { typedef std::string T; }; +<span class="lineNum"> 31 </span> : template<> struct PropertyType< Package > { typedef ept::Token T; }; +<span class="lineNum"> 32 </span> : template<> struct PropertyType< Icon > { typedef std::string T; }; +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : typedef std::set< std::string > Categories; +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 64 : struct Category {</span> +<span class="lineNum"> 37 </span> : std::string name; +<span class="lineNum"> 38 </span><span class="lineCov"> 112 : operator std::string() const { return name; }</span> +<span class="lineNum"> 39 </span> : }; +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span><span class="lineCov"> 80 : inline std::istream &operator >>( std::istream &i, Category &cat ) {</span> +<span class="lineNum"> 42 </span> : char c; +<span class="lineNum"> 43 </span><span class="lineCov"> 80 : cat.name = "";</span> +<span class="lineNum"> 44 </span><span class="lineCov"> 468 : while ( i.peek() != EOF ) {</span> +<span class="lineNum"> 45 </span><span class="lineCov"> 356 : c = i.get();</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 356 : if ( c == ';' ) return i;</span> +<span class="lineNum"> 47 </span><span class="lineCov"> 308 : cat.name += c;</span> +<span class="lineNum"> 48 </span> : } +<span class="lineNum"> 49 </span><span class="lineCov"> 32 : return i;</span> +<span class="lineNum"> 50 </span> : } +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span><span class="lineCov"> 567 : struct Entry : wibble::mixin::Comparable< Entry > {</span> +<span class="lineNum"> 53 </span><span class="lineCov"> 18 : Entry() {}</span> +<span class="lineNum"> 54 </span> : Entry( std::string n, std::string g, +<span class="lineNum"> 55 </span> : std::string p, std::string d , std::string i ) +<span class="lineNum"> 56 </span> : : m_name( n ), +<span class="lineNum"> 57 </span> : m_package( p ), +<span class="lineNum"> 58 </span> : m_description( d ), +<span class="lineNum"> 59 </span> : m_icon( i ) +<span class="lineNum"> 60 </span> : { setCategories( g ); } +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span><span class="lineCov"> 16 : void load( std::string file ) {</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 16 : m_id = file;</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 16 : std::ifstream i( file.c_str() );</span> +<span class="lineNum"> 65 </span><span class="lineCov"> 16 : if ( !i.is_open() )</span> +<span class="lineNum"> 66 </span><span class="lineNoCov"> 0 : return; // throw?</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 16 : desktop::File e;</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 16 : i >> e;</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 16 : i.close();</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 16 : desktop::File::Group &g = e.group( "Desktop Entry" );</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 32 : m_name = g.entry( "Name" ).value;</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 32 : m_description = g.entry( "Comment" ).value;</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 32 : if ( m_description == "" )</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 8 : m_description = g.entry( "GenericName" ).value;</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 16 : m_package = g.entry( "X-AppInstall-Package" ).value;</span> +<span class="lineNum"> 76 </span> : // m_group = g.entry( "Categories" ).value; +<span class="lineNum"> 77 </span><span class="lineCov"> 32 : m_icon = g.entry( "Icon" ).value;</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 32 : setCategories( g.entry( "Categories" ).value );</span> +<span class="lineNum"> 79 </span> : } +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span><span class="lineCov"> 16 : void setCategories( std::string s ) {</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 16 : std::istringstream i( s );</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 16 : m_categories.clear();</span> +<span class="lineNum"> 84 </span> : std::remove_copy_if( +<span class="lineNum"> 85 </span> : std::istream_iterator< Category >( i ), +<span class="lineNum"> 86 </span> : std::istream_iterator< Category >(), +<span class="lineNum"> 87 </span> : std::inserter( m_categories, m_categories.begin() ), +<span class="lineNum"> 88 </span><span class="lineCov"> 16 : std::bind1st( std::equal_to< std::string >(), "" ) );</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 16 : }</span> +<span class="lineNum"> 90 </span> : +<span class="lineNum"> 91 </span><span class="lineCov"> 16 : Categories categories() const { return m_categories; }</span> +<span class="lineNum"> 92 </span> : bool inCategory( std::string c ) const { +<span class="lineNum"> 93 </span> : return m_categories.find( c ) != m_categories.end(); +<span class="lineNum"> 94 </span> : } +<span class="lineNum"> 95 </span><span class="lineCov"> 34 : std::string id() const { return m_id; }</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 6 : std::string name() const { return m_name; }</span> +<span class="lineNum"> 97 </span> : std::string package() const { return m_package; } +<span class="lineNum"> 98 </span> : std::string description() const { return m_description; } +<span class="lineNum"> 99 </span> : std::string icon() const { return m_icon; } +<span class="lineNum"> 100 </span> : bool operator< ( const Entry &o ) const { +<span class="lineNum"> 101 </span> : if ( m_name < o.m_name ) return true; +<span class="lineNum"> 102 </span> : if ( m_name == o.m_name ) +<span class="lineNum"> 103 </span> : if ( m_package < o.m_package ) return true; +<span class="lineNum"> 104 </span> : return false; +<span class="lineNum"> 105 </span> : } +<span class="lineNum"> 106 </span> : protected: +<span class="lineNum"> 107 </span> : std::string m_name, m_package, m_description, m_icon, m_id; +<span class="lineNum"> 108 </span> : bool m_supported, m_free; +<span class="lineNum"> 109 </span> : Categories m_categories; +<span class="lineNum"> 110 </span> : }; +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span><span class="lineCov"> 450 : struct InternalList {</span> +<span class="lineNum"> 113 </span> : std::string dir; +<span class="lineNum"> 114 </span> : std::string current; +<span class="lineNum"> 115 </span> : mutable Entry entry; +<span class="lineNum"> 116 </span> : off_t offset; +<span class="lineNum"> 117 </span> : mutable bool loaded; +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span><span class="lineCov"> 9 : InternalList() : dir( "" ), offset( -2 ), loaded( false ) {}</span> +<span class="lineNum"> 120 </span><span class="lineCov"> 4 : InternalList( std::string d ) : dir( d ), offset( -1 ), loaded( false )</span> +<span class="lineNum"> 121 </span> : { +<span class="lineNum"> 122 </span><span class="lineCov"> 4 : firstFile();</span> +<span class="lineNum"> 123 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 124 </span> : +<span class="lineNum"> 125 </span><span class="lineCov"> 56 : Entry head() const {</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 56 : if (!loaded)</span> +<span class="lineNum"> 127 </span><span class="lineCov"> 16 : entry.load( current );</span> +<span class="lineNum"> 128 </span><span class="lineCov"> 56 : loaded = true;</span> +<span class="lineNum"> 129 </span><span class="lineCov"> 56 : return entry;</span> +<span class="lineNum"> 130 </span> : } +<span class="lineNum"> 131 </span> : +<span class="lineNum"> 132 </span><span class="lineCov"> 33 : bool empty() const {</span> +<span class="lineNum"> 133 </span><span class="lineCov"> 33 : return (offset == -2);</span> +<span class="lineNum"> 134 </span> : } +<span class="lineNum"> 135 </span> : +<span class="lineNum"> 136 </span><span class="lineCov"> 4 : void firstFile() {</span> +<span class="lineNum"> 137 </span><span class="lineCov"> 4 : offset = -1;</span> +<span class="lineNum"> 138 </span><span class="lineCov"> 4 : nextFile();</span> +<span class="lineNum"> 139 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 140 </span> : +<span class="lineNum"> 141 </span><span class="lineCov"> 16 : InternalList tail() const {</span> +<span class="lineNum"> 142 </span><span class="lineCov"> 16 : InternalList r = *this;</span> +<span class="lineNum"> 143 </span><span class="lineCov"> 16 : r.nextFile();</span> +<span class="lineNum"> 144 </span><span class="lineNoCov"> 0 : return r;</span> +<span class="lineNum"> 145 </span> : } +<span class="lineNum"> 146 </span> : +<span class="lineNum"> 147 </span><span class="lineCov"> 20 : void nextFile() {</span> +<span class="lineNum"> 148 </span><span class="lineCov"> 20 : loaded = false;</span> +<span class="lineNum"> 149 </span><span class="lineCov"> 20 : DIR *d = opendir( dir.c_str() );</span> +<span class="lineNum"> 150 </span><span class="lineCov"> 20 : if ( !d ) {</span> +<span class="lineNum"> 151 </span><span class="lineNoCov"> 0 : offset = -2;</span> +<span class="lineNum"> 152 </span><span class="lineNoCov"> 0 : closedir( d );</span> +<span class="lineNum"> 153 </span><span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 154 </span> : } +<span class="lineNum"> 155 </span> : +<span class="lineNum"> 156 </span><span class="lineCov"> 20 : if ( offset != -1 )</span> +<span class="lineNum"> 157 </span><span class="lineCov"> 16 : seekdir( d, offset );</span> +<span class="lineNum"> 158 </span> : +<span class="lineNum"> 159 </span><span class="lineCov"> 20 : dirent *ent = 0;</span> +<span class="lineNum"> 160 </span><span class="lineCov"> 48 : while ( ( ent = readdir( d ) ) != 0 ) {</span> +<span class="lineNum"> 161 </span><span class="lineCov"> 24 : std::string name( ent->d_name );</span> +<span class="lineNum"> 162 </span><span class="lineCov"> 48 : if ( name == "." || name == ".." )</span> +<span class="lineNum"> 163 </span><span class="lineCov"> 8 : continue;</span> +<span class="lineNum"> 164 </span><span class="lineCov"> 16 : if ( !wibble::str::endsWith( name, ".desktop" ) )</span> +<span class="lineNum"> 165 </span> : continue; +<span class="lineNum"> 166 </span><span class="lineCov"> 16 : current = dir + "/" + name;</span> +<span class="lineNum"> 167 </span><span class="lineCov"> 16 : offset = telldir( d );</span> +<span class="lineNum"> 168 </span><span class="lineCov"> 16 : closedir( d );</span> +<span class="lineNum"> 169 </span><span class="lineCov"> 16 : return;</span> +<span class="lineNum"> 170 </span> : } +<span class="lineNum"> 171 </span><span class="lineCov"> 4 : closedir( d );</span> +<span class="lineNum"> 172 </span><span class="lineCov"> 4 : offset = -2;</span> +<span class="lineNum"> 173 </span> : } +<span class="lineNum"> 174 </span> : }; +<span class="lineNum"> 175 </span> : +<span class="lineNum"> 176 </span> : struct Setup { +<span class="lineNum"> 177 </span> : typedef ept::Token Token; +<span class="lineNum"> 178 </span> : typedef Entry Internal; +<span class="lineNum"> 179 </span> : typedef desktop::PropertyId PropertyId; +<span class="lineNum"> 180 </span> : typedef desktop::InternalList InternalList; +<span class="lineNum"> 181 </span> : }; +<span class="lineNum"> 182 </span> : +<span class="lineNum"> 183 </span><span class="lineCov"> 5 : struct GroupPolicy {</span> +<span class="lineNum"> 184 </span><span class="lineCov"> 16 : virtual std::string group( const Entry &e )</span> +<span class="lineNum"> 185 </span> : { +<span class="lineNum"> 186 </span><span class="lineCov"> 16 : return wibble::str::fmt( e.categories() );</span> +<span class="lineNum"> 187 </span> : } +<span class="lineNum"> 188 </span><span class="lineCov"> 5 : virtual ~GroupPolicy() {}</span> +<span class="lineNum"> 189 </span> : }; +<span class="lineNum"> 190 </span> : +<span class="lineNum"> 191 </span> : struct Source : core::Source< Source, Setup, PropertyType > +<span class="lineNum"> 192 </span><span class="lineCov"> 5 : {</span> +<span class="lineNum"> 193 </span> : std::string m_dir; +<span class="lineNum"> 194 </span> : +<span class="lineNum"> 195 </span> : GroupPolicy m_defaultPolicy; +<span class="lineNum"> 196 </span> : GroupPolicy *m_policy; +<span class="lineNum"> 197 </span> : +<span class="lineNum"> 198 </span><span class="lineCov"> 5 : Source( std::string dir ) : m_dir( dir ),</span> +<span class="lineNum"> 199 </span><span class="lineCov"> 5 : m_policy( &m_defaultPolicy ) {}</span> +<span class="lineNum"> 200 </span> : +<span class="lineNum"> 201 </span><span class="lineCov"> 4 : InternalList listInternal() {</span> +<span class="lineNum"> 202 </span><span class="lineCov"> 4 : return InternalList( m_dir );</span> +<span class="lineNum"> 203 </span> : } +<span class="lineNum"> 204 </span> : +<span class="lineNum"> 205 </span><span class="lineCov"> 34 : Token getToken( Entry i ) {</span> +<span class="lineNum"> 206 </span><span class="lineCov"> 34 : Token t;</span> +<span class="lineNum"> 207 </span><span class="lineCov"> 34 : t._id = std::string( "desktop:" ) + i.id();</span> +<span class="lineNum"> 208 </span><span class="lineNoCov"> 0 : return t;</span> +<span class="lineNum"> 209 </span> : } +<span class="lineNum"> 210 </span> : +<span class="lineNum"> 211 </span> : Entry lookupToken( Token t ) { +<span class="lineNum"> 212 </span> : Entry e; +<span class="lineNum"> 213 </span> : e.load( t.desktop() ); +<span class="lineNum"> 214 </span> : return e; +<span class="lineNum"> 215 </span> : } +<span class="lineNum"> 216 </span> : +<span class="lineNum"> 217 </span> : void setGroupPolicy( GroupPolicy *p ) { +<span class="lineNum"> 218 </span> : m_policy = p; +<span class="lineNum"> 219 </span> : } +<span class="lineNum"> 220 </span> : +<span class="lineNum"> 221 </span> : template< PropertyId p > +<span class="lineNum"> 222 </span> : typename PropertyType< p >::T getInternal( Entry ); +<span class="lineNum"> 223 </span> : +<span class="lineNum"> 224 </span><span class="lineCov"> 56 : struct IsInGroup {</span> +<span class="lineNum"> 225 </span> : std::string g; +<span class="lineNum"> 226 </span><span class="lineCov"> 2 : IsInGroup( std::string _g = "" ) : g( _g ) {}</span> +<span class="lineNum"> 227 </span><span class="lineCov"> 8 : bool operator()( Token, std::string gr ) const {</span> +<span class="lineNum"> 228 </span><span class="lineCov"> 8 : return gr == g;</span> +<span class="lineNum"> 229 </span> : } +<span class="lineNum"> 230 </span> : }; +<span class="lineNum"> 231 </span> : +<span class="lineNum"> 232 </span><span class="lineCov"> 1 : PropertyFilter< Group, IsInGroup >::T group( std::string id )</span> +<span class="lineNum"> 233 </span> : { +<span class="lineNum"> 234 </span><span class="lineCov"> 1 : return propertyFilter< Group >( IsInGroup( id ) );</span> +<span class="lineNum"> 235 </span> : } +<span class="lineNum"> 236 </span> : +<span class="lineNum"> 237 </span><span class="lineCov"> 4 : static std::string projectGroup( ComposedList< Name > t ) {</span> +<span class="lineNum"> 238 </span><span class="lineCov"> 4 : return t.get< Group >();</span> +<span class="lineNum"> 239 </span> : } +<span class="lineNum"> 240 </span> : +<span class="lineNum"> 241 </span> : list::Unique< list::Sorted< +<span class="lineNum"> 242 </span> : list::Map< ComposedList< Name >, +<span class="lineNum"> 243 </span> : __typeof( std::ptr_fun( &projectGroup ) ) > > > +<span class="lineNum"> 244 </span><span class="lineCov"> 1 : groupList() {</span> +<span class="lineNum"> 245 </span> : return list::unique( +<span class="lineNum"> 246 </span> : list::sort( list::map( list< Name >(), +<span class="lineNum"> 247 </span><span class="lineCov"> 1 : std::ptr_fun( &projectGroup ) ) ) );</span> +<span class="lineNum"> 248 </span> : } +<span class="lineNum"> 249 </span> : }; +<span class="lineNum"> 250 </span> : +<span class="lineNum"> 251 </span><span class="lineCov"> 6 : template<> inline std::string Source::getInternal< Name >( Entry e ) {</span> +<span class="lineNum"> 252 </span><span class="lineCov"> 6 : return e.name();</span> +<span class="lineNum"> 253 </span> : } +<span class="lineNum"> 254 </span> : +<span class="lineNum"> 255 </span> : template<> inline std::string Source::getInternal< Icon >( Entry e ) { +<span class="lineNum"> 256 </span> : return e.icon(); +<span class="lineNum"> 257 </span> : } +<span class="lineNum"> 258 </span> : +<span class="lineNum"> 259 </span> : template<> inline ept::Token Source::getInternal< Package >( Entry e ) { +<span class="lineNum"> 260 </span> : ept::Token t; +<span class="lineNum"> 261 </span> : t._id = e.package(); +<span class="lineNum"> 262 </span> : return t; +<span class="lineNum"> 263 </span> : } +<span class="lineNum"> 264 </span> : +<span class="lineNum"> 265 </span><span class="lineCov"> 16 : template<> inline std::string Source::getInternal< Group >( Entry e ) {</span> +<span class="lineNum"> 266 </span><span class="lineCov"> 16 : return m_policy->group( e );</span> +<span class="lineNum"> 267 </span> : } +<span class="lineNum"> 268 </span> : +<span class="lineNum"> 269 </span> : template<> inline std::string Source::getInternal< ShortDescription >( Entry e ) { +<span class="lineNum"> 270 </span> : return e.description(); +<span class="lineNum"> 271 </span> : } +<span class="lineNum"> 272 </span> : +<span class="lineNum"> 273 </span> : } +<span class="lineNum"> 274 </span> : } +<span class="lineNum"> 275 </span> : } +<span class="lineNum"> 276 </span> : +<span class="lineNum"> 277 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/desktop.test.h.gcov.html b/rep/ept/core/desktop.test.h.gcov.html new file mode 100644 index 0000000..0d08106 --- /dev/null +++ b/rep/ept/core/desktop.test.h.gcov.html @@ -0,0 +1,135 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/desktop.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - desktop.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">33</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">33</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #include <ept/config.h> +<span class="lineNum"> 3 </span> : #include <ept/core/desktop.h> +<span class="lineNum"> 4 </span> : #include <ept/core/list.h> +<span class="lineNum"> 5 </span> : #include <ept/test.h> +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : using namespace ept::core; +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span><span class="lineCov"> 5 : struct TestDesktop {</span> +<span class="lineNum"> 10 </span> : desktop::Source desk; +<span class="lineNum"> 11 </span> : ept::Token t; +<span class="lineNum"> 12 </span> : +<span class="lineNum"> 13 </span><span class="lineCov"> 5 : TestDesktop() : desk( TEST_ENV_DIR "desktop" ) {}</span> +<span class="lineNum"> 14 </span> : +<span class="lineNum"> 15 </span> : template< desktop::PropertyId P, typename L > +<span class="lineNum"> 16 </span><span class="lineCov"> 3 : void checkIteration2( int c, const char **check, L l ) {</span> +<span class="lineNum"> 17 </span><span class="lineCov"> 3 : int i = 0;</span> +<span class="lineNum"> 18 </span><span class="lineCov"> 16 : while ( !l.empty() ) {</span> +<span class="lineNum"> 19 </span><span class="lineCov"> 10 : assert_eq( l.head().template get< P >(), check[ i ] );</span> +<span class="lineNum"> 20 </span><span class="lineCov"> 20 : l = l.tail();</span> +<span class="lineNum"> 21 </span><span class="lineCov"> 10 : ++ i;</span> +<span class="lineNum"> 22 </span> : } +<span class="lineNum"> 23 </span><span class="lineCov"> 3 : assert_eq( i, c );</span> +<span class="lineNum"> 24 </span><span class="lineCov"> 3 : }</span> +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : template< desktop::PropertyId P, typename L > +<span class="lineNum"> 27 </span><span class="lineCov"> 3 : void checkIteration( int c, const char **check, L l ) {</span> +<span class="lineNum"> 28 </span><span class="lineCov"> 3 : checkIteration2< P >( c, check, list::sort( l ) );</span> +<span class="lineNum"> 29 </span><span class="lineCov"> 3 : }</span> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span><span class="lineCov"> 1 : Test iteration() {</span> +<span class="lineNum"> 32 </span><span class="lineCov"> 1 : const char *check[] = { "Kdict", "foo", "XQF", "X-Server" };</span> +<span class="lineNum"> 33 </span> : checkIteration< desktop::Name >( +<span class="lineNum"> 34 </span><span class="lineCov"> 1 : 4, check, desk.list< desktop::Name >() );</span> +<span class="lineNum"> 35 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span><span class="lineCov"> 1 : Test groupProperty() {</span> +<span class="lineNum"> 38 </span> : const char *check[] = { +<span class="lineNum"> 39 </span> : "{ KDE, Qt, Utility }", +<span class="lineNum"> 40 </span> : "{ KDE, Qt, Utility }", +<span class="lineNum"> 41 </span> : "{ Application, Game, X-SuSE-Core-Game }", +<span class="lineNum"> 42 </span> : "{ KDE, Qt, X-KDE-information }", +<span class="lineNum"> 43 </span><span class="lineCov"> 1 : };</span> +<span class="lineNum"> 44 </span> : checkIteration< desktop::Group >( +<span class="lineNum"> 45 </span><span class="lineCov"> 1 : 4, check, desk.list< desktop::Name >() );</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span><span class="lineCov"> 1 : Test groups() {</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 1 : const char *check[] = { "Kdict", "foo" };</span> +<span class="lineNum"> 50 </span> : checkIteration< desktop::Name >( +<span class="lineNum"> 51 </span><span class="lineCov"> 1 : 2, check, desk.group( "{ KDE, Qt, Utility }" ) );</span> +<span class="lineNum"> 52 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span><span class="lineCov"> 1 : Test groupList() {</span> +<span class="lineNum"> 55 </span> : std::string check[] = { +<span class="lineNum"> 56 </span> : "{ Application, Game, X-SuSE-Core-Game }", +<span class="lineNum"> 57 </span> : "{ KDE, Qt, Utility }", +<span class="lineNum"> 58 </span> : "{ KDE, Qt, X-KDE-information }", +<span class="lineNum"> 59 </span><span class="lineCov"> 1 : };</span> +<span class="lineNum"> 60 </span> : +<span class="lineNum"> 61 </span><span class="lineCov"> 2 : assert_list_eq( desk.groupList(), check );</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 63 </span> : +<span class="lineNum"> 64 </span><span class="lineCov"> 1 : Test emptyGroupList() {</span> +<span class="lineNum"> 65 </span><span class="lineCov"> 1 : desktop::InternalList l;</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : assert( l.empty() );</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 68 </span> : }; +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/desktopfile.h.gcov.html b/rep/ept/core/desktopfile.h.gcov.html new file mode 100644 index 0000000..9ed8552 --- /dev/null +++ b/rep/ept/core/desktopfile.h.gcov.html @@ -0,0 +1,205 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/desktopfile.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - desktopfile.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">77</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">75.3 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">58</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /// -*- C++ -*- (c) 2006, 2007 Petr Rockai <me@mornfall.net> +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : #include <iostream> +<span class="lineNum"> 4 </span> : #include <string> +<span class="lineNum"> 5 </span> : #include <map> +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : #ifndef EPT_CORE_DESKTOPFILE_H +<span class="lineNum"> 8 </span> : #define EPT_CORE_DESKTOPFILE_H +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span> : namespace ept { +<span class="lineNum"> 11 </span> : namespace core { +<span class="lineNum"> 12 </span> : namespace desktop { +<span class="lineNum"> 13 </span> : +<span class="lineNum"> 14 </span><span class="lineCov"> 32 : struct File {</span> +<span class="lineNum"> 15 </span><span class="lineCov"> 13540 : struct Entry {</span> +<span class="lineNum"> 16 </span> : std::string key; +<span class="lineNum"> 17 </span> : std::string value; +<span class="lineNum"> 18 </span> : }; +<span class="lineNum"> 19 </span> : typedef std::map< std::string, Entry > EntryMap; +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span><span class="lineCov"> 144 : struct Group {</span> +<span class="lineNum"> 22 </span> : std::string name; +<span class="lineNum"> 23 </span> : EntryMap entries; +<span class="lineNum"> 24 </span><span class="lineCov"> 88 : Entry &entry( std::string k ) { return entries[ k ]; }</span> +<span class="lineNum"> 25 </span> : }; +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : typedef std::map< std::string, Group > GroupMap; +<span class="lineNum"> 28 </span> : GroupMap groups; +<span class="lineNum"> 29 </span><span class="lineCov"> 16 : Group &group( std::string k ) { return groups[ k ]; }</span> +<span class="lineNum"> 30 </span> : }; +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span><span class="lineCov"> 1228 : inline std::istream &operator >>( std::istream &i, File::Entry &e )</span> +<span class="lineNum"> 33 </span> : { +<span class="lineNum"> 34 </span><span class="lineCov"> 1228 : std::string spaces = ""; char c; bool started = false;</span> +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 1228 : e.key = "";</span> +<span class="lineNum"> 37 </span> : // read key +<span class="lineNum"> 38 </span><span class="lineCov"> 16056 : while ( i.peek() != EOF ) {</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 14820 : c = i.get();</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 14820 : if ( !started && c == '\n' )</span> +<span class="lineNum"> 41 </span><span class="lineCov"> 8 : return i >> e;</span> +<span class="lineNum"> 42 </span><span class="lineCov"> 14812 : if ( isspace( c ) ) {</span> +<span class="lineNum"> 43 </span><span class="lineNoCov"> 0 : spaces += c;</span> +<span class="lineNum"> 44 </span><span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 45 </span> : } +<span class="lineNum"> 46 </span><span class="lineCov"> 14812 : if ( !started && c == '#' ) {</span> +<span class="lineNum"> 47 </span><span class="lineNoCov"> 0 : while ( i.peek() != EOF && i.get() != '\n' )</span> +<span class="lineNum"> 48 </span> : ; // read till eol +<span class="lineNum"> 49 </span><span class="lineNoCov"> 0 : return i >> e; // restart reading</span> +<span class="lineNum"> 50 </span> : } +<span class="lineNum"> 51 </span><span class="lineCov"> 14812 : started = true;</span> +<span class="lineNum"> 52 </span><span class="lineCov"> 14812 : if ( c == '=' )</span> +<span class="lineNum"> 53 </span><span class="lineCov"> 1212 : break;</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 13600 : e.key += spaces;</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 13600 : e.key += c;</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 13600 : spaces = "";</span> +<span class="lineNum"> 57 </span> : } +<span class="lineNum"> 58 </span> : // std::cerr << "read key: " << e.key << std::endl; +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span><span class="lineCov"> 1220 : started = false;</span> +<span class="lineNum"> 61 </span><span class="lineCov"> 1220 : bool backslash = false;</span> +<span class="lineNum"> 62 </span> : // read value +<span class="lineNum"> 63 </span><span class="lineCov"> 37496 : while ( i.peek() != EOF ) {</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 36268 : c = i.get();</span> +<span class="lineNum"> 65 </span><span class="lineCov"> 36268 : if ( c == '\n' ) {</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 1212 : if ( backslash )</span> +<span class="lineNum"> 67 </span><span class="lineNoCov"> 0 : e.value += '\\';</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 1212 : return i;</span> +<span class="lineNum"> 69 </span> : } +<span class="lineNum"> 70 </span><span class="lineCov"> 35056 : if ( !started && isspace( c ) )</span> +<span class="lineNum"> 71 </span><span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 35056 : started = true;</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 35056 : if ( backslash ) { // interpret escape sequences</span> +<span class="lineNum"> 74 </span><span class="lineNoCov"> 0 : if ( c == '\\' ) e.value += '\\';</span> +<span class="lineNum"> 75 </span><span class="lineNoCov"> 0 : else if ( c == 'n' ) e.value += '\n';</span> +<span class="lineNum"> 76 </span><span class="lineNoCov"> 0 : else if ( c == 't' ) e.value += '\t';</span> +<span class="lineNum"> 77 </span><span class="lineNoCov"> 0 : else if ( c == 'r' ) e.value += '\r';</span> +<span class="lineNum"> 78 </span><span class="lineNoCov"> 0 : else if ( c == 's' ) e.value += ' ';</span> +<span class="lineNum"> 79 </span><span class="lineNoCov"> 0 : else { e.value += '\\'; e.value += c; }</span> +<span class="lineNum"> 80 </span><span class="lineNoCov"> 0 : backslash = false;</span> +<span class="lineNum"> 81 </span><span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 82 </span> : } +<span class="lineNum"> 83 </span><span class="lineCov"> 35056 : if ( c == '\\' ) {</span> +<span class="lineNum"> 84 </span><span class="lineNoCov"> 0 : backslash = true;</span> +<span class="lineNum"> 85 </span><span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 86 </span> : } +<span class="lineNum"> 87 </span><span class="lineCov"> 35056 : e.value += c;</span> +<span class="lineNum"> 88 </span> : } +<span class="lineNum"> 89 </span><span class="lineCov"> 8 : return i;</span> +<span class="lineNum"> 90 </span> : } +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span><span class="lineCov"> 16 : inline std::istream &operator >>( std::istream &i, File::Group &g )</span> +<span class="lineNum"> 93 </span> : { +<span class="lineNum"> 94 </span><span class="lineCov"> 16 : bool started = false; char c;</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 16 : g.name = "";</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 256 : while ( i.peek() != EOF ) {</span> +<span class="lineNum"> 97 </span><span class="lineCov"> 240 : c = i.get();</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 240 : if ( !started && isspace( c ) )</span> +<span class="lineNum"> 99 </span><span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 100 </span><span class="lineCov"> 240 : if ( !started && c == '#' ) {</span> +<span class="lineNum"> 101 </span><span class="lineNoCov"> 0 : while( i.peek() != EOF && i.get() != '\n' )</span> +<span class="lineNum"> 102 </span> : ; // read till eol +<span class="lineNum"> 103 </span><span class="lineNoCov"> 0 : return i >> g; // restart reading</span> +<span class="lineNum"> 104 </span> : } +<span class="lineNum"> 105 </span><span class="lineCov"> 240 : if ( !started && c == '[' ) {</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 16 : started = true;</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 16 : continue;</span> +<span class="lineNum"> 108 </span> : } +<span class="lineNum"> 109 </span><span class="lineCov"> 224 : if ( started && c == ']' ) {</span> +<span class="lineNum"> 110 </span><span class="lineCov"> 16 : while( i.peek() != EOF && i.get() != '\n' )</span> +<span class="lineNum"> 111 </span> : ; // read till eol +<span class="lineNum"> 112 </span><span class="lineCov"> 16 : break;</span> +<span class="lineNum"> 113 </span> : } +<span class="lineNum"> 114 </span><span class="lineCov"> 208 : g.name += c;</span> +<span class="lineNum"> 115 </span> : } +<span class="lineNum"> 116 </span><span class="lineCov"> 1236 : while ( i.peek() != EOF ) {</span> +<span class="lineNum"> 117 </span><span class="lineCov"> 1220 : File::Entry e;</span> +<span class="lineNum"> 118 </span><span class="lineCov"> 1220 : i >> e;</span> +<span class="lineNum"> 119 </span><span class="lineCov"> 1220 : g.entries[ e.key ] = e;</span> +<span class="lineNum"> 120 </span> : } +<span class="lineNum"> 121 </span><span class="lineCov"> 16 : return i;</span> +<span class="lineNum"> 122 </span> : } +<span class="lineNum"> 123 </span> : +<span class="lineNum"> 124 </span><span class="lineCov"> 16 : inline std::istream &operator >>( std::istream &i, File &f )</span> +<span class="lineNum"> 125 </span> : { +<span class="lineNum"> 126 </span><span class="lineCov"> 32 : while ( i.peek() != EOF ) {</span> +<span class="lineNum"> 127 </span><span class="lineCov"> 16 : File::Group g;</span> +<span class="lineNum"> 128 </span><span class="lineCov"> 16 : i >> g;</span> +<span class="lineNum"> 129 </span><span class="lineCov"> 16 : f.groups[ g.name ] = g;</span> +<span class="lineNum"> 130 </span> : } +<span class="lineNum"> 131 </span><span class="lineCov"> 16 : return i;</span> +<span class="lineNum"> 132 </span> : } +<span class="lineNum"> 133 </span> : +<span class="lineNum"> 134 </span> : } +<span class="lineNum"> 135 </span> : } +<span class="lineNum"> 136 </span> : } +<span class="lineNum"> 137 </span> : +<span class="lineNum"> 138 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/index.html b/rep/ept/core/index.html new file mode 100644 index 0000000..bec608b --- /dev/null +++ b/rep/ept/core/index.html @@ -0,0 +1,164 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - ept/core</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">688</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">82.8 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">570</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="apt.cpp.gcov.html">apt.cpp</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">7 / 7 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="apt.h.gcov.html">apt.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=80 height=10 alt="79.8%"><img src="../../snow.png" width=20 height=10 alt="79.8%"></td></tr></table> + </td> + <td class="coverPerHi">79.8 %</td> + <td class="coverNumHi">138 / 173 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="apt.test.h.gcov.html">apt.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">60 / 60 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="desktop.h.gcov.html">desktop.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=94 height=10 alt="94.2%"><img src="../../snow.png" width=6 height=10 alt="94.2%"></td></tr></table> + </td> + <td class="coverPerHi">94.2 %</td> + <td class="coverNumHi">97 / 103 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="desktop.test.h.gcov.html">desktop.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">33 / 33 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="desktopfile.h.gcov.html">desktopfile.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=75 height=10 alt="75.3%"><img src="../../snow.png" width=25 height=10 alt="75.3%"></td></tr></table> + </td> + <td class="coverPerHi">75.3 %</td> + <td class="coverNumHi">58 / 77 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="source.h.gcov.html">source.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">34 / 34 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="xapian.cpp.gcov.html">xapian.cpp</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=21 height=10 alt="21.4%"><img src="../../snow.png" width=79 height=10 alt="21.4%"></td></tr></table> + </td> + <td class="coverPerMed">21.4 %</td> + <td class="coverNumMed">12 / 56 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="xapian.h.gcov.html">xapian.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=87 height=10 alt="87.2%"><img src="../../snow.png" width=13 height=10 alt="87.2%"></td></tr></table> + </td> + <td class="coverPerHi">87.2 %</td> + <td class="coverNumHi">95 / 109 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="xapian.test.h.gcov.html">xapian.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">36 / 36 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/source.h.gcov.html b/rep/ept/core/source.h.gcov.html new file mode 100644 index 0000000..2c2d8e5 --- /dev/null +++ b/rep/ept/core/source.h.gcov.html @@ -0,0 +1,181 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/source.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - source.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">34</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">34</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : #include <ept/core/list.h> +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : #ifndef EPT_CORE_SOURCE_H +<span class="lineNum"> 6 </span> : #define EPT_CORE_SOURCE_H +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : namespace ept { +<span class="lineNum"> 9 </span> : namespace core { +<span class="lineNum"> 10 </span> : +<span class="lineNum"> 11 </span> : template< typename Self, typename Setup, +<span class="lineNum"> 12 </span> : template< typename Setup::PropertyId > class PType > +<span class="lineNum"> 13 </span><span class="lineCov"> 38 : struct Source {</span> +<span class="lineNum"> 14 </span> : typedef typename Setup::PropertyId PropertyId; +<span class="lineNum"> 15 </span> : typedef typename Setup::Token Token; +<span class="lineNum"> 16 </span> : +<span class="lineNum"> 17 </span> : Token m_cachedToken; +<span class="lineNum"> 18 </span> : typename Setup::Internal m_cached; +<span class="lineNum"> 19 </span> : +<span class="lineNum"> 20 </span><span class="lineCov"> 43 : Self &self() { return *static_cast< Self * >( this ); }</span> +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : template< PropertyId property > +<span class="lineNum"> 23 </span><span class="lineCov"> 13 : typename PType< property >::T get( Token t ) {</span> +<span class="lineNum"> 24 </span><span class="lineCov"> 13 : if ( m_cachedToken != t ) {</span> +<span class="lineNum"> 25 </span><span class="lineCov"> 10 : m_cachedToken = t;</span> +<span class="lineNum"> 26 </span><span class="lineCov"> 10 : m_cached = self().lookupToken( t );</span> +<span class="lineNum"> 27 </span> : } +<span class="lineNum"> 28 </span><span class="lineCov"> 13 : return self().template getInternal< property >( m_cached );</span> +<span class="lineNum"> 29 </span> : } +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : void invalidate() { +<span class="lineNum"> 32 </span> : m_cachedToken = ept::Token(); +<span class="lineNum"> 33 </span> : m_cached = typename Setup::Internal(); +<span class="lineNum"> 34 </span> : } +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : template< PropertyId _property > +<span class="lineNum"> 37 </span> : struct ComposedList : wibble::mixin::Comparable< ComposedList< _property > > +<span class="lineNum"> 38 </span><span class="lineCov"> 4009 : {</span> +<span class="lineNum"> 39 </span> : typedef Self Origin; +<span class="lineNum"> 40 </span> : typedef typename Setup::Token Token; +<span class="lineNum"> 41 </span> : typedef typename PType< _property >::T Property; +<span class="lineNum"> 42 </span> : typedef ComposedList Type; +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span> : Origin *origin; +<span class="lineNum"> 45 </span> : typename Setup::InternalList internal; +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span><span class="lineCov"> 12056 : ComposedList tail() const {</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 12056 : return ComposedList< _property >( *origin, internal.tail() );</span> +<span class="lineNum"> 49 </span> : } +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineCov"> 12078 : bool empty() const { return internal.empty(); }</span> +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span><span class="lineCov"> 13 : bool operator<( const ComposedList &o ) const {</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 13 : return token() < o.token();</span> +<span class="lineNum"> 55 </span> : } +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span><span class="lineCov"> 18 : ComposedList &head() { return *this; }</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 4 : const ComposedList &head() const { return *this; }</span> +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span><span class="lineCov"> 6054 : Token token() const { return origin->getToken( internal.head() ); }</span> +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span><span class="lineCov"> 7836 : Property property() const {</span> +<span class="lineNum"> 63 </span> : return origin->template getInternal< _property >( +<span class="lineNum"> 64 </span><span class="lineCov"> 7836 : internal.head() );</span> +<span class="lineNum"> 65 </span> : } +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span> : template< PropertyId P > +<span class="lineNum"> 68 </span> : typename PType< P >::T +<span class="lineNum"> 69 </span><span class="lineCov"> 14 : get() const {</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 14 : return origin->template getInternal< P >( internal.head() );</span> +<span class="lineNum"> 71 </span> : } +<span class="lineNum"> 72 </span> : +<span class="lineNum"> 73 </span><span class="lineCov"> 8 : ComposedList() : origin( 0 ) {}</span> +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span><span class="lineCov"> 12066 : ComposedList( Origin &o, typename Setup::InternalList i )</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 12066 : : origin( &o ), internal( i ) {}</span> +<span class="lineNum"> 77 </span> : }; +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span> : template< PropertyId property > +<span class="lineNum"> 80 </span><span class="lineCov"> 10 : ComposedList< property > list()</span> +<span class="lineNum"> 81 </span> : { +<span class="lineNum"> 82 </span><span class="lineCov"> 10 : return ComposedList< property >( self(), self().listInternal() );</span> +<span class="lineNum"> 83 </span> : } +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span> : template< PropertyId P, typename F > +<span class="lineNum"> 86 </span><span class="lineCov"> 50 : struct Propertify {</span> +<span class="lineNum"> 87 </span> : F f; +<span class="lineNum"> 88 </span><span class="lineCov"> 2 : Propertify( F _f = F() ) : f( _f ) {}</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 8 : bool operator()( const ComposedList< P > &x ) const {</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 8 : return f( x.token(), x.property() );</span> +<span class="lineNum"> 91 </span> : } +<span class="lineNum"> 92 </span> : }; +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span> : template< PropertyId P, typename F > +<span class="lineNum"> 95 </span> : struct PropertyFilter { +<span class="lineNum"> 96 </span> : typedef typename list::Filtered< +<span class="lineNum"> 97 </span> : ComposedList< P >, Propertify< P, F > > T; +<span class="lineNum"> 98 </span> : }; +<span class="lineNum"> 99 </span> : +<span class="lineNum"> 100 </span> : template< PropertyId P, typename F > +<span class="lineNum"> 101 </span> : typename PropertyFilter< P, F >::T +<span class="lineNum"> 102 </span><span class="lineCov"> 1 : propertyFilter( F f ) {</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 1 : return list::filter( list< P >(), Propertify< P, F >( f ) );</span> +<span class="lineNum"> 104 </span> : } +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span><span class="lineCov"> 38 : Source()</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 38 : {</span> +<span class="lineNum"> 108 </span><span class="lineCov"> 38 : }</span> +<span class="lineNum"> 109 </span> : }; +<span class="lineNum"> 110 </span> : +<span class="lineNum"> 111 </span> : } +<span class="lineNum"> 112 </span> : } +<span class="lineNum"> 113 </span> : +<span class="lineNum"> 114 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/xapian.cpp.gcov.html b/rep/ept/core/xapian.cpp.gcov.html new file mode 100644 index 0000000..fdd7a16 --- /dev/null +++ b/rep/ept/core/xapian.cpp.gcov.html @@ -0,0 +1,208 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/xapian.cpp</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - xapian.cpp</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">56</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">21.4 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">12</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- (c) 2007 Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 2 </span> : // Petr Rockai <me@mornfall.net> +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /* +<span class="lineNum"> 5 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 6 </span> : * +<span class="lineNum"> 7 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 8 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 9 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 10 </span> : * (at your option) any later version. +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 13 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 14 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 15 </span> : * GNU General Public License for more details. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 18 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 19 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 20 </span> : */ +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : #include <ept/core/xapian.h> +<span class="lineNum"> 23 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 24 </span> : #include <ept/core/apt/record.h> +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include <ept/textsearch/maint/path.h> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include <wibble/regexp.h> +<span class="lineNum"> 29 </span> : #include <cctype> +<span class="lineNum"> 30 </span> : #include <cmath> +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : #include <xapian/queryparser.h> +<span class="lineNum"> 33 </span> : #include <xapian/base.h> +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : #include <algorithm> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : #include <iostream> +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : using namespace std; +<span class="lineNum"> 40 </span> : using namespace ept; +<span class="lineNum"> 41 </span> : // using namespace ept::debtags; +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : namespace ept { +<span class="lineNum"> 44 </span> : namespace core { +<span class="lineNum"> 45 </span> : namespace xapian { +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span> : size_t max_index = 0; +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span><span class="lineCov"> 4 : Source::Source()</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 4 : : m_stem("en"), m_opened( false )</span> +<span class="lineNum"> 51 </span> : { +<span class="lineNum"> 52 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span><span class="lineCov"> 9 : time_t Source::timestamp() const {</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 9 : return textsearch::Path::indexTimestamp();</span> +<span class="lineNum"> 56 </span> : } +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span><span class="lineCov"> 9 : void Source::open() const {</span> +<span class="lineNum"> 59 </span><span class="lineCov"> 9 : if (timestamp()) {</span> +<span class="lineNum"> 60 </span><span class="lineCov"> 9 : std::string path = textsearch::Path::index();</span> +<span class="lineNum"> 61 </span><span class="lineCov"> 9 : m_db = Xapian::Database( path );</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 9 : m_opened = true;</span> +<span class="lineNum"> 63 </span> : } +<span class="lineNum"> 64 </span><span class="lineCov"> 9 : }</span> +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span><span class="lineNoCov"> 0 : std::string Source::toLower(const std::string& str)</span> +<span class="lineNum"> 67 </span> : { +<span class="lineNum"> 68 </span><span class="lineNoCov"> 0 : std::string res;</span> +<span class="lineNum"> 69 </span><span class="lineNoCov"> 0 : res.reserve(str.size());</span> +<span class="lineNum"> 70 </span><span class="lineNoCov"> 0 : for (std::string::const_iterator i = str.begin(); i != str.end(); ++i)</span> +<span class="lineNum"> 71 </span><span class="lineNoCov"> 0 : res += tolower(*i);</span> +<span class="lineNum"> 72 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 73 </span> : } +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span> : void Source::normalize_and_add(Xapian::Document& doc, const std::string& term, +<span class="lineNum"> 76 </span><span class="lineNoCov"> 0 : int& /* pos */) const</span> +<span class="lineNum"> 77 </span> : { +<span class="lineNum"> 78 </span><span class="lineNoCov"> 0 : string t = Source::toLower(term);</span> +<span class="lineNum"> 79 </span><span class="lineNoCov"> 0 : string s = m_stem(t);</span> +<span class="lineNum"> 80 </span><span class="lineNoCov"> 0 : doc.add_term(t);</span> +<span class="lineNum"> 81 </span><span class="lineNoCov"> 0 : if (s != t)</span> +<span class="lineNum"> 82 </span><span class="lineNoCov"> 0 : doc.add_term(s);</span> +<span class="lineNum"> 83 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span><span class="lineNoCov"> 0 : Xapian::docid Source::docidByName(const std::string& pkgname) const</span> +<span class="lineNum"> 86 </span> : { +<span class="lineNum"> 87 </span><span class="lineNoCov"> 0 : Xapian::PostingIterator i = m_db.postlist_begin("pkg:"+pkgname);</span> +<span class="lineNum"> 88 </span><span class="lineNoCov"> 0 : if (i == m_db.postlist_end("pkg:"+pkgname))</span> +<span class="lineNum"> 89 </span><span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 90 </span> : else +<span class="lineNum"> 91 </span><span class="lineNoCov"> 0 : return *i;</span> +<span class="lineNum"> 92 </span> : } +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span><span class="lineNoCov"> 0 : Xapian::Query Source::makeRelatedQuery(const std::string& pkgname) const</span> +<span class="lineNum"> 95 </span> : { +<span class="lineNum"> 96 </span><span class="lineNoCov"> 0 : Xapian::Enquire enquire(db());</span> +<span class="lineNum"> 97 </span> : +<span class="lineNum"> 98 </span> : // Retrieve the document for the given package +<span class="lineNum"> 99 </span><span class="lineNoCov"> 0 : enquire.set_query(Xapian::Query("pkg:"+pkgname));</span> +<span class="lineNum"> 100 </span><span class="lineNoCov"> 0 : Xapian::MSet matches = enquire.get_mset(0, 1);</span> +<span class="lineNum"> 101 </span><span class="lineNoCov"> 0 : Xapian::MSetIterator mi = matches.begin();</span> +<span class="lineNum"> 102 </span><span class="lineNoCov"> 0 : if (mi == matches.end()) return Xapian::Query();</span> +<span class="lineNum"> 103 </span><span class="lineNoCov"> 0 : Xapian::Document doc = mi.get_document();</span> +<span class="lineNum"> 104 </span> : +<span class="lineNum"> 105 </span> : // Return the query to get the list of similar documents +<span class="lineNum"> 106 </span><span class="lineNoCov"> 0 : return Xapian::Query(Xapian::Query::OP_OR, doc.termlist_begin(), doc.termlist_end());</span> +<span class="lineNum"> 107 </span> : } +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span> : double Source::getDoubleValue(const std::string& pkgname, +<span class="lineNum"> 110 </span><span class="lineNoCov"> 0 : Xapian::valueno val_id) const</span> +<span class="lineNum"> 111 </span> : { +<span class="lineNum"> 112 </span><span class="lineNoCov"> 0 : Xapian::docid id = docidByName(pkgname);</span> +<span class="lineNum"> 113 </span><span class="lineNoCov"> 0 : if (id == 0)</span> +<span class="lineNum"> 114 </span><span class="lineNoCov"> 0 : return 0.0;</span> +<span class="lineNum"> 115 </span><span class="lineNoCov"> 0 : Xapian::Document doc = db().get_document(id);</span> +<span class="lineNum"> 116 </span><span class="lineNoCov"> 0 : string val = doc.get_value(val_id);</span> +<span class="lineNum"> 117 </span><span class="lineNoCov"> 0 : if (val.empty())</span> +<span class="lineNum"> 118 </span><span class="lineNoCov"> 0 : return 0.0;</span> +<span class="lineNum"> 119 </span> : else +<span class="lineNum"> 120 </span><span class="lineNoCov"> 0 : return Xapian::sortable_unserialise(val);</span> +<span class="lineNum"> 121 </span> : } +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span> : int Source::getIntValue(const std::string& pkgname, +<span class="lineNum"> 124 </span><span class="lineNoCov"> 0 : Xapian::valueno val_id) const</span> +<span class="lineNum"> 125 </span> : { +<span class="lineNum"> 126 </span><span class="lineNoCov"> 0 : Xapian::docid id = docidByName(pkgname);</span> +<span class="lineNum"> 127 </span><span class="lineNoCov"> 0 : if (id == 0)</span> +<span class="lineNum"> 128 </span><span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 129 </span><span class="lineNoCov"> 0 : Xapian::Document doc = db().get_document(id);</span> +<span class="lineNum"> 130 </span><span class="lineNoCov"> 0 : string val = doc.get_value(val_id);</span> +<span class="lineNum"> 131 </span><span class="lineNoCov"> 0 : if (val.empty())</span> +<span class="lineNum"> 132 </span><span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 133 </span> : else +<span class="lineNum"> 134 </span><span class="lineNoCov"> 0 : return (int)nearbyint(Xapian::sortable_unserialise(val));</span> +<span class="lineNum"> 135 </span> : } +<span class="lineNum"> 136 </span> : +<span class="lineNum"> 137 </span> : } +<span class="lineNum"> 138 </span> : } +<span class="lineNum"> 139 </span><span class="lineCov"> 3 : }</span> +<span class="lineNum"> 140 </span> : +<span class="lineNum"> 141 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/xapian.h.gcov.html b/rep/ept/core/xapian.h.gcov.html new file mode 100644 index 0000000..d38457e --- /dev/null +++ b/rep/ept/core/xapian.h.gcov.html @@ -0,0 +1,456 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/xapian.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - xapian.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">109</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">87.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">95</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #include <xapian.h> +<span class="lineNum"> 3 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 4 </span> : #include <wibble/regexp.h> +<span class="lineNum"> 5 </span> : #include <wibble/sys/pipe.h> +<span class="lineNum"> 6 </span> : #include <wibble/sys/exec.h> +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : #ifndef EPT_XAPIAN_H +<span class="lineNum"> 9 </span> : #define EPT_XAPIAN_H +<span class="lineNum"> 10 </span> : +<span class="lineNum"> 11 </span> : namespace ept { +<span class="lineNum"> 12 </span> : namespace core { +<span class="lineNum"> 13 </span> : namespace xapian { +<span class="lineNum"> 14 </span> : +<span class="lineNum"> 15 </span> : // Allocate value indexes for known values +<span class="lineNum"> 16 </span> : const Xapian::valueno VAL_APT_INSTALLED_SIZE = 1; +<span class="lineNum"> 17 </span> : const Xapian::valueno VAL_APT_PACKAGE_SIZE = 2; +<span class="lineNum"> 18 </span> : const Xapian::valueno VAL_POPCON = 10; +<span class="lineNum"> 19 </span> : const Xapian::valueno VAL_ITERATING_RATING = 20; +<span class="lineNum"> 20 </span> : const Xapian::valueno VAL_ITERATING_FUNCTIONALITY = 21; +<span class="lineNum"> 21 </span> : const Xapian::valueno VAL_ITERATING_USABILITY = 22; +<span class="lineNum"> 22 </span> : const Xapian::valueno VAL_ITERATING_SECURITY = 23; +<span class="lineNum"> 23 </span> : const Xapian::valueno VAL_ITERATING_PERFORMANCE = 24; +<span class="lineNum"> 24 </span> : const Xapian::valueno VAL_ITERATING_QUALITY = 25; +<span class="lineNum"> 25 </span> : const Xapian::valueno VAL_ITERATING_SUPPORT = 26; +<span class="lineNum"> 26 </span> : const Xapian::valueno VAL_ITERATING_ADOPTION = 27; +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : struct TagFilter : public Xapian::ExpandDecider +<span class="lineNum"> 29 </span><span class="lineCov"> 8 : {</span> +<span class="lineNum"> 30 </span><span class="lineCov"> 1760 : virtual bool operator()(const std::string &term) const {</span> +<span class="lineNum"> 31 </span><span class="lineCov"> 1760 : return term[0] == 'X' && term[1] == 'T';</span> +<span class="lineNum"> 32 </span> : } +<span class="lineNum"> 33 </span> : }; +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span><span class="lineCov"> 91 : struct List {</span> +<span class="lineNum"> 36 </span> : char m_enqPlace[sizeof(Xapian::Enquire)]; +<span class="lineNum"> 37 </span> : mutable Xapian::MSet m_matches; +<span class="lineNum"> 38 </span> : mutable Xapian::MSet::const_iterator m_iter; +<span class="lineNum"> 39 </span> : mutable int m_pos; +<span class="lineNum"> 40 </span> : typedef List Type; +<span class="lineNum"> 41 </span> : +<span class="lineNum"> 42 </span> : static const size_t chunkSize = 20; +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span> : List head() const { +<span class="lineNum"> 45 </span> : seek(); +<span class="lineNum"> 46 </span> : return *this; +<span class="lineNum"> 47 </span> : } +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span><span class="lineCov"> 15 : Token token() const {</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 15 : Token t;</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 15 : t._id = m_iter.get_document().get_data();</span> +<span class="lineNum"> 52 </span><span class="lineNoCov"> 0 : return t;</span> +<span class="lineNum"> 53 </span> : } +<span class="lineNum"> 54 </span> : +<span class="lineNum"> 55 </span> : bool operator<( const List &o ) const { +<span class="lineNum"> 56 </span> : return token() < o.token(); +<span class="lineNum"> 57 </span> : } +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span><span class="lineCov"> 58 : void seek() const {</span> +<span class="lineNum"> 60 </span><span class="lineCov"> 58 : if ( m_matches.size() == chunkSize && m_iter == m_matches.end() ) {</span> +<span class="lineNum"> 61 </span><span class="lineNoCov"> 0 : m_matches = enq().get_mset( m_pos, chunkSize );</span> +<span class="lineNum"> 62 </span><span class="lineNoCov"> 0 : m_iter = m_matches.begin();</span> +<span class="lineNum"> 63 </span><span class="lineNoCov"> 0 : m_pos += chunkSize;</span> +<span class="lineNum"> 64 </span> : } +<span class="lineNum"> 65 </span><span class="lineCov"> 58 : }</span> +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span><span class="lineCov"> 30 : bool empty() const {</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 30 : if ( m_pos == -1 )</span> +<span class="lineNum"> 69 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 30 : seek();</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 30 : return m_matches.size() < 30 && m_iter == m_matches.end();</span> +<span class="lineNum"> 72 </span> : } +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span><span class="lineCov"> 28 : List tail() const {</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 28 : List t = *this;</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 28 : t.seek();</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 28 : t.m_iter ++;</span> +<span class="lineNum"> 78 </span><span class="lineNoCov"> 0 : return t;</span> +<span class="lineNum"> 79 </span> : } +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span><span class="lineCov"> 6 : Xapian::Enquire const &enq() const {</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 6 : return *reinterpret_cast< Xapian::Enquire const * >( m_enqPlace );</span> +<span class="lineNum"> 83 </span> : } +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span><span class="lineCov"> 3 : List( Xapian::Enquire _enq )</span> +<span class="lineNum"> 86 </span><span class="lineCov"> 3 : {</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 3 : Xapian::Enquire *e = new (m_enqPlace) Xapian::Enquire( _enq );</span> +<span class="lineNum"> 88 </span><span class="lineCov"> 3 : assert_eq( e, &enq() );</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 6 : m_matches = enq().get_mset( 0, chunkSize );</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 3 : m_iter = m_matches.begin();</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 3 : m_pos = chunkSize;</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 3 : }</span> +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span> : List() {} +<span class="lineNum"> 95 </span> : }; +<span class="lineNum"> 96 </span> : +<span class="lineNum"> 97 </span><span class="lineCov"> 13 : struct Query {</span> +<span class="lineNum"> 98 </span> : Xapian::Database *m_db; +<span class="lineNum"> 99 </span> : Xapian::Enquire m_enq; +<span class="lineNum"> 100 </span> : Xapian::Stem m_stem; +<span class="lineNum"> 101 </span> : typedef std::set< std::string > Terms; +<span class="lineNum"> 102 </span> : Terms m_include, m_exclude; +<span class="lineNum"> 103 </span> : int m_cutoff; +<span class="lineNum"> 104 </span> : bool m_expand; +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span><span class="lineCov"> 5 : void setQualityCutoff( int c ) {</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 5 : m_cutoff = c;</span> +<span class="lineNum"> 108 </span><span class="lineCov"> 5 : }</span> +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span><span class="lineCov"> 5 : void setExpand( bool e ) { m_expand = e; }</span> +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span><span class="lineCov"> 9 : Query( Xapian::Database &e ) : m_db( &e ), m_enq( e ) {</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 9 : m_cutoff = 50;</span> +<span class="lineNum"> 114 </span><span class="lineCov"> 9 : m_expand = true;</span> +<span class="lineNum"> 115 </span><span class="lineCov"> 9 : }</span> +<span class="lineNum"> 116 </span> : +<span class="lineNum"> 117 </span><span class="lineCov"> 5 : wibble::Tokenizer queryTokenizer( std::string q ) const {</span> +<span class="lineNum"> 118 </span><span class="lineCov"> 5 : return wibble::Tokenizer( q, "[A-Za-z0-9_+:-]+", REG_EXTENDED );</span> +<span class="lineNum"> 119 </span> : } +<span class="lineNum"> 120 </span> : +<span class="lineNum"> 121 </span> : template< typename Out > +<span class="lineNum"> 122 </span><span class="lineCov"> 5 : void tokenizeQuery( std::string q, Out o ) const</span> +<span class="lineNum"> 123 </span> : { +<span class="lineNum"> 124 </span><span class="lineCov"> 5 : wibble::Tokenizer tok = queryTokenizer( q );</span> +<span class="lineNum"> 125 </span><span class="lineCov"> 15 : for (wibble::Tokenizer::const_iterator i = tok.begin(); i != tok.end(); ++i )</span> +<span class="lineNum"> 126 </span> : { +<span class="lineNum"> 127 </span><span class="lineCov"> 10 : if ( (*i).find( "::" ) != std::string::npos ) { // assume tag</span> +<span class="lineNum"> 128 </span><span class="lineNoCov"> 0 : *o++ = ("XT" + *i);</span> +<span class="lineNum"> 129 </span> : } else { +<span class="lineNum"> 130 </span><span class="lineCov"> 10 : std::string t = wibble::str::tolower(*i);</span> +<span class="lineNum"> 131 </span><span class="lineCov"> 10 : std::string s = m_stem(t);</span> +<span class="lineNum"> 132 </span><span class="lineCov"> 10 : *o++ = t;</span> +<span class="lineNum"> 133 </span><span class="lineCov"> 10 : if (s != t)</span> +<span class="lineNum"> 134 </span><span class="lineCov"> 5 : *o++ = ("Z" + s);</span> +<span class="lineNum"> 135 </span> : } +<span class="lineNum"> 136 </span> : } +<span class="lineNum"> 137 </span><span class="lineCov"> 5 : }</span> +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span> : template< typename Out > +<span class="lineNum"> 140 </span><span class="lineCov"> 4 : void expand( Out o ) const</span> +<span class="lineNum"> 141 </span> : { +<span class="lineNum"> 142 </span><span class="lineCov"> 4 : Xapian::RSet rset;</span> +<span class="lineNum"> 143 </span> : // Get the top 5 results as 'good ones' to compute the search expansion +<span class="lineNum"> 144 </span><span class="lineCov"> 4 : Xapian::MSet mset = m_enq.get_mset(0, 5);</span> +<span class="lineNum"> 145 </span><span class="lineCov"> 24 : for ( Xapian::MSet::iterator i = mset.begin(); i != mset.end(); ++i )</span> +<span class="lineNum"> 146 </span><span class="lineCov"> 24 : rset.add_document(i);</span> +<span class="lineNum"> 147 </span> : // Get the expanded set, only expanding the query with tag names +<span class="lineNum"> 148 </span><span class="lineCov"> 4 : TagFilter tagf;</span> +<span class="lineNum"> 149 </span><span class="lineCov"> 4 : Xapian::ESet eset = m_enq.get_eset(5, rset, &tagf);</span> +<span class="lineNum"> 150 </span><span class="lineCov"> 4 : for ( Xapian::ESetIterator i = eset.begin(); i != eset.end(); ++i )</span> +<span class="lineNum"> 151 </span><span class="lineCov"> 4 : *o++ = *i;</span> +<span class="lineNum"> 152 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 153 </span> : +<span class="lineNum"> 154 </span><span class="lineCov"> 8 : void updateEnquire() {</span> +<span class="lineNum"> 155 </span> : // set up query now +<span class="lineNum"> 156 </span> : Xapian::Query inc( Xapian::Query::OP_OR, +<span class="lineNum"> 157 </span> : m_include.begin(), +<span class="lineNum"> 158 </span><span class="lineCov"> 8 : m_include.end() ),</span> +<span class="lineNum"> 159 </span> : exc( Xapian::Query::OP_OR, +<span class="lineNum"> 160 </span> : m_exclude.begin(), +<span class="lineNum"> 161 </span><span class="lineCov"> 8 : m_exclude.end() ),</span> +<span class="lineNum"> 162 </span><span class="lineCov"> 8 : query( Xapian::Query::OP_AND_NOT, inc, exc );</span> +<span class="lineNum"> 163 </span> : +<span class="lineNum"> 164 </span><span class="lineCov"> 8 : m_enq.set_query( query );</span> +<span class="lineNum"> 165 </span> : +<span class="lineNum"> 166 </span><span class="lineCov"> 8 : if ( m_expand ) {</span> +<span class="lineNum"> 167 </span><span class="lineCov"> 4 : m_expand = false;</span> +<span class="lineNum"> 168 </span><span class="lineCov"> 4 : expand( std::inserter( m_include, m_include.begin() ) );</span> +<span class="lineNum"> 169 </span><span class="lineCov"> 4 : updateEnquire();</span> +<span class="lineNum"> 170 </span><span class="lineCov"> 4 : m_expand = true;</span> +<span class="lineNum"> 171 </span><span class="lineCov"> 4 : return;</span> +<span class="lineNum"> 172 </span> : } +<span class="lineNum"> 173 </span> : +<span class="lineNum"> 174 </span><span class="lineCov"> 4 : Xapian::MSet first = m_enq.get_mset(0, 1, 0, 0, 0);</span> +<span class="lineNum"> 175 </span><span class="lineCov"> 4 : Xapian::MSetIterator ifirst = first.begin();</span> +<span class="lineNum"> 176 </span><span class="lineCov"> 4 : if ( ifirst != first.end() ) {</span> +<span class="lineNum"> 177 </span><span class="lineCov"> 4 : Xapian::percent cutoff = ifirst.get_percent() * m_cutoff / 100;</span> +<span class="lineNum"> 178 </span><span class="lineCov"> 4 : m_enq.set_cutoff(cutoff);</span> +<span class="lineNum"> 179 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 180 </span> : } +<span class="lineNum"> 181 </span> : +<span class="lineNum"> 182 </span><span class="lineCov"> 3 : List results() {</span> +<span class="lineNum"> 183 </span><span class="lineCov"> 3 : updateEnquire();</span> +<span class="lineNum"> 184 </span><span class="lineCov"> 3 : return List( m_enq );</span> +<span class="lineNum"> 185 </span> : } +<span class="lineNum"> 186 </span> : +<span class="lineNum"> 187 </span> : std::map< std::string, int > relevantTags( int n = 30 ) { +<span class="lineNum"> 188 </span> : updateEnquire(); +<span class="lineNum"> 189 </span> : std::map< std::string, int > relev; +<span class="lineNum"> 190 </span> : Xapian::RSet rset; +<span class="lineNum"> 191 </span> : Xapian::MSet mset = m_enq.get_mset(0, 100); +<span class="lineNum"> 192 </span> : for ( Xapian::MSet::iterator i = mset.begin(); i != mset.end(); ++i ) +<span class="lineNum"> 193 </span> : rset.add_document(i); +<span class="lineNum"> 194 </span> : // Get the expanded set, only expanding the query with tag names +<span class="lineNum"> 195 </span> : TagFilter tagf; +<span class="lineNum"> 196 </span> : Xapian::ESet eset = m_enq.get_eset(n, rset, &tagf); +<span class="lineNum"> 197 </span> : for ( Xapian::ESetIterator i = eset.begin(); i != eset.end(); ++i ) +<span class="lineNum"> 198 </span> : relev.insert( relev.begin(), +<span class="lineNum"> 199 </span> : std::make_pair( +<span class="lineNum"> 200 </span> : std::string( *i, 2, std::string::npos ), +<span class="lineNum"> 201 </span> : i.get_weight() ) ); +<span class="lineNum"> 202 </span> : return relev; +<span class="lineNum"> 203 </span> : } +<span class="lineNum"> 204 </span> : +<span class="lineNum"> 205 </span><span class="lineCov"> 5 : void addTerms( std::string t, bool partial = false, bool exclude = false ) {</span> +<span class="lineNum"> 206 </span><span class="lineCov"> 5 : Terms &to = exclude ? m_exclude : m_include;</span> +<span class="lineNum"> 207 </span><span class="lineCov"> 5 : std::vector< std::string > tok;</span> +<span class="lineNum"> 208 </span><span class="lineCov"> 5 : tokenizeQuery( t, std::back_inserter( tok ) );</span> +<span class="lineNum"> 209 </span><span class="lineCov"> 5 : if ( partial ) {</span> +<span class="lineNum"> 210 </span><span class="lineNoCov"> 0 : if ( tok.back().size() == 1 ) {</span> +<span class="lineNum"> 211 </span><span class="lineNoCov"> 0 : tok.pop_back();</span> +<span class="lineNum"> 212 </span> : } else { +<span class="lineNum"> 213 </span> : std::copy( +<span class="lineNum"> 214 </span> : m_db->allterms_begin( tok.back() ), +<span class="lineNum"> 215 </span> : m_db->allterms_end( tok.back() ), +<span class="lineNum"> 216 </span><span class="lineNoCov"> 0 : std::back_inserter( tok ) );</span> +<span class="lineNum"> 217 </span> : } +<span class="lineNum"> 218 </span> : } +<span class="lineNum"> 219 </span><span class="lineCov"> 5 : std::copy( tok.begin(), tok.end(), std::inserter( to, to.begin() ) );</span> +<span class="lineNum"> 220 </span><span class="lineCov"> 5 : }</span> +<span class="lineNum"> 221 </span> : +<span class="lineNum"> 222 </span> : void addTerms( const Terms &t, bool exclude = false ) { +<span class="lineNum"> 223 </span> : Terms &to = exclude ? m_exclude : m_include; +<span class="lineNum"> 224 </span> : std::copy( t.begin(), t.end(), std::inserter( to, to.begin() ) ); +<span class="lineNum"> 225 </span> : } +<span class="lineNum"> 226 </span> : +<span class="lineNum"> 227 </span> : }; +<span class="lineNum"> 228 </span> : +<span class="lineNum"> 229 </span> : struct Source +<span class="lineNum"> 230 </span><span class="lineCov"> 4 : {</span> +<span class="lineNum"> 231 </span> : protected: +<span class="lineNum"> 232 </span> : mutable Xapian::Database m_db; +<span class="lineNum"> 233 </span> : Xapian::Stem m_stem; +<span class="lineNum"> 234 </span> : mutable bool m_opened; +<span class="lineNum"> 235 </span> : +<span class="lineNum"> 236 </span> : /// Return a lowercased copy of the string +<span class="lineNum"> 237 </span> : static std::string toLower(const std::string& str); +<span class="lineNum"> 238 </span> : +<span class="lineNum"> 239 </span> : /** +<span class="lineNum"> 240 </span> : * Add normalised tokens computed from the string to the document doc. +<span class="lineNum"> 241 </span> : * +<span class="lineNum"> 242 </span> : * pos is used as a sequence generator for entering the token position in +<span class="lineNum"> 243 </span> : * the document. +<span class="lineNum"> 244 </span> : */ +<span class="lineNum"> 245 </span> : void normalize_and_add(Xapian::Document& doc, const std::string& term, +<span class="lineNum"> 246 </span> : int& pos) const; +<span class="lineNum"> 247 </span> : +<span class="lineNum"> 248 </span> : public: +<span class="lineNum"> 249 </span> : Source(); +<span class="lineNum"> 250 </span> : +<span class="lineNum"> 251 </span> : /// Access the Xapian database +<span class="lineNum"> 252 </span><span class="lineCov"> 9 : Xapian::Database& db() {</span> +<span class="lineNum"> 253 </span><span class="lineCov"> 9 : open();</span> +<span class="lineNum"> 254 </span><span class="lineCov"> 9 : return m_db;</span> +<span class="lineNum"> 255 </span> : } +<span class="lineNum"> 256 </span> : +<span class="lineNum"> 257 </span> : /// Access the Xapian database +<span class="lineNum"> 258 </span><span class="lineNoCov"> 0 : const Xapian::Database& db() const {</span> +<span class="lineNum"> 259 </span><span class="lineNoCov"> 0 : open();</span> +<span class="lineNum"> 260 </span><span class="lineNoCov"> 0 : return m_db;</span> +<span class="lineNum"> 261 </span> : } +<span class="lineNum"> 262 </span> : +<span class="lineNum"> 263 </span> : void open() const; +<span class="lineNum"> 264 </span> : void invalidate() { +<span class="lineNum"> 265 </span> : m_db = Xapian::Database(); +<span class="lineNum"> 266 </span> : m_opened = false; +<span class="lineNum"> 267 </span> : } +<span class="lineNum"> 268 </span> : +<span class="lineNum"> 269 </span> : /// Timestamp of when the Xapian database was last updated +<span class="lineNum"> 270 </span> : time_t timestamp() const; +<span class="lineNum"> 271 </span> : +<span class="lineNum"> 272 </span> : void updateLeniently( AptDatabase &apt, OpProgress *op = 0 ) { +<span class="lineNum"> 273 </span> : if (apt.timestamp() - timestamp() > 86400 * 8) // a little over a week +<span class="lineNum"> 274 </span> : update( op ); +<span class="lineNum"> 275 </span> : } +<span class="lineNum"> 276 </span> : +<span class="lineNum"> 277 </span> : void update( OpProgress *op = 0 ) { +<span class="lineNum"> 278 </span> : if ( !op ) +<span class="lineNum"> 279 </span> : op = new OpProgress(); +<span class="lineNum"> 280 </span> : +<span class="lineNum"> 281 </span> : wibble::exception::AddContext _ctx( "Rebuilding Xapian database." ); +<span class="lineNum"> 282 </span> : int outfd; +<span class="lineNum"> 283 </span> : std::string op_str; +<span class="lineNum"> 284 </span> : +<span class="lineNum"> 285 </span> : wibble::sys::Exec ex( "update-apt-xapian-index" ); +<span class="lineNum"> 286 </span> : ex.args.push_back( "--batch-mode" ); +<span class="lineNum"> 287 </span> : ex.searchInPath = true; +<span class="lineNum"> 288 </span> : ex.forkAndRedirect( 0, &outfd, 0 ); +<span class="lineNum"> 289 </span> : +<span class="lineNum"> 290 </span> : wibble::sys::Pipe monit( outfd ); +<span class="lineNum"> 291 </span> : while ( !monit.eof() ) { +<span class="lineNum"> 292 </span> : std::string line = monit.nextLine(); +<span class="lineNum"> 293 </span> : if ( line.empty() ) { +<span class="lineNum"> 294 </span> : usleep( 100000 ); +<span class="lineNum"> 295 </span> : continue; +<span class="lineNum"> 296 </span> : } +<span class="lineNum"> 297 </span> : std::cerr << "got : " << line << std::endl; +<span class="lineNum"> 298 </span> : if ( wibble::str::startsWith( line, "begin: " ) ) { +<span class="lineNum"> 299 </span> : op_str = std::string( line, 7, std::string::npos ); +<span class="lineNum"> 300 </span> : op->OverallProgress( 0, 100, 100, op_str ); +<span class="lineNum"> 301 </span> : +<span class="lineNum"> 302 </span> : } else if ( wibble::str::startsWith( line, "done: " ) ) { +<span class="lineNum"> 303 </span> : op->Done(); +<span class="lineNum"> 304 </span> : } else if ( wibble::str::startsWith( line, "progress: " ) ) { +<span class="lineNum"> 305 </span> : wibble::ERegexp re( "progress: ([0-9]+)/([0-9]+)", 3 ); +<span class="lineNum"> 306 </span> : if ( re.match( line ) ) { +<span class="lineNum"> 307 </span> : assert_eq( re[2], "100" ); +<span class="lineNum"> 308 </span> : op->OverallProgress( atoi( re[1].c_str() ), 100, 100, op_str ); +<span class="lineNum"> 309 </span> : } +<span class="lineNum"> 310 </span> : } +<span class="lineNum"> 311 </span> : } +<span class="lineNum"> 312 </span> : ex.waitForSuccess(); +<span class="lineNum"> 313 </span> : invalidate(); +<span class="lineNum"> 314 </span> : } +<span class="lineNum"> 315 </span> : +<span class="lineNum"> 316 </span> : /// Returns true if the index has data +<span class="lineNum"> 317 </span> : bool hasData() const { return timestamp() > 0; } +<span class="lineNum"> 318 </span> : +<span class="lineNum"> 319 </span> : Query query( const std::string &s, +<span class="lineNum"> 320 </span> : bool expand = true, +<span class="lineNum"> 321 </span><span class="lineCov"> 5 : int qualityCutoff = 50 )</span> +<span class="lineNum"> 322 </span> : { +<span class="lineNum"> 323 </span><span class="lineCov"> 5 : Query q( db() );</span> +<span class="lineNum"> 324 </span><span class="lineCov"> 5 : q.setQualityCutoff( qualityCutoff );</span> +<span class="lineNum"> 325 </span><span class="lineCov"> 5 : q.setExpand( expand );</span> +<span class="lineNum"> 326 </span><span class="lineCov"> 5 : q.addTerms( s );</span> +<span class="lineNum"> 327 </span><span class="lineNoCov"> 0 : return q;</span> +<span class="lineNum"> 328 </span> : } +<span class="lineNum"> 329 </span> : +<span class="lineNum"> 330 </span> : Query partialQuery( const std::string &s ) { +<span class="lineNum"> 331 </span> : Query q( db() ); +<span class="lineNum"> 332 </span> : q.addTerms( s, true ); // partial +<span class="lineNum"> 333 </span> : return q; +<span class="lineNum"> 334 </span> : } +<span class="lineNum"> 335 </span> : +<span class="lineNum"> 336 </span> : /// Returns true if the index is older than the Apt database information +<span class="lineNum"> 337 </span> : // bool needsRebuild(apt::Apt& apt); +<span class="lineNum"> 338 </span> : +<span class="lineNum"> 339 </span> : Xapian::docid docidByName(const std::string& pkgname) const; +<span class="lineNum"> 340 </span> : +<span class="lineNum"> 341 </span> : /** +<span class="lineNum"> 342 </span> : * Tokenize the string and build an OR query with the resulting keywords +<span class="lineNum"> 343 </span> : */ +<span class="lineNum"> 344 </span> : Xapian::Query makeORQuery(const std::string& keywords) const; +<span class="lineNum"> 345 </span> : +<span class="lineNum"> 346 </span> : /** +<span class="lineNum"> 347 </span> : * Tokenize the string and build an OR query with the resulting keywords. +<span class="lineNum"> 348 </span> : * +<span class="lineNum"> 349 </span> : * The last token in keywords is considered to be typed only partially, to +<span class="lineNum"> 350 </span> : * implement proper search-as-you-type. +<span class="lineNum"> 351 </span> : */ +<span class="lineNum"> 352 </span> : Xapian::Query makePartialORQuery(const std::string& keywords) const; +<span class="lineNum"> 353 </span> : +<span class="lineNum"> 354 </span> : /** +<span class="lineNum"> 355 </span> : * Build a query with the given keywords, specified as iterators of strings +<span class="lineNum"> 356 </span> : */ +<span class="lineNum"> 357 </span> : template<typename ITER> +<span class="lineNum"> 358 </span> : Xapian::Query makeORQuery(const ITER& begin, const ITER& end) const +<span class="lineNum"> 359 </span> : { +<span class="lineNum"> 360 </span> : return Xapian::Query(Xapian::Query::OP_OR, begin, end); +<span class="lineNum"> 361 </span> : } +<span class="lineNum"> 362 </span> : +<span class="lineNum"> 363 </span> : /// Return a list of tag-based terms that can be used to expand an OR query +<span class="lineNum"> 364 </span> : std::vector<std::string> expand(Xapian::Enquire& enq) const; +<span class="lineNum"> 365 </span> : +<span class="lineNum"> 366 </span> : // std::vector<std::string> similar(const std::string& pkg); +<span class="lineNum"> 367 </span> : +<span class="lineNum"> 368 </span> : /** +<span class="lineNum"> 369 </span> : * Create a query to look for packages similar to the given one +<span class="lineNum"> 370 </span> : */ +<span class="lineNum"> 371 </span> : Xapian::Query makeRelatedQuery(const std::string& pkgname) const; +<span class="lineNum"> 372 </span> : +<span class="lineNum"> 373 </span> : /** +<span class="lineNum"> 374 </span> : * Get the integer value for +<span class="lineNum"> 375 </span> : */ +<span class="lineNum"> 376 </span> : double getDoubleValue(const std::string& pkgname, +<span class="lineNum"> 377 </span> : Xapian::valueno val_id) const; +<span class="lineNum"> 378 </span> : +<span class="lineNum"> 379 </span> : /** +<span class="lineNum"> 380 </span> : * Get the integer value for +<span class="lineNum"> 381 </span> : */ +<span class="lineNum"> 382 </span> : int getIntValue(const std::string& pkgname, Xapian::valueno val_id) const; +<span class="lineNum"> 383 </span> : }; +<span class="lineNum"> 384 </span> : +<span class="lineNum"> 385 </span> : } +<span class="lineNum"> 386 </span> : } +<span class="lineNum"> 387 </span> : } +<span class="lineNum"> 388 </span> : +<span class="lineNum"> 389 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/core/xapian.test.h.gcov.html b/rep/ept/core/xapian.test.h.gcov.html new file mode 100644 index 0000000..17fc9dd --- /dev/null +++ b/rep/ept/core/xapian.test.h.gcov.html @@ -0,0 +1,141 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/core/xapian.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/core</a> - xapian.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">36</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">36</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #include <ept/test.h> +<span class="lineNum"> 3 </span> : #include <ept/core/list.h> +<span class="lineNum"> 4 </span> : #include <ept/core/xapian.h> +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : // TODO temporary, for building test database +<span class="lineNum"> 7 </span> : #include <ept/apt/apt.h> +<span class="lineNum"> 8 </span> : #include <ept/textsearch/textsearch.h> +<span class="lineNum"> 9 </span> : #include <ept/textsearch/maint/path.h> +<span class="lineNum"> 10 </span> : +<span class="lineNum"> 11 </span> : using namespace ept; +<span class="lineNum"> 12 </span> : using namespace core; +<span class="lineNum"> 13 </span> : +<span class="lineNum"> 14 </span> : namespace ept { +<span class="lineNum"> 15 </span> : namespace textsearch { +<span class="lineNum"> 16 </span> : extern size_t max_index; +<span class="lineNum"> 17 </span> : } +<span class="lineNum"> 18 </span> : } +<span class="lineNum"> 19 </span> : +<span class="lineNum"> 20 </span><span class="lineCov"> 4 : struct XapianTestEnvironment : AptTestEnvironment {</span> +<span class="lineNum"> 21 </span> : textsearch::Path::OverrideIndexDir oid; +<span class="lineNum"> 22 </span> : textsearch::TextSearch textsearch; +<span class="lineNum"> 23 </span> : apt::Apt apt; +<span class="lineNum"> 24 </span><span class="lineCov"> 4 : XapianTestEnvironment()</span> +<span class="lineNum"> 25 </span><span class="lineCov"> 4 : : oid( TEST_ENV_DIR "xapian" )</span> +<span class="lineNum"> 26 </span> : { +<span class="lineNum"> 27 </span><span class="lineCov"> 4 : ept::textsearch::max_index = 1000;</span> +<span class="lineNum"> 28 </span><span class="lineCov"> 4 : textsearch.rebuildIfNeeded(apt);</span> +<span class="lineNum"> 29 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 30 </span> : }; +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span><span class="lineCov"> 4 : struct TestXapian : XapianTestEnvironment {</span> +<span class="lineNum"> 33 </span> : xapian::Source xap; +<span class="lineNum"> 34 </span> : xapian::Query query; +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 4 : TestXapian() : query( xap.db() )</span> +<span class="lineNum"> 37 </span> : { +<span class="lineNum"> 38 </span><span class="lineCov"> 4 : query = xap.query( "sgml tool" );</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span><span class="lineCov"> 1 : Test enquire() {</span> +<span class="lineNum"> 42 </span><span class="lineCov"> 1 : query.updateEnquire();</span> +<span class="lineNum"> 43 </span><span class="lineCov"> 1 : Xapian::MSet matches = query.m_enq.get_mset(0, 100);</span> +<span class="lineNum"> 44 </span><span class="lineCov"> 1 : assert( matches.size() > 0 );</span> +<span class="lineNum"> 45 </span><span class="lineCov"> 2 : assert_eq( matches.begin().get_document().get_data(), "psgml" );</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span><span class="lineCov"> 1 : Test listCount() {</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 1 : xapian::List l( query.results() );</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 1 : Xapian::MSet matches = query.m_enq.get_mset(0, 6000);</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 1 : assert_eq( list::count( l ), matches.size() );</span> +<span class="lineNum"> 52 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span> : template< typename List > +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : void checkXapianList( List l, Xapian::MSet m ) {</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 1 : Xapian::MSet::const_iterator i = m.begin();</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 16 : while (! l.empty() ) {</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 14 : assert_eq( l.token().package(), i.get_document().get_data() );</span> +<span class="lineNum"> 59 </span><span class="lineCov"> 14 : l = l.tail();</span> +<span class="lineNum"> 60 </span><span class="lineCov"> 15 : ++ i;</span> +<span class="lineNum"> 61 </span> : } +<span class="lineNum"> 62 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 63 </span> : +<span class="lineNum"> 64 </span><span class="lineCov"> 1 : Test list() {</span> +<span class="lineNum"> 65 </span><span class="lineCov"> 1 : xapian::List l( query.results() );</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : Xapian::MSet matches = query.m_enq.get_mset(0, 6000);</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 1 : checkXapianList( l, matches );</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 69 </span> : +<span class="lineNum"> 70 </span><span class="lineCov"> 1 : Test checkQuery() {</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 1 : assert_eq( xap.query( "sgml tool" ).results().token().package(), "psgml" );</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span> : }; +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/debtags.cc.gcov.html b/rep/ept/debtags/debtags.cc.gcov.html new file mode 100644 index 0000000..a924a43 --- /dev/null +++ b/rep/ept/debtags/debtags.cc.gcov.html @@ -0,0 +1,317 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/debtags.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - debtags.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">81</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">48.1 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">39</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** -*- C++ -*- +<span class="lineNum"> 2 </span> : * @file +<span class="lineNum"> 3 </span> : * @author Enrico Zini (enrico) <enrico@enricozini.org> +<span class="lineNum"> 4 </span> : */ +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : /* +<span class="lineNum"> 7 </span> : * System tag database +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * Copyright (C) 2003-2008 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 12 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 13 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 14 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 17 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 18 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 19 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 20 </span> : * +<span class="lineNum"> 21 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 22 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 23 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 24 </span> : */ +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include <ept/debtags/debtags.h> +<span class="lineNum"> 27 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 28 </span> : #include <ept/debtags/maint/serializer.h> +<span class="lineNum"> 29 </span> : #include <ept/debtags/maint/debtagsindexer.h> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : #include <tagcoll/input/stdio.h> +<span class="lineNum"> 32 </span> : #include <tagcoll/TextFormat.h> +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 35 </span> : #include <wibble/string.h> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : #include <iostream> +<span class="lineNum"> 38 </span> : #include <sstream> +<span class="lineNum"> 39 </span> : +<span class="lineNum"> 40 </span> : #include <sys/wait.h> // WIFEXITED WEXITSTATUS +<span class="lineNum"> 41 </span> : #include <sys/types.h> // getpwuid, stat, mkdir, getuid +<span class="lineNum"> 42 </span> : #include <sys/stat.h> // stat, mkdir +<span class="lineNum"> 43 </span> : #include <pwd.h> // getpwuid +<span class="lineNum"> 44 </span> : #include <unistd.h> // stat, getuid +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span> : using namespace std; +<span class="lineNum"> 48 </span> : using namespace tagcoll; +<span class="lineNum"> 49 </span> : using namespace wibble; +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span> : namespace ept { +<span class="lineNum"> 52 </span> : namespace debtags { +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span><span class="lineCov"> 10 : Debtags::Debtags(bool editable)</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 10 : : m_coll(m_rocoll)</span> +<span class="lineNum"> 56 </span> : { +<span class="lineNum"> 57 </span><span class="lineCov"> 10 : std::string tagfname;</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 10 : std::string idxfname;</span> +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span><span class="lineCov"> 10 : if (!DebtagsIndexer::obtainWorkingDebtags(vocabulary(), tagfname, idxfname))</span> +<span class="lineNum"> 61 </span> : { +<span class="lineNum"> 62 </span><span class="lineCov"> 1 : m_timestamp = 0;</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 1 : return;</span> +<span class="lineNum"> 64 </span> : } else { +<span class="lineNum"> 65 </span><span class="lineCov"> 9 : m_timestamp = Path::timestamp(idxfname);</span> +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span><span class="lineCov"> 9 : mastermmap.init(idxfname);</span> +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span> : // Initialize the readonly index +<span class="lineNum"> 70 </span><span class="lineCov"> 9 : m_pkgid.init(mastermmap, 0);</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 9 : m_rocoll.init(mastermmap, 1, 2);</span> +<span class="lineNum"> 72 </span> : } +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span> : // Initialize the patch collection layer +<span class="lineNum"> 75 </span><span class="lineCov"> 9 : rcdir = Path::debtagsUserSourceDir();</span> +<span class="lineNum"> 76 </span> : +<span class="lineNum"> 77 </span><span class="lineCov"> 9 : string patchFile = str::joinpath(rcdir, "patch");</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 18 : if (Path::access(patchFile, F_OK) == 0)</span> +<span class="lineNum"> 79 </span> : { +<span class="lineNum"> 80 </span><span class="lineNoCov"> 0 : input::Stdio in(patchFile);</span> +<span class="lineNum"> 81 </span><span class="lineNoCov"> 0 : PatchList<int, int> patch;</span> +<span class="lineNum"> 82 </span><span class="lineNoCov"> 0 : textformat::parsePatch(in, patchStringToInt(m_pkgid, vocabulary(), inserter(patch)));</span> +<span class="lineNum"> 83 </span><span class="lineNoCov"> 0 : m_coll.setChanges(patch);</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 9 : }</span> +<span class="lineNum"> 85 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 86 </span> : +<span class="lineNum"> 87 </span><span class="lineCov"> 3 : tagcoll::PatchList<std::string, Tag> Debtags::changes() const</span> +<span class="lineNum"> 88 </span> : { +<span class="lineNum"> 89 </span><span class="lineCov"> 3 : tagcoll::PatchList<int, int> patches = m_coll.changes();</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 3 : tagcoll::PatchList<std::string, Tag> res;</span> +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span><span class="lineCov"> 5 : for (tagcoll::PatchList<int, int>::const_iterator i = patches.begin();</span> +<span class="lineNum"> 93 </span> : i != patches.end(); ++i) +<span class="lineNum"> 94 </span> : { +<span class="lineNum"> 95 </span><span class="lineCov"> 2 : std::string pkg = packageByID(i->second.item);</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 2 : if (pkg.empty())</span> +<span class="lineNum"> 97 </span><span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 98 </span> : +<span class="lineNum"> 99 </span> : res.addPatch(tagcoll::Patch<std::string, Tag>(pkg, +<span class="lineNum"> 100 </span> : vocabulary().tagsByID(i->second.added), +<span class="lineNum"> 101 </span><span class="lineCov"> 2 : vocabulary().tagsByID(i->second.removed)));</span> +<span class="lineNum"> 102 </span> : } +<span class="lineNum"> 103 </span> : +<span class="lineNum"> 104 </span><span class="lineCov"> 3 : return res;</span> +<span class="lineNum"> 105 </span> : } +<span class="lineNum"> 106 </span> : +<span class="lineNum"> 107 </span> : +<span class="lineNum"> 108 </span> : #if 0 +<span class="lineNum"> 109 </span> : bool Debtags::hasTagDatabase() +<span class="lineNum"> 110 </span> : { +<span class="lineNum"> 111 </span> : if (Path::access(Path::tagdb(), R_OK) == -1) +<span class="lineNum"> 112 </span> : { +<span class="lineNum"> 113 </span> : std::cerr << "Missing tag database " << Path::tagdb() << std::endl; +<span class="lineNum"> 114 </span> : return false; +<span class="lineNum"> 115 </span> : } +<span class="lineNum"> 116 </span> : if (Path::access(Path::tagdbIndex(), R_OK) == -1) +<span class="lineNum"> 117 </span> : { +<span class="lineNum"> 118 </span> : std::cerr << "Missing tag database index " << Path::tagdbIndex() << std::endl; +<span class="lineNum"> 119 </span> : return false; +<span class="lineNum"> 120 </span> : } +<span class="lineNum"> 121 </span> : if (Path::access(Path::vocabulary(), R_OK) == -1) +<span class="lineNum"> 122 </span> : { +<span class="lineNum"> 123 </span> : std::cerr << "Missing tag vocabulary " << Path::vocabulary() << std::endl; +<span class="lineNum"> 124 </span> : return false; +<span class="lineNum"> 125 </span> : } +<span class="lineNum"> 126 </span> : if (Path::access(Path::vocabularyIndex(), R_OK) == -1) +<span class="lineNum"> 127 </span> : { +<span class="lineNum"> 128 </span> : std::cerr << "Missing index for tag vocabulary " << Path::vocabularyIndex() << std::endl; +<span class="lineNum"> 129 </span> : return false; +<span class="lineNum"> 130 </span> : } +<span class="lineNum"> 131 </span> : return true; +<span class="lineNum"> 132 </span> : } +<span class="lineNum"> 133 </span> : #endif +<span class="lineNum"> 134 </span> : +<span class="lineNum"> 135 </span> : +<span class="lineNum"> 136 </span><span class="lineCov"> 1 : void Debtags::savePatch()</span> +<span class="lineNum"> 137 </span> : { +<span class="lineNum"> 138 </span><span class="lineCov"> 1 : PatchList<std::string, std::string> spatch;</span> +<span class="lineNum"> 139 </span><span class="lineCov"> 1 : m_coll.changes().output(patchIntToString(m_pkgid, vocabulary(), tagcoll::inserter(spatch)));</span> +<span class="lineNum"> 140 </span><span class="lineCov"> 1 : savePatch(spatch);</span> +<span class="lineNum"> 141 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 142 </span> : +<span class="lineNum"> 143 </span><span class="lineCov"> 1 : void Debtags::savePatch(const PatchList<std::string, std::string>& patch)</span> +<span class="lineNum"> 144 </span> : { +<span class="lineNum"> 145 </span><span class="lineCov"> 1 : std::string patchFile = str::joinpath(rcdir, "patch");</span> +<span class="lineNum"> 146 </span><span class="lineCov"> 1 : std::string backup = patchFile + "~";</span> +<span class="lineNum"> 147 </span> : +<span class="lineNum"> 148 </span><span class="lineCov"> 1 : wibble::sys::fs::mkFilePath(patchFile);</span> +<span class="lineNum"> 149 </span> : +<span class="lineNum"> 150 </span><span class="lineCov"> 1 : if (access(patchFile.c_str(), F_OK) == 0)</span> +<span class="lineNum"> 151 </span><span class="lineNoCov"> 0 : if (rename(patchFile.c_str(), backup.c_str()) == -1)</span> +<span class="lineNum"> 152 </span><span class="lineNoCov"> 0 : throw wibble::exception::System("Can't rename " + patchFile + " to " + backup);</span> +<span class="lineNum"> 153 </span> : +<span class="lineNum"> 154 </span> : try { +<span class="lineNum"> 155 </span><span class="lineCov"> 1 : FILE* out = fopen(patchFile.c_str(), "w");</span> +<span class="lineNum"> 156 </span><span class="lineCov"> 1 : if (out == 0)</span> +<span class="lineNum"> 157 </span><span class="lineNoCov"> 0 : throw wibble::exception::System("Can't write to " + patchFile);</span> +<span class="lineNum"> 158 </span> : +<span class="lineNum"> 159 </span><span class="lineCov"> 1 : textformat::outputPatch(patch, out);</span> +<span class="lineNum"> 160 </span> : +<span class="lineNum"> 161 </span><span class="lineCov"> 1 : fclose(out);</span> +<span class="lineNum"> 162 </span><span class="lineNoCov"> 0 : } catch (std::exception& e) {</span> +<span class="lineNum"> 163 </span><span class="lineNoCov"> 0 : if (rename(backup.c_str(), patchFile.c_str()) == -1)</span> +<span class="lineNum"> 164 </span><span class="lineNoCov"> 0 : std::cerr << "Warning: Cannot restore previous backup copy: " << e.what() << std::endl;</span> +<span class="lineNum"> 165 </span><span class="lineNoCov"> 0 : throw;</span> +<span class="lineNum"> 166 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 167 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 168 </span> : +<span class="lineNum"> 169 </span><span class="lineNoCov"> 0 : void Debtags::savePatch(const PatchList<std::string, Tag>& patch)</span> +<span class="lineNum"> 170 </span> : { +<span class="lineNum"> 171 </span><span class="lineNoCov"> 0 : PatchList<std::string, std::string> spatch;</span> +<span class="lineNum"> 172 </span> : // patch.output(patchToString<C>(m_pkgs, m_pkgidx, m_tags, tagcoll::inserter(spatch))); +<span class="lineNum"> 173 </span><span class="lineNoCov"> 0 : savePatch(spatch);</span> +<span class="lineNum"> 174 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 175 </span> : +<span class="lineNum"> 176 </span><span class="lineNoCov"> 0 : void Debtags::sendPatch()</span> +<span class="lineNum"> 177 </span> : { +<span class="lineNum"> 178 </span><span class="lineNoCov"> 0 : PatchList<std::string, std::string> spatch;</span> +<span class="lineNum"> 179 </span><span class="lineNoCov"> 0 : m_coll.changes().output(patchIntToString(m_pkgid, vocabulary(), tagcoll::inserter(spatch)));</span> +<span class="lineNum"> 180 </span><span class="lineNoCov"> 0 : if (!spatch.empty())</span> +<span class="lineNum"> 181 </span> : { +<span class="lineNum"> 182 </span><span class="lineNoCov"> 0 : sendPatch(spatch);</span> +<span class="lineNum"> 183 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 184 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 185 </span> : +<span class="lineNum"> 186 </span><span class="lineNoCov"> 0 : void Debtags::sendPatch(const PatchList<std::string, Tag>& patch)</span> +<span class="lineNum"> 187 </span> : { +<span class="lineNum"> 188 </span><span class="lineNoCov"> 0 : PatchList<std::string, std::string> spatch;</span> +<span class="lineNum"> 189 </span> : // patch.output(patchToString<C>(m_pkgs, m_pkgidx, m_tags, tagcoll::inserter(spatch))); +<span class="lineNum"> 190 </span><span class="lineNoCov"> 0 : sendPatch(spatch);</span> +<span class="lineNum"> 191 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 192 </span> : +<span class="lineNum"> 193 </span><span class="lineNoCov"> 0 : void Debtags::sendPatch(const PatchList<std::string, std::string>& patch)</span> +<span class="lineNum"> 194 </span> : { +<span class="lineNum"> 195 </span> : static const char* cmd = "/usr/sbin/sendmail -t"; +<span class="lineNum"> 196 </span><span class="lineNoCov"> 0 : FILE* out = popen(cmd, "w");</span> +<span class="lineNum"> 197 </span><span class="lineNoCov"> 0 : if (out == 0)</span> +<span class="lineNum"> 198 </span><span class="lineNoCov"> 0 : throw wibble::exception::System(std::string("trying to run `") + cmd + "'");</span> +<span class="lineNum"> 199 </span> : +<span class="lineNum"> 200 </span><span class="lineNoCov"> 0 : struct passwd* udata = getpwuid(getuid());</span> +<span class="lineNum"> 201 </span> : +<span class="lineNum"> 202 </span> : fprintf(out, +<span class="lineNum"> 203 </span> : "To: enrico-debtags@debian.org\n" +<span class="lineNum"> 204 </span> : "Bcc: %s\n" +<span class="lineNum"> 205 </span> : "Subject: Tag patch\n" +<span class="lineNum"> 206 </span> : "Mime-Version: 1.0\n" +<span class="lineNum"> 207 </span> : "Content-Type: multipart/mixed; boundary=\"9amGYk9869ThD9tj\"\n" +<span class="lineNum"> 208 </span> : "Content-Disposition: inline\n" +<span class="lineNum"> 209 </span> : "X-Mailer: debtags-edit\n\n" +<span class="lineNum"> 210 </span> : "This mail contains a Debtags patch for the central archive\n\n" +<span class="lineNum"> 211 </span> : "--9amGYk9869ThD9tj\n" +<span class="lineNum"> 212 </span> : "Content-Type: text/plain; charset=utf-8\n" +<span class="lineNum"> 213 </span> : "Content-Disposition: inline\n\n" +<span class="lineNum"> 214 </span><span class="lineNoCov"> 0 : "-- DEBTAGS DIFF V0.1 --\n", udata->pw_name);</span> +<span class="lineNum"> 215 </span> : +<span class="lineNum"> 216 </span><span class="lineNoCov"> 0 : textformat::outputPatch(patch, out);</span> +<span class="lineNum"> 217 </span> : +<span class="lineNum"> 218 </span><span class="lineNoCov"> 0 : fprintf(out, "\n--9amGYk9869ThD9tj\n");</span> +<span class="lineNum"> 219 </span> : +<span class="lineNum"> 220 </span><span class="lineNoCov"> 0 : int res = pclose(out);</span> +<span class="lineNum"> 221 </span><span class="lineNoCov"> 0 : if (!WIFEXITED(res) || WEXITSTATUS(res) != 0)</span> +<span class="lineNum"> 222 </span> : { +<span class="lineNum"> 223 </span><span class="lineNoCov"> 0 : std::stringstream str;</span> +<span class="lineNum"> 224 </span><span class="lineNoCov"> 0 : str << res;</span> +<span class="lineNum"> 225 </span><span class="lineNoCov"> 0 : throw wibble::exception::Consistency("checking mailer exit status", "sendmail returned nonzero (" + str.str() + "): the mail may have not been sent");</span> +<span class="lineNum"> 226 </span> : } +<span class="lineNum"> 227 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 228 </span> : +<span class="lineNum"> 229 </span> : +<span class="lineNum"> 230 </span> : template<typename OUT> +<span class="lineNum"> 231 </span> : void Debtags::outputSystem(const OUT& cons) +<span class="lineNum"> 232 </span> : { +<span class="lineNum"> 233 </span> : m_rocoll.output(intToPkg(m_pkgid, vocabulary(), cons)); +<span class="lineNum"> 234 </span> : } +<span class="lineNum"> 235 </span> : +<span class="lineNum"> 236 </span> : template<typename OUT> +<span class="lineNum"> 237 </span> : void Debtags::outputPatched(const OUT& cons) +<span class="lineNum"> 238 </span> : { +<span class="lineNum"> 239 </span> : m_coll.output(intToPkg(m_pkgid, vocabulary(), cons)); +<span class="lineNum"> 240 </span> : } +<span class="lineNum"> 241 </span> : +<span class="lineNum"> 242 </span> : } +<span class="lineNum"> 243 </span> : } +<span class="lineNum"> 244 </span> : +<span class="lineNum"> 245 </span> : #include <tagcoll/patch.tcc> +<span class="lineNum"> 246 </span> : #include <tagcoll/coll/patched.tcc> +<span class="lineNum"> 247 </span> : #include <tagcoll/TextFormat.tcc> +<span class="lineNum"> 248 </span> : //#include <tagcoll/stream/filters.tcc> +<span class="lineNum"> 249 </span> : +<span class="lineNum"> 250 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/debtags.h.gcov.html b/rep/ept/debtags/debtags.h.gcov.html new file mode 100644 index 0000000..a115a32 --- /dev/null +++ b/rep/ept/debtags/debtags.h.gcov.html @@ -0,0 +1,484 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/debtags.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - debtags.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">72</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">93.1 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">67</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /* @file +<span class="lineNum"> 3 </span> : * @author Enrico Zini (enrico) <enrico@enricozini.org> +<span class="lineNum"> 4 </span> : */ +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : /* +<span class="lineNum"> 7 </span> : * libpkg Debtags data provider +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * Copyright (C) 2003-2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 12 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 13 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 14 </span> : * (at your option) any later version. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 17 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 18 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 19 </span> : * GNU General Public License for more details. +<span class="lineNum"> 20 </span> : * +<span class="lineNum"> 21 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 22 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 23 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 24 </span> : */ +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #ifndef EPT_DEBTAGS_DEBTAGS_H +<span class="lineNum"> 27 </span> : #define EPT_DEBTAGS_DEBTAGS_H +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : #include <ept/debtags/tag.h> +<span class="lineNum"> 30 </span> : #include <ept/debtags/vocabulary.h> +<span class="lineNum"> 31 </span> : #include <ept/debtags/maint/pkgid.h> +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : #include <tagcoll/coll/base.h> +<span class="lineNum"> 34 </span> : #include <tagcoll/coll/intdiskindex.h> +<span class="lineNum"> 35 </span> : #include <tagcoll/coll/patched.h> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : namespace ept { +<span class="lineNum"> 38 </span> : namespace debtags { +<span class="lineNum"> 39 </span> : class Debtags; +<span class="lineNum"> 40 </span> : } +<span class="lineNum"> 41 </span> : } +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : namespace tagcoll { +<span class="lineNum"> 44 </span> : template< typename _, typename _1 > class PatchList; +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span> : namespace coll { +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span> : template<> +<span class="lineNum"> 49 </span> : struct coll_traits< ept::debtags::Debtags > +<span class="lineNum"> 50 </span> : { +<span class="lineNum"> 51 </span> : typedef std::string item_type; +<span class="lineNum"> 52 </span> : typedef ept::debtags::Tag tag_type; +<span class="lineNum"> 53 </span> : typedef std::set< ept::debtags::Tag > tagset_type; +<span class="lineNum"> 54 </span> : typedef std::set< std::string > itemset_type; +<span class="lineNum"> 55 </span> : }; +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span> : } +<span class="lineNum"> 58 </span> : } +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span> : namespace ept { +<span class="lineNum"> 61 </span> : namespace debtags { +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : /** +<span class="lineNum"> 64 </span> : * Access the on-disk Debtags tag database. +<span class="lineNum"> 65 </span> : * +<span class="lineNum"> 66 </span> : * The database is normally found in /var/lib/debtags. +<span class="lineNum"> 67 </span> : * +<span class="lineNum"> 68 </span> : * Tags and Facets are returned as Tag and Facet objects. The objects follow +<span class="lineNum"> 69 </span> : * the flyweight pattern and access the data contained in the Vocabulary +<span class="lineNum"> 70 </span> : * instantiated inside Debtags. +<span class="lineNum"> 71 </span> : * +<span class="lineNum"> 72 </span> : * It is possible to get a reference to the Vocabulary object using the +<span class="lineNum"> 73 </span> : * vocabulary() method. +<span class="lineNum"> 74 </span> : */ +<span class="lineNum"> 75 </span> : class Debtags : public tagcoll::coll::Collection<Debtags> +<span class="lineNum"> 76 </span> : { +<span class="lineNum"> 77 </span> : protected: +<span class="lineNum"> 78 </span> : // Master mmap index container +<span class="lineNum"> 79 </span> : tagcoll::diskindex::MasterMMap mastermmap; +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span> : // Debtags database +<span class="lineNum"> 82 </span> : tagcoll::coll::IntDiskIndex m_rocoll; +<span class="lineNum"> 83 </span> : tagcoll::coll::Patched< tagcoll::coll::IntDiskIndex > m_coll; +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span> : // Package name to ID mapping +<span class="lineNum"> 86 </span> : PkgId m_pkgid; +<span class="lineNum"> 87 </span> : +<span class="lineNum"> 88 </span> : // Tag vocabulary +<span class="lineNum"> 89 </span> : Vocabulary m_voc; +<span class="lineNum"> 90 </span> : +<span class="lineNum"> 91 </span> : // User rc directory to store patches +<span class="lineNum"> 92 </span> : std::string rcdir; +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span> : // Last modification timestamp of the index +<span class="lineNum"> 95 </span> : time_t m_timestamp; +<span class="lineNum"> 96 </span> : +<span class="lineNum"> 97 </span><span class="lineCov"> 84710 : std::string packageByID(int id) const</span> +<span class="lineNum"> 98 </span> : { +<span class="lineNum"> 99 </span><span class="lineCov"> 84710 : return m_pkgid.byID(id);</span> +<span class="lineNum"> 100 </span> : } +<span class="lineNum"> 101 </span> : +<span class="lineNum"> 102 </span> : template<typename IDS> +<span class="lineNum"> 103 </span><span class="lineCov"> 2 : std::set<std::string> packagesById(const IDS& ids) const</span> +<span class="lineNum"> 104 </span> : { +<span class="lineNum"> 105 </span><span class="lineCov"> 2 : std::set<std::string> pkgs;</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 130 : for (typename IDS::const_iterator i = ids.begin();</span> +<span class="lineNum"> 107 </span> : i != ids.end(); ++i) +<span class="lineNum"> 108 </span><span class="lineCov"> 128 : pkgs.insert(packageByID(*i));</span> +<span class="lineNum"> 109 </span><span class="lineNoCov"> 0 : return pkgs;</span> +<span class="lineNum"> 110 </span> : } +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span><span class="lineCov"> 8 : int idByPackage(const std::string& pkg) const</span> +<span class="lineNum"> 113 </span> : { +<span class="lineNum"> 114 </span><span class="lineCov"> 8 : return m_pkgid.byName(pkg);</span> +<span class="lineNum"> 115 </span> : } +<span class="lineNum"> 116 </span> : +<span class="lineNum"> 117 </span> : template<typename PKGS> +<span class="lineNum"> 118 </span><span class="lineCov"> 1 : std::set<int> idsByPackages(const PKGS& pkgs) const</span> +<span class="lineNum"> 119 </span> : { +<span class="lineNum"> 120 </span><span class="lineCov"> 1 : std::set<int> ids;</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 2 : for (typename PKGS::const_iterator i = pkgs.begin();</span> +<span class="lineNum"> 122 </span> : i != pkgs.end(); ++i) +<span class="lineNum"> 123 </span><span class="lineCov"> 1 : ids.insert(idByPackage(*i));</span> +<span class="lineNum"> 124 </span><span class="lineNoCov"> 0 : return ids;</span> +<span class="lineNum"> 125 </span> : } +<span class="lineNum"> 126 </span> : +<span class="lineNum"> 127 </span> : public: +<span class="lineNum"> 128 </span> : typedef tagcoll::coll::Patched< tagcoll::coll::IntDiskIndex > coll_type; +<span class="lineNum"> 129 </span> : typedef std::pair< std::string, std::set<Tag> > value_type; +<span class="lineNum"> 130 </span> : +<span class="lineNum"> 131 </span> : class const_iterator +<span class="lineNum"> 132 </span> : { +<span class="lineNum"> 133 </span> : const Debtags& coll; +<span class="lineNum"> 134 </span> : Debtags::coll_type::const_iterator ci; +<span class="lineNum"> 135 </span> : mutable const Debtags::value_type* cached_val; +<span class="lineNum"> 136 </span> : +<span class="lineNum"> 137 </span> : protected: +<span class="lineNum"> 138 </span> : const_iterator(const Debtags& coll, +<span class="lineNum"> 139 </span><span class="lineCov"> 63443 : const Debtags::coll_type::const_iterator& ci)</span> +<span class="lineNum"> 140 </span><span class="lineCov"> 63443 : : coll(coll), ci(ci), cached_val(0) {}</span> +<span class="lineNum"> 141 </span> : +<span class="lineNum"> 142 </span> : public: +<span class="lineNum"> 143 </span><span class="lineCov"> 63443 : ~const_iterator()</span> +<span class="lineNum"> 144 </span> : { +<span class="lineNum"> 145 </span><span class="lineCov"> 63443 : if (cached_val)</span> +<span class="lineNum"> 146 </span><span class="lineNoCov"> 0 : delete cached_val;</span> +<span class="lineNum"> 147 </span><span class="lineCov"> 63443 : }</span> +<span class="lineNum"> 148 </span><span class="lineCov"> 84580 : const Debtags::value_type operator*() const</span> +<span class="lineNum"> 149 </span> : { +<span class="lineNum"> 150 </span><span class="lineCov"> 84580 : if (cached_val)</span> +<span class="lineNum"> 151 </span><span class="lineNoCov"> 0 : return *cached_val;</span> +<span class="lineNum"> 152 </span> : +<span class="lineNum"> 153 </span><span class="lineCov"> 84580 : return make_pair(coll.packageByID(ci->first), coll.vocabulary().tagsByID(ci->second));</span> +<span class="lineNum"> 154 </span> : } +<span class="lineNum"> 155 </span><span class="lineCov"> 105725 : const Debtags::value_type* operator->() const</span> +<span class="lineNum"> 156 </span> : { +<span class="lineNum"> 157 </span><span class="lineCov"> 105725 : if (cached_val)</span> +<span class="lineNum"> 158 </span><span class="lineCov"> 42290 : return cached_val;</span> +<span class="lineNum"> 159 </span><span class="lineCov"> 63435 : return cached_val = new Debtags::value_type(*(*this));</span> +<span class="lineNum"> 160 </span> : } +<span class="lineNum"> 161 </span><span class="lineCov"> 63435 : const_iterator& operator++()</span> +<span class="lineNum"> 162 </span> : { +<span class="lineNum"> 163 </span><span class="lineCov"> 63435 : ++ci;</span> +<span class="lineNum"> 164 </span><span class="lineCov"> 63435 : if (cached_val)</span> +<span class="lineNum"> 165 </span> : { +<span class="lineNum"> 166 </span><span class="lineCov"> 63435 : delete cached_val;</span> +<span class="lineNum"> 167 </span><span class="lineCov"> 63435 : cached_val = 0;</span> +<span class="lineNum"> 168 </span> : } +<span class="lineNum"> 169 </span><span class="lineCov"> 63435 : return *this;</span> +<span class="lineNum"> 170 </span> : } +<span class="lineNum"> 171 </span><span class="lineCov"> 1 : bool operator==(const const_iterator& iter) const</span> +<span class="lineNum"> 172 </span> : { +<span class="lineNum"> 173 </span><span class="lineCov"> 1 : return ci == iter.ci;</span> +<span class="lineNum"> 174 </span> : } +<span class="lineNum"> 175 </span><span class="lineCov"> 63438 : bool operator!=(const const_iterator& iter) const</span> +<span class="lineNum"> 176 </span> : { +<span class="lineNum"> 177 </span><span class="lineCov"> 63438 : return ci != iter.ci;</span> +<span class="lineNum"> 178 </span> : } +<span class="lineNum"> 179 </span> : +<span class="lineNum"> 180 </span> : friend class Debtags; +<span class="lineNum"> 181 </span> : }; +<span class="lineNum"> 182 </span><span class="lineCov"> 4 : const_iterator begin() const { return const_iterator(*this, m_coll.begin()); }</span> +<span class="lineNum"> 183 </span><span class="lineCov"> 63439 : const_iterator end() const { return const_iterator(*this, m_coll.end()); }</span> +<span class="lineNum"> 184 </span> : +<span class="lineNum"> 185 </span> : /** +<span class="lineNum"> 186 </span> : * Create a new accessor for the on-disk Debtags database +<span class="lineNum"> 187 </span> : * +<span class="lineNum"> 188 </span> : * \param editable +<span class="lineNum"> 189 </span> : * Specifies if recording of modifications should be enabled. If editable +<span class="lineNum"> 190 </span> : * is true, then the local state directory will be created when the object +<span class="lineNum"> 191 </span> : * is instantiated. +<span class="lineNum"> 192 </span> : */ +<span class="lineNum"> 193 </span> : Debtags(bool editable = false); +<span class="lineNum"> 194 </span><span class="lineCov"> 10 : ~Debtags() {}</span> +<span class="lineNum"> 195 </span> : +<span class="lineNum"> 196 </span> : /// Get the timestamp of when the index was last updated +<span class="lineNum"> 197 </span><span class="lineCov"> 1 : time_t timestamp() const { return m_timestamp; }</span> +<span class="lineNum"> 198 </span> : +<span class="lineNum"> 199 </span> : /// Return true if this data source has data, false if it's empty +<span class="lineNum"> 200 </span><span class="lineCov"> 1 : bool hasData() const { return m_timestamp != 0; }</span> +<span class="lineNum"> 201 </span> : +<span class="lineNum"> 202 </span> : coll_type& tagdb() { return m_coll; } +<span class="lineNum"> 203 </span> : const coll_type& tagdb() const { return m_coll; } +<span class="lineNum"> 204 </span> : tagcoll::PatchList<std::string, Tag> changes() const; +<span class="lineNum"> 205 </span> : +<span class="lineNum"> 206 </span> : #if 0 +<span class="lineNum"> 207 </span> : template<typename ITEMS, typename TAGS> +<span class="lineNum"> 208 </span> : void insert(const ITEMS& items, const TAGS& tags) +<span class="lineNum"> 209 </span> : { +<span class="lineNum"> 210 </span> : for (typename ITEMS::const_iterator i = items.begin(); +<span class="lineNum"> 211 </span> : i != items.end(); ++i) +<span class="lineNum"> 212 </span> : m_changes.addPatch(Patch(*i, tags, TagSet())); +<span class="lineNum"> 213 </span> : } +<span class="lineNum"> 214 </span> : +<span class="lineNum"> 215 </span> : template<typename ITEMS> +<span class="lineNum"> 216 </span> : void insert(const ITEMS& items, const wibble::Empty<Tag>& tags) +<span class="lineNum"> 217 </span> : { +<span class="lineNum"> 218 </span> : // Nothing to do in this case +<span class="lineNum"> 219 </span> : } +<span class="lineNum"> 220 </span> : +<span class="lineNum"> 221 </span> : /** +<span class="lineNum"> 222 </span> : * Get the changes that have been applied to this collection +<span class="lineNum"> 223 </span> : */ +<span class="lineNum"> 224 </span> : const Patches& changes() const { return m_changes; } +<span class="lineNum"> 225 </span> : +<span class="lineNum"> 226 </span> : /** +<span class="lineNum"> 227 </span> : * Throw away all changes previously applied to this collection +<span class="lineNum"> 228 </span> : */ +<span class="lineNum"> 229 </span> : void resetChanges() { m_changes.clear(); } +<span class="lineNum"> 230 </span> : +<span class="lineNum"> 231 </span> : /** +<span class="lineNum"> 232 </span> : * Set the changes list to a specific patch list +<span class="lineNum"> 233 </span> : */ +<span class="lineNum"> 234 </span> : void setChanges(const Patches& changes); +<span class="lineNum"> 235 </span> : +<span class="lineNum"> 236 </span> : /** +<span class="lineNum"> 237 </span> : * Add a specific patch list to the changes list +<span class="lineNum"> 238 </span> : */ +<span class="lineNum"> 239 </span> : void addChanges(const Patches& changes); +<span class="lineNum"> 240 </span> : #endif +<span class="lineNum"> 241 </span> : +<span class="lineNum"> 242 </span> : bool hasTag(const Tag& tag) const { return m_coll.hasTag(tag.id()); } +<span class="lineNum"> 243 </span> : +<span class="lineNum"> 244 </span><span class="lineCov"> 5 : std::set<Tag> getTagsOfItem(const std::string& item) const</span> +<span class="lineNum"> 245 </span> : { +<span class="lineNum"> 246 </span><span class="lineCov"> 5 : int id = idByPackage(item);</span> +<span class="lineNum"> 247 </span><span class="lineCov"> 5 : if (id == -1) return std::set<Tag>();</span> +<span class="lineNum"> 248 </span><span class="lineCov"> 4 : return vocabulary().tagsByID(m_coll.getTagsOfItem(id));</span> +<span class="lineNum"> 249 </span> : } +<span class="lineNum"> 250 </span> : +<span class="lineNum"> 251 </span> : template<typename ITEMS> +<span class="lineNum"> 252 </span><span class="lineCov"> 1 : std::set<Tag> getTagsOfItems(const ITEMS& items) const</span> +<span class="lineNum"> 253 </span> : { +<span class="lineNum"> 254 </span><span class="lineCov"> 1 : return vocabulary().tagsByID(m_coll.getTagsOfItems(idsByPackages(items)));</span> +<span class="lineNum"> 255 </span> : } +<span class="lineNum"> 256 </span> : +<span class="lineNum"> 257 </span> : std::set<std::string> getItemsHavingTag(const Tag& tag) const +<span class="lineNum"> 258 </span> : { +<span class="lineNum"> 259 </span> : return packagesById(m_coll.getItemsHavingTag(tag.id())); +<span class="lineNum"> 260 </span> : } +<span class="lineNum"> 261 </span> : template<typename TAGS> +<span class="lineNum"> 262 </span><span class="lineCov"> 2 : std::set<std::string> getItemsHavingTags(const TAGS& tags) const</span> +<span class="lineNum"> 263 </span> : { +<span class="lineNum"> 264 </span><span class="lineCov"> 2 : std::set<int> itags;</span> +<span class="lineNum"> 265 </span><span class="lineCov"> 11 : for (typename TAGS::const_iterator i = tags.begin();</span> +<span class="lineNum"> 266 </span> : i != tags.end(); ++i) +<span class="lineNum"> 267 </span><span class="lineCov"> 9 : itags.insert(i->id());</span> +<span class="lineNum"> 268 </span><span class="lineCov"> 2 : return packagesById(m_coll.getItemsHavingTags(itags));</span> +<span class="lineNum"> 269 </span> : } +<span class="lineNum"> 270 </span> : +<span class="lineNum"> 271 </span> : #if 0 +<span class="lineNum"> 272 </span> : ItemSet getTaggedItems() const; +<span class="lineNum"> 273 </span> : #endif +<span class="lineNum"> 274 </span><span class="lineCov"> 1 : std::set<Tag> getAllTags() const</span> +<span class="lineNum"> 275 </span> : { +<span class="lineNum"> 276 </span><span class="lineCov"> 1 : return vocabulary().tagsByID(m_coll.getAllTags());</span> +<span class="lineNum"> 277 </span> : } +<span class="lineNum"> 278 </span> : +<span class="lineNum"> 279 </span> : /// Access the vocabulary in use +<span class="lineNum"> 280 </span><span class="lineCov"> 27 : Vocabulary& vocabulary() { return m_voc; }</span> +<span class="lineNum"> 281 </span> : /// Access the vocabulary in use +<span class="lineNum"> 282 </span><span class="lineCov"> 84590 : const Vocabulary& vocabulary() const { return m_voc; }</span> +<span class="lineNum"> 283 </span> : +<span class="lineNum"> 284 </span> : /** +<span class="lineNum"> 285 </span> : * Access the PkgId in use. +<span class="lineNum"> 286 </span> : * +<span class="lineNum"> 287 </span> : * \note Future implementations may not rely on a PkgId +<span class="lineNum"> 288 </span> : */ +<span class="lineNum"> 289 </span><span class="lineCov"> 4 : PkgId& pkgid() { return m_pkgid; }</span> +<span class="lineNum"> 290 </span> : /** +<span class="lineNum"> 291 </span> : * Access the PkgId in use. +<span class="lineNum"> 292 </span> : * +<span class="lineNum"> 293 </span> : * \note Future implementations may not rely on a PkgId +<span class="lineNum"> 294 </span> : */ +<span class="lineNum"> 295 </span> : const PkgId& pkgid() const { return m_pkgid; } +<span class="lineNum"> 296 </span> : +<span class="lineNum"> 297 </span> : int getCardinality(const Tag& tag) const +<span class="lineNum"> 298 </span> : { +<span class="lineNum"> 299 </span> : return m_coll.getCardinality(tag.id()); +<span class="lineNum"> 300 </span> : } +<span class="lineNum"> 301 </span> : +<span class="lineNum"> 302 </span><span class="lineCov"> 2 : void applyChange(const tagcoll::PatchList<std::string, Tag>& change)</span> +<span class="lineNum"> 303 </span> : { +<span class="lineNum"> 304 </span> : using namespace tagcoll; +<span class="lineNum"> 305 </span><span class="lineCov"> 2 : PatchList<int, int> intp;</span> +<span class="lineNum"> 306 </span><span class="lineCov"> 4 : for (PatchList<std::string, Tag>::const_iterator i = change.begin();</span> +<span class="lineNum"> 307 </span> : i != change.end(); ++i) +<span class="lineNum"> 308 </span> : { +<span class="lineNum"> 309 </span><span class="lineCov"> 2 : Patch<int, int> p(idByPackage(i->first));</span> +<span class="lineNum"> 310 </span><span class="lineCov"> 4 : for (std::set<Tag>::const_iterator j = i->second.added.begin();</span> +<span class="lineNum"> 311 </span> : j != i->second.added.end(); ++j) +<span class="lineNum"> 312 </span><span class="lineCov"> 2 : p.add(j->id());</span> +<span class="lineNum"> 313 </span><span class="lineCov"> 2 : for (std::set<Tag>::const_iterator j = i->second.removed.begin();</span> +<span class="lineNum"> 314 </span> : j != i->second.removed.end(); ++j) +<span class="lineNum"> 315 </span><span class="lineNoCov"> 0 : p.remove(j->id());</span> +<span class="lineNum"> 316 </span><span class="lineCov"> 2 : intp.addPatch(p);</span> +<span class="lineNum"> 317 </span> : } +<span class="lineNum"> 318 </span><span class="lineCov"> 2 : m_coll.applyChange(intp);</span> +<span class="lineNum"> 319 </span><span class="lineCov"> 2 : }</span> +<span class="lineNum"> 320 </span> : +<span class="lineNum"> 321 </span> : #if 0 +<span class="lineNum"> 322 </span> : template<typename OUT> +<span class="lineNum"> 323 </span> : void output(OUT out) const +<span class="lineNum"> 324 </span> : { +<span class="lineNum"> 325 </span> : for (const_iterator i = begin(); i != end(); ++i) +<span class="lineNum"> 326 </span> : { +<span class="lineNum"> 327 </span> : *out = *i; +<span class="lineNum"> 328 </span> : ++out; +<span class="lineNum"> 329 </span> : } +<span class="lineNum"> 330 </span> : } +<span class="lineNum"> 331 </span> : #endif +<span class="lineNum"> 332 </span> : +<span class="lineNum"> 333 </span> : +<span class="lineNum"> 334 </span> : +<span class="lineNum"> 335 </span> : /** +<span class="lineNum"> 336 </span> : * Check if the tag database has been created (i.e. if something +<span class="lineNum"> 337 </span> : * equivalend to debtags update has been run) +<span class="lineNum"> 338 </span> : */ +<span class="lineNum"> 339 </span> : //static bool hasTagDatabase(); +<span class="lineNum"> 340 </span> : +<span class="lineNum"> 341 </span> : +<span class="lineNum"> 342 </span> : /** +<span class="lineNum"> 343 </span> : * Save in the state storage directory a patch that can be used to turn +<span class="lineNum"> 344 </span> : * the system database into the collection given +<span class="lineNum"> 345 </span> : */ +<span class="lineNum"> 346 </span> : void savePatch(); +<span class="lineNum"> 347 </span> : +<span class="lineNum"> 348 </span> : /** +<span class="lineNum"> 349 </span> : * Save in the state storage directory a patch to turn the system database +<span class="lineNum"> 350 </span> : * into the collection given +<span class="lineNum"> 351 </span> : */ +<span class="lineNum"> 352 </span> : void savePatch(const tagcoll::PatchList<std::string, std::string>& patch); +<span class="lineNum"> 353 </span> : +<span class="lineNum"> 354 </span> : /** +<span class="lineNum"> 355 </span> : * Save in the state storage directory a patch to turn the system database +<span class="lineNum"> 356 </span> : * into the collection given +<span class="lineNum"> 357 </span> : */ +<span class="lineNum"> 358 </span> : void savePatch(const tagcoll::PatchList<std::string, Tag>& patch); +<span class="lineNum"> 359 </span> : +<span class="lineNum"> 360 </span> : /** +<span class="lineNum"> 361 </span> : * Send to the central archive a patch that can be used to turn +<span class="lineNum"> 362 </span> : * the system database into the collection given +<span class="lineNum"> 363 </span> : */ +<span class="lineNum"> 364 </span> : void sendPatch(); +<span class="lineNum"> 365 </span> : +<span class="lineNum"> 366 </span> : /** +<span class="lineNum"> 367 </span> : * Send the given patch to the central archive +<span class="lineNum"> 368 </span> : */ +<span class="lineNum"> 369 </span> : void sendPatch(const tagcoll::PatchList<std::string, std::string>& patch); +<span class="lineNum"> 370 </span> : +<span class="lineNum"> 371 </span> : /** +<span class="lineNum"> 372 </span> : * Send the given patch to the central archive +<span class="lineNum"> 373 </span> : */ +<span class="lineNum"> 374 </span> : void sendPatch(const tagcoll::PatchList<std::string, Tag>& patch); +<span class="lineNum"> 375 </span> : +<span class="lineNum"> 376 </span> : +<span class="lineNum"> 377 </span> : /** +<span class="lineNum"> 378 </span> : * Output the current Debian tags database to a consumer of <std::string, Tag> +<span class="lineNum"> 379 </span> : * +<span class="lineNum"> 380 </span> : * \note The collection is sent to 'cons' without merging repeated items +<span class="lineNum"> 381 </span> : */ +<span class="lineNum"> 382 </span> : template<typename OUT> +<span class="lineNum"> 383 </span><span class="lineCov"> 2 : void outputSystem(const OUT& cons);</span> +<span class="lineNum"> 384 </span> : +<span class="lineNum"> 385 </span> : /** +<span class="lineNum"> 386 </span> : * Output the given tag file to a consumer of <std::string, Tag> +<span class="lineNum"> 387 </span> : * +<span class="lineNum"> 388 </span> : * \note The collection is sent to 'cons' without merging repeated items +<span class="lineNum"> 389 </span> : */ +<span class="lineNum"> 390 </span> : template<typename OUT> +<span class="lineNum"> 391 </span> : void outputSystem(const std::string& filename, const OUT& out); +<span class="lineNum"> 392 </span> : +<span class="lineNum"> 393 </span> : /** +<span class="lineNum"> 394 </span> : * Output the current Debian tags database, patched with local patch, +<span class="lineNum"> 395 </span> : * to a Consumer of <std::string, Tag> +<span class="lineNum"> 396 </span> : * +<span class="lineNum"> 397 </span> : * \note The collection is sent to 'cons' without merging repeated items +<span class="lineNum"> 398 </span> : */ +<span class="lineNum"> 399 </span> : template<typename OUT> +<span class="lineNum"> 400 </span><span class="lineCov"> 2 : void outputPatched(const OUT& cons);</span> +<span class="lineNum"> 401 </span> : +<span class="lineNum"> 402 </span> : /** +<span class="lineNum"> 403 </span> : * Output the given tag file, patched with local patch, +<span class="lineNum"> 404 </span> : * to a Consumer of <std::string, Tag> +<span class="lineNum"> 405 </span> : * +<span class="lineNum"> 406 </span> : * \note The collection is sent to 'cons' without merging repeated items +<span class="lineNum"> 407 </span> : */ +<span class="lineNum"> 408 </span> : template<typename OUT> +<span class="lineNum"> 409 </span> : void outputPatched(const std::string& filename, const OUT& out); +<span class="lineNum"> 410 </span> : }; +<span class="lineNum"> 411 </span> : +<span class="lineNum"> 412 </span> : +<span class="lineNum"> 413 </span> : } +<span class="lineNum"> 414 </span> : } +<span class="lineNum"> 415 </span> : +<span class="lineNum"> 416 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 417 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/debtags.tcc.gcov.html b/rep/ept/debtags/debtags.tcc.gcov.html new file mode 100644 index 0000000..3d2907f --- /dev/null +++ b/rep/ept/debtags/debtags.tcc.gcov.html @@ -0,0 +1,156 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/debtags.tcc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - debtags.tcc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">4</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">4</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** -*- C++ -*- +<span class="lineNum"> 2 </span> : * @file +<span class="lineNum"> 3 </span> : * @author Enrico Zini (enrico) <enrico@enricozini.org> +<span class="lineNum"> 4 </span> : */ +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : /* +<span class="lineNum"> 7 </span> : * libpkg Debtags data provider +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * Copyright (C) 2003-2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 12 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 13 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 14 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 17 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 18 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 19 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 20 </span> : * +<span class="lineNum"> 21 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 22 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 23 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 24 </span> : */ +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #ifndef EPT_DEBTAGS_DEBTAGS_TCC +<span class="lineNum"> 27 </span> : #define EPT_DEBTAGS_DEBTAGS_TCC +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : #include <ept/debtags/debtags.h> +<span class="lineNum"> 30 </span> : #include <ept/debtags/maint/serializer.h> +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : #include <tagcoll/input/stdio.h> +<span class="lineNum"> 33 </span> : #include <tagcoll/stream/patcher.h> +<span class="lineNum"> 34 </span> : #include <tagcoll/TextFormat.h> +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : namespace ept { +<span class="lineNum"> 37 </span> : namespace debtags { +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : template<typename OUT> +<span class="lineNum"> 40 </span> : void Debtags::outputSystem(const OUT& cons) +<span class="lineNum"> 41 </span> : { +<span class="lineNum"> 42 </span><span class="lineCov"> 2 : m_rocoll.output(intToPkg(m_pkgid, vocabulary(), cons));</span> +<span class="lineNum"> 43 </span><span class="lineCov"> 2 : }</span> +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span> : template<typename OUT> +<span class="lineNum"> 46 </span> : void Debtags::outputSystem(const std::string& filename, const OUT& out) +<span class="lineNum"> 47 </span> : { +<span class="lineNum"> 48 </span> : if (filename == "-") +<span class="lineNum"> 49 </span> : { +<span class="lineNum"> 50 </span> : tagcoll::input::Stdio input(stdin, "<stdin>"); +<span class="lineNum"> 51 </span> : tagcoll::textformat::parse(input, ept::debtags::stringToPkg(m_pkgid, m_voc, out)); +<span class="lineNum"> 52 </span> : } +<span class="lineNum"> 53 </span> : else +<span class="lineNum"> 54 </span> : { +<span class="lineNum"> 55 </span> : tagcoll::input::Stdio input(filename); +<span class="lineNum"> 56 </span> : tagcoll::textformat::parse(input, ept::debtags::stringToPkg(m_pkgid, m_voc, out)); +<span class="lineNum"> 57 </span> : } +<span class="lineNum"> 58 </span> : } +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span> : template<typename OUT> +<span class="lineNum"> 61 </span> : void Debtags::outputPatched(const OUT& cons) +<span class="lineNum"> 62 </span> : { +<span class="lineNum"> 63 </span><span class="lineCov"> 2 : m_coll.output(intToPkg(m_pkgid, vocabulary(), cons));</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 2 : }</span> +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span> : template<typename OUT> +<span class="lineNum"> 67 </span> : void Debtags::outputPatched(const std::string& filename, const OUT& out) +<span class="lineNum"> 68 </span> : { +<span class="lineNum"> 69 </span> : const tagcoll::PatchList<string, Tag>& patch = m_coll.changes(); +<span class="lineNum"> 70 </span> : if (filename == "-") +<span class="lineNum"> 71 </span> : { +<span class="lineNum"> 72 </span> : tagcoll::input::Stdio input(stdin, "<stdin>"); +<span class="lineNum"> 73 </span> : tagcoll::textformat::parse(input, ept::debtags::stringToPkg(m_pkgid, m_voc, patcher(patch, out))); +<span class="lineNum"> 74 </span> : } +<span class="lineNum"> 75 </span> : else +<span class="lineNum"> 76 </span> : { +<span class="lineNum"> 77 </span> : tagcoll::input::Stdio input(filename); +<span class="lineNum"> 78 </span> : tagcoll::textformat::parse(input, ept::debtags::stringToPkg(m_pkgid, m_voc, patcher(patch, out))); +<span class="lineNum"> 79 </span> : } +<span class="lineNum"> 80 </span> : } +<span class="lineNum"> 81 </span> : +<span class="lineNum"> 82 </span> : } +<span class="lineNum"> 83 </span> : } +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span> : #include <tagcoll/coll/patched.tcc> +<span class="lineNum"> 86 </span> : +<span class="lineNum"> 87 </span> : #endif +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/debtags.test.h.gcov.html b/rep/ept/debtags/debtags.test.h.gcov.html new file mode 100644 index 0000000..e78c69b --- /dev/null +++ b/rep/ept/debtags/debtags.test.h.gcov.html @@ -0,0 +1,350 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/debtags.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - debtags.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">103</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">103</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /** +<span class="lineNum"> 3 </span> : * @file +<span class="lineNum"> 4 </span> : * @author Enrico Zini (enrico) <enrico@enricozini.org> +<span class="lineNum"> 5 </span> : */ +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : /* +<span class="lineNum"> 8 </span> : * Test for the Debtags data provider +<span class="lineNum"> 9 </span> : * +<span class="lineNum"> 10 </span> : * Copyright (C) 2003-2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 13 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 14 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 15 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 20 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 23 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include <ept/debtags/debtags.h> +<span class="lineNum"> 29 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : #include <tagcoll/coll/simple.h> +<span class="lineNum"> 32 </span> : #include <tagcoll/stream/sink.h> +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : #include <wibble/operators.h> +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : #include <ept/test.h> +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span> : #ifndef EPT_DEBTAGS_TESTH +<span class="lineNum"> 39 </span> : #define EPT_DEBTAGS_TESTH +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : using namespace tagcoll; +<span class="lineNum"> 42 </span> : using namespace std; +<span class="lineNum"> 43 </span> : using namespace ept; +<span class="lineNum"> 44 </span> : using namespace ept::debtags; +<span class="lineNum"> 45 </span> : using namespace wibble::operators; +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span> : struct TestDebtags : DebtagsTestEnvironment +<span class="lineNum"> 48 </span><span class="lineCov"> 5 : {</span> +<span class="lineNum"> 49 </span> : Debtags debtags; +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineCov"> 5 : TestDebtags() {}</span> +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span><span class="lineCov"> 10 : Vocabulary& voc() { return debtags.vocabulary(); }</span> +<span class="lineNum"> 54 </span> : +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : Test _1() {</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 21146 : for (Debtags::const_iterator i = debtags.begin(); i != debtags.end(); ++i)</span> +<span class="lineNum"> 57 </span> : { +<span class="lineNum"> 58 </span><span class="lineCov"> 21145 : *i;</span> +<span class="lineNum"> 59 </span><span class="lineCov"> 21145 : i->first;</span> +<span class="lineNum"> 60 </span><span class="lineCov"> 21145 : i->second;</span> +<span class="lineNum"> 61 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 1 : int items = 0, tags = 0;</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 1 : debtags.outputSystem(stream::countingSink(items, tags));</span> +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span><span class="lineCov"> 1 : int pitems = 0, ptags = 0;</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : debtags.outputPatched(stream::countingSink(pitems, ptags));</span> +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span><span class="lineCov"> 2 : assert(items > 10);</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 2 : assert(tags > 10);</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 2 : assert(items <= pitems);</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 2 : assert(tags <= ptags);</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span><span class="lineCov"> 1 : Test _2()</span> +<span class="lineNum"> 75 </span> : { +<span class="lineNum"> 76 </span><span class="lineCov"> 1 : string p("debtags");</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 1 : std::set<Tag> tags = debtags.getTagsOfItem(p);</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 1 : assert( !tags.empty() );</span> +<span class="lineNum"> 79 </span> : +<span class="lineNum"> 80 </span> : #if 0 +<span class="lineNum"> 81 </span> : for ( std::set< Tag >::iterator i = tags.begin(); i != tags.end(); ++ i ) { +<span class="lineNum"> 82 </span> : std::cerr << i->id() << ": " << i->fullname() << std::endl; +<span class="lineNum"> 83 </span> : } +<span class="lineNum"> 84 </span> : std::cerr << "---" << std::endl; +<span class="lineNum"> 85 </span> : Tag t = voc().tagByName( "interface::commandline" ); +<span class="lineNum"> 86 </span> : std::cerr << t.id() << ": " << t.fullname() << std::endl; +<span class="lineNum"> 87 </span> : #endif +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span><span class="lineCov"> 2 : assert_eq( tags.size(), 8u );</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 2 : assert( voc().tagByName( "devel::buildtools" ) <= tags );</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 2 : assert( voc().tagByName( "implemented-in::c++" ) <= tags );</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 2 : assert( voc().tagByName( "interface::commandline" ) <= tags );</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 2 : assert( voc().tagByName( "role::program" ) <= tags );</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 2 : assert( voc().tagByName( "scope::application" ) <= tags );</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 2 : assert( voc().tagByName( "suite::debian" ) <= tags );</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 2 : assert( voc().tagByName( "use::searching" ) <= tags );</span> +<span class="lineNum"> 97 </span><span class="lineCov"> 2 : assert( voc().tagByName( "works-with::software:package" ) <= tags );</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 99 </span> : +<span class="lineNum"> 100 </span><span class="lineCov"> 1 : Test _3()</span> +<span class="lineNum"> 101 </span> : { +<span class="lineNum"> 102 </span> : using namespace std; +<span class="lineNum"> 103 </span> : +<span class="lineNum"> 104 </span> : /* Get the 'debtags' package */ +<span class="lineNum"> 105 </span><span class="lineCov"> 1 : string p("debtags");</span> +<span class="lineNum"> 106 </span> : +<span class="lineNum"> 107 </span> : /* Get its tags */ +<span class="lineNum"> 108 </span><span class="lineCov"> 1 : std::set<Tag> tags = debtags.getTagsOfItem(p);</span> +<span class="lineNum"> 109 </span><span class="lineCov"> 1 : assert(!tags.empty());</span> +<span class="lineNum"> 110 </span> : +<span class="lineNum"> 111 </span> : /* +<span class="lineNum"> 112 </span> : cerr << "Intersection size: " << endl; +<span class="lineNum"> 113 </span> : using namespace wibble::operators; +<span class="lineNum"> 114 </span> : std::set<Tag>::const_iterator dbgi = tags.begin(); +<span class="lineNum"> 115 </span> : cerr << "* " << dbgi->fullname() << ": " << dbgi->id() << endl; +<span class="lineNum"> 116 </span> : std::set<int> dbgres = debtags.tagdb().getItemsHavingTag(dbgi->id()); +<span class="lineNum"> 117 </span> : std::set<Package> dbgpres = debtags.getItemsHavingTag(*dbgi); +<span class="lineNum"> 118 </span> : cerr << " #pkgs " << dbgres.size() << " == " << dbgpres.size() << endl; +<span class="lineNum"> 119 </span> : cerr << " #isec " << dbgres.size() << " == " << dbgpres.size() << endl; +<span class="lineNum"> 120 </span> : cerr << " "; ppset(dbgpres); cerr << endl; +<span class="lineNum"> 121 </span> : cerr << " "; piset(dbgres); cerr << endl; +<span class="lineNum"> 122 </span> : for (++dbgi ; dbgi != tags.end(); ++dbgi) +<span class="lineNum"> 123 </span> : { +<span class="lineNum"> 124 </span> : cerr << "* " << dbgi->fullname() << ": " << dbgi->id() << endl; +<span class="lineNum"> 125 </span> : std::set<Package> dbgpkgs = debtags.getItemsHavingTag(*dbgi); +<span class="lineNum"> 126 </span> : std::set<int> dbgids = debtags.tagdb().getItemsHavingTag(dbgi->id()); +<span class="lineNum"> 127 </span> : cerr << " "; ppset(dbgpkgs); cerr << endl; +<span class="lineNum"> 128 </span> : cerr << " "; piset(dbgids); cerr << endl; +<span class="lineNum"> 129 </span> : cerr << " #pkgs " << dbgpkgs.size() << " == " << dbgids.size() << endl; +<span class="lineNum"> 130 </span> : dbgres &= dbgids; +<span class="lineNum"> 131 </span> : dbgpres &= dbgpkgs; +<span class="lineNum"> 132 </span> : cerr << " #isec " << dbgres.size() << " == " << dbgpres.size() << endl; +<span class="lineNum"> 133 </span> : } +<span class="lineNum"> 134 </span> : cerr << " " << dbgres.size() << endl << "Results: " << endl; +<span class="lineNum"> 135 </span> : for (std::set<int>::const_iterator i = dbgres.begin(); i != dbgres.end(); ++i) +<span class="lineNum"> 136 </span> : cerr << " " << *i << endl; +<span class="lineNum"> 137 </span> : */ +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span> : +<span class="lineNum"> 140 </span> : // cerr << "Tags of debtags: "; +<span class="lineNum"> 141 </span> : // for (std::set<Tag>::const_iterator i = tags.begin(); i != tags.end(); ++i) +<span class="lineNum"> 142 </span> : // { +<span class="lineNum"> 143 </span> : // cerr << " " + i->fullname() << endl; +<span class="lineNum"> 144 </span> : // std::set<Package> packages = debtags.getItemsHavingTag(*i); +<span class="lineNum"> 145 </span> : // for (std::set<Package>::const_iterator p = packages.begin(); +<span class="lineNum"> 146 </span> : // p != packages.end(); ++p) +<span class="lineNum"> 147 </span> : // cerr << " PKG " << p->name() << endl; +<span class="lineNum"> 148 </span> : // } +<span class="lineNum"> 149 </span> : // cerr << endl; +<span class="lineNum"> 150 </span> : +<span class="lineNum"> 151 </span> : /* Get the items for the tagset of 'debtags' */ +<span class="lineNum"> 152 </span><span class="lineCov"> 1 : std::set<string> packages = debtags.getItemsHavingTags(tags);</span> +<span class="lineNum"> 153 </span> : //cerr << packages.size() << endl; +<span class="lineNum"> 154 </span><span class="lineCov"> 1 : assert(!packages.empty());</span> +<span class="lineNum"> 155 </span> : /* +<span class="lineNum"> 156 </span> : for ( std::set< Package >::iterator i = packages.begin(); i != packages.end(); ++ i ) +<span class="lineNum"> 157 </span> : std::cerr << i->name() << std::endl; +<span class="lineNum"> 158 </span> : std::cerr << "---" << std::endl; +<span class="lineNum"> 159 </span> : std::cerr << p.name() << std::endl; +<span class="lineNum"> 160 </span> : */ +<span class="lineNum"> 161 </span> : /* They should at least contain 'debtags' */ +<span class="lineNum"> 162 </span><span class="lineCov"> 2 : assert( p <= packages );</span> +<span class="lineNum"> 163 </span> : +<span class="lineNum"> 164 </span> : /* Get one of the tags of 'debtags' */ +<span class="lineNum"> 165 </span><span class="lineCov"> 2 : Tag tag = *tags.begin();</span> +<span class="lineNum"> 166 </span><span class="lineCov"> 1 : assert(tag);</span> +<span class="lineNum"> 167 </span> : +<span class="lineNum"> 168 </span> : /* Get its items */ +<span class="lineNum"> 169 </span> : { +<span class="lineNum"> 170 </span> : /* Need this workaround until I figure out how to tell the new GCC +<span class="lineNum"> 171 </span> : * that TagDB is a TDBReadonlyDiskIndex and should behave as such +<span class="lineNum"> 172 </span> : */ +<span class="lineNum"> 173 </span><span class="lineCov"> 1 : std::set<Tag> ts;</span> +<span class="lineNum"> 174 </span><span class="lineCov"> 1 : ts.insert(tag);</span> +<span class="lineNum"> 175 </span><span class="lineCov"> 1 : packages = debtags.getItemsHavingTags(ts);</span> +<span class="lineNum"> 176 </span> : } +<span class="lineNum"> 177 </span> : //packages = c.debtags().tagdb().getItems(tag); +<span class="lineNum"> 178 </span><span class="lineCov"> 1 : assert(!packages.empty());</span> +<span class="lineNum"> 179 </span> : /* They should at least contain 'debtags' */ +<span class="lineNum"> 180 </span><span class="lineCov"> 2 : assert( p <= packages );</span> +<span class="lineNum"> 181 </span> : +<span class="lineNum"> 182 </span> : //c.debtags().getTags(""); // XXX HACK AWW! +<span class="lineNum"> 183 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 184 </span> : +<span class="lineNum"> 185 </span><span class="lineCov"> 1 : Test _4()</span> +<span class="lineNum"> 186 </span> : { +<span class="lineNum"> 187 </span><span class="lineCov"> 1 : std::string patchfile = Path::debtagsUserSourceDir() + "patch";</span> +<span class="lineNum"> 188 </span><span class="lineCov"> 1 : unlink(patchfile.c_str());</span> +<span class="lineNum"> 189 </span> : +<span class="lineNum"> 190 </span><span class="lineCov"> 1 : string p("debtags");</span> +<span class="lineNum"> 191 </span> : +<span class="lineNum"> 192 </span> : /* Get its tags */ +<span class="lineNum"> 193 </span><span class="lineCov"> 1 : std::set<Tag> tags = debtags.getTagsOfItem(p);</span> +<span class="lineNum"> 194 </span><span class="lineCov"> 1 : assert(!tags.empty());</span> +<span class="lineNum"> 195 </span> : +<span class="lineNum"> 196 </span> : // Ensure that it's not tagged with gameplaying +<span class="lineNum"> 197 </span><span class="lineCov"> 2 : Tag t = voc().tagByName("use::gameplaying");</span> +<span class="lineNum"> 198 </span><span class="lineCov"> 2 : assert(! (t <= tags) );</span> +<span class="lineNum"> 199 </span> : +<span class="lineNum"> 200 </span> : // Add the gameplaying tag +<span class="lineNum"> 201 </span><span class="lineCov"> 1 : PatchList<string, Tag> change;</span> +<span class="lineNum"> 202 </span><span class="lineCov"> 1 : change.addPatch(Patch<string, Tag>(p, wibble::singleton(t), wibble::Empty<Tag>()));</span> +<span class="lineNum"> 203 </span><span class="lineCov"> 1 : debtags.applyChange(change);</span> +<span class="lineNum"> 204 </span> : +<span class="lineNum"> 205 </span> : // See that the patch is non empty +<span class="lineNum"> 206 </span><span class="lineCov"> 1 : PatchList<string, Tag> tmp = debtags.changes();</span> +<span class="lineNum"> 207 </span><span class="lineCov"> 1 : assert(tmp.size() > 0);</span> +<span class="lineNum"> 208 </span><span class="lineCov"> 2 : assert_eq(tmp.size(), 1u);</span> +<span class="lineNum"> 209 </span> : +<span class="lineNum"> 210 </span> : // Ensure that the tag has been added +<span class="lineNum"> 211 </span><span class="lineCov"> 2 : tags = debtags.getTagsOfItem(p);</span> +<span class="lineNum"> 212 </span><span class="lineCov"> 1 : assert(!tags.empty());</span> +<span class="lineNum"> 213 </span> : +<span class="lineNum"> 214 </span><span class="lineCov"> 2 : t = voc().tagByName("use::gameplaying");</span> +<span class="lineNum"> 215 </span><span class="lineCov"> 2 : assert( t <= tags );</span> +<span class="lineNum"> 216 </span> : +<span class="lineNum"> 217 </span> : // Save the patch +<span class="lineNum"> 218 </span><span class="lineCov"> 1 : debtags.savePatch();</span> +<span class="lineNum"> 219 </span> : +<span class="lineNum"> 220 </span> : // Check that the saved patch is correct +<span class="lineNum"> 221 </span><span class="lineCov"> 1 : FILE* in = fopen(patchfile.c_str(), "r");</span> +<span class="lineNum"> 222 </span><span class="lineCov"> 1 : string writtenPatch;</span> +<span class="lineNum"> 223 </span> : int c; +<span class="lineNum"> 224 </span><span class="lineCov"> 29 : while ((c = getc(in)) != EOF)</span> +<span class="lineNum"> 225 </span><span class="lineCov"> 27 : writtenPatch += c;</span> +<span class="lineNum"> 226 </span><span class="lineCov"> 1 : fclose(in);</span> +<span class="lineNum"> 227 </span> : +<span class="lineNum"> 228 </span><span class="lineCov"> 1 : assert_eq(writtenPatch, string("debtags: +use::gameplaying\n"));</span> +<span class="lineNum"> 229 </span> : +<span class="lineNum"> 230 </span><span class="lineCov"> 2 : unlink(patchfile.c_str());</span> +<span class="lineNum"> 231 </span> : +<span class="lineNum"> 232 </span> : // Reapply the patch and see that it doesn't disrept things +<span class="lineNum"> 233 </span><span class="lineCov"> 1 : debtags.applyChange(change);</span> +<span class="lineNum"> 234 </span> : +<span class="lineNum"> 235 </span> : // The patch should not have changed +<span class="lineNum"> 236 </span><span class="lineCov"> 1 : tmp = debtags.changes();</span> +<span class="lineNum"> 237 </span><span class="lineCov"> 1 : assert_eq(tmp.size(), 1u);</span> +<span class="lineNum"> 238 </span><span class="lineCov"> 2 : assert_eq(tmp.begin()->first, p);</span> +<span class="lineNum"> 239 </span><span class="lineCov"> 1 : assert_eq(tmp.begin()->second.item, p);</span> +<span class="lineNum"> 240 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 241 </span> : +<span class="lineNum"> 242 </span> : // If there is no data, Debtags should work as an empty collection +<span class="lineNum"> 243 </span><span class="lineCov"> 1 : Test _5()</span> +<span class="lineNum"> 244 </span> : { +<span class="lineNum"> 245 </span><span class="lineCov"> 1 : Path::OverrideDebtagsSourceDir odsd("./empty");</span> +<span class="lineNum"> 246 </span><span class="lineCov"> 2 : Path::OverrideDebtagsIndexDir odid("./empty");</span> +<span class="lineNum"> 247 </span><span class="lineCov"> 2 : Path::OverrideDebtagsUserSourceDir odusd("./empty");</span> +<span class="lineNum"> 248 </span><span class="lineCov"> 2 : Path::OverrideDebtagsUserIndexDir oduid("./empty");</span> +<span class="lineNum"> 249 </span><span class="lineCov"> 1 : Debtags empty;</span> +<span class="lineNum"> 250 </span> : +<span class="lineNum"> 251 </span><span class="lineCov"> 1 : assert(empty.begin() == empty.end());</span> +<span class="lineNum"> 252 </span><span class="lineCov"> 1 : assert_eq(empty.timestamp(), 0);</span> +<span class="lineNum"> 253 </span><span class="lineCov"> 2 : assert(!empty.hasData());</span> +<span class="lineNum"> 254 </span> : +<span class="lineNum"> 255 </span><span class="lineCov"> 1 : tagcoll::PatchList<std::string, Tag> patches = empty.changes();</span> +<span class="lineNum"> 256 </span><span class="lineCov"> 1 : assert(patches.empty());</span> +<span class="lineNum"> 257 </span> : +<span class="lineNum"> 258 </span><span class="lineCov"> 2 : set<Tag> res = empty.getTagsOfItem("apt");</span> +<span class="lineNum"> 259 </span><span class="lineCov"> 2 : assert(res.empty());</span> +<span class="lineNum"> 260 </span><span class="lineCov"> 2 : res = empty.getTagsOfItems(wibble::singleton(string("apt")));</span> +<span class="lineNum"> 261 </span><span class="lineCov"> 2 : assert(res.empty());</span> +<span class="lineNum"> 262 </span> : +<span class="lineNum"> 263 </span><span class="lineCov"> 2 : res = empty.getAllTags();</span> +<span class="lineNum"> 264 </span><span class="lineCov"> 1 : assert(res.empty());</span> +<span class="lineNum"> 265 </span> : +<span class="lineNum"> 266 </span><span class="lineCov"> 1 : tagcoll::coll::Simple<string, Tag> coll;</span> +<span class="lineNum"> 267 </span><span class="lineCov"> 1 : empty.outputSystem(tagcoll::coll::inserter(coll));</span> +<span class="lineNum"> 268 </span><span class="lineCov"> 1 : assert_eq(coll.itemCount(), 0u);</span> +<span class="lineNum"> 269 </span> : +<span class="lineNum"> 270 </span><span class="lineCov"> 1 : coll.clear();</span> +<span class="lineNum"> 271 </span> : +<span class="lineNum"> 272 </span><span class="lineCov"> 1 : empty.outputPatched(tagcoll::coll::inserter(coll));</span> +<span class="lineNum"> 273 </span><span class="lineCov"> 1 : assert_eq(coll.itemCount(), 0u);</span> +<span class="lineNum"> 274 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 275 </span> : +<span class="lineNum"> 276 </span> : }; +<span class="lineNum"> 277 </span> : +<span class="lineNum"> 278 </span> : #include <ept/debtags/debtags.tcc> +<span class="lineNum"> 279 </span> : #include <tagcoll/coll/simple.tcc> +<span class="lineNum"> 280 </span> : +<span class="lineNum"> 281 </span> : #endif +<span class="lineNum"> 282 </span> : +<span class="lineNum"> 283 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/expression.cc.gcov.html b/rep/ept/debtags/expression.cc.gcov.html new file mode 100644 index 0000000..08ed2aa --- /dev/null +++ b/rep/ept/debtags/expression.cc.gcov.html @@ -0,0 +1,118 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/expression.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - expression.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">5</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">5</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** \file +<span class="lineNum"> 2 </span> : * Match tag expressions against sets of Debtags Tags +<span class="lineNum"> 3 </span> : */ +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /* +<span class="lineNum"> 6 </span> : * Copyright (C) 2003,2004,2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 7 </span> : * +<span class="lineNum"> 8 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 9 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 10 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 11 </span> : * (at your option) any later version. +<span class="lineNum"> 12 </span> : * +<span class="lineNum"> 13 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 14 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 15 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 16 </span> : * GNU General Public License for more details. +<span class="lineNum"> 17 </span> : * +<span class="lineNum"> 18 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 19 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 20 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 21 </span> : */ +<span class="lineNum"> 22 </span> : +<span class="lineNum"> 23 </span> : #include <ept/debtags/expression.h> +<span class="lineNum"> 24 </span> : #include <string> +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : namespace tagcoll +<span class="lineNum"> 27 </span> : { +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : template<> +<span class="lineNum"> 30 </span><span class="lineCov"> 12 : bool Expression::operator()(const std::set<ept::debtags::Tag>& tags) const</span> +<span class="lineNum"> 31 </span> : { +<span class="lineNum"> 32 </span><span class="lineCov"> 12 : std::set<std::string> names;</span> +<span class="lineNum"> 33 </span><span class="lineCov"> 48 : for (std::set<ept::debtags::Tag>::const_iterator i = tags.begin();</span> +<span class="lineNum"> 34 </span> : i != tags.end(); ++i) +<span class="lineNum"> 35 </span><span class="lineCov"> 36 : names.insert(i->fullname());</span> +<span class="lineNum"> 36 </span><span class="lineCov"> 12 : return this->m_impl->eval(names);</span> +<span class="lineNum"> 37 </span> : } +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : template<> +<span class="lineNum"> 40 </span> : bool Expression::operator()(const std::set<ept::debtags::Facet>& tags) const +<span class="lineNum"> 41 </span> : { +<span class="lineNum"> 42 </span> : std::set<std::string> names; +<span class="lineNum"> 43 </span> : for (std::set<ept::debtags::Facet>::const_iterator i = tags.begin(); +<span class="lineNum"> 44 </span> : i != tags.end(); ++i) +<span class="lineNum"> 45 </span> : names.insert(i->name()); +<span class="lineNum"> 46 </span> : return this->m_impl->eval(names); +<span class="lineNum"> 47 </span> : } +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span> : }; +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/expression.test.h.gcov.html b/rep/ept/debtags/expression.test.h.gcov.html new file mode 100644 index 0000000..3a099a8 --- /dev/null +++ b/rep/ept/debtags/expression.test.h.gcov.html @@ -0,0 +1,150 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/expression.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - expression.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">32</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">32</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Match tag expressions against sets of Debtags Tags +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 5 </span> : * +<span class="lineNum"> 6 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 7 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 8 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 9 </span> : * (at your option) any later version. +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 12 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 13 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 14 </span> : * GNU General Public License for more details. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 17 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 18 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 19 </span> : */ +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : #include <wibble/test.h> +<span class="lineNum"> 22 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 23 </span> : #include <ept/debtags/expression.h> +<span class="lineNum"> 24 </span> : #include <ept/debtags/vocabulary.h> +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include "debtags.test.h" +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : using namespace tagcoll; +<span class="lineNum"> 29 </span> : using namespace std; +<span class="lineNum"> 30 </span> : using namespace ept::debtags; +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span><span class="lineCov"> 2 : struct TestExpression : DebtagsTestEnvironment {</span> +<span class="lineNum"> 33 </span> : Vocabulary voc; +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span><span class="lineCov"> 1 : Test _1()</span> +<span class="lineNum"> 36 </span> : { +<span class="lineNum"> 37 </span><span class="lineCov"> 1 : set<Tag> test;</span> +<span class="lineNum"> 38 </span><span class="lineCov"> 1 : test.insert(voc.tagByName("use::editing"));</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 2 : test.insert(voc.tagByName("use::viewing"));</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 2 : test.insert(voc.tagByName("works-with::text"));</span> +<span class="lineNum"> 41 </span> : +<span class="lineNum"> 42 </span><span class="lineCov"> 2 : assert_eq(test.size(), 3u);</span> +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span><span class="lineCov"> 2 : Expression e1("use::editing");</span> +<span class="lineNum"> 45 </span><span class="lineCov"> 2 : assert(e1(test));</span> +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span><span class="lineCov"> 2 : Expression e2("use::editing && use::viewing");</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 2 : assert(e2(test));</span> +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span><span class="lineCov"> 2 : e1 = Expression("!use::editing");</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 2 : assert(!e1(test));</span> +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span><span class="lineCov"> 2 : e1 = Expression("use::editing || sugo");</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 2 : assert(e1(test));</span> +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span><span class="lineCov"> 2 : e1 = Expression("use::editing && !sugo");</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 2 : assert(e1(test));</span> +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span><span class="lineCov"> 2 : e1 = Expression("use::editing && !use::viewing");</span> +<span class="lineNum"> 60 </span><span class="lineCov"> 2 : assert(!e1(test));</span> +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span><span class="lineCov"> 2 : e1 = Expression("(use::editing || sugo) && (use::viewing && works-with::text)");</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 2 : assert(e1(test));</span> +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span><span class="lineCov"> 2 : e1 = Expression("!(use::editinuse::editingra && works-with::text)");</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 2 : assert(e1(test));</span> +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span><span class="lineCov"> 2 : e1 = Expression("works-with::*");</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 2 : assert(e1(test));</span> +<span class="lineNum"> 70 </span> : +<span class="lineNum"> 71 </span><span class="lineCov"> 2 : e1 = Expression("*::text");</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 2 : assert(e1(test));</span> +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span><span class="lineCov"> 2 : e1 = Expression("!*::antani");</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 2 : assert(e1(test));</span> +<span class="lineNum"> 76 </span> : +<span class="lineNum"> 77 </span><span class="lineCov"> 2 : e1 = Expression("*::antani");</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 2 : assert(!e1(test));</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span> : }; +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/index.html b/rep/ept/debtags/index.html new file mode 100644 index 0000000..1f5c5bd --- /dev/null +++ b/rep/ept/debtags/index.html @@ -0,0 +1,173 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - ept/debtags</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">702</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">89.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">626</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="debtags.cc.gcov.html">debtags.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=48 height=10 alt="48.1%"><img src="../../snow.png" width=52 height=10 alt="48.1%"></td></tr></table> + </td> + <td class="coverPerMed">48.1 %</td> + <td class="coverNumMed">39 / 81 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="debtags.h.gcov.html">debtags.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=93 height=10 alt="93.1%"><img src="../../snow.png" width=7 height=10 alt="93.1%"></td></tr></table> + </td> + <td class="coverPerHi">93.1 %</td> + <td class="coverNumHi">67 / 72 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="debtags.tcc.gcov.html">debtags.tcc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">4 / 4 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="debtags.test.h.gcov.html">debtags.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">103 / 103 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="expression.cc.gcov.html">expression.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">5 / 5 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="expression.test.h.gcov.html">expression.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">32 / 32 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="tag.cc.gcov.html">tag.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=75 height=10 alt="74.6%"><img src="../../snow.png" width=25 height=10 alt="74.6%"></td></tr></table> + </td> + <td class="coverPerHi">74.6 %</td> + <td class="coverNumHi">44 / 59 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="tag.h.gcov.html">tag.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=94 height=10 alt="93.8%"><img src="../../snow.png" width=6 height=10 alt="93.8%"></td></tr></table> + </td> + <td class="coverPerHi">93.8 %</td> + <td class="coverNumHi">15 / 16 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="vocabulary.cc.gcov.html">vocabulary.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=95 height=10 alt="95.1%"><img src="../../snow.png" width=5 height=10 alt="95.1%"></td></tr></table> + </td> + <td class="coverPerHi">95.1 %</td> + <td class="coverNumHi">97 / 102 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="vocabulary.h.gcov.html">vocabulary.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=87 height=10 alt="87.3%"><img src="../../snow.png" width=13 height=10 alt="87.3%"></td></tr></table> + </td> + <td class="coverPerHi">87.3 %</td> + <td class="coverNumHi">48 / 55 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="vocabulary.test.h.gcov.html">vocabulary.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.4%"><img src="../../snow.png" width=1 height=10 alt="99.4%"></td></tr></table> + </td> + <td class="coverPerHi">99.4 %</td> + <td class="coverNumHi">172 / 173 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/debdbparser.cc.gcov.html b/rep/ept/debtags/maint/debdbparser.cc.gcov.html new file mode 100644 index 0000000..df9b37c --- /dev/null +++ b/rep/ept/debtags/maint/debdbparser.cc.gcov.html @@ -0,0 +1,255 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/debdbparser.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - debdbparser.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">64</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">84.4 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">54</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Parser for debian database files +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * Copyright (C) 2003--2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 5 </span> : * +<span class="lineNum"> 6 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 7 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 8 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 9 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 12 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 13 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 14 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 17 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 18 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 19 </span> : */ +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : #include <ept/debtags/maint/debdbparser.h> +<span class="lineNum"> 22 </span> : +<span class="lineNum"> 23 </span> : #include <tagcoll/input/base.h> +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <map> +<span class="lineNum"> 26 </span> : #include <ctype.h> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : // using namespace std; +<span class="lineNum"> 29 </span> : using namespace tagcoll; +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace debtags { +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : // Eat spaces and empty lines +<span class="lineNum"> 35 </span> : // Returns the number of '\n' encountered +<span class="lineNum"> 36 </span><span class="lineCov"> 12089 : int DebDBParser::eatSpacesAndEmptyLines()</span> +<span class="lineNum"> 37 </span> : { +<span class="lineNum"> 38 </span><span class="lineCov"> 12089 : int res = 0;</span> +<span class="lineNum"> 39 </span> : int c; +<span class="lineNum"> 40 </span><span class="lineCov"> 31183 : while ((c = in.nextChar()) != input::Input::Eof && (isblank(c) || c == '\n'))</span> +<span class="lineNum"> 41 </span><span class="lineCov"> 7005 : if (c == '\n')</span> +<span class="lineNum"> 42 </span> : { +<span class="lineNum"> 43 </span><span class="lineCov"> 3314 : isBOL = true;</span> +<span class="lineNum"> 44 </span> : //line++; +<span class="lineNum"> 45 </span><span class="lineCov"> 3314 : res++;</span> +<span class="lineNum"> 46 </span> : } else +<span class="lineNum"> 47 </span><span class="lineCov"> 3691 : isBOL = false;</span> +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span><span class="lineCov"> 12089 : if (c == input::Input::Eof)</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 1308 : isEOF = true;</span> +<span class="lineNum"> 51 </span> : else +<span class="lineNum"> 52 </span><span class="lineCov"> 10781 : in.pushChar(c);</span> +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span><span class="lineCov"> 12089 : return res;</span> +<span class="lineNum"> 55 </span> : } +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span> : // Get the ^([A-Za-z0-9]+) field name +<span class="lineNum"> 58 </span><span class="lineCov"> 7094 : std::string DebDBParser::getFieldName()</span> +<span class="lineNum"> 59 </span> : { +<span class="lineNum"> 60 </span><span class="lineCov"> 7094 : if (! isBOL)</span> +<span class="lineNum"> 61 </span><span class="lineNoCov"> 0 : throw exception::Parser(in, "field must start at the beginning of the line");</span> +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span><span class="lineCov"> 7094 : std::string res;</span> +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span> : int c; +<span class="lineNum"> 66 </span><span class="lineCov"> 63954 : while ((c = in.nextChar()) != input::Input::Eof && (isalnum(c) || c == '-'))</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 49766 : res += c;</span> +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span><span class="lineCov"> 7094 : if (c == input::Input::Eof)</span> +<span class="lineNum"> 70 </span> : { +<span class="lineNum"> 71 </span><span class="lineNoCov"> 0 : isEOF = true;</span> +<span class="lineNum"> 72 </span><span class="lineNoCov"> 0 : if (!res.empty())</span> +<span class="lineNum"> 73 </span><span class="lineNoCov"> 0 : throw exception::Parser(in, "field is truncated at end of file. Last line begins with: \"" + res + "\n");</span> +<span class="lineNum"> 74 </span> : } else +<span class="lineNum"> 75 </span><span class="lineCov"> 7094 : in.pushChar(c);</span> +<span class="lineNum"> 76 </span> : +<span class="lineNum"> 77 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 78 </span> : } +<span class="lineNum"> 79 </span> : +<span class="lineNum"> 80 </span> : // Eat the \s*: characters that divide the field name and the field +<span class="lineNum"> 81 </span> : // data +<span class="lineNum"> 82 </span><span class="lineCov"> 7094 : void DebDBParser::eatFieldSep()</span> +<span class="lineNum"> 83 </span> : { +<span class="lineNum"> 84 </span> : int c; +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span><span class="lineCov"> 7094 : while ((c = in.nextChar()) != input::Input::Eof && isblank(c))</span> +<span class="lineNum"> 87 </span> : ; +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span><span class="lineCov"> 7094 : if (c != ':')</span> +<span class="lineNum"> 90 </span> : { +<span class="lineNum"> 91 </span><span class="lineNoCov"> 0 : if (c == input::Input::Eof)</span> +<span class="lineNum"> 92 </span> : { +<span class="lineNum"> 93 </span><span class="lineNoCov"> 0 : isEOF = true;</span> +<span class="lineNum"> 94 </span><span class="lineNoCov"> 0 : throw exception::Parser(in, "field is truncated at end of file");</span> +<span class="lineNum"> 95 </span> : } else { +<span class="lineNum"> 96 </span><span class="lineNoCov"> 0 : throw exception::Parser(in, std::string("invalid character `") + (char)c + "' expecting `:'");</span> +<span class="lineNum"> 97 </span> : } +<span class="lineNum"> 98 </span> : } +<span class="lineNum"> 99 </span><span class="lineCov"> 7094 : }</span> +<span class="lineNum"> 100 </span> : +<span class="lineNum"> 101 </span> : // Get the \s*(.+?)\s*\n of a body line +<span class="lineNum"> 102 </span><span class="lineCov"> 17875 : void DebDBParser::appendFieldBody(std::string& body)</span> +<span class="lineNum"> 103 </span> : { +<span class="lineNum"> 104 </span> : int c; +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span> : // Skip leading spaces +<span class="lineNum"> 107 </span><span class="lineCov"> 17875 : while ((c = in.nextChar()) != input::Input::Eof && isblank(c))</span> +<span class="lineNum"> 108 </span> : ; +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span> : // Get the body part +<span class="lineNum"> 111 </span><span class="lineCov"> 280757 : for ( ; c != input::Input::Eof && c != '\n'; c = in.nextChar())</span> +<span class="lineNum"> 112 </span><span class="lineCov"> 269976 : body += c;</span> +<span class="lineNum"> 113 </span> : +<span class="lineNum"> 114 </span> : // Delete trailing spaces +<span class="lineNum"> 115 </span><span class="lineCov"> 10781 : size_t end = body.find_last_not_of(" \t");</span> +<span class="lineNum"> 116 </span><span class="lineCov"> 10781 : if (end != std::string::npos)</span> +<span class="lineNum"> 117 </span><span class="lineCov"> 10781 : body.resize(end + 1);</span> +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span><span class="lineCov"> 10781 : if (c == input::Input::Eof)</span> +<span class="lineNum"> 120 </span><span class="lineNoCov"> 0 : isEOF = true;</span> +<span class="lineNum"> 121 </span> : else +<span class="lineNum"> 122 </span> : { +<span class="lineNum"> 123 </span> : //line++; +<span class="lineNum"> 124 </span><span class="lineCov"> 10781 : isBOL = true;</span> +<span class="lineNum"> 125 </span> : } +<span class="lineNum"> 126 </span><span class="lineCov"> 10781 : }</span> +<span class="lineNum"> 127 </span> : +<span class="lineNum"> 128 </span> : +<span class="lineNum"> 129 </span><span class="lineCov"> 1308 : DebDBParser::DebDBParser(input::Input& input) :</span> +<span class="lineNum"> 130 </span><span class="lineCov"> 1308 : in(input), isBOL(true), isEOF(false)</span> +<span class="lineNum"> 131 </span> : { +<span class="lineNum"> 132 </span> : // Go at the start of the next record +<span class="lineNum"> 133 </span><span class="lineCov"> 1308 : eatSpacesAndEmptyLines();</span> +<span class="lineNum"> 134 </span><span class="lineCov"> 1308 : }</span> +<span class="lineNum"> 135 </span> : +<span class="lineNum"> 136 </span> : +<span class="lineNum"> 137 </span> : // Read a record and positions itself at the start of the next one +<span class="lineNum"> 138 </span> : // Returns false when there are no more records available +<span class="lineNum"> 139 </span><span class="lineCov"> 3261 : bool DebDBParser::nextRecord(Record& rec)</span> +<span class="lineNum"> 140 </span> : { +<span class="lineNum"> 141 </span><span class="lineCov"> 3261 : if (isEOF)</span> +<span class="lineNum"> 142 </span><span class="lineCov"> 7 : return false;</span> +<span class="lineNum"> 143 </span> : +<span class="lineNum"> 144 </span><span class="lineCov"> 3254 : rec.clear();</span> +<span class="lineNum"> 145 </span> : +<span class="lineNum"> 146 </span> : int n; +<span class="lineNum"> 147 </span><span class="lineCov"> 12880 : do {</span> +<span class="lineNum"> 148 </span> : // Read the field name +<span class="lineNum"> 149 </span><span class="lineCov"> 7094 : std::string field = getFieldName();</span> +<span class="lineNum"> 150 </span><span class="lineCov"> 7094 : std::string body;</span> +<span class="lineNum"> 151 </span> : +<span class="lineNum"> 152 </span> : //fprintf(stderr, "Got field: %.*s\n", field.size(), field.data()); +<span class="lineNum"> 153 </span> : +<span class="lineNum"> 154 </span> : // Read the colon +<span class="lineNum"> 155 </span><span class="lineCov"> 7094 : eatFieldSep();</span> +<span class="lineNum"> 156 </span> : +<span class="lineNum"> 157 </span> : // Read the first line of the field body +<span class="lineNum"> 158 </span><span class="lineCov"> 7094 : appendFieldBody(body);</span> +<span class="lineNum"> 159 </span> : //fprintf(stderr, "Got body: %.*s\n", body.size(), body.data()); +<span class="lineNum"> 160 </span> : +<span class="lineNum"> 161 </span> : // Read the continuation lines of field body +<span class="lineNum"> 162 </span><span class="lineCov"> 17875 : while ((n = eatSpacesAndEmptyLines()) == 0 && ! isBOL)</span> +<span class="lineNum"> 163 </span> : { +<span class="lineNum"> 164 </span><span class="lineCov"> 3687 : body += '\n';</span> +<span class="lineNum"> 165 </span> : +<span class="lineNum"> 166 </span><span class="lineCov"> 3687 : size_t start_size = body.size();</span> +<span class="lineNum"> 167 </span> : +<span class="lineNum"> 168 </span><span class="lineCov"> 3687 : appendFieldBody(body);</span> +<span class="lineNum"> 169 </span> : +<span class="lineNum"> 170 </span> : // Check for dot-only lines to be changed to empty lines +<span class="lineNum"> 171 </span><span class="lineCov"> 3687 : if (body.size() - start_size == 1 && body[body.size() - 1] == '.')</span> +<span class="lineNum"> 172 </span><span class="lineCov"> 601 : body.resize(body.size() - 1);</span> +<span class="lineNum"> 173 </span> : +<span class="lineNum"> 174 </span> : //fprintf(stderr, "Appended body: %.*s\n", body.size(), body.data()); +<span class="lineNum"> 175 </span> : } +<span class="lineNum"> 176 </span> : //fprintf(stderr, "Trailing newlines: %d\n", n); +<span class="lineNum"> 177 </span> : +<span class="lineNum"> 178 </span> : +<span class="lineNum"> 179 </span><span class="lineCov"> 7094 : rec.insert(std::pair<std::string,std::string>(field, body));</span> +<span class="lineNum"> 180 </span> : } while (!isEOF && !n); +<span class="lineNum"> 181 </span> : +<span class="lineNum"> 182 </span><span class="lineCov"> 3254 : return true;</span> +<span class="lineNum"> 183 </span> : } +<span class="lineNum"> 184 </span> : +<span class="lineNum"> 185 </span> : } +<span class="lineNum"> 186 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 187 </span> : +<span class="lineNum"> 188 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/debtagsindexer.cc.gcov.html b/rep/ept/debtags/maint/debtagsindexer.cc.gcov.html new file mode 100644 index 0000000..143e907 --- /dev/null +++ b/rep/ept/debtags/maint/debtagsindexer.cc.gcov.html @@ -0,0 +1,332 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/debtagsindexer.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - debtagsindexer.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">119</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">74.8 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">89</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #include <ept/debtags/maint/debtagsindexer.h> +<span class="lineNum"> 2 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 3 </span> : #include <ept/debtags/maint/pkgid.h> +<span class="lineNum"> 4 </span> : #include <ept/debtags/maint/serializer.h> +<span class="lineNum"> 5 </span> : #include <ept/debtags/vocabulary.h> +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : #include <tagcoll/coll/intdiskindex.h> +<span class="lineNum"> 8 </span> : #include <tagcoll/coll/simple.h> +<span class="lineNum"> 9 </span> : #include <tagcoll/TextFormat.h> +<span class="lineNum"> 10 </span> : #include <tagcoll/stream/filters.h> +<span class="lineNum"> 11 </span> : +<span class="lineNum"> 12 </span> : #include <wibble/exception.h> +<span class="lineNum"> 13 </span> : +<span class="lineNum"> 14 </span> : #include <cstring> +<span class="lineNum"> 15 </span> : +<span class="lineNum"> 16 </span> : using namespace std; +<span class="lineNum"> 17 </span> : +<span class="lineNum"> 18 </span> : namespace ept { +<span class="lineNum"> 19 </span> : namespace debtags { +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : /// MMapIndexer that indexes the package names +<span class="lineNum"> 22 </span> : struct PkgIdGenerator : public tagcoll::diskindex::MMapIndexer +<span class="lineNum"> 23 </span><span class="lineCov"> 2 : {</span> +<span class="lineNum"> 24 </span> : // Sorted set of all available package names +<span class="lineNum"> 25 </span> : std::set<std::string> pkgs; +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span><span class="lineCov"> 3 : int encodedSize() const</span> +<span class="lineNum"> 28 </span> : { +<span class="lineNum"> 29 </span><span class="lineCov"> 3 : int size = pkgs.size() * sizeof(int);</span> +<span class="lineNum"> 30 </span><span class="lineCov"> 63438 : for (std::set<std::string>::const_iterator i = pkgs.begin();</span> +<span class="lineNum"> 31 </span> : i != pkgs.end(); ++i) +<span class="lineNum"> 32 </span><span class="lineCov"> 63435 : size += i->size() + 1;</span> +<span class="lineNum"> 33 </span><span class="lineCov"> 3 : return tagcoll::diskindex::MMap::align(size);</span> +<span class="lineNum"> 34 </span> : } +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 2 : void encode(char* buf) const</span> +<span class="lineNum"> 37 </span> : { +<span class="lineNum"> 38 </span><span class="lineCov"> 2 : int pos = pkgs.size() * sizeof(int);</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 2 : int idx = 0;</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 42292 : for (std::set<std::string>::const_iterator i = pkgs.begin();</span> +<span class="lineNum"> 41 </span> : i != pkgs.end(); ++i) +<span class="lineNum"> 42 </span> : { +<span class="lineNum"> 43 </span><span class="lineCov"> 42290 : ((int*)buf)[idx++] = pos;</span> +<span class="lineNum"> 44 </span><span class="lineCov"> 42290 : memcpy(buf + pos, i->c_str(), i->size() + 1);</span> +<span class="lineNum"> 45 </span><span class="lineCov"> 42290 : pos += i->size() + 1;</span> +<span class="lineNum"> 46 </span> : } +<span class="lineNum"> 47 </span><span class="lineCov"> 2 : }</span> +<span class="lineNum"> 48 </span> : }; +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineCov"> 10 : DebtagsIndexer::DebtagsIndexer(Vocabulary& voc)</span> +<span class="lineNum"> 52 </span> : : voc(voc), +<span class="lineNum"> 53 </span> : mainSource(Path::debtagsSourceDir()), +<span class="lineNum"> 54 </span><span class="lineCov"> 10 : userSource(Path::debtagsUserSourceDir())</span> +<span class="lineNum"> 55 </span> : { +<span class="lineNum"> 56 </span><span class="lineCov"> 10 : rescan();</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 10 : }</span> +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span><span class="lineCov"> 10 : void DebtagsIndexer::rescan()</span> +<span class="lineNum"> 60 </span> : { +<span class="lineNum"> 61 </span><span class="lineCov"> 10 : ts_main_src = mainSource.timestamp();</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 10 : ts_user_src = userSource.timestamp();</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 10 : ts_main_tag = Path::timestamp(Path::tagdb());</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 20 : ts_main_idx = Path::timestamp(Path::tagdbIndex());</span> +<span class="lineNum"> 65 </span><span class="lineCov"> 20 : ts_user_tag = Path::timestamp(Path::userTagdb());</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 20 : ts_user_idx = Path::timestamp(Path::userTagdbIndex());</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 10 : }</span> +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span><span class="lineCov"> 10 : bool DebtagsIndexer::needsRebuild() const</span> +<span class="lineNum"> 70 </span> : { +<span class="lineNum"> 71 </span> : // If there are no indexes of any kind, then we need rebuilding +<span class="lineNum"> 72 </span><span class="lineCov"> 10 : if (ts_user_tag == 0 && ts_user_idx == 0 && ts_main_tag == 0 && ts_main_idx == 0)</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 2 : return true;</span> +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span> : // If the user index is ok, then we are fine +<span class="lineNum"> 76 </span><span class="lineCov"> 8 : if (ts_user_tag >= sourceTimestamp() && ts_user_idx >= sourceTimestamp())</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 8 : return false;</span> +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span> : // If there are user sources, then we cannot use the system index +<span class="lineNum"> 80 </span><span class="lineNoCov"> 0 : if (ts_user_src > 0)</span> +<span class="lineNum"> 81 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span> : // If there are no user sources, then we can fallback on the system +<span class="lineNum"> 84 </span> : // indexes in case the user indexes are not up to date +<span class="lineNum"> 85 </span><span class="lineNoCov"> 0 : if (ts_main_tag >= sourceTimestamp() && ts_main_idx >= sourceTimestamp())</span> +<span class="lineNum"> 86 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 87 </span> : +<span class="lineNum"> 88 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 89 </span> : } +<span class="lineNum"> 90 </span> : +<span class="lineNum"> 91 </span><span class="lineCov"> 10 : bool DebtagsIndexer::userIndexIsRedundant() const</span> +<span class="lineNum"> 92 </span> : { +<span class="lineNum"> 93 </span> : // If there is no user index, then it is not redundant +<span class="lineNum"> 94 </span><span class="lineCov"> 10 : if (ts_user_tag == 0 && ts_user_idx == 0)</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 96 </span> : +<span class="lineNum"> 97 </span> : // If we have user sources, then the user index is never redundant +<span class="lineNum"> 98 </span><span class="lineCov"> 9 : if (ts_user_src > 0)</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 9 : return false;</span> +<span class="lineNum"> 100 </span> : +<span class="lineNum"> 101 </span> : // If the system index is not up to date, then the user index is not +<span class="lineNum"> 102 </span> : // redundant +<span class="lineNum"> 103 </span><span class="lineNoCov"> 0 : if (ts_main_tag < sourceTimestamp() || ts_main_idx < sourceTimestamp())</span> +<span class="lineNum"> 104 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 107 </span> : } +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span><span class="lineCov"> 2 : bool DebtagsIndexer::rebuild(const std::string& tagfname, const std::string& idxfname)</span> +<span class="lineNum"> 110 </span> : { +<span class="lineNum"> 111 </span> : using namespace tagcoll; +<span class="lineNum"> 112 </span> : +<span class="lineNum"> 113 </span><span class="lineCov"> 2 : diskindex::MasterMMapIndexer master(idxfname);</span> +<span class="lineNum"> 114 </span> : +<span class="lineNum"> 115 </span> : // Read and merge tag data +<span class="lineNum"> 116 </span><span class="lineCov"> 2 : coll::Simple<string, string> merged;</span> +<span class="lineNum"> 117 </span><span class="lineCov"> 2 : mainSource.readTags(inserter(merged));</span> +<span class="lineNum"> 118 </span><span class="lineCov"> 2 : userSource.readTags(inserter(merged));</span> +<span class="lineNum"> 119 </span> : +<span class="lineNum"> 120 </span><span class="lineCov"> 2 : if (merged.empty())</span> +<span class="lineNum"> 121 </span> : //throw wibble::exception::Consistency("Reading debtags sources from " + Path::debtagsSourceDir() + " and " + Path::debtagsUserSourceDir(), "Unable to find any tag data"); +<span class="lineNum"> 122 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 123 </span> : +<span class="lineNum"> 124 </span> : // Create the pkgid index +<span class="lineNum"> 125 </span><span class="lineCov"> 1 : PkgIdGenerator pkgidGen;</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 21146 : for (coll::Simple<string, string>::const_iterator i = merged.begin();</span> +<span class="lineNum"> 127 </span> : i != merged.end(); ++i) +<span class="lineNum"> 128 </span><span class="lineCov"> 21145 : pkgidGen.pkgs.insert(i->first);</span> +<span class="lineNum"> 129 </span> : +<span class="lineNum"> 130 </span> : // Temporary in-memory index to use for converting packages to ints while +<span class="lineNum"> 131 </span> : // creating the debtags index +<span class="lineNum"> 132 </span><span class="lineCov"> 1 : char buf[pkgidGen.encodedSize()];</span> +<span class="lineNum"> 133 </span><span class="lineCov"> 1 : pkgidGen.encode(buf);</span> +<span class="lineNum"> 134 </span><span class="lineCov"> 1 : PkgId pkgid(buf, pkgidGen.encodedSize());</span> +<span class="lineNum"> 135 </span> : +<span class="lineNum"> 136 </span> : // Create the Debtags index +<span class="lineNum"> 137 </span><span class="lineCov"> 1 : coll::IntDiskIndexer tagindexer;</span> +<span class="lineNum"> 138 </span><span class="lineCov"> 1 : merged.output(stringToInt(pkgid, voc, inserter(tagindexer)));</span> +<span class="lineNum"> 139 </span> : +<span class="lineNum"> 140 </span> : // MMap 0: pkgid +<span class="lineNum"> 141 </span><span class="lineCov"> 1 : master.append(pkgidGen);</span> +<span class="lineNum"> 142 </span> : // MMap 1: pkg->tag +<span class="lineNum"> 143 </span><span class="lineCov"> 1 : master.append(tagindexer.pkgIndexer());</span> +<span class="lineNum"> 144 </span> : // MMap 2: tag->pkg +<span class="lineNum"> 145 </span><span class="lineCov"> 1 : master.append(tagindexer.tagIndexer());</span> +<span class="lineNum"> 146 </span> : +<span class="lineNum"> 147 </span> : // Write the tag database in text format +<span class="lineNum"> 148 </span><span class="lineCov"> 1 : std::string tmpdb = tagfname + ".tmp";</span> +<span class="lineNum"> 149 </span><span class="lineCov"> 1 : FILE* out = fopen(tmpdb.c_str(), "wt");</span> +<span class="lineNum"> 150 </span><span class="lineCov"> 1 : if (!out) throw wibble::exception::File(tmpdb, "creating temporary copy of tag index");</span> +<span class="lineNum"> 151 </span><span class="lineCov"> 1 : merged.output(textformat::StdioWriter(out));</span> +<span class="lineNum"> 152 </span><span class="lineCov"> 1 : fclose(out);</span> +<span class="lineNum"> 153 </span> : +<span class="lineNum"> 154 </span> : // Perform "atomic" update of the tag database +<span class="lineNum"> 155 </span> : // FIXME: cannot be atomic because race conditions happening between file +<span class="lineNum"> 156 </span> : // renames +<span class="lineNum"> 157 </span><span class="lineCov"> 1 : if (rename(tmpdb.c_str(), tagfname.c_str()) == -1)</span> +<span class="lineNum"> 158 </span><span class="lineNoCov"> 0 : throw wibble::exception::System("Renaming " + tmpdb + " to " + tagfname);</span> +<span class="lineNum"> 159 </span> : +<span class="lineNum"> 160 </span><span class="lineCov"> 1 : master.commit();</span> +<span class="lineNum"> 161 </span><span class="lineCov"> 1 : return true;</span> +<span class="lineNum"> 162 </span> : } +<span class="lineNum"> 163 </span> : +<span class="lineNum"> 164 </span><span class="lineCov"> 10 : bool DebtagsIndexer::rebuildIfNeeded()</span> +<span class="lineNum"> 165 </span> : { +<span class="lineNum"> 166 </span><span class="lineCov"> 10 : if (needsRebuild())</span> +<span class="lineNum"> 167 </span> : { +<span class="lineNum"> 168 </span> : // Decide if we rebuild the user index or the system index +<span class="lineNum"> 169 </span> : +<span class="lineNum"> 170 </span><span class="lineCov"> 2 : if (ts_user_src == 0 && Path::access(Path::debtagsIndexDir(), W_OK) == 0)</span> +<span class="lineNum"> 171 </span> : { +<span class="lineNum"> 172 </span> : // There are no user sources and we can write to the system index +<span class="lineNum"> 173 </span> : // directory: rebuild the system index +<span class="lineNum"> 174 </span><span class="lineCov"> 1 : if (!rebuild(Path::tagdb(), Path::tagdbIndex()))</span> +<span class="lineNum"> 175 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 176 </span><span class="lineNoCov"> 0 : ts_main_tag = Path::timestamp(Path::tagdb());</span> +<span class="lineNum"> 177 </span><span class="lineNoCov"> 0 : ts_main_idx = Path::timestamp(Path::tagdbIndex());</span> +<span class="lineNum"> 178 </span><span class="lineNoCov"> 0 : if (Path::tagdb() == Path::userTagdb())</span> +<span class="lineNum"> 179 </span><span class="lineNoCov"> 0 : ts_user_tag = ts_main_tag;</span> +<span class="lineNum"> 180 </span><span class="lineNoCov"> 0 : if (Path::tagdbIndex() == Path::userTagdbIndex())</span> +<span class="lineNum"> 181 </span><span class="lineNoCov"> 0 : ts_user_idx = ts_main_idx;</span> +<span class="lineNum"> 182 </span> : } else { +<span class="lineNum"> 183 </span><span class="lineCov"> 1 : wibble::sys::fs::mkFilePath(Path::userTagdb());</span> +<span class="lineNum"> 184 </span><span class="lineCov"> 2 : wibble::sys::fs::mkFilePath(Path::userTagdbIndex());</span> +<span class="lineNum"> 185 </span><span class="lineCov"> 2 : if (!rebuild(Path::userTagdb(), Path::userTagdbIndex()))</span> +<span class="lineNum"> 186 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 187 </span><span class="lineCov"> 1 : ts_user_tag = Path::timestamp(Path::userTagdb());</span> +<span class="lineNum"> 188 </span><span class="lineCov"> 2 : ts_user_idx = Path::timestamp(Path::userTagdbIndex());</span> +<span class="lineNum"> 189 </span> : } +<span class="lineNum"> 190 </span><span class="lineCov"> 1 : return true;</span> +<span class="lineNum"> 191 </span> : } +<span class="lineNum"> 192 </span><span class="lineCov"> 8 : return false;</span> +<span class="lineNum"> 193 </span> : } +<span class="lineNum"> 194 </span> : +<span class="lineNum"> 195 </span><span class="lineCov"> 10 : bool DebtagsIndexer::deleteRedundantUserIndex()</span> +<span class="lineNum"> 196 </span> : { +<span class="lineNum"> 197 </span><span class="lineCov"> 10 : if (userIndexIsRedundant())</span> +<span class="lineNum"> 198 </span> : { +<span class="lineNum"> 199 </span> : // Delete the user indexes if they exist +<span class="lineNum"> 200 </span><span class="lineNoCov"> 0 : if (Path::tagdb() != Path::userTagdb())</span> +<span class="lineNum"> 201 </span> : { +<span class="lineNum"> 202 </span><span class="lineNoCov"> 0 : unlink(Path::userTagdb().c_str());</span> +<span class="lineNum"> 203 </span><span class="lineNoCov"> 0 : ts_user_tag = 0;</span> +<span class="lineNum"> 204 </span> : } +<span class="lineNum"> 205 </span><span class="lineNoCov"> 0 : if (Path::tagdbIndex() != Path::userTagdbIndex())</span> +<span class="lineNum"> 206 </span> : { +<span class="lineNum"> 207 </span><span class="lineNoCov"> 0 : unlink(Path::userTagdbIndex().c_str());</span> +<span class="lineNum"> 208 </span><span class="lineNoCov"> 0 : ts_user_idx = 0;</span> +<span class="lineNum"> 209 </span> : } +<span class="lineNum"> 210 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 211 </span> : } +<span class="lineNum"> 212 </span><span class="lineCov"> 10 : return false;</span> +<span class="lineNum"> 213 </span> : } +<span class="lineNum"> 214 </span> : +<span class="lineNum"> 215 </span><span class="lineCov"> 10 : bool DebtagsIndexer::getUpToDateTagdb(std::string& tagfname, std::string& idxfname)</span> +<span class="lineNum"> 216 </span> : { +<span class="lineNum"> 217 </span> : // If there are no indexes of any kind, then we have nothing to return +<span class="lineNum"> 218 </span><span class="lineCov"> 10 : if (ts_user_tag == 0 && ts_user_idx == 0 && ts_main_tag == 0 && ts_main_idx == 0)</span> +<span class="lineNum"> 219 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 220 </span> : +<span class="lineNum"> 221 </span> : // If the user index is up to date, use it +<span class="lineNum"> 222 </span><span class="lineCov"> 9 : if (ts_user_tag >= sourceTimestamp() &&</span> +<span class="lineNum"> 223 </span> : ts_user_idx >= sourceTimestamp()) +<span class="lineNum"> 224 </span> : { +<span class="lineNum"> 225 </span><span class="lineCov"> 9 : tagfname = Path::userTagdb();</span> +<span class="lineNum"> 226 </span><span class="lineCov"> 18 : idxfname = Path::userTagdbIndex();</span> +<span class="lineNum"> 227 </span><span class="lineCov"> 9 : return true;</span> +<span class="lineNum"> 228 </span> : } +<span class="lineNum"> 229 </span> : +<span class="lineNum"> 230 </span> : // If the user index is not up to date and we have user sources, we cannot +<span class="lineNum"> 231 </span> : // fall back to the system index +<span class="lineNum"> 232 </span><span class="lineNoCov"> 0 : if (ts_user_src != 0)</span> +<span class="lineNum"> 233 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 234 </span> : +<span class="lineNum"> 235 </span> : // Fallback to the system index +<span class="lineNum"> 236 </span><span class="lineNoCov"> 0 : if (ts_main_tag >= sourceTimestamp() &&</span> +<span class="lineNum"> 237 </span> : ts_main_idx >= sourceTimestamp()) +<span class="lineNum"> 238 </span> : { +<span class="lineNum"> 239 </span><span class="lineNoCov"> 0 : tagfname = Path::tagdb();</span> +<span class="lineNum"> 240 </span><span class="lineNoCov"> 0 : idxfname = Path::tagdbIndex();</span> +<span class="lineNum"> 241 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 242 </span> : } +<span class="lineNum"> 243 </span> : +<span class="lineNum"> 244 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 245 </span> : } +<span class="lineNum"> 246 </span> : +<span class="lineNum"> 247 </span> : +<span class="lineNum"> 248 </span> : +<span class="lineNum"> 249 </span><span class="lineCov"> 10 : bool DebtagsIndexer::obtainWorkingDebtags(Vocabulary& voc, std::string& tagfname, std::string& idxfname)</span> +<span class="lineNum"> 250 </span> : { +<span class="lineNum"> 251 </span><span class="lineCov"> 10 : DebtagsIndexer t(voc);</span> +<span class="lineNum"> 252 </span> : +<span class="lineNum"> 253 </span><span class="lineCov"> 10 : t.rebuildIfNeeded();</span> +<span class="lineNum"> 254 </span><span class="lineCov"> 10 : t.deleteRedundantUserIndex();</span> +<span class="lineNum"> 255 </span><span class="lineCov"> 10 : return t.getUpToDateTagdb(tagfname, idxfname);</span> +<span class="lineNum"> 256 </span> : } +<span class="lineNum"> 257 </span> : +<span class="lineNum"> 258 </span> : } +<span class="lineNum"> 259 </span> : } +<span class="lineNum"> 260 </span> : +<span class="lineNum"> 261 </span> : #include <ept/debtags/maint/sourcedir.tcc> +<span class="lineNum"> 262 </span> : #include <tagcoll/coll/simple.tcc> +<span class="lineNum"> 263 </span> : +<span class="lineNum"> 264 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 265 </span> : // -*- C++ -*- +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/debtagsindexer.h.gcov.html b/rep/ept/debtags/maint/debtagsindexer.h.gcov.html new file mode 100644 index 0000000..a67cc3a --- /dev/null +++ b/rep/ept/debtags/maint/debtagsindexer.h.gcov.html @@ -0,0 +1,118 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/debtagsindexer.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - debtagsindexer.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">5</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">5</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_DEBTAGS_DEBTAGSINDEXER_H +<span class="lineNum"> 2 </span> : #define EPT_DEBTAGS_DEBTAGSINDEXER_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : #include <ept/debtags/maint/sourcedir.h> +<span class="lineNum"> 5 </span> : #include <string> +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : namespace ept { +<span class="lineNum"> 8 </span> : namespace debtags { +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span> : class Vocabulary; +<span class="lineNum"> 11 </span> : +<span class="lineNum"> 12 </span> : struct DebtagsIndexer +<span class="lineNum"> 13 </span><span class="lineCov"> 10 : {</span> +<span class="lineNum"> 14 </span> : Vocabulary& voc; +<span class="lineNum"> 15 </span> : +<span class="lineNum"> 16 </span> : SourceDir mainSource; +<span class="lineNum"> 17 </span> : SourceDir userSource; +<span class="lineNum"> 18 </span> : time_t ts_main_src; +<span class="lineNum"> 19 </span> : time_t ts_user_src; +<span class="lineNum"> 20 </span> : time_t ts_main_tag; +<span class="lineNum"> 21 </span> : time_t ts_main_idx; +<span class="lineNum"> 22 </span> : time_t ts_user_tag; +<span class="lineNum"> 23 </span> : time_t ts_user_idx; +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span><span class="lineCov"> 34 : time_t sourceTimestamp() const</span> +<span class="lineNum"> 26 </span> : { +<span class="lineNum"> 27 </span><span class="lineCov"> 34 : time_t res = ts_main_src;</span> +<span class="lineNum"> 28 </span><span class="lineCov"> 34 : if (ts_user_src > res) res = ts_user_src;</span> +<span class="lineNum"> 29 </span><span class="lineCov"> 34 : return res;</span> +<span class="lineNum"> 30 </span> : } +<span class="lineNum"> 31 </span> : bool needsRebuild() const; +<span class="lineNum"> 32 </span> : bool rebuild(const std::string& tagfname, const std::string& idxfname); +<span class="lineNum"> 33 </span> : bool rebuildIfNeeded(); +<span class="lineNum"> 34 </span> : bool getUpToDateTagdb(std::string& tagfname, std::string& idxfname); +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : bool userIndexIsRedundant() const; +<span class="lineNum"> 37 </span> : bool deleteRedundantUserIndex(); +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : void rescan(); +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : DebtagsIndexer(Vocabulary& voc); +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : static bool obtainWorkingDebtags(Vocabulary& voc, std::string& tagfname, std::string& idxfname); +<span class="lineNum"> 44 </span> : }; +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span> : } +<span class="lineNum"> 48 </span> : } +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 51 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/index.html b/rep/ept/debtags/maint/index.html new file mode 100644 index 0000000..ca8f250 --- /dev/null +++ b/rep/ept/debtags/maint/index.html @@ -0,0 +1,236 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - ept/debtags/maint</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">846</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">84.9 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">718</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="debdbparser.cc.gcov.html">debdbparser.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=84 height=10 alt="84.4%"><img src="../../../snow.png" width=16 height=10 alt="84.4%"></td></tr></table> + </td> + <td class="coverPerHi">84.4 %</td> + <td class="coverNumHi">54 / 64 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="debtagsindexer.cc.gcov.html">debtagsindexer.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=75 height=10 alt="74.8%"><img src="../../../snow.png" width=25 height=10 alt="74.8%"></td></tr></table> + </td> + <td class="coverPerHi">74.8 %</td> + <td class="coverNumHi">89 / 119 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="debtagsindexer.h.gcov.html">debtagsindexer.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">5 / 5 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="path.cc.gcov.html">path.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=91 height=10 alt="90.7%"><img src="../../../snow.png" width=9 height=10 alt="90.7%"></td></tr></table> + </td> + <td class="coverPerHi">90.7 %</td> + <td class="coverNumHi">49 / 54 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="path.h.gcov.html">path.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">17 / 17 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="pkgid.cc.gcov.html">pkgid.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=87 height=10 alt="86.7%"><img src="../../../snow.png" width=13 height=10 alt="86.7%"></td></tr></table> + </td> + <td class="coverPerHi">86.7 %</td> + <td class="coverNumHi">13 / 15 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="pkgid.h.gcov.html">pkgid.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=83 height=10 alt="83.3%"><img src="../../../snow.png" width=17 height=10 alt="83.3%"></td></tr></table> + </td> + <td class="coverPerHi">83.3 %</td> + <td class="coverNumHi">5 / 6 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="pkgid.test.h.gcov.html">pkgid.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">18 / 18 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="serializer.h.gcov.html">serializer.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="97.8%"><img src="../../../snow.png" width=2 height=10 alt="97.8%"></td></tr></table> + </td> + <td class="coverPerHi">97.8 %</td> + <td class="coverNumHi">87 / 89 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="serializer.test.h.gcov.html">serializer.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">48 / 48 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="sourcedir.cc.gcov.html">sourcedir.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=75 height=10 alt="75.4%"><img src="../../../snow.png" width=25 height=10 alt="75.4%"></td></tr></table> + </td> + <td class="coverPerHi">75.4 %</td> + <td class="coverNumHi">43 / 57 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="sourcedir.h.gcov.html">sourcedir.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">3 / 3 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="sourcedir.tcc.gcov.html">sourcedir.tcc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=89 height=10 alt="88.9%"><img src="../../../snow.png" width=11 height=10 alt="88.9%"></td></tr></table> + </td> + <td class="coverPerHi">88.9 %</td> + <td class="coverNumHi">8 / 9 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="vocabularyindexer.cc.gcov.html">vocabularyindexer.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=69 height=10 alt="69.1%"><img src="../../../snow.png" width=31 height=10 alt="69.1%"></td></tr></table> + </td> + <td class="coverPerHi">69.1 %</td> + <td class="coverNumHi">65 / 94 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="vocabularyindexer.h.gcov.html">vocabularyindexer.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">2 / 2 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="vocabularymerger.cc.gcov.html">vocabularymerger.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=81 height=10 alt="81.2%"><img src="../../../snow.png" width=19 height=10 alt="81.2%"></td></tr></table> + </td> + <td class="coverPerHi">81.2 %</td> + <td class="coverNumHi">147 / 181 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="vocabularymerger.h.gcov.html">vocabularymerger.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">13 / 13 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="vocabularymerger.test.h.gcov.html">vocabularymerger.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">52 / 52 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/path.cc.gcov.html b/rep/ept/debtags/maint/path.cc.gcov.html new file mode 100644 index 0000000..c9af780 --- /dev/null +++ b/rep/ept/debtags/maint/path.cc.gcov.html @@ -0,0 +1,207 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/path.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - path.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">54</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">90.7 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">49</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : /** \file +<span class="lineNum"> 4 </span> : * debtags paths +<span class="lineNum"> 5 </span> : */ +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : /* +<span class="lineNum"> 8 </span> : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org>, Peter Rockai <me@mornfall.net> +<span class="lineNum"> 9 </span> : * +<span class="lineNum"> 10 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 11 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 12 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 13 </span> : * (at your option) any later version. +<span class="lineNum"> 14 </span> : * +<span class="lineNum"> 15 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 16 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 17 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 18 </span> : * GNU General Public License for more details. +<span class="lineNum"> 19 </span> : * +<span class="lineNum"> 20 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 21 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 22 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 23 </span> : */ +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 26 </span> : #include <ept/config.h> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 29 </span> : #include <wibble/string.h> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : #include <sys/types.h> // getpwuid, stat, mkdir, getuid +<span class="lineNum"> 32 </span> : #include <sys/stat.h> // stat, mkdir +<span class="lineNum"> 33 </span> : #include <pwd.h> // getpwuid +<span class="lineNum"> 34 </span> : #include <unistd.h> // stat, getuid +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : using namespace wibble; +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span> : namespace ept { +<span class="lineNum"> 39 </span> : namespace debtags { +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span><span class="lineCov"> 2 : static std::string userdir()</span> +<span class="lineNum"> 42 </span> : { +<span class="lineNum"> 43 </span><span class="lineCov"> 2 : std::string rcdir;</span> +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span><span class="lineCov"> 2 : struct passwd* udata = getpwuid(getuid());</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 2 : rcdir = str::joinpath(udata->pw_dir, ".debtags");</span> +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span><span class="lineNoCov"> 0 : return rcdir;</span> +<span class="lineNum"> 49 </span> : } +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span><span class="lineCov"> 732 : Path &Path::instance() {</span> +<span class="lineNum"> 53 </span><span class="lineCov"> 732 : if (!s_instance) {</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 1 : s_instance = new Path;</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : instance().m_debtagsSourceDir = DEBTAGS_DB_DIR;</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 1 : instance().m_debtagsIndexDir = DEBTAGS_DB_DIR;</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 2 : instance().m_debtagsUserSourceDir = userdir();</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 2 : instance().m_debtagsUserIndexDir = userdir();</span> +<span class="lineNum"> 59 </span> : } +<span class="lineNum"> 60 </span><span class="lineCov"> 732 : return *s_instance;</span> +<span class="lineNum"> 61 </span> : } +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span><span class="lineCov"> 12 : int Path::access( const std::string &s, int m ) {</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 12 : return ::access( s.c_str(), m );</span> +<span class="lineNum"> 65 </span> : } +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span><span class="lineCov"> 300 : time_t Path::timestamp( const std::string& file ) {</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 300 : std::auto_ptr<struct stat> st = wibble::sys::fs::stat(file);</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 580 : return st.get() == NULL ? 0 : st->st_mtime;</span> +<span class="lineNum"> 70 </span> : } +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span><span class="lineCov"> 62 : void Path::setDebtagsSourceDir( const std::string &s )</span> +<span class="lineNum"> 73 </span> : { +<span class="lineNum"> 74 </span><span class="lineCov"> 62 : instance().m_debtagsSourceDir = s;</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 62 : }</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 62 : void Path::setDebtagsIndexDir( const std::string &s )</span> +<span class="lineNum"> 77 </span> : { +<span class="lineNum"> 78 </span><span class="lineCov"> 62 : instance().m_debtagsIndexDir = s;</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 62 : }</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 62 : void Path::setDebtagsUserSourceDir( const std::string &s )</span> +<span class="lineNum"> 81 </span> : { +<span class="lineNum"> 82 </span><span class="lineCov"> 62 : instance().m_debtagsUserSourceDir = s;</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 62 : }</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 62 : void Path::setDebtagsUserIndexDir( const std::string &s )</span> +<span class="lineNum"> 85 </span> : { +<span class="lineNum"> 86 </span><span class="lineCov"> 62 : instance().m_debtagsUserIndexDir = s;</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 62 : }</span> +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span><span class="lineCov"> 72 : std::string Path::debtagsSourceDir() { return instance().m_debtagsSourceDir; }</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 121 : std::string Path::debtagsIndexDir() { return instance().m_debtagsIndexDir; }</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 82 : std::string Path::debtagsUserSourceDir() { return instance().m_debtagsUserSourceDir; }</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 205 : std::string Path::debtagsUserIndexDir() { return instance().m_debtagsUserIndexDir; }</span> +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span><span class="lineCov"> 33 : std::string Path::vocabulary() {</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 33 : return str::joinpath(debtagsIndexDir(), "vocabulary");</span> +<span class="lineNum"> 96 </span> : } +<span class="lineNum"> 97 </span> : +<span class="lineNum"> 98 </span><span class="lineCov"> 32 : std::string Path::vocabularyIndex() {</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 32 : return str::joinpath(debtagsIndexDir(), "vocabulary.idx");</span> +<span class="lineNum"> 100 </span> : } +<span class="lineNum"> 101 </span> : +<span class="lineNum"> 102 </span><span class="lineCov"> 65 : std::string Path::userVocabulary() {</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 65 : return str::joinpath(debtagsUserIndexDir(), "vocabulary");</span> +<span class="lineNum"> 104 </span> : } +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span><span class="lineCov"> 65 : std::string Path::userVocabularyIndex() {</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 65 : return str::joinpath(debtagsUserIndexDir(), "vocabulary.idx");</span> +<span class="lineNum"> 108 </span> : } +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span><span class="lineCov"> 11 : std::string Path::tagdb() {</span> +<span class="lineNum"> 111 </span><span class="lineCov"> 11 : return str::joinpath(debtagsIndexDir(), "package-tags");</span> +<span class="lineNum"> 112 </span> : } +<span class="lineNum"> 113 </span> : +<span class="lineNum"> 114 </span><span class="lineCov"> 11 : std::string Path::tagdbIndex() {</span> +<span class="lineNum"> 115 </span><span class="lineCov"> 11 : return str::joinpath(debtagsIndexDir(), "package-tags.idx");</span> +<span class="lineNum"> 116 </span> : } +<span class="lineNum"> 117 </span> : +<span class="lineNum"> 118 </span><span class="lineCov"> 22 : std::string Path::userTagdb() {</span> +<span class="lineNum"> 119 </span><span class="lineCov"> 22 : return str::joinpath(debtagsUserIndexDir(), "package-tags");</span> +<span class="lineNum"> 120 </span> : } +<span class="lineNum"> 121 </span> : +<span class="lineNum"> 122 </span><span class="lineCov"> 22 : std::string Path::userTagdbIndex() {</span> +<span class="lineNum"> 123 </span><span class="lineCov"> 22 : return str::joinpath(debtagsUserIndexDir(), "package-tags.idx");</span> +<span class="lineNum"> 124 </span> : } +<span class="lineNum"> 125 </span> : +<span class="lineNum"> 126 </span><span class="lineNoCov"> 0 : std::string Path::pkgidx() {</span> +<span class="lineNum"> 127 </span><span class="lineNoCov"> 0 : return str::joinpath(debtagsIndexDir(), "pkgidx.idx");</span> +<span class="lineNum"> 128 </span> : } +<span class="lineNum"> 129 </span> : +<span class="lineNum"> 130 </span><span class="lineNoCov"> 0 : std::string Path::userPkgidx() {</span> +<span class="lineNum"> 131 </span><span class="lineNoCov"> 0 : return str::joinpath(debtagsUserIndexDir(), "pkgidx.idx");</span> +<span class="lineNum"> 132 </span> : } +<span class="lineNum"> 133 </span> : +<span class="lineNum"> 134 </span> : +<span class="lineNum"> 135 </span> : Path *Path::s_instance = 0; +<span class="lineNum"> 136 </span> : +<span class="lineNum"> 137 </span> : } +<span class="lineNum"> 138 </span> : } +<span class="lineNum"> 139 </span> : +<span class="lineNum"> 140 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/path.h.gcov.html b/rep/ept/debtags/maint/path.h.gcov.html new file mode 100644 index 0000000..35e7710 --- /dev/null +++ b/rep/ept/debtags/maint/path.h.gcov.html @@ -0,0 +1,200 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/path.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - path.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">17</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">17</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /** \file +<span class="lineNum"> 3 </span> : * debtags paths +<span class="lineNum"> 4 </span> : */ +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : /* +<span class="lineNum"> 7 </span> : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 10 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 11 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 12 </span> : * (at your option) any later version. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 15 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 16 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 17 </span> : * GNU General Public License for more details. +<span class="lineNum"> 18 </span> : * +<span class="lineNum"> 19 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 20 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 21 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 22 </span> : */ +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span> : #include <string> +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : struct stat; +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #ifndef EPT_DEBTAGS_PATH_H +<span class="lineNum"> 29 </span> : #define EPT_DEBTAGS_PATH_H +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace debtags { +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : /** +<span class="lineNum"> 35 </span> : * Singleton class to configure and access the various Debtags paths +<span class="lineNum"> 36 </span> : */ +<span class="lineNum"> 37 </span> : class Path +<span class="lineNum"> 38 </span><span class="lineCov"> 1 : {</span> +<span class="lineNum"> 39 </span> : public: +<span class="lineNum"> 40 </span> : static std::string vocabulary(); +<span class="lineNum"> 41 </span> : static std::string vocabularyIndex(); +<span class="lineNum"> 42 </span> : static std::string userVocabulary(); +<span class="lineNum"> 43 </span> : static std::string userVocabularyIndex(); +<span class="lineNum"> 44 </span> : static std::string tagdb(); +<span class="lineNum"> 45 </span> : static std::string tagdbIndex(); +<span class="lineNum"> 46 </span> : static std::string userTagdb(); +<span class="lineNum"> 47 </span> : static std::string userTagdbIndex(); +<span class="lineNum"> 48 </span> : static std::string pkgidx(); +<span class="lineNum"> 49 </span> : static std::string userPkgidx(); +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span> : static std::string debtagsSourceDir(); +<span class="lineNum"> 52 </span> : static std::string debtagsIndexDir(); +<span class="lineNum"> 53 </span> : static std::string debtagsUserSourceDir(); +<span class="lineNum"> 54 </span> : static std::string debtagsUserIndexDir(); +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span> : // Directory where Debtags source data is found +<span class="lineNum"> 57 </span> : static void setDebtagsSourceDir( const std::string &s ); +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span> : // Directory where Debtags indexes are kept +<span class="lineNum"> 60 </span> : static void setDebtagsIndexDir( const std::string &s ); +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span> : // User-specific directory for Debtags source data +<span class="lineNum"> 63 </span> : static void setDebtagsUserSourceDir( const std::string &s ); +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span> : // User-specific directory for Debtags index data +<span class="lineNum"> 66 </span> : static void setDebtagsUserIndexDir( const std::string &s ); +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span> : static int access( const std::string &, int ); +<span class="lineNum"> 69 </span> : static time_t timestamp( const std::string& ); +<span class="lineNum"> 70 </span> : +<span class="lineNum"> 71 </span> : // RAII-style classes to temporarily override directories +<span class="lineNum"> 72 </span> : class OverrideDebtagsSourceDir +<span class="lineNum"> 73 </span> : { +<span class="lineNum"> 74 </span> : std::string old; +<span class="lineNum"> 75 </span> : public: +<span class="lineNum"> 76 </span><span class="lineCov"> 31 : OverrideDebtagsSourceDir(const std::string& path) : old(Path::debtagsSourceDir())</span> +<span class="lineNum"> 77 </span> : { +<span class="lineNum"> 78 </span><span class="lineCov"> 31 : Path::setDebtagsSourceDir(path);</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 31 : }</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 31 : ~OverrideDebtagsSourceDir() { Path::setDebtagsSourceDir(old); }</span> +<span class="lineNum"> 81 </span> : }; +<span class="lineNum"> 82 </span> : class OverrideDebtagsIndexDir +<span class="lineNum"> 83 </span> : { +<span class="lineNum"> 84 </span> : std::string old; +<span class="lineNum"> 85 </span> : public: +<span class="lineNum"> 86 </span><span class="lineCov"> 31 : OverrideDebtagsIndexDir(const std::string& path) : old(Path::debtagsIndexDir())</span> +<span class="lineNum"> 87 </span> : { +<span class="lineNum"> 88 </span><span class="lineCov"> 31 : Path::setDebtagsIndexDir(path);</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 31 : }</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 31 : ~OverrideDebtagsIndexDir() { Path::setDebtagsIndexDir(old); }</span> +<span class="lineNum"> 91 </span> : }; +<span class="lineNum"> 92 </span> : class OverrideDebtagsUserSourceDir +<span class="lineNum"> 93 </span> : { +<span class="lineNum"> 94 </span> : std::string old; +<span class="lineNum"> 95 </span> : public: +<span class="lineNum"> 96 </span><span class="lineCov"> 31 : OverrideDebtagsUserSourceDir(const std::string& path) : old(Path::debtagsUserSourceDir())</span> +<span class="lineNum"> 97 </span> : { +<span class="lineNum"> 98 </span><span class="lineCov"> 31 : Path::setDebtagsUserSourceDir(path);</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 31 : }</span> +<span class="lineNum"> 100 </span><span class="lineCov"> 31 : ~OverrideDebtagsUserSourceDir() { Path::setDebtagsUserSourceDir(old); }</span> +<span class="lineNum"> 101 </span> : }; +<span class="lineNum"> 102 </span> : class OverrideDebtagsUserIndexDir +<span class="lineNum"> 103 </span> : { +<span class="lineNum"> 104 </span> : std::string old; +<span class="lineNum"> 105 </span> : public: +<span class="lineNum"> 106 </span><span class="lineCov"> 31 : OverrideDebtagsUserIndexDir(const std::string& path) : old(Path::debtagsUserIndexDir())</span> +<span class="lineNum"> 107 </span> : { +<span class="lineNum"> 108 </span><span class="lineCov"> 31 : Path::setDebtagsUserIndexDir(path);</span> +<span class="lineNum"> 109 </span><span class="lineCov"> 31 : }</span> +<span class="lineNum"> 110 </span><span class="lineCov"> 31 : ~OverrideDebtagsUserIndexDir() { Path::setDebtagsUserIndexDir(old); }</span> +<span class="lineNum"> 111 </span> : }; +<span class="lineNum"> 112 </span> : protected: +<span class="lineNum"> 113 </span> : static Path *s_instance; +<span class="lineNum"> 114 </span> : static Path &instance(); +<span class="lineNum"> 115 </span> : +<span class="lineNum"> 116 </span> : // Directory where Debtags source data is found +<span class="lineNum"> 117 </span> : std::string m_debtagsSourceDir; +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span> : // Directory where Debtags indexes are kept +<span class="lineNum"> 120 </span> : std::string m_debtagsIndexDir; +<span class="lineNum"> 121 </span> : +<span class="lineNum"> 122 </span> : // User-specific directory for Debtags source data +<span class="lineNum"> 123 </span> : std::string m_debtagsUserSourceDir; +<span class="lineNum"> 124 </span> : +<span class="lineNum"> 125 </span> : // User-specific directory for Debtags index data +<span class="lineNum"> 126 </span> : std::string m_debtagsUserIndexDir; +<span class="lineNum"> 127 </span> : }; +<span class="lineNum"> 128 </span> : +<span class="lineNum"> 129 </span> : } +<span class="lineNum"> 130 </span> : } +<span class="lineNum"> 131 </span> : +<span class="lineNum"> 132 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 133 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/pkgid.cc.gcov.html b/rep/ept/debtags/maint/pkgid.cc.gcov.html new file mode 100644 index 0000000..62de1a1 --- /dev/null +++ b/rep/ept/debtags/maint/pkgid.cc.gcov.html @@ -0,0 +1,133 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/pkgid.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - pkgid.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">15</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">86.7 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">13</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : /** @file +<span class="lineNum"> 4 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 5 </span> : * Quick map from package IDs to package names +<span class="lineNum"> 6 </span> : */ +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : /* +<span class="lineNum"> 9 </span> : * Copyright (C) 2003-2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 12 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 13 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 14 </span> : * (at your option) any later version. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 17 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 18 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 19 </span> : * GNU General Public License for more details. +<span class="lineNum"> 20 </span> : * +<span class="lineNum"> 21 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 22 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 23 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 24 </span> : */ +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include <ept/debtags/maint/pkgid.h> +<span class="lineNum"> 27 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : namespace ept { +<span class="lineNum"> 30 </span> : namespace debtags { +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span><span class="lineCov"> 10 : PkgId::PkgId() {}</span> +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span><span class="lineCov"> 1 : PkgId::PkgId(const char* buf, int size)</span> +<span class="lineNum"> 35 </span><span class="lineCov"> 1 : : MMap(buf, size) {}</span> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span><span class="lineNoCov"> 0 : PkgId::PkgId(const tagcoll::diskindex::MasterMMap& master, size_t idx)</span> +<span class="lineNum"> 38 </span><span class="lineNoCov"> 0 : : MMap(master, idx) {}</span> +<span class="lineNum"> 39 </span> : +<span class="lineNum"> 40 </span><span class="lineCov"> 63445 : int PkgId::byName(const std::string& name) const</span> +<span class="lineNum"> 41 </span> : { +<span class="lineNum"> 42 </span> : // Binary search the index to find the package ID +<span class="lineNum"> 43 </span> : int begin, end; +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span> : /* Binary search */ +<span class="lineNum"> 46 </span><span class="lineCov"> 63445 : begin = -1, end = size();</span> +<span class="lineNum"> 47 </span><span class="lineCov"> 1043664 : while (end - begin > 1)</span> +<span class="lineNum"> 48 </span> : { +<span class="lineNum"> 49 </span><span class="lineCov"> 916774 : int cur = (end + begin) / 2;</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 916774 : if (byID(cur) > name)</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 443057 : end = cur;</span> +<span class="lineNum"> 52 </span> : else +<span class="lineNum"> 53 </span><span class="lineCov"> 473717 : begin = cur;</span> +<span class="lineNum"> 54 </span> : } +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span><span class="lineCov"> 63445 : if (begin == -1 || byID(begin) != name)</span> +<span class="lineNum"> 57 </span> : //throw NotFoundException(string("looking for the ID of string ") + str); +<span class="lineNum"> 58 </span><span class="lineCov"> 2 : return -1;</span> +<span class="lineNum"> 59 </span> : else +<span class="lineNum"> 60 </span><span class="lineCov"> 63443 : return begin;</span> +<span class="lineNum"> 61 </span> : } +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : } +<span class="lineNum"> 64 </span> : } +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/pkgid.h.gcov.html b/rep/ept/debtags/maint/pkgid.h.gcov.html new file mode 100644 index 0000000..05beeb3 --- /dev/null +++ b/rep/ept/debtags/maint/pkgid.h.gcov.html @@ -0,0 +1,158 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/pkgid.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - pkgid.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">6</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">83.3 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">5</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : #ifndef EPT_DEBTAGS_PKGID_H +<span class="lineNum"> 3 </span> : #define EPT_DEBTAGS_PKGID_H +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /** @file +<span class="lineNum"> 6 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 7 </span> : * Quick map from package IDs to package names +<span class="lineNum"> 8 </span> : */ +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span> : /* +<span class="lineNum"> 11 </span> : * Copyright (C) 2003-2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 12 </span> : * +<span class="lineNum"> 13 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 14 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 15 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 16 </span> : * (at your option) any later version. +<span class="lineNum"> 17 </span> : * +<span class="lineNum"> 18 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 19 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 20 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 21 </span> : * GNU General Public License for more details. +<span class="lineNum"> 22 </span> : * +<span class="lineNum"> 23 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 24 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 25 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 26 </span> : */ +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include <tagcoll/diskindex/mmap.h> +<span class="lineNum"> 29 </span> : #include <string> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace debtags { +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : /** +<span class="lineNum"> 35 </span> : * Maps Packages to IDs and vice-versa. +<span class="lineNum"> 36 </span> : * +<span class="lineNum"> 37 </span> : * This is used in building the Debtags fast index, which works representing +<span class="lineNum"> 38 </span> : * tags and packages as int IDs +<span class="lineNum"> 39 </span> : */ +<span class="lineNum"> 40 </span> : class PkgId : public tagcoll::diskindex::MMap +<span class="lineNum"> 41 </span><span class="lineCov"> 11 : {</span> +<span class="lineNum"> 42 </span> : tagcoll::diskindex::MasterMMap mastermmap; +<span class="lineNum"> 43 </span> : time_t m_timestamp; +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span> : public: +<span class="lineNum"> 46 </span> : PkgId(); +<span class="lineNum"> 47 </span> : PkgId(const tagcoll::diskindex::MasterMMap& master, size_t idx); +<span class="lineNum"> 48 </span> : PkgId(const char* buf, int size); +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : /// Get the timestamp of when the index was last updated +<span class="lineNum"> 51 </span> : time_t timestamp() const { return m_timestamp; } +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : /// Get the number of packages in the index +<span class="lineNum"> 54 </span><span class="lineCov"> 63445 : size_t size() const { return m_buf ? *(int*)m_buf / sizeof(int) : 0; }</span> +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span> : /** +<span class="lineNum"> 57 </span> : * Get the ID of a package given its name. +<span class="lineNum"> 58 </span> : * +<span class="lineNum"> 59 </span> : * If not found, returns -1. +<span class="lineNum"> 60 </span> : */ +<span class="lineNum"> 61 </span> : int byName(const std::string& name) const; +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : /** +<span class="lineNum"> 64 </span> : * Get a package name given its ID. +<span class="lineNum"> 65 </span> : * +<span class="lineNum"> 66 </span> : * If not found, returns the empty string. +<span class="lineNum"> 67 </span> : */ +<span class="lineNum"> 68 </span><span class="lineCov"> 1128365 : std::string byID(int id) const</span> +<span class="lineNum"> 69 </span> : { +<span class="lineNum"> 70 </span><span class="lineCov"> 1128365 : if (id >= 0 || static_cast<unsigned>(id) < size())</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 1128365 : return std::string(m_buf + ((int*)m_buf)[id]);</span> +<span class="lineNum"> 72 </span><span class="lineNoCov"> 0 : return std::string();</span> +<span class="lineNum"> 73 </span> : } +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span> : /// Get the number of packages in the index +<span class="lineNum"> 76 </span> : int size(int id) const +<span class="lineNum"> 77 </span> : { +<span class="lineNum"> 78 </span> : if (id < 0 || (unsigned)id >= size()) +<span class="lineNum"> 79 </span> : return 0; +<span class="lineNum"> 80 </span> : if ((unsigned)id == size() - 1) +<span class="lineNum"> 81 </span> : return m_size - ((int*)m_buf)[id] - 1; +<span class="lineNum"> 82 </span> : else +<span class="lineNum"> 83 </span> : return ((int*)m_buf)[id + 1] - ((int*)m_buf)[id] - 1; +<span class="lineNum"> 84 </span> : } +<span class="lineNum"> 85 </span> : }; +<span class="lineNum"> 86 </span> : +<span class="lineNum"> 87 </span> : } +<span class="lineNum"> 88 </span> : } +<span class="lineNum"> 89 </span> : +<span class="lineNum"> 90 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 91 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/pkgid.test.h.gcov.html b/rep/ept/debtags/maint/pkgid.test.h.gcov.html new file mode 100644 index 0000000..11f3ea5 --- /dev/null +++ b/rep/ept/debtags/maint/pkgid.test.h.gcov.html @@ -0,0 +1,142 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/pkgid.test.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - pkgid.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">18</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">18</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /* +<span class="lineNum"> 3 </span> : * id->package mapping +<span class="lineNum"> 4 </span> : * +<span class="lineNum"> 5 </span> : * Copyright (C) 2006 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 6 </span> : * +<span class="lineNum"> 7 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 8 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 9 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 10 </span> : * (at your option) any later version. +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 13 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 14 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 15 </span> : * GNU General Public License for more details. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 18 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 19 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 20 </span> : */ +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : #include <ept/debtags/maint/pkgid.h> +<span class="lineNum"> 23 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 24 </span> : #include <ept/debtags/debtags.h> +<span class="lineNum"> 25 </span> : #include <set> +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <ept/test.h> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : using namespace std; +<span class="lineNum"> 30 </span> : using namespace ept; +<span class="lineNum"> 31 </span> : using namespace ept::debtags; +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : struct TestPkgid : DebtagsTestEnvironment +<span class="lineNum"> 34 </span><span class="lineCov"> 2 : {</span> +<span class="lineNum"> 35 </span> : Debtags debtags; +<span class="lineNum"> 36 </span> : PkgId& pkgid; +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span><span class="lineCov"> 2 : TestPkgid()</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 2 : : pkgid(debtags.pkgid())</span> +<span class="lineNum"> 40 </span> : { +<span class="lineNum"> 41 </span><span class="lineCov"> 2 : }</span> +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : // Check that we can go from name to ID and back +<span class="lineNum"> 44 </span><span class="lineCov"> 1 : Test _1()</span> +<span class="lineNum"> 45 </span> : { +<span class="lineNum"> 46 </span> : //int x = 0; +<span class="lineNum"> 47 </span><span class="lineCov"> 21146 : for (Debtags::const_iterator i = debtags.begin();</span> +<span class="lineNum"> 48 </span> : i != debtags.end(); ++i) +<span class="lineNum"> 49 </span> : { +<span class="lineNum"> 50 </span><span class="lineCov"> 21145 : int id = pkgid.byName(i->first);</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 21145 : std::string pkg = pkgid.byID(id);</span> +<span class="lineNum"> 52 </span><span class="lineCov"> 21145 : assert(i->first == pkg);</span> +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span> : /* std::cerr << x << ": " << i->id() << ": " +<span class="lineNum"> 55 </span> : << i->name() << ", " << pkgidx().name( i->id() ) << +<span class="lineNum"> 56 </span> : std::endl; */ +<span class="lineNum"> 57 </span> : //++ x; +<span class="lineNum"> 58 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 59 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 60 </span> : +<span class="lineNum"> 61 </span> : // Check that IDs are distinct +<span class="lineNum"> 62 </span><span class="lineCov"> 1 : Test _2()</span> +<span class="lineNum"> 63 </span> : { +<span class="lineNum"> 64 </span> : using namespace std; +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : size_t count = 0;</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 1 : set<int> ids;</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 21146 : for (Debtags::const_iterator i = debtags.begin(); i != debtags.end(); ++i, ++count)</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 21146 : ids.insert(pkgid.byName(i->first));</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 1 : assert_eq(ids.size(), count);</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 72 </span> : +<span class="lineNum"> 73 </span> : }; +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/serializer.h.gcov.html b/rep/ept/debtags/maint/serializer.h.gcov.html new file mode 100644 index 0000000..2945ccd --- /dev/null +++ b/rep/ept/debtags/maint/serializer.h.gcov.html @@ -0,0 +1,1016 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/serializer.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - serializer.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">89</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">97.8 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">87</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /** +<span class="lineNum"> 3 </span> : * @file cache/component/debtags/serializer.h +<span class="lineNum"> 4 </span> : * @author Enrico Zini (enrico) <enrico@enricozini.org> +<span class="lineNum"> 5 </span> : */ +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : #ifndef EPT_DEBTAGS_SERIALIZER_H +<span class="lineNum"> 8 </span> : #define EPT_DEBTAGS_SERIALIZER_H +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span> : #include <ept/debtags/vocabulary.h> +<span class="lineNum"> 11 </span> : #include <ept/debtags/maint/pkgid.h> +<span class="lineNum"> 12 </span> : #include <tagcoll/patch.h> +<span class="lineNum"> 13 </span> : #include <wibble/mixin.h> +<span class="lineNum"> 14 </span> : #include <string> +<span class="lineNum"> 15 </span> : +<span class="lineNum"> 16 </span> : namespace ept { +<span class="lineNum"> 17 </span> : namespace debtags { +<span class="lineNum"> 18 </span> : +<span class="lineNum"> 19 </span> : template<typename OUT> +<span class="lineNum"> 20 </span> : class IntToPkg : public wibble::mixin::OutputIterator< IntToPkg<OUT> > +<span class="lineNum"> 21 </span> : { +<span class="lineNum"> 22 </span> : PkgId& pkgid; +<span class="lineNum"> 23 </span> : Vocabulary& voc; +<span class="lineNum"> 24 </span> : OUT out; +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : public: +<span class="lineNum"> 27 </span><span class="lineCov"> 5 : IntToPkg(PkgId& pkgid, Vocabulary& voc, const OUT& out)</span> +<span class="lineNum"> 28 </span><span class="lineCov"> 5 : : pkgid(pkgid), voc(voc), out(out) {}</span> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : template<typename ITEMS, typename TAGS> +<span class="lineNum"> 31 </span><span class="lineCov"> 42291 : IntToPkg<OUT>& operator=(const std::pair<ITEMS, TAGS>& data)</span> +<span class="lineNum"> 32 </span> : { +<span class="lineNum"> 33 </span><span class="lineCov"> 42291 : std::set<std::string> ritems;</span> +<span class="lineNum"> 34 </span><span class="lineCov"> 42291 : std::set<Tag> rtags;</span> +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 84582 : for (typename ITEMS::const_iterator i = data.first.begin();</span> +<span class="lineNum"> 37 </span> : i != data.first.end(); ++i) +<span class="lineNum"> 38 </span> : { +<span class="lineNum"> 39 </span><span class="lineCov"> 42291 : std::string pkg = pkgid.byID(*i);</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 42291 : if (!pkg.empty())</span> +<span class="lineNum"> 41 </span><span class="lineCov"> 42291 : ritems.insert(pkg);</span> +<span class="lineNum"> 42 </span> : } +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span><span class="lineCov"> 253489 : for (typename TAGS::const_iterator i = data.second.begin();</span> +<span class="lineNum"> 45 </span> : i != data.second.end(); ++i) +<span class="lineNum"> 46 </span> : { +<span class="lineNum"> 47 </span><span class="lineCov"> 211198 : Tag t = voc.tagByID(*i);</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 211198 : if (t.valid())</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 211198 : rtags.insert(t);</span> +<span class="lineNum"> 50 </span> : } +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span><span class="lineCov"> 42291 : if (!ritems.empty() && !rtags.empty())</span> +<span class="lineNum"> 53 </span> : { +<span class="lineNum"> 54 </span><span class="lineCov"> 42267 : *out = make_pair(ritems, rtags);</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 42267 : ++out;</span> +<span class="lineNum"> 56 </span> : } +<span class="lineNum"> 57 </span><span class="lineCov"> 42291 : return *this;</span> +<span class="lineNum"> 58 </span> : } +<span class="lineNum"> 59 </span> : }; +<span class="lineNum"> 60 </span> : +<span class="lineNum"> 61 </span> : template<typename OUT> +<span class="lineNum"> 62 </span><span class="lineCov"> 5 : IntToPkg<OUT> intToPkg(PkgId& pkgid, Vocabulary& voc, const OUT& out)</span> +<span class="lineNum"> 63 </span> : { +<span class="lineNum"> 64 </span><span class="lineCov"> 5 : return IntToPkg<OUT>(pkgid, voc, out);</span> +<span class="lineNum"> 65 </span> : } +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span> : template<typename OUT> +<span class="lineNum"> 68 </span> : class StringToInt : public wibble::mixin::OutputIterator< StringToInt<OUT> > +<span class="lineNum"> 69 </span> : { +<span class="lineNum"> 70 </span> : PkgId& pkgid; +<span class="lineNum"> 71 </span> : Vocabulary& voc; +<span class="lineNum"> 72 </span> : OUT out; +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span> : public: +<span class="lineNum"> 75 </span><span class="lineCov"> 2 : StringToInt(PkgId& pkgid, Vocabulary& voc, const OUT& out)</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 2 : : pkgid(pkgid), voc(voc), out(out) {}</span> +<span class="lineNum"> 77 </span> : +<span class="lineNum"> 78 </span> : template<typename ITEMS, typename TAGS> +<span class="lineNum"> 79 </span><span class="lineCov"> 21146 : StringToInt<OUT>& operator=(const std::pair<ITEMS, TAGS>& data)</span> +<span class="lineNum"> 80 </span> : { +<span class="lineNum"> 81 </span><span class="lineCov"> 21146 : std::set<int> ritems;</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 21146 : std::set<int> rtags;</span> +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span><span class="lineCov"> 42292 : for (typename ITEMS::const_iterator i = data.first.begin();</span> +<span class="lineNum"> 85 </span> : i != data.first.end(); ++i) +<span class="lineNum"> 86 </span> : { +<span class="lineNum"> 87 </span><span class="lineCov"> 21146 : int id = pkgid.byName(*i);</span> +<span class="lineNum"> 88 </span><span class="lineCov"> 21146 : if (id != -1)</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 21146 : ritems.insert(id);</span> +<span class="lineNum"> 90 </span> : } +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span><span class="lineCov"> 126874 : for (typename TAGS::const_iterator i = data.second.begin();</span> +<span class="lineNum"> 93 </span> : i != data.second.end(); ++i) +<span class="lineNum"> 94 </span> : { +<span class="lineNum"> 95 </span><span class="lineCov"> 105728 : Tag t = voc.tagByName(*i);</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 105728 : if (t.valid())</span> +<span class="lineNum"> 97 </span><span class="lineCov"> 105600 : rtags.insert(t.id());</span> +<span class="lineNum"> 98 </span> : } +<span class="lineNum"> 99 </span> : +<span class="lineNum"> 100 </span><span class="lineCov"> 21146 : if (!ritems.empty() && !rtags.empty())</span> +<span class="lineNum"> 101 </span> : { +<span class="lineNum"> 102 </span><span class="lineCov"> 21134 : *out = make_pair(ritems, rtags);</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 21134 : ++out;</span> +<span class="lineNum"> 104 </span> : } +<span class="lineNum"> 105 </span><span class="lineCov"> 21146 : return *this;</span> +<span class="lineNum"> 106 </span> : } +<span class="lineNum"> 107 </span> : +<span class="lineNum"> 108 </span> : }; +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span> : template<typename OUT> +<span class="lineNum"> 111 </span><span class="lineCov"> 2 : StringToInt<OUT> stringToInt(PkgId& pkgid, Vocabulary& voc, const OUT& out)</span> +<span class="lineNum"> 112 </span> : { +<span class="lineNum"> 113 </span><span class="lineCov"> 2 : return StringToInt<OUT>(pkgid, voc, out);</span> +<span class="lineNum"> 114 </span> : } +<span class="lineNum"> 115 </span> : +<span class="lineNum"> 116 </span> : template<typename OUT> +<span class="lineNum"> 117 </span> : class StringToPkg : public wibble::mixin::OutputIterator< StringToPkg<OUT> > +<span class="lineNum"> 118 </span> : { +<span class="lineNum"> 119 </span> : PkgId& pkgid; +<span class="lineNum"> 120 </span> : Vocabulary& voc; +<span class="lineNum"> 121 </span> : OUT out; +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span> : public: +<span class="lineNum"> 124 </span> : StringToPkg(PkgId& pkgid, Vocabulary& voc, const OUT& out) +<span class="lineNum"> 125 </span> : : pkgid(pkgid), voc(voc), out(out) {} +<span class="lineNum"> 126 </span> : +<span class="lineNum"> 127 </span> : template<typename ITEMS, typename TAGS> +<span class="lineNum"> 128 </span> : StringToPkg<OUT>& operator=(const std::pair<ITEMS, TAGS>& data) +<span class="lineNum"> 129 </span> : { +<span class="lineNum"> 130 </span> : std::set<std::string> ritems; +<span class="lineNum"> 131 </span> : std::set<Tag> rtags; +<span class="lineNum"> 132 </span> : +<span class="lineNum"> 133 </span> : for (typename ITEMS::const_iterator i = data.first.begin(); +<span class="lineNum"> 134 </span> : i != data.first.end(); ++i) +<span class="lineNum"> 135 </span> : { +<span class="lineNum"> 136 </span> : // Ensure that the package exists in the pkgid database +<span class="lineNum"> 137 </span> : if (pkgid.byName(*i) == -1) +<span class="lineNum"> 138 </span> : continue; +<span class="lineNum"> 139 </span> : ritems.insert(*i); +<span class="lineNum"> 140 </span> : } +<span class="lineNum"> 141 </span> : +<span class="lineNum"> 142 </span> : for (typename TAGS::const_iterator i = data.second.begin(); +<span class="lineNum"> 143 </span> : i != data.second.end(); ++i) +<span class="lineNum"> 144 </span> : { +<span class="lineNum"> 145 </span> : Tag t = voc.tagByName(*i); +<span class="lineNum"> 146 </span> : if (t.valid()) +<span class="lineNum"> 147 </span> : rtags.insert(t); +<span class="lineNum"> 148 </span> : } +<span class="lineNum"> 149 </span> : +<span class="lineNum"> 150 </span> : if (!ritems.empty() && !rtags.empty()) +<span class="lineNum"> 151 </span> : { +<span class="lineNum"> 152 </span> : *out = make_pair(ritems, rtags); +<span class="lineNum"> 153 </span> : ++out; +<span class="lineNum"> 154 </span> : } +<span class="lineNum"> 155 </span> : return *this; +<span class="lineNum"> 156 </span> : } +<span class="lineNum"> 157 </span> : +<span class="lineNum"> 158 </span> : }; +<span class="lineNum"> 159 </span> : +<span class="lineNum"> 160 </span> : template<typename OUT> +<span class="lineNum"> 161 </span> : StringToPkg<OUT> stringToPkg(PkgId& pkgid, Vocabulary& voc, const OUT& out) +<span class="lineNum"> 162 </span> : { +<span class="lineNum"> 163 </span> : return StringToPkg<OUT>(pkgid, voc, out); +<span class="lineNum"> 164 </span> : } +<span class="lineNum"> 165 </span> : +<span class="lineNum"> 166 </span> : template<typename OUT> +<span class="lineNum"> 167 </span> : class PkgToString : public wibble::mixin::OutputIterator< PkgToString<OUT> > +<span class="lineNum"> 168 </span> : { +<span class="lineNum"> 169 </span> : OUT out; +<span class="lineNum"> 170 </span> : public: +<span class="lineNum"> 171 </span><span class="lineCov"> 1 : PkgToString(const OUT& out) : out(out) {}</span> +<span class="lineNum"> 172 </span> : +<span class="lineNum"> 173 </span> : template<typename ITEMS, typename TAGS> +<span class="lineNum"> 174 </span><span class="lineCov"> 1 : PkgToString<OUT>& operator=(const std::pair<ITEMS, TAGS>& data)</span> +<span class="lineNum"> 175 </span> : { +<span class="lineNum"> 176 </span><span class="lineCov"> 1 : std::set<std::string> stags;</span> +<span class="lineNum"> 177 </span><span class="lineCov"> 3 : for (typename TAGS::const_iterator i = data.second.begin();</span> +<span class="lineNum"> 178 </span> : i != data.second.end(); ++i) +<span class="lineNum"> 179 </span><span class="lineCov"> 2 : if (i->valid())</span> +<span class="lineNum"> 180 </span><span class="lineCov"> 2 : stags.insert(i->fullname());</span> +<span class="lineNum"> 181 </span><span class="lineCov"> 1 : *out = make_pair(data.first, stags);</span> +<span class="lineNum"> 182 </span><span class="lineCov"> 1 : ++out;</span> +<span class="lineNum"> 183 </span><span class="lineCov"> 1 : return *this;</span> +<span class="lineNum"> 184 </span> : } +<span class="lineNum"> 185 </span> : }; +<span class="lineNum"> 186 </span> : +<span class="lineNum"> 187 </span> : template<typename OUT> +<span class="lineNum"> 188 </span><span class="lineCov"> 1 : PkgToString<OUT> pkgToString(const OUT& out)</span> +<span class="lineNum"> 189 </span> : { +<span class="lineNum"> 190 </span><span class="lineCov"> 1 : return PkgToString<OUT>(out);</span> +<span class="lineNum"> 191 </span> : } +<span class="lineNum"> 192 </span> : +<span class="lineNum"> 193 </span> : template<typename OUT> +<span class="lineNum"> 194 </span> : class PatchStringToInt : public wibble::mixin::OutputIterator< PatchStringToInt<OUT> > +<span class="lineNum"> 195 </span> : { +<span class="lineNum"> 196 </span> : PkgId& pkgid; +<span class="lineNum"> 197 </span> : Vocabulary& voc; +<span class="lineNum"> 198 </span> : OUT out; +<span class="lineNum"> 199 </span> : +<span class="lineNum"> 200 </span> : public: +<span class="lineNum"> 201 </span><span class="lineCov"> 1 : PatchStringToInt(PkgId& pkgid, Vocabulary& voc, const OUT& out)</span> +<span class="lineNum"> 202 </span><span class="lineCov"> 1 : : pkgid(pkgid), voc(voc), out(out) {}</span> +<span class="lineNum"> 203 </span> : +<span class="lineNum"> 204 </span><span class="lineCov"> 1 : PatchStringToInt<OUT>& operator=(const tagcoll::Patch<std::string, std::string>& patch)</span> +<span class="lineNum"> 205 </span> : { +<span class="lineNum"> 206 </span><span class="lineCov"> 1 : int id = pkgid.byName(patch.item);</span> +<span class="lineNum"> 207 </span><span class="lineCov"> 1 : if (id == -1)</span> +<span class="lineNum"> 208 </span><span class="lineNoCov"> 0 : return *this;</span> +<span class="lineNum"> 209 </span> : +<span class="lineNum"> 210 </span><span class="lineCov"> 1 : tagcoll::Patch<int, int> res(id);</span> +<span class="lineNum"> 211 </span><span class="lineCov"> 2 : for (std::set<std::string>::const_iterator i = patch.added.begin();</span> +<span class="lineNum"> 212 </span> : i != patch.added.end(); ++i) +<span class="lineNum"> 213 </span> : { +<span class="lineNum"> 214 </span><span class="lineCov"> 1 : Tag tag = voc.tagByName(*i);</span> +<span class="lineNum"> 215 </span><span class="lineCov"> 1 : if (tag.valid())</span> +<span class="lineNum"> 216 </span><span class="lineCov"> 1 : res.add(tag.id());</span> +<span class="lineNum"> 217 </span> : } +<span class="lineNum"> 218 </span><span class="lineCov"> 2 : for (std::set<std::string>::const_iterator i = patch.removed.begin();</span> +<span class="lineNum"> 219 </span> : i != patch.removed.end(); ++i) +<span class="lineNum"> 220 </span> : { +<span class="lineNum"> 221 </span><span class="lineCov"> 1 : Tag tag = voc.tagByName(*i);</span> +<span class="lineNum"> 222 </span><span class="lineCov"> 1 : if (tag.valid())</span> +<span class="lineNum"> 223 </span><span class="lineCov"> 1 : res.remove(tag.id());</span> +<span class="lineNum"> 224 </span> : } +<span class="lineNum"> 225 </span><span class="lineCov"> 1 : *out = res;</span> +<span class="lineNum"> 226 </span><span class="lineCov"> 1 : ++out;</span> +<span class="lineNum"> 227 </span><span class="lineCov"> 1 : return *this;</span> +<span class="lineNum"> 228 </span> : } +<span class="lineNum"> 229 </span> : }; +<span class="lineNum"> 230 </span> : +<span class="lineNum"> 231 </span> : template<typename OUT> +<span class="lineNum"> 232 </span><span class="lineCov"> 1 : PatchStringToInt<OUT> patchStringToInt(PkgId& pkgid, Vocabulary& voc, const OUT& out)</span> +<span class="lineNum"> 233 </span> : { +<span class="lineNum"> 234 </span><span class="lineCov"> 1 : return PatchStringToInt<OUT>(pkgid, voc, out);</span> +<span class="lineNum"> 235 </span> : } +<span class="lineNum"> 236 </span> : +<span class="lineNum"> 237 </span> : template<typename OUT> +<span class="lineNum"> 238 </span> : class PatchIntToString : public wibble::mixin::OutputIterator< PatchIntToString<OUT> > +<span class="lineNum"> 239 </span> : { +<span class="lineNum"> 240 </span> : PkgId& pkgid; +<span class="lineNum"> 241 </span> : Vocabulary& voc; +<span class="lineNum"> 242 </span> : OUT out; +<span class="lineNum"> 243 </span> : +<span class="lineNum"> 244 </span> : public: +<span class="lineNum"> 245 </span><span class="lineCov"> 2 : PatchIntToString(PkgId& pkgid, Vocabulary& voc, const OUT& out)</span> +<span class="lineNum"> 246 </span><span class="lineCov"> 2 : : pkgid(pkgid), voc(voc), out(out) {}</span> +<span class="lineNum"> 247 </span> : +<span class="lineNum"> 248 </span><span class="lineCov"> 2 : PatchIntToString<OUT>& operator=(const tagcoll::Patch<int, int>& patch)</span> +<span class="lineNum"> 249 </span> : { +<span class="lineNum"> 250 </span><span class="lineCov"> 2 : std::string name = pkgid.byID(patch.item);</span> +<span class="lineNum"> 251 </span><span class="lineCov"> 2 : if (name.empty())</span> +<span class="lineNum"> 252 </span><span class="lineNoCov"> 0 : return *this;</span> +<span class="lineNum"> 253 </span> : +<span class="lineNum"> 254 </span><span class="lineCov"> 2 : tagcoll::Patch<std::string, std::string> res(name);</span> +<span class="lineNum"> 255 </span><span class="lineCov"> 4 : for (std::set<int>::const_iterator i = patch.added.begin();</span> +<span class="lineNum"> 256 </span> : i != patch.added.end(); ++i) +<span class="lineNum"> 257 </span> : { +<span class="lineNum"> 258 </span><span class="lineCov"> 2 : Tag tag = voc.tagByID(*i);</span> +<span class="lineNum"> 259 </span><span class="lineCov"> 2 : if (tag.valid())</span> +<span class="lineNum"> 260 </span><span class="lineCov"> 2 : res.add(tag.fullname());</span> +<span class="lineNum"> 261 </span> : } +<span class="lineNum"> 262 </span><span class="lineCov"> 3 : for (std::set<int>::const_iterator i = patch.removed.begin();</span> +<span class="lineNum"> 263 </span> : i != patch.removed.end(); ++i) +<span class="lineNum"> 264 </span> : { +<span class="lineNum"> 265 </span><span class="lineCov"> 1 : Tag tag = voc.tagByID(*i);</span> +<span class="lineNum"> 266 </span><span class="lineCov"> 1 : if (tag.valid())</span> +<span class="lineNum"> 267 </span><span class="lineCov"> 1 : res.remove(tag.fullname());</span> +<span class="lineNum"> 268 </span> : } +<span class="lineNum"> 269 </span><span class="lineCov"> 2 : *out = res;</span> +<span class="lineNum"> 270 </span><span class="lineCov"> 2 : ++out;</span> +<span class="lineNum"> 271 </span><span class="lineCov"> 2 : return *this;</span> +<span class="lineNum"> 272 </span> : } +<span class="lineNum"> 273 </span> : }; +<span class="lineNum"> 274 </span> : +<span class="lineNum"> 275 </span> : template<typename OUT> +<span class="lineNum"> 276 </span><span class="lineCov"> 2 : PatchIntToString<OUT> patchIntToString(PkgId& pkgid, Vocabulary& voc, const OUT& out)</span> +<span class="lineNum"> 277 </span> : { +<span class="lineNum"> 278 </span><span class="lineCov"> 2 : return PatchIntToString<OUT>(pkgid, voc, out);</span> +<span class="lineNum"> 279 </span> : } +<span class="lineNum"> 280 </span> : +<span class="lineNum"> 281 </span> : #if 0 +<span class="lineNum"> 282 </span> : GOOD STUFF +<span class="lineNum"> 283 </span> : +<span class="lineNum"> 284 </span> : template<typename OUT> +<span class="lineNum"> 285 </span> : class ToInt : public wibble::mixin::OutputIterator< ToInt<OUT> > +<span class="lineNum"> 286 </span> : { +<span class="lineNum"> 287 </span> : OUT out; +<span class="lineNum"> 288 </span> : public: +<span class="lineNum"> 289 </span> : ToInt(const OUT& out) : out(out) {} +<span class="lineNum"> 290 </span> : +<span class="lineNum"> 291 </span> : template<typename ITEMS, typename TAGS> +<span class="lineNum"> 292 </span> : ToInt<OUT>& operator=(const std::pair<ITEMS, TAGS>& data) +<span class="lineNum"> 293 </span> : { +<span class="lineNum"> 294 </span> : std::set<int> iitems; +<span class="lineNum"> 295 </span> : std::set<int> itags; +<span class="lineNum"> 296 </span> : for (typename ITEMS::const_iterator i = data.first.begin(); +<span class="lineNum"> 297 </span> : i != data.first.end(); ++i) +<span class="lineNum"> 298 </span> : if (i->valid()) +<span class="lineNum"> 299 </span> : iitems.insert(i->ondiskId()); +<span class="lineNum"> 300 </span> : for (typename TAGS::const_iterator i = data.second.begin(); +<span class="lineNum"> 301 </span> : i != data.second.end(); ++i) +<span class="lineNum"> 302 </span> : if (i->valid()) +<span class="lineNum"> 303 </span> : itags.insert(i->id()); +<span class="lineNum"> 304 </span> : *out = make_pair(iitems, itags); +<span class="lineNum"> 305 </span> : ++out; +<span class="lineNum"> 306 </span> : return *this; +<span class="lineNum"> 307 </span> : } +<span class="lineNum"> 308 </span> : }; +<span class="lineNum"> 309 </span> : +<span class="lineNum"> 310 </span> : template<typename OUT> +<span class="lineNum"> 311 </span> : ToInt<OUT> toInt(const OUT& out) +<span class="lineNum"> 312 </span> : { +<span class="lineNum"> 313 </span> : return ToInt<OUT>(out); +<span class="lineNum"> 314 </span> : } +<span class="lineNum"> 315 </span> : +<span class="lineNum"> 316 </span> : template<typename ITEMCONV, typename TAGCONV, typename OUT> +<span class="lineNum"> 317 </span> : class Converter : public wibble::mixin::OutputIterator< Converter<ITEMCONV, TAGCONV, OUT> > +<span class="lineNum"> 318 </span> : { +<span class="lineNum"> 319 </span> : ITEMCONV itemconv; +<span class="lineNum"> 320 </span> : TAGCONV tagconv; +<span class="lineNum"> 321 </span> : OUT out; +<span class="lineNum"> 322 </span> : +<span class="lineNum"> 323 </span> : public: +<span class="lineNum"> 324 </span> : Converter(const ITEMCONV& itemconv, const TAGCONV& tagconv, const OUT& out) +<span class="lineNum"> 325 </span> : : itemconv(itemconv), tagconv(tagconv), out(out) {} +<span class="lineNum"> 326 </span> : +<span class="lineNum"> 327 </span> : template<typename ITEMS, typename TAGS> +<span class="lineNum"> 328 </span> : Converter<ITEMCONV, TAGCONV, OUT>& operator=(const std::pair<ITEMS, TAGS>& data) +<span class="lineNum"> 329 </span> : { +<span class="lineNum"> 330 </span> : *out = make_pair(itemconv(data.first), tagconv(data.second)); +<span class="lineNum"> 331 </span> : ++out; +<span class="lineNum"> 332 </span> : return *this; +<span class="lineNum"> 333 </span> : } +<span class="lineNum"> 334 </span> : }; +<span class="lineNum"> 335 </span> : +<span class="lineNum"> 336 </span> : template<typename ITEMCONV, typename TAGCONV, typename OUT> +<span class="lineNum"> 337 </span> : Converter<ITEMCONV, TAGCONV, OUT> converter(const ITEMCONV& itemconv, const TAGCONV& tagconv, const OUT& out) +<span class="lineNum"> 338 </span> : { +<span class="lineNum"> 339 </span> : return Converter<ITEMCONV, TAGCONV, OUT>(itemconv, tagconv, out); +<span class="lineNum"> 340 </span> : } +<span class="lineNum"> 341 </span> : +<span class="lineNum"> 342 </span> : +<span class="lineNum"> 343 </span> : template<typename OUT> +<span class="lineNum"> 344 </span> : class PatchToString : public wibble::mixin::OutputIterator< PatchToString<OUT> > +<span class="lineNum"> 345 </span> : { +<span class="lineNum"> 346 </span> : OUT out; +<span class="lineNum"> 347 </span> : +<span class="lineNum"> 348 </span> : public: +<span class="lineNum"> 349 </span> : PatchToString(const OUT& out) : out(out) {} +<span class="lineNum"> 350 </span> : +<span class="lineNum"> 351 </span> : template<typename PKG, typename TAG> +<span class="lineNum"> 352 </span> : PatchToString<OUT>& operator=(const tagcoll::Patch<PKG, TAG>& patch) +<span class="lineNum"> 353 </span> : { +<span class="lineNum"> 354 </span> : if (!patch.item.valid()) +<span class="lineNum"> 355 </span> : return *this; +<span class="lineNum"> 356 </span> : +<span class="lineNum"> 357 </span> : tagcoll::Patch<std::string, std::string> res(patch.item.name()); +<span class="lineNum"> 358 </span> : for (typename std::set<TAG>::const_iterator i = patch.added.begin(); +<span class="lineNum"> 359 </span> : i != patch.added.end(); ++i) +<span class="lineNum"> 360 </span> : if (i->valid()) +<span class="lineNum"> 361 </span> : res.add(i->fullname()); +<span class="lineNum"> 362 </span> : for (typename std::set<TAG>::const_iterator i = patch.removed.begin(); +<span class="lineNum"> 363 </span> : i != patch.removed.end(); ++i) +<span class="lineNum"> 364 </span> : if (i->valid()) +<span class="lineNum"> 365 </span> : res.remove(i->fullname()); +<span class="lineNum"> 366 </span> : *out = res; +<span class="lineNum"> 367 </span> : ++out; +<span class="lineNum"> 368 </span> : return *this; +<span class="lineNum"> 369 </span> : } +<span class="lineNum"> 370 </span> : }; +<span class="lineNum"> 371 </span> : +<span class="lineNum"> 372 </span> : template<typename OUT> +<span class="lineNum"> 373 </span> : PatchToString<OUT> patchToString(const OUT& out) +<span class="lineNum"> 374 </span> : { +<span class="lineNum"> 375 </span> : return PatchToString<OUT>(out); +<span class="lineNum"> 376 </span> : } +<span class="lineNum"> 377 </span> : +<span class="lineNum"> 378 </span> : #endif +<span class="lineNum"> 379 </span> : +<span class="lineNum"> 380 </span> : } +<span class="lineNum"> 381 </span> : } +<span class="lineNum"> 382 </span> : +<span class="lineNum"> 383 </span> : #if 0 +<span class="lineNum"> 384 </span> : +<span class="lineNum"> 385 </span> : namespace tagcoll { +<span class="lineNum"> 386 </span> : namespace coll { +<span class="lineNum"> 387 </span> : +<span class="lineNum"> 388 </span> : template<> +<span class="lineNum"> 389 </span> : struct coll_traits< ept::cache::debtags::DebtagsIndex > +<span class="lineNum"> 390 </span> : { +<span class="lineNum"> 391 </span> : typedef ept::cache::Package<> item_type; +<span class="lineNum"> 392 </span> : typedef ept::cache::debtags::Tag tag_type; +<span class="lineNum"> 393 </span> : typedef std::set< ept::cache::Package<> > itemset_type; +<span class="lineNum"> 394 </span> : typedef std::set<ept::cache::debtags::Tag> tagset_type; +<span class="lineNum"> 395 </span> : }; +<span class="lineNum"> 396 </span> : +<span class="lineNum"> 397 </span> : } +<span class="lineNum"> 398 </span> : } +<span class="lineNum"> 399 </span> : +<span class="lineNum"> 400 </span> : namespace ept { +<span class="lineNum"> 401 </span> : namespace cache { +<span class="lineNum"> 402 </span> : namespace debtags { +<span class="lineNum"> 403 </span> : +<span class="lineNum"> 404 </span> : #if 0 +<span class="lineNum"> 405 </span> : /** +<span class="lineNum"> 406 </span> : * Convert Facets to ints +<span class="lineNum"> 407 </span> : */ +<span class="lineNum"> 408 </span> : class FacetIntConverter : public Implementation<FacetIntConverter>, +<span class="lineNum"> 409 </span> : public Tagcoll::Converter<aptFront::cache::entity::Facet, int>, +<span class="lineNum"> 410 </span> : public Tagcoll::Converter<int, aptFront::cache::entity::Facet> +<span class="lineNum"> 411 </span> : { +<span class="lineNum"> 412 </span> : typedef aptFront::cache::entity::Facet Facet; +<span class="lineNum"> 413 </span> : typedef Tagcoll::OpSet<aptFront::cache::entity::Facet> FacetSet; +<span class="lineNum"> 414 </span> : typedef Tagcoll::OpSet<int> IntSet; +<span class="lineNum"> 415 </span> : public: +<span class="lineNum"> 416 </span> : virtual int operator()(const aptFront::cache::entity::Facet& item) const; +<span class="lineNum"> 417 </span> : virtual aptFront::cache::entity::Facet operator()(const int& item) const; +<span class="lineNum"> 418 </span> : +<span class="lineNum"> 419 </span> : virtual IntSet operator()(const FacetSet& item) const +<span class="lineNum"> 420 </span> : { return Tagcoll::Converter<Facet, int>::operator()(item); } +<span class="lineNum"> 421 </span> : virtual FacetSet operator()(const IntSet& item) const +<span class="lineNum"> 422 </span> : { return Tagcoll::Converter<int, Facet>::operator()(item); } +<span class="lineNum"> 423 </span> : +<span class="lineNum"> 424 </span> : static std::string componentName(); +<span class="lineNum"> 425 </span> : }; +<span class="lineNum"> 426 </span> : +<span class="lineNum"> 427 </span> : /** +<span class="lineNum"> 428 </span> : * Convert Facets to strings +<span class="lineNum"> 429 </span> : */ +<span class="lineNum"> 430 </span> : class FacetStringConverter : public Implementation<FacetStringConverter>, +<span class="lineNum"> 431 </span> : public Tagcoll::Converter<aptFront::cache::entity::Facet, std::string>, +<span class="lineNum"> 432 </span> : public Tagcoll::Converter<std::string, aptFront::cache::entity::Facet> +<span class="lineNum"> 433 </span> : { +<span class="lineNum"> 434 </span> : typedef aptFront::cache::entity::Facet Facet; +<span class="lineNum"> 435 </span> : typedef Tagcoll::OpSet<aptFront::cache::entity::Facet> FacetSet; +<span class="lineNum"> 436 </span> : typedef Tagcoll::OpSet<std::string> StringSet; +<span class="lineNum"> 437 </span> : public: +<span class="lineNum"> 438 </span> : virtual std::string operator()(const aptFront::cache::entity::Facet& item) const; +<span class="lineNum"> 439 </span> : virtual aptFront::cache::entity::Facet operator()(const std::string& item) const; +<span class="lineNum"> 440 </span> : +<span class="lineNum"> 441 </span> : virtual StringSet operator()(const FacetSet& item) const +<span class="lineNum"> 442 </span> : { return Tagcoll::Converter<Facet, std::string>::operator()(item); } +<span class="lineNum"> 443 </span> : virtual FacetSet operator()(const StringSet& item) const +<span class="lineNum"> 444 </span> : { return Tagcoll::Converter<std::string, Facet>::operator()(item); } +<span class="lineNum"> 445 </span> : +<span class="lineNum"> 446 </span> : static std::string componentName(); +<span class="lineNum"> 447 </span> : }; +<span class="lineNum"> 448 </span> : +<span class="lineNum"> 449 </span> : /** +<span class="lineNum"> 450 </span> : * Convert Vocabulary to ints +<span class="lineNum"> 451 </span> : */ +<span class="lineNum"> 452 </span> : class TagIntConverter : public Implementation<TagIntConverter>, +<span class="lineNum"> 453 </span> : public Tagcoll::Converter<aptFront::cache::entity::Tag, int>, +<span class="lineNum"> 454 </span> : public Tagcoll::Converter<int, aptFront::cache::entity::Tag> +<span class="lineNum"> 455 </span> : { +<span class="lineNum"> 456 </span> : typedef aptFront::cache::entity::Tag Tag; +<span class="lineNum"> 457 </span> : typedef Tagcoll::OpSet<aptFront::cache::entity::Tag> TagSet; +<span class="lineNum"> 458 </span> : typedef Tagcoll::OpSet<int> IntSet; +<span class="lineNum"> 459 </span> : public: +<span class="lineNum"> 460 </span> : virtual int operator()(const aptFront::cache::entity::Tag& item) const; +<span class="lineNum"> 461 </span> : virtual aptFront::cache::entity::Tag operator()(const int& item) const; +<span class="lineNum"> 462 </span> : +<span class="lineNum"> 463 </span> : virtual IntSet operator()(const TagSet& item) const +<span class="lineNum"> 464 </span> : { return Tagcoll::Converter<Tag, int>::operator()(item); } +<span class="lineNum"> 465 </span> : virtual TagSet operator()(const IntSet& item) const +<span class="lineNum"> 466 </span> : { return Tagcoll::Converter<int, Tag>::operator()(item); } +<span class="lineNum"> 467 </span> : +<span class="lineNum"> 468 </span> : static std::string componentName(); +<span class="lineNum"> 469 </span> : }; +<span class="lineNum"> 470 </span> : +<span class="lineNum"> 471 </span> : /** +<span class="lineNum"> 472 </span> : * Convert Vocabulary to strings +<span class="lineNum"> 473 </span> : */ +<span class="lineNum"> 474 </span> : class TagStringConverter : public Implementation<TagStringConverter>, +<span class="lineNum"> 475 </span> : public Tagcoll::Converter<aptFront::cache::entity::Tag, std::string>, +<span class="lineNum"> 476 </span> : public Tagcoll::Converter<std::string, aptFront::cache::entity::Tag> +<span class="lineNum"> 477 </span> : { +<span class="lineNum"> 478 </span> : typedef aptFront::cache::entity::Tag Tag; +<span class="lineNum"> 479 </span> : typedef Tagcoll::OpSet<aptFront::cache::entity::Tag> TagSet; +<span class="lineNum"> 480 </span> : typedef Tagcoll::OpSet<std::string> StringSet; +<span class="lineNum"> 481 </span> : public: +<span class="lineNum"> 482 </span> : virtual std::string operator()(const Tag& item) const; +<span class="lineNum"> 483 </span> : virtual Tag operator()(const std::string& item) const; +<span class="lineNum"> 484 </span> : +<span class="lineNum"> 485 </span> : virtual StringSet operator()(const TagSet& item) const +<span class="lineNum"> 486 </span> : { return Tagcoll::Converter<Tag, std::string>::operator()(item); } +<span class="lineNum"> 487 </span> : virtual TagSet operator()(const StringSet& item) const +<span class="lineNum"> 488 </span> : { return Tagcoll::Converter<std::string, Tag>::operator()(item); } +<span class="lineNum"> 489 </span> : +<span class="lineNum"> 490 </span> : TagSet parseTagList(const std::string& str) const; +<span class="lineNum"> 491 </span> : +<span class="lineNum"> 492 </span> : static std::string componentName(); +<span class="lineNum"> 493 </span> : }; +<span class="lineNum"> 494 </span> : +<span class="lineNum"> 495 </span> : /** +<span class="lineNum"> 496 </span> : * Convert Aggregator to ints +<span class="lineNum"> 497 </span> : */ +<span class="lineNum"> 498 </span> : class PackageIntConverter : public Implementation<PackageIntConverter>, +<span class="lineNum"> 499 </span> : public Tagcoll::Converter<aptFront::cache::entity::Package, int>, +<span class="lineNum"> 500 </span> : public Tagcoll::Converter<int, aptFront::cache::entity::Package> +<span class="lineNum"> 501 </span> : { +<span class="lineNum"> 502 </span> : typedef aptFront::cache::entity::Package Package; +<span class="lineNum"> 503 </span> : typedef Tagcoll::OpSet<aptFront::cache::entity::Package> PackageSet; +<span class="lineNum"> 504 </span> : typedef Tagcoll::OpSet<int> IntSet; +<span class="lineNum"> 505 </span> : public: +<span class="lineNum"> 506 </span> : virtual int operator()(const Package& item) const; +<span class="lineNum"> 507 </span> : virtual Package operator()(const int& item) const; +<span class="lineNum"> 508 </span> : +<span class="lineNum"> 509 </span> : virtual IntSet operator()(const PackageSet& item) const +<span class="lineNum"> 510 </span> : { return Tagcoll::Converter<Package, int>::operator()(item); } +<span class="lineNum"> 511 </span> : virtual PackageSet operator()(const IntSet& item) const +<span class="lineNum"> 512 </span> : { return Tagcoll::Converter<int, Package>::operator()(item); } +<span class="lineNum"> 513 </span> : +<span class="lineNum"> 514 </span> : static std::string componentName(); +<span class="lineNum"> 515 </span> : }; +<span class="lineNum"> 516 </span> : +<span class="lineNum"> 517 </span> : /** +<span class="lineNum"> 518 </span> : * Convert Aggregator to strings +<span class="lineNum"> 519 </span> : */ +<span class="lineNum"> 520 </span> : class PackageStringConverter : public Implementation<PackageStringConverter>, +<span class="lineNum"> 521 </span> : public Tagcoll::Converter<aptFront::cache::entity::Package, std::string>, +<span class="lineNum"> 522 </span> : public Tagcoll::Converter<std::string, aptFront::cache::entity::Package> +<span class="lineNum"> 523 </span> : { +<span class="lineNum"> 524 </span> : typedef aptFront::cache::entity::Package Package; +<span class="lineNum"> 525 </span> : typedef Tagcoll::OpSet<aptFront::cache::entity::Package> PackageSet; +<span class="lineNum"> 526 </span> : typedef Tagcoll::OpSet<std::string> StringSet; +<span class="lineNum"> 527 </span> : public: +<span class="lineNum"> 528 </span> : virtual std::string operator()(const Package& item) const; +<span class="lineNum"> 529 </span> : virtual Package operator()(const std::string& item) const; +<span class="lineNum"> 530 </span> : +<span class="lineNum"> 531 </span> : virtual StringSet operator()(const PackageSet& item) const +<span class="lineNum"> 532 </span> : { return Tagcoll::Converter<Package, std::string>::operator()(item); } +<span class="lineNum"> 533 </span> : virtual PackageSet operator()(const StringSet& item) const +<span class="lineNum"> 534 </span> : { return Tagcoll::Converter<std::string, Package>::operator()(item); } +<span class="lineNum"> 535 </span> : +<span class="lineNum"> 536 </span> : static std::string componentName(); +<span class="lineNum"> 537 </span> : }; +<span class="lineNum"> 538 </span> : +<span class="lineNum"> 539 </span> : #endif +<span class="lineNum"> 540 </span> : +<span class="lineNum"> 541 </span> : } +<span class="lineNum"> 542 </span> : } +<span class="lineNum"> 543 </span> : } +<span class="lineNum"> 544 </span> : +<span class="lineNum"> 545 </span> : #endif +<span class="lineNum"> 546 </span> : +<span class="lineNum"> 547 </span> : #endif +<span class="lineNum"> 548 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 549 </span> : +<span class="lineNum"> 550 </span> : #if 0 +<span class="lineNum"> 551 </span> : /** +<span class="lineNum"> 552 </span> : * @file cache/debtags/serializer.h +<span class="lineNum"> 553 </span> : * @author Enrico Zini (enrico) <enrico@enricozini.org> +<span class="lineNum"> 554 </span> : */ +<span class="lineNum"> 555 </span> : +<span class="lineNum"> 556 </span> : #ifndef EPT_CACHE_DEBTAGS_SERIALIZER_TCC +<span class="lineNum"> 557 </span> : #define EPT_CACHE_DEBTAGS_SERIALIZER_TCC +<span class="lineNum"> 558 </span> : +<span class="lineNum"> 559 </span> : #include <ept/cache/debtags/serializer.h> +<span class="lineNum"> 560 </span> : #if 0 +<span class="lineNum"> 561 </span> : #include <ept/cache/debtags/pkgidx.h> +<span class="lineNum"> 562 </span> : #include <ept/cache/debtags/vocabulary.h> +<span class="lineNum"> 563 </span> : #include <ept/cache/package.h> +<span class="lineNum"> 564 </span> : //#include <ept/cache/cache.h> +<span class="lineNum"> 565 </span> : #endif +<span class="lineNum"> 566 </span> : +<span class="lineNum"> 567 </span> : namespace ept { +<span class="lineNum"> 568 </span> : namespace t { +<span class="lineNum"> 569 </span> : namespace cache { +<span class="lineNum"> 570 </span> : namespace debtags { +<span class="lineNum"> 571 </span> : +<span class="lineNum"> 572 </span> : +<span class="lineNum"> 573 </span> : +<span class="lineNum"> 574 </span> : #if 0 +<span class="lineNum"> 575 </span> : string FacetIntConverter::componentName() { return "FacetIntConverter"; } +<span class="lineNum"> 576 </span> : +<span class="lineNum"> 577 </span> : int FacetIntConverter::operator()(const aptFront::cache::entity::Facet& item) const +<span class="lineNum"> 578 </span> : { +<span class="lineNum"> 579 </span> : if (!item.valid()) return -1; +<span class="lineNum"> 580 </span> : return item.id(); +<span class="lineNum"> 581 </span> : } +<span class="lineNum"> 582 </span> : aptFront::cache::entity::Facet FacetIntConverter::operator()(const int& item) const +<span class="lineNum"> 583 </span> : { +<span class="lineNum"> 584 </span> : return cache().tags().facetByID(item); +<span class="lineNum"> 585 </span> : } +<span class="lineNum"> 586 </span> : +<span class="lineNum"> 587 </span> : string FacetStringConverter::componentName() { return "FacetStringConverter"; } +<span class="lineNum"> 588 </span> : +<span class="lineNum"> 589 </span> : std::string FacetStringConverter::operator()(const aptFront::cache::entity::Facet& item) const +<span class="lineNum"> 590 </span> : { +<span class="lineNum"> 591 </span> : if (!item.valid()) return string(); +<span class="lineNum"> 592 </span> : return item.name(); +<span class="lineNum"> 593 </span> : } +<span class="lineNum"> 594 </span> : aptFront::cache::entity::Facet FacetStringConverter::operator()(const std::string& item) const +<span class="lineNum"> 595 </span> : { +<span class="lineNum"> 596 </span> : return cache().tags().facetByName(item); +<span class="lineNum"> 597 </span> : } +<span class="lineNum"> 598 </span> : +<span class="lineNum"> 599 </span> : string TagIntConverter::componentName() { return "TagIntConverter"; } +<span class="lineNum"> 600 </span> : +<span class="lineNum"> 601 </span> : int TagIntConverter::operator()(const aptFront::cache::entity::Tag& item) const +<span class="lineNum"> 602 </span> : { +<span class="lineNum"> 603 </span> : if (!item.valid()) return -1; +<span class="lineNum"> 604 </span> : return item.id(); +<span class="lineNum"> 605 </span> : } +<span class="lineNum"> 606 </span> : aptFront::cache::entity::Tag TagIntConverter::operator()(const int& item) const +<span class="lineNum"> 607 </span> : { +<span class="lineNum"> 608 </span> : return cache().tags().tagByID(item); +<span class="lineNum"> 609 </span> : } +<span class="lineNum"> 610 </span> : +<span class="lineNum"> 611 </span> : string TagStringConverter::componentName() { return "TagStringConverter"; } +<span class="lineNum"> 612 </span> : +<span class="lineNum"> 613 </span> : std::string TagStringConverter::operator()(const aptFront::cache::entity::Tag& item) const +<span class="lineNum"> 614 </span> : { +<span class="lineNum"> 615 </span> : if (!item.valid()) return string(); +<span class="lineNum"> 616 </span> : return item.fullname(); +<span class="lineNum"> 617 </span> : } +<span class="lineNum"> 618 </span> : aptFront::cache::entity::Tag TagStringConverter::operator()(const std::string& item) const +<span class="lineNum"> 619 </span> : { +<span class="lineNum"> 620 </span> : return cache().tags().tagByName(item); +<span class="lineNum"> 621 </span> : } +<span class="lineNum"> 622 </span> : +<span class="lineNum"> 623 </span> : Tagcoll::OpSet<entity::Tag> TagStringConverter::parseTagList(const std::string& str) const +<span class="lineNum"> 624 </span> : { +<span class="lineNum"> 625 </span> : if (str.empty()) +<span class="lineNum"> 626 </span> : return Tagcoll::OpSet<entity::Tag>(); +<span class="lineNum"> 627 </span> : +<span class="lineNum"> 628 </span> : size_t i = str.find(", "); +<span class="lineNum"> 629 </span> : if (i == string::npos) +<span class="lineNum"> 630 </span> : { +<span class="lineNum"> 631 </span> : // Check if we need curly brace expansion +<span class="lineNum"> 632 </span> : if (str[str.size() - 1] == '}') +<span class="lineNum"> 633 </span> : { +<span class="lineNum"> 634 </span> : using namespace std; +<span class="lineNum"> 635 </span> : Tagcoll::OpSet<entity::Tag> res; +<span class="lineNum"> 636 </span> : size_t begin = str.find('{'); +<span class="lineNum"> 637 </span> : if (begin == string::npos) +<span class="lineNum"> 638 </span> : return res; +<span class="lineNum"> 639 </span> : string prefix(str, 0, begin); +<span class="lineNum"> 640 </span> : ++begin; +<span class="lineNum"> 641 </span> : size_t end; +<span class="lineNum"> 642 </span> : while ((end = str.find(',', begin)) != string::npos) +<span class="lineNum"> 643 </span> : { +<span class="lineNum"> 644 </span> : res += (*this)(prefix + str.substr(begin, end-begin)); +<span class="lineNum"> 645 </span> : begin = end + 1; +<span class="lineNum"> 646 </span> : } +<span class="lineNum"> 647 </span> : res += (*this)(prefix + str.substr(begin, str.size() - 1 - begin)); +<span class="lineNum"> 648 </span> : return res; +<span class="lineNum"> 649 </span> : } else { +<span class="lineNum"> 650 </span> : entity::Tag t = (*this)(str); +<span class="lineNum"> 651 </span> : if (t.valid()) +<span class="lineNum"> 652 </span> : return Tagcoll::OpSet<entity::Tag>() + t; +<span class="lineNum"> 653 </span> : else +<span class="lineNum"> 654 </span> : return Tagcoll::OpSet<entity::Tag>(); +<span class="lineNum"> 655 </span> : } +<span class="lineNum"> 656 </span> : } else { +<span class="lineNum"> 657 </span> : return parseTagList(string(str, 0, i)) + parseTagList(string(str, i+2)); +<span class="lineNum"> 658 </span> : } +<span class="lineNum"> 659 </span> : } +<span class="lineNum"> 660 </span> : +<span class="lineNum"> 661 </span> : string PackageIntConverter::componentName() { return "PackageIntConverter"; } +<span class="lineNum"> 662 </span> : +<span class="lineNum"> 663 </span> : int PackageIntConverter::operator()(const aptFront::cache::entity::Package& item) const +<span class="lineNum"> 664 </span> : { +<span class="lineNum"> 665 </span> : if (!item.valid()) return -1; +<span class="lineNum"> 666 </span> : return item.id(); +<span class="lineNum"> 667 </span> : } +<span class="lineNum"> 668 </span> : aptFront::cache::entity::Package PackageIntConverter::operator()(const int& item) const +<span class="lineNum"> 669 </span> : { +<span class="lineNum"> 670 </span> : PkgIdx& p = cache().pkgidx(); +<span class="lineNum"> 671 </span> : return cache().packages().packageByName(string(p.name(item), p.size(item))); +<span class="lineNum"> 672 </span> : } +<span class="lineNum"> 673 </span> : +<span class="lineNum"> 674 </span> : string PackageStringConverter::componentName() { return "PackageStringConverter"; } +<span class="lineNum"> 675 </span> : +<span class="lineNum"> 676 </span> : std::string PackageStringConverter::operator()(const aptFront::cache::entity::Package& item) const +<span class="lineNum"> 677 </span> : { +<span class="lineNum"> 678 </span> : if (!item.valid()) return string(); +<span class="lineNum"> 679 </span> : return item.name(); +<span class="lineNum"> 680 </span> : } +<span class="lineNum"> 681 </span> : aptFront::cache::entity::Package PackageStringConverter::operator()(const std::string& item) const +<span class="lineNum"> 682 </span> : { +<span class="lineNum"> 683 </span> : return cache().packages().packageByName(item); +<span class="lineNum"> 684 </span> : } +<span class="lineNum"> 685 </span> : #endif +<span class="lineNum"> 686 </span> : +<span class="lineNum"> 687 </span> : } +<span class="lineNum"> 688 </span> : } +<span class="lineNum"> 689 </span> : +<span class="lineNum"> 690 </span> : #endif +<span class="lineNum"> 691 </span> : +<span class="lineNum"> 692 </span> : #if 0 +<span class="lineNum"> 693 </span> : #ifdef COMPILE_TESTSUITE +<span class="lineNum"> 694 </span> : //#include <apt-front/cache/component/debtags/update.h> +<span class="lineNum"> 695 </span> : #include <iostream> +<span class="lineNum"> 696 </span> : #include "test-utils.h" +<span class="lineNum"> 697 </span> : +<span class="lineNum"> 698 </span> : namespace tut { +<span class="lineNum"> 699 </span> : using namespace aptFront::cache; +<span class="lineNum"> 700 </span> : using namespace component; +<span class="lineNum"> 701 </span> : using namespace debtags; +<span class="lineNum"> 702 </span> : using namespace std; +<span class="lineNum"> 703 </span> : +<span class="lineNum"> 704 </span> : struct cache_component_debtags_serializer_shar { +<span class="lineNum"> 705 </span> : cache_component_debtags_serializer_shar () { +<span class="lineNum"> 706 </span> : aptInit (); +<span class="lineNum"> 707 </span> : ok = true; +<span class="lineNum"> 708 </span> : debtags::fetchNewData(); +<span class="lineNum"> 709 </span> : c.open( Cache::OpenDefault | +<span class="lineNum"> 710 </span> : Cache::OpenReadOnly | Cache::OpenDebtags ); +<span class="lineNum"> 711 </span> : } +<span class="lineNum"> 712 </span> : void check() { +<span class="lineNum"> 713 </span> : if (ok) return; +<span class="lineNum"> 714 </span> : ok = true; +<span class="lineNum"> 715 </span> : throw warning( "debtags init failed, cancelling" ); +<span class="lineNum"> 716 </span> : } +<span class="lineNum"> 717 </span> : ~cache_component_debtags_serializer_shar() { +<span class="lineNum"> 718 </span> : check(); +<span class="lineNum"> 719 </span> : } +<span class="lineNum"> 720 </span> : Cache c; +<span class="lineNum"> 721 </span> : bool ok; +<span class="lineNum"> 722 </span> : }; +<span class="lineNum"> 723 </span> : +<span class="lineNum"> 724 </span> : TESTGRP( cache_component_debtags_serializer ); +<span class="lineNum"> 725 </span> : +<span class="lineNum"> 726 </span> : using namespace Tagcoll; +<span class="lineNum"> 727 </span> : +<span class="lineNum"> 728 </span> : template<> template<> +<span class="lineNum"> 729 </span> : void to::test<1> () +<span class="lineNum"> 730 </span> : { +<span class="lineNum"> 731 </span> : check(); +<span class="lineNum"> 732 </span> : +<span class="lineNum"> 733 </span> : PackageStringConverter& psc = c.packagestringconverter(); +<span class="lineNum"> 734 </span> : +<span class="lineNum"> 735 </span> : ensure(psc("Slartibartsfart") == entity::Package()); +<span class="lineNum"> 736 </span> : +<span class="lineNum"> 737 </span> : /* Get the 'debtags' package */ +<span class="lineNum"> 738 </span> : entity::Package p = c.packages().packageByName( "debtags" ); +<span class="lineNum"> 739 </span> : ensure(p.valid()); +<span class="lineNum"> 740 </span> : +<span class="lineNum"> 741 </span> : /* Get the 'debtags' package using the serializer */ +<span class="lineNum"> 742 </span> : entity::Package p1 = psc("debtags"); +<span class="lineNum"> 743 </span> : ensure(p1.valid()); +<span class="lineNum"> 744 </span> : +<span class="lineNum"> 745 </span> : /* They must be the same */ +<span class="lineNum"> 746 </span> : ensure(p == p1); +<span class="lineNum"> 747 </span> : +<span class="lineNum"> 748 </span> : ensure_equals(psc(p), "debtags"); +<span class="lineNum"> 749 </span> : ensure_equals(psc(p1), "debtags"); +<span class="lineNum"> 750 </span> : ensure_equals(psc(p), psc(p1)); +<span class="lineNum"> 751 </span> : +<span class="lineNum"> 752 </span> : /* If there is an invalid package to serialize, it should be discarded */ +<span class="lineNum"> 753 </span> : { +<span class="lineNum"> 754 </span> : Tagcoll::OpSet<entity::Package> pkgs; +<span class="lineNum"> 755 </span> : pkgs += c.packages().packageByName( "debtags" ); +<span class="lineNum"> 756 </span> : pkgs += c.packages().packageByName( "tagcoll" ); +<span class="lineNum"> 757 </span> : pkgs += entity::Package(); +<span class="lineNum"> 758 </span> : +<span class="lineNum"> 759 </span> : ensure_equals (pkgs.size(), 3u); +<span class="lineNum"> 760 </span> : ensure_equals (psc(pkgs).size(), 2u); +<span class="lineNum"> 761 </span> : ensure (psc(pkgs).contains("debtags")); +<span class="lineNum"> 762 </span> : ensure (psc(pkgs).contains("tagcoll")); +<span class="lineNum"> 763 </span> : } +<span class="lineNum"> 764 </span> : +<span class="lineNum"> 765 </span> : /* If there is an invalid package to serialize, it should be discarded */ +<span class="lineNum"> 766 </span> : { +<span class="lineNum"> 767 </span> : Tagcoll::OpSet<std::string> pkgs; +<span class="lineNum"> 768 </span> : pkgs += "debtags"; +<span class="lineNum"> 769 </span> : pkgs += "tagcoll"; +<span class="lineNum"> 770 </span> : pkgs += "Slartibartsfart"; +<span class="lineNum"> 771 </span> : +<span class="lineNum"> 772 </span> : ensure_equals (pkgs.size(), 3u); +<span class="lineNum"> 773 </span> : ensure_equals (psc(pkgs).size(), 2u); +<span class="lineNum"> 774 </span> : ensure (psc(pkgs).contains(psc("debtags"))); +<span class="lineNum"> 775 </span> : ensure (psc(pkgs).contains(psc("tagcoll"))); +<span class="lineNum"> 776 </span> : ensure (!psc(pkgs).contains(entity::Package())); +<span class="lineNum"> 777 </span> : } +<span class="lineNum"> 778 </span> : } +<span class="lineNum"> 779 </span> : +<span class="lineNum"> 780 </span> : ostream& operator<<(ostream& out, const entity::Package& pkg) +<span class="lineNum"> 781 </span> : { +<span class="lineNum"> 782 </span> : if (pkg.valid()) +<span class="lineNum"> 783 </span> : return out << pkg.name(); +<span class="lineNum"> 784 </span> : else +<span class="lineNum"> 785 </span> : return out << "(invalid package)"; +<span class="lineNum"> 786 </span> : } +<span class="lineNum"> 787 </span> : +<span class="lineNum"> 788 </span> : // Check that package conversions work two-way +<span class="lineNum"> 789 </span> : template<> template<> +<span class="lineNum"> 790 </span> : void to::test<2> () +<span class="lineNum"> 791 </span> : { +<span class="lineNum"> 792 </span> : PackageStringConverter& psc = c.packagestringconverter(); +<span class="lineNum"> 793 </span> : for (component::Aggregator::iterator i = c.packages().packagesBegin(); +<span class="lineNum"> 794 </span> : i != c.packages().packagesEnd(); ++i) +<span class="lineNum"> 795 </span> : { +<span class="lineNum"> 796 </span> : try { +<span class="lineNum"> 797 </span> : ensure_equals(*i, psc(psc(*i))); +<span class="lineNum"> 798 </span> : } catch (...) { +<span class="lineNum"> 799 </span> : cerr << "Note: exception thrown during processing[string] of package " << i->name(string("(invalid package)")) << endl; +<span class="lineNum"> 800 </span> : throw; +<span class="lineNum"> 801 </span> : } +<span class="lineNum"> 802 </span> : } +<span class="lineNum"> 803 </span> : +<span class="lineNum"> 804 </span> : PackageIntConverter& pic = c.packageintconverter(); +<span class="lineNum"> 805 </span> : for (component::Aggregator::iterator i = c.packages().packagesBegin(); +<span class="lineNum"> 806 </span> : i != c.packages().packagesEnd(); ++i) +<span class="lineNum"> 807 </span> : { +<span class="lineNum"> 808 </span> : try { +<span class="lineNum"> 809 </span> : ensure_equals(*i, pic(pic(*i))); +<span class="lineNum"> 810 </span> : } catch (...) { +<span class="lineNum"> 811 </span> : cerr << "Note: exception thrown during processing[int] of package " << i->name(string("(invalid package)")) << endl; +<span class="lineNum"> 812 </span> : throw; +<span class="lineNum"> 813 </span> : } +<span class="lineNum"> 814 </span> : } +<span class="lineNum"> 815 </span> : } +<span class="lineNum"> 816 </span> : +<span class="lineNum"> 817 </span> : // Check that facet conversions work two-way +<span class="lineNum"> 818 </span> : template<> template<> +<span class="lineNum"> 819 </span> : void to::test<3> () +<span class="lineNum"> 820 </span> : { +<span class="lineNum"> 821 </span> : typedef Tagcoll::OpSet<entity::Facet> FacetSet; +<span class="lineNum"> 822 </span> : +<span class="lineNum"> 823 </span> : FacetStringConverter& fsc = c.facetstringconverter(); +<span class="lineNum"> 824 </span> : FacetSet allFacets(c.tags().facets()); +<span class="lineNum"> 825 </span> : for (FacetSet::const_iterator i = allFacets.begin(); i != allFacets.end(); i++) +<span class="lineNum"> 826 </span> : { +<span class="lineNum"> 827 </span> : try { +<span class="lineNum"> 828 </span> : ensure_equals(*i, fsc(fsc(*i))); +<span class="lineNum"> 829 </span> : } catch (...) { +<span class="lineNum"> 830 </span> : cerr << "Note: exception thrown during processing[string] of facet " << i->name() << endl; +<span class="lineNum"> 831 </span> : throw; +<span class="lineNum"> 832 </span> : } +<span class="lineNum"> 833 </span> : } +<span class="lineNum"> 834 </span> : +<span class="lineNum"> 835 </span> : FacetIntConverter& fic = c.facetintconverter(); +<span class="lineNum"> 836 </span> : for (FacetSet::const_iterator i = allFacets.begin(); i != allFacets.end(); i++) +<span class="lineNum"> 837 </span> : { +<span class="lineNum"> 838 </span> : try { +<span class="lineNum"> 839 </span> : ensure_equals(*i, fic(fic(*i))); +<span class="lineNum"> 840 </span> : } catch (...) { +<span class="lineNum"> 841 </span> : cerr << "Note: exception thrown during processing[int] of facet " << i->name() << endl; +<span class="lineNum"> 842 </span> : throw; +<span class="lineNum"> 843 </span> : } +<span class="lineNum"> 844 </span> : } +<span class="lineNum"> 845 </span> : } +<span class="lineNum"> 846 </span> : +<span class="lineNum"> 847 </span> : // Check that tag conversions work two-way +<span class="lineNum"> 848 </span> : template<> template<> +<span class="lineNum"> 849 </span> : void to::test<4> () +<span class="lineNum"> 850 </span> : { +<span class="lineNum"> 851 </span> : typedef Tagcoll::OpSet<entity::Tag> TagSet; +<span class="lineNum"> 852 </span> : +<span class="lineNum"> 853 </span> : TagStringConverter& tsc = c.tagstringconverter(); +<span class="lineNum"> 854 </span> : TagSet allTags(c.tags().tags()); +<span class="lineNum"> 855 </span> : for (TagSet::const_iterator i = allTags.begin(); i != allTags.end(); i++) +<span class="lineNum"> 856 </span> : { +<span class="lineNum"> 857 </span> : try { +<span class="lineNum"> 858 </span> : ensure_equals(*i, tsc(tsc(*i))); +<span class="lineNum"> 859 </span> : } catch (...) { +<span class="lineNum"> 860 </span> : cerr << "Note: exception thrown during processing[string] of tag " << i->fullname() << endl; +<span class="lineNum"> 861 </span> : throw; +<span class="lineNum"> 862 </span> : } +<span class="lineNum"> 863 </span> : } +<span class="lineNum"> 864 </span> : +<span class="lineNum"> 865 </span> : TagIntConverter& tic = c.tagintconverter(); +<span class="lineNum"> 866 </span> : for (TagSet::const_iterator i = allTags.begin(); i != allTags.end(); i++) +<span class="lineNum"> 867 </span> : { +<span class="lineNum"> 868 </span> : try { +<span class="lineNum"> 869 </span> : ensure_equals(*i, tic(tic(*i))); +<span class="lineNum"> 870 </span> : } catch (...) { +<span class="lineNum"> 871 </span> : cerr << "Note: exception thrown during processing[int] of tag " << i->fullname() << endl; +<span class="lineNum"> 872 </span> : throw; +<span class="lineNum"> 873 </span> : } +<span class="lineNum"> 874 </span> : } +<span class="lineNum"> 875 </span> : } +<span class="lineNum"> 876 </span> : +<span class="lineNum"> 877 </span> : // Check TagStringConverter::parseTagList +<span class="lineNum"> 878 </span> : template<> template<> +<span class="lineNum"> 879 </span> : void to::test<5> () +<span class="lineNum"> 880 </span> : { +<span class="lineNum"> 881 </span> : TagStringConverter& tsc = c.tagstringconverter(); +<span class="lineNum"> 882 </span> : OpSet<entity::Tag> ts; +<span class="lineNum"> 883 </span> : +<span class="lineNum"> 884 </span> : // First ensure that we're using existing tags as samples +<span class="lineNum"> 885 </span> : ensure(tsc("accessibility::TODO") != entity::Tag()); +<span class="lineNum"> 886 </span> : ensure(tsc("role::sw:devel-lib") != entity::Tag()); +<span class="lineNum"> 887 </span> : ensure(tsc("x11::xserver") != entity::Tag()); +<span class="lineNum"> 888 </span> : ensure(tsc("antani") == entity::Tag()); +<span class="lineNum"> 889 </span> : ensure(tsc("blinda") == entity::Tag()); +<span class="lineNum"> 890 </span> : ensure(tsc("supercazzola") == entity::Tag()); +<span class="lineNum"> 891 </span> : +<span class="lineNum"> 892 </span> : ts = tsc.parseTagList("role::sw:devel-lib"); +<span class="lineNum"> 893 </span> : ensure_equals(ts.size(), 1u); +<span class="lineNum"> 894 </span> : ensure(ts.contains(tsc("role::sw:devel-lib"))); +<span class="lineNum"> 895 </span> : +<span class="lineNum"> 896 </span> : ts = tsc.parseTagList("accessibility::TODO, x11::xserver, role::sw:devel-lib"); +<span class="lineNum"> 897 </span> : ensure_equals(ts.size(), 3u); +<span class="lineNum"> 898 </span> : ensure(ts.contains(tsc("accessibility::TODO"))); +<span class="lineNum"> 899 </span> : ensure(ts.contains(tsc("role::sw:devel-lib"))); +<span class="lineNum"> 900 </span> : ensure(ts.contains(tsc("x11::xserver"))); +<span class="lineNum"> 901 </span> : +<span class="lineNum"> 902 </span> : ts = tsc.parseTagList("antani"); +<span class="lineNum"> 903 </span> : ensure_equals(ts.size(), 0u); +<span class="lineNum"> 904 </span> : +<span class="lineNum"> 905 </span> : ts = tsc.parseTagList("antani, blinda, supercazzola"); +<span class="lineNum"> 906 </span> : ensure_equals(ts.size(), 0u); +<span class="lineNum"> 907 </span> : +<span class="lineNum"> 908 </span> : ts = tsc.parseTagList("antani, x11::xserver, blinda"); +<span class="lineNum"> 909 </span> : ensure_equals(ts.size(), 1u); +<span class="lineNum"> 910 </span> : ensure(ts.contains(tsc("x11::xserver"))); +<span class="lineNum"> 911 </span> : } +<span class="lineNum"> 912 </span> : +<span class="lineNum"> 913 </span> : // Check TagStringConverter::parseTagList's handling of curly brace expansion +<span class="lineNum"> 914 </span> : template<> template<> +<span class="lineNum"> 915 </span> : void to::test<6> () +<span class="lineNum"> 916 </span> : { +<span class="lineNum"> 917 </span> : TagStringConverter& tsc = c.tagstringconverter(); +<span class="lineNum"> 918 </span> : OpSet<entity::Tag> ts; +<span class="lineNum"> 919 </span> : +<span class="lineNum"> 920 </span> : // First ensure that we're using existing tags as samples +<span class="lineNum"> 921 </span> : ensure(tsc("role::TODO") != entity::Tag()); +<span class="lineNum"> 922 </span> : ensure(tsc("role::sw:server") != entity::Tag()); +<span class="lineNum"> 923 </span> : ensure(tsc("role::aux:dummy") != entity::Tag()); +<span class="lineNum"> 924 </span> : ensure(tsc("role::sw:amusement") != entity::Tag()); +<span class="lineNum"> 925 </span> : ensure(tsc("role::sw:server{}") == entity::Tag()); +<span class="lineNum"> 926 </span> : ensure(tsc("role::{}") == entity::Tag()); +<span class="lineNum"> 927 </span> : ensure(tsc("role::{") == entity::Tag()); +<span class="lineNum"> 928 </span> : ensure(tsc("role::}") == entity::Tag()); +<span class="lineNum"> 929 </span> : +<span class="lineNum"> 930 </span> : ts = tsc.parseTagList("role::{TODO,sw:server,aux:dummy,sw:amusement}"); +<span class="lineNum"> 931 </span> : ensure_equals(ts.size(), 4u); +<span class="lineNum"> 932 </span> : ensure(ts.contains(tsc("role::TODO"))); +<span class="lineNum"> 933 </span> : ensure(ts.contains(tsc("role::sw:server"))); +<span class="lineNum"> 934 </span> : ensure(ts.contains(tsc("role::aux:dummy"))); +<span class="lineNum"> 935 </span> : ensure(ts.contains(tsc("role::sw:amusement"))); +<span class="lineNum"> 936 </span> : +<span class="lineNum"> 937 </span> : ts = tsc.parseTagList("role::{TODO,aux:dummy}, role::sw:{server,amusement}"); +<span class="lineNum"> 938 </span> : ensure_equals(ts.size(), 4u); +<span class="lineNum"> 939 </span> : ensure(ts.contains(tsc("role::TODO"))); +<span class="lineNum"> 940 </span> : ensure(ts.contains(tsc("role::sw:server"))); +<span class="lineNum"> 941 </span> : ensure(ts.contains(tsc("role::aux:dummy"))); +<span class="lineNum"> 942 </span> : ensure(ts.contains(tsc("role::sw:amusement"))); +<span class="lineNum"> 943 </span> : } +<span class="lineNum"> 944 </span> : +<span class="lineNum"> 945 </span> : } +<span class="lineNum"> 946 </span> : #endif +<span class="lineNum"> 947 </span> : #endif +<span class="lineNum"> 948 </span> : #endif +<span class="lineNum"> 949 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/serializer.test.h.gcov.html b/rep/ept/debtags/maint/serializer.test.h.gcov.html new file mode 100644 index 0000000..4980e32 --- /dev/null +++ b/rep/ept/debtags/maint/serializer.test.h.gcov.html @@ -0,0 +1,200 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/serializer.test.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - serializer.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">48</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">48</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /** +<span class="lineNum"> 3 </span> : * @file +<span class="lineNum"> 4 </span> : * @author Enrico Zini (enrico) <enrico@enricozini.org> +<span class="lineNum"> 5 </span> : */ +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : /* +<span class="lineNum"> 8 </span> : * Tests for Debtags serialization filters +<span class="lineNum"> 9 </span> : * +<span class="lineNum"> 10 </span> : * Copyright (C) 2003-2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 13 </span> : * modify it under the terms of the GNU Lesser General Public +<span class="lineNum"> 14 </span> : * License as published by the Free Software Foundation; either +<span class="lineNum"> 15 </span> : * version 2.1 of the License, or (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This library is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +<span class="lineNum"> 20 </span> : * Lesser General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU Lesser General Public +<span class="lineNum"> 23 </span> : * License along with this library; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <ept/debtags/maint/serializer.h> +<span class="lineNum"> 28 </span> : #include <ept/debtags/maint/pkgid.h> +<span class="lineNum"> 29 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 30 </span> : #include <ept/debtags/vocabulary.h> +<span class="lineNum"> 31 </span> : #include <ept/debtags/debtags.h> +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : #include <tagcoll/coll/simple.h> +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : #include <wibble/singleton.h> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : #include <ept/test.h> +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : using namespace std; +<span class="lineNum"> 40 </span> : using namespace tagcoll; +<span class="lineNum"> 41 </span> : using namespace ept; +<span class="lineNum"> 42 </span> : using namespace ept::debtags; +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span> : struct TestSerializer : DebtagsTestEnvironment +<span class="lineNum"> 45 </span><span class="lineCov"> 2 : {</span> +<span class="lineNum"> 46 </span> : Debtags debtags; +<span class="lineNum"> 47 </span> : Vocabulary& voc; +<span class="lineNum"> 48 </span> : PkgId& pkgid; +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span><span class="lineCov"> 2 : TestSerializer()</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 2 : : voc(debtags.vocabulary()), pkgid(debtags.pkgid()) {}</span> +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : /* Test going from a stream of tag data <string, string> to a stream of tag +<span class="lineNum"> 54 </span> : * data <int, int> to a stream of tag data <Package, Tag> and finally back to a +<span class="lineNum"> 55 </span> : * stream of tag data <string, string> +<span class="lineNum"> 56 </span> : */ +<span class="lineNum"> 57 </span><span class="lineCov"> 1 : Test _1()</span> +<span class="lineNum"> 58 </span> : { +<span class="lineNum"> 59 </span> : // Source data <string, string> +<span class="lineNum"> 60 </span><span class="lineCov"> 1 : coll::Simple<string, string> source;</span> +<span class="lineNum"> 61 </span><span class="lineCov"> 1 : source.insert(wibble::singleton(string("debtags")), wibble::singleton(string("use::editing")));</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 2 : source.insert(wibble::singleton(string("debtags")), wibble::singleton(string("role::program")));</span> +<span class="lineNum"> 63 </span> : +<span class="lineNum"> 64 </span> : // <string, string> -> <int, int> +<span class="lineNum"> 65 </span><span class="lineCov"> 1 : coll::Simple<int, int> dest;</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : source.output(stringToInt(pkgid, voc, inserter(dest)));</span> +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span><span class="lineCov"> 1 : assert_eq(dest.itemCount(), 1u);</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 2 : assert_eq(dest.tagCount(), 2u);</span> +<span class="lineNum"> 70 </span> : +<span class="lineNum"> 71 </span> : // <int, int> -> <Package, Tag> +<span class="lineNum"> 72 </span><span class="lineCov"> 1 : coll::Simple<string, Tag> dest1;</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 1 : dest.output(intToPkg(pkgid, voc, inserter(dest1)));</span> +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span><span class="lineCov"> 1 : assert_eq(dest1.itemCount(), 1u);</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 2 : assert_eq(dest1.tagCount(), 2u);</span> +<span class="lineNum"> 77 </span> : +<span class="lineNum"> 78 </span><span class="lineCov"> 2 : std::set<Tag> tags = dest1.getTagsOfItem("debtags");</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 2 : assert_eq(tags.size(), 2u);</span> +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span><span class="lineCov"> 2 : Tag useEditing = voc.tagByName("use::editing");</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 2 : Tag roleProgram = voc.tagByName("role::program");</span> +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span><span class="lineCov"> 2 : assert(tags.find(useEditing) != tags.end());</span> +<span class="lineNum"> 85 </span><span class="lineCov"> 2 : assert(tags.find(roleProgram) != tags.end());</span> +<span class="lineNum"> 86 </span> : +<span class="lineNum"> 87 </span> : // <Package, Tag> -> <string, string> +<span class="lineNum"> 88 </span><span class="lineCov"> 1 : coll::Simple<string, string> dest2;</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 1 : dest1.output(pkgToString(inserter(dest2)));</span> +<span class="lineNum"> 90 </span> : +<span class="lineNum"> 91 </span><span class="lineCov"> 1 : assert_eq(dest2.itemCount(), 1u);</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 2 : assert_eq(dest2.tagCount(), 2u);</span> +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span><span class="lineCov"> 2 : std::set<std::string> tags1 = dest2.getTagsOfItem("debtags");</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 2 : assert_eq(tags1.size(), 2u);</span> +<span class="lineNum"> 96 </span> : +<span class="lineNum"> 97 </span><span class="lineCov"> 2 : assert(tags1.find("use::editing") != tags1.end());</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 2 : assert(tags1.find("role::program") != tags1.end());</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 100 </span> : +<span class="lineNum"> 101 </span> : /* Test going from patch with strings to patch with ints and vice versa */ +<span class="lineNum"> 102 </span><span class="lineCov"> 1 : Test _2()</span> +<span class="lineNum"> 103 </span> : { +<span class="lineNum"> 104 </span><span class="lineCov"> 1 : PatchList<string, string> change;</span> +<span class="lineNum"> 105 </span> : change.addPatch(Patch<string, string>("debtags", +<span class="lineNum"> 106 </span> : wibble::singleton(string("use::gameplaying")), +<span class="lineNum"> 107 </span><span class="lineCov"> 1 : wibble::singleton(string("use::editing"))));</span> +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span> : // Deserialise to ints +<span class="lineNum"> 110 </span><span class="lineCov"> 1 : PatchList<int, int> intChange;</span> +<span class="lineNum"> 111 </span><span class="lineCov"> 1 : change.output(patchStringToInt(pkgid, voc, tagcoll::inserter(intChange)));</span> +<span class="lineNum"> 112 </span><span class="lineCov"> 1 : assert_eq(intChange.size(), 1u);</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 2 : assert_eq(intChange.begin()->second.added.size(), 1u);</span> +<span class="lineNum"> 114 </span><span class="lineCov"> 2 : assert_eq(intChange.begin()->second.removed.size(), 1u);</span> +<span class="lineNum"> 115 </span> : +<span class="lineNum"> 116 </span> : // Serialise back to strings +<span class="lineNum"> 117 </span><span class="lineCov"> 1 : PatchList<string, string> change1;</span> +<span class="lineNum"> 118 </span><span class="lineCov"> 1 : intChange.output(patchIntToString(pkgid, voc, tagcoll::inserter(change1)));</span> +<span class="lineNum"> 119 </span><span class="lineCov"> 1 : assert_eq(change1.size(), 1u);</span> +<span class="lineNum"> 120 </span><span class="lineCov"> 2 : assert_eq(change1.begin()->first, string("debtags"));</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 2 : assert_eq(change1.begin()->second.item, string("debtags"));</span> +<span class="lineNum"> 122 </span><span class="lineCov"> 2 : assert_eq(change1.begin()->second.added.size(), 1u);</span> +<span class="lineNum"> 123 </span><span class="lineCov"> 2 : assert_eq(*change1.begin()->second.added.begin(), string("use::gameplaying"));</span> +<span class="lineNum"> 124 </span><span class="lineCov"> 2 : assert_eq(change1.begin()->second.removed.size(), 1u);</span> +<span class="lineNum"> 125 </span><span class="lineCov"> 2 : assert_eq(*change1.begin()->second.removed.begin(), string("use::editing"));</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 127 </span> : +<span class="lineNum"> 128 </span> : }; +<span class="lineNum"> 129 </span> : +<span class="lineNum"> 130 </span> : #include <tagcoll/coll/simple.tcc> +<span class="lineNum"> 131 </span> : #include <tagcoll/patch.tcc> +<span class="lineNum"> 132 </span> : +<span class="lineNum"> 133 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/sourcedir.cc.gcov.html b/rep/ept/debtags/maint/sourcedir.cc.gcov.html new file mode 100644 index 0000000..8f0db9e --- /dev/null +++ b/rep/ept/debtags/maint/sourcedir.cc.gcov.html @@ -0,0 +1,190 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/sourcedir.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - sourcedir.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">57</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">75.4 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">43</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #include <ept/debtags/maint/sourcedir.h> +<span class="lineNum"> 2 </span> : #include <ept/debtags/maint/vocabularymerger.h> +<span class="lineNum"> 3 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : #include <wibble/string.h> +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : #include <tagcoll/input/zlib.h> +<span class="lineNum"> 8 </span> : #include <tagcoll/input/stdio.h> +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span> : using namespace wibble; +<span class="lineNum"> 11 </span> : +<span class="lineNum"> 12 </span> : namespace ept { +<span class="lineNum"> 13 </span> : namespace debtags { +<span class="lineNum"> 14 </span> : +<span class="lineNum"> 15 </span><span class="lineCov"> 802 : SourceDir::FileType SourceDir::fileType(const std::string& name)</span> +<span class="lineNum"> 16 </span> : { +<span class="lineNum"> 17 </span><span class="lineCov"> 802 : if (name[0] == '.') return SKIP;</span> +<span class="lineNum"> 18 </span> : +<span class="lineNum"> 19 </span> : // Filenames need to be at least 5 characters long (one char plus +<span class="lineNum"> 20 </span> : // extension) +<span class="lineNum"> 21 </span><span class="lineCov"> 622 : if (name.size() <= 4) return SKIP;</span> +<span class="lineNum"> 22 </span> : +<span class="lineNum"> 23 </span> : // Only look at .voc and .tag files +<span class="lineNum"> 24 </span><span class="lineCov"> 542 : std::string ext(name, name.size() - 4);</span> +<span class="lineNum"> 25 </span><span class="lineCov"> 542 : if (ext == ".voc")</span> +<span class="lineNum"> 26 </span><span class="lineCov"> 80 : return VOC;</span> +<span class="lineNum"> 27 </span><span class="lineCov"> 462 : if (ext == ".tag")</span> +<span class="lineNum"> 28 </span><span class="lineCov"> 80 : return TAG;</span> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : // Now look for compressed files, which must have the 4 character extension +<span class="lineNum"> 31 </span> : // plus the 3 chars of '.gz' +<span class="lineNum"> 32 </span><span class="lineCov"> 382 : if (name.size() <= 7) return SKIP;</span> +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span><span class="lineCov"> 302 : ext = name.substr(name.size() - 7);</span> +<span class="lineNum"> 35 </span><span class="lineCov"> 302 : if (ext == ".voc.gz")</span> +<span class="lineNum"> 36 </span><span class="lineNoCov"> 0 : return VOCGZ;</span> +<span class="lineNum"> 37 </span><span class="lineCov"> 302 : if (ext == ".tag.gz")</span> +<span class="lineNum"> 38 </span><span class="lineNoCov"> 0 : return TAGGZ;</span> +<span class="lineNum"> 39 </span> : +<span class="lineNum"> 40 </span><span class="lineCov"> 302 : return SKIP;</span> +<span class="lineNum"> 41 </span> : } +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span><span class="lineCov"> 20 : time_t SourceDir::timestamp()</span> +<span class="lineNum"> 44 </span> : { +<span class="lineNum"> 45 </span><span class="lineCov"> 20 : if (!valid()) return 0;</span> +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span><span class="lineCov"> 20 : time_t max = 0;</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 200 : for (const_iterator d = begin(); d != end(); ++d)</span> +<span class="lineNum"> 49 </span> : { +<span class="lineNum"> 50 </span><span class="lineCov"> 180 : FileType type = fileType(d->d_name);</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 180 : if (type == SKIP) continue;</span> +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span><span class="lineCov"> 36 : time_t ts = Path::timestamp(str::joinpath(path(), d->d_name));</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 54 : if (ts > max) max = ts;</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 20 : }</span> +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span><span class="lineCov"> 20 : return max;</span> +<span class="lineNum"> 58 </span> : } +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span><span class="lineCov"> 62 : time_t SourceDir::vocTimestamp()</span> +<span class="lineNum"> 61 </span> : { +<span class="lineNum"> 62 </span><span class="lineCov"> 62 : if (!valid()) return 0;</span> +<span class="lineNum"> 63 </span> : +<span class="lineNum"> 64 </span><span class="lineCov"> 60 : time_t max = 0;</span> +<span class="lineNum"> 65 </span><span class="lineCov"> 632 : for (const_iterator d = begin(); d != end(); ++d)</span> +<span class="lineNum"> 66 </span> : { +<span class="lineNum"> 67 </span><span class="lineCov"> 572 : FileType type = fileType(d->d_name);</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 1086 : if (type != VOC and type != VOCGZ) continue;</span> +<span class="lineNum"> 69 </span> : +<span class="lineNum"> 70 </span><span class="lineCov"> 58 : time_t ts = Path::timestamp(str::joinpath(path(), d->d_name));</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 116 : if (ts > max) max = ts;</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 60 : }</span> +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span><span class="lineCov"> 60 : return max;</span> +<span class="lineNum"> 75 </span> : } +<span class="lineNum"> 76 </span> : +<span class="lineNum"> 77 </span><span class="lineNoCov"> 0 : time_t SourceDir::tagTimestamp()</span> +<span class="lineNum"> 78 </span> : { +<span class="lineNum"> 79 </span><span class="lineNoCov"> 0 : if (!valid()) return 0;</span> +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span><span class="lineNoCov"> 0 : time_t max = 0;</span> +<span class="lineNum"> 82 </span><span class="lineNoCov"> 0 : for (const_iterator d = begin(); d != end(); ++d)</span> +<span class="lineNum"> 83 </span> : { +<span class="lineNum"> 84 </span><span class="lineNoCov"> 0 : FileType type = fileType(d->d_name);</span> +<span class="lineNum"> 85 </span><span class="lineNoCov"> 0 : if (type != TAG and type != TAGGZ) continue;</span> +<span class="lineNum"> 86 </span> : +<span class="lineNum"> 87 </span><span class="lineNoCov"> 0 : time_t ts = Path::timestamp(str::joinpath(path(), d->d_name));</span> +<span class="lineNum"> 88 </span><span class="lineNoCov"> 0 : if (ts > max) max = ts;</span> +<span class="lineNum"> 89 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 90 </span> : +<span class="lineNum"> 91 </span><span class="lineNoCov"> 0 : return max;</span> +<span class="lineNum"> 92 </span> : } +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span><span class="lineCov"> 6 : void SourceDir::readVocabularies(VocabularyMerger& out)</span> +<span class="lineNum"> 95 </span> : { +<span class="lineNum"> 96 </span><span class="lineCov"> 6 : if (!valid()) return;</span> +<span class="lineNum"> 97 </span> : +<span class="lineNum"> 98 </span><span class="lineCov"> 32 : for (const_iterator d = begin(); d != end(); ++d)</span> +<span class="lineNum"> 99 </span> : { +<span class="lineNum"> 100 </span><span class="lineCov"> 26 : FileType type = fileType(d->d_name);</span> +<span class="lineNum"> 101 </span><span class="lineCov"> 26 : if (type == VOC)</span> +<span class="lineNum"> 102 </span> : { +<span class="lineNum"> 103 </span> : // Read uncompressed data +<span class="lineNum"> 104 </span><span class="lineCov"> 2 : tagcoll::input::Stdio in(str::joinpath(path(), d->d_name));</span> +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span> : // Read the vocabulary +<span class="lineNum"> 107 </span><span class="lineCov"> 4 : out.read(in);</span> +<span class="lineNum"> 108 </span> : } +<span class="lineNum"> 109 </span><span class="lineCov"> 24 : else if (type == VOCGZ)</span> +<span class="lineNum"> 110 </span> : { +<span class="lineNum"> 111 </span> : // Read compressed data +<span class="lineNum"> 112 </span><span class="lineNoCov"> 0 : tagcoll::input::Zlib in(str::joinpath(path(), d->d_name));</span> +<span class="lineNum"> 113 </span> : +<span class="lineNum"> 114 </span> : // Read the vocabulary +<span class="lineNum"> 115 </span><span class="lineNoCov"> 0 : out.read(in);</span> +<span class="lineNum"> 116 </span> : } +<span class="lineNum"> 117 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 118 </span> : } +<span class="lineNum"> 119 </span> : +<span class="lineNum"> 120 </span> : } +<span class="lineNum"> 121 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/sourcedir.h.gcov.html b/rep/ept/debtags/maint/sourcedir.h.gcov.html new file mode 100644 index 0000000..64aa522 --- /dev/null +++ b/rep/ept/debtags/maint/sourcedir.h.gcov.html @@ -0,0 +1,141 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/sourcedir.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - sourcedir.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">3</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">3</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_DEBTAGS_SOURCEDIR_H +<span class="lineNum"> 2 </span> : #define EPT_DEBTAGS_SOURCEDIR_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** @file +<span class="lineNum"> 5 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 6 </span> : * Debtags data source directory access +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2003,2004,2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 13 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 14 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 15 </span> : * (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 28 </span> : #include <string> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : namespace ept { +<span class="lineNum"> 31 </span> : namespace debtags { +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : class VocabularyMerger; +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : /** +<span class="lineNum"> 36 </span> : * Access a directory containing Debtags data files +<span class="lineNum"> 37 </span> : */ +<span class="lineNum"> 38 </span> : class SourceDir : public wibble::sys::fs::Directory +<span class="lineNum"> 39 </span><span class="lineCov"> 82 : {</span> +<span class="lineNum"> 40 </span> : protected: +<span class="lineNum"> 41 </span> : enum FileType { SKIP, TAG, VOC, TAGGZ, VOCGZ }; +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : // Check if a file name is a tag file, a vocabulary file or a file to skip. +<span class="lineNum"> 44 </span> : // Please notice that it works on file names, not paths. +<span class="lineNum"> 45 </span> : FileType fileType(const std::string& name); +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span> : public: +<span class="lineNum"> 48 </span><span class="lineCov"> 82 : SourceDir(const std::string& path) : Directory(path) {}</span> +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : /// Return the time of the newest file in the source directory +<span class="lineNum"> 51 </span> : time_t timestamp(); +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : /// Return the time of the newest vocabulary file in the source directory +<span class="lineNum"> 54 </span> : time_t vocTimestamp(); +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span> : /// Return the time of the newest tag file in the source directory +<span class="lineNum"> 57 </span> : time_t tagTimestamp(); +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span> : /// Read the tag files in the directory and output their content to out +<span class="lineNum"> 60 </span> : template<typename OUT> +<span class="lineNum"> 61 </span><span class="lineCov"> 4 : void readTags(OUT out);</span> +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : /** +<span class="lineNum"> 64 </span> : * Read the vocabulary files in the directory and output their content to +<span class="lineNum"> 65 </span> : * out +<span class="lineNum"> 66 </span> : */ +<span class="lineNum"> 67 </span> : void readVocabularies(VocabularyMerger& out); +<span class="lineNum"> 68 </span> : }; +<span class="lineNum"> 69 </span> : +<span class="lineNum"> 70 </span> : } +<span class="lineNum"> 71 </span> : } +<span class="lineNum"> 72 </span> : +<span class="lineNum"> 73 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 74 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/sourcedir.tcc.gcov.html b/rep/ept/debtags/maint/sourcedir.tcc.gcov.html new file mode 100644 index 0000000..429ec73 --- /dev/null +++ b/rep/ept/debtags/maint/sourcedir.tcc.gcov.html @@ -0,0 +1,118 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/sourcedir.tcc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - sourcedir.tcc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">9</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">88.9 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">8</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_DEBTAGS_SOURCEDIR_TCC +<span class="lineNum"> 2 </span> : #define EPT_DEBTAGS_SOURCEDIR_TCC +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** @file +<span class="lineNum"> 5 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 6 </span> : * Debtags data source directory access +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : #include <ept/debtags/maint/sourcedir.h> +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span> : #include <tagcoll/input/zlib.h> +<span class="lineNum"> 11 </span> : #include <tagcoll/input/stdio.h> +<span class="lineNum"> 12 </span> : +<span class="lineNum"> 13 </span> : namespace ept { +<span class="lineNum"> 14 </span> : namespace debtags { +<span class="lineNum"> 15 </span> : +<span class="lineNum"> 16 </span> : template<typename OUT> +<span class="lineNum"> 17 </span> : void SourceDir::readTags(OUT out) +<span class="lineNum"> 18 </span> : { +<span class="lineNum"> 19 </span><span class="lineCov"> 4 : if (!valid()) return;</span> +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span><span class="lineCov"> 28 : for (const_iterator d = begin(); d != end(); ++d)</span> +<span class="lineNum"> 22 </span> : { +<span class="lineNum"> 23 </span><span class="lineCov"> 24 : FileType type = fileType(d->d_name);</span> +<span class="lineNum"> 24 </span><span class="lineCov"> 24 : if (type == TAG)</span> +<span class="lineNum"> 25 </span> : { +<span class="lineNum"> 26 </span> : // Read uncompressed data +<span class="lineNum"> 27 </span><span class="lineCov"> 2 : tagcoll::input::Stdio in(path() + "/" + d->d_name);</span> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : // Read the collection +<span class="lineNum"> 30 </span><span class="lineCov"> 2 : tagcoll::textformat::parse(in, out);</span> +<span class="lineNum"> 31 </span> : } +<span class="lineNum"> 32 </span><span class="lineCov"> 22 : else if (type == TAGGZ)</span> +<span class="lineNum"> 33 </span> : { +<span class="lineNum"> 34 </span> : // Read compressed data +<span class="lineNum"> 35 </span><span class="lineNoCov"> 0 : tagcoll::input::Zlib in(path() + "/" + d->d_name);</span> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : // Read the collection +<span class="lineNum"> 38 </span><span class="lineCov"> 4 : tagcoll::textformat::parse(in, out);</span> +<span class="lineNum"> 39 </span> : } +<span class="lineNum"> 40 </span> : } +<span class="lineNum"> 41 </span> : } +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : } +<span class="lineNum"> 44 </span> : } +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span> : #include <tagcoll/TextFormat.tcc> +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span> : #endif +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : // -*- C++ -*- +<span class="lineNum"> 51 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/vocabularyindexer.cc.gcov.html b/rep/ept/debtags/maint/vocabularyindexer.cc.gcov.html new file mode 100644 index 0000000..bf21509 --- /dev/null +++ b/rep/ept/debtags/maint/vocabularyindexer.cc.gcov.html @@ -0,0 +1,262 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/vocabularyindexer.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - vocabularyindexer.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">94</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">69.1 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">65</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #include <ept/debtags/maint/vocabularyindexer.h> +<span class="lineNum"> 2 </span> : #include <ept/debtags/vocabulary.h> +<span class="lineNum"> 3 </span> : #include <ept/debtags/maint/vocabularymerger.h> +<span class="lineNum"> 4 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : namespace ept { +<span class="lineNum"> 7 </span> : namespace debtags { +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span><span class="lineCov"> 31 : VocabularyIndexer::VocabularyIndexer()</span> +<span class="lineNum"> 10 </span><span class="lineCov"> 31 : : mainSource(Path::debtagsSourceDir()), userSource(Path::debtagsUserSourceDir())</span> +<span class="lineNum"> 11 </span> : { +<span class="lineNum"> 12 </span><span class="lineCov"> 31 : rescan();</span> +<span class="lineNum"> 13 </span><span class="lineCov"> 31 : }</span> +<span class="lineNum"> 14 </span> : +<span class="lineNum"> 15 </span><span class="lineCov"> 31 : void VocabularyIndexer::rescan()</span> +<span class="lineNum"> 16 </span> : { +<span class="lineNum"> 17 </span><span class="lineCov"> 31 : ts_main_src = mainSource.vocTimestamp();</span> +<span class="lineNum"> 18 </span><span class="lineCov"> 31 : ts_user_src = userSource.vocTimestamp();</span> +<span class="lineNum"> 19 </span><span class="lineCov"> 31 : ts_main_voc = Path::timestamp(Path::vocabulary());</span> +<span class="lineNum"> 20 </span><span class="lineCov"> 62 : ts_main_idx = Path::timestamp(Path::vocabularyIndex());</span> +<span class="lineNum"> 21 </span><span class="lineCov"> 62 : ts_user_voc = Path::timestamp(Path::userVocabulary());</span> +<span class="lineNum"> 22 </span><span class="lineCov"> 62 : ts_user_idx = Path::timestamp(Path::userVocabularyIndex());</span> +<span class="lineNum"> 23 </span><span class="lineCov"> 31 : }</span> +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span><span class="lineCov"> 31 : bool VocabularyIndexer::needsRebuild() const</span> +<span class="lineNum"> 26 </span> : { +<span class="lineNum"> 27 </span> : // If there are no indexes of any kind, then we need rebuilding +<span class="lineNum"> 28 </span><span class="lineCov"> 31 : if (ts_user_voc == 0 && ts_user_idx == 0 && ts_main_voc == 0 && ts_main_idx == 0)</span> +<span class="lineNum"> 29 </span><span class="lineCov"> 3 : return true;</span> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : // If the user index is ok, then we are fine +<span class="lineNum"> 32 </span><span class="lineCov"> 28 : if (ts_user_voc >= sourceTimestamp() && ts_user_idx >= sourceTimestamp())</span> +<span class="lineNum"> 33 </span><span class="lineCov"> 28 : return false;</span> +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : // If there are user sources, then we cannot use the system index +<span class="lineNum"> 36 </span><span class="lineNoCov"> 0 : if (ts_user_src > 0)</span> +<span class="lineNum"> 37 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : // If there are no user sources, then we can fallback on the system +<span class="lineNum"> 40 </span> : // indexes in case the user indexes are not up to date +<span class="lineNum"> 41 </span><span class="lineNoCov"> 0 : if (ts_main_voc >= sourceTimestamp() && ts_main_idx >= sourceTimestamp())</span> +<span class="lineNum"> 42 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 45 </span> : } +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span><span class="lineCov"> 31 : bool VocabularyIndexer::userIndexIsRedundant() const</span> +<span class="lineNum"> 48 </span> : { +<span class="lineNum"> 49 </span> : // If there is no user index, then it is not redundant +<span class="lineNum"> 50 </span><span class="lineCov"> 31 : if (ts_user_voc == 0 && ts_user_idx == 0)</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 2 : return false;</span> +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : // If we have user sources, then the user index is never redundant +<span class="lineNum"> 54 </span><span class="lineCov"> 29 : if (ts_user_src > 0)</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 29 : return false;</span> +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span> : // If the system index is not up to date, then the user index is not +<span class="lineNum"> 58 </span> : // redundant +<span class="lineNum"> 59 </span><span class="lineNoCov"> 0 : if (ts_main_voc < sourceTimestamp() || ts_main_idx < sourceTimestamp())</span> +<span class="lineNum"> 60 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 63 </span> : } +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span><span class="lineCov"> 3 : bool VocabularyIndexer::rebuild(const std::string& vocfname, const std::string& idxfname)</span> +<span class="lineNum"> 66 </span> : { +<span class="lineNum"> 67 </span> : using namespace tagcoll; +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span> : // Create the master MMap index +<span class="lineNum"> 70 </span><span class="lineCov"> 3 : diskindex::MasterMMapIndexer master(idxfname);</span> +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span> : // Read and merge vocabulary data +<span class="lineNum"> 73 </span><span class="lineCov"> 3 : VocabularyMerger voc;</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 3 : mainSource.readVocabularies(voc);</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 3 : userSource.readVocabularies(voc);</span> +<span class="lineNum"> 76 </span> : +<span class="lineNum"> 77 </span><span class="lineCov"> 3 : if (voc.empty())</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 2 : return false;</span> +<span class="lineNum"> 79 </span> : //throw wibble::exception::Consistency("Reading debtags sources from " + mainSource.path() + " and " + userSource.path(), "Unable to find any vocabulary data"); +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span> : // Write the merged vocabulary, and generate tag and facet IDs as a side +<span class="lineNum"> 82 </span> : // effect +<span class="lineNum"> 83 </span><span class="lineCov"> 1 : std::string tmpvocfname = vocfname + ".tmp";</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 1 : voc.write(tmpvocfname);</span> +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span> : // Add the indexed vocabulary data to the master index +<span class="lineNum"> 87 </span> : // 0: facets +<span class="lineNum"> 88 </span><span class="lineCov"> 1 : master.append(voc.facetIndexer());</span> +<span class="lineNum"> 89 </span> : // 1: tags +<span class="lineNum"> 90 </span><span class="lineCov"> 1 : master.append(voc.tagIndexer());</span> +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span><span class="lineCov"> 1 : if (rename(tmpvocfname.c_str(), vocfname.c_str()) == -1)</span> +<span class="lineNum"> 93 </span><span class="lineNoCov"> 0 : throw wibble::exception::System("renaming " + tmpvocfname + " to " + vocfname);</span> +<span class="lineNum"> 94 </span> : +<span class="lineNum"> 95 </span><span class="lineCov"> 1 : master.commit();</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 1 : return true;</span> +<span class="lineNum"> 97 </span> : } +<span class="lineNum"> 98 </span> : +<span class="lineNum"> 99 </span><span class="lineCov"> 31 : bool VocabularyIndexer::rebuildIfNeeded()</span> +<span class="lineNum"> 100 </span> : { +<span class="lineNum"> 101 </span><span class="lineCov"> 31 : if (needsRebuild())</span> +<span class="lineNum"> 102 </span> : { +<span class="lineNum"> 103 </span> : // Decide if we rebuild the user index or the system index +<span class="lineNum"> 104 </span> : +<span class="lineNum"> 105 </span><span class="lineCov"> 3 : if (ts_user_src == 0 && Path::access(Path::debtagsIndexDir(), W_OK) == 0)</span> +<span class="lineNum"> 106 </span> : { +<span class="lineNum"> 107 </span> : // There are no user sources and we can write to the system index +<span class="lineNum"> 108 </span> : // directory: rebuild the system index +<span class="lineNum"> 109 </span><span class="lineCov"> 1 : if (!rebuild(Path::vocabulary(), Path::vocabularyIndex()))</span> +<span class="lineNum"> 110 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 111 </span><span class="lineNoCov"> 0 : ts_main_voc = Path::timestamp(Path::vocabulary());</span> +<span class="lineNum"> 112 </span><span class="lineNoCov"> 0 : ts_main_idx = Path::timestamp(Path::vocabularyIndex());</span> +<span class="lineNum"> 113 </span><span class="lineNoCov"> 0 : if (Path::vocabulary() == Path::userVocabulary())</span> +<span class="lineNum"> 114 </span><span class="lineNoCov"> 0 : ts_user_voc = ts_main_voc;</span> +<span class="lineNum"> 115 </span><span class="lineNoCov"> 0 : if (Path::vocabularyIndex() == Path::userVocabularyIndex())</span> +<span class="lineNum"> 116 </span><span class="lineNoCov"> 0 : ts_user_idx = ts_main_idx;</span> +<span class="lineNum"> 117 </span> : } else { +<span class="lineNum"> 118 </span><span class="lineCov"> 2 : wibble::sys::fs::mkFilePath(Path::userVocabulary());</span> +<span class="lineNum"> 119 </span><span class="lineCov"> 4 : wibble::sys::fs::mkFilePath(Path::userVocabularyIndex());</span> +<span class="lineNum"> 120 </span><span class="lineCov"> 4 : if (!rebuild(Path::userVocabulary(), Path::userVocabularyIndex()))</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 122 </span><span class="lineCov"> 1 : ts_user_voc = Path::timestamp(Path::userVocabulary());</span> +<span class="lineNum"> 123 </span><span class="lineCov"> 2 : ts_user_idx = Path::timestamp(Path::userVocabularyIndex());</span> +<span class="lineNum"> 124 </span> : } +<span class="lineNum"> 125 </span><span class="lineCov"> 1 : return true;</span> +<span class="lineNum"> 126 </span> : } +<span class="lineNum"> 127 </span><span class="lineCov"> 28 : return false;</span> +<span class="lineNum"> 128 </span> : } +<span class="lineNum"> 129 </span> : +<span class="lineNum"> 130 </span><span class="lineCov"> 31 : bool VocabularyIndexer::deleteRedundantUserIndex()</span> +<span class="lineNum"> 131 </span> : { +<span class="lineNum"> 132 </span><span class="lineCov"> 31 : if (userIndexIsRedundant())</span> +<span class="lineNum"> 133 </span> : { +<span class="lineNum"> 134 </span> : // Delete the user indexes if they exist +<span class="lineNum"> 135 </span><span class="lineNoCov"> 0 : if (Path::vocabulary() != Path::userVocabulary())</span> +<span class="lineNum"> 136 </span> : { +<span class="lineNum"> 137 </span><span class="lineNoCov"> 0 : unlink(Path::userVocabulary().c_str());</span> +<span class="lineNum"> 138 </span><span class="lineNoCov"> 0 : ts_user_voc = 0;</span> +<span class="lineNum"> 139 </span> : } +<span class="lineNum"> 140 </span><span class="lineNoCov"> 0 : if (Path::vocabularyIndex() != Path::userVocabularyIndex())</span> +<span class="lineNum"> 141 </span> : { +<span class="lineNum"> 142 </span><span class="lineNoCov"> 0 : unlink(Path::userVocabularyIndex().c_str());</span> +<span class="lineNum"> 143 </span><span class="lineNoCov"> 0 : ts_user_idx = 0;</span> +<span class="lineNum"> 144 </span> : } +<span class="lineNum"> 145 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 146 </span> : } +<span class="lineNum"> 147 </span><span class="lineCov"> 31 : return false;</span> +<span class="lineNum"> 148 </span> : } +<span class="lineNum"> 149 </span> : +<span class="lineNum"> 150 </span><span class="lineCov"> 31 : bool VocabularyIndexer::getUpToDateVocabulary(std::string& vocfname, std::string& idxfname)</span> +<span class="lineNum"> 151 </span> : { +<span class="lineNum"> 152 </span> : // If there are no indexes of any kind, then we have nothing to return +<span class="lineNum"> 153 </span><span class="lineCov"> 31 : if (ts_user_voc == 0 && ts_user_idx == 0 && ts_main_voc == 0 && ts_main_idx == 0)</span> +<span class="lineNum"> 154 </span><span class="lineCov"> 2 : return false;</span> +<span class="lineNum"> 155 </span> : +<span class="lineNum"> 156 </span> : // If the user index is up to date, use it +<span class="lineNum"> 157 </span><span class="lineCov"> 29 : if (ts_user_voc >= sourceTimestamp() &&</span> +<span class="lineNum"> 158 </span> : ts_user_idx >= sourceTimestamp()) +<span class="lineNum"> 159 </span> : { +<span class="lineNum"> 160 </span><span class="lineCov"> 29 : vocfname = Path::userVocabulary();</span> +<span class="lineNum"> 161 </span><span class="lineCov"> 58 : idxfname = Path::userVocabularyIndex();</span> +<span class="lineNum"> 162 </span><span class="lineCov"> 29 : return true;</span> +<span class="lineNum"> 163 </span> : } +<span class="lineNum"> 164 </span> : +<span class="lineNum"> 165 </span> : // If the user index is not up to date and we have user sources, we cannot +<span class="lineNum"> 166 </span> : // fall back to the system index +<span class="lineNum"> 167 </span><span class="lineNoCov"> 0 : if (ts_user_src != 0)</span> +<span class="lineNum"> 168 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 169 </span> : +<span class="lineNum"> 170 </span> : // Fallback to the system index +<span class="lineNum"> 171 </span><span class="lineNoCov"> 0 : if (ts_main_voc >= sourceTimestamp() &&</span> +<span class="lineNum"> 172 </span> : ts_main_idx >= sourceTimestamp()) +<span class="lineNum"> 173 </span> : { +<span class="lineNum"> 174 </span><span class="lineNoCov"> 0 : vocfname = Path::vocabulary();</span> +<span class="lineNum"> 175 </span><span class="lineNoCov"> 0 : idxfname = Path::vocabularyIndex();</span> +<span class="lineNum"> 176 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 177 </span> : } +<span class="lineNum"> 178 </span> : +<span class="lineNum"> 179 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 180 </span> : } +<span class="lineNum"> 181 </span> : +<span class="lineNum"> 182 </span> : +<span class="lineNum"> 183 </span><span class="lineCov"> 31 : bool VocabularyIndexer::obtainWorkingVocabulary(std::string& vocfname, std::string& idxfname)</span> +<span class="lineNum"> 184 </span> : { +<span class="lineNum"> 185 </span><span class="lineCov"> 31 : VocabularyIndexer v;</span> +<span class="lineNum"> 186 </span> : +<span class="lineNum"> 187 </span><span class="lineCov"> 31 : v.rebuildIfNeeded();</span> +<span class="lineNum"> 188 </span><span class="lineCov"> 31 : v.deleteRedundantUserIndex();</span> +<span class="lineNum"> 189 </span><span class="lineCov"> 31 : return v.getUpToDateVocabulary(vocfname, idxfname);</span> +<span class="lineNum"> 190 </span> : } +<span class="lineNum"> 191 </span> : +<span class="lineNum"> 192 </span> : } +<span class="lineNum"> 193 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 194 </span> : +<span class="lineNum"> 195 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/vocabularyindexer.h.gcov.html b/rep/ept/debtags/maint/vocabularyindexer.h.gcov.html new file mode 100644 index 0000000..5e8b99f --- /dev/null +++ b/rep/ept/debtags/maint/vocabularyindexer.h.gcov.html @@ -0,0 +1,183 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/vocabularyindexer.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - vocabularyindexer.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">2</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">2</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_DEBTAGS_VOCABULARYINDEXER_H +<span class="lineNum"> 2 </span> : #define EPT_DEBTAGS_VOCABULARYINDEXER_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** @file +<span class="lineNum"> 5 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 6 </span> : * Debtags vocabulary indexer +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2003,2004,2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 13 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 14 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 15 </span> : * (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <ept/debtags/maint/sourcedir.h> +<span class="lineNum"> 28 </span> : #include <string> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : namespace ept { +<span class="lineNum"> 31 </span> : namespace debtags { +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : /** +<span class="lineNum"> 34 </span> : * Infrastructure used to rebuild the vocabulary index when needed +<span class="lineNum"> 35 </span> : */ +<span class="lineNum"> 36 </span> : struct VocabularyIndexer +<span class="lineNum"> 37 </span><span class="lineCov"> 31 : {</span> +<span class="lineNum"> 38 </span> : SourceDir mainSource; +<span class="lineNum"> 39 </span> : SourceDir userSource; +<span class="lineNum"> 40 </span> : time_t ts_main_src; +<span class="lineNum"> 41 </span> : time_t ts_user_src; +<span class="lineNum"> 42 </span> : time_t ts_main_voc; +<span class="lineNum"> 43 </span> : time_t ts_main_idx; +<span class="lineNum"> 44 </span> : time_t ts_user_voc; +<span class="lineNum"> 45 </span> : time_t ts_user_idx; +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span> : /** +<span class="lineNum"> 48 </span> : * Get the timestamp of the newest vocabulary data source +<span class="lineNum"> 49 </span> : */ +<span class="lineNum"> 50 </span><span class="lineCov"> 114 : time_t sourceTimestamp() const { return ts_main_src < ts_user_src ? ts_user_src : ts_main_src; }</span> +<span class="lineNum"> 51 </span> : /** +<span class="lineNum"> 52 </span> : * Return true if the vocabulary index needs rebuilding +<span class="lineNum"> 53 </span> : */ +<span class="lineNum"> 54 </span> : bool needsRebuild() const; +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span> : /** +<span class="lineNum"> 57 </span> : * Rebuild the vocabulary index +<span class="lineNum"> 58 </span> : * @param vocfname +<span class="lineNum"> 59 </span> : * Full pathname of the merged vocabulary to create +<span class="lineNum"> 60 </span> : * @param idxfname +<span class="lineNum"> 61 </span> : * Full pathname of the vocabulary index to create +<span class="lineNum"> 62 </span> : */ +<span class="lineNum"> 63 </span> : bool rebuild(const std::string& vocfname, const std::string& idxfname); +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span> : /** +<span class="lineNum"> 66 </span> : * Rebuild the vocabulary if needed +<span class="lineNum"> 67 </span> : */ +<span class="lineNum"> 68 </span> : bool rebuildIfNeeded(); +<span class="lineNum"> 69 </span> : +<span class="lineNum"> 70 </span> : /** +<span class="lineNum"> 71 </span> : * Get the names of the merged vocabulary and vocabulary index that can be +<span class="lineNum"> 72 </span> : * used to access Debtags vocabulary data. +<span class="lineNum"> 73 </span> : * +<span class="lineNum"> 74 </span> : * The system or the user index will be returned according to which one is +<span class="lineNum"> 75 </span> : * up to date. +<span class="lineNum"> 76 </span> : */ +<span class="lineNum"> 77 </span> : bool getUpToDateVocabulary(std::string& vocfname, std::string& idxfname); +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span> : /** +<span class="lineNum"> 80 </span> : * Returns true if the index in the user home directory is redundant and +<span class="lineNum"> 81 </span> : * can be deleted. +<span class="lineNum"> 82 </span> : * +<span class="lineNum"> 83 </span> : * The user index is redundant if the system index is up to date. +<span class="lineNum"> 84 </span> : */ +<span class="lineNum"> 85 </span> : bool userIndexIsRedundant() const; +<span class="lineNum"> 86 </span> : +<span class="lineNum"> 87 </span> : /** +<span class="lineNum"> 88 </span> : * Deletes the user index if it is redundant +<span class="lineNum"> 89 </span> : */ +<span class="lineNum"> 90 </span> : bool deleteRedundantUserIndex(); +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span> : /** +<span class="lineNum"> 93 </span> : * Rescan the various timestamps +<span class="lineNum"> 94 </span> : */ +<span class="lineNum"> 95 </span> : void rescan(); +<span class="lineNum"> 96 </span> : +<span class="lineNum"> 97 </span> : VocabularyIndexer(); +<span class="lineNum"> 98 </span> : +<span class="lineNum"> 99 </span> : /** +<span class="lineNum"> 100 </span> : * Get the names of the merged vocabulary and vocabulary index that can be +<span class="lineNum"> 101 </span> : * used to access Debtags vocabulary data. +<span class="lineNum"> 102 </span> : * +<span class="lineNum"> 103 </span> : * The system or the user index will be returned according to which one is +<span class="lineNum"> 104 </span> : * up to date. +<span class="lineNum"> 105 </span> : * +<span class="lineNum"> 106 </span> : * The files will be built or rebuilt if they are missing or outdated. +<span class="lineNum"> 107 </span> : */ +<span class="lineNum"> 108 </span> : static bool obtainWorkingVocabulary(std::string& vocfname, std::string& idxfname); +<span class="lineNum"> 109 </span> : }; +<span class="lineNum"> 110 </span> : +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span> : } +<span class="lineNum"> 113 </span> : } +<span class="lineNum"> 114 </span> : +<span class="lineNum"> 115 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 116 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/vocabularymerger.cc.gcov.html b/rep/ept/debtags/maint/vocabularymerger.cc.gcov.html new file mode 100644 index 0000000..71763e0 --- /dev/null +++ b/rep/ept/debtags/maint/vocabularymerger.cc.gcov.html @@ -0,0 +1,453 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/vocabularymerger.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - vocabularymerger.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">181</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">81.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">147</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Merge different vocabularies together and create the tag and facet indexes +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * Copyright (C) 2003-2006 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 5 </span> : * +<span class="lineNum"> 6 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 7 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 8 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 9 </span> : * (at your option) any later version. +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 12 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 13 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 14 </span> : * GNU General Public License for more details. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 17 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 18 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 19 </span> : */ +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : #include <ept/debtags/maint/vocabularymerger.h> +<span class="lineNum"> 23 </span> : #include <ept/debtags/maint/debdbparser.h> +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <cassert> +<span class="lineNum"> 26 </span> : #include <cstring> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : using namespace std; +<span class="lineNum"> 29 </span> : using namespace tagcoll; +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace debtags { +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span><span class="lineCov"> 1432 : static void writeDebStyleField(FILE* out, const string& name, const string& val) throw ()</span> +<span class="lineNum"> 35 </span> : { +<span class="lineNum"> 36 </span><span class="lineCov"> 1432 : fprintf(out, "%s: ", name.c_str());</span> +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span> : // Properly escape newlines +<span class="lineNum"> 39 </span><span class="lineCov"> 1432 : bool was_nl = false;</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 56225 : for (string::const_iterator s = val.begin(); s != val.end(); s++)</span> +<span class="lineNum"> 41 </span><span class="lineCov"> 54793 : if (was_nl)</span> +<span class="lineNum"> 42 </span> : // \n\n -> \n .\n +<span class="lineNum"> 43 </span><span class="lineCov"> 738 : if (*s == '\n')</span> +<span class="lineNum"> 44 </span> : { +<span class="lineNum"> 45 </span><span class="lineCov"> 120 : fputc(' ', out);</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 120 : fputc('.', out);</span> +<span class="lineNum"> 47 </span><span class="lineCov"> 120 : fputc(*s, out);</span> +<span class="lineNum"> 48 </span> : } +<span class="lineNum"> 49 </span> : // \n([^ \t]) -> \n \1 +<span class="lineNum"> 50 </span><span class="lineCov"> 618 : else if (*s != ' ' && *s != '\t')</span> +<span class="lineNum"> 51 </span> : { +<span class="lineNum"> 52 </span><span class="lineCov"> 618 : fputc(' ', out);</span> +<span class="lineNum"> 53 </span><span class="lineCov"> 618 : fputc(*s, out);</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 618 : was_nl = false;</span> +<span class="lineNum"> 55 </span> : } +<span class="lineNum"> 56 </span> : // \n[ \t] goes unchanged +<span class="lineNum"> 57 </span> : else +<span class="lineNum"> 58 </span> : { +<span class="lineNum"> 59 </span><span class="lineNoCov"> 0 : fputc(*s, out);</span> +<span class="lineNum"> 60 </span><span class="lineNoCov"> 0 : was_nl = false;</span> +<span class="lineNum"> 61 </span> : } +<span class="lineNum"> 62 </span> : else +<span class="lineNum"> 63 </span><span class="lineCov"> 54055 : if (*s == '\n')</span> +<span class="lineNum"> 64 </span> : { +<span class="lineNum"> 65 </span><span class="lineCov"> 618 : fputc(*s, out);</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 618 : was_nl = true;</span> +<span class="lineNum"> 67 </span> : } +<span class="lineNum"> 68 </span> : else +<span class="lineNum"> 69 </span><span class="lineCov"> 53437 : fputc(*s, out);</span> +<span class="lineNum"> 70 </span> : +<span class="lineNum"> 71 </span><span class="lineCov"> 1432 : fputc('\n', out);</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 1432 : }</span> +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span><span class="lineCov"> 1865 : VocabularyMerger::TagData& VocabularyMerger::FacetData::obtainTag(const std::string& name)</span> +<span class="lineNum"> 75 </span> : { +<span class="lineNum"> 76 </span><span class="lineCov"> 1865 : std::map<std::string, TagData>::iterator i = tags.find(name);</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 1865 : if (i == tags.end())</span> +<span class="lineNum"> 78 </span> : { +<span class="lineNum"> 79 </span> : // Create the tag if it's missing +<span class="lineNum"> 80 </span><span class="lineCov"> 1245 : pair<std::map<std::string, TagData>::iterator, bool> res = tags.insert(make_pair<std::string, TagData>(name, TagData()));</span> +<span class="lineNum"> 81 </span><span class="lineCov"> 1245 : i = res.first;</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 1245 : i->second.name = name;</span> +<span class="lineNum"> 83 </span> : } +<span class="lineNum"> 84 </span><span class="lineCov"> 1865 : return i->second;</span> +<span class="lineNum"> 85 </span> : } +<span class="lineNum"> 86 </span> : +<span class="lineNum"> 87 </span><span class="lineCov"> 1953 : VocabularyMerger::FacetData& VocabularyMerger::obtainFacet(const std::string& name)</span> +<span class="lineNum"> 88 </span> : { +<span class="lineNum"> 89 </span><span class="lineCov"> 1953 : std::map<std::string, FacetData>::iterator i = facets.find(name);</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 1953 : if (i == facets.end())</span> +<span class="lineNum"> 91 </span> : { +<span class="lineNum"> 92 </span> : // Create the facet if it's missing +<span class="lineNum"> 93 </span><span class="lineCov"> 62 : pair<std::map<std::string, FacetData>::iterator, bool> res = facets.insert(make_pair<std::string, FacetData>(name, FacetData()));</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 62 : i = res.first;</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 62 : i->second.name = name;</span> +<span class="lineNum"> 96 </span> : } +<span class="lineNum"> 97 </span><span class="lineCov"> 1953 : return i->second;</span> +<span class="lineNum"> 98 </span> : } +<span class="lineNum"> 99 </span> : +<span class="lineNum"> 100 </span><span class="lineCov"> 1865 : VocabularyMerger::TagData& VocabularyMerger::obtainTag(const std::string& fullname)</span> +<span class="lineNum"> 101 </span> : { +<span class="lineNum"> 102 </span><span class="lineCov"> 1865 : size_t p = fullname.find("::");</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 1865 : if (p == string::npos)</span> +<span class="lineNum"> 104 </span> : { +<span class="lineNum"> 105 </span><span class="lineCov"> 28 : FacetData& facet = obtainFacet("legacy");</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 28 : return facet.obtainTag(fullname);</span> +<span class="lineNum"> 107 </span> : } else { +<span class="lineNum"> 108 </span><span class="lineCov"> 1837 : FacetData& facet = obtainFacet(fullname.substr(0, p));</span> +<span class="lineNum"> 109 </span><span class="lineCov"> 3674 : return facet.obtainTag(fullname.substr(p + 2));</span> +<span class="lineNum"> 110 </span> : } +<span class="lineNum"> 111 </span> : } +<span class="lineNum"> 112 </span> : +<span class="lineNum"> 113 </span> : +<span class="lineNum"> 114 </span><span class="lineCov"> 7 : void VocabularyMerger::read(tagcoll::input::Input& input)</span> +<span class="lineNum"> 115 </span> : { +<span class="lineNum"> 116 </span><span class="lineCov"> 7 : DebDBParser parser(input);</span> +<span class="lineNum"> 117 </span><span class="lineCov"> 7 : DebDBParser::Record record;</span> +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span><span class="lineCov"> 1967 : while (parser.nextRecord(record))</span> +<span class="lineNum"> 120 </span> : { +<span class="lineNum"> 121 </span><span class="lineCov"> 1953 : DebDBParser::Record::const_iterator fi = record.find("Facet");</span> +<span class="lineNum"> 122 </span><span class="lineCov"> 3906 : DebDBParser::Record::const_iterator ti = record.find("Tag");</span> +<span class="lineNum"> 123 </span><span class="lineCov"> 3906 : if (fi != record.end())</span> +<span class="lineNum"> 124 </span> : { +<span class="lineNum"> 125 </span> : // Get the facet record +<span class="lineNum"> 126 </span><span class="lineCov"> 88 : FacetData& facet = obtainFacet(fi->second);</span> +<span class="lineNum"> 127 </span> : //fprintf(stderr, "Read facet@%d %.*s\n", parser.lineNumber(), PFSTR(facet.name)); +<span class="lineNum"> 128 </span><span class="lineCov"> 88 : assert(facet.name == fi->second);</span> +<span class="lineNum"> 129 </span> : +<span class="lineNum"> 130 </span> : // Merge the data +<span class="lineNum"> 131 </span><span class="lineCov"> 416 : for (DebDBParser::Record::const_iterator i = record.begin();</span> +<span class="lineNum"> 132 </span> : i != record.end(); i++) +<span class="lineNum"> 133 </span><span class="lineCov"> 328 : if (i->first != "Facet")</span> +<span class="lineNum"> 134 </span><span class="lineCov"> 240 : facet[i->first] = i->second;</span> +<span class="lineNum"> 135 </span> : } +<span class="lineNum"> 136 </span><span class="lineCov"> 1865 : else if (ti != record.end())</span> +<span class="lineNum"> 137 </span> : { +<span class="lineNum"> 138 </span> : // Get the tag record +<span class="lineNum"> 139 </span><span class="lineCov"> 1865 : TagData& tag = obtainTag(ti->second);</span> +<span class="lineNum"> 140 </span> : //fprintf(stderr, "Read tag@%d %.*s\n", parser.lineNumber(), PFSTR(tag.name)); +<span class="lineNum"> 141 </span> : //assert(tag.name == ti->second); +<span class="lineNum"> 142 </span> : +<span class="lineNum"> 143 </span> : // Merge the data +<span class="lineNum"> 144 </span><span class="lineCov"> 5796 : for (DebDBParser::Record::const_iterator i = record.begin();</span> +<span class="lineNum"> 145 </span> : i != record.end(); i++) +<span class="lineNum"> 146 </span><span class="lineCov"> 3931 : if (i->first != "Tag")</span> +<span class="lineNum"> 147 </span><span class="lineCov"> 2066 : tag[i->first] = i->second;</span> +<span class="lineNum"> 148 </span> : } +<span class="lineNum"> 149 </span> : else +<span class="lineNum"> 150 </span> : { +<span class="lineNum"> 151 </span> : fprintf(stderr, "%s:%d: Skipping record without Tag or Facet field\n", +<span class="lineNum"> 152 </span><span class="lineNoCov"> 0 : input.fileName().c_str(), input.lineNumber());</span> +<span class="lineNum"> 153 </span> : } +<span class="lineNum"> 154 </span><span class="lineCov"> 7 : }</span> +<span class="lineNum"> 155 </span><span class="lineCov"> 7 : }</span> +<span class="lineNum"> 156 </span> : +<span class="lineNum"> 157 </span><span class="lineNoCov"> 0 : bool VocabularyMerger::hasTag(const std::string& fullname) const</span> +<span class="lineNum"> 158 </span> : { +<span class="lineNum"> 159 </span><span class="lineNoCov"> 0 : size_t p = fullname.find("::");</span> +<span class="lineNum"> 160 </span><span class="lineNoCov"> 0 : std::string facetName;</span> +<span class="lineNum"> 161 </span><span class="lineNoCov"> 0 : std::string tagName;</span> +<span class="lineNum"> 162 </span><span class="lineNoCov"> 0 : if (p == string::npos)</span> +<span class="lineNum"> 163 </span> : { +<span class="lineNum"> 164 </span><span class="lineNoCov"> 0 : facetName = "legacy";</span> +<span class="lineNum"> 165 </span><span class="lineNoCov"> 0 : tagName = fullname;</span> +<span class="lineNum"> 166 </span> : } else { +<span class="lineNum"> 167 </span><span class="lineNoCov"> 0 : facetName = fullname.substr(0, p);</span> +<span class="lineNum"> 168 </span><span class="lineNoCov"> 0 : tagName = fullname.substr(p + 2);</span> +<span class="lineNum"> 169 </span> : } +<span class="lineNum"> 170 </span> : +<span class="lineNum"> 171 </span><span class="lineNoCov"> 0 : std::map<std::string, FacetData>::const_iterator i = facets.find(facetName);</span> +<span class="lineNum"> 172 </span><span class="lineNoCov"> 0 : if (i == facets.end())</span> +<span class="lineNum"> 173 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 174 </span><span class="lineNoCov"> 0 : return i->second.tags.find(tagName) != i->second.tags.end();</span> +<span class="lineNum"> 175 </span> : } +<span class="lineNum"> 176 </span> : +<span class="lineNum"> 177 </span><span class="lineNoCov"> 0 : int VocabularyMerger::tagID(const std::string& fullname) const</span> +<span class="lineNum"> 178 </span> : { +<span class="lineNum"> 179 </span><span class="lineNoCov"> 0 : size_t p = fullname.find("::");</span> +<span class="lineNum"> 180 </span><span class="lineNoCov"> 0 : std::string facetName;</span> +<span class="lineNum"> 181 </span><span class="lineNoCov"> 0 : std::string tagName;</span> +<span class="lineNum"> 182 </span><span class="lineNoCov"> 0 : if (p == string::npos)</span> +<span class="lineNum"> 183 </span> : { +<span class="lineNum"> 184 </span><span class="lineNoCov"> 0 : facetName = "legacy";</span> +<span class="lineNum"> 185 </span><span class="lineNoCov"> 0 : tagName = fullname;</span> +<span class="lineNum"> 186 </span> : } else { +<span class="lineNum"> 187 </span><span class="lineNoCov"> 0 : facetName = fullname.substr(0, p);</span> +<span class="lineNum"> 188 </span><span class="lineNoCov"> 0 : tagName = fullname.substr(p + 2);</span> +<span class="lineNum"> 189 </span> : } +<span class="lineNum"> 190 </span> : +<span class="lineNum"> 191 </span><span class="lineNoCov"> 0 : std::map<std::string, FacetData>::const_iterator i = facets.find(facetName);</span> +<span class="lineNum"> 192 </span><span class="lineNoCov"> 0 : if (i == facets.end())</span> +<span class="lineNum"> 193 </span><span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 194 </span><span class="lineNoCov"> 0 : std::map<std::string, TagData>::const_iterator j = i->second.tags.find(tagName);</span> +<span class="lineNum"> 195 </span><span class="lineNoCov"> 0 : if (j == i->second.tags.end())</span> +<span class="lineNum"> 196 </span><span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 197 </span><span class="lineNoCov"> 0 : return j->second.id;</span> +<span class="lineNum"> 198 </span> : } +<span class="lineNum"> 199 </span> : +<span class="lineNum"> 200 </span><span class="lineCov"> 1 : std::set<std::string> VocabularyMerger::tagNames() const</span> +<span class="lineNum"> 201 </span> : { +<span class="lineNum"> 202 </span><span class="lineCov"> 1 : set<string> res;</span> +<span class="lineNum"> 203 </span><span class="lineCov"> 30 : for (std::map<std::string, FacetData>::const_iterator f = facets.begin(); f != facets.end(); f++)</span> +<span class="lineNum"> 204 </span><span class="lineCov"> 649 : for (std::map<std::string, TagData>::const_iterator t = f->second.tags.begin();</span> +<span class="lineNum"> 205 </span> : t != f->second.tags.end(); t++) +<span class="lineNum"> 206 </span><span class="lineCov"> 620 : res.insert(f->first + "::" + t->first);</span> +<span class="lineNum"> 207 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 208 </span> : } +<span class="lineNum"> 209 </span> : +<span class="lineNum"> 210 </span><span class="lineCov"> 4 : void VocabularyMerger::write(const std::string& fname)</span> +<span class="lineNum"> 211 </span> : { +<span class="lineNum"> 212 </span><span class="lineCov"> 4 : FILE* out = fopen(fname.c_str(), "wt");</span> +<span class="lineNum"> 213 </span><span class="lineCov"> 4 : if (!out)</span> +<span class="lineNum"> 214 </span><span class="lineNoCov"> 0 : throw wibble::exception::File(fname, "cept_debtags_vocabularymerger:reating file ");</span> +<span class="lineNum"> 215 </span><span class="lineCov"> 4 : write(out);</span> +<span class="lineNum"> 216 </span><span class="lineCov"> 4 : fclose(out);</span> +<span class="lineNum"> 217 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 218 </span> : +<span class="lineNum"> 219 </span><span class="lineCov"> 4 : void VocabularyMerger::write(FILE* out)</span> +<span class="lineNum"> 220 </span> : { +<span class="lineNum"> 221 </span><span class="lineCov"> 4 : long start_ofs = ftell(out);</span> +<span class="lineNum"> 222 </span><span class="lineCov"> 4 : int facetid = 0;</span> +<span class="lineNum"> 223 </span><span class="lineCov"> 4 : int tagid = 0;</span> +<span class="lineNum"> 224 </span> : +<span class="lineNum"> 225 </span> : //fprintf(stderr, "Write\n"); +<span class="lineNum"> 226 </span><span class="lineCov"> 37 : for (std::map<std::string, FacetData>::iterator f = facets.begin(); f != facets.end(); f++)</span> +<span class="lineNum"> 227 </span> : { +<span class="lineNum"> 228 </span><span class="lineCov"> 33 : f->second.id = facetid++;</span> +<span class="lineNum"> 229 </span> : //fprintf(stderr, "Writing facet %.*s\n", PFSTR(f->first)); +<span class="lineNum"> 230 </span><span class="lineCov"> 33 : f->second.ofs = ftell(out) - start_ofs;</span> +<span class="lineNum"> 231 </span><span class="lineCov"> 33 : writeDebStyleField(out, "Facet", f->first);</span> +<span class="lineNum"> 232 </span><span class="lineCov"> 115 : for (std::map<std::string, std::string>::const_iterator j = f->second.begin();</span> +<span class="lineNum"> 233 </span> : j != f->second.end(); j++) +<span class="lineNum"> 234 </span><span class="lineCov"> 82 : writeDebStyleField(out, j->first, j->second);</span> +<span class="lineNum"> 235 </span><span class="lineCov"> 33 : fputc('\n', out);</span> +<span class="lineNum"> 236 </span><span class="lineCov"> 33 : f->second.len = ftell(out) - f->second.ofs;</span> +<span class="lineNum"> 237 </span> : +<span class="lineNum"> 238 </span><span class="lineCov"> 658 : for (std::map<std::string, TagData>::iterator t = f->second.tags.begin();</span> +<span class="lineNum"> 239 </span> : t != f->second.tags.end(); t++) +<span class="lineNum"> 240 </span> : { +<span class="lineNum"> 241 </span><span class="lineCov"> 625 : t->second.id = tagid++;</span> +<span class="lineNum"> 242 </span> : //fprintf(stderr, "Writing tag %.*s\n", PFSTR(t->first)); +<span class="lineNum"> 243 </span><span class="lineCov"> 625 : t->second.ofs = ftell(out) - start_ofs;</span> +<span class="lineNum"> 244 </span><span class="lineCov"> 625 : writeDebStyleField(out, "Tag", f->first + "::" + t->first);</span> +<span class="lineNum"> 245 </span><span class="lineCov"> 1317 : for (std::map<std::string, std::string>::const_iterator j = t->second.begin();</span> +<span class="lineNum"> 246 </span> : j != t->second.end(); j++) +<span class="lineNum"> 247 </span><span class="lineCov"> 692 : writeDebStyleField(out, j->first, j->second);</span> +<span class="lineNum"> 248 </span><span class="lineCov"> 625 : fputc('\n', out);</span> +<span class="lineNum"> 249 </span><span class="lineCov"> 625 : t->second.len = ftell(out) - t->second.ofs;</span> +<span class="lineNum"> 250 </span> : } +<span class="lineNum"> 251 </span> : } +<span class="lineNum"> 252 </span> : +<span class="lineNum"> 253 </span><span class="lineCov"> 4 : tagCount = tagid;</span> +<span class="lineNum"> 254 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 255 </span> : +<span class="lineNum"> 256 </span> : +<span class="lineNum"> 257 </span><span class="lineCov"> 4 : int VocabularyMerger::FacetIndexer::encodedSize() const </span> +<span class="lineNum"> 258 </span> : { +<span class="lineNum"> 259 </span> : // First the main offset table +<span class="lineNum"> 260 </span><span class="lineCov"> 4 : int size = vm.facets.size() * sizeof(int);</span> +<span class="lineNum"> 261 </span> : +<span class="lineNum"> 262 </span><span class="lineCov"> 37 : for (std::map<std::string, FacetData>::const_iterator f = vm.facets.begin(); f != vm.facets.end(); f++)</span> +<span class="lineNum"> 263 </span> : { +<span class="lineNum"> 264 </span> : // offset of record in vocabulary +<span class="lineNum"> 265 </span> : // size of record in vocabulary +<span class="lineNum"> 266 </span> : // id of first tag +<span class="lineNum"> 267 </span> : // id of last tag +<span class="lineNum"> 268 </span> : // name (0-terminated) +<span class="lineNum"> 269 </span><span class="lineCov"> 33 : size += 4 * sizeof(int) + f->first.size() + 1;</span> +<span class="lineNum"> 270 </span> : +<span class="lineNum"> 271 </span> : // Align to int boundaries +<span class="lineNum"> 272 </span><span class="lineCov"> 33 : if ((size % sizeof(int)) != 0)</span> +<span class="lineNum"> 273 </span><span class="lineCov"> 25 : size = (size + sizeof(int)) / sizeof(int) * sizeof(int);</span> +<span class="lineNum"> 274 </span> : } +<span class="lineNum"> 275 </span> : +<span class="lineNum"> 276 </span><span class="lineCov"> 4 : return tagcoll::diskindex::MMap::align(size);</span> +<span class="lineNum"> 277 </span> : } +<span class="lineNum"> 278 </span> : +<span class="lineNum"> 279 </span><span class="lineCov"> 4 : void VocabularyMerger::FacetIndexer::encode(char* buf) const </span> +<span class="lineNum"> 280 </span> : { +<span class="lineNum"> 281 </span><span class="lineCov"> 4 : int pos = vm.facets.size() * sizeof(int);</span> +<span class="lineNum"> 282 </span> : +<span class="lineNum"> 283 </span><span class="lineCov"> 37 : for (std::map<std::string, FacetData>::const_iterator f = vm.facets.begin(); f != vm.facets.end(); f++)</span> +<span class="lineNum"> 284 </span> : { +<span class="lineNum"> 285 </span><span class="lineCov"> 33 : ((int*)buf)[f->second.id] = pos;</span> +<span class="lineNum"> 286 </span> : +<span class="lineNum"> 287 </span> : // offset of record in vocabulary +<span class="lineNum"> 288 </span><span class="lineCov"> 33 : *(int*)(buf+pos) = f->second.ofs;</span> +<span class="lineNum"> 289 </span><span class="lineCov"> 33 : pos += sizeof(int);</span> +<span class="lineNum"> 290 </span> : +<span class="lineNum"> 291 </span> : // size of record in vocabulary +<span class="lineNum"> 292 </span><span class="lineCov"> 33 : *(int*)(buf+pos) = f->second.len;</span> +<span class="lineNum"> 293 </span><span class="lineCov"> 33 : pos += sizeof(int);</span> +<span class="lineNum"> 294 </span> : +<span class="lineNum"> 295 </span><span class="lineCov"> 33 : if (f->second.tags.empty())</span> +<span class="lineNum"> 296 </span> : { +<span class="lineNum"> 297 </span> : // id of first tag +<span class="lineNum"> 298 </span><span class="lineCov"> 1 : *(int*)(buf+pos) = -1;</span> +<span class="lineNum"> 299 </span><span class="lineCov"> 1 : pos += sizeof(int);</span> +<span class="lineNum"> 300 </span> : +<span class="lineNum"> 301 </span> : // id of last tag +<span class="lineNum"> 302 </span><span class="lineCov"> 1 : *(int*)(buf+pos) = -1;</span> +<span class="lineNum"> 303 </span><span class="lineCov"> 1 : pos += sizeof(int);</span> +<span class="lineNum"> 304 </span> : } else { +<span class="lineNum"> 305 </span> : // id of first tag +<span class="lineNum"> 306 </span><span class="lineCov"> 32 : *(int*)(buf+pos) = f->second.tags.begin()->second.id;</span> +<span class="lineNum"> 307 </span><span class="lineCov"> 32 : pos += sizeof(int);</span> +<span class="lineNum"> 308 </span> : +<span class="lineNum"> 309 </span> : // id of last tag +<span class="lineNum"> 310 </span><span class="lineCov"> 32 : *(int*)(buf+pos) = f->second.tags.rbegin()->second.id;</span> +<span class="lineNum"> 311 </span><span class="lineCov"> 32 : pos += sizeof(int);</span> +<span class="lineNum"> 312 </span> : } +<span class="lineNum"> 313 </span> : +<span class="lineNum"> 314 </span> : // name (0-terminated) +<span class="lineNum"> 315 </span><span class="lineCov"> 33 : memcpy(buf + pos, f->first.c_str(), f->first.size() + 1);</span> +<span class="lineNum"> 316 </span><span class="lineCov"> 33 : pos += f->first.size() + 1;</span> +<span class="lineNum"> 317 </span> : +<span class="lineNum"> 318 </span> : // Align to int boundaries +<span class="lineNum"> 319 </span><span class="lineCov"> 33 : if ((pos % sizeof(int)) != 0)</span> +<span class="lineNum"> 320 </span><span class="lineCov"> 25 : pos = (pos + sizeof(int)) / sizeof(int) * sizeof(int);</span> +<span class="lineNum"> 321 </span> : } +<span class="lineNum"> 322 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 323 </span> : +<span class="lineNum"> 324 </span><span class="lineCov"> 4 : int VocabularyMerger::TagIndexer::encodedSize() const </span> +<span class="lineNum"> 325 </span> : { +<span class="lineNum"> 326 </span> : // First the main offset table +<span class="lineNum"> 327 </span><span class="lineCov"> 4 : int size = vm.tagCount * sizeof(int);</span> +<span class="lineNum"> 328 </span> : +<span class="lineNum"> 329 </span><span class="lineCov"> 37 : for (std::map<std::string, FacetData>::const_iterator f = vm.facets.begin(); f != vm.facets.end(); f++)</span> +<span class="lineNum"> 330 </span> : { +<span class="lineNum"> 331 </span><span class="lineCov"> 658 : for (std::map<std::string, TagData>::const_iterator t = f->second.tags.begin();</span> +<span class="lineNum"> 332 </span> : t != f->second.tags.end(); t++) +<span class="lineNum"> 333 </span> : { +<span class="lineNum"> 334 </span> : // offset of record in vocabulary +<span class="lineNum"> 335 </span> : // size of record in vocabulary +<span class="lineNum"> 336 </span> : // id of facet +<span class="lineNum"> 337 </span> : // name (0-terminated) +<span class="lineNum"> 338 </span><span class="lineCov"> 625 : size += 3 * sizeof(int) + f->first.size() + t->first.size() + 3;</span> +<span class="lineNum"> 339 </span> : +<span class="lineNum"> 340 </span> : // Align to int boundaries +<span class="lineNum"> 341 </span><span class="lineCov"> 625 : if ((size % sizeof(int)) != 0)</span> +<span class="lineNum"> 342 </span><span class="lineCov"> 479 : size = (size + sizeof(int)) / sizeof(int) * sizeof(int);</span> +<span class="lineNum"> 343 </span> : } +<span class="lineNum"> 344 </span> : } +<span class="lineNum"> 345 </span><span class="lineCov"> 4 : return tagcoll::diskindex::MMap::align(size);</span> +<span class="lineNum"> 346 </span> : } +<span class="lineNum"> 347 </span> : +<span class="lineNum"> 348 </span><span class="lineCov"> 4 : void VocabularyMerger::TagIndexer::encode(char* buf) const </span> +<span class="lineNum"> 349 </span> : { +<span class="lineNum"> 350 </span><span class="lineCov"> 4 : int pos = vm.tagCount * sizeof(int);</span> +<span class="lineNum"> 351 </span> : +<span class="lineNum"> 352 </span><span class="lineCov"> 37 : for (std::map<std::string, FacetData>::const_iterator f = vm.facets.begin(); f != vm.facets.end(); f++)</span> +<span class="lineNum"> 353 </span> : { +<span class="lineNum"> 354 </span><span class="lineCov"> 658 : for (std::map<std::string, TagData>::const_iterator t = f->second.tags.begin();</span> +<span class="lineNum"> 355 </span> : t != f->second.tags.end(); t++) +<span class="lineNum"> 356 </span> : { +<span class="lineNum"> 357 </span><span class="lineCov"> 625 : ((int*)buf)[t->second.id] = pos;</span> +<span class="lineNum"> 358 </span> : +<span class="lineNum"> 359 </span> : // offset of record in vocabulary +<span class="lineNum"> 360 </span><span class="lineCov"> 625 : *(int*)(buf+pos) = t->second.ofs;</span> +<span class="lineNum"> 361 </span><span class="lineCov"> 625 : pos += sizeof(int);</span> +<span class="lineNum"> 362 </span> : +<span class="lineNum"> 363 </span> : // size of record in vocabulary +<span class="lineNum"> 364 </span><span class="lineCov"> 625 : *(int*)(buf+pos) = t->second.len;</span> +<span class="lineNum"> 365 </span><span class="lineCov"> 625 : pos += sizeof(int);</span> +<span class="lineNum"> 366 </span> : +<span class="lineNum"> 367 </span> : // id of facet +<span class="lineNum"> 368 </span><span class="lineCov"> 625 : *(int*)(buf+pos) = f->second.id;</span> +<span class="lineNum"> 369 </span><span class="lineCov"> 625 : pos += sizeof(int);</span> +<span class="lineNum"> 370 </span> : +<span class="lineNum"> 371 </span> : // name (0-terminated) +<span class="lineNum"> 372 </span><span class="lineCov"> 625 : string name = f->first + "::" + t->first;</span> +<span class="lineNum"> 373 </span><span class="lineCov"> 625 : memcpy(buf + pos, name.c_str(), name.size() + 1);</span> +<span class="lineNum"> 374 </span><span class="lineCov"> 625 : pos += name.size() + 1;</span> +<span class="lineNum"> 375 </span> : +<span class="lineNum"> 376 </span> : // Align to int boundaries +<span class="lineNum"> 377 </span><span class="lineCov"> 625 : if ((pos % sizeof(int)) != 0)</span> +<span class="lineNum"> 378 </span><span class="lineCov"> 479 : pos = (pos + sizeof(int)) / sizeof(int) * sizeof(int);</span> +<span class="lineNum"> 379 </span> : } +<span class="lineNum"> 380 </span> : } +<span class="lineNum"> 381 </span><span class="lineCov"> 4 : }</span> +<span class="lineNum"> 382 </span> : +<span class="lineNum"> 383 </span> : } +<span class="lineNum"> 384 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 385 </span> : +<span class="lineNum"> 386 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/vocabularymerger.h.gcov.html b/rep/ept/debtags/maint/vocabularymerger.h.gcov.html new file mode 100644 index 0000000..da02c28 --- /dev/null +++ b/rep/ept/debtags/maint/vocabularymerger.h.gcov.html @@ -0,0 +1,224 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/vocabularymerger.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - vocabularymerger.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">13</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">13</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Merge different vocabularies together and create the tag and facet indexes +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * Copyright (C) 2003-2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 5 </span> : * +<span class="lineNum"> 6 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 7 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 8 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 9 </span> : * (at your option) any later version. +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 12 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 13 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 14 </span> : * GNU General Public License for more details. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 17 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 18 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 19 </span> : */ +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : #include <tagcoll/diskindex/mmap.h> +<span class="lineNum"> 22 </span> : #include <tagcoll/input/base.h> +<span class="lineNum"> 23 </span> : #include <string> +<span class="lineNum"> 24 </span> : #include <map> +<span class="lineNum"> 25 </span> : #include <set> +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #ifndef EPT_DEBTAGS_VOCABULARYMERGER_H +<span class="lineNum"> 28 </span> : #define EPT_DEBTAGS_VOCABULARYMERGER_H +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : namespace ept { +<span class="lineNum"> 31 </span> : namespace debtags { +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : class VocabularyMerger +<span class="lineNum"> 34 </span><span class="lineCov"> 7 : {</span> +<span class="lineNum"> 35 </span> : protected: +<span class="lineNum"> 36 </span> : class FacetIndexer : public tagcoll::diskindex::MMapIndexer +<span class="lineNum"> 37 </span> : { +<span class="lineNum"> 38 </span> : protected: +<span class="lineNum"> 39 </span> : VocabularyMerger& vm; +<span class="lineNum"> 40 </span> : public: +<span class="lineNum"> 41 </span><span class="lineCov"> 7 : FacetIndexer(VocabularyMerger& vm) : vm(vm) {}</span> +<span class="lineNum"> 42 </span><span class="lineCov"> 7 : virtual ~FacetIndexer() {}</span> +<span class="lineNum"> 43 </span> : virtual int encodedSize() const; +<span class="lineNum"> 44 </span> : virtual void encode(char* buf) const; +<span class="lineNum"> 45 </span> : }; +<span class="lineNum"> 46 </span> : class TagIndexer : public tagcoll::diskindex::MMapIndexer +<span class="lineNum"> 47 </span> : { +<span class="lineNum"> 48 </span> : protected: +<span class="lineNum"> 49 </span> : VocabularyMerger& vm; +<span class="lineNum"> 50 </span> : public: +<span class="lineNum"> 51 </span><span class="lineCov"> 7 : TagIndexer(VocabularyMerger& vm) : vm(vm) {}</span> +<span class="lineNum"> 52 </span><span class="lineCov"> 7 : virtual ~TagIndexer() {}</span> +<span class="lineNum"> 53 </span> : virtual int encodedSize() const; +<span class="lineNum"> 54 </span> : virtual void encode(char* buf) const; +<span class="lineNum"> 55 </span> : }; +<span class="lineNum"> 56 </span> : class TagData : public std::map<std::string, std::string> +<span class="lineNum"> 57 </span><span class="lineCov"> 8715 : {</span> +<span class="lineNum"> 58 </span> : public: +<span class="lineNum"> 59 </span> : std::string name; +<span class="lineNum"> 60 </span> : // Offset in the last written file (used for indexing) +<span class="lineNum"> 61 </span> : long ofs; +<span class="lineNum"> 62 </span> : int len; +<span class="lineNum"> 63 </span> : int id; +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span><span class="lineCov"> 1245 : TagData() : ofs(0), len(0) {}</span> +<span class="lineNum"> 66 </span> : }; +<span class="lineNum"> 67 </span> : class FacetData : public std::map<std::string, std::string> +<span class="lineNum"> 68 </span><span class="lineCov"> 434 : {</span> +<span class="lineNum"> 69 </span> : public: +<span class="lineNum"> 70 </span> : std::string name; +<span class="lineNum"> 71 </span> : std::map<std::string, TagData> tags; +<span class="lineNum"> 72 </span> : // Offset in the last written file (used for indexing) +<span class="lineNum"> 73 </span> : long ofs; +<span class="lineNum"> 74 </span> : int len; +<span class="lineNum"> 75 </span> : int id; +<span class="lineNum"> 76 </span> : +<span class="lineNum"> 77 </span><span class="lineCov"> 62 : FacetData() : ofs(0), len(0) {}</span> +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span> : TagData& obtainTag(const std::string& fullname); +<span class="lineNum"> 80 </span> : }; +<span class="lineNum"> 81 </span> : std::map<std::string, FacetData> facets; +<span class="lineNum"> 82 </span> : int tagCount; +<span class="lineNum"> 83 </span> : FacetIndexer findexer; +<span class="lineNum"> 84 </span> : TagIndexer tindexer; +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span> : FacetData& obtainFacet(const std::string& name); +<span class="lineNum"> 87 </span> : TagData& obtainTag(const std::string& fullname); +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span> : public: +<span class="lineNum"> 90 </span><span class="lineCov"> 7 : VocabularyMerger() : tagCount(0), findexer(*this), tindexer(*this) {}</span> +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span> : /** +<span class="lineNum"> 93 </span> : * Check if there is any data in the merged vocabulary +<span class="lineNum"> 94 </span> : */ +<span class="lineNum"> 95 </span><span class="lineCov"> 3 : bool empty() const { return facets.empty(); }</span> +<span class="lineNum"> 96 </span> : +<span class="lineNum"> 97 </span> : /** +<span class="lineNum"> 98 </span> : * Parse and import the vocabulary from `input', merging the data with the +<span class="lineNum"> 99 </span> : * previously imported ones +<span class="lineNum"> 100 </span> : */ +<span class="lineNum"> 101 </span> : void read(tagcoll::input::Input& input); +<span class="lineNum"> 102 </span> : +<span class="lineNum"> 103 </span> : /** +<span class="lineNum"> 104 </span> : * Write the vocabulary data to the given file +<span class="lineNum"> 105 </span> : */ +<span class="lineNum"> 106 </span> : void write(const std::string& fname); +<span class="lineNum"> 107 </span> : +<span class="lineNum"> 108 </span> : /** +<span class="lineNum"> 109 </span> : * Write the vocabulary data to the given output stream +<span class="lineNum"> 110 </span> : */ +<span class="lineNum"> 111 </span> : void write(FILE* out); +<span class="lineNum"> 112 </span> : +<span class="lineNum"> 113 </span> : /** +<span class="lineNum"> 114 </span> : * Get the facet indexer. +<span class="lineNum"> 115 </span> : * +<span class="lineNum"> 116 </span> : * Note: the indexers will only be functional after one of the write +<span class="lineNum"> 117 </span> : * methods have been invoked +<span class="lineNum"> 118 </span> : */ +<span class="lineNum"> 119 </span><span class="lineCov"> 7 : const tagcoll::diskindex::MMapIndexer& facetIndexer() const { return findexer; }</span> +<span class="lineNum"> 120 </span> : +<span class="lineNum"> 121 </span> : /** +<span class="lineNum"> 122 </span> : * Get the tag indexer. +<span class="lineNum"> 123 </span> : * +<span class="lineNum"> 124 </span> : * Note: the indexers will only be functional after one of the write +<span class="lineNum"> 125 </span> : * methods have been invoked +<span class="lineNum"> 126 </span> : */ +<span class="lineNum"> 127 </span><span class="lineCov"> 7 : const tagcoll::diskindex::MMapIndexer& tagIndexer() const { return tindexer; }</span> +<span class="lineNum"> 128 </span> : +<span class="lineNum"> 129 </span> : /** +<span class="lineNum"> 130 </span> : * Check if the vocabulary contains the facet `name' +<span class="lineNum"> 131 </span> : */ +<span class="lineNum"> 132 </span> : bool hasFacet(const std::string& name) const +<span class="lineNum"> 133 </span> : { +<span class="lineNum"> 134 </span> : return facets.find(name) != facets.end(); +<span class="lineNum"> 135 </span> : } +<span class="lineNum"> 136 </span> : +<span class="lineNum"> 137 </span> : /** +<span class="lineNum"> 138 </span> : * Check if the vocabulary contains the tag `fullname' +<span class="lineNum"> 139 </span> : */ +<span class="lineNum"> 140 </span> : bool hasTag(const std::string& fullname) const; +<span class="lineNum"> 141 </span> : +<span class="lineNum"> 142 </span> : /** +<span class="lineNum"> 143 </span> : * Return the ID for the given tag (or -1 if not found) +<span class="lineNum"> 144 </span> : */ +<span class="lineNum"> 145 </span> : int tagID(const std::string& fullname) const; +<span class="lineNum"> 146 </span> : +<span class="lineNum"> 147 </span> : /** +<span class="lineNum"> 148 </span> : * Return a set with all tag names +<span class="lineNum"> 149 </span> : */ +<span class="lineNum"> 150 </span> : std::set<std::string> tagNames() const; +<span class="lineNum"> 151 </span> : }; +<span class="lineNum"> 152 </span> : +<span class="lineNum"> 153 </span> : } +<span class="lineNum"> 154 </span> : } +<span class="lineNum"> 155 </span> : +<span class="lineNum"> 156 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 157 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/maint/vocabularymerger.test.h.gcov.html b/rep/ept/debtags/maint/vocabularymerger.test.h.gcov.html new file mode 100644 index 0000000..c9315e6 --- /dev/null +++ b/rep/ept/debtags/maint/vocabularymerger.test.h.gcov.html @@ -0,0 +1,211 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/maint/vocabularymerger.test.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/debtags/maint</a> - vocabularymerger.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">52</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">52</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Merge different vocabularies together and create the tag and facet indexes +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * Copyright (C) 2003-2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 5 </span> : * +<span class="lineNum"> 6 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 7 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 8 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 9 </span> : * (at your option) any later version. +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 12 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 13 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 14 </span> : * GNU General Public License for more details. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 17 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 18 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 19 </span> : */ +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : #include <wibble/test.h> +<span class="lineNum"> 22 </span> : #include <ept/debtags/maint/vocabularymerger.h> +<span class="lineNum"> 23 </span> : #include <tagcoll/input/string.h> +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : using namespace std; +<span class="lineNum"> 26 </span> : using namespace tagcoll; +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : struct TestVocabularyMerger { +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span><span class="lineCov"> 14 : inline static const char* indexref(const char* index, int id)</span> +<span class="lineNum"> 31 </span> : { +<span class="lineNum"> 32 </span><span class="lineCov"> 14 : return index + ((int*)index)[id];</span> +<span class="lineNum"> 33 </span> : } +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 1 : Test _1()</span> +<span class="lineNum"> 37 </span> : { +<span class="lineNum"> 38 </span> : string voc1 = +<span class="lineNum"> 39 </span> : "Facet: taste\n" +<span class="lineNum"> 40 </span> : "Description: Taste\n\n" +<span class="lineNum"> 41 </span> : "Tag: taste::sweet\n" +<span class="lineNum"> 42 </span> : "Description: Sweet\n\n" +<span class="lineNum"> 43 </span> : "Tag: taste::salty\n" +<span class="lineNum"> 44 </span><span class="lineCov"> 1 : "Description: Salty\n\n";</span> +<span class="lineNum"> 45 </span> : string voc2 = +<span class="lineNum"> 46 </span> : "Facet: smell\n" +<span class="lineNum"> 47 </span> : "Description: Smell\n\n" +<span class="lineNum"> 48 </span> : "Tag: smell::fresh\n" +<span class="lineNum"> 49 </span> : "Description: Fresh\n\n" +<span class="lineNum"> 50 </span> : "Tag: smell::mold\n" +<span class="lineNum"> 51 </span><span class="lineCov"> 2 : "Description: Mold\n\n";</span> +<span class="lineNum"> 52 </span><span class="lineCov"> 1 : tagcoll::input::String in1(voc1);</span> +<span class="lineNum"> 53 </span><span class="lineCov"> 1 : tagcoll::input::String in2(voc2);</span> +<span class="lineNum"> 54 </span> : +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : ept::debtags::VocabularyMerger vm;</span> +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span> : // Read and merge the two vocabulary samples +<span class="lineNum"> 58 </span><span class="lineCov"> 1 : vm.read(in1);</span> +<span class="lineNum"> 59 </span><span class="lineCov"> 1 : vm.read(in2);</span> +<span class="lineNum"> 60 </span> : +<span class="lineNum"> 61 </span> : // Write the merged vocabulary to /dev/null (but generate offsets and indexes in the meantime) +<span class="lineNum"> 62 </span><span class="lineCov"> 1 : vm.write("/dev/null");</span> +<span class="lineNum"> 63 </span> : +<span class="lineNum"> 64 </span> : // Create the facet index +<span class="lineNum"> 65 </span><span class="lineCov"> 2 : char facetIndex[vm.facetIndexer().encodedSize()];</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 1 : vm.facetIndexer().encode(facetIndex);</span> +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span> : // Create the tag index +<span class="lineNum"> 69 </span><span class="lineCov"> 1 : char tagIndex[vm.tagIndexer().encodedSize()];</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 1 : vm.tagIndexer().encode(tagIndex);</span> +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span> : // Check that the facet names have been encoded correctly and in order +<span class="lineNum"> 73 </span><span class="lineCov"> 1 : assert_eq(string(indexref(facetIndex, 0) + 4*sizeof(int)), "smell");</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 2 : assert_eq(string(indexref(facetIndex, 1) + 4*sizeof(int)), "taste");</span> +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span> : // Check the first and last tag indexes for the facets +<span class="lineNum"> 77 </span><span class="lineCov"> 2 : assert_eq(((int*)indexref(facetIndex, 0))[2], 0);</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 2 : assert_eq(((int*)indexref(facetIndex, 0))[3], 1);</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 2 : assert_eq(((int*)indexref(facetIndex, 1))[2], 2);</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 2 : assert_eq(((int*)indexref(facetIndex, 1))[3], 3);</span> +<span class="lineNum"> 81 </span> : +<span class="lineNum"> 82 </span> : // Check that the tag names have been encoded correctly and in order +<span class="lineNum"> 83 </span><span class="lineCov"> 2 : assert_eq(string(indexref(tagIndex, 0) + 3*sizeof(int)), "smell::fresh");</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 2 : assert_eq(string(indexref(tagIndex, 1) + 3*sizeof(int)), "smell::mold");</span> +<span class="lineNum"> 85 </span><span class="lineCov"> 2 : assert_eq(string(indexref(tagIndex, 2) + 3*sizeof(int)), "taste::salty");</span> +<span class="lineNum"> 86 </span><span class="lineCov"> 2 : assert_eq(string(indexref(tagIndex, 3) + 3*sizeof(int)), "taste::sweet");</span> +<span class="lineNum"> 87 </span> : +<span class="lineNum"> 88 </span> : // Check the facet indexes for the tags +<span class="lineNum"> 89 </span><span class="lineCov"> 2 : assert_eq(((int*)indexref(tagIndex, 0))[2], 0);</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 2 : assert_eq(((int*)indexref(tagIndex, 1))[2], 0);</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 2 : assert_eq(((int*)indexref(tagIndex, 2))[2], 1);</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 2 : assert_eq(((int*)indexref(tagIndex, 3))[2], 1);</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 94 </span> : +<span class="lineNum"> 95 </span> : // Test parsing a vocabulary with a tag without a defined facet +<span class="lineNum"> 96 </span><span class="lineCov"> 1 : Test _2()</span> +<span class="lineNum"> 97 </span> : { +<span class="lineNum"> 98 </span> : string voc = +<span class="lineNum"> 99 </span> : "Tag: foo::bar\n" +<span class="lineNum"> 100 </span> : "Description: Tag without facet\n" +<span class="lineNum"> 101 </span><span class="lineCov"> 1 : " VocabularyMerged should behave fine in this case.\n\n";</span> +<span class="lineNum"> 102 </span><span class="lineCov"> 1 : tagcoll::input::String in(voc);</span> +<span class="lineNum"> 103 </span> : +<span class="lineNum"> 104 </span><span class="lineCov"> 1 : ept::debtags::VocabularyMerger vm;</span> +<span class="lineNum"> 105 </span><span class="lineCov"> 1 : vm.read(in);</span> +<span class="lineNum"> 106 </span> : +<span class="lineNum"> 107 </span> : // Write the merged vocabulary to /dev/null (but generate offsets and indexes in the meantime) +<span class="lineNum"> 108 </span><span class="lineCov"> 1 : vm.write("/dev/null");</span> +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span> : // Create the facet index +<span class="lineNum"> 111 </span><span class="lineCov"> 2 : char facetIndex[vm.facetIndexer().encodedSize()];</span> +<span class="lineNum"> 112 </span><span class="lineCov"> 1 : vm.facetIndexer().encode(facetIndex);</span> +<span class="lineNum"> 113 </span> : +<span class="lineNum"> 114 </span> : // Create the tag index +<span class="lineNum"> 115 </span><span class="lineCov"> 1 : char tagIndex[vm.tagIndexer().encodedSize()];</span> +<span class="lineNum"> 116 </span><span class="lineCov"> 1 : vm.tagIndexer().encode(tagIndex);</span> +<span class="lineNum"> 117 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span> : // Test parsing a vocabulary with a facet without tags +<span class="lineNum"> 120 </span><span class="lineCov"> 1 : Test _3()</span> +<span class="lineNum"> 121 </span> : { +<span class="lineNum"> 122 </span> : string voc = +<span class="lineNum"> 123 </span> : "Facet: empty\n" +<span class="lineNum"> 124 </span> : "Description: Facet without tags\n" +<span class="lineNum"> 125 </span><span class="lineCov"> 1 : " VocabularyMerged used to segfault in this case.\n\n";</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 1 : tagcoll::input::String in(voc);</span> +<span class="lineNum"> 127 </span> : +<span class="lineNum"> 128 </span><span class="lineCov"> 1 : ept::debtags::VocabularyMerger vm;</span> +<span class="lineNum"> 129 </span><span class="lineCov"> 1 : vm.read(in);</span> +<span class="lineNum"> 130 </span> : +<span class="lineNum"> 131 </span> : // Write the merged vocabulary to /dev/null (but generate offsets and indexes in the meantime) +<span class="lineNum"> 132 </span><span class="lineCov"> 1 : vm.write("/dev/null");</span> +<span class="lineNum"> 133 </span> : +<span class="lineNum"> 134 </span> : // Create the facet index +<span class="lineNum"> 135 </span><span class="lineCov"> 2 : char facetIndex[vm.facetIndexer().encodedSize()];</span> +<span class="lineNum"> 136 </span><span class="lineCov"> 1 : vm.facetIndexer().encode(facetIndex);</span> +<span class="lineNum"> 137 </span> : +<span class="lineNum"> 138 </span> : // Create the tag index +<span class="lineNum"> 139 </span><span class="lineCov"> 1 : char tagIndex[vm.tagIndexer().encodedSize()];</span> +<span class="lineNum"> 140 </span><span class="lineCov"> 1 : vm.tagIndexer().encode(tagIndex);</span> +<span class="lineNum"> 141 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 142 </span> : +<span class="lineNum"> 143 </span> : }; +<span class="lineNum"> 144 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/tag.cc.gcov.html b/rep/ept/debtags/tag.cc.gcov.html new file mode 100644 index 0000000..180196e --- /dev/null +++ b/rep/ept/debtags/tag.cc.gcov.html @@ -0,0 +1,205 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/tag.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - tag.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">59</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">74.6 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">44</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* -*- C++ -*- +<span class="lineNum"> 2 </span> : * Copyright (C) 2005,2006 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 5 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 6 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 7 </span> : * (at your option) any later version. +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 10 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 11 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 12 </span> : * GNU General Public License for more details. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 15 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 16 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 17 </span> : */ +<span class="lineNum"> 18 </span> : +<span class="lineNum"> 19 </span> : #include <ept/debtags/tag.h> +<span class="lineNum"> 20 </span> : #include <ept/debtags/vocabulary.h> +<span class="lineNum"> 21 </span> : #include <stdexcept> +<span class="lineNum"> 22 </span> : +<span class="lineNum"> 23 </span> : namespace ept { +<span class="lineNum"> 24 </span> : namespace debtags { +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : static inline std::string constget(const std::map<std::string, std::string>& m, +<span class="lineNum"> 27 </span><span class="lineCov"> 3898 : const std::string& key)</span> +<span class="lineNum"> 28 </span> : { +<span class="lineNum"> 29 </span><span class="lineCov"> 3898 : std::map<std::string, std::string>::const_iterator i = m.find(key);</span> +<span class="lineNum"> 30 </span><span class="lineCov"> 3898 : if (i == m.end())</span> +<span class="lineNum"> 31 </span><span class="lineCov"> 4 : return std::string();</span> +<span class="lineNum"> 32 </span> : else +<span class="lineNum"> 33 </span><span class="lineCov"> 3894 : return i->second;</span> +<span class="lineNum"> 34 </span> : } +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 59 : std::string Facet::name() const</span> +<span class="lineNum"> 37 </span> : { +<span class="lineNum"> 38 </span><span class="lineCov"> 59 : if (valid())</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 59 : return m_tags->facetName(m_id);</span> +<span class="lineNum"> 40 </span><span class="lineNoCov"> 0 : throw std::out_of_range( "No name for this facet" );</span> +<span class="lineNum"> 41 </span> : } +<span class="lineNum"> 42 </span><span class="lineCov"> 29 : std::string Facet::name(const std::string& d) const</span> +<span class="lineNum"> 43 </span> : { +<span class="lineNum"> 44 </span><span class="lineCov"> 29 : return valid() ? m_tags->facetName(m_id) : d;</span> +<span class="lineNum"> 45 </span> : } +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span><span class="lineCov"> 59 : std::string Facet::shortDescription() const</span> +<span class="lineNum"> 48 </span> : { +<span class="lineNum"> 49 </span><span class="lineCov"> 59 : if (valid())</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 59 : return constget(m_tags->facetData(m_id), "_SD_");</span> +<span class="lineNum"> 51 </span><span class="lineNoCov"> 0 : throw std::out_of_range( "No short description for this facet" );</span> +<span class="lineNum"> 52 </span> : } +<span class="lineNum"> 53 </span><span class="lineCov"> 29 : std::string Facet::shortDescription(const std::string& d) const</span> +<span class="lineNum"> 54 </span> : { +<span class="lineNum"> 55 </span><span class="lineCov"> 29 : return valid() ? constget(m_tags->facetData(m_id), "_SD_") : d;</span> +<span class="lineNum"> 56 </span> : } +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span><span class="lineCov"> 59 : std::string Facet::longDescription() const</span> +<span class="lineNum"> 59 </span> : { +<span class="lineNum"> 60 </span><span class="lineCov"> 59 : if (valid())</span> +<span class="lineNum"> 61 </span><span class="lineCov"> 59 : return constget(m_tags->facetData(m_id), "Description");</span> +<span class="lineNum"> 62 </span><span class="lineNoCov"> 0 : throw std::out_of_range( "No long description for this facet" );</span> +<span class="lineNum"> 63 </span> : } +<span class="lineNum"> 64 </span><span class="lineCov"> 29 : std::string Facet::longDescription(const std::string& d) const</span> +<span class="lineNum"> 65 </span> : { +<span class="lineNum"> 66 </span><span class="lineCov"> 29 : return valid() ? constget(m_tags->facetData(m_id), "Description") : d;</span> +<span class="lineNum"> 67 </span> : } +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span><span class="lineNoCov"> 0 : bool Facet::hasTag(const std::string& name) const</span> +<span class="lineNum"> 70 </span> : { +<span class="lineNum"> 71 </span><span class="lineNoCov"> 0 : if (!valid())</span> +<span class="lineNum"> 72 </span><span class="lineNoCov"> 0 : throw std::out_of_range( "hasTag() called on an invalid facet" );</span> +<span class="lineNum"> 73 </span><span class="lineNoCov"> 0 : return m_tags->hasTag(this->name() + "::" + name);</span> +<span class="lineNum"> 74 </span> : } +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span><span class="lineCov"> 89 : std::set< Tag > Facet::tags() const</span> +<span class="lineNum"> 77 </span> : { +<span class="lineNum"> 78 </span><span class="lineCov"> 89 : if (!valid())</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 1 : throw std::out_of_range( "tags() called on an invalid facet" );</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 88 : return m_tags->tags(m_id);</span> +<span class="lineNum"> 81 </span> : } +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span><span class="lineNoCov"> 0 : Facet Tag::facet() const</span> +<span class="lineNum"> 85 </span> : { +<span class="lineNum"> 86 </span><span class="lineNoCov"> 0 : if (valid())</span> +<span class="lineNum"> 87 </span><span class="lineNoCov"> 0 : return m_tags->facetByTag(m_id);</span> +<span class="lineNum"> 88 </span><span class="lineNoCov"> 0 : throw std::out_of_range( "No facet for this tag" );</span> +<span class="lineNum"> 89 </span> : } +<span class="lineNum"> 90 </span> : +<span class="lineNum"> 91 </span><span class="lineCov"> 1243 : std::string Tag::name() const</span> +<span class="lineNum"> 92 </span> : { +<span class="lineNum"> 93 </span><span class="lineCov"> 1243 : if (valid())</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 1243 : return m_tags->tagShortName(m_id);</span> +<span class="lineNum"> 95 </span><span class="lineNoCov"> 0 : throw std::out_of_range( "No name for this tag" );</span> +<span class="lineNum"> 96 </span> : } +<span class="lineNum"> 97 </span><span class="lineCov"> 620 : std::string Tag::name(const std::string& d) const</span> +<span class="lineNum"> 98 </span> : { +<span class="lineNum"> 99 </span><span class="lineCov"> 620 : return valid() ? m_tags->tagShortName(m_id) : d;</span> +<span class="lineNum"> 100 </span> : } +<span class="lineNum"> 101 </span> : +<span class="lineNum"> 102 </span><span class="lineCov"> 1284 : std::string Tag::fullname() const</span> +<span class="lineNum"> 103 </span> : { +<span class="lineNum"> 104 </span><span class="lineCov"> 1284 : if (valid())</span> +<span class="lineNum"> 105 </span><span class="lineCov"> 1284 : return m_tags->tagName(m_id);</span> +<span class="lineNum"> 106 </span><span class="lineNoCov"> 0 : throw std::out_of_range( "No full name for this tag" );</span> +<span class="lineNum"> 107 </span> : } +<span class="lineNum"> 108 </span><span class="lineCov"> 620 : std::string Tag::fullname(const std::string& d) const</span> +<span class="lineNum"> 109 </span> : { +<span class="lineNum"> 110 </span><span class="lineCov"> 620 : return valid() ? m_tags->tagName(m_id) : d;</span> +<span class="lineNum"> 111 </span> : } +<span class="lineNum"> 112 </span> : +<span class="lineNum"> 113 </span><span class="lineCov"> 1242 : std::string Tag::shortDescription() const</span> +<span class="lineNum"> 114 </span> : { +<span class="lineNum"> 115 </span><span class="lineCov"> 1242 : if (valid())</span> +<span class="lineNum"> 116 </span><span class="lineCov"> 1242 : return constget(m_tags->tagData(m_id), "_SD_");</span> +<span class="lineNum"> 117 </span><span class="lineNoCov"> 0 : throw std::out_of_range( "No short description for this tag" );</span> +<span class="lineNum"> 118 </span> : } +<span class="lineNum"> 119 </span><span class="lineCov"> 620 : std::string Tag::shortDescription(const std::string& d) const</span> +<span class="lineNum"> 120 </span> : { +<span class="lineNum"> 121 </span><span class="lineCov"> 620 : return valid() ? constget(m_tags->tagData(m_id), "_SD_") : d;</span> +<span class="lineNum"> 122 </span> : } +<span class="lineNum"> 123 </span> : +<span class="lineNum"> 124 </span><span class="lineCov"> 1240 : std::string Tag::longDescription() const</span> +<span class="lineNum"> 125 </span> : { +<span class="lineNum"> 126 </span><span class="lineCov"> 1240 : if (valid())</span> +<span class="lineNum"> 127 </span><span class="lineCov"> 1240 : return constget(m_tags->tagData(m_id), "Description");</span> +<span class="lineNum"> 128 </span><span class="lineNoCov"> 0 : throw std::out_of_range( "No long description for this tag" );</span> +<span class="lineNum"> 129 </span> : } +<span class="lineNum"> 130 </span><span class="lineCov"> 620 : std::string Tag::longDescription(const std::string& d) const</span> +<span class="lineNum"> 131 </span> : { +<span class="lineNum"> 132 </span><span class="lineCov"> 620 : return valid() ? constget(m_tags->tagData(m_id), "Description") : d;</span> +<span class="lineNum"> 133 </span> : } +<span class="lineNum"> 134 </span> : +<span class="lineNum"> 135 </span> : } +<span class="lineNum"> 136 </span> : } +<span class="lineNum"> 137 </span> : +<span class="lineNum"> 138 </span> : // vim:set ts=3 sw=3: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/tag.h.gcov.html b/rep/ept/debtags/tag.h.gcov.html new file mode 100644 index 0000000..0695c3c --- /dev/null +++ b/rep/ept/debtags/tag.h.gcov.html @@ -0,0 +1,318 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/tag.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - tag.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">16</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">93.8 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">15</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #ifndef EPT_DEBTAGS_TAG_H +<span class="lineNum"> 3 </span> : #define EPT_DEBTAGS_TAG_H +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /** \file +<span class="lineNum"> 6 </span> : * Debtags facets and tags +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 13 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 14 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 15 </span> : * (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <set> +<span class="lineNum"> 28 </span> : #include <string> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : namespace ept { +<span class="lineNum"> 31 </span> : namespace debtags { +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : class Vocabulary; +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : class Tag; +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : /** +<span class="lineNum"> 38 </span> : * Representation of a facet. +<span class="lineNum"> 39 </span> : * +<span class="lineNum"> 40 </span> : * ept::debtags::Facet represents a Facet with all its informations. +<span class="lineNum"> 41 </span> : * It is guaranteed to have fast value-copy semantics, so it can be passed +<span class="lineNum"> 42 </span> : * around freely and efficiently without worrying about memory management +<span class="lineNum"> 43 </span> : * issues. +<span class="lineNum"> 44 </span> : * +<span class="lineNum"> 45 </span> : * The class is normally instantiated using a Vocabulary: +<span class="lineNum"> 46 </span> : * \code +<span class="lineNum"> 47 </span> : * Facet facet = vocabulary.faceByName("made-of"); +<span class="lineNum"> 48 </span> : * \endcode +<span class="lineNum"> 49 </span> : * +<span class="lineNum"> 50 </span> : * Facets can contain an "invalid" value, in which case using any of their +<span class="lineNum"> 51 </span> : * methods will likely produce segfault. The "invalid" facets are useful as +<span class="lineNum"> 52 </span> : * "none" return values: +<span class="lineNum"> 53 </span> : * +<span class="lineNum"> 54 </span> : * \code +<span class="lineNum"> 55 </span> : * Facet facet = vocabulary.facetByName("made-of"); +<span class="lineNum"> 56 </span> : * if (!facet) +<span class="lineNum"> 57 </span> : * throw SomeException("facet \"made-of\" has not been defined"); +<span class="lineNum"> 58 </span> : * \endcode +<span class="lineNum"> 59 </span> : */ +<span class="lineNum"> 60 </span> : class Facet +<span class="lineNum"> 61 </span> : { +<span class="lineNum"> 62 </span> : protected: +<span class="lineNum"> 63 </span> : const Vocabulary* m_tags; +<span class="lineNum"> 64 </span> : int m_id; +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span><span class="lineCov"> 120 : Facet(const Vocabulary* tags, int id) : m_tags(tags), m_id(id) {}</span> +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span> : public: +<span class="lineNum"> 69 </span> : Facet() : m_tags(0), m_id(-1) {} +<span class="lineNum"> 70 </span><span class="lineCov"> 265 : ~Facet() {}</span> +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span><span class="lineCov"> 29 : bool operator==(const Facet& f) const { return m_id == f.m_id; }</span> +<span class="lineNum"> 73 </span> : bool operator!=(const Facet& f) const { return m_id != f.m_id; } +<span class="lineNum"> 74 </span><span class="lineCov"> 600 : bool operator<(const Facet& f) const { return m_id < f.m_id; }</span> +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span> : /** +<span class="lineNum"> 77 </span> : * Return true if the facet is valid +<span class="lineNum"> 78 </span> : */ +<span class="lineNum"> 79 </span><span class="lineNoCov"> 0 : operator bool() const { return m_id != -1; }</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 353 : bool valid() const { return m_id != -1; }</span> +<span class="lineNum"> 81 </span> : +<span class="lineNum"> 82 </span> : /** +<span class="lineNum"> 83 </span> : * Return the name of the facet +<span class="lineNum"> 84 </span> : * @throws std::out_of_range if the facet is not valid +<span class="lineNum"> 85 </span> : */ +<span class="lineNum"> 86 </span> : std::string name() const; +<span class="lineNum"> 87 </span> : /** +<span class="lineNum"> 88 </span> : * Return the name of the facet +<span class="lineNum"> 89 </span> : * +<span class="lineNum"> 90 </span> : * Returns d if the facet is not valid. +<span class="lineNum"> 91 </span> : */ +<span class="lineNum"> 92 </span> : std::string name(const std::string& d) const; +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span> : /** +<span class="lineNum"> 95 </span> : * Return the short description of the facet +<span class="lineNum"> 96 </span> : * @throws std::out_of_range if the facet is not valid +<span class="lineNum"> 97 </span> : */ +<span class="lineNum"> 98 </span> : std::string shortDescription() const; +<span class="lineNum"> 99 </span> : /** +<span class="lineNum"> 100 </span> : * Return the short description of the facet +<span class="lineNum"> 101 </span> : * +<span class="lineNum"> 102 </span> : * Returns d if the facet is not valid. +<span class="lineNum"> 103 </span> : */ +<span class="lineNum"> 104 </span> : std::string shortDescription(const std::string& d) const; +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span> : /** +<span class="lineNum"> 107 </span> : * Return the long description of the facet +<span class="lineNum"> 108 </span> : * @throws std::out_of_range if the facet is not valid +<span class="lineNum"> 109 </span> : */ +<span class="lineNum"> 110 </span> : std::string longDescription() const; +<span class="lineNum"> 111 </span> : /** +<span class="lineNum"> 112 </span> : * Return the long description of the facet +<span class="lineNum"> 113 </span> : * +<span class="lineNum"> 114 </span> : * Returns d if the facet is not valid. +<span class="lineNum"> 115 </span> : */ +<span class="lineNum"> 116 </span> : std::string longDescription(const std::string& d) const; +<span class="lineNum"> 117 </span> : +<span class="lineNum"> 118 </span> : /** +<span class="lineNum"> 119 </span> : * Return true if the facet has a tag with the given name (name, not fullname) +<span class="lineNum"> 120 </span> : */ +<span class="lineNum"> 121 </span> : bool hasTag(const std::string& name) const; +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span> : /** +<span class="lineNum"> 124 </span> : * Return the list of tags in this facet +<span class="lineNum"> 125 </span> : */ +<span class="lineNum"> 126 </span> : std::set<Tag> tags() const; +<span class="lineNum"> 127 </span> : +<span class="lineNum"> 128 </span> : /** +<span class="lineNum"> 129 </span> : * Return the ID of this facet +<span class="lineNum"> 130 </span> : * +<span class="lineNum"> 131 </span> : * @warning This method is exported to help in writing tests, but it is not +<span class="lineNum"> 132 </span> : * part of the normal API: do not use it, because future implementations may +<span class="lineNum"> 133 </span> : * not be based on IDs and therefore not have this method. +<span class="lineNum"> 134 </span> : */ +<span class="lineNum"> 135 </span><span class="lineCov"> 58 : int id() const { return m_id; }</span> +<span class="lineNum"> 136 </span> : +<span class="lineNum"> 137 </span> : friend class Vocabulary; +<span class="lineNum"> 138 </span> : }; +<span class="lineNum"> 139 </span> : +<span class="lineNum"> 140 </span> : /** +<span class="lineNum"> 141 </span> : * Representation of a tag. +<span class="lineNum"> 142 </span> : * +<span class="lineNum"> 143 </span> : * ept::debtags::Tag represents a Tag with all its informations. +<span class="lineNum"> 144 </span> : * It is guaranteed to have fast value-copy semantics, so it can be passed +<span class="lineNum"> 145 </span> : * around freely and efficiently without worrying about memory management +<span class="lineNum"> 146 </span> : * issues. +<span class="lineNum"> 147 </span> : * +<span class="lineNum"> 148 </span> : * The class is normally instantiated using a Vocabulary: +<span class="lineNum"> 149 </span> : * \code +<span class="lineNum"> 150 </span> : * Tag tag = vocabulary.tagByName("made-of::lang:c++"); +<span class="lineNum"> 151 </span> : * \endcode +<span class="lineNum"> 152 </span> : * +<span class="lineNum"> 153 </span> : * Tags can contain an "invalid" value, in which case using any of their +<span class="lineNum"> 154 </span> : * methods will likely produce segfault. The "invalid" facets are useful as +<span class="lineNum"> 155 </span> : * "none" return values: +<span class="lineNum"> 156 </span> : * +<span class="lineNum"> 157 </span> : * \code +<span class="lineNum"> 158 </span> : * Tag tag = vocabulary.tagByName("made-of"); +<span class="lineNum"> 159 </span> : * if (!tag) +<span class="lineNum"> 160 </span> : * throw SomeException("tag \"mytag\" has not been defined"); +<span class="lineNum"> 161 </span> : * \endcode +<span class="lineNum"> 162 </span> : */ +<span class="lineNum"> 163 </span> : class Tag +<span class="lineNum"> 164 </span> : { +<span class="lineNum"> 165 </span> : protected: +<span class="lineNum"> 166 </span> : const Vocabulary* m_tags; +<span class="lineNum"> 167 </span> : int m_id; +<span class="lineNum"> 168 </span> : +<span class="lineNum"> 169 </span><span class="lineCov"> 745056 : Tag(const Vocabulary* tags, int id) : m_tags(tags), m_id(id) {}</span> +<span class="lineNum"> 170 </span> : +<span class="lineNum"> 171 </span> : public: +<span class="lineNum"> 172 </span> : typedef std::set< Tag > Set; +<span class="lineNum"> 173 </span> : +<span class="lineNum"> 174 </span><span class="lineCov"> 2 : Tag() : m_tags(0), m_id(-1) {}</span> +<span class="lineNum"> 175 </span><span class="lineCov"> 2229812 : ~Tag() {}</span> +<span class="lineNum"> 176 </span> : +<span class="lineNum"> 177 </span><span class="lineCov"> 1228 : bool operator==(const Tag& f) const { return m_id == f.m_id; }</span> +<span class="lineNum"> 178 </span><span class="lineCov"> 5 : bool operator!=(const Tag& f) const { return m_id != f.m_id; }</span> +<span class="lineNum"> 179 </span><span class="lineCov"> 2300524 : bool operator<(const Tag& f) const { return m_id < f.m_id; }</span> +<span class="lineNum"> 180 </span> : +<span class="lineNum"> 181 </span><span class="lineCov"> 1 : operator bool() const { return m_id != -1; }</span> +<span class="lineNum"> 182 </span><span class="lineCov"> 324422 : bool valid() const { return m_id != -1; }</span> +<span class="lineNum"> 183 </span> : +<span class="lineNum"> 184 </span> : Facet facet() const; +<span class="lineNum"> 185 </span> : +<span class="lineNum"> 186 </span> : /** +<span class="lineNum"> 187 </span> : * Return the name of the tag, without the facet:: prefix +<span class="lineNum"> 188 </span> : * @throws std::out_of_range if the tag is not valid +<span class="lineNum"> 189 </span> : */ +<span class="lineNum"> 190 </span> : std::string name() const; +<span class="lineNum"> 191 </span> : /** +<span class="lineNum"> 192 </span> : * Return the short description of the tag +<span class="lineNum"> 193 </span> : * +<span class="lineNum"> 194 </span> : * Returns d if the tag is not valid. +<span class="lineNum"> 195 </span> : */ +<span class="lineNum"> 196 </span> : std::string name(const std::string& d) const; +<span class="lineNum"> 197 </span> : +<span class="lineNum"> 198 </span> : /** +<span class="lineNum"> 199 </span> : * Return the name of the tag, with the facet:: prefix +<span class="lineNum"> 200 </span> : * @throws std::out_of_range if the tag is not valid +<span class="lineNum"> 201 </span> : */ +<span class="lineNum"> 202 </span> : std::string fullname() const; +<span class="lineNum"> 203 </span> : /** +<span class="lineNum"> 204 </span> : * Return the short description of the tag +<span class="lineNum"> 205 </span> : * +<span class="lineNum"> 206 </span> : * Returns d if the tag is not valid. +<span class="lineNum"> 207 </span> : */ +<span class="lineNum"> 208 </span> : std::string fullname(const std::string& d) const; +<span class="lineNum"> 209 </span> : +<span class="lineNum"> 210 </span> : /** +<span class="lineNum"> 211 </span> : * Return the short description of the tag +<span class="lineNum"> 212 </span> : * @throws std::out_of_range if the tag is not valid +<span class="lineNum"> 213 </span> : */ +<span class="lineNum"> 214 </span> : std::string shortDescription() const; +<span class="lineNum"> 215 </span> : /** +<span class="lineNum"> 216 </span> : * Return the short description of the tag +<span class="lineNum"> 217 </span> : * +<span class="lineNum"> 218 </span> : * Returns d if the tag is not valid. +<span class="lineNum"> 219 </span> : */ +<span class="lineNum"> 220 </span> : std::string shortDescription(const std::string& d) const; +<span class="lineNum"> 221 </span> : +<span class="lineNum"> 222 </span> : /** +<span class="lineNum"> 223 </span> : * Return the long description of the tag +<span class="lineNum"> 224 </span> : * +<span class="lineNum"> 225 </span> : * @throws std::out_of_range if the tag is not valid +<span class="lineNum"> 226 </span> : */ +<span class="lineNum"> 227 </span> : std::string longDescription() const; +<span class="lineNum"> 228 </span> : /** +<span class="lineNum"> 229 </span> : * Return the long description of the tag +<span class="lineNum"> 230 </span> : * +<span class="lineNum"> 231 </span> : * Returns d if the tag is not valid. +<span class="lineNum"> 232 </span> : */ +<span class="lineNum"> 233 </span> : std::string longDescription(const std::string& d) const; +<span class="lineNum"> 234 </span> : +<span class="lineNum"> 235 </span> : /** +<span class="lineNum"> 236 </span> : * Return the ID of this tag +<span class="lineNum"> 237 </span> : * +<span class="lineNum"> 238 </span> : * @warning This method is exported to help in writing tests, but it is not +<span class="lineNum"> 239 </span> : * part of the normal API: do not use it, because future implementations may +<span class="lineNum"> 240 </span> : * not be based on IDs and therefore not have this method. +<span class="lineNum"> 241 </span> : */ +<span class="lineNum"> 242 </span><span class="lineCov"> 106853 : int id() const { return m_id; }</span> +<span class="lineNum"> 243 </span> : +<span class="lineNum"> 244 </span> : friend class Vocabulary; +<span class="lineNum"> 245 </span> : }; +<span class="lineNum"> 246 </span> : +<span class="lineNum"> 247 </span> : } +<span class="lineNum"> 248 </span> : } +<span class="lineNum"> 249 </span> : +<span class="lineNum"> 250 </span> : // vim:set ts=3 sw=3: +<span class="lineNum"> 251 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/vocabulary.cc.gcov.html b/rep/ept/debtags/vocabulary.cc.gcov.html new file mode 100644 index 0000000..9ebdb82 --- /dev/null +++ b/rep/ept/debtags/vocabulary.cc.gcov.html @@ -0,0 +1,297 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/vocabulary.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - vocabulary.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">102</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">95.1 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">97</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* -*- C++ -*- +<span class="lineNum"> 2 </span> : * Tag vocabulary access +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * Copyright (C) 2003--2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 5 </span> : * +<span class="lineNum"> 6 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 7 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 8 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 9 </span> : * (at your option) any later version. +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 12 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 13 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 14 </span> : * GNU General Public License for more details. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 17 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 18 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 19 </span> : */ +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : #include <ept/debtags/vocabulary.h> +<span class="lineNum"> 22 </span> : #include <ept/debtags/maint/vocabularyindexer.h> +<span class="lineNum"> 23 </span> : #include <ept/debtags/maint/debdbparser.h> +<span class="lineNum"> 24 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include <tagcoll/input/memory.h> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include <cstring> +<span class="lineNum"> 29 </span> : #include <sstream> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : #include <sys/types.h> +<span class="lineNum"> 32 </span> : #include <sys/stat.h> +<span class="lineNum"> 33 </span> : #include <fcntl.h> +<span class="lineNum"> 34 </span> : #include <sys/mman.h> +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : using namespace tagcoll; +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span> : namespace ept { +<span class="lineNum"> 39 </span> : namespace debtags { +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span><span class="lineCov"> 9 : int Vocabulary::FacetIndex::id(const char* name) const</span> +<span class="lineNum"> 42 </span> : { +<span class="lineNum"> 43 </span><span class="lineCov"> 9 : if (size() == 0) return -1;</span> +<span class="lineNum"> 44 </span> : int begin, end; +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span> : /* Binary search */ +<span class="lineNum"> 47 </span><span class="lineCov"> 9 : begin = -1, end = size();</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 62 : while (end - begin > 1)</span> +<span class="lineNum"> 49 </span> : { +<span class="lineNum"> 50 </span><span class="lineCov"> 44 : int cur = (end + begin) / 2;</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 44 : if (strcmp(item(cur)->name, name) > 0)</span> +<span class="lineNum"> 52 </span><span class="lineCov"> 16 : end = cur;</span> +<span class="lineNum"> 53 </span> : else +<span class="lineNum"> 54 </span><span class="lineCov"> 28 : begin = cur;</span> +<span class="lineNum"> 55 </span> : } +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span><span class="lineCov"> 9 : if (begin == -1 || strcmp(item(begin)->name, name) != 0)</span> +<span class="lineNum"> 58 </span> : //throw NotFoundException(string("looking for the ID of string ") + str); +<span class="lineNum"> 59 </span><span class="lineCov"> 3 : return -1;</span> +<span class="lineNum"> 60 </span> : else +<span class="lineNum"> 61 </span><span class="lineCov"> 6 : return begin;</span> +<span class="lineNum"> 62 </span> : } +<span class="lineNum"> 63 </span> : +<span class="lineNum"> 64 </span><span class="lineCov"> 1105769 : int tagcmp(const char* tag1, const char* tag2)</span> +<span class="lineNum"> 65 </span> : { +<span class="lineNum"> 66 </span><span class="lineCov"> 1105769 : const char* tsep1 = strstr(tag1, "::");</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 1105769 : if (tsep1 == NULL) return strcmp(tag1, tag2);</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 1105766 : const char* tsep2 = strstr(tag2, "::");</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 1105766 : if (tsep2 == NULL) return strcmp(tag1, tag2);</span> +<span class="lineNum"> 70 </span> : +<span class="lineNum"> 71 </span> : // See what is the length of the shortest facet +<span class="lineNum"> 72 </span><span class="lineCov"> 1105766 : int len1 = tsep1 - tag1;</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 1105766 : int len2 = tsep2 - tag2;</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 1105766 : int minlen = len1 < len2 ? len1 : len2;</span> +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span><span class="lineCov"> 1105766 : int res = strncmp(tag1, tag2, minlen);</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 1105766 : if (res != 0)</span> +<span class="lineNum"> 78 </span> : // Different facets +<span class="lineNum"> 79 </span><span class="lineCov"> 454813 : return res;</span> +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span><span class="lineCov"> 650953 : if (len1 == len2)</span> +<span class="lineNum"> 82 </span> : // If the facet is the same, compare the tags +<span class="lineNum"> 83 </span><span class="lineCov"> 639402 : return strcmp(tsep1 + 2, tsep2 + 2);</span> +<span class="lineNum"> 84 </span> : else +<span class="lineNum"> 85 </span> : // Two facets with similar prefixes +<span class="lineNum"> 86 </span><span class="lineCov"> 11551 : return len1 < len2 ? -1 : 1;</span> +<span class="lineNum"> 87 </span> : } +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span><span class="lineCov"> 106377 : int Vocabulary::TagIndex::id(const char* name) const</span> +<span class="lineNum"> 90 </span> : { +<span class="lineNum"> 91 </span><span class="lineCov"> 106377 : if (size() == 0) return -1;</span> +<span class="lineNum"> 92 </span> : int begin, end; +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span> : /* Binary search */ +<span class="lineNum"> 95 </span><span class="lineCov"> 106377 : begin = -1, end = size();</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 1212130 : while (end - begin > 1)</span> +<span class="lineNum"> 97 </span> : { +<span class="lineNum"> 98 </span><span class="lineCov"> 999376 : int cur = (end + begin) / 2;</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 999376 : if (tagcmp(item(cur)->name, name) > 0)</span> +<span class="lineNum"> 100 </span><span class="lineCov"> 432389 : end = cur;</span> +<span class="lineNum"> 101 </span> : else +<span class="lineNum"> 102 </span><span class="lineCov"> 566987 : begin = cur;</span> +<span class="lineNum"> 103 </span> : } +<span class="lineNum"> 104 </span> : +<span class="lineNum"> 105 </span><span class="lineCov"> 106377 : if (begin == -1 || tagcmp(item(begin)->name, name) != 0)</span> +<span class="lineNum"> 106 </span> : //throw NotFoundException(string("looking for the ID of string ") + str); +<span class="lineNum"> 107 </span><span class="lineCov"> 132 : return -1;</span> +<span class="lineNum"> 108 </span> : else +<span class="lineNum"> 109 </span><span class="lineCov"> 106245 : return begin;</span> +<span class="lineNum"> 110 </span> : } +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span><span class="lineCov"> 31 : Vocabulary::Vocabulary()</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 31 : : voc_fd(-1), voc_size(0), voc_buf(0)</span> +<span class="lineNum"> 114 </span> : { +<span class="lineNum"> 115 </span><span class="lineCov"> 31 : std::string vocfname;</span> +<span class="lineNum"> 116 </span><span class="lineCov"> 31 : std::string idxfname;</span> +<span class="lineNum"> 117 </span> : +<span class="lineNum"> 118 </span><span class="lineCov"> 31 : if (!VocabularyIndexer::obtainWorkingVocabulary(vocfname, idxfname))</span> +<span class="lineNum"> 119 </span> : { +<span class="lineNum"> 120 </span><span class="lineCov"> 2 : m_timestamp = 0;</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 2 : return;</span> +<span class="lineNum"> 122 </span> : } +<span class="lineNum"> 123 </span> : +<span class="lineNum"> 124 </span><span class="lineCov"> 29 : m_timestamp = Path::timestamp(idxfname);</span> +<span class="lineNum"> 125 </span> : +<span class="lineNum"> 126 </span><span class="lineCov"> 29 : mastermmap.init(idxfname);</span> +<span class="lineNum"> 127 </span> : +<span class="lineNum"> 128 </span> : // Initialize the facet and tag indexes +<span class="lineNum"> 129 </span><span class="lineCov"> 29 : findex.init(mastermmap, 0);</span> +<span class="lineNum"> 130 </span><span class="lineCov"> 29 : tindex.init(mastermmap, 1);</span> +<span class="lineNum"> 131 </span> : +<span class="lineNum"> 132 </span> : // MMap the vocabulary +<span class="lineNum"> 133 </span> : +<span class="lineNum"> 134 </span> : // Open the file +<span class="lineNum"> 135 </span><span class="lineCov"> 29 : voc_fname = vocfname;</span> +<span class="lineNum"> 136 </span><span class="lineCov"> 29 : if ((voc_fd = open(voc_fname.c_str(), O_RDONLY)) == -1)</span> +<span class="lineNum"> 137 </span><span class="lineNoCov"> 0 : throw wibble::exception::File(voc_fname, "opening vocabulary file");</span> +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span><span class="lineCov"> 29 : off_t size = lseek(voc_fd, 0, SEEK_END);</span> +<span class="lineNum"> 140 </span><span class="lineCov"> 29 : if (size == (off_t)-1)</span> +<span class="lineNum"> 141 </span><span class="lineNoCov"> 0 : throw wibble::exception::File(voc_fname, "reading the size of vocabulary file");</span> +<span class="lineNum"> 142 </span><span class="lineCov"> 29 : voc_size = size;</span> +<span class="lineNum"> 143 </span> : +<span class="lineNum"> 144 </span> : // Map the file into memory +<span class="lineNum"> 145 </span><span class="lineCov"> 29 : if ((voc_buf = (const char*)mmap(0, voc_size, PROT_READ, MAP_PRIVATE, voc_fd, 0)) == MAP_FAILED)</span> +<span class="lineNum"> 146 </span><span class="lineNoCov"> 0 : throw wibble::exception::File(voc_fname, "mmapping vocabulary file");</span> +<span class="lineNum"> 147 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 148 </span> : +<span class="lineNum"> 149 </span><span class="lineCov"> 31 : Vocabulary::~Vocabulary()</span> +<span class="lineNum"> 150 </span> : { +<span class="lineNum"> 151 </span> : // Unmap and close the file +<span class="lineNum"> 152 </span><span class="lineCov"> 31 : if (voc_buf)</span> +<span class="lineNum"> 153 </span><span class="lineCov"> 29 : munmap((void*)voc_buf, voc_size);</span> +<span class="lineNum"> 154 </span><span class="lineCov"> 31 : if (voc_fd != -1)</span> +<span class="lineNum"> 155 </span><span class="lineCov"> 29 : close(voc_fd);</span> +<span class="lineNum"> 156 </span><span class="lineCov"> 31 : }</span> +<span class="lineNum"> 157 </span> : +<span class="lineNum"> 158 </span><span class="lineCov"> 120 : Facet Vocabulary::facetByID(int id) const</span> +<span class="lineNum"> 159 </span> : { +<span class="lineNum"> 160 </span><span class="lineCov"> 120 : return Facet(this, id);</span> +<span class="lineNum"> 161 </span> : } +<span class="lineNum"> 162 </span> : +<span class="lineNum"> 163 </span><span class="lineCov"> 745056 : Tag Vocabulary::tagByID(int id) const</span> +<span class="lineNum"> 164 </span> : { +<span class="lineNum"> 165 </span><span class="lineCov"> 745056 : return Tag(this, id);</span> +<span class="lineNum"> 166 </span> : } +<span class="lineNum"> 167 </span> : +<span class="lineNum"> 168 </span><span class="lineCov"> 1301 : void Vocabulary::parseVocBuf(std::map<std::string, std::string>& res, size_t ofs, size_t len) const</span> +<span class="lineNum"> 169 </span> : { +<span class="lineNum"> 170 </span> : // Access the right part of the mmapped buffer +<span class="lineNum"> 171 </span><span class="lineCov"> 1301 : std::stringstream name;</span> +<span class="lineNum"> 172 </span><span class="lineCov"> 1301 : name << voc_fname << '+' << ofs << '-' << len;</span> +<span class="lineNum"> 173 </span><span class="lineCov"> 1301 : input::Memory in(name.str(), voc_buf + ofs, len);</span> +<span class="lineNum"> 174 </span><span class="lineCov"> 1301 : DebDBParser parser(in);</span> +<span class="lineNum"> 175 </span> : // Parse the raw string data and store it in the cache vector +<span class="lineNum"> 176 </span><span class="lineCov"> 1301 : parser.nextRecord(res);</span> +<span class="lineNum"> 177 </span> : +<span class="lineNum"> 178 </span><span class="lineCov"> 1301 : std::string desc = res["Description"];</span> +<span class="lineNum"> 179 </span><span class="lineCov"> 2602 : if (!desc.empty())</span> +<span class="lineNum"> 180 </span> : { +<span class="lineNum"> 181 </span><span class="lineCov"> 1298 : size_t pos = desc.find('\n');</span> +<span class="lineNum"> 182 </span><span class="lineCov"> 1298 : if (pos == std::string::npos)</span> +<span class="lineNum"> 183 </span><span class="lineCov"> 849 : res["_SD_"] = desc;</span> +<span class="lineNum"> 184 </span> : else +<span class="lineNum"> 185 </span><span class="lineCov"> 449 : res["_SD_"] = desc.substr(0, pos);</span> +<span class="lineNum"> 186 </span><span class="lineCov"> 1301 : }</span> +<span class="lineNum"> 187 </span><span class="lineCov"> 1301 : }</span> +<span class="lineNum"> 188 </span> : +<span class="lineNum"> 189 </span><span class="lineCov"> 1863 : std::string Vocabulary::tagShortName(int id) const</span> +<span class="lineNum"> 190 </span> : { +<span class="lineNum"> 191 </span><span class="lineCov"> 1863 : const char* fullname = tindex.name(id);</span> +<span class="lineNum"> 192 </span><span class="lineCov"> 1863 : char* sub = strstr(fullname, "::");</span> +<span class="lineNum"> 193 </span><span class="lineCov"> 1863 : if (sub != NULL)</span> +<span class="lineNum"> 194 </span><span class="lineCov"> 1863 : return sub + 2;</span> +<span class="lineNum"> 195 </span> : else +<span class="lineNum"> 196 </span><span class="lineNoCov"> 0 : return fullname;</span> +<span class="lineNum"> 197 </span> : } +<span class="lineNum"> 198 </span> : +<span class="lineNum"> 199 </span><span class="lineCov"> 176 : const std::map<std::string, std::string>& Vocabulary::facetData(int id) const</span> +<span class="lineNum"> 200 </span> : { +<span class="lineNum"> 201 </span><span class="lineCov"> 176 : if (id < 0) return emptyData;</span> +<span class="lineNum"> 202 </span> : +<span class="lineNum"> 203 </span> : // Enlarge the cache vector if needed +<span class="lineNum"> 204 </span><span class="lineCov"> 176 : if ((unsigned)id >= m_facetData.size())</span> +<span class="lineNum"> 205 </span><span class="lineCov"> 59 : m_facetData.resize(id + 1);</span> +<span class="lineNum"> 206 </span> : +<span class="lineNum"> 207 </span><span class="lineCov"> 176 : if (m_facetData[id].empty())</span> +<span class="lineNum"> 208 </span><span class="lineCov"> 59 : parseVocBuf(m_facetData[id], findex.offset(id), findex.size(id));</span> +<span class="lineNum"> 209 </span> : +<span class="lineNum"> 210 </span><span class="lineCov"> 176 : return m_facetData[id];</span> +<span class="lineNum"> 211 </span> : } +<span class="lineNum"> 212 </span> : +<span class="lineNum"> 213 </span><span class="lineCov"> 3722 : const std::map<std::string, std::string>& Vocabulary::tagData(int id) const</span> +<span class="lineNum"> 214 </span> : { +<span class="lineNum"> 215 </span><span class="lineCov"> 3722 : if (id < 0) return emptyData;</span> +<span class="lineNum"> 216 </span> : +<span class="lineNum"> 217 </span> : // Enlarge the cache vector if needed +<span class="lineNum"> 218 </span><span class="lineCov"> 3722 : if ((unsigned)id >= m_tagData.size())</span> +<span class="lineNum"> 219 </span><span class="lineCov"> 1242 : m_tagData.resize(id + 1);</span> +<span class="lineNum"> 220 </span> : +<span class="lineNum"> 221 </span><span class="lineCov"> 3722 : if (m_tagData[id].empty())</span> +<span class="lineNum"> 222 </span><span class="lineCov"> 1242 : parseVocBuf(m_tagData[id], tindex.offset(id), tindex.size(id));</span> +<span class="lineNum"> 223 </span> : +<span class="lineNum"> 224 </span><span class="lineCov"> 3722 : return m_tagData[id];</span> +<span class="lineNum"> 225 </span> : } +<span class="lineNum"> 226 </span> : +<span class="lineNum"> 227 </span> : } +<span class="lineNum"> 228 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 229 </span> : +<span class="lineNum"> 230 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/vocabulary.h.gcov.html b/rep/ept/debtags/vocabulary.h.gcov.html new file mode 100644 index 0000000..b110f8c --- /dev/null +++ b/rep/ept/debtags/vocabulary.h.gcov.html @@ -0,0 +1,349 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/vocabulary.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - vocabulary.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">55</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">87.3 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">48</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_DEBTAGS_VOCABULARY_H +<span class="lineNum"> 2 </span> : #define EPT_DEBTAGS_VOCABULARY_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** @file +<span class="lineNum"> 5 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 6 </span> : * Debtags vocabulary access +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2003,2004,2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 13 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 14 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 15 </span> : * (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <ept/debtags/tag.h> +<span class="lineNum"> 28 </span> : #include <tagcoll/diskindex/mmap.h> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : #include <string> +<span class="lineNum"> 31 </span> : #include <vector> +<span class="lineNum"> 32 </span> : #include <map> +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : namespace ept { +<span class="lineNum"> 35 </span> : namespace debtags { +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : class Vocabulary +<span class="lineNum"> 38 </span> : { +<span class="lineNum"> 39 </span> : public: +<span class="lineNum"> 40 </span> : class FacetIndex : public tagcoll::diskindex::MMap +<span class="lineNum"> 41 </span> : { +<span class="lineNum"> 42 </span> : protected: +<span class="lineNum"> 43 </span> : // Layout of the data in the index +<span class="lineNum"> 44 </span> : struct Item { +<span class="lineNum"> 45 </span> : int offset; +<span class="lineNum"> 46 </span> : int size; +<span class="lineNum"> 47 </span> : int firsttag; +<span class="lineNum"> 48 </span> : int lasttag; +<span class="lineNum"> 49 </span> : const char name[]; +<span class="lineNum"> 50 </span> : }; +<span class="lineNum"> 51 </span><span class="lineCov"> 2393 : inline Item* item(int id) const</span> +<span class="lineNum"> 52 </span> : { +<span class="lineNum"> 53 </span><span class="lineCov"> 2393 : if (id >= 0 && (unsigned)id < size())</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 2392 : return (Item*)(m_buf + ((int*)m_buf)[id]);</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : return NULL;</span> +<span class="lineNum"> 56 </span> : } +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span> : public: +<span class="lineNum"> 59 </span><span class="lineCov"> 31 : FacetIndex() : tagcoll::diskindex::MMap() {}</span> +<span class="lineNum"> 60 </span> : FacetIndex(const tagcoll::diskindex::MasterMMap& master, size_t idx) +<span class="lineNum"> 61 </span> : : tagcoll::diskindex::MMap(master, idx) {} +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : /// Get the number of facets in the index +<span class="lineNum"> 64 </span><span class="lineCov"> 2501 : size_t size() const { return m_size == 0 ? 0 : *(int*)m_buf / sizeof(int); }</span> +<span class="lineNum"> 65 </span> : /// Get the offset of the facet data in the vocabulary for this facet +<span class="lineNum"> 66 </span><span class="lineCov"> 59 : size_t offset(int id) const { Item* i = item(id); return i == NULL ? 0 : i->offset; }</span> +<span class="lineNum"> 67 </span> : /// Get the size of the facet data in the vocabulary for this facet +<span class="lineNum"> 68 </span><span class="lineCov"> 59 : size_t size(int id) const { Item* i = item(id); return i == NULL ? 0 : i->size; }</span> +<span class="lineNum"> 69 </span> : /// Get the id of the first tag for this facet +<span class="lineNum"> 70 </span><span class="lineCov"> 91 : int firsttag(int id) const { Item* i = item(id); return i == NULL ? -1 : i->firsttag; }</span> +<span class="lineNum"> 71 </span> : /// Get the id of the last tag for this facet +<span class="lineNum"> 72 </span><span class="lineCov"> 2043 : int lasttag(int id) const { Item* i = item(id); return i == NULL ? -1 : i->lasttag; }</span> +<span class="lineNum"> 73 </span> : /// Get the name of this facet +<span class="lineNum"> 74 </span><span class="lineCov"> 88 : const char* name(int id) const { Item* i = item(id); return i == NULL ? "" : i->name; }</span> +<span class="lineNum"> 75 </span> : /// Get the ID of the facet with this name +<span class="lineNum"> 76 </span> : int id(const char* name) const; +<span class="lineNum"> 77 </span><span class="lineCov"> 7 : int id(const std::string& name) const { return id(name.c_str()); }</span> +<span class="lineNum"> 78 </span> : }; +<span class="lineNum"> 79 </span> : +<span class="lineNum"> 80 </span> : class TagIndex : public tagcoll::diskindex::MMap +<span class="lineNum"> 81 </span> : { +<span class="lineNum"> 82 </span> : protected: +<span class="lineNum"> 83 </span> : // Layout of the data in the index +<span class="lineNum"> 84 </span> : struct Item { +<span class="lineNum"> 85 </span> : int offset; +<span class="lineNum"> 86 </span> : int size; +<span class="lineNum"> 87 </span> : int facet; +<span class="lineNum"> 88 </span> : const char name[]; +<span class="lineNum"> 89 </span> : }; +<span class="lineNum"> 90 </span><span class="lineCov"> 1112004 : inline Item* item(int id) const</span> +<span class="lineNum"> 91 </span> : { +<span class="lineNum"> 92 </span><span class="lineCov"> 1112004 : if (id >= 0 && (unsigned)id < size())</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 1112004 : return (Item*)(m_buf + ((int*)m_buf)[id]);</span> +<span class="lineNum"> 94 </span><span class="lineNoCov"> 0 : return NULL;</span> +<span class="lineNum"> 95 </span> : } +<span class="lineNum"> 96 </span> : +<span class="lineNum"> 97 </span> : public: +<span class="lineNum"> 98 </span><span class="lineCov"> 31 : TagIndex() : tagcoll::diskindex::MMap() {}</span> +<span class="lineNum"> 99 </span> : TagIndex(const tagcoll::diskindex::MasterMMap& master, size_t idx) +<span class="lineNum"> 100 </span> : : tagcoll::diskindex::MMap(master, idx) {} +<span class="lineNum"> 101 </span> : +<span class="lineNum"> 102 </span> : /// Get the number of tags in the index +<span class="lineNum"> 103 </span><span class="lineCov"> 1327864 : size_t size() const { return m_size == 0 ? 0 : *(int*)m_buf / sizeof(int); }</span> +<span class="lineNum"> 104 </span> : /// Get the offset of the facet data in the vocabulary for this tag +<span class="lineNum"> 105 </span><span class="lineCov"> 1242 : size_t offset(int id) const { Item* i = item(id); return i == NULL ? 0 : i->offset; }</span> +<span class="lineNum"> 106 </span> : /// Get the size of the facet data in the vocabulary for this tag +<span class="lineNum"> 107 </span><span class="lineCov"> 1242 : size_t size(int id) const { Item* i = item(id); return i == NULL ? 0 : i->size; }</span> +<span class="lineNum"> 108 </span> : /// Get the id of the facet for this tag +<span class="lineNum"> 109 </span><span class="lineNoCov"> 0 : int facet(int id) const { Item* i = item(id); return i == NULL ? -1 : i->facet; }</span> +<span class="lineNum"> 110 </span> : /// Get the name of this tag +<span class="lineNum"> 111 </span><span class="lineCov"> 3767 : const char* name(int id) const { Item* i = item(id); return i == NULL ? "" : i->name; }</span> +<span class="lineNum"> 112 </span> : /// Get the ID of the tag with this name +<span class="lineNum"> 113 </span> : int id(const char* name) const; +<span class="lineNum"> 114 </span><span class="lineCov"> 105755 : int id(const std::string& name) const { return id(name.c_str()); }</span> +<span class="lineNum"> 115 </span> : }; +<span class="lineNum"> 116 </span> : +<span class="lineNum"> 117 </span> : protected: +<span class="lineNum"> 118 </span> : // Master MMap index container +<span class="lineNum"> 119 </span> : tagcoll::diskindex::MasterMMap mastermmap; +<span class="lineNum"> 120 </span> : +<span class="lineNum"> 121 </span> : time_t m_timestamp; +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span> : // Mmapped vocabulary file +<span class="lineNum"> 124 </span> : std::string voc_fname; +<span class="lineNum"> 125 </span> : int voc_fd; +<span class="lineNum"> 126 </span> : size_t voc_size; +<span class="lineNum"> 127 </span> : const char* voc_buf; +<span class="lineNum"> 128 </span> : +<span class="lineNum"> 129 </span> : // Facet and tag indexes +<span class="lineNum"> 130 </span> : FacetIndex findex; +<span class="lineNum"> 131 </span> : TagIndex tindex; +<span class="lineNum"> 132 </span> : +<span class="lineNum"> 133 </span> : // Cached parsed facet and tag records +<span class="lineNum"> 134 </span> : mutable std::vector< std::map<std::string, std::string> > m_facetData; +<span class="lineNum"> 135 </span> : mutable std::vector< std::map<std::string, std::string> > m_tagData; +<span class="lineNum"> 136 </span> : // Empty parsed data to return when data is asked for IDs == -1 +<span class="lineNum"> 137 </span> : std::map<std::string, std::string> emptyData; +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span> : void parseVocBuf(std::map<std::string, std::string>& res, size_t ofs, size_t len) const; +<span class="lineNum"> 140 </span> : +<span class="lineNum"> 141 </span> : public: +<span class="lineNum"> 142 </span> : Vocabulary(); +<span class="lineNum"> 143 </span> : ~Vocabulary(); +<span class="lineNum"> 144 </span> : +<span class="lineNum"> 145 </span> : /// Get the timestamp of when the index was last updated +<span class="lineNum"> 146 </span> : time_t timestamp() const { return m_timestamp; } +<span class="lineNum"> 147 </span> : +<span class="lineNum"> 148 </span> : /// Return true if this data source has data, false if it's empty +<span class="lineNum"> 149 </span><span class="lineCov"> 1 : bool hasData() const { return m_timestamp != 0; }</span> +<span class="lineNum"> 150 </span> : +<span class="lineNum"> 151 </span> : const FacetIndex& facetIndex() const { return findex; } +<span class="lineNum"> 152 </span> : const TagIndex& tagIndex() const { return tindex; } +<span class="lineNum"> 153 </span> : +<span class="lineNum"> 154 </span> : /** +<span class="lineNum"> 155 </span> : * Check if the vocabulary contains the facet `name' +<span class="lineNum"> 156 </span> : */ +<span class="lineNum"> 157 </span><span class="lineCov"> 2 : bool hasFacet(const std::string& name) const</span> +<span class="lineNum"> 158 </span> : { +<span class="lineNum"> 159 </span><span class="lineCov"> 2 : return findex.id(name.c_str()) != -1;</span> +<span class="lineNum"> 160 </span> : } +<span class="lineNum"> 161 </span> : +<span class="lineNum"> 162 </span> : /** +<span class="lineNum"> 163 </span> : * Check if the vocabulary contains the tag `fullname' +<span class="lineNum"> 164 </span> : */ +<span class="lineNum"> 165 </span><span class="lineCov"> 622 : bool hasTag(const std::string& fullname) const</span> +<span class="lineNum"> 166 </span> : { +<span class="lineNum"> 167 </span><span class="lineCov"> 622 : return tindex.id(fullname.c_str()) != -1;</span> +<span class="lineNum"> 168 </span> : } +<span class="lineNum"> 169 </span> : +<span class="lineNum"> 170 </span> : /** +<span class="lineNum"> 171 </span> : * Return the facet with the given name +<span class="lineNum"> 172 </span> : */ +<span class="lineNum"> 173 </span> : Facet facetByID(int id) const; +<span class="lineNum"> 174 </span> : +<span class="lineNum"> 175 </span> : /** +<span class="lineNum"> 176 </span> : * Return the tag with the given full name +<span class="lineNum"> 177 </span> : */ +<span class="lineNum"> 178 </span> : Tag tagByID(int id) const; +<span class="lineNum"> 179 </span> : +<span class="lineNum"> 180 </span> : template<typename IDS> +<span class="lineNum"> 181 </span><span class="lineCov"> 84590 : std::set<Tag> tagsByID(const IDS& ids) const</span> +<span class="lineNum"> 182 </span> : { +<span class="lineNum"> 183 </span><span class="lineCov"> 84590 : std::set<Tag> res;</span> +<span class="lineNum"> 184 </span><span class="lineCov"> 507017 : for (typename IDS::const_iterator i = ids.begin();</span> +<span class="lineNum"> 185 </span> : i != ids.end(); ++i) +<span class="lineNum"> 186 </span><span class="lineCov"> 422427 : res.insert(tagByID(*i));</span> +<span class="lineNum"> 187 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 188 </span> : } +<span class="lineNum"> 189 </span> : +<span class="lineNum"> 190 </span> : /** +<span class="lineNum"> 191 </span> : * Return the facet for the tag with the given ID +<span class="lineNum"> 192 </span> : */ +<span class="lineNum"> 193 </span><span class="lineNoCov"> 0 : Facet facetByTag(int id) const { return facetByID(tindex.facet(id)); }</span> +<span class="lineNum"> 194 </span> : +<span class="lineNum"> 195 </span> : /** +<span class="lineNum"> 196 </span> : * Return the facet with the given name +<span class="lineNum"> 197 </span> : */ +<span class="lineNum"> 198 </span><span class="lineCov"> 4 : Facet facetByName(const std::string& name) const { return facetByID(findex.id(name)); }</span> +<span class="lineNum"> 199 </span> : +<span class="lineNum"> 200 </span> : /** +<span class="lineNum"> 201 </span> : * Return the tag with the given full name +<span class="lineNum"> 202 </span> : */ +<span class="lineNum"> 203 </span><span class="lineCov"> 105755 : Tag tagByName(const std::string& fullname) const { return tagByID(tindex.id(fullname)); }</span> +<span class="lineNum"> 204 </span> : +<span class="lineNum"> 205 </span> : /** +<span class="lineNum"> 206 </span> : * Return all the facets in the vocabulary +<span class="lineNum"> 207 </span> : */ +<span class="lineNum"> 208 </span><span class="lineCov"> 4 : std::set< Facet > facets() const</span> +<span class="lineNum"> 209 </span> : { +<span class="lineNum"> 210 </span><span class="lineCov"> 4 : std::set< Facet > res;</span> +<span class="lineNum"> 211 </span><span class="lineCov"> 91 : for (size_t i = 0; i < findex.size(); i++)</span> +<span class="lineNum"> 212 </span><span class="lineCov"> 87 : res.insert(facetByID(i));</span> +<span class="lineNum"> 213 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 214 </span> : } +<span class="lineNum"> 215 </span> : +<span class="lineNum"> 216 </span> : /** +<span class="lineNum"> 217 </span> : * Return all the tags in the vocabulary +<span class="lineNum"> 218 </span> : */ +<span class="lineNum"> 219 </span><span class="lineCov"> 6 : std::set< Tag > tags() const</span> +<span class="lineNum"> 220 </span> : { +<span class="lineNum"> 221 </span><span class="lineCov"> 6 : std::set< Tag > res;</span> +<span class="lineNum"> 222 </span><span class="lineCov"> 3106 : for (size_t i = 0; i < tindex.size(); i++)</span> +<span class="lineNum"> 223 </span><span class="lineCov"> 3100 : res.insert(tagByID(i));</span> +<span class="lineNum"> 224 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 225 </span> : } +<span class="lineNum"> 226 </span> : +<span class="lineNum"> 227 </span> : /** +<span class="lineNum"> 228 </span> : * Return the tags in the given facet +<span class="lineNum"> 229 </span> : */ +<span class="lineNum"> 230 </span><span class="lineCov"> 91 : std::set< Tag > tags(int facet) const</span> +<span class="lineNum"> 231 </span> : { +<span class="lineNum"> 232 </span><span class="lineCov"> 91 : std::set< Tag > res;</span> +<span class="lineNum"> 233 </span><span class="lineCov"> 2044 : for (int i = findex.firsttag(facet); i != -1 && i <= findex.lasttag(facet); i++)</span> +<span class="lineNum"> 234 </span><span class="lineCov"> 1953 : res.insert(tagByID(i));</span> +<span class="lineNum"> 235 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 236 </span> : } +<span class="lineNum"> 237 </span> : +<span class="lineNum"> 238 </span><span class="lineCov"> 3 : std::set< Tag > tags(const std::string& facetName) const</span> +<span class="lineNum"> 239 </span> : { +<span class="lineNum"> 240 </span><span class="lineCov"> 3 : return tags(findex.id(facetName));</span> +<span class="lineNum"> 241 </span> : } +<span class="lineNum"> 242 </span> : +<span class="lineNum"> 243 </span> : std::set< Tag > tags(const Facet& facet) const +<span class="lineNum"> 244 </span> : { +<span class="lineNum"> 245 </span> : return tags(facet.id()); +<span class="lineNum"> 246 </span> : } +<span class="lineNum"> 247 </span> : +<span class="lineNum"> 248 </span> : #if 0 +<span class="lineNum"> 249 </span> : /// Get the DerivedTagList with the Equates: expressions read from the vocabulary +<span class="lineNum"> 250 </span> : const DerivedTagList& getEquations() const throw () { return equations; } +<span class="lineNum"> 251 </span> : +<span class="lineNum"> 252 </span> : /// Get a set with all the facets present in the vocabulary that are matched by `filter' +<span class="lineNum"> 253 </span> : FacetSet facets(const FacetMatcher& filter) const throw () { return getFiltered(filter); } +<span class="lineNum"> 254 </span> : #endif +<span class="lineNum"> 255 </span> : +<span class="lineNum"> 256 </span> : #if 0 +<span class="lineNum"> 257 </span> : // These functions are here just to be used by Facet and Tag. I'm not +<span class="lineNum"> 258 </span> : // making them private because I don't want Facet and Tag to access other +<span class="lineNum"> 259 </span> : // Vocabulary member, and other classes can't use these anyway as Facet::Data and +<span class="lineNum"> 260 </span> : // Tag::Data are protected +<span class="lineNum"> 261 </span> : const Facet::Data& facetData(int idx) { return m_facets[idx]; } +<span class="lineNum"> 262 </span> : const Tag::Data& tagData(int idx) { return m_tags[idx]; } +<span class="lineNum"> 263 </span> : #endif +<span class="lineNum"> 264 </span> : +<span class="lineNum"> 265 </span> : /// Get the facet name given the facet id +<span class="lineNum"> 266 </span><span class="lineCov"> 88 : std::string facetName(int id) const { return findex.name(id); }</span> +<span class="lineNum"> 267 </span> : +<span class="lineNum"> 268 </span> : /// Get the tag name given the tag id +<span class="lineNum"> 269 </span><span class="lineCov"> 1904 : std::string tagName(int id) const { return tindex.name(id); }</span> +<span class="lineNum"> 270 </span> : +<span class="lineNum"> 271 </span> : /// Get the tag name given the tag id +<span class="lineNum"> 272 </span> : std::string tagShortName(int id) const; +<span class="lineNum"> 273 </span> : +<span class="lineNum"> 274 </span> : const std::map<std::string, std::string>& facetData(int id) const; +<span class="lineNum"> 275 </span> : const std::map<std::string, std::string>& tagData(int id) const; +<span class="lineNum"> 276 </span> : }; +<span class="lineNum"> 277 </span> : +<span class="lineNum"> 278 </span> : } +<span class="lineNum"> 279 </span> : } +<span class="lineNum"> 280 </span> : +<span class="lineNum"> 281 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 282 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/debtags/vocabulary.test.h.gcov.html b/rep/ept/debtags/vocabulary.test.h.gcov.html new file mode 100644 index 0000000..b5b697a --- /dev/null +++ b/rep/ept/debtags/vocabulary.test.h.gcov.html @@ -0,0 +1,385 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/debtags/vocabulary.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/debtags</a> - vocabulary.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">173</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">99.4 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">172</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /* +<span class="lineNum"> 2 </span> : * Tag vocabulary access +<span class="lineNum"> 3 </span> : * +<span class="lineNum"> 4 </span> : * Copyright (C) 2003--2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 5 </span> : * +<span class="lineNum"> 6 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 7 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 8 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 9 </span> : * (at your option) any later version. +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 12 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 13 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 14 </span> : * GNU General Public License for more details. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 17 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 18 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 19 </span> : */ +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span> : #include <wibble/test.h> +<span class="lineNum"> 22 </span> : #include <ept/debtags/vocabulary.h> +<span class="lineNum"> 23 </span> : #include <ept/debtags/maint/vocabularymerger.h> +<span class="lineNum"> 24 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 25 </span> : #include <tagcoll/utils/set.h> +<span class="lineNum"> 26 </span> : #include <tagcoll/input/stdio.h> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include "debtags.test.h" +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : // This is not exported by default +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace debtags { +<span class="lineNum"> 33 </span> : int tagcmp(const char* tag1, const char* tag2); +<span class="lineNum"> 34 </span> : } +<span class="lineNum"> 35 </span> : } +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : using namespace std; +<span class="lineNum"> 38 </span> : using namespace tagcoll::utils; +<span class="lineNum"> 39 </span> : using namespace ept::debtags; +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : struct TestVocabulary : DebtagsTestEnvironment +<span class="lineNum"> 42 </span><span class="lineCov"> 38 : {</span> +<span class="lineNum"> 43 </span> : Vocabulary m_tags; +<span class="lineNum"> 44 </span><span class="lineCov"> 1298 : Vocabulary& tags() { return m_tags; }</span> +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span><span class="lineCov"> 1 : Test _1()</span> +<span class="lineNum"> 47 </span> : { +<span class="lineNum"> 48 </span><span class="lineCov"> 1 : tags(); // this will throw if the open above didn't work</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineCov"> 1 : Test _2()</span> +<span class="lineNum"> 52 </span> : { +<span class="lineNum"> 53 </span><span class="lineCov"> 1 : assert( tags().hasFacet( "works-with" ) );</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 2 : assert( !tags().hasFacet( "blah" ) );</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span><span class="lineCov"> 1 : Test _3()</span> +<span class="lineNum"> 58 </span> : { +<span class="lineNum"> 59 </span><span class="lineCov"> 1 : assert( tags().hasTag( "works-with::people" ) );</span> +<span class="lineNum"> 60 </span><span class="lineCov"> 2 : assert( !tags().hasTag( "works-with::midgets" ) );</span> +<span class="lineNum"> 61 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span><span class="lineCov"> 1 : Test _4()</span> +<span class="lineNum"> 64 </span> : { +<span class="lineNum"> 65 </span><span class="lineCov"> 1 : Tag people = tags().tagByName( "works-with::people" ),</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 2 : midgets = tags().tagByName( "works-with::midgets" ),</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 2 : blahg = tags().tagByName( "works-with::blahg" ),</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 2 : text = tags().tagByName( "works-with::text" ),</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 2 : people2 = tags().tagByName( "works-with::people" );</span> +<span class="lineNum"> 70 </span><span class="lineCov"> 2 : assert( people != midgets );</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 2 : assert( people != text );</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 2 : assert( people != blahg );</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 2 : assert( midgets == blahg );</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 2 : assert( midgets == midgets );</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 2 : assert( people == people2 );</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 2 : assert( people == people );</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span><span class="lineCov"> 1 : Test _5()</span> +<span class="lineNum"> 80 </span> : { +<span class="lineNum"> 81 </span><span class="lineCov"> 1 : Tag a = tags().tagByName( "works-with::people" ),</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 2 : b = tags().tagByName( "works-with::midgets" );</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 2 : std::set< Tag > s = tags().tags(),</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 1 : f = tags().tags( "works-with" ),</span> +<span class="lineNum"> 85 </span><span class="lineCov"> 2 : n = tags().tags( "nonsense" );</span> +<span class="lineNum"> 86 </span><span class="lineCov"> 2 : assert( set_contains(s, a) );</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 2 : assert( set_contains(f, a) );</span> +<span class="lineNum"> 88 </span><span class="lineCov"> 2 : assert( set_contains(s, f) );</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 2 : assert( !set_contains(s, b) );</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 2 : assert( !set_contains(f, b) );</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 2 : assert( n.empty() );</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span><span class="lineCov"> 1 : Test _6()</span> +<span class="lineNum"> 95 </span> : { +<span class="lineNum"> 96 </span><span class="lineCov"> 1 : Facet f = tags().facetByName( "works-with" );</span> +<span class="lineNum"> 97 </span><span class="lineCov"> 2 : Tag t = tags().tagByName( "works-with::people" );</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 2 : assert_eq(f.name(), "works-with");</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 1 : assert_eq(t.name(), "people");</span> +<span class="lineNum"> 100 </span><span class="lineCov"> 1 : assert_eq(t.fullname(), "works-with::people");</span> +<span class="lineNum"> 101 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 102 </span> : +<span class="lineNum"> 103 </span><span class="lineCov"> 1 : Test _7()</span> +<span class="lineNum"> 104 </span> : { +<span class="lineNum"> 105 </span><span class="lineCov"> 1 : Facet f = tags().facetByName( "works-with" );</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 2 : std::set< Tag > x = tags().tags( "works-with" );</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 2 : assert( x == f.tags() );</span> +<span class="lineNum"> 108 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span><span class="lineCov"> 1 : Test _8()</span> +<span class="lineNum"> 111 </span> : { +<span class="lineNum"> 112 </span><span class="lineCov"> 1 : Facet f = tags().facetByName( "does-not-work-with" );</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 1 : int x = 1;</span> +<span class="lineNum"> 114 </span> : try { +<span class="lineNum"> 115 </span><span class="lineCov"> 1 : f.tags();</span> +<span class="lineNum"> 116 </span><span class="lineNoCov"> 0 : x = 2;</span> +<span class="lineNum"> 117 </span><span class="lineCov"> 2 : } catch (...) {</span> +<span class="lineNum"> 118 </span><span class="lineCov"> 1 : x = 3;</span> +<span class="lineNum"> 119 </span> : } +<span class="lineNum"> 120 </span><span class="lineCov"> 1 : assert_eq( x, 3 );</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span><span class="lineCov"> 1 : Test _9()</span> +<span class="lineNum"> 124 </span> : { +<span class="lineNum"> 125 </span><span class="lineCov"> 1 : Facet f = tags().facetByName( "legacy" );</span> +<span class="lineNum"> 126 </span><span class="lineCov"> 2 : assert_eq(f.shortDescription(), "");</span> +<span class="lineNum"> 127 </span><span class="lineCov"> 1 : assert_eq(f.longDescription(), "");</span> +<span class="lineNum"> 128 </span> : //assert_eq(f.shortDescription( "weehee" ), "weehee"); +<span class="lineNum"> 129 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 130 </span> : +<span class="lineNum"> 131 </span> : Test _10() +<span class="lineNum"> 132 </span> : { +<span class="lineNum"> 133 </span> : // assert that one-character tag names are parsed correctly +<span class="lineNum"> 134 </span> : assert( tags().hasTag( "implemented-in::c" ) ); +<span class="lineNum"> 135 </span> : } +<span class="lineNum"> 136 </span> : +<span class="lineNum"> 137 </span><span class="lineCov"> 1 : Test _11()</span> +<span class="lineNum"> 138 </span> : { +<span class="lineNum"> 139 </span> : // assert that all tags are somehow working +<span class="lineNum"> 140 </span><span class="lineCov"> 1 : std::set<Facet> facets = tags().facets();</span> +<span class="lineNum"> 141 </span> : +<span class="lineNum"> 142 </span><span class="lineCov"> 30 : for (std::set<Facet>::const_iterator i = facets.begin();</span> +<span class="lineNum"> 143 </span> : i != facets.end(); i++) +<span class="lineNum"> 144 </span> : { +<span class="lineNum"> 145 </span><span class="lineCov"> 29 : i->name(string("foo"));</span> +<span class="lineNum"> 146 </span><span class="lineCov"> 58 : i->shortDescription(string("foo"));</span> +<span class="lineNum"> 147 </span><span class="lineCov"> 58 : i->longDescription(string("foo"));</span> +<span class="lineNum"> 148 </span><span class="lineCov"> 58 : i->tags();</span> +<span class="lineNum"> 149 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 150 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 151 </span> : +<span class="lineNum"> 152 </span><span class="lineCov"> 1 : Test _12()</span> +<span class="lineNum"> 153 </span> : { +<span class="lineNum"> 154 </span> : // assert that all tags are somehow working +<span class="lineNum"> 155 </span><span class="lineCov"> 1 : std::set<Tag> tags = this->tags().tags();</span> +<span class="lineNum"> 156 </span> : +<span class="lineNum"> 157 </span><span class="lineCov"> 1242 : for (std::set<Tag>::const_iterator i = tags.begin();</span> +<span class="lineNum"> 158 </span> : i != tags.end(); i++) +<span class="lineNum"> 159 </span> : { +<span class="lineNum"> 160 </span><span class="lineCov"> 620 : i->name(string("foo"));</span> +<span class="lineNum"> 161 </span><span class="lineCov"> 1240 : i->fullname(string("foo"));</span> +<span class="lineNum"> 162 </span><span class="lineCov"> 1240 : i->shortDescription(string("foo"));</span> +<span class="lineNum"> 163 </span><span class="lineCov"> 1240 : i->longDescription(string("foo"));</span> +<span class="lineNum"> 164 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 165 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 166 </span> : +<span class="lineNum"> 167 </span> : // Check for correctness of the first and last tag in the vocabulary +<span class="lineNum"> 168 </span><span class="lineCov"> 1 : Test _13()</span> +<span class="lineNum"> 169 </span> : { +<span class="lineNum"> 170 </span><span class="lineCov"> 1 : Vocabulary& tags = this->tags();</span> +<span class="lineNum"> 171 </span> : +<span class="lineNum"> 172 </span><span class="lineCov"> 1 : Tag first = tags.tagByName("accessibility::TODO");</span> +<span class="lineNum"> 173 </span><span class="lineCov"> 2 : assert(first != Tag());</span> +<span class="lineNum"> 174 </span><span class="lineCov"> 1 : assert_eq(first.fullname(), string("accessibility::TODO"));</span> +<span class="lineNum"> 175 </span><span class="lineCov"> 2 : assert_eq(first.name(), string("TODO"));</span> +<span class="lineNum"> 176 </span><span class="lineCov"> 2 : assert_eq(first.shortDescription(), string("Need an extra tag"));</span> +<span class="lineNum"> 177 </span> : +<span class="lineNum"> 178 </span><span class="lineCov"> 2 : Tag last = tags.tagByName("x11::xserver");</span> +<span class="lineNum"> 179 </span><span class="lineCov"> 2 : assert(last != Tag());</span> +<span class="lineNum"> 180 </span><span class="lineCov"> 1 : assert_eq(last.fullname(), string("x11::xserver"));</span> +<span class="lineNum"> 181 </span><span class="lineCov"> 2 : assert_eq(last.name(), string("xserver"));</span> +<span class="lineNum"> 182 </span><span class="lineCov"> 2 : assert_eq(last.shortDescription(), string("X Server"));</span> +<span class="lineNum"> 183 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 184 </span> : +<span class="lineNum"> 185 </span><span class="lineCov"> 1 : Test _14()</span> +<span class="lineNum"> 186 </span> : { +<span class="lineNum"> 187 </span> : // assert that it's possible to go from facet to ID and back +<span class="lineNum"> 188 </span><span class="lineCov"> 1 : std::set<Facet> facets = tags().facets();</span> +<span class="lineNum"> 189 </span> : +<span class="lineNum"> 190 </span><span class="lineCov"> 30 : for (std::set<Facet>::const_iterator i = facets.begin();</span> +<span class="lineNum"> 191 </span> : i != facets.end(); i++) +<span class="lineNum"> 192 </span> : { +<span class="lineNum"> 193 </span><span class="lineCov"> 29 : Facet f = tags().facetByID(i->id());</span> +<span class="lineNum"> 194 </span><span class="lineCov"> 29 : assert_eq(*i, f);</span> +<span class="lineNum"> 195 </span><span class="lineCov"> 29 : assert_eq(i->name(), f.name());</span> +<span class="lineNum"> 196 </span><span class="lineCov"> 29 : assert_eq(i->shortDescription(), f.shortDescription());</span> +<span class="lineNum"> 197 </span><span class="lineCov"> 29 : assert_eq(i->longDescription(), f.longDescription());</span> +<span class="lineNum"> 198 </span><span class="lineCov"> 29 : assert_eq(i->tags().size(), f.tags().size());</span> +<span class="lineNum"> 199 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 200 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 201 </span> : +<span class="lineNum"> 202 </span><span class="lineCov"> 1 : Test _15()</span> +<span class="lineNum"> 203 </span> : { +<span class="lineNum"> 204 </span> : // assert that it's possible to go from tag to ID and back +<span class="lineNum"> 205 </span><span class="lineCov"> 1 : std::set<Tag> tags = this->tags().tags();</span> +<span class="lineNum"> 206 </span> : +<span class="lineNum"> 207 </span><span class="lineCov"> 621 : for (std::set<Tag>::const_iterator i = tags.begin();</span> +<span class="lineNum"> 208 </span> : i != tags.end(); i++) +<span class="lineNum"> 209 </span> : { +<span class="lineNum"> 210 </span><span class="lineCov"> 620 : Tag t = this->tags().tagByID(i->id());</span> +<span class="lineNum"> 211 </span><span class="lineCov"> 620 : assert_eq(*i, t);</span> +<span class="lineNum"> 212 </span><span class="lineCov"> 620 : assert_eq(i->name(), t.name());</span> +<span class="lineNum"> 213 </span><span class="lineCov"> 620 : assert_eq(i->fullname(), t.fullname());</span> +<span class="lineNum"> 214 </span><span class="lineCov"> 620 : assert_eq(i->shortDescription(), t.shortDescription());</span> +<span class="lineNum"> 215 </span><span class="lineCov"> 620 : assert_eq(i->longDescription(), t.longDescription());</span> +<span class="lineNum"> 216 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 217 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 218 </span> : +<span class="lineNum"> 219 </span><span class="lineCov"> 1 : Test _16()</span> +<span class="lineNum"> 220 </span> : { +<span class="lineNum"> 221 </span> : // assert that facet IDs are distinct +<span class="lineNum"> 222 </span><span class="lineCov"> 1 : std::set<Facet> facets = tags().facets();</span> +<span class="lineNum"> 223 </span><span class="lineCov"> 1 : std::set<int> ids;</span> +<span class="lineNum"> 224 </span><span class="lineCov"> 30 : for (std::set<Facet>::const_iterator i = facets.begin();</span> +<span class="lineNum"> 225 </span> : i != facets.end(); i++) +<span class="lineNum"> 226 </span><span class="lineCov"> 29 : ids.insert(i->id());</span> +<span class="lineNum"> 227 </span> : +<span class="lineNum"> 228 </span><span class="lineCov"> 1 : assert_eq(facets.size(), ids.size());</span> +<span class="lineNum"> 229 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 230 </span> : +<span class="lineNum"> 231 </span><span class="lineCov"> 1 : Test _17()</span> +<span class="lineNum"> 232 </span> : { +<span class="lineNum"> 233 </span> : // assert that tag IDs are distinct +<span class="lineNum"> 234 </span><span class="lineCov"> 1 : std::set<Tag> tags = this->tags().tags();</span> +<span class="lineNum"> 235 </span><span class="lineCov"> 1 : std::set<int> ids;</span> +<span class="lineNum"> 236 </span><span class="lineCov"> 621 : for (std::set<Tag>::const_iterator i = tags.begin();</span> +<span class="lineNum"> 237 </span> : i != tags.end(); i++) +<span class="lineNum"> 238 </span><span class="lineCov"> 620 : ids.insert(i->id());</span> +<span class="lineNum"> 239 </span> : +<span class="lineNum"> 240 </span><span class="lineCov"> 1 : assert_eq(tags.size(), ids.size());</span> +<span class="lineNum"> 241 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 242 </span> : +<span class="lineNum"> 243 </span><span class="lineCov"> 1 : Test _18()</span> +<span class="lineNum"> 244 </span> : { +<span class="lineNum"> 245 </span> : // assert that all the tags are indexed +<span class="lineNum"> 246 </span><span class="lineCov"> 1 : ept::debtags::VocabularyMerger voc;</span> +<span class="lineNum"> 247 </span><span class="lineCov"> 1 : tagcoll::input::Stdio in(ept::debtags::Path::vocabulary());</span> +<span class="lineNum"> 248 </span><span class="lineCov"> 1 : voc.read(in);</span> +<span class="lineNum"> 249 </span><span class="lineCov"> 1 : std::set<std::string> all = voc.tagNames();</span> +<span class="lineNum"> 250 </span><span class="lineCov"> 1242 : for (std::set<std::string>::const_iterator i = all.begin();</span> +<span class="lineNum"> 251 </span> : i != all.end(); ++i) +<span class="lineNum"> 252 </span><span class="lineCov"> 620 : assert(this->tags().hasTag(*i));</span> +<span class="lineNum"> 253 </span> : +<span class="lineNum"> 254 </span> : // There should be the same amount of tags in both +<span class="lineNum"> 255 </span><span class="lineCov"> 1 : std::set<Tag> allTags = this->tags().tags();</span> +<span class="lineNum"> 256 </span><span class="lineCov"> 1 : assert_eq(all.size(), allTags.size());</span> +<span class="lineNum"> 257 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 258 </span> : +<span class="lineNum"> 259 </span><span class="lineCov"> 1 : Test _19()</span> +<span class="lineNum"> 260 </span> : { +<span class="lineNum"> 261 </span> : // test the tagcmp function +<span class="lineNum"> 262 </span> : +<span class="lineNum"> 263 </span> : // If unfaceted, same as strcmp +<span class="lineNum"> 264 </span><span class="lineCov"> 1 : assert(ept::debtags::tagcmp("antani", "blinda") < 0);</span> +<span class="lineNum"> 265 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("blinda", "antani") > 0);</span> +<span class="lineNum"> 266 </span><span class="lineCov"> 2 : assert_eq(ept::debtags::tagcmp("antani", "antani"), 0);</span> +<span class="lineNum"> 267 </span> : +<span class="lineNum"> 268 </span> : // If the same and faceted, should work +<span class="lineNum"> 269 </span><span class="lineCov"> 2 : assert_eq(ept::debtags::tagcmp("antani::blinda", "antani::blinda"), 0);</span> +<span class="lineNum"> 270 </span> : +<span class="lineNum"> 271 </span> : // With different facet names, work just as strcmp +<span class="lineNum"> 272 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("antani::blinda", "blinda::blinda") < 0);</span> +<span class="lineNum"> 273 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("blinda::blinda", "antani::blinda") > 0);</span> +<span class="lineNum"> 274 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("anta::blinda", "antani::blinda") < 0);</span> +<span class="lineNum"> 275 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("antani::blinda", "anta::blinda") > 0);</span> +<span class="lineNum"> 276 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("anta::blinda", "anta-ni::blinda") < 0);</span> +<span class="lineNum"> 277 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("anta-ni::blinda", "anta::blinda") > 0);</span> +<span class="lineNum"> 278 </span> : +<span class="lineNum"> 279 </span> : // With same facet names, work just as strcmp on the tags +<span class="lineNum"> 280 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("a::antani", "a::blinda") < 0);</span> +<span class="lineNum"> 281 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("a::blinda", "a::antani") > 0);</span> +<span class="lineNum"> 282 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("a::anta", "a::antani") < 0);</span> +<span class="lineNum"> 283 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("a::antani", "a::anta") > 0);</span> +<span class="lineNum"> 284 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("a::anta", "a::anta-ni") < 0);</span> +<span class="lineNum"> 285 </span><span class="lineCov"> 2 : assert(ept::debtags::tagcmp("a::anta-ni", "a::anta") > 0);</span> +<span class="lineNum"> 286 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 287 </span> : +<span class="lineNum"> 288 </span> : Test _20() +<span class="lineNum"> 289 </span> : { +<span class="lineNum"> 290 </span> : // check that we're seeing all the tags for a facet +<span class="lineNum"> 291 </span> : std::set<Tag> t = tags().tags("accessibility"); +<span class="lineNum"> 292 </span> : assert_eq(t.size(), 10u); +<span class="lineNum"> 293 </span> : +<span class="lineNum"> 294 </span> : t = tags().tags("works-with-format"); +<span class="lineNum"> 295 </span> : assert_eq(t.size(), 33u); +<span class="lineNum"> 296 </span> : } +<span class="lineNum"> 297 </span> : +<span class="lineNum"> 298 </span> : // If there is no data, Vocabulary should work as an empty vocabulary +<span class="lineNum"> 299 </span><span class="lineCov"> 1 : Test _21()</span> +<span class="lineNum"> 300 </span> : { +<span class="lineNum"> 301 </span><span class="lineCov"> 1 : Path::OverrideDebtagsSourceDir odsd("./empty");</span> +<span class="lineNum"> 302 </span><span class="lineCov"> 2 : Path::OverrideDebtagsIndexDir odid("./empty");</span> +<span class="lineNum"> 303 </span><span class="lineCov"> 2 : Path::OverrideDebtagsUserSourceDir odusd("./empty");</span> +<span class="lineNum"> 304 </span><span class="lineCov"> 2 : Path::OverrideDebtagsUserIndexDir oduid("./empty");</span> +<span class="lineNum"> 305 </span><span class="lineCov"> 1 : Vocabulary empty;</span> +<span class="lineNum"> 306 </span> : +<span class="lineNum"> 307 </span><span class="lineCov"> 1 : assert(!empty.hasData());</span> +<span class="lineNum"> 308 </span> : +<span class="lineNum"> 309 </span><span class="lineCov"> 1 : set<Facet> facets = empty.facets();</span> +<span class="lineNum"> 310 </span><span class="lineCov"> 1 : assert_eq(facets.size(), 0u);</span> +<span class="lineNum"> 311 </span> : +<span class="lineNum"> 312 </span><span class="lineCov"> 1 : set<Tag> tags = empty.tags();</span> +<span class="lineNum"> 313 </span><span class="lineCov"> 1 : assert_eq(tags.size(), 0u);</span> +<span class="lineNum"> 314 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 315 </span> : +<span class="lineNum"> 316 </span> : }; +<span class="lineNum"> 317 </span> : +<span class="lineNum"> 318 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/index.html b/rep/ept/index.html new file mode 100644 index 0000000..bbf0716 --- /dev/null +++ b/rep/ept/index.html @@ -0,0 +1,110 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../index.html">directory</a> - ept</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">38</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">73.7 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">28</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="progresscallback.cpp.gcov.html">progresscallback.cpp</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0 %</td> + <td class="coverNumLo">0 / 4 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="progresscallback.h.gcov.html">progresscallback.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0 %</td> + <td class="coverNumLo">0 / 3 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="test.h.gcov.html">test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">15 / 15 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="token.h.gcov.html">token.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=81 height=10 alt="81.2%"><img src="../snow.png" width=19 height=10 alt="81.2%"></td></tr></table> + </td> + <td class="coverPerHi">81.2 %</td> + <td class="coverNumHi">13 / 16 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/index.html b/rep/ept/popcon/index.html new file mode 100644 index 0000000..d87cf3d --- /dev/null +++ b/rep/ept/popcon/index.html @@ -0,0 +1,128 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - ept/popcon</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">161</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">83.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">134</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="local.cc.gcov.html">local.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=62 height=10 alt="62.1%"><img src="../../snow.png" width=38 height=10 alt="62.1%"></td></tr></table> + </td> + <td class="coverPerHi">62.1 %</td> + <td class="coverNumHi">41 / 66 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="local.h.gcov.html">local.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">1 / 1 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="local.test.h.gcov.html">local.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">8 / 8 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="popcon.cc.gcov.html">popcon.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=96 height=10 alt="95.7%"><img src="../../snow.png" width=4 height=10 alt="95.7%"></td></tr></table> + </td> + <td class="coverPerHi">95.7 %</td> + <td class="coverNumHi">22 / 23 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="popcon.h.gcov.html">popcon.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=96 height=10 alt="96.0%"><img src="../../snow.png" width=4 height=10 alt="96.0%"></td></tr></table> + </td> + <td class="coverPerHi">96.0 %</td> + <td class="coverNumHi">24 / 25 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="popcon.test.h.gcov.html">popcon.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">38 / 38 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/local.cc.gcov.html b/rep/ept/popcon/local.cc.gcov.html new file mode 100644 index 0000000..e6b44b8 --- /dev/null +++ b/rep/ept/popcon/local.cc.gcov.html @@ -0,0 +1,235 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/local.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/popcon</a> - local.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">66</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">62.1 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">41</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** @file +<span class="lineNum"> 2 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 3 </span> : * Correlate popcon data with local popcon information +<span class="lineNum"> 4 </span> : */ +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : /* +<span class="lineNum"> 7 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 10 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 11 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 12 </span> : * (at your option) any later version. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 15 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 16 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 17 </span> : * GNU General Public License for more details. +<span class="lineNum"> 18 </span> : * +<span class="lineNum"> 19 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 20 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 21 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 22 </span> : */ +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span> : #include <ept/popcon/local.h> +<span class="lineNum"> 25 </span> : #include <ept/popcon/popcon.h> +<span class="lineNum"> 26 </span> : #include <ept/popcon/maint/path.h> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include <wibble/exception.h> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : #include <algorithm> +<span class="lineNum"> 31 </span> : #include <fstream> +<span class="lineNum"> 32 </span> : #include <cmath> +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : //#include <iostream> +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : using namespace std; +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span> : namespace ept { +<span class="lineNum"> 39 </span> : namespace popcon { +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : // Split a string where there are separators +<span class="lineNum"> 42 </span><span class="lineCov"> 1903 : static vector<string> split(const std::string& str, char sep = ' ')</span> +<span class="lineNum"> 43 </span> : { +<span class="lineNum"> 44 </span><span class="lineCov"> 1903 : vector<string> res;</span> +<span class="lineNum"> 45 </span><span class="lineCov"> 1903 : size_t start = 0;</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 10435 : while (start < str.size())</span> +<span class="lineNum"> 47 </span> : { +<span class="lineNum"> 48 </span><span class="lineCov"> 8531 : size_t end = str.find(sep, start);</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 8531 : if (end == string::npos)</span> +<span class="lineNum"> 50 </span> : { +<span class="lineNum"> 51 </span><span class="lineCov"> 1902 : res.push_back(str.substr(start));</span> +<span class="lineNum"> 52 </span><span class="lineCov"> 1902 : break;</span> +<span class="lineNum"> 53 </span> : } +<span class="lineNum"> 54 </span> : else +<span class="lineNum"> 55 </span> : { +<span class="lineNum"> 56 </span><span class="lineCov"> 6629 : res.push_back(str.substr(start, end-start));</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 6629 : start = end + 1;</span> +<span class="lineNum"> 58 </span> : } +<span class="lineNum"> 59 </span> : } +<span class="lineNum"> 60 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 61 </span> : } +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : // Reverse sort pairs by comparing their second element +<span class="lineNum"> 64 </span> : struct secondsort +<span class="lineNum"> 65 </span> : { +<span class="lineNum"> 66 </span><span class="lineNoCov"> 0 : bool operator()(const pair<string, float>& a, const pair<string, float>& b) const</span> +<span class="lineNum"> 67 </span> : { +<span class="lineNum"> 68 </span><span class="lineNoCov"> 0 : if (a.second == b.second)</span> +<span class="lineNum"> 69 </span><span class="lineNoCov"> 0 : return a.first > b.first;</span> +<span class="lineNum"> 70 </span> : else +<span class="lineNum"> 71 </span><span class="lineNoCov"> 0 : return a.second > b.second;</span> +<span class="lineNum"> 72 </span> : } +<span class="lineNum"> 73 </span> : }; +<span class="lineNum"> 74 </span> : +<span class="lineNum"> 75 </span><span class="lineCov"> 1 : Local::Local(const std::string& file)</span> +<span class="lineNum"> 76 </span> : { +<span class="lineNum"> 77 </span><span class="lineCov"> 1 : m_timestamp = Path::timestamp(file);</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 1 : if (m_timestamp == 0)</span> +<span class="lineNum"> 79 </span><span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span><span class="lineCov"> 1 : ifstream in;</span> +<span class="lineNum"> 82 </span><span class="lineCov"> 1 : in.open(file.c_str());</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 1 : if (!in.good())</span> +<span class="lineNum"> 84 </span><span class="lineNoCov"> 0 : throw wibble::exception::File(file, "opening file for reading");</span> +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span><span class="lineCov"> 1907 : while (!in.eof())</span> +<span class="lineNum"> 87 </span> : { +<span class="lineNum"> 88 </span><span class="lineCov"> 1905 : std::string line;</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 1905 : getline(in, line);</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 1905 : if (line.substr(0, 10) == "POPULARITY")</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 3 : continue;</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 1904 : if (line.substr(0, 14) == "END-POPULARITY")</span> +<span class="lineNum"> 93 </span> : continue; +<span class="lineNum"> 94 </span><span class="lineCov"> 1903 : vector<string> data = split(line);</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 1903 : if (data.size() < 4)</span> +<span class="lineNum"> 96 </span> : continue; +<span class="lineNum"> 97 </span><span class="lineCov"> 1902 : if (data[3] == "<NOFILES>")</span> +<span class="lineNum"> 98 </span> : // This is an empty / virtual package +<span class="lineNum"> 99 </span><span class="lineCov"> 979 : m_scores.insert(make_pair(data[2], 0.1));</span> +<span class="lineNum"> 100 </span><span class="lineCov"> 923 : else if (data.size() == 4)</span> +<span class="lineNum"> 101 </span> : // Package normally in use +<span class="lineNum"> 102 </span><span class="lineNoCov"> 0 : m_scores.insert(make_pair(data[2], 1.0));</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 923 : else if (data[4] == "<OLD>")</span> +<span class="lineNum"> 104 </span> : // Unused packages +<span class="lineNum"> 105 </span><span class="lineCov"> 745 : m_scores.insert(make_pair(data[2], 0.3));</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 178 : else if (data[4] == "<RECENT-CTIME>")</span> +<span class="lineNum"> 107 </span> : // Recently installed packages +<span class="lineNum"> 108 </span><span class="lineCov"> 178 : m_scores.insert(make_pair(data[2], 0.5));</span> +<span class="lineNum"> 109 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 110 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span><span class="lineCov"> 2 : float Local::score(const std::string& pkg) const</span> +<span class="lineNum"> 113 </span> : { +<span class="lineNum"> 114 </span><span class="lineCov"> 2 : std::map<std::string, float>::const_iterator i = m_scores.find(pkg);</span> +<span class="lineNum"> 115 </span><span class="lineCov"> 2 : if (i == m_scores.end())</span> +<span class="lineNum"> 116 </span><span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 117 </span> : else +<span class="lineNum"> 118 </span><span class="lineCov"> 2 : return i->second;</span> +<span class="lineNum"> 119 </span> : } +<span class="lineNum"> 120 </span> : +<span class="lineNum"> 121 </span> : /** +<span class="lineNum"> 122 </span> : * Return the TFIDF score of the package computed against the popcon +<span class="lineNum"> 123 </span> : * information. +<span class="lineNum"> 124 </span> : */ +<span class="lineNum"> 125 </span><span class="lineCov"> 1 : float Local::tfidf(const Popcon& popcon, const std::string& pkg) const</span> +<span class="lineNum"> 126 </span> : { +<span class="lineNum"> 127 </span><span class="lineCov"> 1 : float popconScore = popcon.score(pkg);</span> +<span class="lineNum"> 128 </span> : //cerr << pkg << ": " << score(pkg) << " * log(" << (float)popcon.submissions() << " / " << popconScore << ") = " << score(pkg) * log((float)popcon.submissions() / popconScore) << endl; +<span class="lineNum"> 129 </span><span class="lineCov"> 1 : if (popconScore == 0)</span> +<span class="lineNum"> 130 </span><span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 131 </span> : else +<span class="lineNum"> 132 </span><span class="lineCov"> 1 : return score(pkg) * log((float)popcon.submissions() / popconScore);</span> +<span class="lineNum"> 133 </span> : +<span class="lineNum"> 134 </span> : } +<span class="lineNum"> 135 </span> : +<span class="lineNum"> 136 </span><span class="lineNoCov"> 0 : std::vector< std::pair<std::string, float> > Local::scores() const</span> +<span class="lineNum"> 137 </span> : { +<span class="lineNum"> 138 </span><span class="lineNoCov"> 0 : vector< pair<string, float> > res;</span> +<span class="lineNum"> 139 </span> : // Copy the scores in res +<span class="lineNum"> 140 </span><span class="lineNoCov"> 0 : copy(m_scores.begin(), m_scores.end(), back_inserter(res));</span> +<span class="lineNum"> 141 </span> : // Sort res by score +<span class="lineNum"> 142 </span><span class="lineNoCov"> 0 : sort(res.begin(), res.end(), secondsort());</span> +<span class="lineNum"> 143 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 144 </span> : } +<span class="lineNum"> 145 </span> : +<span class="lineNum"> 146 </span><span class="lineNoCov"> 0 : std::vector< std::pair<std::string, float> > Local::tfidf(const Popcon& popcon) const</span> +<span class="lineNum"> 147 </span> : { +<span class="lineNum"> 148 </span><span class="lineNoCov"> 0 : vector< pair<string, float> > res;</span> +<span class="lineNum"> 149 </span> : // Compute the tfidf scores and store them into res +<span class="lineNum"> 150 </span><span class="lineNoCov"> 0 : for (std::map<std::string, float>::const_iterator i = m_scores.begin();</span> +<span class="lineNum"> 151 </span> : i != m_scores.end(); ++i) +<span class="lineNum"> 152 </span> : { +<span class="lineNum"> 153 </span><span class="lineNoCov"> 0 : float popconScore = popcon.score(i->first);</span> +<span class="lineNum"> 154 </span><span class="lineNoCov"> 0 : if (popconScore == 0)</span> +<span class="lineNum"> 155 </span><span class="lineNoCov"> 0 : res.push_back(make_pair(i->first, 0.0f));</span> +<span class="lineNum"> 156 </span> : else +<span class="lineNum"> 157 </span> : res.push_back(make_pair(i->first, +<span class="lineNum"> 158 </span><span class="lineNoCov"> 0 : i->second * log((float)popcon.submissions() / popconScore)));</span> +<span class="lineNum"> 159 </span> : } +<span class="lineNum"> 160 </span> : // Sort res by score +<span class="lineNum"> 161 </span><span class="lineNoCov"> 0 : sort(res.begin(), res.end(), secondsort());</span> +<span class="lineNum"> 162 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 163 </span> : } +<span class="lineNum"> 164 </span> : +<span class="lineNum"> 165 </span> : } +<span class="lineNum"> 166 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 167 </span> : +<span class="lineNum"> 168 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/local.h.gcov.html b/rep/ept/popcon/local.h.gcov.html new file mode 100644 index 0000000..a8cb45d --- /dev/null +++ b/rep/ept/popcon/local.h.gcov.html @@ -0,0 +1,154 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/local.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/popcon</a> - local.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">1</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">1</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_POPCON_LOCAL_H +<span class="lineNum"> 2 </span> : #define EPT_POPCON_LOCAL_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** @file +<span class="lineNum"> 5 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 6 </span> : * Correlate popcon data with local popcon information +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 13 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 14 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 15 </span> : * (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <string> +<span class="lineNum"> 28 </span> : #include <vector> +<span class="lineNum"> 29 </span> : #include <map> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace popcon { +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : class Popcon; +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : /** +<span class="lineNum"> 37 </span> : * Access the results of the local daily popcon scan. +<span class="lineNum"> 38 </span> : */ +<span class="lineNum"> 39 </span> : class Local +<span class="lineNum"> 40 </span><span class="lineCov"> 1 : {</span> +<span class="lineNum"> 41 </span> : protected: +<span class="lineNum"> 42 </span> : std::map<std::string, float> m_scores; +<span class="lineNum"> 43 </span> : time_t m_timestamp; +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span> : public: +<span class="lineNum"> 46 </span> : Local(const std::string& file = std::string("/var/log/popularity-contest")); +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span> : /// Get the timestamp of the local popcon information +<span class="lineNum"> 49 </span> : time_t timestamp() const { return m_timestamp; } +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span> : /// Return true if this data source has data, false if it's empty +<span class="lineNum"> 52 </span> : bool hasData() const { return m_timestamp != 0; } +<span class="lineNum"> 53 </span> : +<span class="lineNum"> 54 </span> : /** +<span class="lineNum"> 55 </span> : * Return the local score of the package +<span class="lineNum"> 56 </span> : */ +<span class="lineNum"> 57 </span> : float score(const std::string& pkg) const; +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span> : /** +<span class="lineNum"> 60 </span> : * Return the TFIDF score of the package computed against the popcon +<span class="lineNum"> 61 </span> : * information. +<span class="lineNum"> 62 </span> : * +<span class="lineNum"> 63 </span> : * The TFIDF score is high when a package is representative of this system, +<span class="lineNum"> 64 </span> : * that is, it is used in this system and not much used in other systems. +<span class="lineNum"> 65 </span> : */ +<span class="lineNum"> 66 </span> : float tfidf(const Popcon& popcon, const std::string& pkg) const; +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span> : /** +<span class="lineNum"> 69 </span> : * Read the local popcon vote and return the list of packages and their +<span class="lineNum"> 70 </span> : * local scores, sorted by ascending score. +<span class="lineNum"> 71 </span> : */ +<span class="lineNum"> 72 </span> : std::vector< std::pair<std::string, float> > scores() const; +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span> : /** +<span class="lineNum"> 75 </span> : * Read the local popcon vote and return the list of packages and their +<span class="lineNum"> 76 </span> : * TFIDF scores computed against the popcon information. +<span class="lineNum"> 77 </span> : * +<span class="lineNum"> 78 </span> : * The packages will be sorted by ascending score. +<span class="lineNum"> 79 </span> : */ +<span class="lineNum"> 80 </span> : std::vector< std::pair<std::string, float> > tfidf(const Popcon& popcon) const; +<span class="lineNum"> 81 </span> : }; +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span> : } +<span class="lineNum"> 84 </span> : } +<span class="lineNum"> 85 </span> : +<span class="lineNum"> 86 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 87 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/local.test.h.gcov.html b/rep/ept/popcon/local.test.h.gcov.html new file mode 100644 index 0000000..05ce32e --- /dev/null +++ b/rep/ept/popcon/local.test.h.gcov.html @@ -0,0 +1,178 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/local.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/popcon</a> - local.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">8</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">8</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /* +<span class="lineNum"> 3 </span> : * popcon/local test +<span class="lineNum"> 4 </span> : * +<span class="lineNum"> 5 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 6 </span> : * +<span class="lineNum"> 7 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 8 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 9 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 10 </span> : * (at your option) any later version. +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 13 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 14 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 15 </span> : * GNU General Public License for more details. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 18 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 19 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 20 </span> : */ +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : #include <ept/popcon/local.h> +<span class="lineNum"> 23 </span> : #include <ept/popcon/popcon.h> +<span class="lineNum"> 24 </span> : #include <ept/popcon/maint/path.h> +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include <ept/test.h> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : using namespace std; +<span class="lineNum"> 29 </span> : using namespace ept; +<span class="lineNum"> 30 </span> : using namespace ept::popcon; +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : struct TestPopconLocal +<span class="lineNum"> 33 </span><span class="lineCov"> 1 : {</span> +<span class="lineNum"> 34 </span> : Path::OverridePopconSourceDir odsd; +<span class="lineNum"> 35 </span> : Path::OverridePopconIndexDir odid; +<span class="lineNum"> 36 </span> : Path::OverridePopconUserSourceDir odusd; +<span class="lineNum"> 37 </span> : Path::OverridePopconUserIndexDir oduid; +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : Popcon popcon; +<span class="lineNum"> 40 </span> : Local local; +<span class="lineNum"> 41 </span> : +<span class="lineNum"> 42 </span><span class="lineCov"> 1 : TestPopconLocal()</span> +<span class="lineNum"> 43 </span> : : odsd( TEST_ENV_DIR "popcon" ), +<span class="lineNum"> 44 </span> : odid( TEST_ENV_DIR "popcon" ), +<span class="lineNum"> 45 </span> : odusd( TEST_ENV_DIR "popcon" ), +<span class="lineNum"> 46 </span> : oduid( TEST_ENV_DIR "popcon" ), +<span class="lineNum"> 47 </span><span class="lineCov"> 1 : local( TEST_ENV_DIR "popcon/popularity-contest" )</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 1 : {}</span> +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : // Very basic access +<span class="lineNum"> 51 </span><span class="lineCov"> 1 : Test basicAccess()</span> +<span class="lineNum"> 52 </span> : { +<span class="lineNum"> 53 </span><span class="lineCov"> 1 : assert(local.score("apt") > 0);</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 2 : assert(local.tfidf(popcon, "apt") > 0);</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span> : #if 0 // mornfall: apparently left out by enrico, leaving as it is +<span class="lineNum"> 58 </span> : // Check that every valid index is accessible +<span class="lineNum"> 59 </span> : template<> template<> +<span class="lineNum"> 60 </span> : void to::test< 2 >() +<span class="lineNum"> 61 </span> : { +<span class="lineNum"> 62 </span> : for (size_t i = 0; i < popcon.size(); ++i) +<span class="lineNum"> 63 </span> : { +<span class="lineNum"> 64 </span> : //cerr << popcon.name(i) << " " << popcon.score(i) << endl; +<span class="lineNum"> 65 </span> : assert(popcon.score(i) > 0); +<span class="lineNum"> 66 </span> : } +<span class="lineNum"> 67 </span> : } +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span> : // Check that we can get a score for every package +<span class="lineNum"> 70 </span> : template<> template<> +<span class="lineNum"> 71 </span> : void to::test< 3 >() +<span class="lineNum"> 72 </span> : { +<span class="lineNum"> 73 </span> : int has = 0; +<span class="lineNum"> 74 </span> : for (Apt::iterator i = apt.begin(); i != apt.end(); ++i) +<span class="lineNum"> 75 </span> : { +<span class="lineNum"> 76 </span> : float score = popcon.score(*i); +<span class="lineNum"> 77 </span> : if (score > 0) +<span class="lineNum"> 78 </span> : ++has; +<span class="lineNum"> 79 </span> : } +<span class="lineNum"> 80 </span> : // At least 1000 packages should have a score +<span class="lineNum"> 81 </span> : assert(has > 1000); +<span class="lineNum"> 82 </span> : } +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span> : // Check that scores are meaningful +<span class="lineNum"> 85 </span> : template<> template<> +<span class="lineNum"> 86 </span> : void to::test< 4 >() +<span class="lineNum"> 87 </span> : { +<span class="lineNum"> 88 </span> : assert(popcon["apt"] > popcon["libapt-pkg-dev"]); +<span class="lineNum"> 89 </span> : } +<span class="lineNum"> 90 </span> : +<span class="lineNum"> 91 </span> : // If there is no data, Popcon should work as if all scores were 0 +<span class="lineNum"> 92 </span> : template<> template<> +<span class="lineNum"> 93 </span> : void to::test<5>() +<span class="lineNum"> 94 </span> : { +<span class="lineNum"> 95 </span> : Path::OverridePopconSourceDir odsd("./empty"); +<span class="lineNum"> 96 </span> : Path::OverridePopconIndexDir odid("./empty"); +<span class="lineNum"> 97 </span> : Path::OverridePopconUserSourceDir odusd("./empty"); +<span class="lineNum"> 98 </span> : Path::OverridePopconUserIndexDir oduid("./empty"); +<span class="lineNum"> 99 </span> : Popcon empty; +<span class="lineNum"> 100 </span> : +<span class="lineNum"> 101 </span> : assert_eq(empty.timestamp(), 0); +<span class="lineNum"> 102 </span> : assert(!empty.hasData()); +<span class="lineNum"> 103 </span> : +<span class="lineNum"> 104 </span> : assert(empty.size() == 0); +<span class="lineNum"> 105 </span> : assert(empty.score("apt") == 0.0); +<span class="lineNum"> 106 </span> : } +<span class="lineNum"> 107 </span> : #endif +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span> : }; +<span class="lineNum"> 110 </span> : +<span class="lineNum"> 111 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/maint/index.html b/rep/ept/popcon/maint/index.html new file mode 100644 index 0000000..f507903 --- /dev/null +++ b/rep/ept/popcon/maint/index.html @@ -0,0 +1,128 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/maint</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - ept/popcon/maint</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">258</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">88.4 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">228</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="path.cc.gcov.html">path.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="97.6%"><img src="../../../snow.png" width=2 height=10 alt="97.6%"></td></tr></table> + </td> + <td class="coverPerHi">97.6 %</td> + <td class="coverNumHi">41 / 42 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="path.h.gcov.html">path.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">17 / 17 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="popconindexer.cc.gcov.html">popconindexer.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=79 height=10 alt="79.3%"><img src="../../../snow.png" width=21 height=10 alt="79.3%"></td></tr></table> + </td> + <td class="coverPerHi">79.3 %</td> + <td class="coverNumHi">92 / 116 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="popconindexer.h.gcov.html">popconindexer.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">5 / 5 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="sourcedir.cc.gcov.html">sourcedir.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=93 height=10 alt="93.4%"><img src="../../../snow.png" width=7 height=10 alt="93.4%"></td></tr></table> + </td> + <td class="coverPerHi">93.4 %</td> + <td class="coverNumHi">71 / 76 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="sourcedir.h.gcov.html">sourcedir.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">2 / 2 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/maint/path.cc.gcov.html b/rep/ept/popcon/maint/path.cc.gcov.html new file mode 100644 index 0000000..b332e8d --- /dev/null +++ b/rep/ept/popcon/maint/path.cc.gcov.html @@ -0,0 +1,182 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/maint/path.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/popcon/maint</a> - path.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">42</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">97.6 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">41</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : /** \file +<span class="lineNum"> 4 </span> : * popcon paths +<span class="lineNum"> 5 </span> : */ +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : /* +<span class="lineNum"> 8 </span> : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org>, Peter Rockai <me@mornfall.net> +<span class="lineNum"> 9 </span> : * +<span class="lineNum"> 10 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 11 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 12 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 13 </span> : * (at your option) any later version. +<span class="lineNum"> 14 </span> : * +<span class="lineNum"> 15 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 16 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 17 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 18 </span> : * GNU General Public License for more details. +<span class="lineNum"> 19 </span> : * +<span class="lineNum"> 20 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 21 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 22 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 23 </span> : */ +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <ept/config.h> +<span class="lineNum"> 26 </span> : #include <ept/popcon/maint/path.h> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 29 </span> : #include <wibble/string.h> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : #include <sys/types.h> // getpwuid, stat, mkdir, getuid +<span class="lineNum"> 32 </span> : #include <sys/stat.h> // stat, mkdir +<span class="lineNum"> 33 </span> : #include <pwd.h> // getpwuid +<span class="lineNum"> 34 </span> : #include <unistd.h> // stat, getuid +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : using namespace wibble; +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span> : namespace ept { +<span class="lineNum"> 39 </span> : namespace popcon { +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span><span class="lineCov"> 2 : static std::string userdir()</span> +<span class="lineNum"> 42 </span> : { +<span class="lineNum"> 43 </span><span class="lineCov"> 2 : std::string rcdir;</span> +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span><span class="lineCov"> 2 : struct passwd* udata = getpwuid(getuid());</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 2 : rcdir = str::joinpath(udata->pw_dir, ".popcon");</span> +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span><span class="lineNoCov"> 0 : return rcdir;</span> +<span class="lineNum"> 49 </span> : } +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span> : +<span class="lineNum"> 52 </span><span class="lineCov"> 178 : Path &Path::instance() {</span> +<span class="lineNum"> 53 </span><span class="lineCov"> 178 : if (!s_instance) {</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 1 : s_instance = new Path;</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : instance().m_popconSourceDir = POPCON_DB_DIR;</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 1 : instance().m_popconIndexDir = POPCON_DB_DIR;</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 2 : instance().m_popconUserSourceDir = userdir();</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 2 : instance().m_popconUserIndexDir = userdir();</span> +<span class="lineNum"> 59 </span> : } +<span class="lineNum"> 60 </span><span class="lineCov"> 178 : return *s_instance;</span> +<span class="lineNum"> 61 </span> : } +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span><span class="lineCov"> 2 : int Path::access( const std::string &s, int m ) {</span> +<span class="lineNum"> 64 </span><span class="lineCov"> 2 : return ::access( s.c_str(), m );</span> +<span class="lineNum"> 65 </span> : } +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span><span class="lineCov"> 49 : time_t Path::timestamp( const std::string& file ) {</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 49 : std::auto_ptr<struct stat> st = wibble::sys::fs::stat(file);</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 90 : return st.get() == NULL ? 0 : st->st_mtime;</span> +<span class="lineNum"> 70 </span> : } +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span><span class="lineCov"> 14 : void Path::setPopconSourceDir( const std::string &s )</span> +<span class="lineNum"> 73 </span> : { +<span class="lineNum"> 74 </span><span class="lineCov"> 14 : instance().m_popconSourceDir = s;</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 14 : }</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 14 : void Path::setPopconIndexDir( const std::string &s )</span> +<span class="lineNum"> 77 </span> : { +<span class="lineNum"> 78 </span><span class="lineCov"> 14 : instance().m_popconIndexDir = s;</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 14 : }</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 14 : void Path::setPopconUserSourceDir( const std::string &s )</span> +<span class="lineNum"> 81 </span> : { +<span class="lineNum"> 82 </span><span class="lineCov"> 14 : instance().m_popconUserSourceDir = s;</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 14 : }</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 14 : void Path::setPopconUserIndexDir( const std::string &s )</span> +<span class="lineNum"> 85 </span> : { +<span class="lineNum"> 86 </span><span class="lineCov"> 14 : instance().m_popconUserIndexDir = s;</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 14 : }</span> +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span><span class="lineCov"> 14 : std::string Path::popconSourceDir() { return instance().m_popconSourceDir; }</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 43 : std::string Path::popconIndexDir() { return instance().m_popconIndexDir; }</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 14 : std::string Path::popconUserSourceDir() { return instance().m_popconUserSourceDir; }</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 47 : std::string Path::popconUserIndexDir() { return instance().m_popconUserIndexDir; }</span> +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span><span class="lineCov"> 17 : std::string Path::scores() {</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 17 : return str::joinpath(popconIndexDir(), "scores");</span> +<span class="lineNum"> 96 </span> : } +<span class="lineNum"> 97 </span> : +<span class="lineNum"> 98 </span><span class="lineCov"> 17 : std::string Path::scoresIndex() {</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 17 : return str::joinpath(popconIndexDir(), "scores.idx");</span> +<span class="lineNum"> 100 </span> : } +<span class="lineNum"> 101 </span> : +<span class="lineNum"> 102 </span><span class="lineCov"> 20 : std::string Path::userScores() {</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 20 : return str::joinpath(popconUserIndexDir(), "scores");</span> +<span class="lineNum"> 104 </span> : } +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span><span class="lineCov"> 20 : std::string Path::userScoresIndex() {</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 20 : return str::joinpath(popconUserIndexDir(), "scores.idx");</span> +<span class="lineNum"> 108 </span> : } +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span> : Path *Path::s_instance = 0; +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span> : } +<span class="lineNum"> 113 </span> : } +<span class="lineNum"> 114 </span> : +<span class="lineNum"> 115 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/maint/path.h.gcov.html b/rep/ept/popcon/maint/path.h.gcov.html new file mode 100644 index 0000000..557613c --- /dev/null +++ b/rep/ept/popcon/maint/path.h.gcov.html @@ -0,0 +1,194 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/maint/path.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/popcon/maint</a> - path.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">17</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">17</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /** \file +<span class="lineNum"> 3 </span> : * popcon paths +<span class="lineNum"> 4 </span> : */ +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : /* +<span class="lineNum"> 7 </span> : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 10 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 11 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 12 </span> : * (at your option) any later version. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 15 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 16 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 17 </span> : * GNU General Public License for more details. +<span class="lineNum"> 18 </span> : * +<span class="lineNum"> 19 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 20 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 21 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 22 </span> : */ +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span> : #ifndef EPT_POPCON_PATH_H +<span class="lineNum"> 25 </span> : #define EPT_POPCON_PATH_H +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <string> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : struct stat; +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace popcon { +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : /** +<span class="lineNum"> 35 </span> : * Singleton class to configure and access the various Popcon paths +<span class="lineNum"> 36 </span> : */ +<span class="lineNum"> 37 </span> : class Path +<span class="lineNum"> 38 </span><span class="lineCov"> 1 : {</span> +<span class="lineNum"> 39 </span> : public: +<span class="lineNum"> 40 </span> : static std::string scores(); +<span class="lineNum"> 41 </span> : static std::string scoresIndex(); +<span class="lineNum"> 42 </span> : static std::string userScores(); +<span class="lineNum"> 43 </span> : static std::string userScoresIndex(); +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span> : static std::string popconSourceDir(); +<span class="lineNum"> 46 </span> : static std::string popconIndexDir(); +<span class="lineNum"> 47 </span> : static std::string popconUserSourceDir(); +<span class="lineNum"> 48 </span> : static std::string popconUserIndexDir(); +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : // Directory where Popcon source data is found +<span class="lineNum"> 51 </span> : static void setPopconSourceDir( const std::string &s ); +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : // Directory where Popcon indexes are kept +<span class="lineNum"> 54 </span> : static void setPopconIndexDir( const std::string &s ); +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span> : // User-specific directory for Popcon source data +<span class="lineNum"> 57 </span> : static void setPopconUserSourceDir( const std::string &s ); +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span> : // User-specific directory for Popcon index data +<span class="lineNum"> 60 </span> : static void setPopconUserIndexDir( const std::string &s ); +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span> : static int access( const std::string &, int ); +<span class="lineNum"> 63 </span> : static time_t timestamp( const std::string& ); +<span class="lineNum"> 64 </span> : +<span class="lineNum"> 65 </span> : // RAII-style classes to temporarily override directories +<span class="lineNum"> 66 </span> : class OverridePopconSourceDir +<span class="lineNum"> 67 </span> : { +<span class="lineNum"> 68 </span> : std::string old; +<span class="lineNum"> 69 </span> : public: +<span class="lineNum"> 70 </span><span class="lineCov"> 7 : OverridePopconSourceDir(const std::string& path) : old(Path::popconSourceDir())</span> +<span class="lineNum"> 71 </span> : { +<span class="lineNum"> 72 </span><span class="lineCov"> 7 : Path::setPopconSourceDir(path);</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 7 : }</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 7 : ~OverridePopconSourceDir() { Path::setPopconSourceDir(old); }</span> +<span class="lineNum"> 75 </span> : }; +<span class="lineNum"> 76 </span> : class OverridePopconIndexDir +<span class="lineNum"> 77 </span> : { +<span class="lineNum"> 78 </span> : std::string old; +<span class="lineNum"> 79 </span> : public: +<span class="lineNum"> 80 </span><span class="lineCov"> 7 : OverridePopconIndexDir(const std::string& path) : old(Path::popconIndexDir())</span> +<span class="lineNum"> 81 </span> : { +<span class="lineNum"> 82 </span><span class="lineCov"> 7 : Path::setPopconIndexDir(path);</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 7 : }</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 7 : ~OverridePopconIndexDir() { Path::setPopconIndexDir(old); }</span> +<span class="lineNum"> 85 </span> : }; +<span class="lineNum"> 86 </span> : class OverridePopconUserSourceDir +<span class="lineNum"> 87 </span> : { +<span class="lineNum"> 88 </span> : std::string old; +<span class="lineNum"> 89 </span> : public: +<span class="lineNum"> 90 </span><span class="lineCov"> 7 : OverridePopconUserSourceDir(const std::string& path) : old(Path::popconUserSourceDir())</span> +<span class="lineNum"> 91 </span> : { +<span class="lineNum"> 92 </span><span class="lineCov"> 7 : Path::setPopconUserSourceDir(path);</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 7 : }</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 7 : ~OverridePopconUserSourceDir() { Path::setPopconUserSourceDir(old); }</span> +<span class="lineNum"> 95 </span> : }; +<span class="lineNum"> 96 </span> : class OverridePopconUserIndexDir +<span class="lineNum"> 97 </span> : { +<span class="lineNum"> 98 </span> : std::string old; +<span class="lineNum"> 99 </span> : public: +<span class="lineNum"> 100 </span><span class="lineCov"> 7 : OverridePopconUserIndexDir(const std::string& path) : old(Path::popconUserIndexDir())</span> +<span class="lineNum"> 101 </span> : { +<span class="lineNum"> 102 </span><span class="lineCov"> 7 : Path::setPopconUserIndexDir(path);</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 7 : }</span> +<span class="lineNum"> 104 </span><span class="lineCov"> 7 : ~OverridePopconUserIndexDir() { Path::setPopconUserIndexDir(old); }</span> +<span class="lineNum"> 105 </span> : }; +<span class="lineNum"> 106 </span> : protected: +<span class="lineNum"> 107 </span> : static Path *s_instance; +<span class="lineNum"> 108 </span> : static Path &instance(); +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span> : // Directory where Popcon source data is found +<span class="lineNum"> 111 </span> : std::string m_popconSourceDir; +<span class="lineNum"> 112 </span> : +<span class="lineNum"> 113 </span> : // Directory where Popcon indexes are kept +<span class="lineNum"> 114 </span> : std::string m_popconIndexDir; +<span class="lineNum"> 115 </span> : +<span class="lineNum"> 116 </span> : // User-specific directory for Popcon source data +<span class="lineNum"> 117 </span> : std::string m_popconUserSourceDir; +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span> : // User-specific directory for Popcon index data +<span class="lineNum"> 120 </span> : std::string m_popconUserIndexDir; +<span class="lineNum"> 121 </span> : }; +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span> : } +<span class="lineNum"> 124 </span> : } +<span class="lineNum"> 125 </span> : +<span class="lineNum"> 126 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 127 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/maint/popconindexer.cc.gcov.html b/rep/ept/popcon/maint/popconindexer.cc.gcov.html new file mode 100644 index 0000000..28d6298 --- /dev/null +++ b/rep/ept/popcon/maint/popconindexer.cc.gcov.html @@ -0,0 +1,314 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/maint/popconindexer.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/popcon/maint</a> - popconindexer.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">116</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">79.3 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">92</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #include <ept/popcon/popcon.h> +<span class="lineNum"> 2 </span> : #include <ept/popcon/maint/popconindexer.h> +<span class="lineNum"> 3 </span> : #include <ept/popcon/maint/path.h> +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : #include <wibble/exception.h> +<span class="lineNum"> 6 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : #include <tagcoll/diskindex/mmap.h> +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span> : #include <set> +<span class="lineNum"> 11 </span> : #include <string> +<span class="lineNum"> 12 </span> : #include <cstdio> +<span class="lineNum"> 13 </span> : #include <cstring> +<span class="lineNum"> 14 </span> : +<span class="lineNum"> 15 </span> : using namespace std; +<span class="lineNum"> 16 </span> : +<span class="lineNum"> 17 </span> : namespace ept { +<span class="lineNum"> 18 </span> : namespace popcon { +<span class="lineNum"> 19 </span> : +<span class="lineNum"> 20 </span> : template<typename STRUCT> +<span class="lineNum"> 21 </span> : struct StructIndexer : public tagcoll::diskindex::MMapIndexer +<span class="lineNum"> 22 </span><span class="lineCov"> 1 : {</span> +<span class="lineNum"> 23 </span> : const STRUCT& data; +<span class="lineNum"> 24 </span><span class="lineCov"> 1 : StructIndexer(const STRUCT& data) : data(data) {}</span> +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span><span class="lineCov"> 1 : int encodedSize() const { return sizeof(STRUCT); }</span> +<span class="lineNum"> 27 </span><span class="lineCov"> 1 : void encode(char* buf) const { *(STRUCT*)buf = data; }</span> +<span class="lineNum"> 28 </span> : }; +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : /// MMapIndexer that indexes the package names +<span class="lineNum"> 31 </span> : struct PopconGenerator : public tagcoll::diskindex::MMapIndexer +<span class="lineNum"> 32 </span><span class="lineCov"> 4 : {</span> +<span class="lineNum"> 33 </span> : // Sorted set of all available package names and data +<span class="lineNum"> 34 </span> : std::map<std::string, Score> data; +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 1 : int encodedSize() const</span> +<span class="lineNum"> 37 </span> : { +<span class="lineNum"> 38 </span><span class="lineCov"> 1 : int size = data.size() * sizeof(Score);</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 69911 : for (std::map<std::string, Score>::const_iterator i = data.begin();</span> +<span class="lineNum"> 40 </span> : i != data.end(); ++i) +<span class="lineNum"> 41 </span><span class="lineCov"> 69910 : size += i->first.size() + 1;</span> +<span class="lineNum"> 42 </span><span class="lineCov"> 1 : return tagcoll::diskindex::MMap::align(size);</span> +<span class="lineNum"> 43 </span> : } +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span><span class="lineCov"> 1 : void encode(char* buf) const</span> +<span class="lineNum"> 46 </span> : { +<span class="lineNum"> 47 </span><span class="lineCov"> 1 : int pos = data.size() * sizeof(Score);</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 1 : int idx = 0;</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 69911 : for (std::map<std::string, Score>::const_iterator i = data.begin();</span> +<span class="lineNum"> 50 </span> : i != data.end(); ++i) +<span class="lineNum"> 51 </span> : { +<span class="lineNum"> 52 </span><span class="lineCov"> 69910 : ((Score*)buf)[idx] = i->second;</span> +<span class="lineNum"> 53 </span><span class="lineCov"> 69910 : ((Score*)buf)[idx].offset = pos;</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 69910 : memcpy(buf + pos, i->first.c_str(), i->first.size() + 1);</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 69910 : pos += i->first.size() + 1;</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 69910 : ++idx;</span> +<span class="lineNum"> 57 </span> : } +<span class="lineNum"> 58 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 59 </span> : }; +<span class="lineNum"> 60 </span> : +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span><span class="lineCov"> 7 : PopconIndexer::PopconIndexer()</span> +<span class="lineNum"> 63 </span> : : mainSource(Path::popconSourceDir()), +<span class="lineNum"> 64 </span><span class="lineCov"> 7 : userSource(Path::popconUserSourceDir())</span> +<span class="lineNum"> 65 </span> : { +<span class="lineNum"> 66 </span><span class="lineCov"> 7 : rescan();</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 7 : }</span> +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span><span class="lineCov"> 7 : void PopconIndexer::rescan()</span> +<span class="lineNum"> 70 </span> : { +<span class="lineNum"> 71 </span><span class="lineCov"> 7 : ts_main_src = mainSource.timestamp();</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 7 : ts_user_src = userSource.timestamp();</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 7 : ts_main_sco = Path::timestamp(Path::scores());</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 14 : ts_user_sco = Path::timestamp(Path::userScores());</span> +<span class="lineNum"> 75 </span><span class="lineCov"> 14 : ts_main_idx = Path::timestamp(Path::scoresIndex());</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 14 : ts_user_idx = Path::timestamp(Path::userScoresIndex());</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 7 : }</span> +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span><span class="lineCov"> 7 : bool PopconIndexer::needsRebuild() const</span> +<span class="lineNum"> 80 </span> : { +<span class="lineNum"> 81 </span> : // If there are no indexes of any kind, then we need rebuilding +<span class="lineNum"> 82 </span><span class="lineCov"> 7 : if (ts_user_sco == 0 || ts_main_sco == 0 || ts_user_idx == 0 && ts_main_idx == 0)</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 2 : return true;</span> +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span> : // If the user index is ok, then we are fine +<span class="lineNum"> 86 </span><span class="lineCov"> 5 : if (ts_user_sco >= sourceTimestamp() && ts_user_idx >= sourceTimestamp())</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 5 : return false;</span> +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span> : // If there are user sources, then we cannot use the system index +<span class="lineNum"> 90 </span><span class="lineNoCov"> 0 : if (ts_user_src > 0)</span> +<span class="lineNum"> 91 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 92 </span> : +<span class="lineNum"> 93 </span> : // If there are no user sources, then we can fallback on the system +<span class="lineNum"> 94 </span> : // indexes in case the user indexes are not up to date +<span class="lineNum"> 95 </span><span class="lineNoCov"> 0 : if (ts_main_sco >= sourceTimestamp() && ts_main_idx >= sourceTimestamp())</span> +<span class="lineNum"> 96 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 97 </span> : +<span class="lineNum"> 98 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 99 </span> : } +<span class="lineNum"> 100 </span> : +<span class="lineNum"> 101 </span><span class="lineCov"> 7 : bool PopconIndexer::userIndexIsRedundant() const</span> +<span class="lineNum"> 102 </span> : { +<span class="lineNum"> 103 </span> : // If there is no user index, then it is not redundant +<span class="lineNum"> 104 </span><span class="lineCov"> 7 : if (ts_user_idx == 0)</span> +<span class="lineNum"> 105 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 106 </span> : +<span class="lineNum"> 107 </span> : // If the system index is not up to date, then the user index is not +<span class="lineNum"> 108 </span> : // redundant +<span class="lineNum"> 109 </span><span class="lineCov"> 6 : if (ts_main_idx < sourceTimestamp())</span> +<span class="lineNum"> 110 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span><span class="lineCov"> 6 : return true;</span> +<span class="lineNum"> 113 </span> : } +<span class="lineNum"> 114 </span> : +<span class="lineNum"> 115 </span><span class="lineCov"> 2 : bool PopconIndexer::rebuild(const std::string& scofname, const std::string& idxfname)</span> +<span class="lineNum"> 116 </span> : { +<span class="lineNum"> 117 </span><span class="lineCov"> 2 : PopconGenerator gen;</span> +<span class="lineNum"> 118 </span> : InfoStruct is; +<span class="lineNum"> 119 </span><span class="lineCov"> 2 : is.submissions = 0;</span> +<span class="lineNum"> 120 </span><span class="lineCov"> 2 : if (!mainSource.readScores(gen.data, is.submissions))</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 1 : userSource.readScores(gen.data, is.submissions);</span> +<span class="lineNum"> 122 </span><span class="lineCov"> 2 : if (gen.data.empty())</span> +<span class="lineNum"> 123 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 124 </span> : +<span class="lineNum"> 125 </span><span class="lineCov"> 1 : StructIndexer<InfoStruct> infoStruct(is);</span> +<span class="lineNum"> 126 </span> : +<span class="lineNum"> 127 </span> : // Create the index +<span class="lineNum"> 128 </span><span class="lineCov"> 1 : tagcoll::diskindex::MasterMMapIndexer master(idxfname);</span> +<span class="lineNum"> 129 </span><span class="lineCov"> 1 : master.append(gen);</span> +<span class="lineNum"> 130 </span><span class="lineCov"> 1 : master.append(infoStruct);</span> +<span class="lineNum"> 131 </span><span class="lineCov"> 1 : master.commit();</span> +<span class="lineNum"> 132 </span> : +<span class="lineNum"> 133 </span> : // for (map<string, Score>::const_iterator i = gen.data.begin(); i != gen.data.end(); ++i) +<span class="lineNum"> 134 </span> : // { +<span class="lineNum"> 135 </span> : // fprintf(stderr, "%s %d %f\n", i->first.c_str(), i->second.offset, i->second.score); +<span class="lineNum"> 136 </span> : // } +<span class="lineNum"> 137 </span> : +<span class="lineNum"> 138 </span> : // Create the score file +<span class="lineNum"> 139 </span><span class="lineCov"> 1 : FILE* out = fopen(scofname.c_str(), "wt");</span> +<span class="lineNum"> 140 </span><span class="lineCov"> 1 : if (out == NULL)</span> +<span class="lineNum"> 141 </span><span class="lineNoCov"> 0 : throw wibble::exception::File(scofname, "opening and truncating file for writing");</span> +<span class="lineNum"> 142 </span><span class="lineCov"> 69911 : for (map<string, Score>::const_iterator i = gen.data.begin();</span> +<span class="lineNum"> 143 </span> : i != gen.data.end(); ++i) +<span class="lineNum"> 144 </span> : { +<span class="lineNum"> 145 </span><span class="lineCov"> 69910 : fprintf(out, "%s %f\n", i->first.c_str(), i->second.score);</span> +<span class="lineNum"> 146 </span> : } +<span class="lineNum"> 147 </span><span class="lineCov"> 1 : fclose(out);</span> +<span class="lineNum"> 148 </span><span class="lineCov"> 1 : return true;</span> +<span class="lineNum"> 149 </span> : } +<span class="lineNum"> 150 </span> : +<span class="lineNum"> 151 </span><span class="lineCov"> 7 : bool PopconIndexer::rebuildIfNeeded()</span> +<span class="lineNum"> 152 </span> : { +<span class="lineNum"> 153 </span><span class="lineCov"> 7 : if (needsRebuild())</span> +<span class="lineNum"> 154 </span> : { +<span class="lineNum"> 155 </span> : // Decide if we rebuild the user index or the system index +<span class="lineNum"> 156 </span><span class="lineCov"> 2 : if (Path::access(Path::popconIndexDir(), W_OK) == 0)</span> +<span class="lineNum"> 157 </span> : { +<span class="lineNum"> 158 </span> : // Since we can write on the system index directory, we rebuild +<span class="lineNum"> 159 </span> : // the system index +<span class="lineNum"> 160 </span><span class="lineCov"> 2 : if (!rebuild(Path::scores(), Path::scoresIndex()))</span> +<span class="lineNum"> 161 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 162 </span><span class="lineCov"> 1 : ts_main_sco = Path::timestamp(Path::scores());</span> +<span class="lineNum"> 163 </span><span class="lineCov"> 2 : ts_main_idx = Path::timestamp(Path::scoresIndex());</span> +<span class="lineNum"> 164 </span><span class="lineCov"> 2 : if (Path::scores() == Path::userScores())</span> +<span class="lineNum"> 165 </span><span class="lineCov"> 1 : ts_user_sco = ts_main_sco;</span> +<span class="lineNum"> 166 </span><span class="lineCov"> 1 : if (Path::scoresIndex() == Path::userScoresIndex())</span> +<span class="lineNum"> 167 </span><span class="lineCov"> 1 : ts_user_idx = ts_main_idx;</span> +<span class="lineNum"> 168 </span> : } else { +<span class="lineNum"> 169 </span><span class="lineNoCov"> 0 : wibble::sys::fs::mkFilePath(Path::userScores());</span> +<span class="lineNum"> 170 </span><span class="lineNoCov"> 0 : wibble::sys::fs::mkFilePath(Path::userScoresIndex());</span> +<span class="lineNum"> 171 </span><span class="lineNoCov"> 0 : if (!rebuild(Path::userScores(), Path::userScoresIndex()))</span> +<span class="lineNum"> 172 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 173 </span><span class="lineNoCov"> 0 : ts_user_sco = Path::timestamp(Path::userScores());</span> +<span class="lineNum"> 174 </span><span class="lineNoCov"> 0 : ts_user_idx = Path::timestamp(Path::userScoresIndex());</span> +<span class="lineNum"> 175 </span> : } +<span class="lineNum"> 176 </span><span class="lineCov"> 1 : return true;</span> +<span class="lineNum"> 177 </span> : } +<span class="lineNum"> 178 </span><span class="lineCov"> 5 : return false;</span> +<span class="lineNum"> 179 </span> : } +<span class="lineNum"> 180 </span> : +<span class="lineNum"> 181 </span><span class="lineCov"> 7 : bool PopconIndexer::deleteRedundantUserIndex()</span> +<span class="lineNum"> 182 </span> : { +<span class="lineNum"> 183 </span><span class="lineCov"> 7 : if (userIndexIsRedundant())</span> +<span class="lineNum"> 184 </span> : { +<span class="lineNum"> 185 </span> : // Delete the user indexes if they exist +<span class="lineNum"> 186 </span><span class="lineCov"> 6 : if (Path::scores() != Path::userScores())</span> +<span class="lineNum"> 187 </span> : { +<span class="lineNum"> 188 </span><span class="lineNoCov"> 0 : unlink(Path::userScores().c_str());</span> +<span class="lineNum"> 189 </span><span class="lineNoCov"> 0 : ts_user_sco = 0;</span> +<span class="lineNum"> 190 </span> : } +<span class="lineNum"> 191 </span><span class="lineCov"> 6 : if (Path::scoresIndex() != Path::userScoresIndex())</span> +<span class="lineNum"> 192 </span> : { +<span class="lineNum"> 193 </span><span class="lineNoCov"> 0 : unlink(Path::userScoresIndex().c_str());</span> +<span class="lineNum"> 194 </span><span class="lineNoCov"> 0 : ts_user_idx = 0;</span> +<span class="lineNum"> 195 </span> : } +<span class="lineNum"> 196 </span><span class="lineCov"> 6 : return true;</span> +<span class="lineNum"> 197 </span> : } +<span class="lineNum"> 198 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 199 </span> : } +<span class="lineNum"> 200 </span> : +<span class="lineNum"> 201 </span><span class="lineCov"> 7 : bool PopconIndexer::getUpToDatePopcon(std::string& scofname, std::string& idxfname)</span> +<span class="lineNum"> 202 </span> : { +<span class="lineNum"> 203 </span> : // If there are no indexes of any kind, then we have nothing to return +<span class="lineNum"> 204 </span><span class="lineCov"> 7 : if (ts_user_sco == 0 && ts_main_sco == 0 && ts_user_idx == 0 && ts_main_idx == 0)</span> +<span class="lineNum"> 205 </span><span class="lineCov"> 1 : return false;</span> +<span class="lineNum"> 206 </span> : +<span class="lineNum"> 207 </span> : // If the user index is up to date, use it +<span class="lineNum"> 208 </span><span class="lineCov"> 6 : if (ts_user_sco >= sourceTimestamp() &&</span> +<span class="lineNum"> 209 </span> : ts_user_idx >= sourceTimestamp()) +<span class="lineNum"> 210 </span> : { +<span class="lineNum"> 211 </span><span class="lineCov"> 6 : scofname = Path::userScores();</span> +<span class="lineNum"> 212 </span><span class="lineCov"> 12 : idxfname = Path::userScoresIndex();</span> +<span class="lineNum"> 213 </span><span class="lineCov"> 6 : return true;</span> +<span class="lineNum"> 214 </span> : } +<span class="lineNum"> 215 </span> : +<span class="lineNum"> 216 </span> : // If the user index is not up to date and we have user sources, we cannot +<span class="lineNum"> 217 </span> : // fall back to the system index +<span class="lineNum"> 218 </span><span class="lineNoCov"> 0 : if (ts_user_src != 0)</span> +<span class="lineNum"> 219 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 220 </span> : +<span class="lineNum"> 221 </span> : // Fallback to the system index +<span class="lineNum"> 222 </span><span class="lineNoCov"> 0 : if (ts_main_sco >= sourceTimestamp() &&</span> +<span class="lineNum"> 223 </span> : ts_main_idx >= sourceTimestamp()) +<span class="lineNum"> 224 </span> : { +<span class="lineNum"> 225 </span><span class="lineNoCov"> 0 : scofname = Path::scores();</span> +<span class="lineNum"> 226 </span><span class="lineNoCov"> 0 : idxfname = Path::scoresIndex();</span> +<span class="lineNum"> 227 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 228 </span> : } +<span class="lineNum"> 229 </span> : +<span class="lineNum"> 230 </span><span class="lineNoCov"> 0 : return false;</span> +<span class="lineNum"> 231 </span> : } +<span class="lineNum"> 232 </span> : +<span class="lineNum"> 233 </span> : +<span class="lineNum"> 234 </span><span class="lineCov"> 7 : bool PopconIndexer::obtainWorkingPopcon(std::string& scofname, std::string& idxfname)</span> +<span class="lineNum"> 235 </span> : { +<span class="lineNum"> 236 </span><span class="lineCov"> 7 : PopconIndexer indexer;</span> +<span class="lineNum"> 237 </span> : +<span class="lineNum"> 238 </span><span class="lineCov"> 7 : indexer.rebuildIfNeeded();</span> +<span class="lineNum"> 239 </span><span class="lineCov"> 7 : indexer.deleteRedundantUserIndex();</span> +<span class="lineNum"> 240 </span><span class="lineCov"> 7 : return indexer.getUpToDatePopcon(scofname, idxfname);</span> +<span class="lineNum"> 241 </span> : } +<span class="lineNum"> 242 </span> : +<span class="lineNum"> 243 </span> : +<span class="lineNum"> 244 </span> : } +<span class="lineNum"> 245 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 246 </span> : +<span class="lineNum"> 247 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/maint/popconindexer.h.gcov.html b/rep/ept/popcon/maint/popconindexer.h.gcov.html new file mode 100644 index 0000000..fe36a9d --- /dev/null +++ b/rep/ept/popcon/maint/popconindexer.h.gcov.html @@ -0,0 +1,142 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/maint/popconindexer.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/popcon/maint</a> - popconindexer.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">5</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">5</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_DEBTAGS_PKGIDINDEXER_H +<span class="lineNum"> 2 </span> : #define EPT_DEBTAGS_PKGIDINDEXER_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** @file +<span class="lineNum"> 5 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 6 </span> : * Rebuild and maintain the map from package IDs to package names +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2003-2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 13 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 14 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 15 </span> : * (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <ept/popcon/maint/sourcedir.h> +<span class="lineNum"> 28 </span> : #include <string> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : namespace ept { +<span class="lineNum"> 31 </span> : namespace popcon { +<span class="lineNum"> 32 </span> : +<span class="lineNum"> 33 </span> : struct InfoStruct +<span class="lineNum"> 34 </span> : { +<span class="lineNum"> 35 </span> : size_t submissions; +<span class="lineNum"> 36 </span> : }; +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span> : struct PopconIndexer +<span class="lineNum"> 39 </span><span class="lineCov"> 7 : {</span> +<span class="lineNum"> 40 </span> : SourceDir mainSource; +<span class="lineNum"> 41 </span> : SourceDir userSource; +<span class="lineNum"> 42 </span> : time_t ts_main_src; +<span class="lineNum"> 43 </span> : time_t ts_user_src; +<span class="lineNum"> 44 </span> : time_t ts_main_sco; +<span class="lineNum"> 45 </span> : time_t ts_user_sco; +<span class="lineNum"> 46 </span> : time_t ts_main_idx; +<span class="lineNum"> 47 </span> : time_t ts_user_idx; +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span><span class="lineCov"> 28 : time_t sourceTimestamp() const</span> +<span class="lineNum"> 50 </span> : { +<span class="lineNum"> 51 </span><span class="lineCov"> 28 : time_t res = ts_main_src;</span> +<span class="lineNum"> 52 </span><span class="lineCov"> 28 : if (ts_user_src > res) res = ts_user_src;</span> +<span class="lineNum"> 53 </span><span class="lineCov"> 28 : return res;</span> +<span class="lineNum"> 54 </span> : +<span class="lineNum"> 55 </span> : } +<span class="lineNum"> 56 </span> : bool needsRebuild() const; +<span class="lineNum"> 57 </span> : bool rebuild(const std::string& scofname, const std::string& idxfname); +<span class="lineNum"> 58 </span> : bool rebuildIfNeeded(); +<span class="lineNum"> 59 </span> : bool getUpToDatePopcon(std::string& scofname, std::string& idxfname); +<span class="lineNum"> 60 </span> : +<span class="lineNum"> 61 </span> : bool userIndexIsRedundant() const; +<span class="lineNum"> 62 </span> : bool deleteRedundantUserIndex(); +<span class="lineNum"> 63 </span> : +<span class="lineNum"> 64 </span> : void rescan(); +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span> : PopconIndexer(); +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span> : static bool obtainWorkingPopcon(std::string& scofname, std::string& idxfname); +<span class="lineNum"> 69 </span> : }; +<span class="lineNum"> 70 </span> : +<span class="lineNum"> 71 </span> : } +<span class="lineNum"> 72 </span> : } +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 75 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/maint/sourcedir.cc.gcov.html b/rep/ept/popcon/maint/sourcedir.cc.gcov.html new file mode 100644 index 0000000..80a1a4e --- /dev/null +++ b/rep/ept/popcon/maint/sourcedir.cc.gcov.html @@ -0,0 +1,210 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/maint/sourcedir.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/popcon/maint</a> - sourcedir.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">76</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">93.4 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">71</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #include <ept/popcon/maint/sourcedir.h> +<span class="lineNum"> 2 </span> : #include <ept/popcon/maint/path.h> +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : #include <wibble/string.h> +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : #include <tagcoll/input/zlib.h> +<span class="lineNum"> 7 </span> : #include <tagcoll/input/stdio.h> +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : #include <cstdlib> +<span class="lineNum"> 10 </span> : +<span class="lineNum"> 11 </span> : using namespace std; +<span class="lineNum"> 12 </span> : using namespace wibble; +<span class="lineNum"> 13 </span> : +<span class="lineNum"> 14 </span> : namespace ept { +<span class="lineNum"> 15 </span> : namespace popcon { +<span class="lineNum"> 16 </span> : +<span class="lineNum"> 17 </span><span class="lineCov"> 93 : SourceDir::FileType SourceDir::fileType(const std::string& name)</span> +<span class="lineNum"> 18 </span> : { +<span class="lineNum"> 19 </span><span class="lineCov"> 93 : if (name[0] == '.') return SKIP;</span> +<span class="lineNum"> 20 </span> : +<span class="lineNum"> 21 </span><span class="lineCov"> 59 : if (name == "all-popcon-results.txt") return RAW;</span> +<span class="lineNum"> 22 </span><span class="lineCov"> 59 : if (name == "all-popcon-results.txt.gz") return RAWGZ;</span> +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span><span class="lineCov"> 46 : return SKIP;</span> +<span class="lineNum"> 25 </span> : } +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span><span class="lineCov"> 14 : time_t SourceDir::timestamp()</span> +<span class="lineNum"> 28 </span> : { +<span class="lineNum"> 29 </span><span class="lineCov"> 14 : if (!valid()) return 0;</span> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span><span class="lineCov"> 14 : time_t max = 0;</span> +<span class="lineNum"> 32 </span><span class="lineCov"> 98 : for (const_iterator d = begin(); d != end(); ++d)</span> +<span class="lineNum"> 33 </span> : { +<span class="lineNum"> 34 </span><span class="lineCov"> 84 : FileType type = fileType(d->d_name);</span> +<span class="lineNum"> 35 </span><span class="lineCov"> 84 : if (type == SKIP) continue;</span> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span><span class="lineCov"> 12 : time_t ts = Path::timestamp(str::joinpath(path(), d->d_name));</span> +<span class="lineNum"> 38 </span><span class="lineCov"> 24 : if (ts > max) max = ts;</span> +<span class="lineNum"> 39 </span><span class="lineCov"> 14 : }</span> +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span><span class="lineCov"> 14 : return max;</span> +<span class="lineNum"> 42 </span> : } +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span><span class="lineCov"> 70200 : bool readLine(tagcoll::input::Input& in, string& str)</span> +<span class="lineNum"> 45 </span> : { +<span class="lineNum"> 46 </span><span class="lineCov"> 70200 : str.clear();</span> +<span class="lineNum"> 47 </span> : int c; +<span class="lineNum"> 48 </span><span class="lineCov"> 4594913 : while ((c = in.nextChar()) != tagcoll::input::Input::Eof && c != '\n')</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 4454513 : str += c;</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 70200 : return c != tagcoll::input::Input::Eof;</span> +<span class="lineNum"> 51 </span> : } +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span><span class="lineCov"> 1 : static void parseScores(tagcoll::input::Input& in, map<std::string, Score>& out, size_t& submissions)</span> +<span class="lineNum"> 54 </span> : { +<span class="lineNum"> 55 </span><span class="lineCov"> 1 : string line;</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 140349 : while (readLine(in, line))</span> +<span class="lineNum"> 57 </span> : { +<span class="lineNum"> 58 </span><span class="lineCov"> 70199 : if (line.size() < 10)</span> +<span class="lineNum"> 59 </span><span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 60 </span><span class="lineCov"> 70199 : if (line.substr(0, 13) == "Submissions: ")</span> +<span class="lineNum"> 61 </span> : { +<span class="lineNum"> 62 </span><span class="lineCov"> 1 : submissions = strtoul(line.substr(13).c_str(), 0, 10);</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 1 : continue;</span> +<span class="lineNum"> 64 </span> : } +<span class="lineNum"> 65 </span><span class="lineCov"> 70198 : if (line.substr(0, 9) != "Package: ")</span> +<span class="lineNum"> 66 </span><span class="lineCov"> 50 : continue;</span> +<span class="lineNum"> 67 </span><span class="lineCov"> 70148 : size_t start = 9;</span> +<span class="lineNum"> 68 </span><span class="lineCov"> 70148 : size_t end = line.find(' ', start);</span> +<span class="lineNum"> 69 </span><span class="lineCov"> 70148 : if (end == string::npos)</span> +<span class="lineNum"> 70 </span><span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 70148 : string name = line.substr(start, end-start);</span> +<span class="lineNum"> 72 </span> : // Skip packages not in the apt index +<span class="lineNum"> 73 </span> : //if (!apt.isValid(name)) +<span class="lineNum"> 74 </span> : //continue; +<span class="lineNum"> 75 </span> : +<span class="lineNum"> 76 </span><span class="lineCov"> 70148 : start = line.find_first_not_of(' ', end);</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 70148 : if (start == string::npos) continue;</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 70148 : end = line.find(' ', start);</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 70148 : if (end == string::npos) continue;</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 70148 : string vote = line.substr(start, end-start);</span> +<span class="lineNum"> 81 </span> : +<span class="lineNum"> 82 </span><span class="lineCov"> 70148 : start = line.find_first_not_of(' ', end);</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 70148 : if (start == string::npos) continue;</span> +<span class="lineNum"> 84 </span><span class="lineCov"> 70148 : end = line.find(' ', start);</span> +<span class="lineNum"> 85 </span><span class="lineCov"> 70148 : if (end == string::npos) continue;</span> +<span class="lineNum"> 86 </span><span class="lineCov"> 70148 : string old = line.substr(start, end-start);</span> +<span class="lineNum"> 87 </span> : +<span class="lineNum"> 88 </span><span class="lineCov"> 70148 : start = line.find_first_not_of(' ', end);</span> +<span class="lineNum"> 89 </span><span class="lineCov"> 70148 : if (start == string::npos) continue;</span> +<span class="lineNum"> 90 </span><span class="lineCov"> 70148 : end = line.find(' ', start);</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 70148 : if (end == string::npos) continue;</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 70148 : string recent = line.substr(start, end-start);</span> +<span class="lineNum"> 93 </span> : +<span class="lineNum"> 94 </span><span class="lineCov"> 70148 : start = line.find_first_not_of(' ', end);</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 70148 : if (start == string::npos) continue;</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 70148 : end = line.find(' ', start);</span> +<span class="lineNum"> 97 </span><span class="lineCov"> 70148 : if (end == string::npos) end = line.size();</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 70148 : string nofiles = line.substr(start, end-start);</span> +<span class="lineNum"> 99 </span> : +<span class="lineNum"> 100 </span> : float score = (float)strtoul(vote.c_str(), NULL, 10) +<span class="lineNum"> 101 </span> : + (float)strtoul(recent.c_str(), NULL, 10) * 0.5f +<span class="lineNum"> 102 </span> : + (float)strtoul(old.c_str(), NULL, 10) * 0.3f +<span class="lineNum"> 103 </span><span class="lineCov"> 70148 : + (float)strtoul(nofiles.c_str(), NULL, 10) * 0.8f;</span> +<span class="lineNum"> 104 </span> : +<span class="lineNum"> 105 </span><span class="lineCov"> 70148 : if (score > 0)</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 69910 : out.insert(make_pair(name, Score(score)));</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 108 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span><span class="lineCov"> 3 : bool SourceDir::readScores(map<std::string, Score>& out, size_t& submissions)</span> +<span class="lineNum"> 111 </span> : { +<span class="lineNum"> 112 </span><span class="lineCov"> 3 : if (!valid()) return false;</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 3 : bool done = false;</span> +<span class="lineNum"> 114 </span> : +<span class="lineNum"> 115 </span><span class="lineCov"> 12 : for (const_iterator d = begin(); d != end(); ++d)</span> +<span class="lineNum"> 116 </span> : { +<span class="lineNum"> 117 </span><span class="lineCov"> 9 : FileType type = fileType(d->d_name);</span> +<span class="lineNum"> 118 </span><span class="lineCov"> 9 : if (type == RAW)</span> +<span class="lineNum"> 119 </span> : { +<span class="lineNum"> 120 </span> : // Read uncompressed data +<span class="lineNum"> 121 </span><span class="lineNoCov"> 0 : tagcoll::input::Stdio in(str::joinpath(path(), d->d_name));</span> +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span> : // Read the scores +<span class="lineNum"> 124 </span><span class="lineNoCov"> 0 : parseScores(in, out, submissions);</span> +<span class="lineNum"> 125 </span><span class="lineNoCov"> 0 : done = true;</span> +<span class="lineNum"> 126 </span> : } +<span class="lineNum"> 127 </span><span class="lineCov"> 9 : else if (type == RAWGZ)</span> +<span class="lineNum"> 128 </span> : { +<span class="lineNum"> 129 </span> : // Read compressed data +<span class="lineNum"> 130 </span><span class="lineCov"> 1 : tagcoll::input::Zlib in(str::joinpath(path(), d->d_name));</span> +<span class="lineNum"> 131 </span> : +<span class="lineNum"> 132 </span> : // Read the scores +<span class="lineNum"> 133 </span><span class="lineCov"> 1 : parseScores(in, out, submissions);</span> +<span class="lineNum"> 134 </span><span class="lineCov"> 1 : done = true;</span> +<span class="lineNum"> 135 </span> : } +<span class="lineNum"> 136 </span><span class="lineCov"> 3 : }</span> +<span class="lineNum"> 137 </span><span class="lineCov"> 3 : return done;</span> +<span class="lineNum"> 138 </span> : } +<span class="lineNum"> 139 </span> : +<span class="lineNum"> 140 </span> : } +<span class="lineNum"> 141 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 142 </span> : +<span class="lineNum"> 143 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/maint/sourcedir.h.gcov.html b/rep/ept/popcon/maint/sourcedir.h.gcov.html new file mode 100644 index 0000000..56c0640 --- /dev/null +++ b/rep/ept/popcon/maint/sourcedir.h.gcov.html @@ -0,0 +1,130 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/maint/sourcedir.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/popcon/maint</a> - sourcedir.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">2</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">2</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_POPCON_SOURCEDIR_H +<span class="lineNum"> 2 </span> : #define EPT_POPCON_SOURCEDIR_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** @file +<span class="lineNum"> 5 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 6 </span> : * Popcon data source directory access +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2003,2004,2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 13 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 14 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 15 </span> : * (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <ept/popcon/popcon.h> +<span class="lineNum"> 28 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 29 </span> : #include <string> +<span class="lineNum"> 30 </span> : #include <map> +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : namespace ept { +<span class="lineNum"> 33 </span> : namespace popcon { +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : /** +<span class="lineNum"> 36 </span> : * Access a directory containing Debtags data files +<span class="lineNum"> 37 </span> : */ +<span class="lineNum"> 38 </span> : class SourceDir : public wibble::sys::fs::Directory +<span class="lineNum"> 39 </span><span class="lineCov"> 14 : {</span> +<span class="lineNum"> 40 </span> : protected: +<span class="lineNum"> 41 </span> : enum FileType { SKIP, RAW, RAWGZ }; +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : // Check if a file name is a tag file, a vocabulary file or a file to skip. +<span class="lineNum"> 44 </span> : // Please notice that it works on file names, not paths. +<span class="lineNum"> 45 </span> : FileType fileType(const std::string& name); +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span> : public: +<span class="lineNum"> 48 </span><span class="lineCov"> 14 : SourceDir(const std::string& path) : Directory(path) {}</span> +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : /// Return the time of the newest file in the source directory +<span class="lineNum"> 51 </span> : time_t timestamp(); +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : /** +<span class="lineNum"> 54 </span> : * Read the tag files in the directory and output their content to the map +<span class="lineNum"> 55 </span> : */ +<span class="lineNum"> 56 </span> : bool readScores(std::map<std::string, Score>& out, size_t& submissions); +<span class="lineNum"> 57 </span> : }; +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span> : } +<span class="lineNum"> 60 </span> : } +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 63 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/popcon.cc.gcov.html b/rep/ept/popcon/popcon.cc.gcov.html new file mode 100644 index 0000000..f38fb61 --- /dev/null +++ b/rep/ept/popcon/popcon.cc.gcov.html @@ -0,0 +1,162 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/popcon.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/popcon</a> - popcon.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">23</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">95.7 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">22</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : /** @file +<span class="lineNum"> 4 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 5 </span> : * Quick map from package IDs to package names +<span class="lineNum"> 6 </span> : */ +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : /* +<span class="lineNum"> 9 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 10 </span> : * +<span class="lineNum"> 11 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 12 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 13 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 14 </span> : * (at your option) any later version. +<span class="lineNum"> 15 </span> : * +<span class="lineNum"> 16 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 17 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 18 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 19 </span> : * GNU General Public License for more details. +<span class="lineNum"> 20 </span> : * +<span class="lineNum"> 21 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 22 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 23 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 24 </span> : */ +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : #include <ept/popcon/popcon.h> +<span class="lineNum"> 27 </span> : #include <ept/popcon/maint/popconindexer.h> +<span class="lineNum"> 28 </span> : #include <ept/popcon/maint/path.h> +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span> : //#include <iostream> +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : using namespace std; +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : namespace ept { +<span class="lineNum"> 35 </span> : namespace popcon { +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span><span class="lineCov"> 3 : size_t Popcon::GeneralInfo::submissions() const</span> +<span class="lineNum"> 38 </span> : { +<span class="lineNum"> 39 </span><span class="lineCov"> 3 : if (!m_buf) return 0;</span> +<span class="lineNum"> 40 </span><span class="lineCov"> 2 : return ((InfoStruct*)m_buf)->submissions;</span> +<span class="lineNum"> 41 </span> : } +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span><span class="lineCov"> 7 : Popcon::Popcon()</span> +<span class="lineNum"> 44 </span> : { +<span class="lineNum"> 45 </span><span class="lineCov"> 7 : std::string scofname, idxfname;</span> +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span><span class="lineCov"> 7 : if (!PopconIndexer::obtainWorkingPopcon(scofname, idxfname))</span> +<span class="lineNum"> 48 </span> : { +<span class="lineNum"> 49 </span><span class="lineCov"> 1 : m_timestamp = 0;</span> +<span class="lineNum"> 50 </span><span class="lineCov"> 1 : return;</span> +<span class="lineNum"> 51 </span> : } +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : //cerr << "GOT " << scofname << " " << idxfname << endl; +<span class="lineNum"> 54 </span> : +<span class="lineNum"> 55 </span><span class="lineCov"> 6 : m_timestamp = Path::timestamp(idxfname);</span> +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span><span class="lineCov"> 6 : mastermmap.init(idxfname);</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 6 : tagcoll::diskindex::MMap::init(mastermmap, 0);</span> +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span><span class="lineCov"> 6 : m_info.init(mastermmap, 1);</span> +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span> : //cerr << "SIZE " << size() << endl; +<span class="lineNum"> 63 </span> : //for (size_t i = 0; i < size(); ++i) +<span class="lineNum"> 64 </span> : //{ +<span class="lineNum"> 65 </span> : // cerr << "EL " << i << ": " << ((Score*)m_buf)[i].offset << " " << ((Score*)m_buf)[i].score << endl; +<span class="lineNum"> 66 </span> : //} +<span class="lineNum"> 67 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span><span class="lineCov"> 1792 : float Popcon::scoreByName(const std::string& name) const</span> +<span class="lineNum"> 70 </span> : { +<span class="lineNum"> 71 </span> : // Binary search the index to find the package ID +<span class="lineNum"> 72 </span> : int begin, end; +<span class="lineNum"> 73 </span> : +<span class="lineNum"> 74 </span> : /* Binary search */ +<span class="lineNum"> 75 </span><span class="lineCov"> 1792 : begin = -1, end = size();</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 32470 : while (end - begin > 1)</span> +<span class="lineNum"> 77 </span> : { +<span class="lineNum"> 78 </span><span class="lineCov"> 28886 : int cur = (end + begin) / 2;</span> +<span class="lineNum"> 79 </span><span class="lineCov"> 28886 : if (this->name(cur) > name)</span> +<span class="lineNum"> 80 </span><span class="lineCov"> 14367 : end = cur;</span> +<span class="lineNum"> 81 </span> : else +<span class="lineNum"> 82 </span><span class="lineCov"> 14519 : begin = cur;</span> +<span class="lineNum"> 83 </span> : } +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span><span class="lineCov"> 1792 : if (begin == -1 || this->name(begin) != name)</span> +<span class="lineNum"> 86 </span> : //throw NotFoundException(string("looking for the ID of string ") + str); +<span class="lineNum"> 87 </span><span class="lineCov"> 31 : return 0;</span> +<span class="lineNum"> 88 </span> : else +<span class="lineNum"> 89 </span><span class="lineCov"> 1761 : return score(begin);</span> +<span class="lineNum"> 90 </span> : } +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span> : } +<span class="lineNum"> 93 </span> : } +<span class="lineNum"> 94 </span> : +<span class="lineNum"> 95 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/popcon.h.gcov.html b/rep/ept/popcon/popcon.h.gcov.html new file mode 100644 index 0000000..270736f --- /dev/null +++ b/rep/ept/popcon/popcon.h.gcov.html @@ -0,0 +1,220 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/popcon.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/popcon</a> - popcon.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">25</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">96.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">24</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : #ifndef EPT_POPCON_POPCON_H +<span class="lineNum"> 3 </span> : #define EPT_POPCON_POPCON_H +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : /** @file +<span class="lineNum"> 6 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 7 </span> : * Access popcon data +<span class="lineNum"> 8 </span> : */ +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span> : /* +<span class="lineNum"> 11 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 12 </span> : * +<span class="lineNum"> 13 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 14 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 15 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 16 </span> : * (at your option) any later version. +<span class="lineNum"> 17 </span> : * +<span class="lineNum"> 18 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 19 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 20 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 21 </span> : * GNU General Public License for more details. +<span class="lineNum"> 22 </span> : * +<span class="lineNum"> 23 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 24 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 25 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 26 </span> : */ +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include <tagcoll/diskindex/mmap.h> +<span class="lineNum"> 29 </span> : #include <string> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace apt { +<span class="lineNum"> 33 </span> : class Apt; +<span class="lineNum"> 34 </span> : } +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span> : namespace popcon { +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span> : /** +<span class="lineNum"> 39 </span> : * Store the score information in the popcon cache. +<span class="lineNum"> 40 </span> : * +<span class="lineNum"> 41 </span> : * Currently, this is only one float; more can be added in the future. +<span class="lineNum"> 42 </span> : */ +<span class="lineNum"> 43 </span> : class Score +<span class="lineNum"> 44 </span> : { +<span class="lineNum"> 45 </span> : protected: +<span class="lineNum"> 46 </span> : unsigned offset; +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span> : public: +<span class="lineNum"> 49 </span> : float score; +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineCov"> 69910 : Score(float score) : offset(offset), score(score) {}</span> +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : friend class Popcon; +<span class="lineNum"> 54 </span> : friend class PopconIndexer; +<span class="lineNum"> 55 </span> : friend class PopconGenerator; +<span class="lineNum"> 56 </span> : }; +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span> : /** +<span class="lineNum"> 59 </span> : * Maps Packages to IDs and vice-versa. +<span class="lineNum"> 60 </span> : * +<span class="lineNum"> 61 </span> : * This is used in building the Debtags fast index, which works representing +<span class="lineNum"> 62 </span> : * tags and packages as int IDs. +<span class="lineNum"> 63 </span> : * +<span class="lineNum"> 64 </span> : * Index building works like this: +<span class="lineNum"> 65 </span> : * 1. The file all-popcon-results.txt.gz is downloaded from +<span class="lineNum"> 66 </span> : * http://popcon.debian.org/all-popcon-results.txt.gz +<span class="lineNum"> 67 </span> : * 2. The file is put in either ~/.popcon/all-popcon-results.txt.gz +<span class="lineNum"> 68 </span> : * or in /var/lib/popcon/all-popcon-results.txt.gz +<span class="lineNum"> 69 </span> : * 3. If the file is newer than the index, it will be automatically used to +<span class="lineNum"> 70 </span> : * recompute the scores and rebuild the index. +<span class="lineNum"> 71 </span> : */ +<span class="lineNum"> 72 </span> : class Popcon : public tagcoll::diskindex::MMap +<span class="lineNum"> 73 </span><span class="lineCov"> 7 : {</span> +<span class="lineNum"> 74 </span> : struct GeneralInfo : public tagcoll::diskindex::MMap +<span class="lineNum"> 75 </span><span class="lineCov"> 7 : {</span> +<span class="lineNum"> 76 </span> : size_t submissions() const; +<span class="lineNum"> 77 </span> : }; +<span class="lineNum"> 78 </span> : +<span class="lineNum"> 79 </span> : tagcoll::diskindex::MasterMMap mastermmap; +<span class="lineNum"> 80 </span> : time_t m_timestamp; +<span class="lineNum"> 81 </span> : +<span class="lineNum"> 82 </span> : GeneralInfo m_info; +<span class="lineNum"> 83 </span> : +<span class="lineNum"> 84 </span> : /// Get the score structure by index +<span class="lineNum"> 85 </span><span class="lineCov"> 102350 : const Score* structByIndex(size_t idx) const</span> +<span class="lineNum"> 86 </span> : { +<span class="lineNum"> 87 </span><span class="lineCov"> 102350 : if (idx >= 0 && idx < size())</span> +<span class="lineNum"> 88 </span><span class="lineCov"> 102350 : return (Score*)m_buf + idx;</span> +<span class="lineNum"> 89 </span><span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 90 </span> : } +<span class="lineNum"> 91 </span> : +<span class="lineNum"> 92 </span> : public: +<span class="lineNum"> 93 </span> : Popcon(); +<span class="lineNum"> 94 </span> : +<span class="lineNum"> 95 </span> : /// Get the timestamp of when the index was last updated +<span class="lineNum"> 96 </span><span class="lineCov"> 1 : time_t timestamp() const { return m_timestamp; }</span> +<span class="lineNum"> 97 </span> : +<span class="lineNum"> 98 </span> : /// Return true if this data source has data, false if it's empty +<span class="lineNum"> 99 </span><span class="lineCov"> 1 : bool hasData() const { return m_timestamp != 0; }</span> +<span class="lineNum"> 100 </span> : +<span class="lineNum"> 101 </span> : /// Return the total number of popcon submissions +<span class="lineNum"> 102 </span><span class="lineCov"> 3 : size_t submissions() const { return m_info.submissions(); }</span> +<span class="lineNum"> 103 </span> : +<span class="lineNum"> 104 </span> : /// Get the number of packages in the index +<span class="lineNum"> 105 </span><span class="lineCov"> 174055 : size_t size() const</span> +<span class="lineNum"> 106 </span> : { +<span class="lineNum"> 107 </span><span class="lineCov"> 174055 : if (m_buf)</span> +<span class="lineNum"> 108 </span><span class="lineCov"> 174053 : return ((Score*)m_buf)->offset / sizeof(Score);</span> +<span class="lineNum"> 109 </span> : else +<span class="lineNum"> 110 </span><span class="lineCov"> 2 : return 0;</span> +<span class="lineNum"> 111 </span> : } +<span class="lineNum"> 112 </span> : +<span class="lineNum"> 113 </span> : /** +<span class="lineNum"> 114 </span> : * Get a package name by index +<span class="lineNum"> 115 </span> : * +<span class="lineNum"> 116 </span> : * If the index is not valid, returns the empty string. +<span class="lineNum"> 117 </span> : */ +<span class="lineNum"> 118 </span><span class="lineCov"> 30678 : std::string name(size_t idx) const</span> +<span class="lineNum"> 119 </span> : { +<span class="lineNum"> 120 </span><span class="lineCov"> 30678 : const Score* s = structByIndex(idx);</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 30678 : if (s == 0) return std::string();</span> +<span class="lineNum"> 122 </span><span class="lineCov"> 30678 : return std::string(m_buf + s->offset);</span> +<span class="lineNum"> 123 </span> : } +<span class="lineNum"> 124 </span> : +<span class="lineNum"> 125 </span> : /// Get the score by index +<span class="lineNum"> 126 </span><span class="lineCov"> 71672 : float scoreByIndex(size_t idx) const</span> +<span class="lineNum"> 127 </span> : { +<span class="lineNum"> 128 </span><span class="lineCov"> 71672 : const Score* s = structByIndex(idx);</span> +<span class="lineNum"> 129 </span><span class="lineCov"> 71672 : if (!s) return 0;</span> +<span class="lineNum"> 130 </span><span class="lineCov"> 71672 : return s->score;</span> +<span class="lineNum"> 131 </span> : } +<span class="lineNum"> 132 </span> : +<span class="lineNum"> 133 </span> : /// Get the score structure by package name +<span class="lineNum"> 134 </span> : float scoreByName(const std::string& name) const; +<span class="lineNum"> 135 </span> : +<span class="lineNum"> 136 </span> : /// Get the score by index +<span class="lineNum"> 137 </span><span class="lineCov"> 71672 : float score(size_t idx) const { return scoreByIndex(idx); }</span> +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span> : /// Get the score by index +<span class="lineNum"> 140 </span> : float operator[](int idx) const { return scoreByIndex(idx); } +<span class="lineNum"> 141 </span> : +<span class="lineNum"> 142 </span> : /// Get the score by name +<span class="lineNum"> 143 </span><span class="lineCov"> 1790 : float score(const std::string& name) const { return scoreByName(name); }</span> +<span class="lineNum"> 144 </span> : +<span class="lineNum"> 145 </span> : /// Get the score structure by package name +<span class="lineNum"> 146 </span><span class="lineCov"> 2 : float operator[](const std::string& name) const { return scoreByName(name); }</span> +<span class="lineNum"> 147 </span> : }; +<span class="lineNum"> 148 </span> : +<span class="lineNum"> 149 </span> : } +<span class="lineNum"> 150 </span> : } +<span class="lineNum"> 151 </span> : +<span class="lineNum"> 152 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 153 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/popcon/popcon.test.h.gcov.html b/rep/ept/popcon/popcon.test.h.gcov.html new file mode 100644 index 0000000..65387fc --- /dev/null +++ b/rep/ept/popcon/popcon.test.h.gcov.html @@ -0,0 +1,175 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/popcon/popcon.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/popcon</a> - popcon.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">38</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">38</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /* +<span class="lineNum"> 3 </span> : * popcon test +<span class="lineNum"> 4 </span> : * +<span class="lineNum"> 5 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 6 </span> : * +<span class="lineNum"> 7 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 8 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 9 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 10 </span> : * (at your option) any later version. +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 13 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 14 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 15 </span> : * GNU General Public License for more details. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 18 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 19 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 20 </span> : */ +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : #include <ept/popcon/popcon.h> +<span class="lineNum"> 23 </span> : #include <ept/popcon/maint/path.h> +<span class="lineNum"> 24 </span> : #include <ept/apt/apt.h> +<span class="lineNum"> 25 </span> : #include <set> +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <ept/test.h> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : using namespace std; +<span class="lineNum"> 30 </span> : using namespace ept; +<span class="lineNum"> 31 </span> : using namespace ept::popcon; +<span class="lineNum"> 32 </span> : using namespace ept::apt; +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : struct TestPopcon +<span class="lineNum"> 35 </span><span class="lineCov"> 5 : {</span> +<span class="lineNum"> 36 </span> : popcon::Path::OverridePopconSourceDir odsd; +<span class="lineNum"> 37 </span> : popcon::Path::OverridePopconIndexDir odid; +<span class="lineNum"> 38 </span> : popcon::Path::OverridePopconUserSourceDir odusd; +<span class="lineNum"> 39 </span> : popcon::Path::OverridePopconUserIndexDir oduid; +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : Apt apt; +<span class="lineNum"> 42 </span> : Popcon popcon; +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span><span class="lineCov"> 5 : TestPopcon()</span> +<span class="lineNum"> 45 </span> : : odsd( TEST_ENV_DIR "popcon" ), +<span class="lineNum"> 46 </span> : odid( TEST_ENV_DIR "popcon" ), +<span class="lineNum"> 47 </span> : odusd( TEST_ENV_DIR "popcon" ), +<span class="lineNum"> 48 </span><span class="lineCov"> 5 : oduid( TEST_ENV_DIR "popcon" )</span> +<span class="lineNum"> 49 </span><span class="lineCov"> 5 : {}</span> +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineCov"> 1 : Test basicAccess()</span> +<span class="lineNum"> 52 </span> : { +<span class="lineNum"> 53 </span><span class="lineCov"> 1 : assert_eq(popcon.submissions(), 52024);</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 2 : assert(popcon.size() > 0);</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 2 : assert(popcon.score(0) > 0);</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 2 : assert(!popcon.name(0).empty());</span> +<span class="lineNum"> 57 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 58 </span> : +<span class="lineNum"> 59 </span> : // Check that every valid index is accessible +<span class="lineNum"> 60 </span><span class="lineCov"> 1 : Test accessibility()</span> +<span class="lineNum"> 61 </span> : { +<span class="lineNum"> 62 </span><span class="lineCov"> 139822 : for (size_t i = 0; i < popcon.size(); ++i)</span> +<span class="lineNum"> 63 </span> : { +<span class="lineNum"> 64 </span> : //cerr << popcon.name(i) << " " << popcon.score(i) << endl; +<span class="lineNum"> 65 </span><span class="lineCov"> 69910 : assert(popcon.score(i) > 0);</span> +<span class="lineNum"> 66 </span> : } +<span class="lineNum"> 67 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 68 </span> : +<span class="lineNum"> 69 </span> : // Check that we can get a score for every package +<span class="lineNum"> 70 </span><span class="lineCov"> 1 : Test haveScores()</span> +<span class="lineNum"> 71 </span> : { +<span class="lineNum"> 72 </span><span class="lineCov"> 1 : int has = 0;</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 1789 : for (Apt::iterator i = apt.begin(); i != apt.end(); ++i)</span> +<span class="lineNum"> 74 </span> : { +<span class="lineNum"> 75 </span><span class="lineCov"> 1788 : float score = popcon.score(*i);</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 1788 : if (score > 0)</span> +<span class="lineNum"> 77 </span><span class="lineCov"> 1758 : ++has;</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 79 </span> : // At least 1000 packages should have a score +<span class="lineNum"> 80 </span><span class="lineCov"> 2 : assert(has > 1000);</span> +<span class="lineNum"> 81 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span> : // Check that scores are meaningful +<span class="lineNum"> 84 </span><span class="lineCov"> 1 : Test validScores()</span> +<span class="lineNum"> 85 </span> : { +<span class="lineNum"> 86 </span><span class="lineCov"> 1 : assert(popcon["apt"] > popcon["libapt-pkg-dev"]);</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span> : // If there is no data, Popcon should work as if all scores were 0 +<span class="lineNum"> 90 </span><span class="lineCov"> 1 : Test fallbackValues()</span> +<span class="lineNum"> 91 </span> : { +<span class="lineNum"> 92 </span><span class="lineCov"> 1 : popcon::Path::OverridePopconSourceDir odsd("./empty");</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 2 : popcon::Path::OverridePopconIndexDir odid("./empty");</span> +<span class="lineNum"> 94 </span><span class="lineCov"> 2 : popcon::Path::OverridePopconUserSourceDir odusd("./empty");</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 2 : popcon::Path::OverridePopconUserIndexDir oduid("./empty");</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 1 : Popcon empty;</span> +<span class="lineNum"> 97 </span> : +<span class="lineNum"> 98 </span><span class="lineCov"> 1 : assert_eq(empty.timestamp(), 0);</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 2 : assert(!empty.hasData());</span> +<span class="lineNum"> 100 </span> : +<span class="lineNum"> 101 </span><span class="lineCov"> 2 : assert_eq(empty.submissions(), 0);</span> +<span class="lineNum"> 102 </span><span class="lineCov"> 2 : assert(empty.size() == 0);</span> +<span class="lineNum"> 103 </span><span class="lineCov"> 2 : assert(empty.score("apt") == 0.0);</span> +<span class="lineNum"> 104 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span> : }; +<span class="lineNum"> 107 </span> : +<span class="lineNum"> 108 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/progresscallback.cpp.gcov.html b/rep/ept/progresscallback.cpp.gcov.html new file mode 100644 index 0000000..1a46d4e --- /dev/null +++ b/rep/ept/progresscallback.cpp.gcov.html @@ -0,0 +1,79 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/progresscallback.cpp</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../index.html">directory</a> - <a href="index.html">ept</a> - progresscallback.cpp</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">4</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">0.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">0</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #include <ept/progresscallback.h> +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : namespace ept { +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span><span class="lineNoCov"> 0 : bool ProgressCallback::Pulse(pkgAcquire *Owner)</span> +<span class="lineNum"> 6 </span> : { +<span class="lineNum"> 7 </span><span class="lineNoCov"> 0 : pkgAcquireStatus::Pulse(Owner);</span> +<span class="lineNum"> 8 </span><span class="lineNoCov"> 0 : UpdatePulse(FetchedBytes, CurrentCPS, CurrentItems);</span> +<span class="lineNum"> 9 </span><span class="lineNoCov"> 0 : return true;</span> +<span class="lineNum"> 10 </span> : } +<span class="lineNum"> 11 </span> : +<span class="lineNum"> 12 </span> : } +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/progresscallback.h.gcov.html b/rep/ept/progresscallback.h.gcov.html new file mode 100644 index 0000000..9dbb029 --- /dev/null +++ b/rep/ept/progresscallback.h.gcov.html @@ -0,0 +1,95 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/progresscallback.h</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../index.html">directory</a> - <a href="index.html">ept</a> - progresscallback.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">3</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">0.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">0</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : /** -*- C++ -*- +<span class="lineNum"> 2 </span> : @file progresscallback.h +<span class="lineNum"> 3 </span> : @author Michael Vogt <mvo@debian.org> +<span class="lineNum"> 4 </span> : */ +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : #ifndef EPT_PROGRESSCALLBACK_H +<span class="lineNum"> 7 </span> : #define EPT_PROGRESSCALLBACK_H +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : #include <apt-pkg/acquire.h> +<span class="lineNum"> 10 </span> : +<span class="lineNum"> 11 </span> : namespace ept { +<span class="lineNum"> 12 </span> : +<span class="lineNum"> 13 </span> : class ProgressCallback : public pkgAcquireStatus +<span class="lineNum"> 14 </span> : { +<span class="lineNum"> 15 </span> : protected: +<span class="lineNum"> 16 </span> : virtual bool Pulse(pkgAcquire *Owner); +<span class="lineNum"> 17 </span> : public: +<span class="lineNum"> 18 </span> : ProgressCallback() {}; +<span class="lineNum"> 19 </span><span class="lineNoCov"> 0 : virtual ~ProgressCallback() {};</span> +<span class="lineNum"> 20 </span><span class="lineNoCov"> 0 : virtual bool MediaChange( string, string ) { return false; } // bah</span> +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : // override this to get periodic updates +<span class="lineNum"> 23 </span><span class="lineNoCov"> 0 : virtual void UpdatePulse( double, double, unsigned long ) {}</span> +<span class="lineNum"> 24 </span> : }; +<span class="lineNum"> 25 </span> : +<span class="lineNum"> 26 </span> : } +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/test.h.gcov.html b/rep/ept/test.h.gcov.html new file mode 100644 index 0000000..4004bd7 --- /dev/null +++ b/rep/ept/test.h.gcov.html @@ -0,0 +1,105 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/test.h</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../index.html">directory</a> - <a href="index.html">ept</a> - test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">15</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">15</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #include <ept/core/apt.h> +<span class="lineNum"> 2 </span> : #include <ept/config.h> +<span class="lineNum"> 3 </span> : #include <ept/debtags/maint/path.h> +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : #include <wibble/test.h> +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : #ifndef EPT_TEST_H +<span class="lineNum"> 8 </span> : #define EPT_TEST_H +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span><span class="lineCov"> 73 : struct AptTestEnvironment {</span> +<span class="lineNum"> 11 </span> : ept::core::AptDatabase db; +<span class="lineNum"> 12 </span><span class="lineCov"> 73 : AptTestEnvironment() {</span> +<span class="lineNum"> 13 </span><span class="lineCov"> 73 : pkgInitConfig (*_config);</span> +<span class="lineNum"> 14 </span><span class="lineCov"> 73 : _config->Set("Initialized", 1);</span> +<span class="lineNum"> 15 </span><span class="lineCov"> 73 : _config->Set("Dir", TEST_ENV_DIR);</span> +<span class="lineNum"> 16 </span><span class="lineCov"> 146 : _config->Set("Dir::Cache", "cache");</span> +<span class="lineNum"> 17 </span><span class="lineCov"> 146 : _config->Set("Dir::State", "state");</span> +<span class="lineNum"> 18 </span><span class="lineCov"> 146 : _config->Set("Dir::Etc", "etc");</span> +<span class="lineNum"> 19 </span><span class="lineCov"> 146 : _config->Set("Dir::State::status", TEST_ENV_DIR "dpkg-status");</span> +<span class="lineNum"> 20 </span><span class="lineCov"> 73 : pkgInitSystem (*_config, _system);</span> +<span class="lineNum"> 21 </span><span class="lineCov"> 73 : }</span> +<span class="lineNum"> 22 </span> : }; +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span><span class="lineCov"> 29 : struct DebtagsTestEnvironment : AptTestEnvironment {</span> +<span class="lineNum"> 25 </span> : ept::debtags::Path::OverrideDebtagsSourceDir odsd; +<span class="lineNum"> 26 </span> : ept::debtags::Path::OverrideDebtagsIndexDir odid; +<span class="lineNum"> 27 </span> : ept::debtags::Path::OverrideDebtagsUserSourceDir odusd; +<span class="lineNum"> 28 </span> : ept::debtags::Path::OverrideDebtagsUserIndexDir oduid; +<span class="lineNum"> 29 </span> : +<span class="lineNum"> 30 </span><span class="lineCov"> 29 : DebtagsTestEnvironment()</span> +<span class="lineNum"> 31 </span> : : odsd( TEST_ENV_DIR "debtags/"), +<span class="lineNum"> 32 </span> : odid( TEST_ENV_DIR "debtags/"), +<span class="lineNum"> 33 </span> : odusd( TEST_ENV_DIR "debtags/"), +<span class="lineNum"> 34 </span><span class="lineCov"> 29 : oduid( TEST_ENV_DIR "debtags/")</span> +<span class="lineNum"> 35 </span><span class="lineCov"> 29 : {}</span> +<span class="lineNum"> 36 </span> : }; +<span class="lineNum"> 37 </span> : +<span class="lineNum"> 38 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/textsearch/extraindexers.cc.gcov.html b/rep/ept/textsearch/extraindexers.cc.gcov.html new file mode 100644 index 0000000..9072fde --- /dev/null +++ b/rep/ept/textsearch/extraindexers.cc.gcov.html @@ -0,0 +1,125 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/textsearch/extraindexers.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/textsearch</a> - extraindexers.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">10</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">0.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">0</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : +<span class="lineNum"> 2 </span> : /** @file +<span class="lineNum"> 3 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 4 </span> : * Fast full-text search +<span class="lineNum"> 5 </span> : */ +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : /* +<span class="lineNum"> 8 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 9 </span> : * +<span class="lineNum"> 10 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 11 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 12 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 13 </span> : * (at your option) any later version. +<span class="lineNum"> 14 </span> : * +<span class="lineNum"> 15 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 16 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 17 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 18 </span> : * GNU General Public License for more details. +<span class="lineNum"> 19 </span> : * +<span class="lineNum"> 20 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 21 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 22 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 23 </span> : */ +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <ept/textsearch/extraindexers.h> +<span class="lineNum"> 26 </span> : #include <ept/apt/packagerecord.h> +<span class="lineNum"> 27 </span> : #include <ept/debtags/debtags.h> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : using namespace std; +<span class="lineNum"> 30 </span> : using namespace ept::debtags; +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : namespace ept { +<span class="lineNum"> 33 </span> : namespace textsearch { +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span><span class="lineNoCov"> 0 : void AptTagsExtraIndexer::operator()(Xapian::Document& doc, const apt::PackageRecord& rec) const</span> +<span class="lineNum"> 36 </span> : { +<span class="lineNum"> 37 </span> : // Index tags as well +<span class="lineNum"> 38 </span><span class="lineNoCov"> 0 : set<string> tags = rec.tag();</span> +<span class="lineNum"> 39 </span><span class="lineNoCov"> 0 : for (set<string>::const_iterator ti = tags.begin();</span> +<span class="lineNum"> 40 </span> : ti != tags.end(); ++ti) +<span class="lineNum"> 41 </span><span class="lineNoCov"> 0 : doc.add_term("XT"+*ti);</span> +<span class="lineNum"> 42 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span><span class="lineNoCov"> 0 : void DebtagsExtraIndexer::operator()(Xapian::Document& doc, const apt::PackageRecord& rec) const</span> +<span class="lineNum"> 45 </span> : { +<span class="lineNum"> 46 </span> : // Index tags as well +<span class="lineNum"> 47 </span><span class="lineNoCov"> 0 : set<Tag> tags = debtags.getTagsOfItem(doc.get_data());</span> +<span class="lineNum"> 48 </span><span class="lineNoCov"> 0 : for (set<Tag>::const_iterator ti = tags.begin();</span> +<span class="lineNum"> 49 </span> : ti != tags.end(); ++ti) +<span class="lineNum"> 50 </span><span class="lineNoCov"> 0 : doc.add_term("XT"+ti->fullname());</span> +<span class="lineNum"> 51 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span> : } +<span class="lineNum"> 54 </span> : } +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span> : #include <ept/debtags/debtags.tcc> +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/textsearch/extraindexers.h.gcov.html b/rep/ept/textsearch/extraindexers.h.gcov.html new file mode 100644 index 0000000..bb7734f --- /dev/null +++ b/rep/ept/textsearch/extraindexers.h.gcov.html @@ -0,0 +1,118 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/textsearch/extraindexers.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/textsearch</a> - extraindexers.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">2</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">0.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">0</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_TEXTSEARCH_EXTRAINDEXERS_H +<span class="lineNum"> 2 </span> : #define EPT_TEXTSEARCH_EXTRAINDEXERS_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** @file +<span class="lineNum"> 5 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 6 </span> : * Fast full-text search +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 13 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 14 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 15 </span> : * (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <ept/textsearch/textsearch.h> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : namespace ept { +<span class="lineNum"> 30 </span> : namespace debtags { +<span class="lineNum"> 31 </span> : class Debtags; +<span class="lineNum"> 32 </span> : } +<span class="lineNum"> 33 </span> : namespace textsearch { +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : struct AptTagsExtraIndexer : public TextSearch::ExtraIndexer +<span class="lineNum"> 36 </span><span class="lineNoCov"> 0 : {</span> +<span class="lineNum"> 37 </span> : virtual void operator()(Xapian::Document& doc, const apt::PackageRecord& rec) const; +<span class="lineNum"> 38 </span> : }; +<span class="lineNum"> 39 </span> : +<span class="lineNum"> 40 </span> : struct DebtagsExtraIndexer : public TextSearch::ExtraIndexer +<span class="lineNum"> 41 </span><span class="lineNoCov"> 0 : {</span> +<span class="lineNum"> 42 </span> : const debtags::Debtags& debtags; +<span class="lineNum"> 43 </span> : DebtagsExtraIndexer(const debtags::Debtags& debtags) : debtags(debtags) {} +<span class="lineNum"> 44 </span> : virtual void operator()(Xapian::Document& doc, const apt::PackageRecord& rec) const; +<span class="lineNum"> 45 </span> : }; +<span class="lineNum"> 46 </span> : +<span class="lineNum"> 47 </span> : } +<span class="lineNum"> 48 </span> : } +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 51 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/textsearch/index.html b/rep/ept/textsearch/index.html new file mode 100644 index 0000000..331b9e7 --- /dev/null +++ b/rep/ept/textsearch/index.html @@ -0,0 +1,119 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/textsearch</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - ept/textsearch</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">216</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">77.3 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">167</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="extraindexers.cc.gcov.html">extraindexers.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0 %</td> + <td class="coverNumLo">0 / 10 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="extraindexers.h.gcov.html">extraindexers.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0 %</td> + <td class="coverNumLo">0 / 2 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="textsearch.cc.gcov.html">textsearch.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=72 height=10 alt="72.2%"><img src="../../snow.png" width=28 height=10 alt="72.2%"></td></tr></table> + </td> + <td class="coverPerHi">72.2 %</td> + <td class="coverNumHi">83 / 115 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="textsearch.h.gcov.html">textsearch.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=87 height=10 alt="86.7%"><img src="../../snow.png" width=13 height=10 alt="86.7%"></td></tr></table> + </td> + <td class="coverPerHi">86.7 %</td> + <td class="coverNumHi">13 / 15 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="textsearch.test.h.gcov.html">textsearch.test.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=96 height=10 alt="95.9%"><img src="../../snow.png" width=4 height=10 alt="95.9%"></td></tr></table> + </td> + <td class="coverPerHi">95.9 %</td> + <td class="coverNumHi">71 / 74 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/textsearch/maint/index.html b/rep/ept/textsearch/maint/index.html new file mode 100644 index 0000000..45b6542 --- /dev/null +++ b/rep/ept/textsearch/maint/index.html @@ -0,0 +1,92 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/textsearch/maint</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - ept/textsearch/maint</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">34</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">85.3 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">29</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=2 cellspacing=1 border=0> + + <tr> + <td width="50%"><br></td> + <td width="15%"></td> + <td width="15%"></td> + <td width="20%"></td> + </tr> + + <tr> + <td class="tableHead">Filename</td> + <td class="tableHead" colspan=3>Coverage</td> + </tr> + + <tr> + <td class="coverFile"><a href="path.cc.gcov.html">path.cc</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=83 height=10 alt="82.8%"><img src="../../../snow.png" width=17 height=10 alt="82.8%"></td></tr></table> + </td> + <td class="coverPerHi">82.8 %</td> + <td class="coverNumHi">24 / 29 lines</td> + </tr> + + <tr> + <td class="coverFile"><a href="path.h.gcov.html">path.h</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0 %</td> + <td class="coverNumHi">5 / 5 lines</td> + </tr> + + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/textsearch/maint/path.cc.gcov.html b/rep/ept/textsearch/maint/path.cc.gcov.html new file mode 100644 index 0000000..6363c97 --- /dev/null +++ b/rep/ept/textsearch/maint/path.cc.gcov.html @@ -0,0 +1,160 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/textsearch/maint/path.cc</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/textsearch/maint</a> - path.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">29</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">82.8 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">24</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : +<span class="lineNum"> 3 </span> : /** \file +<span class="lineNum"> 4 </span> : * popcon paths +<span class="lineNum"> 5 </span> : */ +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : /* +<span class="lineNum"> 8 </span> : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org>, Peter Rockai <me@mornfall.net> +<span class="lineNum"> 9 </span> : * +<span class="lineNum"> 10 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 11 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 12 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 13 </span> : * (at your option) any later version. +<span class="lineNum"> 14 </span> : * +<span class="lineNum"> 15 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 16 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 17 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 18 </span> : * GNU General Public License for more details. +<span class="lineNum"> 19 </span> : * +<span class="lineNum"> 20 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 21 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 22 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 23 </span> : */ +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <ept/config.h> +<span class="lineNum"> 26 </span> : #include <ept/textsearch/maint/path.h> +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : #include <wibble/exception.h> +<span class="lineNum"> 29 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 30 </span> : #include <wibble/string.h> +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : #include <cstdio> +<span class="lineNum"> 33 </span> : #include <cerrno> +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : #include <sys/types.h> +<span class="lineNum"> 36 </span> : #include <sys/stat.h> +<span class="lineNum"> 37 </span> : #include <unistd.h> +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : using namespace std; +<span class="lineNum"> 40 </span> : using namespace wibble; +<span class="lineNum"> 41 </span> : +<span class="lineNum"> 42 </span> : namespace ept { +<span class="lineNum"> 43 </span> : namespace textsearch { +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span><span class="lineCov"> 111 : Path &Path::instance() {</span> +<span class="lineNum"> 46 </span><span class="lineCov"> 111 : if (!s_instance) {</span> +<span class="lineNum"> 47 </span><span class="lineCov"> 1 : s_instance = new Path;</span> +<span class="lineNum"> 48 </span><span class="lineCov"> 1 : instance().m_indexDir = TEXTSEARCH_DB_DIR;</span> +<span class="lineNum"> 49 </span> : } +<span class="lineNum"> 50 </span><span class="lineCov"> 111 : return *s_instance;</span> +<span class="lineNum"> 51 </span> : } +<span class="lineNum"> 52 </span> : +<span class="lineNum"> 53 </span><span class="lineNoCov"> 0 : int Path::access( const std::string &s, int m )</span> +<span class="lineNum"> 54 </span> : { +<span class="lineNum"> 55 </span><span class="lineNoCov"> 0 : return ::access( s.c_str(), m );</span> +<span class="lineNum"> 56 </span> : } +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span><span class="lineCov"> 20 : time_t Path::indexTimestamp()</span> +<span class="lineNum"> 59 </span> : { +<span class="lineNum"> 60 </span><span class="lineCov"> 20 : string tsfile = str::joinpath(instance().indexDir(), "update-timestamp");</span> +<span class="lineNum"> 61 </span><span class="lineCov"> 40 : std::auto_ptr<struct stat> st = wibble::sys::fs::stat(tsfile);</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 20 : if (st.get())</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 18 : return st->st_mtime;</span> +<span class="lineNum"> 64 </span> : else +<span class="lineNum"> 65 </span><span class="lineCov"> 2 : return 0;</span> +<span class="lineNum"> 66 </span> : } +<span class="lineNum"> 67 </span> : +<span class="lineNum"> 68 </span><span class="lineCov"> 6 : void Path::setTimestamp(time_t ts)</span> +<span class="lineNum"> 69 </span> : { +<span class="lineNum"> 70 </span><span class="lineCov"> 6 : string tsfile = str::joinpath(instance().indexDir(), "/update-timestamp");</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 12 : FILE* out = fopen(tsfile.c_str(), "wt");</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 6 : if (!out)</span> +<span class="lineNum"> 73 </span><span class="lineNoCov"> 0 : throw wibble::exception::File(tsfile, "opening file for truncate/writing");</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 6 : if (fprintf(out, "%ld\n", ts) < 0)</span> +<span class="lineNum"> 75 </span><span class="lineNoCov"> 0 : throw wibble::exception::File(tsfile, "writing the modification time");</span> +<span class="lineNum"> 76 </span><span class="lineCov"> 6 : if (fclose(out) < 0)</span> +<span class="lineNum"> 77 </span><span class="lineNoCov"> 0 : throw wibble::exception::File(tsfile, "closing the file");</span> +<span class="lineNum"> 78 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 79 </span> : +<span class="lineNum"> 80 </span><span class="lineCov"> 22 : void Path::setIndexDir( const std::string &s )</span> +<span class="lineNum"> 81 </span> : { +<span class="lineNum"> 82 </span><span class="lineCov"> 22 : instance().m_indexDir = s;</span> +<span class="lineNum"> 83 </span><span class="lineCov"> 22 : }</span> +<span class="lineNum"> 84 </span> : +<span class="lineNum"> 85 </span><span class="lineCov"> 37 : std::string Path::indexDir() { return instance().m_indexDir; }</span> +<span class="lineNum"> 86 </span><span class="lineCov"> 25 : std::string Path::index() { return str::joinpath(instance().m_indexDir, "/index"); }</span> +<span class="lineNum"> 87 </span> : +<span class="lineNum"> 88 </span> : Path *Path::s_instance = 0; +<span class="lineNum"> 89 </span> : +<span class="lineNum"> 90 </span> : } +<span class="lineNum"> 91 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 92 </span> : +<span class="lineNum"> 93 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/textsearch/maint/path.h.gcov.html b/rep/ept/textsearch/maint/path.h.gcov.html new file mode 100644 index 0000000..5505d7b --- /dev/null +++ b/rep/ept/textsearch/maint/path.h.gcov.html @@ -0,0 +1,141 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/textsearch/maint/path.h</title> + <link rel="stylesheet" type="text/css" href="../../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">ept/textsearch/maint</a> - path.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">5</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">100.0 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">5</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /** \file +<span class="lineNum"> 3 </span> : * popcon paths +<span class="lineNum"> 4 </span> : */ +<span class="lineNum"> 5 </span> : +<span class="lineNum"> 6 </span> : /* +<span class="lineNum"> 7 </span> : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 8 </span> : * +<span class="lineNum"> 9 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 10 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 11 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 12 </span> : * (at your option) any later version. +<span class="lineNum"> 13 </span> : * +<span class="lineNum"> 14 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 15 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 16 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 17 </span> : * GNU General Public License for more details. +<span class="lineNum"> 18 </span> : * +<span class="lineNum"> 19 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 20 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 21 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 22 </span> : */ +<span class="lineNum"> 23 </span> : +<span class="lineNum"> 24 </span> : #ifndef EPT_TEXTSEARCH_PATH_H +<span class="lineNum"> 25 </span> : #define EPT_TEXTSEARCH_PATH_H +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <string> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : struct stat; +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace textsearch { +<span class="lineNum"> 33 </span> : +<span class="lineNum"> 34 </span> : /** +<span class="lineNum"> 35 </span> : * Singleton class to configure and access the various Popcon paths +<span class="lineNum"> 36 </span> : */ +<span class="lineNum"> 37 </span> : class Path +<span class="lineNum"> 38 </span><span class="lineCov"> 1 : {</span> +<span class="lineNum"> 39 </span> : public: +<span class="lineNum"> 40 </span> : static std::string indexDir(); +<span class="lineNum"> 41 </span> : static std::string index(); +<span class="lineNum"> 42 </span> : +<span class="lineNum"> 43 </span> : // Directory where Popcon source data is found +<span class="lineNum"> 44 </span> : static void setIndexDir( const std::string &s ); +<span class="lineNum"> 45 </span> : +<span class="lineNum"> 46 </span> : static int access( const std::string &, int ); +<span class="lineNum"> 47 </span> : static time_t indexTimestamp(); +<span class="lineNum"> 48 </span> : static void setTimestamp(time_t ts); +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span> : // RAII-style classes to temporarily override directories +<span class="lineNum"> 51 </span> : class OverrideIndexDir +<span class="lineNum"> 52 </span> : { +<span class="lineNum"> 53 </span> : std::string old; +<span class="lineNum"> 54 </span> : public: +<span class="lineNum"> 55 </span><span class="lineCov"> 11 : OverrideIndexDir(const std::string& path) : old(Path::indexDir())</span> +<span class="lineNum"> 56 </span> : { +<span class="lineNum"> 57 </span><span class="lineCov"> 11 : Path::setIndexDir(path);</span> +<span class="lineNum"> 58 </span><span class="lineCov"> 11 : }</span> +<span class="lineNum"> 59 </span><span class="lineCov"> 11 : ~OverrideIndexDir() { Path::setIndexDir(old); }</span> +<span class="lineNum"> 60 </span> : }; +<span class="lineNum"> 61 </span> : +<span class="lineNum"> 62 </span> : protected: +<span class="lineNum"> 63 </span> : static Path *s_instance; +<span class="lineNum"> 64 </span> : static Path &instance(); +<span class="lineNum"> 65 </span> : +<span class="lineNum"> 66 </span> : // Directory where Popcon source data is found +<span class="lineNum"> 67 </span> : std::string m_indexDir; +<span class="lineNum"> 68 </span> : }; +<span class="lineNum"> 69 </span> : +<span class="lineNum"> 70 </span> : } +<span class="lineNum"> 71 </span> : } +<span class="lineNum"> 72 </span> : +<span class="lineNum"> 73 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 74 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/textsearch/textsearch.cc.gcov.html b/rep/ept/textsearch/textsearch.cc.gcov.html new file mode 100644 index 0000000..b1cdfba --- /dev/null +++ b/rep/ept/textsearch/textsearch.cc.gcov.html @@ -0,0 +1,323 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/textsearch/textsearch.cc</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/textsearch</a> - textsearch.cc</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">115</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">72.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">83</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : +<span class="lineNum"> 2 </span> : /** @file +<span class="lineNum"> 3 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 4 </span> : * Fast full-text search +<span class="lineNum"> 5 </span> : */ +<span class="lineNum"> 6 </span> : +<span class="lineNum"> 7 </span> : /* +<span class="lineNum"> 8 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 9 </span> : * +<span class="lineNum"> 10 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 11 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 12 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 13 </span> : * (at your option) any later version. +<span class="lineNum"> 14 </span> : * +<span class="lineNum"> 15 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 16 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 17 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 18 </span> : * GNU General Public License for more details. +<span class="lineNum"> 19 </span> : * +<span class="lineNum"> 20 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 21 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 22 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 23 </span> : */ +<span class="lineNum"> 24 </span> : +<span class="lineNum"> 25 </span> : #include <ept/textsearch/textsearch.h> +<span class="lineNum"> 26 </span> : #include <ept/textsearch/maint/path.h> +<span class="lineNum"> 27 </span> : #include <ept/apt/apt.h> +<span class="lineNum"> 28 </span> : #include <ept/apt/packagerecord.h> +<span class="lineNum"> 29 </span> : //#include <ept/debtags/debtags.h> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : #include <wibble/regexp.h> +<span class="lineNum"> 32 </span> : #include <cctype> +<span class="lineNum"> 33 </span> : #include <cmath> +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : #include <xapian/queryparser.h> +<span class="lineNum"> 36 </span> : +<span class="lineNum"> 37 </span> : #include <algorithm> +<span class="lineNum"> 38 </span> : +<span class="lineNum"> 39 </span> : #include <iostream> +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : using namespace std; +<span class="lineNum"> 42 </span> : using namespace ept::apt; +<span class="lineNum"> 43 </span> : using namespace ept::debtags; +<span class="lineNum"> 44 </span> : +<span class="lineNum"> 45 </span> : namespace ept { +<span class="lineNum"> 46 </span> : namespace textsearch { +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span> : size_t max_index = 0; +<span class="lineNum"> 49 </span> : +<span class="lineNum"> 50 </span><span class="lineCov"> 11 : TextSearch::TextSearch()</span> +<span class="lineNum"> 51 </span><span class="lineCov"> 11 : : m_timestamp(0), m_stem("en")</span> +<span class="lineNum"> 52 </span> : { +<span class="lineNum"> 53 </span><span class="lineCov"> 22 : m_timestamp = Path::indexTimestamp();</span> +<span class="lineNum"> 54 </span><span class="lineCov"> 11 : if (m_timestamp)</span> +<span class="lineNum"> 55 </span><span class="lineCov"> 9 : m_db.add_database(Xapian::Database(Path::index()));</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 11 : }</span> +<span class="lineNum"> 57 </span> : +<span class="lineNum"> 58 </span><span class="lineCov"> 7 : std::string TextSearch::toLower(const std::string& str)</span> +<span class="lineNum"> 59 </span> : { +<span class="lineNum"> 60 </span><span class="lineCov"> 7 : std::string res;</span> +<span class="lineNum"> 61 </span><span class="lineCov"> 7 : res.reserve(str.size());</span> +<span class="lineNum"> 62 </span><span class="lineCov"> 44 : for (std::string::const_iterator i = str.begin(); i != str.end(); ++i)</span> +<span class="lineNum"> 63 </span><span class="lineCov"> 37 : res += tolower(*i);</span> +<span class="lineNum"> 64 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 65 </span> : } +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span><span class="lineCov"> 3 : bool TextSearch::needsRebuild(apt::Apt& apt)</span> +<span class="lineNum"> 68 </span> : { +<span class="lineNum"> 69 </span><span class="lineCov"> 3 : return apt.timestamp() > m_timestamp;</span> +<span class="lineNum"> 70 </span> : } +<span class="lineNum"> 71 </span> : +<span class="lineNum"> 72 </span><span class="lineNoCov"> 0 : void TextSearch::normalize_and_add(Xapian::Document& doc, const std::string& term, int& pos) const</span> +<span class="lineNum"> 73 </span> : { +<span class="lineNum"> 74 </span><span class="lineNoCov"> 0 : string t = TextSearch::toLower(term);</span> +<span class="lineNum"> 75 </span><span class="lineNoCov"> 0 : string s = m_stem(t);</span> +<span class="lineNum"> 76 </span><span class="lineNoCov"> 0 : doc.add_term(t);</span> +<span class="lineNum"> 77 </span><span class="lineNoCov"> 0 : if (s != t)</span> +<span class="lineNum"> 78 </span><span class="lineNoCov"> 0 : doc.add_term(s);</span> +<span class="lineNum"> 79 </span><span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 80 </span> : +<span class="lineNum"> 81 </span><span class="lineCov"> 10 : bool TextSearch::rebuildIfNeeded(apt::Apt& apt, const std::vector<const TextSearch::ExtraIndexer*>& extraIndexers)</span> +<span class="lineNum"> 82 </span> : { +<span class="lineNum"> 83 </span> : // Check if a rebuild is needed, and keep a copy of the APT timestamp for +<span class="lineNum"> 84 </span> : // saving later +<span class="lineNum"> 85 </span><span class="lineCov"> 10 : time_t aptts = apt.timestamp();</span> +<span class="lineNum"> 86 </span><span class="lineCov"> 10 : if (aptts <= m_timestamp)</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 4 : return false;</span> +<span class="lineNum"> 88 </span> : +<span class="lineNum"> 89 </span> : // Reindex +<span class="lineNum"> 90 </span><span class="lineCov"> 6 : Xapian::WritableDatabase database(Xapian::Flint::open(Path::index(), Xapian::DB_CREATE_OR_OPEN));</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 6 : Xapian::TermGenerator termgen;</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 6 : termgen.set_stemmer(m_stem);</span> +<span class="lineNum"> 93 </span> : //database.begin_transaction(); +<span class="lineNum"> 94 </span><span class="lineCov"> 6 : PackageRecord rec;</span> +<span class="lineNum"> 95 </span><span class="lineCov"> 6 : size_t count = 0;</span> +<span class="lineNum"> 96 </span><span class="lineCov"> 2610 : for (Apt::record_iterator i = apt.recordBegin();</span> +<span class="lineNum"> 97 </span> : i != apt.recordEnd(); ++i, ++count) +<span class="lineNum"> 98 </span> : { +<span class="lineNum"> 99 </span> : // If we are testing, we can set a limit to how many packages we index, +<span class="lineNum"> 100 </span> : // to avoid it taking too much time +<span class="lineNum"> 101 </span><span class="lineCov"> 2604 : if (max_index != 0 && count > max_index)</span> +<span class="lineNum"> 102 </span><span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 103 </span> : +<span class="lineNum"> 104 </span><span class="lineCov"> 2604 : rec.scan(*i);</span> +<span class="lineNum"> 105 </span> : +<span class="lineNum"> 106 </span><span class="lineCov"> 2604 : Xapian::Document doc;</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 2604 : doc.set_data(rec.package());</span> +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span><span class="lineCov"> 2604 : string pkgid = "XP" + rec.package();</span> +<span class="lineNum"> 110 </span> : //std::cerr << "Add " << pkgid << ": " << idx << std::endl; +<span class="lineNum"> 111 </span><span class="lineCov"> 2604 : doc.add_term(pkgid);</span> +<span class="lineNum"> 112 </span> : +<span class="lineNum"> 113 </span> : // Index tags as well +<span class="lineNum"> 114 </span><span class="lineCov"> 2604 : set<string> tags = rec.tag();</span> +<span class="lineNum"> 115 </span><span class="lineCov"> 2604 : for (set<string>::const_iterator ti = tags.begin();</span> +<span class="lineNum"> 116 </span> : ti != tags.end(); ++ti) +<span class="lineNum"> 117 </span><span class="lineNoCov"> 0 : doc.add_term("XT"+*ti);</span> +<span class="lineNum"> 118 </span> : +<span class="lineNum"> 119 </span><span class="lineCov"> 2604 : termgen.set_document(doc);</span> +<span class="lineNum"> 120 </span><span class="lineCov"> 2604 : termgen.index_text_without_positions(rec.package());</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 5208 : termgen.index_text_without_positions(rec.description());</span> +<span class="lineNum"> 122 </span> : +<span class="lineNum"> 123 </span> : // Add the values +<span class="lineNum"> 124 </span><span class="lineCov"> 5208 : doc.add_value(VAL_APT_INSTALLED_SIZE, Xapian::sortable_serialise(rec.installedSize()));</span> +<span class="lineNum"> 125 </span><span class="lineCov"> 2604 : doc.add_value(VAL_APT_PACKAGE_SIZE, Xapian::sortable_serialise(rec.packageSize()));</span> +<span class="lineNum"> 126 </span> : +<span class="lineNum"> 127 </span><span class="lineCov"> 2604 : if (m_timestamp)</span> +<span class="lineNum"> 128 </span><span class="lineCov"> 2170 : database.replace_document(pkgid, doc);</span> +<span class="lineNum"> 129 </span> : else +<span class="lineNum"> 130 </span><span class="lineCov"> 434 : database.add_document(doc);</span> +<span class="lineNum"> 131 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 132 </span> : +<span class="lineNum"> 133 </span> : //database.commit_transaction(); +<span class="lineNum"> 134 </span> : +<span class="lineNum"> 135 </span><span class="lineCov"> 6 : if (!m_timestamp)</span> +<span class="lineNum"> 136 </span><span class="lineCov"> 1 : m_db.add_database(Xapian::Database(Path::index()));</span> +<span class="lineNum"> 137 </span> : else +<span class="lineNum"> 138 </span><span class="lineCov"> 5 : m_db.reopen();</span> +<span class="lineNum"> 139 </span> : +<span class="lineNum"> 140 </span><span class="lineCov"> 6 : m_timestamp = aptts;</span> +<span class="lineNum"> 141 </span> : +<span class="lineNum"> 142 </span><span class="lineCov"> 6 : Path::setTimestamp(aptts);</span> +<span class="lineNum"> 143 </span> : +<span class="lineNum"> 144 </span><span class="lineCov"> 6 : return true;</span> +<span class="lineNum"> 145 </span> : } +<span class="lineNum"> 146 </span> : +<span class="lineNum"> 147 </span><span class="lineCov"> 2 : Xapian::Query TextSearch::makeORQuery(const std::string& keywords) const</span> +<span class="lineNum"> 148 </span> : { +<span class="lineNum"> 149 </span><span class="lineCov"> 2 : wibble::Tokenizer tok(keywords, "[A-Za-z0-9_-]+", REG_EXTENDED);</span> +<span class="lineNum"> 150 </span><span class="lineCov"> 4 : return makeORQuery(tok.begin(), tok.end());</span> +<span class="lineNum"> 151 </span> : } +<span class="lineNum"> 152 </span> : +<span class="lineNum"> 153 </span><span class="lineCov"> 1 : Xapian::Query TextSearch::makePartialORQuery(const std::string& keywords) const</span> +<span class="lineNum"> 154 </span> : { +<span class="lineNum"> 155 </span><span class="lineCov"> 1 : wibble::Tokenizer tok(keywords, "[A-Za-z0-9_-]+", REG_EXTENDED);</span> +<span class="lineNum"> 156 </span><span class="lineCov"> 1 : vector<string> tokens;</span> +<span class="lineNum"> 157 </span> : // FIXME: make the Tokenizer iterators properly iterable +<span class="lineNum"> 158 </span><span class="lineCov"> 2 : for (wibble::Tokenizer::const_iterator i = tok.begin();</span> +<span class="lineNum"> 159 </span> : i != tok.end(); ++i) +<span class="lineNum"> 160 </span><span class="lineCov"> 1 : tokens.push_back(*i);</span> +<span class="lineNum"> 161 </span> : // Add all the terms starting with 'last' +<span class="lineNum"> 162 </span><span class="lineCov"> 1 : if (!tokens.empty())</span> +<span class="lineNum"> 163 </span> : { +<span class="lineNum"> 164 </span><span class="lineCov"> 1 : string& last = *tokens.rbegin();</span> +<span class="lineNum"> 165 </span><span class="lineCov"> 1 : if (last.size() == 1)</span> +<span class="lineNum"> 166 </span> : // Ignore one-letter partial terms: they make the query uselessly +<span class="lineNum"> 167 </span> : // large and slow, and it's worth just to wait for more characters +<span class="lineNum"> 168 </span> : // to come +<span class="lineNum"> 169 </span><span class="lineNoCov"> 0 : tokens.resize(tokens.size() - 1);</span> +<span class="lineNum"> 170 </span> : else +<span class="lineNum"> 171 </span><span class="lineCov"> 1 : copy(m_db.allterms_begin(last), m_db.allterms_end(last), back_inserter(tokens));</span> +<span class="lineNum"> 172 </span> : /* +<span class="lineNum"> 173 </span> : for (Xapian::TermIterator t = m_db.allterms_begin(last); +<span class="lineNum"> 174 </span> : t != m_db.allterms_end(last); ++t) +<span class="lineNum"> 175 </span> : tokens.push_back(*t); +<span class="lineNum"> 176 </span> : */ +<span class="lineNum"> 177 </span> : } +<span class="lineNum"> 178 </span><span class="lineCov"> 1 : return makeORQuery(tokens.begin(), tokens.end());</span> +<span class="lineNum"> 179 </span> : } +<span class="lineNum"> 180 </span> : +<span class="lineNum"> 181 </span><span class="lineCov"> 10 : Xapian::docid TextSearch::docidByName(const std::string& pkgname) const</span> +<span class="lineNum"> 182 </span> : { +<span class="lineNum"> 183 </span><span class="lineCov"> 10 : Xapian::PostingIterator i = m_db.postlist_begin("XP"+pkgname);</span> +<span class="lineNum"> 184 </span><span class="lineCov"> 10 : if (i == m_db.postlist_end("XP"+pkgname))</span> +<span class="lineNum"> 185 </span><span class="lineCov"> 5 : return 0;</span> +<span class="lineNum"> 186 </span> : else +<span class="lineNum"> 187 </span><span class="lineCov"> 5 : return *i;</span> +<span class="lineNum"> 188 </span> : } +<span class="lineNum"> 189 </span> : +<span class="lineNum"> 190 </span> : struct TagFilter : public Xapian::ExpandDecider +<span class="lineNum"> 191 </span><span class="lineCov"> 4 : {</span> +<span class="lineNum"> 192 </span><span class="lineNoCov"> 0 : virtual bool operator()(const std::string &term) const { return term[0] == 'T'; }</span> +<span class="lineNum"> 193 </span> : }; +<span class="lineNum"> 194 </span> : +<span class="lineNum"> 195 </span><span class="lineCov"> 2 : static TagFilter tagFilter;</span> +<span class="lineNum"> 196 </span> : +<span class="lineNum"> 197 </span><span class="lineNoCov"> 0 : vector<string> TextSearch::expand(Xapian::Enquire& enq) const</span> +<span class="lineNum"> 198 </span> : { +<span class="lineNum"> 199 </span><span class="lineNoCov"> 0 : Xapian::RSet rset;</span> +<span class="lineNum"> 200 </span> : // Get the top 5 results as 'good ones' to compute the search expansion +<span class="lineNum"> 201 </span><span class="lineNoCov"> 0 : Xapian::MSet mset = enq.get_mset(0, 5);</span> +<span class="lineNum"> 202 </span><span class="lineNoCov"> 0 : for (Xapian::MSet::iterator i = mset.begin(); i != mset.end(); ++i)</span> +<span class="lineNum"> 203 </span><span class="lineNoCov"> 0 : rset.add_document(i);</span> +<span class="lineNum"> 204 </span> : // Get the expanded set, only expanding the query with tag names +<span class="lineNum"> 205 </span><span class="lineNoCov"> 0 : Xapian::ESet eset = enq.get_eset(5, rset, &tagFilter);</span> +<span class="lineNum"> 206 </span><span class="lineNoCov"> 0 : vector<string> res;</span> +<span class="lineNum"> 207 </span><span class="lineNoCov"> 0 : for (Xapian::ESetIterator i = eset.begin(); i != eset.end(); ++i)</span> +<span class="lineNum"> 208 </span><span class="lineNoCov"> 0 : res.push_back(*i);</span> +<span class="lineNum"> 209 </span><span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 210 </span> : } +<span class="lineNum"> 211 </span> : +<span class="lineNum"> 212 </span><span class="lineNoCov"> 0 : Xapian::Query TextSearch::makeRelatedQuery(const std::string& pkgname) const</span> +<span class="lineNum"> 213 </span> : { +<span class="lineNum"> 214 </span><span class="lineNoCov"> 0 : Xapian::Enquire enquire(db());</span> +<span class="lineNum"> 215 </span> : +<span class="lineNum"> 216 </span> : // Retrieve the document for the given package +<span class="lineNum"> 217 </span><span class="lineNoCov"> 0 : enquire.set_query(Xapian::Query("XP"+pkgname));</span> +<span class="lineNum"> 218 </span><span class="lineNoCov"> 0 : Xapian::MSet matches = enquire.get_mset(0, 1);</span> +<span class="lineNum"> 219 </span><span class="lineNoCov"> 0 : Xapian::MSetIterator mi = matches.begin();</span> +<span class="lineNum"> 220 </span><span class="lineNoCov"> 0 : if (mi == matches.end()) return Xapian::Query();</span> +<span class="lineNum"> 221 </span><span class="lineNoCov"> 0 : Xapian::Document doc = mi.get_document();</span> +<span class="lineNum"> 222 </span> : +<span class="lineNum"> 223 </span> : // Return the query to get the list of similar documents +<span class="lineNum"> 224 </span><span class="lineNoCov"> 0 : return Xapian::Query(Xapian::Query::OP_OR, doc.termlist_begin(), doc.termlist_end());</span> +<span class="lineNum"> 225 </span> : } +<span class="lineNum"> 226 </span> : +<span class="lineNum"> 227 </span><span class="lineCov"> 4 : double TextSearch::getDoubleValue(const std::string& pkgname, Xapian::valueno val_id) const</span> +<span class="lineNum"> 228 </span> : { +<span class="lineNum"> 229 </span><span class="lineCov"> 4 : Xapian::docid id = docidByName(pkgname);</span> +<span class="lineNum"> 230 </span><span class="lineCov"> 4 : if (id == 0)</span> +<span class="lineNum"> 231 </span><span class="lineCov"> 2 : return 0.0;</span> +<span class="lineNum"> 232 </span><span class="lineCov"> 2 : Xapian::Document doc = db().get_document(id);</span> +<span class="lineNum"> 233 </span><span class="lineCov"> 2 : string val = doc.get_value(val_id);</span> +<span class="lineNum"> 234 </span><span class="lineCov"> 2 : if (val.empty())</span> +<span class="lineNum"> 235 </span><span class="lineNoCov"> 0 : return 0.0;</span> +<span class="lineNum"> 236 </span> : else +<span class="lineNum"> 237 </span><span class="lineCov"> 2 : return Xapian::sortable_unserialise(val);</span> +<span class="lineNum"> 238 </span> : } +<span class="lineNum"> 239 </span> : +<span class="lineNum"> 240 </span><span class="lineCov"> 4 : int TextSearch::getIntValue(const std::string& pkgname, Xapian::valueno val_id) const</span> +<span class="lineNum"> 241 </span> : { +<span class="lineNum"> 242 </span><span class="lineCov"> 4 : Xapian::docid id = docidByName(pkgname);</span> +<span class="lineNum"> 243 </span><span class="lineCov"> 4 : if (id == 0)</span> +<span class="lineNum"> 244 </span><span class="lineCov"> 2 : return 0;</span> +<span class="lineNum"> 245 </span><span class="lineCov"> 2 : Xapian::Document doc = db().get_document(id);</span> +<span class="lineNum"> 246 </span><span class="lineCov"> 2 : string val = doc.get_value(val_id);</span> +<span class="lineNum"> 247 </span><span class="lineCov"> 2 : if (val.empty())</span> +<span class="lineNum"> 248 </span><span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 249 </span> : else +<span class="lineNum"> 250 </span><span class="lineCov"> 2 : return (int)nearbyint(Xapian::sortable_unserialise(val));</span> +<span class="lineNum"> 251 </span> : } +<span class="lineNum"> 252 </span> : +<span class="lineNum"> 253 </span> : } +<span class="lineNum"> 254 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 255 </span> : +<span class="lineNum"> 256 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/textsearch/textsearch.h.gcov.html b/rep/ept/textsearch/textsearch.h.gcov.html new file mode 100644 index 0000000..d46dca8 --- /dev/null +++ b/rep/ept/textsearch/textsearch.h.gcov.html @@ -0,0 +1,286 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/textsearch/textsearch.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/textsearch</a> - textsearch.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">15</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">86.7 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">13</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : #ifndef EPT_TEXTSEARCH_TEXTSEARCH_H +<span class="lineNum"> 2 </span> : #define EPT_TEXTSEARCH_TEXTSEARCH_H +<span class="lineNum"> 3 </span> : +<span class="lineNum"> 4 </span> : /** @file +<span class="lineNum"> 5 </span> : * @author Enrico Zini <enrico@enricozini.org> +<span class="lineNum"> 6 </span> : * Fast full-text search +<span class="lineNum"> 7 </span> : */ +<span class="lineNum"> 8 </span> : +<span class="lineNum"> 9 </span> : /* +<span class="lineNum"> 10 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 13 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 14 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 15 </span> : * (at your option) any later version. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : * +<span class="lineNum"> 22 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 25 </span> : */ +<span class="lineNum"> 26 </span> : +<span class="lineNum"> 27 </span> : #include <xapian.h> +<span class="lineNum"> 28 </span> : #include <vector> +<span class="lineNum"> 29 </span> : #include <string> +<span class="lineNum"> 30 </span> : +<span class="lineNum"> 31 </span> : namespace ept { +<span class="lineNum"> 32 </span> : namespace apt { +<span class="lineNum"> 33 </span> : class Apt; +<span class="lineNum"> 34 </span> : class PackageRecord; +<span class="lineNum"> 35 </span> : } +<span class="lineNum"> 36 </span> : namespace debtags { +<span class="lineNum"> 37 </span> : class Debtags; +<span class="lineNum"> 38 </span> : } +<span class="lineNum"> 39 </span> : namespace textsearch { +<span class="lineNum"> 40 </span> : +<span class="lineNum"> 41 </span> : // Allocate value indexes for known values +<span class="lineNum"> 42 </span> : const Xapian::valueno VAL_APT_INSTALLED_SIZE = 1; +<span class="lineNum"> 43 </span> : const Xapian::valueno VAL_APT_PACKAGE_SIZE = 2; +<span class="lineNum"> 44 </span> : const Xapian::valueno VAL_POPCON = 10; +<span class="lineNum"> 45 </span> : const Xapian::valueno VAL_ITERATING_RATING = 20; +<span class="lineNum"> 46 </span> : const Xapian::valueno VAL_ITERATING_FUNCTIONALITY = 21; +<span class="lineNum"> 47 </span> : const Xapian::valueno VAL_ITERATING_USABILITY = 22; +<span class="lineNum"> 48 </span> : const Xapian::valueno VAL_ITERATING_SECURITY = 23; +<span class="lineNum"> 49 </span> : const Xapian::valueno VAL_ITERATING_PERFORMANCE = 24; +<span class="lineNum"> 50 </span> : const Xapian::valueno VAL_ITERATING_QUALITY = 25; +<span class="lineNum"> 51 </span> : const Xapian::valueno VAL_ITERATING_SUPPORT = 26; +<span class="lineNum"> 52 </span> : const Xapian::valueno VAL_ITERATING_ADOPTION = 27; +<span class="lineNum"> 53 </span> : // If you need to index a value and cannot edit this file, feel free to use any +<span class="lineNum"> 54 </span> : // value starting from 1000000 +<span class="lineNum"> 55 </span> : +<span class="lineNum"> 56 </span> : +<span class="lineNum"> 57 </span> : /* +<span class="lineNum"> 58 </span> : Fallback on apt scan searches when index is not present +<span class="lineNum"> 59 </span> : +<span class="lineNum"> 60 </span> : Explicitly decide at instantiation (or at any other time) if a rebuild should +<span class="lineNum"> 61 </span> : be performed. Just adding a 'rebuildIfNeeded' method would be enough. +<span class="lineNum"> 62 </span> : +<span class="lineNum"> 63 </span> : 17:14 #xapian < enrico> Hello. I'm finally in a position of writing a library to maintain +<span class="lineNum"> 64 </span> : a xapian index with Debian package descriptions in a Debian system +<span class="lineNum"> 65 </span> : 17:14 #xapian < enrico> I have a question, though +<span class="lineNum"> 66 </span> : 17:14 #xapian < enrico> The descriptions change regularly as people run 'apt-get update' +<span class="lineNum"> 67 </span> : 17:15 #xapian < enrico> I'd need to have a way to update the description index after +<span class="lineNum"> 68 </span> : apt-get update, without rebuilding it from scratch +<span class="lineNum"> 69 </span> : 17:15 #xapian < enrico> Is there some documentation on how to do that? I can't exactly +<span class="lineNum"> 70 </span> : tell Xapian "the new description for package foo is this" because +<span class="lineNum"> 71 </span> : I'd need the xapian id +<span class="lineNum"> 72 </span> : 19:11 #xapian < omega> you can add a unique term with a boolean prefix? +<span class="lineNum"> 73 </span> : 19:11 #xapian < omega> like Qpackage-name +<span class="lineNum"> 74 </span> : 19:11 #xapian < omega> then you search for it and replace_document +<span class="lineNum"> 75 </span> : 19:24 #xapian < richardb> Or indeed, you use the "replace_document()" form which takes a +<span class="lineNum"> 76 </span> : unique_id term. +<span class="lineNum"> 77 </span> : 19:25 #xapian < richardb> Xapian::docid replace_document(const std::string & +<span class="lineNum"> 78 </span> : unique_term, +<span class="lineNum"> 79 </span> : 19:25 #xapian < richardb> const Xapian::Document & +<span class="lineNum"> 80 </span> : document); +<span class="lineNum"> 81 </span> : 19:43 #xapian < enrico> unique term +<span class="lineNum"> 82 </span> : 19:43 #xapian < enrico> nice! +<span class="lineNum"> 83 </span> : 19:44 #xapian < enrico> can I use a non-alpha prefix, like :package-name ? +<span class="lineNum"> 84 </span> : 19:45 #xapian < enrico> or pkg:package-name +<span class="lineNum"> 85 </span> : 19:45 #xapian < enrico> I suppose I can +<span class="lineNum"> 86 </span> : */ +<span class="lineNum"> 87 </span> : +<span class="lineNum"> 88 </span> : /** +<span class="lineNum"> 89 </span> : * Maintains and accesses a Xapian index of package descriptions. +<span class="lineNum"> 90 </span> : * +<span class="lineNum"> 91 </span> : * Contrarily to Debtags and Popcon, TextSearch does not attempt to create the +<span class="lineNum"> 92 </span> : * index in the home directory if no system index is found and it is not +<span class="lineNum"> 93 </span> : * running as root: this is to avoid secretly building large indexes (>50Mb) +<span class="lineNum"> 94 </span> : * in the home directory of users. +<span class="lineNum"> 95 </span> : * +<span class="lineNum"> 96 </span> : * The idea then is to have root keep the index up to date, possibly running a +<span class="lineNum"> 97 </span> : * reindexing tool once a day, or after an apt-get update. +<span class="lineNum"> 98 </span> : * +<span class="lineNum"> 99 </span> : * This works because the full text search index is useful even if it is +<span class="lineNum"> 100 </span> : * slightly out of date. +<span class="lineNum"> 101 </span> : */ +<span class="lineNum"> 102 </span> : class TextSearch +<span class="lineNum"> 103 </span><span class="lineCov"> 11 : {</span> +<span class="lineNum"> 104 </span> : protected: +<span class="lineNum"> 105 </span> : time_t m_timestamp; +<span class="lineNum"> 106 </span> : Xapian::Database m_db; +<span class="lineNum"> 107 </span> : Xapian::Stem m_stem; +<span class="lineNum"> 108 </span> : +<span class="lineNum"> 109 </span> : /// Return a lowercased copy of the string +<span class="lineNum"> 110 </span> : static std::string toLower(const std::string& str); +<span class="lineNum"> 111 </span> : +<span class="lineNum"> 112 </span> : /** +<span class="lineNum"> 113 </span> : * Add normalised tokens computed from the string to the document doc. +<span class="lineNum"> 114 </span> : * +<span class="lineNum"> 115 </span> : * pos is used as a sequence generator for entering the token position in +<span class="lineNum"> 116 </span> : * the document. +<span class="lineNum"> 117 </span> : */ +<span class="lineNum"> 118 </span> : void normalize_and_add(Xapian::Document& doc, const std::string& term, int& pos) const; +<span class="lineNum"> 119 </span> : +<span class="lineNum"> 120 </span> : public: +<span class="lineNum"> 121 </span> : struct ExtraIndexer +<span class="lineNum"> 122 </span> : { +<span class="lineNum"> 123 </span><span class="lineNoCov"> 0 : virtual ~ExtraIndexer() {}</span> +<span class="lineNum"> 124 </span> : virtual void operator()(Xapian::Document& doc, const apt::PackageRecord& rec) const = 0; +<span class="lineNum"> 125 </span> : }; +<span class="lineNum"> 126 </span> : +<span class="lineNum"> 127 </span> : TextSearch(); +<span class="lineNum"> 128 </span> : +<span class="lineNum"> 129 </span> : /// Access the Xapian database +<span class="lineNum"> 130 </span><span class="lineCov"> 3 : Xapian::Database& db() { return m_db; }</span> +<span class="lineNum"> 131 </span> : +<span class="lineNum"> 132 </span> : /// Access the Xapian database +<span class="lineNum"> 133 </span><span class="lineCov"> 4 : const Xapian::Database& db() const { return m_db; }</span> +<span class="lineNum"> 134 </span> : +<span class="lineNum"> 135 </span> : /// Timestamp of when the Xapian database was last updated +<span class="lineNum"> 136 </span><span class="lineCov"> 3 : time_t timestamp() const { return m_timestamp; }</span> +<span class="lineNum"> 137 </span> : +<span class="lineNum"> 138 </span> : /// Returns true if the index has data +<span class="lineNum"> 139 </span><span class="lineCov"> 3 : bool hasData() const { return m_timestamp > 0; }</span> +<span class="lineNum"> 140 </span> : +<span class="lineNum"> 141 </span> : /// Returns true if the index is older than the Apt database information +<span class="lineNum"> 142 </span> : bool needsRebuild(apt::Apt& apt); +<span class="lineNum"> 143 </span> : +<span class="lineNum"> 144 </span> : /** +<span class="lineNum"> 145 </span> : * Rebuild the index if needed. +<span class="lineNum"> 146 </span> : * +<span class="lineNum"> 147 </span> : * Allow to specify functors that contribute to the indexing. +<span class="lineNum"> 148 </span> : * +<span class="lineNum"> 149 </span> : * @note This requires write access to the index directory. +<span class="lineNum"> 150 </span> : * @note This is not the main way to update the index: it is provided here +<span class="lineNum"> 151 </span> : * only as a way to build a draft index for the library tests +<span class="lineNum"> 152 </span> : */ +<span class="lineNum"> 153 </span> : bool rebuildIfNeeded( +<span class="lineNum"> 154 </span> : apt::Apt& apt, +<span class="lineNum"> 155 </span> : const std::vector<const ExtraIndexer*>& extraIndexers = std::vector<const ExtraIndexer*>()); +<span class="lineNum"> 156 </span> : +<span class="lineNum"> 157 </span> : /** +<span class="lineNum"> 158 </span> : * Retrieve a Xapian docid by package name +<span class="lineNum"> 159 </span> : */ +<span class="lineNum"> 160 </span> : Xapian::docid docidByName(const std::string& pkgname) const; +<span class="lineNum"> 161 </span> : +<span class="lineNum"> 162 </span> : /** +<span class="lineNum"> 163 </span> : * Tokenize the string and build an OR query with the resulting keywords +<span class="lineNum"> 164 </span> : */ +<span class="lineNum"> 165 </span> : Xapian::Query makeORQuery(const std::string& keywords) const; +<span class="lineNum"> 166 </span> : +<span class="lineNum"> 167 </span> : /** +<span class="lineNum"> 168 </span> : * Tokenize the string and build an OR query with the resulting keywords. +<span class="lineNum"> 169 </span> : * +<span class="lineNum"> 170 </span> : * The last token in keywords is considered to be typed only partially, to +<span class="lineNum"> 171 </span> : * implement proper search-as-you-type. +<span class="lineNum"> 172 </span> : */ +<span class="lineNum"> 173 </span> : Xapian::Query makePartialORQuery(const std::string& keywords) const; +<span class="lineNum"> 174 </span> : +<span class="lineNum"> 175 </span> : /** +<span class="lineNum"> 176 </span> : * Build a query with the given keywords, specified as iterators of strings +<span class="lineNum"> 177 </span> : */ +<span class="lineNum"> 178 </span> : template<typename ITER> +<span class="lineNum"> 179 </span><span class="lineCov"> 3 : Xapian::Query makeORQuery(const ITER& begin, const ITER& end) const</span> +<span class="lineNum"> 180 </span> : { +<span class="lineNum"> 181 </span><span class="lineCov"> 3 : std::vector<std::string> terms;</span> +<span class="lineNum"> 182 </span> : // Insert both the lowercased and the stemmed lowercased query terms +<span class="lineNum"> 183 </span><span class="lineCov"> 10 : for (ITER i = begin; i != end; ++i)</span> +<span class="lineNum"> 184 </span> : { +<span class="lineNum"> 185 </span><span class="lineCov"> 7 : std::string t = toLower(*i);</span> +<span class="lineNum"> 186 </span><span class="lineCov"> 7 : std::string s = m_stem(t);</span> +<span class="lineNum"> 187 </span><span class="lineCov"> 7 : terms.push_back(t);</span> +<span class="lineNum"> 188 </span><span class="lineCov"> 7 : if (s != t)</span> +<span class="lineNum"> 189 </span><span class="lineNoCov"> 0 : terms.push_back("Z" + s);</span> +<span class="lineNum"> 190 </span> : } +<span class="lineNum"> 191 </span><span class="lineCov"> 3 : return Xapian::Query(Xapian::Query::OP_OR, terms.begin(), terms.end());</span> +<span class="lineNum"> 192 </span> : } +<span class="lineNum"> 193 </span> : +<span class="lineNum"> 194 </span> : /// Return a list of tag-based terms that can be used to expand an OR query +<span class="lineNum"> 195 </span> : std::vector<std::string> expand(Xapian::Enquire& enq) const; +<span class="lineNum"> 196 </span> : +<span class="lineNum"> 197 </span> : // std::vector<std::string> similar(const std::string& pkg); +<span class="lineNum"> 198 </span> : +<span class="lineNum"> 199 </span> : /** +<span class="lineNum"> 200 </span> : * Create a query to look for packages similar to the given one +<span class="lineNum"> 201 </span> : */ +<span class="lineNum"> 202 </span> : Xapian::Query makeRelatedQuery(const std::string& pkgname) const; +<span class="lineNum"> 203 </span> : +<span class="lineNum"> 204 </span> : /** +<span class="lineNum"> 205 </span> : * Get the integer value for +<span class="lineNum"> 206 </span> : */ +<span class="lineNum"> 207 </span> : double getDoubleValue(const std::string& pkgname, Xapian::valueno val_id) const; +<span class="lineNum"> 208 </span> : +<span class="lineNum"> 209 </span> : /** +<span class="lineNum"> 210 </span> : * Get the integer value for +<span class="lineNum"> 211 </span> : */ +<span class="lineNum"> 212 </span> : int getIntValue(const std::string& pkgname, Xapian::valueno val_id) const; +<span class="lineNum"> 213 </span> : }; +<span class="lineNum"> 214 </span> : +<span class="lineNum"> 215 </span> : } +<span class="lineNum"> 216 </span> : } +<span class="lineNum"> 217 </span> : +<span class="lineNum"> 218 </span> : // vim:set ts=4 sw=4: +<span class="lineNum"> 219 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/textsearch/textsearch.test.h.gcov.html b/rep/ept/textsearch/textsearch.test.h.gcov.html new file mode 100644 index 0000000..230103d --- /dev/null +++ b/rep/ept/textsearch/textsearch.test.h.gcov.html @@ -0,0 +1,233 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/textsearch/textsearch.test.h</title> + <link rel="stylesheet" type="text/css" href="../../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../../index.html">directory</a> - <a href="index.html">ept/textsearch</a> - textsearch.test.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">74</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">95.9 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">71</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*- +<span class="lineNum"> 2 </span> : /* +<span class="lineNum"> 3 </span> : * popcon test +<span class="lineNum"> 4 </span> : * +<span class="lineNum"> 5 </span> : * Copyright (C) 2007 Enrico Zini <enrico@debian.org> +<span class="lineNum"> 6 </span> : * +<span class="lineNum"> 7 </span> : * This program is free software; you can redistribute it and/or modify +<span class="lineNum"> 8 </span> : * it under the terms of the GNU General Public License as published by +<span class="lineNum"> 9 </span> : * the Free Software Foundation; either version 2 of the License, or +<span class="lineNum"> 10 </span> : * (at your option) any later version. +<span class="lineNum"> 11 </span> : * +<span class="lineNum"> 12 </span> : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 13 </span> : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 14 </span> : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 15 </span> : * GNU General Public License for more details. +<span class="lineNum"> 16 </span> : * +<span class="lineNum"> 17 </span> : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 18 </span> : * along with this program; if not, write to the Free Software +<span class="lineNum"> 19 </span> : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +<span class="lineNum"> 20 </span> : */ +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span> : #include <ept/test.h> +<span class="lineNum"> 23 </span> : #include <ept/textsearch/textsearch.h> +<span class="lineNum"> 24 </span> : #include <ept/textsearch/maint/path.h> +<span class="lineNum"> 25 </span> : #include <ept/apt/apt.h> +<span class="lineNum"> 26 </span> : #include <wibble/sys/fs.h> +<span class="lineNum"> 27 </span> : #include <set> +<span class="lineNum"> 28 </span> : +<span class="lineNum"> 29 </span> : namespace ept { +<span class="lineNum"> 30 </span> : namespace textsearch { +<span class="lineNum"> 31 </span> : extern size_t max_index; +<span class="lineNum"> 32 </span> : } +<span class="lineNum"> 33 </span> : } +<span class="lineNum"> 34 </span> : +<span class="lineNum"> 35 </span> : using namespace std; +<span class="lineNum"> 36 </span> : using namespace ept; +<span class="lineNum"> 37 </span> : using namespace ept::textsearch; +<span class="lineNum"> 38 </span> : using namespace ept::apt; +<span class="lineNum"> 39 </span> : +<span class="lineNum"> 40 </span> : struct DirMaker +<span class="lineNum"> 41 </span> : { +<span class="lineNum"> 42 </span><span class="lineCov"> 6 : DirMaker(const std::string& name)</span> +<span class="lineNum"> 43 </span> : { +<span class="lineNum"> 44 </span><span class="lineCov"> 6 : wibble::sys::fs::mkdirIfMissing(name, 0755);</span> +<span class="lineNum"> 45 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 46 </span> : }; +<span class="lineNum"> 47 </span> : +<span class="lineNum"> 48 </span> : struct TestTextsearch : AptTestEnvironment +<span class="lineNum"> 49 </span><span class="lineCov"> 6 : {</span> +<span class="lineNum"> 50 </span> : DirMaker md; +<span class="lineNum"> 51 </span> : Path::OverrideIndexDir oid; +<span class="lineNum"> 52 </span> : Apt apt; +<span class="lineNum"> 53 </span> : TextSearch textsearch; +<span class="lineNum"> 54 </span> : +<span class="lineNum"> 55 </span><span class="lineCov"> 6 : TestTextsearch()</span> +<span class="lineNum"> 56 </span><span class="lineCov"> 6 : : md( TEST_ENV_DIR "xapian"), oid( TEST_ENV_DIR "xapian")</span> +<span class="lineNum"> 57 </span> : { +<span class="lineNum"> 58 </span> : try { +<span class="lineNum"> 59 </span><span class="lineCov"> 6 : ept::textsearch::max_index = 1000;</span> +<span class="lineNum"> 60 </span><span class="lineCov"> 6 : textsearch.rebuildIfNeeded(apt);</span> +<span class="lineNum"> 61 </span><span class="lineNoCov"> 0 : } catch (Xapian::Error& e) {</span> +<span class="lineNum"> 62 </span><span class="lineNoCov"> 0 : cerr << e.get_type() << " " << e.get_msg() << " " << e.get_context() << endl;</span> +<span class="lineNum"> 63 </span><span class="lineNoCov"> 0 : throw;</span> +<span class="lineNum"> 64 </span> : } +<span class="lineNum"> 65 </span><span class="lineCov"> 6 : }</span> +<span class="lineNum"> 66 </span> : +<span class="lineNum"> 67 </span> : // Access an empty index +<span class="lineNum"> 68 </span><span class="lineCov"> 1 : Test empty()</span> +<span class="lineNum"> 69 </span> : { +<span class="lineNum"> 70 </span><span class="lineCov"> 1 : Path::OverrideIndexDir oid("./empty");</span> +<span class="lineNum"> 71 </span><span class="lineCov"> 1 : TextSearch empty;</span> +<span class="lineNum"> 72 </span><span class="lineCov"> 1 : assert_eq(empty.timestamp(), 0);</span> +<span class="lineNum"> 73 </span><span class="lineCov"> 2 : assert(!empty.hasData());</span> +<span class="lineNum"> 74 </span><span class="lineCov"> 2 : assert(empty.needsRebuild(apt));</span> +<span class="lineNum"> 75 </span> : /* +<span class="lineNum"> 76 </span> : Xapian::Enquire enq(empty.db()); +<span class="lineNum"> 77 </span> : empty.search(enq, "apt"); +<span class="lineNum"> 78 </span> : Xapian::MSet matches = enq.get_mset(0, 100); +<span class="lineNum"> 79 </span> : assert_eq(matches.size(), 0u); +<span class="lineNum"> 80 </span> : */ +<span class="lineNum"> 81 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 82 </span> : +<span class="lineNum"> 83 </span> : // Very basic access +<span class="lineNum"> 84 </span><span class="lineCov"> 1 : Test basicAccess()</span> +<span class="lineNum"> 85 </span> : { +<span class="lineNum"> 86 </span><span class="lineCov"> 1 : assert(textsearch.hasData());</span> +<span class="lineNum"> 87 </span><span class="lineCov"> 2 : assert(textsearch.timestamp() > 0);</span> +<span class="lineNum"> 88 </span><span class="lineCov"> 2 : assert(!textsearch.needsRebuild(apt));</span> +<span class="lineNum"> 89 </span> : +<span class="lineNum"> 90 </span><span class="lineCov"> 1 : Xapian::Enquire enq(textsearch.db());</span> +<span class="lineNum"> 91 </span><span class="lineCov"> 2 : enq.set_query(textsearch.makeORQuery("sgml"));</span> +<span class="lineNum"> 92 </span><span class="lineCov"> 1 : Xapian::MSet matches = enq.get_mset(0, 100);</span> +<span class="lineNum"> 93 </span><span class="lineCov"> 1 : assert(matches.size() > 0);</span> +<span class="lineNum"> 94 </span> : +<span class="lineNum"> 95 </span> : // See if the apt package is among the results +<span class="lineNum"> 96 </span><span class="lineCov"> 1 : set<string> results;</span> +<span class="lineNum"> 97 </span><span class="lineCov"> 10 : for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i)</span> +<span class="lineNum"> 98 </span><span class="lineCov"> 10 : results.insert(i.get_document().get_data());</span> +<span class="lineNum"> 99 </span><span class="lineCov"> 1 : assert(results.find("sp") != results.end());</span> +<span class="lineNum"> 100 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 101 </span> : +<span class="lineNum"> 102 </span> : // Alternate access using intermediate Xapian::Query objects +<span class="lineNum"> 103 </span><span class="lineCov"> 1 : Test queryAccess()</span> +<span class="lineNum"> 104 </span> : { +<span class="lineNum"> 105 </span><span class="lineCov"> 1 : Xapian::Enquire enq(textsearch.db());</span> +<span class="lineNum"> 106 </span><span class="lineCov"> 1 : enq.set_query(textsearch.makeORQuery("sgml"));</span> +<span class="lineNum"> 107 </span><span class="lineCov"> 1 : Xapian::MSet matches = enq.get_mset(0, 100);</span> +<span class="lineNum"> 108 </span><span class="lineCov"> 1 : assert(matches.size() > 0);</span> +<span class="lineNum"> 109 </span> : +<span class="lineNum"> 110 </span> : // See if the apt package is among the results +<span class="lineNum"> 111 </span><span class="lineCov"> 1 : set<string> results;</span> +<span class="lineNum"> 112 </span><span class="lineCov"> 10 : for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i)</span> +<span class="lineNum"> 113 </span><span class="lineCov"> 10 : results.insert(i.get_document().get_data());</span> +<span class="lineNum"> 114 </span><span class="lineCov"> 1 : assert(results.find("sp") != results.end());</span> +<span class="lineNum"> 115 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 116 </span> : +<span class="lineNum"> 117 </span> : // Try makePartialORQuery +<span class="lineNum"> 118 </span><span class="lineCov"> 1 : Test partialOrQuery()</span> +<span class="lineNum"> 119 </span> : { +<span class="lineNum"> 120 </span><span class="lineCov"> 1 : Xapian::Enquire enq(textsearch.db());</span> +<span class="lineNum"> 121 </span><span class="lineCov"> 1 : enq.set_query(textsearch.makePartialORQuery("sgml"));</span> +<span class="lineNum"> 122 </span><span class="lineCov"> 1 : Xapian::MSet matches = enq.get_mset(0, 100);</span> +<span class="lineNum"> 123 </span><span class="lineCov"> 1 : assert(matches.size() > 0);</span> +<span class="lineNum"> 124 </span> : +<span class="lineNum"> 125 </span> : // See if the apt package is among the results +<span class="lineNum"> 126 </span><span class="lineCov"> 1 : set<string> results;</span> +<span class="lineNum"> 127 </span><span class="lineCov"> 10 : for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i)</span> +<span class="lineNum"> 128 </span><span class="lineCov"> 10 : results.insert(i.get_document().get_data());</span> +<span class="lineNum"> 129 </span><span class="lineCov"> 1 : assert(results.find("sp") != results.end());</span> +<span class="lineNum"> 130 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 131 </span> : +<span class="lineNum"> 132 </span> : // Try docidByName +<span class="lineNum"> 133 </span><span class="lineCov"> 1 : Test docidByName()</span> +<span class="lineNum"> 134 </span> : { +<span class="lineNum"> 135 </span><span class="lineCov"> 1 : assert(textsearch.docidByName("sp") != 0);</span> +<span class="lineNum"> 136 </span><span class="lineCov"> 2 : assert_eq(textsearch.docidByName("thereisnopackagewiththisname"), 0u);</span> +<span class="lineNum"> 137 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 138 </span> : +<span class="lineNum"> 139 </span> : // Access values +<span class="lineNum"> 140 </span><span class="lineCov"> 1 : Test values()</span> +<span class="lineNum"> 141 </span> : { +<span class="lineNum"> 142 </span><span class="lineCov"> 1 : assert(textsearch.hasData());</span> +<span class="lineNum"> 143 </span><span class="lineCov"> 2 : assert(textsearch.timestamp() > 0);</span> +<span class="lineNum"> 144 </span><span class="lineCov"> 2 : assert(!textsearch.needsRebuild(apt));</span> +<span class="lineNum"> 145 </span> : +<span class="lineNum"> 146 </span> : double dval; +<span class="lineNum"> 147 </span><span class="lineCov"> 2 : dval = textsearch.getDoubleValue("autoconf", VAL_APT_INSTALLED_SIZE);</span> +<span class="lineNum"> 148 </span><span class="lineCov"> 2 : assert(dval == 2408);</span> +<span class="lineNum"> 149 </span><span class="lineCov"> 2 : dval = textsearch.getDoubleValue("autoconf", VAL_APT_PACKAGE_SIZE);</span> +<span class="lineNum"> 150 </span><span class="lineCov"> 2 : assert(dval == 741486);</span> +<span class="lineNum"> 151 </span><span class="lineCov"> 2 : assert_eq(textsearch.getDoubleValue("thereisnopackagewiththisname", VAL_APT_INSTALLED_SIZE), 0.0);</span> +<span class="lineNum"> 152 </span><span class="lineCov"> 2 : assert_eq(textsearch.getDoubleValue("thereisnopackagewiththisname", VAL_APT_PACKAGE_SIZE), 0.0);</span> +<span class="lineNum"> 153 </span> : +<span class="lineNum"> 154 </span> : int val; +<span class="lineNum"> 155 </span><span class="lineCov"> 2 : val = textsearch.getIntValue("autoconf", VAL_APT_INSTALLED_SIZE);</span> +<span class="lineNum"> 156 </span><span class="lineCov"> 2 : assert(val == 2408);</span> +<span class="lineNum"> 157 </span><span class="lineCov"> 2 : val = textsearch.getIntValue("autoconf", VAL_APT_PACKAGE_SIZE);</span> +<span class="lineNum"> 158 </span><span class="lineCov"> 2 : assert(val == 741486);</span> +<span class="lineNum"> 159 </span><span class="lineCov"> 1 : cout << val;</span> +<span class="lineNum"> 160 </span><span class="lineCov"> 2 : assert_eq(textsearch.getIntValue("thereisnopackagewiththisname", VAL_APT_INSTALLED_SIZE), 0);</span> +<span class="lineNum"> 161 </span><span class="lineCov"> 2 : assert_eq(textsearch.getIntValue("thereisnopackagewiththisname", VAL_APT_PACKAGE_SIZE), 0);</span> +<span class="lineNum"> 162 </span><span class="lineCov"> 1 : }</span> +<span class="lineNum"> 163 </span> : +<span class="lineNum"> 164 </span> : }; +<span class="lineNum"> 165 </span> : +<span class="lineNum"> 166 </span> : // vim:set ts=4 sw=4: +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/rep/ept/token.h.gcov.html b/rep/ept/token.h.gcov.html new file mode 100644 index 0000000..8a750ee --- /dev/null +++ b/rep/ept/token.h.gcov.html @@ -0,0 +1,122 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>LCOV - lcov.info - ept/token.h</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LTP GCOV extension - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td class="headerItem" width="20%">Current view:</td> + <td class="headerValue" width="80%" colspan=4><a href="../index.html">directory</a> - <a href="index.html">ept</a> - token.h</td> + </tr> + <tr> + <td class="headerItem" width="20%">Test:</td> + <td class="headerValue" width="80%" colspan=4>lcov.info</td> + </tr> + <tr> + <td class="headerItem" width="20%">Date:</td> + <td class="headerValue" width="20%">2008-08-14</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Instrumented lines:</td> + <td class="headerValue" width="20%">16</td> + </tr> + <tr> + <td class="headerItem" width="20%">Code covered:</td> + <td class="headerValue" width="20%">81.2 %</td> + <td width="20%"></td> + <td class="headerItem" width="20%">Executed lines:</td> + <td class="headerValue" width="20%">13</td> + </tr> + </table> + </td> + </tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td><pre class="source"> +<span class="lineNum"> 1 </span> : // -*- C++ -*- +<span class="lineNum"> 2 </span> : #include <wibble/mixin.h> +<span class="lineNum"> 3 </span> : #include <string> +<span class="lineNum"> 4 </span> : +<span class="lineNum"> 5 </span> : #ifndef EPT_TOKEN_H +<span class="lineNum"> 6 </span> : #define EPT_TOKEN_H +<span class="lineNum"> 7 </span> : +<span class="lineNum"> 8 </span> : namespace ept { +<span class="lineNum"> 9 </span> : +<span class="lineNum"> 10 </span><span class="lineCov"> 9994 : struct Token : wibble::mixin::Comparable< Token > {</span> +<span class="lineNum"> 11 </span> : std::string _id; // formatted as package[_version] +<span class="lineNum"> 12 </span><span class="lineNoCov"> 0 : std::string id() const { return _id; }</span> +<span class="lineNum"> 13 </span> : +<span class="lineNum"> 14 </span><span class="lineCov"> 9755 : Token() : _id( "" ) {}</span> +<span class="lineNum"> 15 </span><span class="lineCov"> 8 : Token( std::string s ) : _id( s ) {}</span> +<span class="lineNum"> 16 </span> : +<span class="lineNum"> 17 </span><span class="lineCov"> 1831 : std::string version() const {</span> +<span class="lineNum"> 18 </span> : return _id.find( '_' ) == std::string::npos ? "" : +<span class="lineNum"> 19 </span><span class="lineCov"> 1831 : std::string( _id, _id.find( '_' ) + 1, _id.size() );</span> +<span class="lineNum"> 20 </span> : } +<span class="lineNum"> 21 </span> : +<span class="lineNum"> 22 </span><span class="lineCov"> 7883 : std::string package() const {</span> +<span class="lineNum"> 23 </span> : return std::string( _id, 0, +<span class="lineNum"> 24 </span> : _id.find( '_' ) == std::string::npos ? +<span class="lineNum"> 25 </span><span class="lineCov"> 7883 : _id.size() : _id.find( '_' ) );</span> +<span class="lineNum"> 26 </span> : } +<span class="lineNum"> 27 </span> : +<span class="lineNum"> 28 </span> : bool isDesktop() const { +<span class="lineNum"> 29 </span> : return std::string( _id, 0, 8 ) == "desktop:"; +<span class="lineNum"> 30 </span> : } +<span class="lineNum"> 31 </span> : +<span class="lineNum"> 32 </span> : std::string desktop() const { +<span class="lineNum"> 33 </span> : return isDesktop() ? std::string( _id, 8, _id.size() ) : ""; +<span class="lineNum"> 34 </span> : } +<span class="lineNum"> 35 </span> : +<span class="lineNum"> 36 </span><span class="lineCov"> 17 : bool hasVersion() const {</span> +<span class="lineNum"> 37 </span><span class="lineCov"> 17 : return version() != "";</span> +<span class="lineNum"> 38 </span> : } +<span class="lineNum"> 39 </span> : +<span class="lineNum"> 40 </span><span class="lineCov"> 1 : bool valid() const {</span> +<span class="lineNum"> 41 </span><span class="lineCov"> 1 : return _id != "";</span> +<span class="lineNum"> 42 </span> : } +<span class="lineNum"> 43 </span> : +<span class="lineNum"> 44 </span><span class="lineCov"> 58 : bool operator<=( const Token &o ) const {</span> +<span class="lineNum"> 45 </span><span class="lineCov"> 58 : return _id <= o._id;</span> +<span class="lineNum"> 46 </span> : } +<span class="lineNum"> 47 </span> : }; +<span class="lineNum"> 48 </span> : +<span class="lineNum"> 49 </span> : } +<span class="lineNum"> 50 </span> : +<span class="lineNum"> 51 </span><span class="lineNoCov"> 0 : inline std::ostream &operator<<( std::ostream &o, const ept::Token &t ) {</span> +<span class="lineNum"> 52 </span><span class="lineNoCov"> 0 : return o << t.id();</span> +<span class="lineNum"> 53 </span> : } +<span class="lineNum"> 54 </span> : +<span class="lineNum"> 55 </span> : #endif +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr> + </table> + <br> + +</body> +</html> |
