[Debtags-commits] [svn] r1919 - in daemon: . src
Enrico Zini
enrico at costa.debian.org
Mon Sep 18 12:55:16 UTC 2006
Author: enrico
Date: Mon Sep 18 12:55:15 2006
New Revision: 1919
Modified:
daemon/ (props changed)
daemon/src/debtagsd.cpp
Log:
r3353 at viaza: enrico | 2006-09-18 14:23:50 +0200
Output package data as well as package names
Modified: daemon/src/debtagsd.cpp
==============================================================================
--- daemon/src/debtagsd.cpp (original)
+++ daemon/src/debtagsd.cpp Mon Sep 18 12:55:15 2006
@@ -11,6 +11,7 @@
#include <tagcoll/coll/fast.h>
#include <tagcoll/input/stdio.h>
+#include <tagcoll/input/zlib.h>
#include <tagcoll/TextFormat.h>
#include <iostream>
@@ -21,6 +22,7 @@
#include "lib/SignalCatcher.h"
#include "lib/FullText.h"
+#include "lib/debdbparser.h"
#if 0
@@ -231,6 +233,39 @@
return res;
}
+class ShortDescs : public std::map<std::string, std::string>
+{
+public:
+ ShortDescs()
+ {
+ tagcoll::input::Zlib in("packages.gz");
+ DebDBParser parser(in);
+ DebDBParser::Record rec;
+ while (parser.nextRecord(rec))
+ {
+ size_t sd = rec["Description"].find("\n");
+ if (sd == string::npos)
+ insert(make_pair(rec["Package"], rec["Description"]));
+ else
+ insert(make_pair(rec["Package"], rec["Description"].substr(0, sd)));
+ }
+ }
+
+ std::string get(const std::string& pkg) const
+ {
+ const_iterator i = find(pkg);
+ if (i == end())
+ return std::string();
+ else
+ return i->second;
+ }
+
+ std::string operator()(const std::string& pkg) const
+ {
+ return get(pkg);
+ }
+};
+
class Debtagsd : public wibble::sys::ChildProcess
{
protected:
@@ -245,8 +280,26 @@
tagcoll::coll::Fast<std::string, std::string> coll;
+ ShortDescs desc;
FullTextSearch fts;
+ void outputPackage(const std::string& pkg, Connection& conn)
+ {
+ using namespace std;
+ conn.write(pkg);
+ conn.write(" ");
+ set<string> tags(coll.getTagsOfItem(pkg));
+ for (set<string>::const_iterator i = tags.begin(); i != tags.end(); ++i)
+ {
+ if (i != tags.begin())
+ conn.write(",");
+ conn.write(*i);
+ }
+ conn.write(" ");
+ conn.write(desc(pkg));
+ conn.write("\n");
+ }
+
void handleConnection(Connection& conn)
{
using namespace std;
@@ -269,17 +322,14 @@
set<string> pkgs = coll.getItemsHavingTags(tags);
for (set<string>::const_iterator i = pkgs.begin();
i != pkgs.end(); ++i)
- {
- //cerr << "Print " << *i << endl;
- conn.write(*i + "\n");
- }
+ outputPackage(*i, conn);
}
else if (cmd == "FTS")
{
vector<string> terms = parseKeys(line);
set<string> res = fts.search(terms);
for (set<string>::const_iterator i = res.begin(); i != res.end(); ++i)
- conn.write(*i + "\n");
+ outputPackage(*i, conn);
}
else
conn.write("Lippocippo\n");
More information about the Debtags-commits
mailing list