[PackageKit-commit] packagekit: Branch 'master' - 9 commits
Richard Hughes
hughsient at kemper.freedesktop.org
Fri Feb 13 01:07:27 PST 2009
backends/conary/Cache.py | 346 -----------------
backends/conary/Makefile.am | 6
backends/conary/XMLCache.py | 286 ++++++++++++++
backends/conary/conaryBackend.py | 438 ++++++++++------------
backends/conary/conaryEnums.py | 68 +++
backends/conary/conaryFilter.py | 23 -
backends/conary/conarypk.py | 118 +++++
backends/conary/pk-backend-conary.c | 30 +
configure.ac | 12
po/sv.po | 716 ++++++++++--------------------------
10 files changed, 927 insertions(+), 1116 deletions(-)
New commits:
commit d2f3e7ac8076948bf2080b6c7e586bdd5032ec12
Author: zodman <zodman at cosmogirl.(none)>
Date: Thu Feb 12 15:16:24 2009 -0600
add ignore categorie for add More classify critteria
diff --git a/backends/conary/conaryEnums.py b/backends/conary/conaryEnums.py
index fc55fa3..6584ddd 100644
--- a/backends/conary/conaryEnums.py
+++ b/backends/conary/conaryEnums.py
@@ -3,11 +3,11 @@ from packagekit.enums import GROUP_ACCESSIBILITY, GROUP_ACCESSORIES, GROUP_EDUCA
"""
Classify the Categories and help me to make a backend
- from XMLCache import XMLCache
- print "categoryMap = {",
- for i in XMLCache()._getAllCategories():
- print "'%s':" % i
- print "}",
+# from XMLCache import XMLCache
+# print "categoryMap = {",
+# for i in XMLCache()._getAllCategories():
+# print "'%s':" % i
+# print "}",
"""
@@ -33,9 +33,9 @@ categoryMap = {
'News': GROUP_INTERNET,
'X-SuSE-Core-Office': GROUP_SYSTEM,
'X-Red-Hat-Base': GROUP_SYSTEM,
-'GNOME': GROUP_OTHER,
+#'GNOME': GROUP_OTHER,
'Settings': GROUP_SYSTEM,
-'GTK': GROUP_OTHER,
+#'GTK': GROUP_OTHER,
'System': GROUP_SYSTEM,
'Graphics': GROUP_GRAPHICS,
'X-Ximian-Main': GROUP_OFFICE,
commit 8ff210b4df5ef2a64a3f479aa3ffe21ffaf6d9d5
Author: zodman <zodman at cosmogirl.(none)>
Date: Thu Feb 12 15:10:50 2009 -0600
implement the conaryEnums for classify category in groups
fix the backend for search groups
diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
index 7c712e9..4c95908 100644
--- a/backends/conary/XMLCache.py
+++ b/backends/conary/XMLCache.py
@@ -3,8 +3,37 @@ import sys
from xml.dom.minidom import parse
import urllib as url
+
+from conary.lib import sha1helper
+from conary.lib import util
+
+from packagekit.backend import PackageKitBaseBackend
+from packagekit.enums import ERROR_NO_CACHE
+
+
from pkConaryLog import log
from conarypk import ConaryPk
+from conaryEnums import groupMap
+
+def getGroup( categorieList):
+ where = {}
+ for cat in categorieList:
+ for group,categories in groupMap.items():
+ if cat in categories:
+ if where.has_key(group):
+ where[group] = where[group] +1
+ else:
+ where[group] = 1
+
+ tmp = 0
+ t_key = ""
+ for key, value in where.items():
+ if value > tmp:
+ t_key = key
+ tmp = value
+ return t_key
+
+
class XMLRepo:
xml_path = ""
repository = ""
@@ -83,11 +112,17 @@ class XMLRepo:
for package in packages.childNodes:
pkg = self._generatePackage(package)
pkg["label"] = self.label
+ """
if not pkg.has_key("category"):
continue
for j in pkg["category"]:
if name.lower() in j.lower():
results_name.append(pkg['name'])
+ """
+ if pkg.has_key("category"):
+ group = getGroup(pkg["category"])
+ if name.lower() == group:
+ results_name.append(pkg["name"])
return [ self._getPackage(i) for i in set(results_name) ]
def _searchDetailsPackage(self, name):
@@ -147,7 +182,6 @@ class XMLCache:
self.repos.append(XMLRepo( xml_file + ".xml", self.xml_path ))
def _getJobCachePath(self, applyList):
- from conary.lib import sha1helper
applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
return self.jobPath + '/' + sha1helper.sha1ToString(sha1helper.sha1String(applyStr))
@@ -159,7 +193,6 @@ class XMLCache:
def cacheUpdateJob(self, applyList, updJob):
jobPath = self._getJobCachePath(applyList)
if os.path.exists(jobPath):
- from conary.lib import util
util.rmtree(jobPath)
os.mkdir(jobPath)
updJob.freeze(jobPath)
@@ -199,13 +232,14 @@ class XMLCache:
try:
wget = url.urlopen( wwwfile )
except:
- from packagekit.backend import PackageKitBaseBackend
- from packagekit.enums import ERROR_NO_CACHE
Pk = PackageKitBaseBackend("")
Pk.error(ERROR_NO_CACHE," %s can not open" % wwwfile)
openfile = open( filename ,'w')
openfile.writelines(wget.readlines())
openfile.close()
+ def getGroup(self,categorieList):
+ return getGroup(categorieList)
+
def _getCategorieBase(self, mapDict, categorieList ):
if not categorieList:
return None
@@ -229,6 +263,7 @@ class XMLCache:
t_key = key
tmp = value
return t_key
+
def _getAllCategories(self):
categories = []
for i in self.repos:
@@ -242,15 +277,10 @@ class XMLCache:
if __name__ == '__main__':
- from conaryBackend import groupMap
# print ">>> name"
# print XMLCache().search('music', 'name' )
# print ">> details"
- # l= XMLCache().search('GTK', 'group' )
- # for v,p in enumerate(l):
- # print v,p["name"]
- print "{",
- for i in XMLCache()._getAllCategories():
- print "'%s':" % i
- print "}",
-
+ l= XMLCache().search('Internet', 'group' )
+ for v,p in enumerate(l):
+ print v,p["name"]
+ # print XMLCache().getGroup(['GTK', 'Graphics', 'Photography', 'Viewer'])
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
old mode 100644
new mode 100755
index 52334f9..5ea21f6
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -47,73 +47,6 @@ pkpackage = PackagekitPackage()
from pkConaryLog import log, pdb
-groupMap = {
- '2DGraphics' : GROUP_GRAPHICS,
- 'Accessibility' : GROUP_ACCESSIBILITY,
- 'AdvancedSettings' : GROUP_ADMIN_TOOLS,
- 'Application' : GROUP_OTHER,
- 'ArcadeGame' : GROUP_GAMES,
- 'Audio' : GROUP_MULTIMEDIA,
- 'AudioVideo' : GROUP_MULTIMEDIA,
- 'BlocksGame' : GROUP_GAMES,
- 'BoardGame' : GROUP_GAMES,
- 'Calculator' : GROUP_ACCESSORIES,
- 'Calendar' : GROUP_ACCESSORIES,
- 'CardGame' : GROUP_GAMES,
- 'Compiz' : GROUP_SYSTEM,
- 'ContactManagement' : GROUP_ACCESSORIES,
- 'Core' : GROUP_SYSTEM,
- 'Database' : GROUP_SERVERS,
- 'DesktopSettings' : GROUP_ADMIN_TOOLS,
- 'Development' : GROUP_PROGRAMMING,
- 'Email' : GROUP_INTERNET,
- 'FileTransfer' : GROUP_INTERNET,
- 'Filesystem' : GROUP_SYSTEM,
- 'GNOME' : GROUP_DESKTOP_GNOME,
- 'GTK' : GROUP_DESKTOP_GNOME,
- 'GUIDesigner' : GROUP_PROGRAMMING,
- 'Game' : GROUP_GAMES,
- 'Graphics' : GROUP_GRAPHICS,
- 'HardwareSettings' : GROUP_ADMIN_TOOLS,
- 'IRCClient' : GROUP_INTERNET,
- 'InstantMessaging' : GROUP_INTERNET,
- 'LogicGame' : GROUP_GAMES,
- 'Monitor' : GROUP_ADMIN_TOOLS,
- 'Music' : GROUP_MULTIMEDIA,
- 'Network' : GROUP_INTERNET,
- 'News' : GROUP_INTERNET,
- 'Office' : GROUP_OFFICE,
- 'P2P' : GROUP_INTERNET,
- 'PackageManager' : GROUP_ADMIN_TOOLS,
- 'Photography' : GROUP_MULTIMEDIA,
- 'Player' : GROUP_MULTIMEDIA,
- 'Presentation' : GROUP_OFFICE,
- 'Publishing' : GROUP_OFFICE,
- 'RasterGraphics' : GROUP_GRAPHICS,
- 'Security' : GROUP_SECURITY,
- 'Settings' : GROUP_ADMIN_TOOLS,
- 'Spreadsheet' : GROUP_OFFICE,
- 'System' : GROUP_SYSTEM,
- 'Telephony' : GROUP_COMMUNICATION,
- 'TerminalEmulator' : GROUP_ACCESSORIES,
- 'TextEditor' : GROUP_ACCESSORIES,
- 'Utility' : GROUP_ACCESSORIES,
- 'VectorGraphics' : GROUP_GRAPHICS,
- 'Video' : GROUP_MULTIMEDIA,
- 'Viewer' : GROUP_MULTIMEDIA,
- 'WebBrowser' : GROUP_INTERNET,
- 'WebDevelopment' : GROUP_PROGRAMMING,
- 'WordProcessor' : GROUP_OFFICE,
- '' : GROUP_UNKNOWN
-}
-
-revGroupMap = {}
-
-for (con_cat, pk_group) in groupMap.items():
- if revGroupMap.has_key(pk_group):
- revGroupMap[pk_group].append(con_cat)
- else:
- revGroupMap[pk_group] = [con_cat]
#from conary.lib import util
#sys.excepthook = util.genExcepthook()
@@ -680,7 +613,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
categories = ""
if metadata.has_key("category"):
- categories = Cache()._getCategorieBase( groupMap, metadata['category'])
+ categories = Cache().getGroup( metadata['category'])
else:
categories = None
# Package size goes here, but I don't know how to find that for conary packages.
diff --git a/backends/conary/conaryEnums.py b/backends/conary/conaryEnums.py
index 3b96639..fc55fa3 100644
--- a/backends/conary/conaryEnums.py
+++ b/backends/conary/conaryEnums.py
@@ -1,54 +1,68 @@
-from packagekit.enums import *
-"""
-GROUP_ACCESSIBILITY, GROUP_ACCESSORIES, GROUP_ADMIN_TOOLS, GROUP_COLLECTIONS, GROUP_COMMUNICATION, GROUP_DESKTOP_GNOME, GROUP_DESKTOP_KDE, GROUP_DESKTOP_OTHER, GROUP_DESKTOP_XFCE, GROUP_DOCUMENTATION, GROUP_EDUCATION, GROUP_ELECTRONICS, GROUP_FONTS, GROUP_GAMES, GROUP_GRAPHICS, GROUP_INTERNET, GROUP_LEGACY, GROUP_LOCALIZATION, GROUP_MAPS, GROUP_MULTIMEDIA, GROUP_NETWORK, GROUP_NEWEST, GROUP_OFFICE, GROUP_OTHER, GROUP_POWER_MANAGEMENT, GROUP_PROGRAMMING, GROUP_PUBLISHING, GROUP_REPOS, GROUP_SCIENCE, GROUP_SECURITY, GROUP_SERVERS, GROUP_SYSTEM, GROUP_UNKNOWN, GROUP_VENDOR, GROUP_VIRTUALIZATION,
-"""
+from packagekit.enums import GROUP_ACCESSIBILITY, GROUP_ACCESSORIES, GROUP_EDUCATION, GROUP_GAMES, GROUP_GRAPHICS, GROUP_INTERNET, GROUP_MULTIMEDIA, GROUP_OFFICE, GROUP_OTHER, GROUP_PROGRAMMING, GROUP_SYSTEM
"""
Classify the Categories and help me to make a backend
+ from XMLCache import XMLCache
+ print "categoryMap = {",
+ for i in XMLCache()._getAllCategories():
+ print "'%s':" % i
+ print "}",
+
"""
-categoryMap {
-'VectorGraphics':
-'Network': GROUP_NETWORK
-'Spreadsheet': GROUP_OFFICE
-'Application':
-'X-GNOME-NetworkSettings':
-'Music': GROUP_MULTIMEDIA
-'P2P':
-'WordProcessor': GROUP_OFFICE
-'X-GNOME-PersonalSettings':
-'Presentation': GROUP_OFFICE
-'Email': GROUP_OFFICE
-'Monitor':
-'Development':
-'Core':
-'RasterGraphics':
-'Telephony':
-'Photography':
-'HardwareSettings':
-'News':
-'X-SuSE-Core-Office':
-'X-Red-Hat-Base':
-'GNOME':
-'Settings':
-'GTK':
-'System':
-'Graphics': GROUP_GRAPHICS
-'X-Ximian-Main':
-'Security':
-'Audio':
-'ContactManagement':
-'X-Novell-Main':
-'AudioVideo':
-'WebDevelopment':
-'X-GNOME-SystemSettings':
-'Office': GROUP_OFFICE
-'Viewer':
-'Player':
-'DesktopSettings':
-'WebBrowser': GROUP_INTERNET
-'Utility':
-'GUIDesigner':
-'TerminalEmulator':
+categoryMap = {
+'VectorGraphics': GROUP_GRAPHICS,
+'Network': GROUP_INTERNET,
+'Spreadsheet': GROUP_OFFICE,
+'Application': GROUP_OTHER,
+'X-GNOME-NetworkSettings': GROUP_INTERNET,
+'Music': GROUP_MULTIMEDIA,
+'P2P': GROUP_INTERNET,
+'WordProcessor': GROUP_OFFICE,
+'X-GNOME-PersonalSettings': GROUP_SYSTEM,
+'Presentation': GROUP_OFFICE,
+'Email': GROUP_OFFICE,
+'Monitor': GROUP_SYSTEM,
+'Development': GROUP_PROGRAMMING,
+'Core': GROUP_SYSTEM,
+'RasterGraphics': GROUP_GRAPHICS,
+'Telephony': GROUP_INTERNET,
+'Photography': GROUP_GRAPHICS,
+'HardwareSettings': GROUP_SYSTEM,
+'News': GROUP_INTERNET,
+'X-SuSE-Core-Office': GROUP_SYSTEM,
+'X-Red-Hat-Base': GROUP_SYSTEM,
+'GNOME': GROUP_OTHER,
+'Settings': GROUP_SYSTEM,
+'GTK': GROUP_OTHER,
+'System': GROUP_SYSTEM,
+'Graphics': GROUP_GRAPHICS,
+'X-Ximian-Main': GROUP_OFFICE,
+'Security': GROUP_SYSTEM,
+'Audio': GROUP_MULTIMEDIA,
+'ContactManagement': GROUP_ACCESSORIES,
+'X-Novell-Main': GROUP_OFFICE,
+'AudioVideo': GROUP_MULTIMEDIA,
+'WebDevelopment': GROUP_PROGRAMMING,
+'X-GNOME-SystemSettings': GROUP_SYSTEM,
+'Office': GROUP_OFFICE,
+'Viewer': GROUP_ACCESSORIES,
+'Player': GROUP_OTHER,
+'DesktopSettings': GROUP_SYSTEM,
+'WebBrowser': GROUP_INTERNET,
+'Utility': GROUP_ACCESSORIES,
+'GUIDesigner': GROUP_PROGRAMMING,
+'TerminalEmulator': GROUP_ACCESSORIES,
}
+
+groupMap = {}
+
+for (con_cat, pk_group) in categoryMap.items():
+ if groupMap.has_key(pk_group):
+ groupMap[pk_group].append(con_cat)
+ else:
+ groupMap[pk_group] = [con_cat]
+
+if __name__ == "__main__":
+ print groupMap
commit c2ad2191ea225ef0f622b286380996b47f6eece1
Author: zodman <zodman at cosmogirl.(none)>
Date: Thu Feb 12 13:21:23 2009 -0600
fix a filname error
diff --git a/backends/conary/Makefile.am b/backends/conary/Makefile.am
index ced2759..5b88383 100644
--- a/backends/conary/Makefile.am
+++ b/backends/conary/Makefile.am
@@ -7,7 +7,7 @@ dist_helper_DATA = \
XMLCache.py \
pkConaryLog.py \
conarypk.py \
- conaryEnum.py
+ conaryEnums.py
plugindir = $(PK_PLUGIN_DIR)
plugin_LTLIBRARIES = libpk_backend_conary.la
commit 0edb5bf434c588320af268469778aac79d9b2d91
Author: zodman <zodman at cosmogirl.(none)>
Date: Thu Feb 12 13:14:55 2009 -0600
fix the / on makefile.ac
diff --git a/backends/conary/Makefile.am b/backends/conary/Makefile.am
index c4e7235..ced2759 100644
--- a/backends/conary/Makefile.am
+++ b/backends/conary/Makefile.am
@@ -7,7 +7,7 @@ dist_helper_DATA = \
XMLCache.py \
pkConaryLog.py \
conarypk.py \
- conaryEnum.py \
+ conaryEnum.py
plugindir = $(PK_PLUGIN_DIR)
plugin_LTLIBRARIES = libpk_backend_conary.la
commit 61c9a8004ae870878b80c1eae901249c63b212bc
Author: zodman <zodman at cosmogirl.(none)>
Date: Thu Feb 12 00:52:32 2009 -0600
Remove the old Cache and Add entry for new files
on configure.ac
diff --git a/backends/conary/Makefile.am b/backends/conary/Makefile.am
index 400f706..c4e7235 100644
--- a/backends/conary/Makefile.am
+++ b/backends/conary/Makefile.am
@@ -4,8 +4,10 @@ dist_helper_DATA = \
conaryFilter.py \
conaryCallback.py \
conaryInit.py \
- Cache.py \
- pkConaryLog.py
+ XMLCache.py \
+ pkConaryLog.py \
+ conarypk.py \
+ conaryEnum.py \
plugindir = $(PK_PLUGIN_DIR)
plugin_LTLIBRARIES = libpk_backend_conary.la
diff --git a/configure.ac b/configure.ac
index 2b55bd7..e2ef687 100644
--- a/configure.ac
+++ b/configure.ac
@@ -75,11 +75,11 @@ if test "$GCC" = "yes"; then
WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wformat-security"
WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wmissing-include-dirs"
WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wmissing-format-attribute"
- WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wclobbered"
- WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wempty-body"
- WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wignored-qualifiers"
+ #WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wclobbered"
+ #WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wempty-body"
+ #WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wignored-qualifiers"
WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wsign-compare"
- WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wtype-limits"
+ #WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wtype-limits"
WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wuninitialized"
# work only in C
@@ -89,8 +89,8 @@ if test "$GCC" = "yes"; then
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wshadow"
WARNINGFLAGS_C="$WARNINGFLAGS_C -Wno-strict-aliasing"
WARNINGFLAGS_C="$WARNINGFLAGS_C -Winline"
- WARNINGFLAGS_C="$WARNINGFLAGS_C -Wmissing-parameter-type"
- WARNINGFLAGS_C="$WARNINGFLAGS_C -Woverride-init"
+ #WARNINGFLAGS_C="$WARNINGFLAGS_C -Wmissing-parameter-type"
+ #WARNINGFLAGS_C="$WARNINGFLAGS_C -Woverride-init"
else
WARNINGFLAGS_C=""
WARNINGFLAGS_CPP=""
commit e7fbeec30c6837839d387d4fdf74516067e0a2b0
Author: zodman <zodman at cosmogirl.(none)>
Date: Thu Feb 12 00:20:39 2009 -0600
New updates:
* Add search name|details|group .
* Replace the resolve packages for _resolve_list
this make the search more faster.
* Add conaryEnums for maps GROUP_*. what generate by XMLCache.py
* Add validations when conary cache not fetch.
diff --git a/backends/conary/Cache.py b/backends/conary/Cache.py
deleted file mode 100644
index 34b64b1..0000000
--- a/backends/conary/Cache.py
+++ /dev/null
@@ -1,186 +0,0 @@
-import os
-import sys
-from xml.dom.minidom import parse
-import urllib as url
-
-from pkConaryLog import log
-from conarypk import ConaryPk
-class XMLRepo:
- xml_path = ""
- repository = ""
- def __init__(self, repo, path ):
- self.xml_path = path
- self._setRepo(repo)
-
- def resolve(self, search_trove):
- """ resolve its a search with name """
- trove = self._getPackage(search_trove)
- if trove:
- return trove
- else:
- return None
-
- def search(self, search):
- return self._searchPackage(search)
-
- def _setRepo(self,repo):
- self.repo = repo
- doc = self._open()
- self.label = str( doc.childNodes[0].getAttribute("label") )
-
- def _open(self):
- try:
- return self._repo
- except AttributeError:
- self._repo = parse( open( self.xml_path + self.repo) )
- return self._repo
-
- def _generatePackage(self, package_node ):
- """ convert from package_node to dictionary """
- pkg = {}
- cat = []
- for node in package_node.childNodes:
- if pkg.has_key('categorie'):
- cat.append(str(node.childNodes[0].nodeValue))
- else:
- pkg[str(node.nodeName)] = str(node.childNodes[0].nodeValue)
- pkg["categorie"] = cat
- return pkg
-
- def _getPackage(self, name):
- doc = self._open()
- results = []
- for packages in doc.childNodes:
- for package in packages.childNodes:
- pkg = self._generatePackage(package)
- pkg["label"] = self.label
- if name == pkg["name"]:
- return pkg
- return None
-
- def _searchPackage(self, name):
- doc = self._open()
- results = []
- for packages in doc.childNodes:
- for package in packages.childNodes:
- pkg = self._generatePackage(package)
- pkg["label"] = self.label
- for i in pkg.keys():
- if i == "label":
- continue
- if i =='categorie':
- for j in pkg[i]:
- if name.lower() in j.lower():
- results.append(pkg)
- if name.lower() in pkg[i]:
- results.append(pkg)
- return results
-
-
-
-class XMLCache:
- #xml_files = ["foresight.rpath.org at fl:2"]
- xml_files = []
- server = "http://packages.foresightlinux.org/cache/"
- repos = []
- dbPath = '/var/cache/conary/'
- jobPath = dbPath + 'jobs'
- xml_path = dbPath + "xmlrepo/"
-
- def __init__(self):
- con = ConaryPk()
- labels = con.get_labels_from_config()
-
- if not os.path.isdir(self.dbPath):
- os.makedirs(self.dbPath)
- if not os.path.isdir(self.jobPath):
- os.mkdir(self.jobPath)
- if not os.path.isdir( self.xml_path ):
- os.makedirs(self.xml_path )
-
- for xml_file in labels:
- if not os.path.exists( self.xml_path + xml_file + ".xml" ):
- self._fetchXML()
- for xml_file in labels :
- self.repos.append(XMLRepo( xml_file + ".xml", self.xml_path ))
-
- def _getJobCachePath(self, applyList):
- from conary.lib import sha1helper
- applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
- return self.jobPath + '/' + sha1helper.sha1ToString(sha1helper.sha1String(applyStr))
-
- def checkCachedUpdateJob(self, applyList):
- jobPath = self._getJobCachePath(applyList)
- if os.path.exists(jobPath):
- return jobPath
-
- def cacheUpdateJob(self, applyList, updJob):
- jobPath = self._getJobCachePath(applyList)
- if os.path.exists(jobPath):
- from conary.lib import util
- util.rmtree(jobPath)
- os.mkdir(jobPath)
- updJob.freeze(jobPath)
-
- def getTroves(self):
- pass
- def searchByGroups(self, groups):
- pass
- def refresh(self):
- self._fetchXML()
- def resolve(self, name ):
- for repo in self.repos:
- r = repo.resolve(name)
- if r:
- return r
- else:
- return None
-
- def search(self, search ):
- repositories_result = []
- for repo in self.repos:
- results = repo.search(search)
- for i in results:
- repositories_result.append(i)
- return repositories_result
-
- def _fetchXML(self ):
- con = ConaryPk()
- labels = con.get_labels_from_config()
- for i in labels:
- label = i + '.xml'
- filename = self.xml_path + label
- wwwfile = self.server + label
- wget = url.urlopen( wwwfile )
- openfile = open( filename ,'w')
- openfile.writelines(wget.readlines())
- openfile.close()
- def _getCategorieBase(self, mapDict, categorieList ):
- if not categorieList:
- return None
-
- tempDict = {}
- for cat in categorieList:
-
- if mapDict.has_key(cat):
- map = mapDict[cat]
- else:
- continue
-
- if tempDict.has_key(map):
- tempDict[map] = tempDict[map] + 1
- else:
- tempDict[map] = 1
- tmp = 0
- t_key = ""
- for key, value in tempDict.items():
- if value > tmp:
- t_key = key
- tmp = value
- return t_key
-
-
-if __name__ == '__main__':
- from conaryBackend import groupMap
- XMLCache()._getCategorieBase( groupMap, ['GTK', 'Graphics', 'Photography', 'Viewer'])
-
diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
index 34b64b1..7c712e9 100644
--- a/backends/conary/XMLCache.py
+++ b/backends/conary/XMLCache.py
@@ -20,8 +20,15 @@ class XMLRepo:
else:
return None
- def search(self, search):
- return self._searchPackage(search)
+ def search(self, search, where ):
+ if where == "name":
+ return self._searchNamePackage(search)
+ elif where == "details":
+ return self._searchDetailsPackage(search)
+ elif where == "group":
+ return self._searchGroupPackage(search)
+ else:
+ return self._searchPackage(search)
def _setRepo(self,repo):
self.repo = repo
@@ -40,11 +47,11 @@ class XMLRepo:
pkg = {}
cat = []
for node in package_node.childNodes:
- if pkg.has_key('categorie'):
+ if pkg.has_key('category'):
cat.append(str(node.childNodes[0].nodeValue))
else:
pkg[str(node.nodeName)] = str(node.childNodes[0].nodeValue)
- pkg["categorie"] = cat
+ pkg["category"] = cat
return pkg
def _getPackage(self, name):
@@ -57,7 +64,34 @@ class XMLRepo:
if name == pkg["name"]:
return pkg
return None
-
+
+ def _searchNamePackage(self, name):
+ doc = self._open()
+ results = []
+ for packages in doc.childNodes:
+ for package in packages.childNodes:
+ pkg = self._generatePackage(package)
+ pkg["label"] = self.label
+ if name.lower() in pkg["name"]:
+ results.append(pkg['name'])
+ return [ self._getPackage(i) for i in set(results) ]
+
+ def _searchGroupPackage(self, name):
+ doc = self._open()
+ results_name = []
+ for packages in doc.childNodes:
+ for package in packages.childNodes:
+ pkg = self._generatePackage(package)
+ pkg["label"] = self.label
+ if not pkg.has_key("category"):
+ continue
+ for j in pkg["category"]:
+ if name.lower() in j.lower():
+ results_name.append(pkg['name'])
+ return [ self._getPackage(i) for i in set(results_name) ]
+
+ def _searchDetailsPackage(self, name):
+ return self._searchPackage(name)
def _searchPackage(self, name):
doc = self._open()
results = []
@@ -68,15 +102,23 @@ class XMLRepo:
for i in pkg.keys():
if i == "label":
continue
- if i =='categorie':
+ if i =='category':
for j in pkg[i]:
if name.lower() in j.lower():
- results.append(pkg)
+ results.append(pkg['name'])
if name.lower() in pkg[i]:
- results.append(pkg)
+ results.append(pkg['name'])
+ return [ self._getPackage(i) for i in set(results) ]
+ def _getAllPackages(self):
+ doc = self._open()
+ results = []
+ for packages in doc.childNodes:
+ for package in packages.childNodes:
+ pkg = self._generatePackage(package)
+ pkg["label"] = self.label
+ results.append(pkg)
return results
-
class XMLCache:
#xml_files = ["foresight.rpath.org at fl:2"]
@@ -136,10 +178,13 @@ class XMLCache:
else:
return None
- def search(self, search ):
+ def search(self, search, where = "name" ):
+ """
+ @where (string) values = name | details | group |
+ """
repositories_result = []
for repo in self.repos:
- results = repo.search(search)
+ results = repo.search(search , where )
for i in results:
repositories_result.append(i)
return repositories_result
@@ -151,7 +196,13 @@ class XMLCache:
label = i + '.xml'
filename = self.xml_path + label
wwwfile = self.server + label
- wget = url.urlopen( wwwfile )
+ try:
+ wget = url.urlopen( wwwfile )
+ except:
+ from packagekit.backend import PackageKitBaseBackend
+ from packagekit.enums import ERROR_NO_CACHE
+ Pk = PackageKitBaseBackend("")
+ Pk.error(ERROR_NO_CACHE," %s can not open" % wwwfile)
openfile = open( filename ,'w')
openfile.writelines(wget.readlines())
openfile.close()
@@ -178,9 +229,28 @@ class XMLCache:
t_key = key
tmp = value
return t_key
-
+ def _getAllCategories(self):
+ categories = []
+ for i in self.repos:
+ pkgs = i._getAllPackages()
+ for pkg in pkgs:
+ if pkg.has_key('category'):
+ for cat in pkg["category"]:
+ categories.append(cat)
+ categories.sort()
+ return set( categories )
+
if __name__ == '__main__':
from conaryBackend import groupMap
- XMLCache()._getCategorieBase( groupMap, ['GTK', 'Graphics', 'Photography', 'Viewer'])
+ # print ">>> name"
+ # print XMLCache().search('music', 'name' )
+ # print ">> details"
+ # l= XMLCache().search('GTK', 'group' )
+ # for v,p in enumerate(l):
+ # print v,p["name"]
+ print "{",
+ for i in XMLCache()._getAllCategories():
+ print "'%s':" % i
+ print "}",
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index c4c4c4d..52334f9 100644
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -32,13 +32,13 @@ from conary.conaryclient import cmdline
from packagekit.backend import *
from packagekit.package import *
+from packagekit.progress import PackagekitProgress
from conaryCallback import UpdateCallback
from conaryFilter import *
from XMLCache import XMLCache as Cache
from conaryInit import *
# zodman fix
-#from Cache import Cache
from conaryInit import init_conary_config, init_conary_client
from conary import conarycfg, conaryclient
from conarypk import ConaryPk
@@ -117,11 +117,10 @@ for (con_cat, pk_group) in groupMap.items():
#from conary.lib import util
#sys.excepthook = util.genExcepthook()
-
def ExceptionHandler(func):
+ return func
def display(error):
return str(error).replace('\n', ' ')
-
def wrapper(self, *args, **kwargs):
try:
return func(self, *args, **kwargs)
@@ -137,7 +136,6 @@ def ExceptionHandler(func):
except Exception, e:
self.error(ERROR_UNKNOWN, display(e), exit=True)
return wrapper
-
def _format_str(str):
"""
Convert a multi line string to a list separated by ';'
@@ -219,7 +217,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
@ExceptionHandler
def get_package_from_id(self, package_id):
""" package_id(string) =
- "dpaster;0.1-3-1;x86;/foresight.rpath.org at fl:2-qa/0.1-3-1#{'version': '0.1-3-1', 'categorie': [], 'name': 'dpaster', 'label': 'foresight.rpath.org at fl:2-qa'}"
+ "dpaster;0.1-3-1;x86;/foresight.rpath.org at fl:2-qa/0.1-3-1#{'version': '0.1-3-1', 'category': [], 'name': 'dpaster', 'label': 'foresight.rpath.org at fl:2-qa'}"
"""
log.info("=========== get package from package_id ======================")
name, verString, archString, data = pkpackage.get_package_from_id(package_id)
@@ -229,28 +227,29 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
cli = ConaryPk()
return cli.request_query(name)
- def _do_search(self,filters, searchlist):
+ def _do_search(self, filters, searchlist, where = "name"):
"""
searchlist(str)ist as the package for search like
filters(str) as the filter
"""
fltlist = filters.split(';')
-
+ if where != "name" and where != "details" and where != "group":
+ log.info("where %s" % where)
+ self.error(ERROR_UNKNOWN, "DORK---- search where not found")
cache = Cache()
log.debug((searchlist, fltlist))
- troveTupleList = cache.search(searchlist)
+ troveTupleList = cache.search(searchlist, where )
- if troveTupleList:
- log.info("FOUND!!!!!! %s " % troveTupleList )
+ if len(troveTupleList) > 0 :
+ for i in troveTupleList:
+ log.info("FOUND!!!!!! %s " % i["name"] )
+ log.info("FOUND (%s) elements " % len(troveTupleList) )
else:
log.info("NOT FOUND %s " % searchlist )
+ self.error(ERROR_PACKAGE_NOT_FOUND, "Not Found %s " % searchlist )
- for troveDict in troveTupleList:
- log.info(" doing resolve ")
- log.info(troveDict)
- self.resolve( fltlist[0] , [ troveDict['name'] ] )
-
+ self._resolve_list( fltlist, troveTupleList )
def _get_update(self, applyList, cache=True):
updJob = self.client.newUpdateJob()
@@ -287,18 +286,38 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
applyList = [(name, (None, None), (version, flavor), True)]
return self._do_update(applyList)
- def _convertPackage(self, pkg ):
- #version = versions.ThawVersion(pkg['version'])
- pass
+ def _resolve_list(self, filters, pkgsList ):
+ log.info("======= _resolve_list =====")
+ specList = []
+ cli = ConaryPk()
+ for pkg in pkgsList:
+ name = pkg["name"]
+ repo = pkg["label"]
+ version = pkg["version"]
+ trove = name, None , cli.flavor
+ specList.append( trove )
+ trovesList = cli.repos.findTroves(cli.default_label, specList )
+
+ pkgFilter = ConaryFilter(filters)
+ troves = trovesList.values()
+ for trovelst in troves:
+ t = trovelst[0]
+ installed = pkgFilter._pkg_is_installed( t[0] )
+ if installed:
+ pkgFilter.add_installed( trovelst )
+ else:
+ pkgFilter.add_available( trovelst )
+
+
+ package_list = pkgFilter.post_process()
+ self._show_package_list(package_list)
+
@ExceptionHandler
def resolve(self, filters, package ):
"""
@filters (list) list of filters
@package (list ) list with packages name for resolve
"""
- self.allow_cancel(True)
- self.percentage(None)
- self.status(STATUS_INFO)
log.info("======== resolve =========")
log.info("filters: %s package:%s " % (filters, package))
@@ -310,7 +329,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
filter = ConaryFilter(filters)
- installed = filter._pkg_is_installed( pkg_dict )
+ installed = filter._pkg_is_installed( pkg_dict["name"] )
conary_cli = ConaryPk()
@@ -327,56 +346,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
log.info("package_list %s" % package_list)
self._show_package_list(package_list)
- #if len(packages):
- # for i in packages:
- # self._do_search(i, filters)
- #else:
- # self._do_search(packages, filters)
-
- @ExceptionHandler
- def search_group(self, filters, key):
- '''
- Implement the {backend}-search-name functionality
- FIXME: Ignoring filters for now.
- '''
- self.allow_cancel(True)
- self.percentage(None)
- self.status(STATUS_QUERY)
-
- fltlist = filters.split(';')
- pkgfilter = ConaryFilter(fltlist)
- pkgfilter = ConaryFilter(fltlist)
- cache = Cache()
-
- try:
- troveTupleList = cache.searchByGroups(revGroupMap[key])
- finally:
- # FIXME: Really need to send an error here
- pass
-
- troveTupleList.sort()
- troveTupleList.reverse()
-
- for troveTuple in troveTupleList:
- troveTuple = tuple([item.encode('UTF-8') for item in troveTuple[0:2]])
- name = troveTuple[0]
- version = versions.ThawVersion(troveTuple[1])
- flavor = deps.ThawFlavor(troveTuple[2])
- category = troveTuple[3][0]
- category = category.encode('UTF-8')
- troveTuple = tuple([name, version, flavor])
- installed = self.check_installed(troveTuple)
- if installed:
- pkgfilter.add_installed([troveTuple])
- else:
- pkgfilter.add_available([troveTuple])
-
- # we couldn't do this when generating the list
- package_list = pkgfilter.post_process()
- log.info(package_list)
- log.info("package_list %s" % package_list)
- self._show_package_list(package_list)
-
def _show_package_list(self, lst):
"""
HOW its showed on packageKit
@@ -404,19 +373,42 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
self.package(package_id, status, meta )
@ExceptionHandler
+ def search_group(self, options, searchlist):
+ '''
+ Implement the {backend}-search-group functionality
+ '''
+ log.info("============= search_group ========")
+ self.allow_cancel(True)
+ self.percentage(None)
+ self.status(STATUS_QUERY)
+ log.info("options: %s searchlist:%s "%(options, searchlist))
+ self._do_search(options, searchlist, 'group')
+
+
+ @ExceptionHandler
def search_name(self, options, searchlist):
'''
Implement the {backend}-search-name functionality
'''
+ log.info("============= search_name ========")
self.allow_cancel(True)
self.percentage(None)
self.status(STATUS_QUERY)
- log.info("============= search_name ========")
log.info("options: %s searchlist:%s "%(options, searchlist))
- self._do_search(options, searchlist)
+ self._do_search(options, searchlist, 'name')
- def search_details(self, opt, key):
- pass
+ @ExceptionHandler
+ def search_details(self, options, search):
+ '''
+ Implement the {backend}-search-details functionality
+ '''
+ log.info("============= search_details ========")
+ self.allow_cancel(True)
+ #self.percentage(None)
+ self.status(STATUS_QUERY)
+ log.info("options: %s searchlist:%s "%(options, search))
+ self._do_search(options, search, 'details' )
+
def get_requires(self, filters, package_ids, recursive_text):
pass
@@ -484,9 +476,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
self.status(STATUS_REFRESH_CACHE)
cache = Cache()
cache.refresh()
- #if not cache.is_populate_database:
- # self.status(STATUS_WAIT)
- # cache.populate_database()
@ExceptionHandler
def update(self, package_ids):
@@ -646,7 +635,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
#vendor_url = _format_list(urls['vendor'])
vendor_url = ""
reboot = "none"
- desc = self._get_metadata(package_id, 'longDesc') or " "
+ desc = " "
self.update_detail(package_id, update, obsolete, vendor_url, bz_url, cve_url,
reboot, desc, changelog="", state="", issued="", updated="")
@@ -690,8 +679,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
url = "http://www.foresightlinux.org/packages/%s.html" % name
categories = ""
- if metadata.has_key("categorie"):
- categories = Cache()._getCategorieBase( groupMap, metadata['categorie'])
+ if metadata.has_key("category"):
+ categories = Cache()._getCategorieBase( groupMap, metadata['category'])
else:
categories = None
# Package size goes here, but I don't know how to find that for conary packages.
@@ -767,7 +756,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
for troveTuple in troveTuples:
log.info("======== trove ")
log.info(troveTuple)
- installed =self.check_installed(troveTuple)
+ installed = self.check_installed(troveTuple)
log.info(installed)
name, version, flavor = troveTuple
return name, version, flavor, installed
@@ -792,10 +781,12 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
'''
pass
+from pkConaryLog import pdb
+
def main():
backend = PackageKitConaryBackend('')
log.info("======== argv =========== ")
- log.info(sys.argv)
+ log.info(sys.argv[1:])
backend.dispatcher(sys.argv[1:])
if __name__ == "__main__":
diff --git a/backends/conary/conaryEnums.py b/backends/conary/conaryEnums.py
new file mode 100644
index 0000000..3b96639
--- /dev/null
+++ b/backends/conary/conaryEnums.py
@@ -0,0 +1,54 @@
+from packagekit.enums import *
+"""
+GROUP_ACCESSIBILITY, GROUP_ACCESSORIES, GROUP_ADMIN_TOOLS, GROUP_COLLECTIONS, GROUP_COMMUNICATION, GROUP_DESKTOP_GNOME, GROUP_DESKTOP_KDE, GROUP_DESKTOP_OTHER, GROUP_DESKTOP_XFCE, GROUP_DOCUMENTATION, GROUP_EDUCATION, GROUP_ELECTRONICS, GROUP_FONTS, GROUP_GAMES, GROUP_GRAPHICS, GROUP_INTERNET, GROUP_LEGACY, GROUP_LOCALIZATION, GROUP_MAPS, GROUP_MULTIMEDIA, GROUP_NETWORK, GROUP_NEWEST, GROUP_OFFICE, GROUP_OTHER, GROUP_POWER_MANAGEMENT, GROUP_PROGRAMMING, GROUP_PUBLISHING, GROUP_REPOS, GROUP_SCIENCE, GROUP_SECURITY, GROUP_SERVERS, GROUP_SYSTEM, GROUP_UNKNOWN, GROUP_VENDOR, GROUP_VIRTUALIZATION,
+"""
+
+"""
+Classify the Categories and help me to make a backend
+
+"""
+
+categoryMap {
+'VectorGraphics':
+'Network': GROUP_NETWORK
+'Spreadsheet': GROUP_OFFICE
+'Application':
+'X-GNOME-NetworkSettings':
+'Music': GROUP_MULTIMEDIA
+'P2P':
+'WordProcessor': GROUP_OFFICE
+'X-GNOME-PersonalSettings':
+'Presentation': GROUP_OFFICE
+'Email': GROUP_OFFICE
+'Monitor':
+'Development':
+'Core':
+'RasterGraphics':
+'Telephony':
+'Photography':
+'HardwareSettings':
+'News':
+'X-SuSE-Core-Office':
+'X-Red-Hat-Base':
+'GNOME':
+'Settings':
+'GTK':
+'System':
+'Graphics': GROUP_GRAPHICS
+'X-Ximian-Main':
+'Security':
+'Audio':
+'ContactManagement':
+'X-Novell-Main':
+'AudioVideo':
+'WebDevelopment':
+'X-GNOME-SystemSettings':
+'Office': GROUP_OFFICE
+'Viewer':
+'Player':
+'DesktopSettings':
+'WebBrowser': GROUP_INTERNET
+'Utility':
+'GUIDesigner':
+'TerminalEmulator':
+}
diff --git a/backends/conary/conaryFilter.py b/backends/conary/conaryFilter.py
index 7475213..20bd4bf 100644
--- a/backends/conary/conaryFilter.py
+++ b/backends/conary/conaryFilter.py
@@ -46,7 +46,8 @@ class ConaryFilter(PackagekitFilter):
Return if the packages are installed
'''
conary_cli = ConaryPk()
- result = conary_cli.query(pkg['name'])
+ result = conary_cli.query(pkg)
+
if result:
return True
else:
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index d44f14e..3581362 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -51,6 +51,7 @@ class ConaryPk:
if "foresight.rpath.org" in i.asString():
labels.append(i.asString())
return labels
+
def query(self, name):
""" do a conary query """
if name is None or name == "":
diff --git a/backends/conary/pk-backend-conary.c b/backends/conary/pk-backend-conary.c
index 936e190..df3c9a6 100644
--- a/backends/conary/pk-backend-conary.c
+++ b/backends/conary/pk-backend-conary.c
@@ -239,6 +239,32 @@ backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search
}
/**
+ pk_backend_search_groups
+*/
+static void
+backend_search_group (PkBackend *backend, PkBitfield filters, const gchar *search)
+{
+ gchar *filters_text;
+ filters_text = pk_filter_bitfield_to_text (filters);
+ pk_backend_spawn_helper (spawn, "conaryBackend.py", "search-group", filters_text, search, NULL);
+ g_free (filters_text);
+}
+
+
+
+/**
+ pk_backend_search_details
+*/
+static void
+backend_search_details (PkBackend *backend, PkBitfield filters, const gchar *search)
+{
+ gchar *filters_text;
+ filters_text = pk_filter_bitfield_to_text (filters);
+ pk_backend_spawn_helper (spawn, "conaryBackend.py", "search-details", filters_text, search, NULL);
+ g_free (filters_text);
+}
+
+/**
* pk_backend_update_packages:
*/
static void
@@ -324,9 +350,9 @@ PK_BACKEND_OPTIONS (
NULL, /* repo_set_data */
backend_resolve, /* resolve */
NULL, /* rollback */
- NULL, /* search_details */
+ backend_search_details, /* search_details */
NULL, /* search_file */
- NULL, /* search_group */
+ backend_search_group, /* search_group */
backend_search_name, /* search_name */
backend_update_packages, /* update_packages */
backend_update_system, /* update_system */
commit 982b9c922e9d9509bd5e3b7ca5dd346e3326cf99
Merge: 57b67a0... 26fc8db...
Author: zodman <zodman at cosmogirl.(none)>
Date: Wed Feb 11 08:02:33 2009 -0600
Merge branch 'master' of git+ssh://zodman@git.packagekit.org/srv/git/PackageKit
commit 26fc8dbcf124324dfc8005730ffeb3900fb4713e
Author: Daniel Nylander <po at danielnylander.se>
Date: Wed Feb 11 10:44:21 2009 +0000
Updated Swedish translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/sv.po b/po/sv.po
index 44bb176..dc9b2be 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,605 +1,433 @@
# Swedish translation for packagekit.
-# Copyright (C) 2008 Free Software Foundation, Inc.
+# Copyright (C) 2008, 2009 Free Software Foundation, Inc.
# This file is distributed under the same license as the packagekit package.
-# Daniel Nylander <po at danielnylander.se>, 2008.
+# Daniel Nylander <po at danielnylander.se>, 2008, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: packagekit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-01-15 16:57+0000\n"
-"PO-Revision-Date: 2008-12-01 23:32+0100\n"
+"POT-Creation-Date: 2008-11-24 01:31+0000\n"
+"PO-Revision-Date: 2009-02-11 11:39+0100\n"
"Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
"Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-
-#. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:230
-msgid "Transaction"
-msgstr ""
-
-#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:232
-msgid "System time"
-msgstr ""
-
-#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:234
-msgid "Succeeded"
-msgstr ""
-
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:234 ../client/pk-console.c:377
-msgid "True"
-msgstr ""
-
-#: ../client/pk-console.c:234 ../client/pk-console.c:377
-msgid "False"
-msgstr ""
-
-#. TRANSLATORS: this is the transactions role, e.g. "update-system"
-#: ../client/pk-console.c:236
-msgid "Role"
-msgstr ""
-
-#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:241
-msgid "Duration"
-msgstr ""
-
-#: ../client/pk-console.c:241
-msgid "(seconds)"
-msgstr ""
-
-#. TRANSLATORS: this is The command line used to do the action
-#: ../client/pk-console.c:245
-#, fuzzy
-msgid "Command line"
-msgstr "Kommandot misslyckades"
-
-#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:247
-msgid "User ID"
-msgstr ""
-
-#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:254
-msgid "Username"
-msgstr ""
-
-#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:258
-msgid "Real name"
-msgstr ""
-
-#: ../client/pk-console.c:266
-#, fuzzy
-msgid "Affected packages:"
-msgstr "Uppdatera paket"
-
-#: ../client/pk-console.c:268
-msgid "Affected packages: None"
-msgstr ""
-
-#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:293
-msgid "Distribution"
-msgstr ""
-
-#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:295
-msgid "Type"
-msgstr ""
-
-#. TRANSLATORS: this is any summary text describing the upgrade
-#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:297 ../client/pk-console.c:319
-msgid "Summary"
-msgstr ""
-
-#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:309
-msgid "Category"
-msgstr ""
-
-#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:311
-msgid "ID"
-msgstr ""
-
-#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:314
-msgid "Parent"
-msgstr ""
-
-#: ../client/pk-console.c:316
-msgid "Name"
-msgstr ""
-
-#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:322
-msgid "Icon"
-msgstr ""
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:337
+#: ../client/pk-console.c:287
msgid "Details about the update:"
msgstr "Detaljer om uppdateringen:"
-#: ../client/pk-console.c:338
-#, fuzzy
-msgid "Package"
-msgstr "Paketfiler"
-
-#: ../client/pk-console.c:340
-#, fuzzy
-msgid "Updates"
-msgstr "Uppdatera paket"
-
-#: ../client/pk-console.c:342
-msgid "Obsoletes"
-msgstr ""
-
-#: ../client/pk-console.c:344
-msgid "Vendor"
-msgstr ""
-
-#: ../client/pk-console.c:346
-msgid "Bugzilla"
-msgstr ""
-
-#: ../client/pk-console.c:348
-msgid "CVE"
-msgstr ""
-
-#: ../client/pk-console.c:350
-msgid "Restart"
-msgstr ""
-
-#: ../client/pk-console.c:352
-#, fuzzy
-msgid "Update text"
-msgstr "Uppdateringsinformation"
-
-#: ../client/pk-console.c:354
-msgid "Changes"
-msgstr ""
-
-#: ../client/pk-console.c:356
-msgid "State"
-msgstr ""
-
-#: ../client/pk-console.c:359
-msgid "Issued"
-msgstr ""
-
-#: ../client/pk-console.c:362
-#, fuzzy
-msgid "Updated"
-msgstr "Uppdateringsinformation"
-
-#: ../client/pk-console.c:448 ../client/pk-console.c:450
-msgid "Percentage"
-msgstr ""
-
-#: ../client/pk-console.c:450
-msgid "Unknown"
-msgstr ""
-
-#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:501
-#, fuzzy
-msgid "System restart required by:"
-msgstr "En omstart av systemet krävs"
-
-#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:504
-#, fuzzy
-msgid "Session restart required:"
-msgstr "En omstart av systemet krävs"
-
-#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:507
-#, fuzzy
-msgid "Application restart required by:"
-msgstr "En omstart av programmet krävs"
-
-#: ../client/pk-console.c:543
+#: ../client/pk-console.c:480
msgid "Please restart the computer to complete the update."
msgstr "Starta om datorn för att färdigställa uppdateringen."
-#: ../client/pk-console.c:545
+#: ../client/pk-console.c:482
msgid "Please logout and login to complete the update."
msgstr "Logga ut och logga in igen för att färdigställa uppdateringen."
-#: ../client/pk-console.c:547
+#: ../client/pk-console.c:484
msgid "Please restart the application as it is being used."
msgstr "Starta om programmet eftersom det används för tillfället."
#. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:659
+#: ../client/pk-console.c:596
#, c-format
msgid "The package %s is already installed"
msgstr "Paketet %s är redan installerat"
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:667
+#: ../client/pk-console.c:604
#, c-format
msgid "The package %s could not be installed: %s"
msgstr "Paketet %s kunde inte installeras: %s"
#. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../client/pk-console.c:692 ../client/pk-console.c:719
-#: ../client/pk-console.c:815 ../client/pk-console.c:932
-#: ../client/pk-tools-common.c:61 ../client/pk-tools-common.c:79
+#: ../client/pk-console.c:629
+#: ../client/pk-console.c:656
+#: ../client/pk-console.c:752
+#: ../client/pk-console.c:869
+#: ../client/pk-tools-common.c:61
+#: ../client/pk-tools-common.c:79
#: ../client/pk-tools-common.c:86
#, c-format
msgid "Internal error: %s"
msgstr "Internt fel: %s"
#. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:700 ../client/pk-console.c:1327
+#: ../client/pk-console.c:637
+#: ../client/pk-console.c:1264
#, c-format
msgid "This tool could not install the packages: %s"
msgstr "Detta verktyg kunde inte installera paketen: %s"
#. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:727
+#: ../client/pk-console.c:664
#, c-format
msgid "This tool could not install the files: %s"
msgstr "Detta verktyg kunde inte installera filerna: %s"
#. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:783
+#: ../client/pk-console.c:720
#, c-format
msgid "This tool could not remove %s: %s"
msgstr "Detta verktyg kunde inte ta bort %s: %s"
#. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:806 ../client/pk-console.c:844
-#: ../client/pk-console.c:877
+#: ../client/pk-console.c:743
+#: ../client/pk-console.c:781
+#: ../client/pk-console.c:814
#, c-format
msgid "This tool could not remove the packages: %s"
msgstr "Detta verktyg kunde inte ta bort paketen: %s"
#. TRANSLATORS: When removing, we might have to remove other dependencies
-#: ../client/pk-console.c:856
+#: ../client/pk-console.c:793
msgid "The following packages have to be removed:"
msgstr "Följande paket måste tas bort:"
#. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:863
+#: ../client/pk-console.c:800
msgid "Proceed removing additional packages?"
msgstr "Fortsätt med att ta bort ytterligare paket?"
#. TRANSLATORS: We did not remove any packages
-#: ../client/pk-console.c:868
+#: ../client/pk-console.c:805
msgid "The package removal was canceled!"
msgstr "Paketborttagningen avbröts!"
#. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:909
+#: ../client/pk-console.c:846
#, c-format
msgid "This tool could not download the package %s as it could not be found"
-msgstr ""
-"Detta verktyg kunde inte hämta paketet \"%s\" eftersom det inte hittades"
+msgstr "Detta verktyg kunde inte hämta paketet %s eftersom det inte hittades"
#. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:940
+#: ../client/pk-console.c:877
#, c-format
msgid "This tool could not download the packages: %s"
msgstr "Detta verktyg kunde inte hämta paketen: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:967 ../client/pk-console.c:976
+#: ../client/pk-console.c:904
+#: ../client/pk-console.c:913
#, c-format
msgid "This tool could not update %s: %s"
msgstr "Detta verktyg kunde inte uppdatera %s: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:998 ../client/pk-console.c:1006
+#: ../client/pk-console.c:935
+#: ../client/pk-console.c:943
#, c-format
msgid "This tool could not get the requirements for %s: %s"
msgstr "Detta verktyg kunde inte få tag på kraven för %s: %s"
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:1028 ../client/pk-console.c:1036
+#: ../client/pk-console.c:965
+#: ../client/pk-console.c:973
#, c-format
msgid "This tool could not get the dependencies for %s: %s"
-msgstr "Detta verktyg kunde inte få tag på beroenden för %s: %s"
+msgstr "Detta verktyg kunde inte få tag på beroenden för detta %s: %s"
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:1058 ../client/pk-console.c:1066
+#: ../client/pk-console.c:995
+#: ../client/pk-console.c:1003
#, c-format
msgid "This tool could not get package details for %s: %s"
msgstr "Detta verktyg kunde inte få tag på paketdetaljerna för %s: %s"
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1088
+#: ../client/pk-console.c:1025
#, c-format
msgid "This tool could not find the files for %s: %s"
msgstr "Detta verktyg kunde inte hitta filerna för %s: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1096
+#: ../client/pk-console.c:1033
#, c-format
msgid "This tool could not get the file list for %s: %s"
msgstr "Detta verktyg kunde inte få tag på fillistan för %s: %s"
#. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1055
#, c-format
msgid "File already exists: %s"
msgstr "Filen finns redan: %s"
#. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1123 ../client/pk-console.c:1179
-#: ../client/pk-console.c:1254
+#: ../client/pk-console.c:1060
+#: ../client/pk-console.c:1116
+#: ../client/pk-console.c:1191
msgid "Getting package list"
msgstr "Hämtar paketlista"
#. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1129 ../client/pk-console.c:1185
-#: ../client/pk-console.c:1260
+#: ../client/pk-console.c:1066
+#: ../client/pk-console.c:1122
+#: ../client/pk-console.c:1197
#, c-format
msgid "This tool could not get package list: %s"
-msgstr "Detta verktyg kunde inte få tag på paketlista: %s"
+msgstr "Detta verktyg kunde inte få tag på paketlistan: %s"
#. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1140
-#, c-format
+#: ../client/pk-console.c:1077
msgid "Failed to save to disk"
msgstr "Misslyckades med att spara till disk"
#. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1174 ../client/pk-console.c:1249
+#: ../client/pk-console.c:1111
+#: ../client/pk-console.c:1186
#, c-format
msgid "File does not exist: %s"
msgstr "Filen finns inte: %s"
#. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1206
+#: ../client/pk-console.c:1143
msgid "Packages to add"
msgstr "Paket att lägga till"
#. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1214
+#: ../client/pk-console.c:1151
msgid "Packages to remove"
msgstr "Paket att ta bort"
#. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1282
-#, c-format
+#: ../client/pk-console.c:1219
msgid "No new packages need to be installed"
msgstr "Inga nya paket behöver installeras"
#. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1288
+#: ../client/pk-console.c:1225
msgid "To install"
msgstr "Att installera"
#. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1299
+#: ../client/pk-console.c:1236
msgid "Searching for package: "
msgstr "Söker efter paket: "
#. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1303
+#: ../client/pk-console.c:1240
msgid "not found."
msgstr "hittades inte."
#. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1314
-#, c-format
+#: ../client/pk-console.c:1251
msgid "No packages can be found to install"
-msgstr "Inga paket för installation hittades"
+msgstr "Inga paket hittades för installation"
#. TRANSLATORS: installing new packages from package list
-#: ../client/pk-console.c:1320
+#: ../client/pk-console.c:1257
msgid "Installing packages"
msgstr "Installerar paket"
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1356
+#: ../client/pk-console.c:1293
#, c-format
msgid "This tool could not find the update details for %s: %s"
msgstr "Detta verktyg kunde inte hitta uppdateringsdetaljer för %s: %s"
#. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1364
+#: ../client/pk-console.c:1301
#, c-format
msgid "This tool could not get the update details for %s: %s"
msgstr "Detta verktyg kunde inte få tag på uppdateringsdetaljer för %s: %s"
#. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1410
+#: ../client/pk-console.c:1347
msgid "Error:"
msgstr "Fel:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1424
+#: ../client/pk-console.c:1361
msgid "Package description"
msgstr "Paketbeskrivning"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1458
+#: ../client/pk-console.c:1394
msgid "Package files"
msgstr "Paketfiler"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1466
+#: ../client/pk-console.c:1403
msgid "No files"
msgstr "Inga filer"
#. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1489
+#: ../client/pk-console.c:1426
msgid "Repository signature required"
msgstr "Förrådssignatur krävs"
#. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1499
+#: ../client/pk-console.c:1436
msgid "Do you accept this signature?"
msgstr "Godkänner du denna signatur?"
#. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1440
msgid "The signature was not accepted."
msgstr "Signaturen godkändes inte."
#. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1537
+#: ../client/pk-console.c:1474
msgid "End user license agreement required"
msgstr "Godkännande av slutanvändaravtal krävs"
#. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1481
msgid "Do you agree to this license?"
msgstr "Godkänner du denna licens?"
#. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1548
+#: ../client/pk-console.c:1485
msgid "The license was refused."
msgstr "Licensen nekades."
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1577
+#: ../client/pk-console.c:1514
msgid "The daemon crashed mid-transaction!"
msgstr "Demonen kraschade mitt under transaktionen!"
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1630
+#: ../client/pk-console.c:1567
msgid "PackageKit Console Interface"
msgstr "Konsollgränssnitt för PackageKit"
-#: ../client/pk-console.c:1630
+#: ../client/pk-console.c:1567
msgid "Subcommands:"
msgstr "Underkommandon:"
-#: ../client/pk-console.c:1719 ../client/pk-generate-pack.c:184
+#: ../client/pk-console.c:1658
+#: ../client/pk-generate-pack.c:184
#: ../client/pk-monitor.c:115
-#: ../contrib/command-not-found/pk-command-not-found.c:510
-#: ../src/pk-main.c:192
+#: ../src/pk-main.c:191
msgid "Show extra debugging information"
msgstr "Visa extra felsökningsinformation"
-#: ../client/pk-console.c:1721 ../client/pk-monitor.c:117
+#: ../client/pk-console.c:1660
+#: ../client/pk-monitor.c:117
msgid "Show the program version and exit"
msgstr "Visa programversion och avsluta"
-#: ../client/pk-console.c:1723
+#: ../client/pk-console.c:1662
msgid "Set the filter, e.g. installed"
msgstr "Ange filtret, t.ex. installed"
-#: ../client/pk-console.c:1725
+#: ../client/pk-console.c:1664
msgid "Exit without waiting for actions to complete"
msgstr "Avsluta utan att vänta på att åtgärder ska färdigställas"
#. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:1752
+#: ../client/pk-console.c:1691
msgid "This tool could not connect to system DBUS."
msgstr "Detta verktyg kunde inte ansluta till systemets DBUS."
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1839
+#: ../client/pk-console.c:1776
msgid "The filter specified was invalid"
-msgstr "Filtret som angavs var ogiltigt"
+msgstr "Angivet filter var ogiltigt"
-#: ../client/pk-console.c:1856
+#: ../client/pk-console.c:1793
msgid "You need to specify a search type, e.g. name"
msgstr "Du måste ange en söktyp, t.ex. name"
-#: ../client/pk-console.c:1861 ../client/pk-console.c:1868
-#: ../client/pk-console.c:1875 ../client/pk-console.c:1882
-#: ../client/pk-console.c:1990 ../client/pk-console.c:2000
-#: ../client/pk-console.c:2007 ../client/pk-console.c:2014
+#: ../client/pk-console.c:1798
+#: ../client/pk-console.c:1805
+#: ../client/pk-console.c:1812
+#: ../client/pk-console.c:1819
+#: ../client/pk-console.c:1930
+#: ../client/pk-console.c:1940
+#: ../client/pk-console.c:1947
+#: ../client/pk-console.c:1954
msgid "You need to specify a search term"
msgstr "Du måste ange en sökterm"
-#: ../client/pk-console.c:1887
+#: ../client/pk-console.c:1824
msgid "Invalid search type"
msgstr "Ogiltig söktyp"
-#: ../client/pk-console.c:1892
+#: ../client/pk-console.c:1829
msgid "You need to specify a package or file to install"
msgstr "Du måste ange ett paket eller fil att installera"
-#: ../client/pk-console.c:1899
+#: ../client/pk-console.c:1836
msgid "You need to specify a type, key_id and package_id"
msgstr "Du måste ange en type, key_id och package_id"
-#: ../client/pk-console.c:1906
+#: ../client/pk-console.c:1843
msgid "You need to specify a package to remove"
msgstr "Du måste ange ett paket att ta bort"
-#: ../client/pk-console.c:1912
-msgid ""
-"You need to specify the destination directory and then the packages to "
-"download"
+#: ../client/pk-console.c:1849
+msgid "You need to specify the destination directory and then the packages to download"
msgstr "Du måste ange målkatalogen och sedan paketen som ska hämtas"
-#: ../client/pk-console.c:1917
+#: ../client/pk-console.c:1854
msgid "Directory not found"
msgstr "Katalogen hittades inte"
-#: ../client/pk-console.c:1923
+#: ../client/pk-console.c:1860
msgid "You need to specify a licence identifier (eula-id)"
msgstr "Du måste ange en licensidentifierare (eula-id)"
-#: ../client/pk-console.c:1939
+#: ../client/pk-console.c:1876
msgid "You need to specify a package name to resolve"
msgstr "Du måste ange ett paketnamn att lösa"
-#: ../client/pk-console.c:1946 ../client/pk-console.c:1953
+#: ../client/pk-console.c:1885
+#: ../client/pk-console.c:1892
msgid "You need to specify a repository name"
msgstr "Du måste ange ett förrådsnamn"
-#: ../client/pk-console.c:1960
+#: ../client/pk-console.c:1899
msgid "You need to specify a repo name/parameter and value"
-msgstr "Du måste ange ett förrådsnamn/-parameter och värde"
+msgstr "Du måste ange ett förrådsnamn/parameter och värde"
-#: ../client/pk-console.c:1972
+#: ../client/pk-console.c:1912
msgid "You need to specify an action, e.g. 'update-system'"
msgstr "Du måste ange en åtgärd, t.ex. \"update-system\""
-#: ../client/pk-console.c:1977
+#: ../client/pk-console.c:1917
msgid "You need to specify a correct role"
msgstr "Du måste ange en korrekt roll"
-#: ../client/pk-console.c:1982
+#: ../client/pk-console.c:1922
msgid "Failed to get last time"
msgstr "Misslyckades med att få tag på senaste tid"
-#: ../client/pk-console.c:2021
+#: ../client/pk-console.c:1961
msgid "You need to specify a package to find the details for"
msgstr "Du måste ange ett paket att söka information om"
-#: ../client/pk-console.c:2028
+#: ../client/pk-console.c:1968
msgid "You need to specify a package to find the files for"
msgstr "Du måste ange ett paket att söka efter filerna för"
-#: ../client/pk-console.c:2035
+#: ../client/pk-console.c:1975
msgid "You need to specify a list file to create"
msgstr "Du måste ange en listfil att skapa"
-#: ../client/pk-console.c:2043 ../client/pk-console.c:2051
+#: ../client/pk-console.c:1983
+#: ../client/pk-console.c:1991
msgid "You need to specify a list file to open"
msgstr "Du måste ange en listfil att öppna"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2104
+#: ../client/pk-console.c:2044
#, c-format
msgid "Option '%s' is not supported"
msgstr "Flaggan \"%s\" stöds inte"
#. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2117
+#: ../client/pk-console.c:2057
msgid "You don't have the necessary privileges for this operation"
msgstr "Du har inte den nödvändiga behörigheten för denna åtgärd"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2120
+#: ../client/pk-console.c:2060
msgid "Command failed"
msgstr "Kommandot misslyckades"
@@ -698,7 +526,6 @@ msgstr "Ãvervakare för PackageKit"
#. TRANSLATORS: The package was not found in any software sources
#: ../client/pk-tools-common.c:114
-#, c-format
msgid "The package could not be found"
msgstr "Paketet kunde inte hittas"
@@ -712,138 +539,61 @@ msgstr "Det finns fler än ett paket som matchar:"
msgid "Please choose the correct package: "
msgstr "Välj det korrekta paketet: "
-#: ../client/pk-tools-common.c:157
+#: ../client/pk-tools-common.c:158
#, c-format
msgid "Please enter a number from 1 to %i: "
msgstr "Ange ett tal från 1 till %i: "
-#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:361
-#, fuzzy
-msgid "Failed to search for file"
-msgstr "Misslyckades med att spara till disk"
-
-#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:485
-#, fuzzy
-msgid "Failed to launch:"
-msgstr "Misslyckades med att få tag på senaste tid"
-
-#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:526
-#, fuzzy
-msgid "PackageKit Command Not Found"
-msgstr "Ãvervakare för PackageKit"
-
-#. TRANSLATORS: the prefix of all the output telling the user why it's not executing
-#: ../contrib/command-not-found/pk-command-not-found.c:548
-#, fuzzy
-msgid "Command not found."
-msgstr "hittades inte."
-
-#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:555
-#, fuzzy
-msgid "Similar command is:"
-msgstr "Underkommandon:"
-
-#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:564
-msgid "Run similar command:"
-msgstr ""
-
-#. TRANSLATORS: show the user a list of commands that they could have meant
-#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:576
-#: ../contrib/command-not-found/pk-command-not-found.c:585
-#, fuzzy
-msgid "Similar commands are:"
-msgstr "Underkommandon:"
-
-#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:592
-msgid "Please choose a command to run"
-msgstr ""
-
-#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:607
-#, fuzzy
-msgid "The package providing this file is:"
-msgstr "Paketet %s är redan installerat"
-
-#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:612
-#, c-format
-msgid "Install package '%s' to provide command '%s'?"
-msgstr ""
-
-#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:633
-msgid "Packages providing this file are:"
-msgstr ""
-
-#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:642
-msgid "Suitable packages are:"
-msgstr ""
-
-#. get selection
-#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:650
-#, fuzzy
-msgid "Please choose a package to install"
-msgstr "Välj det korrekta paketet: "
-
#. TRANSLATORS: when we are getting data from the daemon
-#: ../contrib/browser-plugin/src/contents.cpp:298
+#: ../contrib/packagekit-plugin/src/contents.cpp:294
msgid "Getting package information..."
msgstr "Hämtar paketinformation..."
#. TRANSLATORS: run an applicaiton
-#: ../contrib/browser-plugin/src/contents.cpp:304
+#: ../contrib/packagekit-plugin/src/contents.cpp:300
#, c-format
msgid "Run %s"
msgstr "Kör %s"
#. TRANSLATORS: show the installed version of a package
-#: ../contrib/browser-plugin/src/contents.cpp:310
+#: ../contrib/packagekit-plugin/src/contents.cpp:306
msgid "Installed version"
msgstr "Installerad version"
#. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/src/contents.cpp:318
+#: ../contrib/packagekit-plugin/src/contents.cpp:314
#, c-format
msgid "Run version %s now"
msgstr "Kör version %s nu"
-#: ../contrib/browser-plugin/src/contents.cpp:324
+#: ../contrib/packagekit-plugin/src/contents.cpp:320
msgid "Run now"
msgstr "Kör nu"
#. TRANSLATORS: update to a new version of the package
-#: ../contrib/browser-plugin/src/contents.cpp:330
+#: ../contrib/packagekit-plugin/src/contents.cpp:326
#, c-format
msgid "Update to version %s"
msgstr "Uppdatera till version %s"
#. TRANSLATORS: To install a package
-#: ../contrib/browser-plugin/src/contents.cpp:336
+#: ../contrib/packagekit-plugin/src/contents.cpp:332
#, c-format
msgid "Install %s now"
msgstr "Installera %s nu"
#. TRANSLATORS: the version of the package
-#: ../contrib/browser-plugin/src/contents.cpp:339
+#: ../contrib/packagekit-plugin/src/contents.cpp:335
msgid "Version"
msgstr "Version"
#. TRANSLATORS: noting found, so can't install
-#: ../contrib/browser-plugin/src/contents.cpp:344
+#: ../contrib/packagekit-plugin/src/contents.cpp:340
msgid "No packages found for your system"
msgstr "Inga paket hittades för ditt system"
#. TRANSLATORS: package is being installed
-#: ../contrib/browser-plugin/src/contents.cpp:349
+#: ../contrib/packagekit-plugin/src/contents.cpp:345
msgid "Installing..."
msgstr "Installerar..."
@@ -851,114 +601,13 @@ msgstr "Installerar..."
msgid "PackageKit Catalog"
msgstr "Katalog för PackageKit"
-#: ../data/packagekit-package-list.xml.in.h:1
-msgid "PackageKit Package List"
-msgstr "Paketlista för PackageKit"
-
#: ../data/packagekit-servicepack.xml.in.h:1
msgid "PackageKit Service Pack"
msgstr "Servicepaket för PackageKit"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:1
-msgid "Accept EULA"
-msgstr "Acceptera slutanvändaravtal"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:2
-msgid "Authentication is required to accept a EULA"
-msgstr "Autentisering krävs för att acceptera ett slutanvändaravtal"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:3
-#, fuzzy
-msgid ""
-"Authentication is required to cancel a task that was not started by yourself"
-msgstr "Autentisering krävs för att ändra parametrar för programvarukällor"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:4
-msgid "Authentication is required to change software source parameters"
-msgstr "Autentisering krävs för att ändra parametrar för programvarukällor"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:5
-#, fuzzy
-msgid ""
-"Authentication is required to consider a key used for signing packages as "
-"trusted"
-msgstr "Autentisering krävs för att uppdatera paketlistorna"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:6
-#, fuzzy
-msgid "Authentication is required to install a signed package"
-msgstr "Autentisering krävs för att installera ett paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:7
-#, fuzzy
-msgid "Authentication is required to install an untrusted package"
-msgstr "Autentisering krävs för att installera ett paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:8
-#, fuzzy
-msgid "Authentication is required to refresh the system sources"
-msgstr "Autentisering krävs för att uppdatera paketlistorna"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid "Authentication is required to remove packages"
-msgstr "Autentisering krävs för att ta bort paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:10
-msgid "Authentication is required to rollback a transaction"
-msgstr "Autentisering krävs för att rulla tillbaka en transaktion"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:11
-#, fuzzy
-msgid ""
-"Authentication is required to set the network proxy used for downloading "
-"packages"
-msgstr "Autentisering krävs för att ta bort paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
-msgid "Authentication is required to update packages"
-msgstr "Autentisering krävs för att uppdatera paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
-msgid "Cancel foreign task"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
-msgid "Change software source parameters"
-msgstr "Ãndra parametrar för programvarukällor"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
-#, fuzzy
-msgid "Install signed package"
-msgstr "Installerar paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
-msgid "Install untrusted local file"
-msgstr "Installera opålitlig lokal fil"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
-msgid "Refresh system sources"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
-msgid "Remove package"
-msgstr "Ta bort paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
-msgid "Rollback to a previous transaction"
-msgstr "Rulla tillbaka till en tidigare transaktion"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:20
-msgid "Set network proxy"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:21
-msgid "Trust a key used for signing packages"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:22
-#, fuzzy
-msgid "Update packages"
-msgstr "Uppdatera paket"
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr "Paketlista för PackageKit"
#: ../src/pk-main.c:86
msgid "Startup failed due to security policies on this machine."
@@ -970,114 +619,147 @@ msgstr "Detta kan inträffa av två anledningar:"
#: ../src/pk-main.c:88
msgid "The correct user is not launching the executable (usually root)"
-msgstr "Det är inte korrekt användare (vanligtvis root) som startar programmet"
+msgstr "Den korrekta användaren startar inte den körbara filen (vanligtvis root)"
#: ../src/pk-main.c:89
-msgid ""
-"The org.freedesktop.PackageKit.conf file is not installed in the system "
-"directory:"
-msgstr ""
-"Filen org.freedesktop.PackageKit.conf är inte installerad i systemkatalogen:"
+msgid "The org.freedesktop.PackageKit.conf file is not installed in the system directory:"
+msgstr "Filen org.freedesktop.PackageKit.conf är inte installerad i systemkatalogen:"
-#: ../src/pk-main.c:188
+#: ../src/pk-main.c:187
msgid "Packaging backend to use, e.g. dummy"
msgstr "Paketingsbakände att använda, t.ex. dummy"
-#: ../src/pk-main.c:190
+#: ../src/pk-main.c:189
msgid "Daemonize and detach from the terminal"
-msgstr "Bli demon och koppla loss från terminalen"
+msgstr "Demonisera och koppla loss från terminalen"
-#: ../src/pk-main.c:194
+#: ../src/pk-main.c:193
msgid "Disable the idle timer"
msgstr "Inaktivera tidsgräns för inaktivitet"
-#: ../src/pk-main.c:196
+#: ../src/pk-main.c:195
msgid "Show version and exit"
msgstr "Visa version och avsluta"
-#: ../src/pk-main.c:198
+#: ../src/pk-main.c:197
msgid "Exit after a small delay"
msgstr "Avsluta efter en mindre fördröjning"
-#: ../src/pk-main.c:200
+#: ../src/pk-main.c:199
msgid "Exit after the engine has loaded"
msgstr "Avsluta efter att motorn har lästs in"
-#: ../src/pk-main.c:214
+#: ../src/pk-main.c:213
msgid "PackageKit service"
msgstr "PackageKit-tjänst"
-#: ../src/pk-main.c:250
+#: ../src/pk-main.c:249
msgid "Cannot connect to the system bus"
msgstr "Kan inte ansluta till systembussen"
-#: ../src/pk-main.c:299
+#: ../src/pk-main.c:298
#, c-format
msgid "Error trying to start: %s\n"
msgstr "Fel vid försök att starta: %s\n"
#~ msgid "This tool could not remove the packages: '%s'"
#~ msgstr "Detta verktyg kunde inte ta bort paketen: \"%s\""
+#~ msgid "Accept EULA"
+#~ msgstr "Acceptera slutanvändaravtal"
+#~ msgid "Authentication is required to accept a EULA"
+#~ msgstr "Autentisering krävs för att acceptera ett slutanvändaravtal"
+#~ msgid "Authentication is required to change software source parameters"
+#~ msgstr "Autentisering krävs för att ändra parametrar för programvarukällor"
+
+#, fuzzy
+#~ msgid ""
+#~ "Authentication is required to consider a key used for signing packages as "
+#~ "trusted"
+#~ msgstr "Autentisering krävs för att uppdatera paketlistorna"
+
+#, fuzzy
+#~ msgid "Authentication is required to install a signed package"
+#~ msgstr "Autentisering krävs för att installera ett paket"
+#, fuzzy
+#~ msgid "Authentication is required to install an untrusted package"
+#~ msgstr "Autentisering krävs för att installera ett paket"
+
+#, fuzzy
+#~ msgid "Authentication is required to refresh the system sources"
+#~ msgstr "Autentisering krävs för att uppdatera paketlistorna"
+#~ msgid "Authentication is required to remove packages"
+#~ msgstr "Autentisering krävs för att ta bort paket"
+#~ msgid "Authentication is required to rollback a transaction"
+#~ msgstr "Autentisering krävs för att rulla tillbaka en transaktion"
+
+#, fuzzy
+#~ msgid ""
+#~ "Authentication is required to set the network proxy used for downloading "
+#~ "packages"
+#~ msgstr "Autentisering krävs för att ta bort paket"
+#~ msgid "Authentication is required to update packages"
+#~ msgstr "Autentisering krävs för att uppdatera paket"
+#~ msgid "Change software source parameters"
+#~ msgstr "Ãndra parametrar för programvarukällor"
#~ msgid "Install local file"
#~ msgstr "Installera lokal fil"
+#~ msgid "Install untrusted local file"
+#~ msgstr "Installera opålitlig lokal fil"
+#~ msgid "Remove package"
+#~ msgstr "Ta bort paket"
+#~ msgid "Rollback to a previous transaction"
+#~ msgstr "Rulla tillbaka till en tidigare transaktion"
+#, fuzzy
+#~ msgid "Update packages"
+#~ msgstr "Uppdatera paket"
#~ msgid "Authentication is required to install a local file"
#~ msgstr "Autentisering krävs för att installera en lokal fil"
-
#~ msgid "Authentication is required to install a security signature"
#~ msgstr "Autentisering krävs för att installera en säkerhetssignatur"
-
#~ msgid "Authentication is required to update all packages"
#~ msgstr "Autentisering krävs för att uppdatera alla paket"
-
#~ msgid ""
#~ "Further authentication is required to install an untrusted local file"
#~ msgstr ""
#~ "Ytterligare autentisering krävs för att installera en opålitlig lokal fil"
-
#~ msgid "Refresh package lists"
#~ msgstr "Uppdatera paketlistor"
-
#~ msgid "Update all packages"
#~ msgstr "Uppdatera alla paket"
-
+#~ msgid "Update detail"
+#~ msgstr "Uppdateringsinformation"
+#~ msgid "A system restart is required"
+#~ msgstr "En omstart av systemet krävs"
#~ msgid "A logout and login is required"
#~ msgstr "En utloggning och inloggning krävs"
-
+#~ msgid "An application restart is required"
+#~ msgstr "En omstart av programmet krävs"
#~ msgid "Could not find a package match"
#~ msgstr "Kunde inte hitta ett matchande paket"
-
#~ msgid ""
#~ "Could not find a package with that name to install, or package already "
#~ "installed"
#~ msgstr ""
#~ "Kunde inte hitta ett paket med det namnet att installera, eller så är "
#~ "paketet redan installerat"
-
#~ msgid "Could not find a package with that name to remove"
#~ msgstr "Kunde inte hitta ett paket att ta bort med det namnet"
-
#~ msgid "Cancelled!"
#~ msgstr "Avbruten!"
-
#~ msgid "Could not find a package with that name to update"
#~ msgstr "Kunde inte hitta ett paket att uppdatera med det namnet"
-
#~ msgid "Could not find what packages require this package"
#~ msgstr "Kunde inte hitta vilka paket som kräver detta paket"
-
#~ msgid "Okay to import key?"
#~ msgstr "Ok att importera nyckeln?"
-
#~ msgid "Did not import key"
#~ msgstr "Importerade inte nyckeln"
-
#~ msgid "Did not agree to licence, task will fail"
#~ msgstr "Godkände inte licensen, åtgärden kommer att misslyckas"
-
#~ msgid "Could not open database: %s"
#~ msgstr "Kunde inte öppna databasen: %s"
-
#~ msgid "You probably need to run this program as the root user"
#~ msgstr "Du behöver antagligen köra detta program som root-användaren"
+
commit 57b67a0ea865efd97b5fffaf62a5780e72bc27f9
Author: zodman <zodman at cosmogirl.(none)>
Date: Tue Feb 10 00:17:52 2009 -0600
Update the conary Backend
* Add New XMLCache. the cache implement a new XML files.
* Add search name lookup on shortDesc, longDesc, Name and Categories.
* Edit the string from package_id for add Metadata.
* Add conarypk.py its a New Helper of Conary API.
* The command get-details obtains the Group
diff --git a/backends/conary/Cache.py b/backends/conary/Cache.py
index c3fc43a..34b64b1 100644
--- a/backends/conary/Cache.py
+++ b/backends/conary/Cache.py
@@ -1,86 +1,108 @@
-#!/usr/bin/python
-# Licensed under the GNU General Public License Version 2
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) 2007 Ken VanDine <ken at vandine.org>
-# Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
-
import os
-from conary import errors
-from conary.deps import deps
-from conary import conarycfg, conaryclient
-from conary import dbstore, queryrep, versions, updatecmd
-from conary.local import database
-from conary import trove
-
-
+import sys
+from xml.dom.minidom import parse
+import urllib as url
from pkConaryLog import log
+from conarypk import ConaryPk
+class XMLRepo:
+ xml_path = ""
+ repository = ""
+ def __init__(self, repo, path ):
+ self.xml_path = path
+ self._setRepo(repo)
+
+ def resolve(self, search_trove):
+ """ resolve its a search with name """
+ trove = self._getPackage(search_trove)
+ if trove:
+ return trove
+ else:
+ return None
+
+ def search(self, search):
+ return self._searchPackage(search)
+
+ def _setRepo(self,repo):
+ self.repo = repo
+ doc = self._open()
+ self.label = str( doc.childNodes[0].getAttribute("label") )
-class Cache(object):
- # Database name and path
- dbName = 'cache.db'
- # Someday we might want to make this writable by users
- #if 'HOME' in os.environ:
- # dbPath = '%s/.conary/cache/data/' % os.environ['HOME']
- #else:
- # dbPath = '/var/cache/conary/'
+ def _open(self):
+ try:
+ return self._repo
+ except AttributeError:
+ self._repo = parse( open( self.xml_path + self.repo) )
+ return self._repo
+
+ def _generatePackage(self, package_node ):
+ """ convert from package_node to dictionary """
+ pkg = {}
+ cat = []
+ for node in package_node.childNodes:
+ if pkg.has_key('categorie'):
+ cat.append(str(node.childNodes[0].nodeValue))
+ else:
+ pkg[str(node.nodeName)] = str(node.childNodes[0].nodeValue)
+ pkg["categorie"] = cat
+ return pkg
+
+ def _getPackage(self, name):
+ doc = self._open()
+ results = []
+ for packages in doc.childNodes:
+ for package in packages.childNodes:
+ pkg = self._generatePackage(package)
+ pkg["label"] = self.label
+ if name == pkg["name"]:
+ return pkg
+ return None
+
+ def _searchPackage(self, name):
+ doc = self._open()
+ results = []
+ for packages in doc.childNodes:
+ for package in packages.childNodes:
+ pkg = self._generatePackage(package)
+ pkg["label"] = self.label
+ for i in pkg.keys():
+ if i == "label":
+ continue
+ if i =='categorie':
+ for j in pkg[i]:
+ if name.lower() in j.lower():
+ results.append(pkg)
+ if name.lower() in pkg[i]:
+ results.append(pkg)
+ return results
+
+
+
+class XMLCache:
+ #xml_files = ["foresight.rpath.org at fl:2"]
+ xml_files = []
+ server = "http://packages.foresightlinux.org/cache/"
+ repos = []
dbPath = '/var/cache/conary/'
jobPath = dbPath + 'jobs'
+ xml_path = dbPath + "xmlrepo/"
def __init__(self):
- """ Class to retrieve and cache package information from label. """
+ con = ConaryPk()
+ labels = con.get_labels_from_config()
- self.is_populate_database = False
if not os.path.isdir(self.dbPath):
os.makedirs(self.dbPath)
if not os.path.isdir(self.jobPath):
os.mkdir(self.jobPath)
-
- self.conn = dbstore.connect(os.path.join(self.dbPath, self.dbName))
- self.cursor = self.conn.cursor()
- self.cursor.execute("PRAGMA count_changes=0", start_transaction=False)
-
- if os.path.isfile(os.path.join(self.dbPath, self.dbName)):
- self._validate_tables()
-
- def _validate_tables(self):
- """ Validates that all tables are up to date. """
- #backend = PackageKitBaseBackend(self)
- stmt = ("select tbl_name from sqlite_master "
- "where type = 'table' and tbl_name like 'conary_%'")
- self.cursor.execute(stmt)
- # List of all tables with names that start with "conary_"
- tbllist = self.cursor.fetchall()
- if tbllist == [('conary_packages',)]:
- self.cursor.execute('DROP TABLE conary_packages')
- self.conn.commit()
- tbllist = []
- if tbllist != []:
- return True
- #print "Verified packages table"
- else:
- log.info("Creando tablas")
- # Create all tables if database is empty
- if len(tbllist) == 0:
- self._create_database()
- #ackend.status(STATUS_WAIT)
- self.is_populate_database = True
- self.populate_database()
- return True
+ if not os.path.isdir( self.xml_path ):
+ os.makedirs(self.xml_path )
+
+ for xml_file in labels:
+ if not os.path.exists( self.xml_path + xml_file + ".xml" ):
+ self._fetchXML()
+ for xml_file in labels :
+ self.repos.append(XMLRepo( xml_file + ".xml", self.xml_path ))
def _getJobCachePath(self, applyList):
from conary.lib import sha1helper
@@ -91,7 +113,7 @@ class Cache(object):
jobPath = self._getJobCachePath(applyList)
if os.path.exists(jobPath):
return jobPath
-
+
def cacheUpdateJob(self, applyList, updJob):
jobPath = self._getJobCachePath(applyList)
if os.path.exists(jobPath):
@@ -100,247 +122,65 @@ class Cache(object):
os.mkdir(jobPath)
updJob.freeze(jobPath)
- def conaryquery(self):
- self.cfg = conarycfg.ConaryConfiguration()
- self.client = conaryclient.ConaryClient(self.cfg)
- self.cfg.readFiles()
- self.cfg.initializeFlavors()
- self.repos = self.client.getRepos()
- self.db = conaryclient.ConaryClient(self.cfg).db
-
- troves = queryrep.getTrovesToDisplay(self.repos, None, None, None,
- queryrep.VERSION_FILTER_LEAVES, queryrep.FLAVOR_FILTER_BEST,
- self.cfg.installLabelPath, self.cfg.flavor, None)
-
- packages = []
-
- for troveTuple in troves:
- # troveTuple is probably what we want to store in the cachedb
- # Then use the below methods to present them in a nicer fashion
- if troveTuple[0].endswith(':source'):
- continue
- if ":" in troveTuple[0]:
- fragments = troveTuple[0].split(":")
- trove = fragments[0]
- component = fragments[1]
- else:
- trove = troveTuple[0]
- component = ""
-
- installed = 0
- flavor = troveTuple[2].freeze()
- fullVersion = troveTuple[1].freeze()
- label = str(troveTuple[1].branch().label())
- description = ""
- category = ""
- packagegroup = ""
- size = ""
- packages.append([trove, component, fullVersion, label, flavor,
- description, category, packagegroup, size])
-
- return packages
-
- def connect_memory(self):
- return sqlite.connect(':memory:')
-
- def cursor(self, connection):
- return connection.cursor()
-
- def _create_database(self):
- #FIXME: delete the category column. it's not useful
- """ Creates a blank database. """
- sql = '''CREATE TABLE conary_packages (
- packageId INTEGER,
- trove text,
- component text,
- version text,
- label text,
- flavor text,
- description text,
- category text,
- packagegroup text,
- size text)'''
-
- self.cursor.execute(sql)
-
- sql = '''CREATE TABLE conary_categories (
- categoryId INTEGER,
- categoryName text)'''
-
- self.cursor.execute(sql)
-
- sql = '''CREATE TABLE conary_category_package_map (
- categoryId INTEGER,
- packageId INTEGER)'''
-
- self.cursor.execute(sql)
-
- sql = '''CREATE TABLE conary_licenses (
- licenseId INTEGER,
- licenseName text)'''
-
- self.cursor.execute(sql)
-
- sql = '''CREATE TABLE conary_license_package_map (
- licenseId INTEGER,
- packageId INTEGER)'''
-
- self.cursor.execute(sql)
-
- #self.conn.createIndex('conary_catagories', 'conary_category_name_idx', ['categoryName'])
- #self.conn.createIndex('conary_catagories', 'conary_category_id_idx', ['categoryId'])
- self.conn.commit()
-
-
-
- def commit(self):
- self.cursor.commit()
-
- def getTroves(self, label=None):
- """
- Returns all troves for now. Add filtering capability.
- """
- stmt = ("select distinct trove, version, flavor, description, "
- "category, packagegroup, size from conary_packages")
-
- self.cursor.execute(stmt)
- return self.cursor.fetchall()
-
- def search(self, package, fullVersion=None):
- """
- Returns all troves for now. Add filtering capability.
- """
- #log.debug(package)
- stmt = ("select distinct trove, version, flavor, description, "
- "category, packagegroup, size from conary_packages")
-
- if package and fullVersion:
- stmt = ("select distinct trove, version, flavor from "
- "conary_packages where trove ='%s' and version = '%s'"
- % (package, fullVersion))
- elif package:
- stmt += (" where trove like '%%%s%%' and component = '' order by "
- "version desc" % package)
-
- try:
- self.cursor.execute(stmt)
- results = self.cursor.fetchall()
- log.debug(results)
- return results
- except Exception, e:
- print str(e)
- return None
-
+ def getTroves(self):
+ pass
def searchByGroups(self, groups):
- """
- Returns all troves for given groups. (trove, version, flavor)
- Needs filtering capability.
- ['all'] means all packages
- FIXME: No filtering done on group text - SQL injection
- """
- if not groups:
- groups = ["all"]
-
- if "all" in groups:
- stmt = ("SELECT DISTINCT CP.trove, CP.version, CP.flavor, CC.categoryName"
- " FROM conary_packages CP, conary_categories CC, conary_category_package_map CCMap"
- " WHERE CCMap.packageId = CP.packageId"
- " AND CCMap.categoryId = CC.categoryId"
- " GROUP BY CP.trove, CP.version, CP.flavor"
- " ORDER BY CP.trove, CP.version DESC, CP.flavor")
+ pass
+ def refresh(self):
+ self._fetchXML()
+ def resolve(self, name ):
+ for repo in self.repos:
+ r = repo.resolve(name)
+ if r:
+ return r
else:
- group_string = ", ".join(groups)
- stmt = ("SELECT DISTINCT CP.trove, CP.version, CP.flavor, CC.categoryName"
- " FROM conary_packages CP, conary_categories CC, conary_category_package_map CCMap"
- " WHERE CC.categoryName IN (%s)"
- " AND CCMap.packageId = CP.packageId"
- " AND CCMap.categoryId = CC.categoryId"
- " GROUP BY CP.trove, CP.version, CP.flavor"
- " ORDER BY CP.trove, CP.version DESC, CP.flavor" % group_string)
-
- try:
- self.cursor.execute(stmt)
- return self.cursor.fetchall()
- except Exception, e:
- print str(e)
return None
- def _insert(self, trove):
- """
- Insert trove into database.
- """
- res = self.cursor.execute("SELECT COALESCE(max(packageId), 0) + 1 FROM conary_packages")
- pkgId = res.fetchone()[0] + 1
- trove = [pkgId] + trove[:]
-
- values = [str(field) for field in trove]
- cols = ", ".join("?" * len(trove))
- sql = "INSERT INTO conary_packages VALUES (%s)" % cols
-
- try:
- self.cursor.execute(sql, values)
- #self.conn.commit()
- except Exception, e:
- print str(e)
+ def search(self, search ):
+ repositories_result = []
+ for repo in self.repos:
+ results = repo.search(search)
+ for i in results:
+ repositories_result.append(i)
+ return repositories_result
+
+ def _fetchXML(self ):
+ con = ConaryPk()
+ labels = con.get_labels_from_config()
+ for i in labels:
+ label = i + '.xml'
+ filename = self.xml_path + label
+ wwwfile = self.server + label
+ wget = url.urlopen( wwwfile )
+ openfile = open( filename ,'w')
+ openfile.writelines(wget.readlines())
+ openfile.close()
+ def _getCategorieBase(self, mapDict, categorieList ):
+ if not categorieList:
+ return None
- def _clear_table(self, tableName='conary_packages'):
- """
- Deletes * records from table.
- """
- stmt = "DELETE FROM %s" % tableName
- try:
- self.cursor.execute(stmt)
- except dbstore.sqlerrors.InvalidTable:
- pass
+ tempDict = {}
+ for cat in categorieList:
- def populate_database(self):
- packages = self.conaryquery()
- # Clear table first
- for tblName in ('conary_packages', 'conary_category_package_map',
- 'conary_categories'):
- self._clear_table(tblName)
- log.info("Insertando datos")
- for package in packages:
- self._insert(package)
- self.conn.commit()
- log.info("Datos insertados")
+ if mapDict.has_key(cat):
+ map = mapDict[cat]
+ else:
+ continue
- def _addPackageCategory(self, trv, category):
- res = self.cursor.execute( \
- 'SELECT packageId FROM conary_packages WHERE trove=? and version=? and flavor = ?', trv.getName(), trv.getVersion().freeze(), trv.getFlavor().freeze())
- res = res.fetchone()
- if res:
- # we have a packageID
- pkgId = res[0]
- else:
- # we really should have had this data
- raise RuntimeError
+ if tempDict.has_key(map):
+ tempDict[map] = tempDict[map] + 1
+ else:
+ tempDict[map] = 1
+ tmp = 0
+ t_key = ""
+ for key, value in tempDict.items():
+ if value > tmp:
+ t_key = key
+ tmp = value
+ return t_key
- # now look up/make the categoryId
- res = self.cursor.execute('SELECT categoryId FROM conary_categories WHERE categoryName=?', category)
- res = res.fetchone()
- if not res:
- res = self.cursor.execute('SELECT COALESCE(MAX(categoryId), 0) + 1 FROM conary_categories')
- catId = res.fetchone()[0]
- self.cursor.execute('INSERT INTO conary_categories VALUES(?, ?)',
- catId, category)
- else:
- catId = category
- self.cursor.execute("INSERT INTO conary_category_package_map VALUES(?, ?)", catId, pkgId)
- self.conn.commit()
+if __name__ == '__main__':
+ from conaryBackend import groupMap
+ XMLCache()._getCategorieBase( groupMap, ['GTK', 'Graphics', 'Photography', 'Viewer'])
- def populate_metadata(self, csList):
- for cs in csList:
- for troveCS in cs.iterNewTroveList():
- trv = trove.Trove(troveCS)
- if ':' in trv.getName():
- # components aren't tracked at the moment
- continue
- metadata = trv.getMetadata()
- categories = metadata.get('categories', [])
- for category in categories:
- self._addPackageCategory(trv, category)
- #licenses = metadata.get('licenses', [])
- #for license in licenses:
- # self._addPackageLicense(trv, license)
diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
new file mode 100644
index 0000000..34b64b1
--- /dev/null
+++ b/backends/conary/XMLCache.py
@@ -0,0 +1,186 @@
+import os
+import sys
+from xml.dom.minidom import parse
+import urllib as url
+
+from pkConaryLog import log
+from conarypk import ConaryPk
+class XMLRepo:
+ xml_path = ""
+ repository = ""
+ def __init__(self, repo, path ):
+ self.xml_path = path
+ self._setRepo(repo)
+
+ def resolve(self, search_trove):
+ """ resolve its a search with name """
+ trove = self._getPackage(search_trove)
+ if trove:
+ return trove
+ else:
+ return None
+
+ def search(self, search):
+ return self._searchPackage(search)
+
+ def _setRepo(self,repo):
+ self.repo = repo
+ doc = self._open()
+ self.label = str( doc.childNodes[0].getAttribute("label") )
+
+ def _open(self):
+ try:
+ return self._repo
+ except AttributeError:
+ self._repo = parse( open( self.xml_path + self.repo) )
+ return self._repo
+
+ def _generatePackage(self, package_node ):
+ """ convert from package_node to dictionary """
+ pkg = {}
+ cat = []
+ for node in package_node.childNodes:
+ if pkg.has_key('categorie'):
+ cat.append(str(node.childNodes[0].nodeValue))
+ else:
+ pkg[str(node.nodeName)] = str(node.childNodes[0].nodeValue)
+ pkg["categorie"] = cat
+ return pkg
+
+ def _getPackage(self, name):
+ doc = self._open()
+ results = []
+ for packages in doc.childNodes:
+ for package in packages.childNodes:
+ pkg = self._generatePackage(package)
+ pkg["label"] = self.label
+ if name == pkg["name"]:
+ return pkg
+ return None
+
+ def _searchPackage(self, name):
+ doc = self._open()
+ results = []
+ for packages in doc.childNodes:
+ for package in packages.childNodes:
+ pkg = self._generatePackage(package)
+ pkg["label"] = self.label
+ for i in pkg.keys():
+ if i == "label":
+ continue
+ if i =='categorie':
+ for j in pkg[i]:
+ if name.lower() in j.lower():
+ results.append(pkg)
+ if name.lower() in pkg[i]:
+ results.append(pkg)
+ return results
+
+
+
+class XMLCache:
+ #xml_files = ["foresight.rpath.org at fl:2"]
+ xml_files = []
+ server = "http://packages.foresightlinux.org/cache/"
+ repos = []
+ dbPath = '/var/cache/conary/'
+ jobPath = dbPath + 'jobs'
+ xml_path = dbPath + "xmlrepo/"
+
+ def __init__(self):
+ con = ConaryPk()
+ labels = con.get_labels_from_config()
+
+ if not os.path.isdir(self.dbPath):
+ os.makedirs(self.dbPath)
+ if not os.path.isdir(self.jobPath):
+ os.mkdir(self.jobPath)
+ if not os.path.isdir( self.xml_path ):
+ os.makedirs(self.xml_path )
+
+ for xml_file in labels:
+ if not os.path.exists( self.xml_path + xml_file + ".xml" ):
+ self._fetchXML()
+ for xml_file in labels :
+ self.repos.append(XMLRepo( xml_file + ".xml", self.xml_path ))
+
+ def _getJobCachePath(self, applyList):
+ from conary.lib import sha1helper
+ applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
+ return self.jobPath + '/' + sha1helper.sha1ToString(sha1helper.sha1String(applyStr))
+
+ def checkCachedUpdateJob(self, applyList):
+ jobPath = self._getJobCachePath(applyList)
+ if os.path.exists(jobPath):
+ return jobPath
+
+ def cacheUpdateJob(self, applyList, updJob):
+ jobPath = self._getJobCachePath(applyList)
+ if os.path.exists(jobPath):
+ from conary.lib import util
+ util.rmtree(jobPath)
+ os.mkdir(jobPath)
+ updJob.freeze(jobPath)
+
+ def getTroves(self):
+ pass
+ def searchByGroups(self, groups):
+ pass
+ def refresh(self):
+ self._fetchXML()
+ def resolve(self, name ):
+ for repo in self.repos:
+ r = repo.resolve(name)
+ if r:
+ return r
+ else:
+ return None
+
+ def search(self, search ):
+ repositories_result = []
+ for repo in self.repos:
+ results = repo.search(search)
+ for i in results:
+ repositories_result.append(i)
+ return repositories_result
+
+ def _fetchXML(self ):
+ con = ConaryPk()
+ labels = con.get_labels_from_config()
+ for i in labels:
+ label = i + '.xml'
+ filename = self.xml_path + label
+ wwwfile = self.server + label
+ wget = url.urlopen( wwwfile )
+ openfile = open( filename ,'w')
+ openfile.writelines(wget.readlines())
+ openfile.close()
+ def _getCategorieBase(self, mapDict, categorieList ):
+ if not categorieList:
+ return None
+
+ tempDict = {}
+ for cat in categorieList:
+
+ if mapDict.has_key(cat):
+ map = mapDict[cat]
+ else:
+ continue
+
+ if tempDict.has_key(map):
+ tempDict[map] = tempDict[map] + 1
+ else:
+ tempDict[map] = 1
+ tmp = 0
+ t_key = ""
+ for key, value in tempDict.items():
+ if value > tmp:
+ t_key = key
+ tmp = value
+ return t_key
+
+
+if __name__ == '__main__':
+ from conaryBackend import groupMap
+ XMLCache()._getCategorieBase( groupMap, ['GTK', 'Graphics', 'Photography', 'Viewer'])
+
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 3cdd6d1..c4c4c4d 100644
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -28,17 +28,20 @@ from conary.deps import deps
from conary import dbstore, queryrep, versions, updatecmd
from conary.local import database
from conary import trove
+from conary.conaryclient import cmdline
from packagekit.backend import *
from packagekit.package import *
from conaryCallback import UpdateCallback
from conaryFilter import *
-#from XMLCache import XMLCache as Cache
+from XMLCache import XMLCache as Cache
+from conaryInit import *
# zodman fix
-from Cache import Cache
+#from Cache import Cache
from conaryInit import init_conary_config, init_conary_client
from conary import conarycfg, conaryclient
+from conarypk import ConaryPk
pkpackage = PackagekitPackage()
@@ -100,7 +103,8 @@ groupMap = {
'Viewer' : GROUP_MULTIMEDIA,
'WebBrowser' : GROUP_INTERNET,
'WebDevelopment' : GROUP_PROGRAMMING,
- 'WordProcessor' : GROUP_OFFICE
+ 'WordProcessor' : GROUP_OFFICE,
+ '' : GROUP_UNKNOWN
}
revGroupMap = {}
@@ -171,8 +175,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
frzFlavor = flavor.freeze()
return ','.join([frzVersion, frzFlavor])
- def _thawData(self, data):
- frzVersion, frzFlavor = data.split(',')
+ def _thawData(self, frzVersion, frzFlavor ):
version = versions.ThawVersion(frzVersion)
flavor = deps.ThawFlavor(frzFlavor)
return version, flavor
@@ -185,80 +188,69 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
return ','.join(arches)
@ExceptionHandler
+ def check_installed(self, troveTuple):
+ log.debug("============check installed =========")
+ cli = ConaryPk()
+ result = cli.query(troveTuple[0])
+ if result:
+ installed = INFO_INSTALLED
+ else:
+ installed = INFO_AVAILABLE
+
+ return installed
+
+ @ExceptionHandler
def get_package_id(self, name, versionObj, flavor):
+
version = versionObj.trailingRevision()
+
arch = self._get_arch(flavor)
- data = self._freezeData(versionObj, flavor)
+
+ cache = Cache()
+ pkg = cache.resolve(name)
+ data = versionObj.asString() + "#"
+ if pkg:
+ try:
+ data +=str(pkg)
+ except:
+ pass
return pkpackage.get_package_id(name, version, arch, data)
@ExceptionHandler
def get_package_from_id(self, package_id):
""" package_id(string) =
- "pastebinit;0.7-1-1;x86;/foresight.rpath.org at fl:2-qa/1222042924.172:0.7-1-1,1#x86"
+ "dpaster;0.1-3-1;x86;/foresight.rpath.org at fl:2-qa/0.1-3-1#{'version': '0.1-3-1', 'categorie': [], 'name': 'dpaster', 'label': 'foresight.rpath.org at fl:2-qa'}"
"""
log.info("=========== get package from package_id ======================")
- log.info(package_id)
name, verString, archString, data = pkpackage.get_package_from_id(package_id)
- log.info(data)
- version, flavor = self._thawData(data)
- return name, version, flavor
+ summary = data.split("#")
+ repo = summary[0]
+ metadata = eval(summary[1])
+ cli = ConaryPk()
+ return cli.request_query(name)
- def _do_search(self, searchlist, filters):
+ def _do_search(self,filters, searchlist):
"""
- searchlist(str)ist as the package for search like
- filters(str) as the filter
+ searchlist(str)ist as the package for search like
+ filters(str) as the filter
"""
fltlist = filters.split(';')
- pkgfilter = ConaryFilter(fltlist)
- #pkgfilter = ConaryFilter()
- troveSpecs = [ updatecmd.parseTroveSpec(searchlist,
- allowEmptyName=False) ]
- # get a hold of cached data
cache = Cache()
log.debug((searchlist, fltlist))
- try:
- troveTupleList = cache.search(searchlist)
- log.info("FOUND!!!!!! %s"% str(troveTupleList))
- finally:
- pass
+ troveTupleList = cache.search(searchlist)
- # Remove dupes
- tempDict = {}
- try:
- for element in troveTupleList:
- tempDict[element] = None
- except TypeError:
- del tempDict # move on to the next method
+ if troveTupleList:
+ log.info("FOUND!!!!!! %s " % troveTupleList )
else:
- troveTupleList = tempDict.keys()
-
- # Get the latest first
- troveTupleList.sort()
- troveTupleList.reverse()
-
- for troveTuple in troveTupleList:
- troveTuple = tuple([item.encode('UTF-8') for item in troveTuple])
- name = troveTuple[0]
- version = versions.ThawVersion(troveTuple[1])
- flavor = deps.ThawFlavor(troveTuple[2])
- troveTuple = tuple([name, version, flavor])
- log.info("TROVETUPLE %s" % str(troveTuple))
- installed = self.check_installed(troveTuple)
+ log.info("NOT FOUND %s " % searchlist )
- if installed is "installed":
- pkgfilter.add_installed([troveTuple])
- log.info(" === Installed ========= %s" % name)
- else:
- pkgfilter.add_available([troveTuple])
- log.info("=== Available====== %s" % name)
+ for troveDict in troveTupleList:
+ log.info(" doing resolve ")
+ log.info(troveDict)
+ self.resolve( fltlist[0] , [ troveDict['name'] ] )
- # we couldn't do this when generating the list
-
- package_list = pkgfilter.post_process()
- log.info("package_list %s" %package_list)
- self._show_package_list(package_list)
def _get_update(self, applyList, cache=True):
updJob = self.client.newUpdateJob()
@@ -295,38 +287,51 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
applyList = [(name, (None, None), (version, flavor), True)]
return self._do_update(applyList)
+ def _convertPackage(self, pkg ):
+ #version = versions.ThawVersion(pkg['version'])
+ pass
@ExceptionHandler
- def resolve(self, filters, packages):
+ def resolve(self, filters, package ):
+ """
+ @filters (list) list of filters
+ @package (list ) list with packages name for resolve
+ """
self.allow_cancel(True)
self.percentage(None)
self.status(STATUS_INFO)
log.info("======== resolve =========")
- log.info("filters: %s package:%s " % (filters, packages))
- if len(packages):
- for i in packages:
- self._do_search(i, filters)
+ log.info("filters: %s package:%s " % (filters, package))
+
+ cache = Cache()
+ pkg_dict = cache.resolve( package[0] )
+
+ if pkg_dict is None:
+ self.error(ERROR_INTERNAL_ERROR, "Package Not found on repository")
+
+ filter = ConaryFilter(filters)
+
+ installed = filter._pkg_is_installed( pkg_dict )
+
+ conary_cli = ConaryPk()
+
+ troveTuple = conary_cli.request_query( package[0] )
+
+ log.info(">>> %s" % troveTuple)
+
+ if installed:
+ filter.add_installed( troveTuple )
else:
- self._do_search(packages, filters)
+ filter.add_available( troveTuple )
- @ExceptionHandler
- def check_installed(self, troveTuple):
- log.debug("============check installed =========")
- log.info(troveTuple)
- db = conaryclient.ConaryClient(self.cfg).db
- try:
- troveTuple = troveTuple[0], troveTuple[1], troveTuple[2]
- localInstall = db.findTrove(None, troveTuple)
- installed = INFO_INSTALLED
- except:
- installed = INFO_AVAILABLE
- log.info(installed)
- return installed
+ package_list = filter.post_process()
+ log.info("package_list %s" % package_list)
+ self._show_package_list(package_list)
- def _pkg_is_installed(self, pkg):
- '''
- Return if the package is installed.
- '''
- return self.check_installed(pkg)
+ #if len(packages):
+ # for i in packages:
+ # self._do_search(i, filters)
+ #else:
+ # self._do_search(packages, filters)
@ExceptionHandler
def search_group(self, filters, key):
@@ -368,23 +373,35 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
# we couldn't do this when generating the list
package_list = pkgfilter.post_process()
+ log.info(package_list)
log.info("package_list %s" % package_list)
self._show_package_list(package_list)
def _show_package_list(self, lst):
- log.info("------------- show_package_list ----------")
- log.info(lst)
+ """
+ HOW its showed on packageKit
+ @lst(list(tuple) = [ ( troveTuple, status ) ]
+ """
for troveTuple, status in lst:
+ # take the basic info
name = troveTuple[0]
version = troveTuple[1]
flavor = troveTuple[2]
+ # get the string id from packagekit
package_id = self.get_package_id(name, version, flavor)
- log.info("pkg id")
- log.info(package_id)
- summary = self._get_metadata(package_id, 'shortDesc') or " "
- #summary = " "
- log.info("####Package %s %s %s" % (package_id, status, summary ))
- self.package(package_id, status, summary)
+
+ # split the list for get Determine info
+ summary = package_id.split(";")
+ repo = summary[3].split("#")[0]
+
+ metadata = eval(summary[3].split("#")[1])
+ log.info("====== show the package ")
+ log.info(metadata)
+ if metadata.has_key("shortDesc"):
+ meta = metadata["shortDesc"]
+ else:
+ meta = " "
+ self.package(package_id, status, meta )
@ExceptionHandler
def search_name(self, options, searchlist):
@@ -396,7 +413,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
self.status(STATUS_QUERY)
log.info("============= search_name ========")
log.info("options: %s searchlist:%s "%(options, searchlist))
- self._do_search(searchlist, options)
+ self._do_search(options, searchlist)
def search_details(self, opt, key):
pass
@@ -460,15 +477,16 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
updJob, suggMap = self._do_update(applyList)
- @ExceptionHandler
+# @ExceptionHandler
def refresh_cache(self):
#log.debug("refresh-cache command ")
self.percentage()
self.status(STATUS_REFRESH_CACHE)
cache = Cache()
- if not cache.is_populate_database:
- self.status(STATUS_WAIT)
- cache.populate_database()
+ cache.refresh()
+ #if not cache.is_populate_database:
+ # self.status(STATUS_WAIT)
+ # cache.populate_database()
@ExceptionHandler
def update(self, package_ids):
@@ -478,11 +496,13 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
self.allow_cancel(True)
self.percentage(0)
self.status(STATUS_RUNNING)
-
+
for package in package_ids.split(" "):
name, version, flavor, installed = self._findPackage(package)
if name:
- self._do_package_update(name, version, flavor)
+ # self._do_package_update(name, version, flavor)
+ cli = ConaryPk()
+ cli.update(name)
else:
self.error(ERROR_PACKAGE_ALREADY_INSTALLED, 'No available updates')
@@ -497,12 +517,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
'''
Implement the {backend}-{install, update}-packages functionality
'''
- log.info(package_ids)
- #for package_id in package_ids.split('%'):
+
for package_id in package_ids:
- log.info(package_id)
name, version, flavor, installed = self._findPackage(package_id)
- log.info((name, version))
+ log.info((name, version, flavor, installed ))
self.allow_cancel(True)
self.percentage(0)
@@ -514,7 +532,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
'Package already installed')
self.status(INFO_INSTALLING)
+ log.info(">>> end Prepare Update")
self._get_package_update(name, version, flavor)
+ self.status(STATUS_WAIT)
+ log.info(">>> end Prepare Update")
self._do_package_update(name, version, flavor)
else:
self.error(ERROR_PACKAGE_ALREADY_INSTALLED, 'Package was not found')
@@ -629,7 +650,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
self.update_detail(package_id, update, obsolete, vendor_url, bz_url, cve_url,
reboot, desc, changelog="", state="", issued="", updated="")
- @ExceptionHandler
+ # @ExceptionHandler
def get_details(self, package_ids):
'''
Print a detailed description for a given package
@@ -642,26 +663,52 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
log.info(package_ids[0])
package_id = package_ids[0]
name, version, flavor, installed = self._findPackage(package_id)
+
+ summary = package_id.split(";")
+ log.info("====== summar")
+ log.info(summary)
+
+ repo = summary[3].split("#")[0]
+ metadata = eval(summary[3].split("#")[1])
+ short_package_id = ""
+ for i in summary[0:3]:
+ short_package_id += i +';'
- log.info("name--------------------")
- log.info((package_id, name))
+ log.info("Metadata--------------------")
+ log.info(metadata)
if name:
- shortDesc = self._get_metadata(package_id, 'shortDesc') or name
- longDesc = self._get_metadata(package_id, 'longDesc') or ""
- url = "http://www.foresightlinux.org/packages/" + name + ".html"
- categories = self._get_metadata(package_id, 'categories') or "unknown"
+ if metadata.has_key("shortDesc"):
+ shortDesc = metadata["shortDesc"]
+ else:
+ shortDesc = ""
+ if metadata.has_key("longDesc"):
+ longDesc = metadata["longDesc"]
+ else:
+ longDesc = ""
+ url = "http://www.foresightlinux.org/packages/%s.html" % name
+
+ categories = ""
+ if metadata.has_key("categorie"):
+ categories = Cache()._getCategorieBase( groupMap, metadata['categorie'])
+ else:
+ categories = None
# Package size goes here, but I don't know how to find that for conary packages.
- self.details(package_id, None, categories, longDesc, url, 0)
+ self.details(short_package_id, None, categories, longDesc, url, 0)
else:
self.error(ERROR_PACKAGE_NOT_FOUND, 'Package was not found')
def _show_package(self, name, version, flavor, status):
''' Show info about package'''
package_id = self.get_package_id(name, version, flavor)
- summary = self._get_metadata(package_id, 'shortDesc') or ""
- self.package(package_id, status, summary)
+ summary = package_id.split(";")
+ metadata = eval(summary[3].split("#")[1])
+ if metadata.has_key("shortDesc"):
+ meta = metadata["shortDesc"]
+ else:
+ meta = " "
+ self.package(package_id, status, meta)
def _get_status(self, notice):
# We need to figure out how to get this info, this is a place holder
@@ -680,14 +727,19 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
self.status(STATUS_INFO)
log.info("============== get_updates ========================")
updateItems = self.client.fullUpdateItemList()
+ log.info("============== end get_updates ========================")
applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
+ log.info("_get_update ....")
updJob, suggMap = self._get_update(applyList)
+ log.info("_get_update ....end.")
jobLists = updJob.getJobs()
+ log.info("get Jobs")
totalJobs = len(jobLists)
for num, job in enumerate(jobLists):
status = '2'
+ log.info( (num, job) )
name = job[0][0]
# On an erase display the old version/flavor information.
@@ -711,12 +763,16 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
'''
log.info("========== _findPackage ==========")
log.info(package_id)
- name, version, flavor = self.get_package_from_id(package_id)
- troveTuple = (name, version, flavor)
- log.info("======== trove ")
- log.info(troveTuple)
- installed = self.check_installed(troveTuple)
- return name, version, flavor, installed
+ troveTuples = self.get_package_from_id(package_id)
+ for troveTuple in troveTuples:
+ log.info("======== trove ")
+ log.info(troveTuple)
+ installed =self.check_installed(troveTuple)
+ log.info(installed)
+ name, version, flavor = troveTuple
+ return name, version, flavor, installed
+ else:
+ self.error(ERROR_INTERNAL_ERROR, "package_id Not Correct ")
def repo_set_data(self, repoid, parameter, value):
'''
diff --git a/backends/conary/conaryFilter.py b/backends/conary/conaryFilter.py
index 635e0e2..7475213 100644
--- a/backends/conary/conaryFilter.py
+++ b/backends/conary/conaryFilter.py
@@ -24,7 +24,8 @@ from packagekit.filter import *
import re
from pkConaryLog import log
-from conaryInit import conary_db
+from conarypk import ConaryPk
+
class ConaryFilter(PackagekitFilter):
def _pkg_get_unique(self, pkg):
@@ -44,18 +45,11 @@ class ConaryFilter(PackagekitFilter):
'''
Return if the packages are installed
'''
- log.info("======= FILTER ===== " )
- log.info(pkg)
- troveTuple = pkg
- db = conary_db()
- try:
- troveTuple = troveTuple[0], troveTuple[1], troveTuple[2]
- localInstall = db.findTrove(None, troveTuple)
- installed = True
- except:
- installed = False
- log.info("Installed ???")
- log.info(installed)
- return installed
+ conary_cli = ConaryPk()
+ result = conary_cli.query(pkg['name'])
+ if result:
+ return True
+ else:
+ return False
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
new file mode 100644
index 0000000..d44f14e
--- /dev/null
+++ b/backends/conary/conarypk.py
@@ -0,0 +1,117 @@
+#!/usr/bin/python
+### compatible with conary 2.0.35
+### greets mkj
+### zodman at foresightlinux.org under the WTFPL http://sam.zoy.org/wtfpl/
+
+from conary.conaryclient import ConaryClient, cmdline
+from conary import conarycfg
+from conary.versions import Label
+from conary.errors import TroveNotFound
+from conary.conaryclient.update import NoNewTrovesError
+
+
+class ConaryPk:
+ def __init__(self):
+ # get configs from /etc/conary
+ cfg = conarycfg.ConaryConfiguration( readConfigFiles = True)
+ # get if the machine its x86 or x86_64
+ cfg.initializeFlavors()
+ self.cfg = cfg
+
+ cli = ConaryClient(cfg)
+
+ # labels enable on /etc/conary/config.d/
+ self.default_label = self.cfg.installLabelPath
+
+ # get if x86 or x86_64
+ self.flavor = self.cfg.flavor[0]
+ # for client
+ self.cli = cli
+ # for query on system (database)
+ self.db = cli.db
+ # for request query on repository (repos)
+ self.repos = cli.repos
+
+ def _get_db(self):
+ """ get the database for do querys """
+ return self.db
+
+ def _get_repos(self):
+ """ get repos for do request query """
+ return self.repos
+
+ def label(self, installLabel = None):
+ """ get label from config or custom installLabel """
+ if installLabel:
+ return Label(installLabel)
+ return self.default_label
+ def get_labels_from_config(self):
+ labels = []
+ for i in self.default_label:
+ if "foresight.rpath.org" in i.asString():
+ labels.append(i.asString())
+ return labels
+ def query(self, name):
+ """ do a conary query """
+ if name is None or name == "":
+ return []
+ db = self._get_db()
+ try:
+ troves = db.findTrove( None ,(name , None, None ))
+ #return db.getTroves(troves)
+ return troves
+ except TroveNotFound:
+ return []
+
+ def request_query(self, name, installLabel = None):
+ """ Do a conary request query """
+ label = self.label( installLabel )
+ repos = self._get_repos()
+ try:
+ troves = repos.findTrove( label ,( name, None ,self.flavor ) )
+ #return repos.getTroves(troves)
+ return troves
+ except TroveNotFound:
+ return []
+
+ def get_metadata( self, name , installLabel = None):
+ pass
+
+ def remove(self, name):
+ return self.update(name, remove = True )
+ def update(self, name, installLabel= None, remove = False ):
+ cli = self.cli
+ #get a trove
+ troves = self.request_query(name, installLabel)
+ for trove in troves:
+ trovespec = self.trove_to_spec( trove, remove )
+ try:
+ # create a Job
+ job = cli.newUpdateJob()
+ # Add Update task to Job
+ cli.prepareUpdateJob(job, cmdline.parseChangeList(trovespec))
+ # Apply the Job
+ cli.applyUpdateJob(job)
+ # im rulz
+ return "Update Success of %s" % trovespec
+ except NoNewTrovesError:
+ return "no new Troves Found by %s " % trovespec
+
+ def trove_to_spec(self, trove, remove = False ):
+ # add a -app=blah.rpath.org at rpl:devel for remove packages
+ if remove:
+ tmp = '-'
+ else:
+ tmp = ""
+ return tmp + cmdline.toTroveSpec( trove[0], str(trove[1]), None)
+
+if __name__ == "__main__":
+ conary = ConaryPk()
+ print conary.query("dpaster")
+ #print conary.query("gimpasdas")
+ #print conary.request_query("dpaster",'zodyrepo.rpath.org at rpl:devel')
+ #print conary.request_query("gimp")
+ #print conary.request_query("gimpasdasd")
+ #print conary.update("amsn")
+ #print conary.remove("amsn")
+
More information about the PackageKit-commit
mailing list