* start using /var/lib/pisi/index
* improve Distribution file, and have it indexed * other minor improvements
This commit is contained in:
@@ -315,6 +315,7 @@ def add_repo(name, indexuri):
|
|||||||
def remove_repo(name):
|
def remove_repo(name):
|
||||||
if ctx.repodb.has_repo(name):
|
if ctx.repodb.has_repo(name):
|
||||||
ctx.repodb.remove_repo(name)
|
ctx.repodb.remove_repo(name)
|
||||||
|
pisi.util.clean_dir(os.path.join(ctx.config.index_dir(), repo))
|
||||||
ctx.ui.info(_('Repo %s removed from system.') % name)
|
ctx.ui.info(_('Repo %s removed from system.') % name)
|
||||||
else:
|
else:
|
||||||
ctx.ui.error(_('Repository %s does not exist. Cannot remove.')
|
ctx.ui.error(_('Repository %s does not exist. Cannot remove.')
|
||||||
|
|||||||
+11
-2
@@ -26,13 +26,21 @@ class Error(pisi.Error):
|
|||||||
__metaclass__ = autoxml.autoxml
|
__metaclass__ = autoxml.autoxml
|
||||||
|
|
||||||
|
|
||||||
class Distribution:
|
class Distribution(xmlfile.XmlFile):
|
||||||
t_Name = [autoxml.Text, autoxml.mandatory]
|
|
||||||
|
__metaclass__ = autoxml.autoxml
|
||||||
|
|
||||||
|
tag = "PISI"
|
||||||
|
|
||||||
|
t_SourceName = [autoxml.Text, autoxml.mandatory] # name of distribution (source)
|
||||||
t_Description = [autoxml.LocalText, autoxml.mandatory]
|
t_Description = [autoxml.LocalText, autoxml.mandatory]
|
||||||
t_Version = [autoxml.Text, autoxml.mandatory]
|
t_Version = [autoxml.Text, autoxml.mandatory]
|
||||||
t_Type = [autoxml.Text, autoxml.mandatory]
|
t_Type = [autoxml.Text, autoxml.mandatory]
|
||||||
t_Dependencies = [ [autoxml.Text], autoxml.optional, "Dependencies/Distribution"]
|
t_Dependencies = [ [autoxml.Text], autoxml.optional, "Dependencies/Distribution"]
|
||||||
|
|
||||||
|
t_BinaryName = [autoxml.Text, autoxml.optional] # name of repository (binary distro)
|
||||||
|
t_Architecture = [autoxml.Text, autoxml.optional] # architecture identifier
|
||||||
|
|
||||||
|
|
||||||
class Component(xmlfile.XmlFile):
|
class Component(xmlfile.XmlFile):
|
||||||
"representation for component declarations"
|
"representation for component declarations"
|
||||||
@@ -46,6 +54,7 @@ class Component(xmlfile.XmlFile):
|
|||||||
# component name in other languages, for instance in Turkish
|
# component name in other languages, for instance in Turkish
|
||||||
# LocalName for system.base could be sistem.taban or "Taban Sistem",
|
# LocalName for system.base could be sistem.taban or "Taban Sistem",
|
||||||
# this could be useful for GUIs
|
# this could be useful for GUIs
|
||||||
|
|
||||||
t_LocalName = [autoxml.LocalText, autoxml.mandatory]
|
t_LocalName = [autoxml.LocalText, autoxml.mandatory]
|
||||||
|
|
||||||
# Information about the component
|
# Information about the component
|
||||||
|
|||||||
+1
-1
@@ -81,7 +81,7 @@ class DirsDefaults:
|
|||||||
db_dir = "/var/db/pisi"
|
db_dir = "/var/db/pisi"
|
||||||
archives_dir = "/var/cache/pisi/archives"
|
archives_dir = "/var/cache/pisi/archives"
|
||||||
packages_dir = "/var/cache/pisi/packages"
|
packages_dir = "/var/cache/pisi/packages"
|
||||||
index_dir = "/var/cache/pisi/index"
|
index_dir = "/var/lib/pisi/index"
|
||||||
tmp_dir = "/var/tmp/pisi"
|
tmp_dir = "/var/tmp/pisi"
|
||||||
icon_theme_dir = "/usr/share/icons/Tulliana-1.0"
|
icon_theme_dir = "/usr/share/icons/Tulliana-1.0"
|
||||||
kde_dir = "/usr/kde/3.5"
|
kde_dir = "/usr/kde/3.5"
|
||||||
|
|||||||
+11
-7
@@ -10,9 +10,9 @@
|
|||||||
# Please read the COPYING file.
|
# Please read the COPYING file.
|
||||||
#
|
#
|
||||||
|
|
||||||
# PISI constants.
|
"""PISI constants.
|
||||||
# If you have a "magic" constant value this is where it should be
|
If you have a "magic" constant value this is where it should be
|
||||||
# defined.
|
defined."""
|
||||||
|
|
||||||
# Author: Baris Metin <baris@uludag.org.tr
|
# Author: Baris Metin <baris@uludag.org.tr
|
||||||
|
|
||||||
@@ -50,21 +50,25 @@ class Constants:
|
|||||||
self.__c.xdelta_suffix = ".xdelta"
|
self.__c.xdelta_suffix = ".xdelta"
|
||||||
|
|
||||||
# suffix for auto generated ar packages
|
# suffix for auto generated ar packages
|
||||||
self.__c.static_name_suffix = "-static"
|
self.__c.static_name_suffix = "-static" # an admissible use of constant
|
||||||
self.__c.ar_file_suffix = ".a"
|
self.__c.ar_file_suffix = ".a"
|
||||||
|
|
||||||
# directory suffixes for build
|
# directory suffixes for build
|
||||||
self.__c.work_dir_suffix = "/work"
|
self.__c.work_dir_suffix = "/work" # these, too, because we might wanna change 'em
|
||||||
self.__c.install_dir_suffix = "/install"
|
self.__c.install_dir_suffix = "/install"
|
||||||
|
|
||||||
# file/directory names
|
# file/directory names
|
||||||
|
#note: these don't seem very well, constants are used
|
||||||
|
#when it is easier/more meaningful to write the constant name, or
|
||||||
|
#when the constant is bound to change later on.
|
||||||
|
#in some places literals are just as good, for instance
|
||||||
|
#when constant is the same as string. readability is important...
|
||||||
self.__c.actions_file = "actions.py"
|
self.__c.actions_file = "actions.py"
|
||||||
self.__c.files_dir = "files"
|
self.__c.files_dir = "files"
|
||||||
self.__c.metadata_dir = "metadata"
|
self.__c.metadata_dir = "metadata"
|
||||||
self.__c.comar_dir = "comar"
|
self.__c.comar_dir = "comar"
|
||||||
self.__c.files_xml = "files.xml"
|
self.__c.files_xml = "files.xml"
|
||||||
self.__c.metadata_xml = "metadata.xml"
|
self.__c.metadata_xml = "metadata.xml"
|
||||||
self.__c.pisi_index = "pisi-index.xml"
|
|
||||||
|
|
||||||
# functions in actions_file
|
# functions in actions_file
|
||||||
self.__c.setup_func = "setup"
|
self.__c.setup_func = "setup"
|
||||||
@@ -72,7 +76,7 @@ class Constants:
|
|||||||
self.__c.install_func = "install"
|
self.__c.install_func = "install"
|
||||||
|
|
||||||
# file types
|
# file types
|
||||||
# FIXME: these are redundant
|
# FIXME: these seem redundant
|
||||||
self.__c.doc = "doc"
|
self.__c.doc = "doc"
|
||||||
self.__c.man = "man"
|
self.__c.man = "man"
|
||||||
self.__c.info = "info"
|
self.__c.info = "info"
|
||||||
|
|||||||
+26
-3
@@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
"""PISI source/package index"""
|
"""PISI source/package index"""
|
||||||
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import gettext
|
import gettext
|
||||||
@@ -46,16 +45,30 @@ class Index(XmlFile):
|
|||||||
|
|
||||||
tag = "PISI"
|
tag = "PISI"
|
||||||
|
|
||||||
|
t_Distribution = [ component.Distribution, autoxml.optional ]
|
||||||
t_Specs = [ [specfile.SpecFile], autoxml.optional, "SpecFile"]
|
t_Specs = [ [specfile.SpecFile], autoxml.optional, "SpecFile"]
|
||||||
t_Packages = [ [metadata.Package], autoxml.optional, "Package"]
|
t_Packages = [ [metadata.Package], autoxml.optional, "Package"]
|
||||||
t_Components = [ [component.Component], autoxml.optional, "Component"]
|
t_Components = [ [component.Component], autoxml.optional, "Component"]
|
||||||
|
|
||||||
|
def name():
|
||||||
|
return self.distribution.name + self.distribution.repositoryname
|
||||||
|
|
||||||
# read index for a given repo, force means download even if remote not updated
|
# read index for a given repo, force means download even if remote not updated
|
||||||
def read_uri(self, filename, repo = None, force = False):
|
def read_uri(self, filename, repo = None, force = False):
|
||||||
"""Read PSPEC file"""
|
"""Read PSPEC file"""
|
||||||
tmpdir = os.path.join(ctx.config.index_dir(), repo)
|
if repo:
|
||||||
|
tmpdir = os.path.join(ctx.config.index_dir(), repo)
|
||||||
|
else:
|
||||||
|
tmpdir = os.path.join(ctx.config.tmp_dir(), 'index')
|
||||||
|
pisi.util.clean_dir(tmpdir)
|
||||||
|
pisi.util.check_dir(tmpdir)
|
||||||
|
urlfile = file(pisi.util.join_path(tmpdir, 'uri'), 'w')
|
||||||
|
urlfile.write(filename) # uri
|
||||||
self.read(filename, tmpDir=tmpdir, sha1sum=not force,
|
self.read(filename, tmpDir=tmpdir, sha1sum=not force,
|
||||||
compress=File.xmill, sign=File.detached)
|
compress=File.xmill, sign=File.detached)
|
||||||
|
if not repo:
|
||||||
|
repo = self.distribution.name()
|
||||||
|
|
||||||
|
|
||||||
def check_signature(self, filename, repo):
|
def check_signature(self, filename, repo):
|
||||||
tmpdir = os.path.join(ctx.config.index_dir(), repo)
|
tmpdir = os.path.join(ctx.config.index_dir(), repo)
|
||||||
@@ -73,6 +86,8 @@ class Index(XmlFile):
|
|||||||
self.add_component(os.path.join(root, fn))
|
self.add_component(os.path.join(root, fn))
|
||||||
if fn == 'pspec.xml' and not skip_sources:
|
if fn == 'pspec.xml' and not skip_sources:
|
||||||
self.add_spec(os.path.join(root, fn), repo_uri)
|
self.add_spec(os.path.join(root, fn), repo_uri)
|
||||||
|
if fn == 'distribution.xml':
|
||||||
|
self.add_distro(os.path.join(root, fn))
|
||||||
|
|
||||||
def update_db(self, repo, txn = None):
|
def update_db(self, repo, txn = None):
|
||||||
for comp in self.components:
|
for comp in self.components:
|
||||||
@@ -117,6 +132,15 @@ class Index(XmlFile):
|
|||||||
ctx.ui.error(_('Component in %s is corrupt') % path)
|
ctx.ui.error(_('Component in %s is corrupt') % path)
|
||||||
#ctx.ui.error(str(Error(*errs)))
|
#ctx.ui.error(str(Error(*errs)))
|
||||||
|
|
||||||
|
def add_distro(self, path):
|
||||||
|
distro = component.Distribution()
|
||||||
|
try:
|
||||||
|
distro.read(path)
|
||||||
|
self.distribution = distro
|
||||||
|
except:
|
||||||
|
ctx.ui.error(_('Distribution in %s is corrupt') % path)
|
||||||
|
#ctx.ui.error(str(Error(*errs)))
|
||||||
|
|
||||||
def add_spec(self, path, repo_uri):
|
def add_spec(self, path, repo_uri):
|
||||||
ctx.ui.info(_('Adding %s to source index') % path)
|
ctx.ui.info(_('Adding %s to source index') % path)
|
||||||
sf = specfile.SpecFile()
|
sf = specfile.SpecFile()
|
||||||
@@ -131,4 +155,3 @@ class Index(XmlFile):
|
|||||||
else: # create relative path by default
|
else: # create relative path by default
|
||||||
sf.source.sourceURI = util.removepathprefix(repo_uri, path)
|
sf.source.sourceURI = util.removepathprefix(repo_uri, path)
|
||||||
self.specs.append(sf)
|
self.specs.append(sf)
|
||||||
|
|
||||||
|
|||||||
@@ -125,7 +125,6 @@ def getNode(node, tagpath):
|
|||||||
def getAllNodes(node, tagPath):
|
def getAllNodes(node, tagPath):
|
||||||
"""retrieve all nodes that match a given tag path."""
|
"""retrieve all nodes that match a given tag path."""
|
||||||
|
|
||||||
#FIXME: better tag split
|
|
||||||
tags = tagPath.split('/')
|
tags = tagPath.split('/')
|
||||||
|
|
||||||
if len(tags) == 0:
|
if len(tags) == 0:
|
||||||
|
|||||||
@@ -121,7 +121,6 @@ def getNode(node, tagpath):
|
|||||||
def getAllNodes(node, tagPath):
|
def getAllNodes(node, tagPath):
|
||||||
"""retrieve all nodes that match a given tag path."""
|
"""retrieve all nodes that match a given tag path."""
|
||||||
|
|
||||||
#FIXME: better tag split
|
|
||||||
tags = tagPath.split('/')
|
tags = tagPath.split('/')
|
||||||
|
|
||||||
if len(tags) == 0:
|
if len(tags) == 0:
|
||||||
|
|||||||
Reference in New Issue
Block a user