aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Erdmann <dywi@mailerd.de>2012-06-20 12:47:15 +0200
committerAndré Erdmann <dywi@mailerd.de>2012-06-20 12:47:15 +0200
commit52641417e17d63dce2c03f330a02b27a674e82ef (patch)
tree0dca8aec1837e70380e90e1465cff887968c0294 /roverlay
parentutily.py fix + code removed (diff)
downloadR_overlay-52641417e17d63dce2c03f330a02b27a674e82ef.tar.gz
R_overlay-52641417e17d63dce2c03f330a02b27a674e82ef.tar.bz2
R_overlay-52641417e17d63dce2c03f330a02b27a674e82ef.zip
using the overlay module now
* updated PackageInfo * adjusted other modules * fixes, todo/fixme notes modified: roverlay/const.py modified: roverlay/ebuild/__init__.py modified: roverlay/ebuild/construction.py modified: roverlay/ebuild/creation.py modified: roverlay/manifest/helpers.py modified: roverlay/overlay/__init__.py modified: roverlay/overlay/category.py modified: roverlay/overlay/package.py modified: roverlay/packageinfo.py modified: roverlay/rpackage/descriptionreader.py
Diffstat (limited to 'roverlay')
-rw-r--r--roverlay/const.py4
-rw-r--r--roverlay/ebuild/__init__.py17
-rw-r--r--roverlay/ebuild/construction.py61
-rw-r--r--roverlay/ebuild/creation.py12
-rw-r--r--roverlay/manifest/helpers.py1
-rw-r--r--roverlay/overlay/__init__.py77
-rw-r--r--roverlay/overlay/category.py10
-rw-r--r--roverlay/overlay/package.py40
-rw-r--r--roverlay/packageinfo.py145
-rw-r--r--roverlay/rpackage/descriptionreader.py4
10 files changed, 227 insertions, 144 deletions
diff --git a/roverlay/const.py b/roverlay/const.py
index 0ab36f9..a69a33a 100644
--- a/roverlay/const.py
+++ b/roverlay/const.py
@@ -18,7 +18,7 @@ _CONSTANTS = dict (
),
EBUILD = dict (
indent = '\t',
- default_header = [
+ default_header = '\n'.join ( (
'# Copyright 1999-%i Gentoo Foundation' % ( time.gmtime() [0] ),
'# Distributed under the terms of the GNU General Public License v2',
'# $Header: $',
@@ -26,7 +26,7 @@ _CONSTANTS = dict (
'EAPI=4',
'',
'inherit R-packages'
- ],
+ ) ),
),
OVERLAY = dict (
category = 'sci-R',
diff --git a/roverlay/ebuild/__init__.py b/roverlay/ebuild/__init__.py
index 259a352..17e9a8d 100644
--- a/roverlay/ebuild/__init__.py
+++ b/roverlay/ebuild/__init__.py
@@ -16,7 +16,7 @@ class Ebuild ( object ):
self.header = header
# --- end of __init__ (...) ---
- def write ( self, fh, header=None ):
+ def write ( self, fh, header=None, header_is_fallback=False ):
"""Write the ebuild into a file-like object.
arguments:
@@ -25,13 +25,14 @@ class Ebuild ( object ):
if not self.content:
raise Exception ( "ebuild is empty!" )
- if header is None:
- if not self.header is None:
- fh.write ( self.header )
- fh.write ( '\n' )
- else:
- fh.write ( header )
- fh.write ( '\n' )
+ header_order = ( self.header, header ) if header_is_fallback \
+ else ( header, self.header )
+
+ for h in header_order:
+ if not h is None:
+ fh.write ( h )
+ fh.write ( '\n\n' )
+ break
fh.write ( self.content )
fh.write ( '\n' )
diff --git a/roverlay/ebuild/construction.py b/roverlay/ebuild/construction.py
index ed5bca5..3e858a0 100644
--- a/roverlay/ebuild/construction.py
+++ b/roverlay/ebuild/construction.py
@@ -9,25 +9,29 @@ import roverlay.config
from roverlay.util import shorten_str
from roverlay.ebuild import Ebuild
+EBUILD_INDENT = roverlay.config.get ( 'EBUILD.indent', '\t' )
+
+ADD_REMAP = {
+ # pkg vs package
+ 'package_name' : 'pkg_name',
+ 'package_version' : 'pkg_version',
+ 'package_revision' : 'pkg_revision',
+ # TITLE is in DESCRIPTION
+ 'TITLE' : 'DESCRIPTION',
+
+ # TODO: remove these entries by fixing ebuildcreator/ebuildjob
+ 'DEPENDS' : 'DEPEND',
+ 'RDEPENDS' : 'RDEPEND',
+ 'RSUGGESTS' : 'R_SUGGESTS',
+}
+
+IUSE_SUGGESTS = "R_suggests"
+
class EbuildConstruction ( object ):
"""Class that helps to create Ebuild objects."""
- EBUILD_INDENT = roverlay.config.get ( 'EBUILD.indent', '\t' )
-
- ADD_REMAP = {
- # pkg vs package
- 'package_name' : 'pkg_name',
- 'package_version' : 'pkg_version',
- 'package_revision' : 'pkg_revision',
- # TITLE is in DESCRIPTION
- 'TITLE' : 'DESCRIPTION',
- # TODO: remove these entries by fixing ebuildcreator/ebuildjob
- 'DEPENDS' : 'DEPEND',
- 'RDEPENDS' : 'RDEPEND',
- 'RSUGGESTS' : 'R_SUGGESTS',
- }
def __init__ ( self, logger ):
"""Initializes an EbuildConstruction object.
@@ -66,7 +70,7 @@ class EbuildConstruction ( object ):
# -- todo
raise Exception ("Ebuild is readonly.")
- _key = Ebuild.ADD_REMAP [key] if key in Ebuild.ADD_REMAP else key
+ _key = ADD_REMAP [key] if key in ADD_REMAP else key
if _key is None:
self.logger.debug ( "add (%s, %s): filtered key.", key, value )
@@ -121,9 +125,9 @@ class EbuildConstruction ( object ):
ret ['R_SUGGESTS'] = self._data ['R_SUGGESTS']
# +R_SUGGESTS, -R_SUGGESTS?
- ret ['IUSE'].append ( 'R_suggests' )
+ ret ['IUSE'].append ( IUSE_SUGGESTS )
# do these braces help or confuse? TODO FIXME
- ret ['RDEPEND'].append ( '( R_suggests ? ${R_SUGGESTS} )' )
+ ret ['RDEPEND'].append ( '%s? ( ${R_SUGGESTS} )' % IUSE_SUGGESTS )
return ret
@@ -163,7 +167,7 @@ class EbuildConstruction ( object ):
var_value = ' '.join ( value )
elif indent_list:
var_value = (
- '\n' + (indent_level + 1) * Ebuild.EBUILD_INDENT
+ '\n' + (indent_level + 1) * EBUILD_INDENT
).join ( value )
else:
'\n'.join ( value )
@@ -181,7 +185,7 @@ class EbuildConstruction ( object ):
ret ='%s%s="%s"' % (
- indent_level * Ebuild.EBUILD_INDENT,
+ indent_level * EBUILD_INDENT,
varname,
var_value
)
@@ -205,7 +209,7 @@ class EbuildConstruction ( object ):
"""
lines = []
line = None
- last_line_empty = False
+ last_line_empty = True
for line in line_list:
line = line.rstrip()
@@ -273,13 +277,13 @@ class EbuildConstruction ( object ):
try:
ebuild_lines = []
- if 'ebuild_header' in self._data:
- ebuild_lines = copy.copy ( self._data ['ebuild_header'] )
- ebuild_lines.append ( "" )
+ #if 'ebuild_header' in self._data:
+ # ebuild_lines = copy.copy ( self._data ['ebuild_header'] )
+ # ebuild_lines.append ( "" )
- add_easyvar ( ebuild_lines, "PKG_FILE" )
- if 'PKG_ORIGIN' in self._data:
- add_easyvar ( ebuild_lines, "PKG_ORIGIN", None, False )
+ #add_easyvar ( ebuild_lines, "PKG_FILE" )
+ #if 'PKG_ORIGIN' in self._data:
+ # add_easyvar ( ebuild_lines, "PKG_ORIGIN", None, False )
ebuild_lines.append ( "" )
@@ -321,8 +325,9 @@ class EbuildConstruction ( object ):
return remove_newlines ( ebuild_lines )
except ( ValueError, KeyError, NameError ) as err:
- self.logger.exception ( err )
+ #self.logger.exception ( err )
self.logger.error ( "Cannot create ebuild text lines." )
- return None
+ #return None
+ raise
# --- end of make_ebuild_lines (...) ---
diff --git a/roverlay/ebuild/creation.py b/roverlay/ebuild/creation.py
index eed54b2..5fa91ac 100644
--- a/roverlay/ebuild/creation.py
+++ b/roverlay/ebuild/creation.py
@@ -148,15 +148,15 @@ class EbuildCreation ( object ):
have_desc = True
if 'Description' in desc:
- ebuilder.add (
- 'DESCRIPTION',
- ( '// ' if have_description else '' ) + desc ['Description']
- )
+ if have_desc:
+ ebuilder.add ( 'DESCRIPTION', '// ' + desc ['Description'] )
+ else:
+ ebuilder.add ( 'DESCRIPTION', desc ['Description'] )
ebuilder.add ( 'SRC_URI', self.package_info ['package_url'] )
- if self._resolve_dependencies():
+ if self._resolve_dependencies ( ebuilder ):
return ( ebuilder.get_ebuild(), ebuilder.has_rsuggests )
return None
@@ -187,6 +187,7 @@ class EbuildCreation ( object ):
ebuild_info = self._make_ebuild()
if ebuild_info is None:
+ self.logger.info ( "Cannot create an ebuild for this package." )
self.status = -1
else:
self.package_info.set_writeable()
@@ -195,6 +196,7 @@ class EbuildCreation ( object ):
suggests=ebuild_info [1]
)
self.package_info.set_readonly()
+ self.logger.debug ( "Ebuild is ready." )
self.status = 0
except Exception as e:
# log this and set status to fail
diff --git a/roverlay/manifest/helpers.py b/roverlay/manifest/helpers.py
index 78a76e2..09f3296 100644
--- a/roverlay/manifest/helpers.py
+++ b/roverlay/manifest/helpers.py
@@ -198,6 +198,7 @@ class ManifestEnv ( object ):
# set PORDIR_OVERLAY
+ # ! FIXME the overlay module does not enforce usage of this config key
our_env ['PORTDIR_OVERLAY'] = config.get_or_fail (
[ 'OVERLAY', 'dir' ]
)
diff --git a/roverlay/overlay/__init__.py b/roverlay/overlay/__init__.py
index 081f0b8..7e4bbea 100644
--- a/roverlay/overlay/__init__.py
+++ b/roverlay/overlay/__init__.py
@@ -56,8 +56,9 @@ class Overlay ( object ):
#
self._profiles_dir = os.path.join ( self.physical_location, 'profiles' )
- self._catlock = threading.Lock()
- self._categories = dict()
+ self._catlock = threading.Lock()
+ self._categories = dict()
+ self._default_header = config.get ( 'EBUILD.default_header', None )
# --- end of __init__ (...) ---
def _get_category ( self, category ):
@@ -99,11 +100,12 @@ class Overlay ( object ):
"""Presents the ebuilds/metadata stored in this overlay.
arguments:
- * **show_kw -- keywords for package.PackageDir.show(...)
+ * **show_kw -- ignored! (keywords for package.PackageDir.show(...))
returns: None (implicit)
"""
- for cat in self._categories.values(): cat.show ( **show_kw )
+ for cat in self._categories.values():
+ cat.show ( default_header=self._default_header )
# --- end of show (...) ---
def write ( self, **write_kw ):
@@ -112,7 +114,7 @@ class Overlay ( object ):
TODO include Manifest generation in package.py
arguments:
- * **write_kw -- keywords for package.PackageDir.write(...)
+ * **write_kw -- ignored! (keywords for package.PackageDir.write(...))
returns: None (implicit)
@@ -127,7 +129,7 @@ class Overlay ( object ):
for cat in self._categories.values():
if cat.physical_location and not cat.empty():
util.dodir ( cat.physical_location )
- cat.write()
+ cat.write ( default_header=self._default_header )
self._write_categories ( only_active=True )
# --- end of write (...) ---
@@ -243,6 +245,36 @@ class Overlay ( object ):
self._write_profiles_file ( 'use.desc', use_desc + '\n' )
# --- end of _write_usedesc (...) ---
+ def _import_eclass ( self, reimport_eclass ):
+
+ if self.eclass_files:
+ # import eclass files
+ eclass_dir = os.path.join ( self.physical_location, 'eclass' )
+ try:
+ util.dodir ( eclass_dir )
+
+ for eclass in self.eclass_files:
+ src = eclass
+ dest = None
+ if isinstance ( eclass, str ):
+ dest = os.path.basename ( eclass )
+ else:
+ # list-like specification ( src, destname )
+ src = eclass [0]
+ dest = eclass [1]
+
+ dest = os.path.join ( eclass_dir, dest )
+
+ if reimport_eclass or not os.path.isfile ( dest ):
+ shutil.copyfile ( src, dest )
+
+
+ except Exception as e:
+ #self.logger.exception ( e ) TODO try-catch blocks
+ self.logger.critical ( "Cannot import eclass files!" )
+ raise
+ # --- end of _import_eclass (...) ---
+
def _init_overlay ( self, reimport_eclass=False, make_profiles_dir=False ):
"""Initializes the overlay at its physical/filesystem location.
@@ -259,36 +291,11 @@ class Overlay ( object ):
raise Exception ( "no directory assigned." )
try:
- root = self.physical_location
# mkdir overlay root
- os.makedirs ( root, exist_ok=True ) # raises?
-
- if self.eclass_files:
- # import eclass files
- eclass_dir = os.path.join ( root, 'eclass' )
- try:
- util.dodir ( eclass_dir )
-
- for eclass in self.eclass_files:
- src = eclass
- dest = None
- if isinstance ( eclass, str ):
- dest = os.path.basename ( eclass )
- else:
- # list-like specification ( src, destname )
- src = eclass [0]
- dest = eclass [1]
-
- if reimport_eclass or not os.path.isfile ( dest ):
- shutil.copyfile ( src, dest )
-
-
- except Exception as e:
- #self.logger.exception ( e ) TODO try-catch blocks
- self.logger.critical ( "Cannot import eclass files!" )
- raise
-
- # -- eclass
+ os.makedirs ( self.physical_location, exist_ok=True ) # raises?
+
+ self._import_eclass ( reimport_eclass )
+
if make_profiles_dir:
self._write_profiles_dir ( only_active_categories=False )
diff --git a/roverlay/overlay/category.py b/roverlay/overlay/category.py
index 768f296..10e57c2 100644
--- a/roverlay/overlay/category.py
+++ b/roverlay/overlay/category.py
@@ -30,7 +30,7 @@ class Category ( object ):
"""Returns True if this category contains 0 ebuilds."""
return \
len ( self._subdirs ) == 0 or \
- not False in ( d.empty() for d in self._subdirs )
+ not False in ( d.empty() for d in self._subdirs.values() )
# --- end of empty (...) ---
def add ( self, package_info ):
@@ -44,10 +44,10 @@ class Category ( object ):
# TODO make keys available
pkg_name = package_info ['name']
- if not pkg_name in self._content:
+ if not pkg_name in self._subdirs:
self._lock.acquire()
- if not pkg_name in self._content:
- self._content [pkg_name] = PackageDir (
+ if not pkg_name in self._subdirs:
+ self._subdirs [pkg_name] = PackageDir (
pkg_name,
self.logger,
None if self.physical_location is None else \
@@ -55,7 +55,7 @@ class Category ( object ):
)
self._lock.release()
- self._content [pkg_name].add ( package_info )
+ self._subdirs [pkg_name].add ( package_info )
# --- end of add (...) ---
def generate_metadata ( self, **metadata_kw ):
diff --git a/roverlay/overlay/package.py b/roverlay/overlay/package.py
index d43ec1f..cebe568 100644
--- a/roverlay/overlay/package.py
+++ b/roverlay/overlay/package.py
@@ -7,6 +7,7 @@ import os.path
import sys
from roverlay.metadata import MetadataJob
+from roverlay import manifest
SUPPRESS_EXCEPTIONS = True
@@ -22,6 +23,7 @@ class PackageDir ( object ):
* directory -- filesystem location of this PackageDir
"""
self.logger = logger.getChild ( name )
+ self.name = name
self._lock = threading.RLock()
self._packages = dict()
self._metadata = None
@@ -54,7 +56,7 @@ class PackageDir ( object ):
)
# --- end of _get_ebuild_filepath (...) ---
- def write ( self ):
+ def write ( self, default_header=None ):
"""Writes this directory to its (existent!) filesystem location.
returns: None (implicit)
@@ -74,10 +76,21 @@ class PackageDir ( object ):
fh = None
try:
efile = self._get_ebuild_filepath ( ver )
- ebuild = p_info.ebuild
+
+ ebuild = p_info ['ebuild']
fh = open ( efile, 'w' )
- ebuild.write ( fh )
+ if isinstance ( ebuild, str ):
+ if default_header is not None:
+ fh.write ( default_header )
+ fh.write ( '\n\n' )
+ fh.write ( ebuild )
+ fh.write ( '\n' )
+ else:
+ ebuild.write (
+ fh,
+ header=default_header, header_is_fallback=True
+ )
if fh: fh.close()
# adjust owner/perm? TODO
@@ -86,7 +99,9 @@ class PackageDir ( object ):
# this marks the package as 'written to fs'
# TODO update PackageInfo
- p_info ['ebuild_filepath'] = efile
+ p_info.set_writeable()
+ p_info ['ebuild_file'] = efile
+ p_info.set_readonly()
self.logger.info ( "Wrote ebuild %s." % efile )
except IOError as e:
@@ -113,7 +128,7 @@ class PackageDir ( object ):
self._lock.release()
# --- end of write (...) ---
- def show ( self, stream=sys.stderr ):
+ def show ( self, stream=sys.stderr, default_header=None ):
"""Prints this dir (the ebuilds and the metadata) into a stream.
arguments:
@@ -129,10 +144,13 @@ class PackageDir ( object ):
for ver, p_info in self._packages.items():
efile = self._get_ebuild_filepath ( ver )
- ebuild = p_info.ebuild
+ ebuild = p_info ['ebuild']
stream.write ( "[BEGIN ebuild %s]\n" % efile )
- ebuild.write ( stream )
+ ebuild.write (
+ stream,
+ header=default_header, header_is_fallback=True
+ )
stream.write ( "[END ebuild %s]\n" % efile )
mfile = self._get_metadata_filepath()
@@ -185,7 +203,7 @@ class PackageDir ( object ):
shortver = package_info ['ebuild_verstr']
def already_exists ( release=False ):
- if filename in self._packages:
+ if shortver in self._packages:
if release: self._lock.release()
@@ -248,7 +266,7 @@ class PackageDir ( object ):
for p_info in self._packages:
self._metadata.update ( p_info )
else:
- self._metadata.update ( _latest_package() )
+ self._metadata.update ( self._latest_package() )
self._lock.release()
# --- end of generate_metadata (...) ---
@@ -272,8 +290,8 @@ class PackageDir ( object ):
# metadata.xml's full path cannot be used for manifest creation here
# 'cause DISTDIR would be unknown
#
- pkg_info_for_manifest = _latest_package (
- pkg_filter=lambda pkg : not pkg ['ebuild_filepath'] is None,
+ pkg_info_for_manifest = self._latest_package (
+ pkg_filter=lambda pkg : not pkg ['ebuild_file'] is None,
use_lock=True
)
diff --git a/roverlay/packageinfo.py b/roverlay/packageinfo.py
index 7a77ca0..38513ff 100644
--- a/roverlay/packageinfo.py
+++ b/roverlay/packageinfo.py
@@ -9,23 +9,38 @@ import threading
from roverlay import config, util
+#
+# PackageInfo keys known to be used (read) in the roverlay modules:
+#
+# * desc_data in ebuild/creation, metadata/__init__
+# * distdir in manifest/helpers
+# * ebuild in overlay/package
+# * ebuild_file in manifest/helpers, overlay/package
+# * ebuild_verstr in overlay/package
+# * name in ebuild/creation, overlay/category
+# * package_file in rpackage/descriptionreader
+# * package_name in rpackage/descriptionreader
+# * package_url in ebuild/creation
+# * version in ebuild/package (as tuple)
+#
+
LOGGER = logging.getLogger ( 'PackageInfo' )
VIRTUAL_KEYS = dict (
- DISTDIR = frozenset ( ( 'distdir', 'pkg_distdir' ) ),
- # removing this key
- #EBUILD_FILE = frozenset ( ( 'ebuild_file', 'efile' ) ),
- HAS_SUGGESTS = frozenset ( ( 'has_suggests', 'has_rsuggests' ) ),
- SRC_URI = frozenset ( ( 'src_uri', 'package_url', 'url' ) ),
- ALWAYS_FALLBACK = frozenset ( ( 'ebuild_filepath' ) ),
+ SRC_URI = frozenset ( ( 'src_uri', 'package_url' ) ),
+ ALWAYS_FALLBACK = frozenset ( ( 'ebuild', 'ebuild_file' ) ),
)
-
class PackageInfo ( object ):
"""PackageInfo offers easy, subscriptable (['sth']) access to package
information, whether stored or calculated.
"""
+ EBUILDVER_REGEX = re.compile ( '[-]{1,}' )
+ PKGSUFFIX_REGEX = re.compile (
+ config.get_or_fail ( 'R_PACKAGE.suffix_regex' ) + '$'
+ )
+
def __init__ ( self, **initial_info ):
"""Initializes a PackageInfo.
@@ -112,17 +127,30 @@ class PackageInfo ( object ):
raises: KeyError
"""
+ # normal dict access shouldn't be slowed down here
+ if key in self._info: return self._info [key]
+
key_low = key.lower()
+ if key_low in self._info:
+ return self._info [key_low]
+
# 'virtual' keys - calculate result
- if key_low in VIRTUAL_KEYS ['DISTDIR']:
+ elif key_low == 'distdir':
if 'package_dir' in self._info:
return self._info ['package_dir']
- elif 'origin' in self._info:
- return util.get_distdir ( self._info ['origin'] )
+ elif 'package_file' in self._info:
+ return os.path.dirname ( self._info ['package_file'] )
- elif key_low in VIRTUAL_KEYS ['HAS_SUGGESTS']:
+ #elif 'origin' in self._info:
+ else:
+ return os.path.join (
+ config.get_or_fail ( ['DISTFILES', 'root' ] ),
+ self._info ['origin']
+ )
+
+ elif key_low == 'has_suggests':
if 'has_suggests' in self._info:
return self._info ['has_suggests']
@@ -136,17 +164,17 @@ class PackageInfo ( object ):
# comment from ebuild:
## calculate SRC_URI using self._data ['origin'],
## either here or in eclass
- return "**packageinfo needs information from sync module!"
-
- # normal keys
- if key in self._info:
- return self._info [key]
+ return "http://TODO!!!/" + self._info ['package_filename']
+ #return "**packageinfo needs information from sync module!"
- elif key_low in self._info:
- return self._info [key_low]
- elif do_fallback or key_low in VIRTUAL_KEYS ['ALWAYS_FALLBACK']:
+ # fallback
+ if do_fallback:
return fallback_value
+
+ elif key_low in VIRTUAL_KEYS ['ALWAYS_FALLBACK']:
+ return None
+
else:
raise KeyError ( key )
# --- end of get (...) ---
@@ -183,21 +211,27 @@ class PackageInfo ( object ):
self._writelock_acquire()
- if 'filepath' in info:
- self._use_filepath ( info ['filepath'] )
+ for key in info.keys():
+ if key == 'desc':
+ self ['desc_data'] = info [key]
- if 'ebuild' in info:
- self._use_ebuild ( info ['ebuild'] )
+ elif key == 'desc_data':
+ self ['desc_data'] = info [key]
- if 'desc_data' in info
- self ['desc_data'] = info ['desc_data']
- elif 'desc' in info:
- self ['desc_data'] = info ['desc']
+ elif key == 'ebuild':
+ self._use_ebuild ( info [key] )
+ elif key == 'filepath':
+ self._use_filepath ( info [key] )
- if 'suggests' in info:
- self ['has_suggests'] = info ['suggests']
+ elif key == 'origin':
+ self ['origin'] = info [key]
+ elif key == 'suggests':
+ self ['has_suggests'] = info [key]
+
+ else:
+ LOGGER.warning ( "unknown info key %s!" % key )
self._update_lock.release()
# --- end of update (**kw) ---
@@ -209,14 +243,10 @@ class PackageInfo ( object ):
* filepath --
"""
- package_file = os.path.basename ( filepath )
+ filename_with_ext = os.path.basename ( filepath )
# remove .tar.gz .tar.bz2 etc.
- filename = re.sub (
- config.get ( 'R_PACKAGE.suffix_regex' ) + '$',
- '',
- package_file
- )
+ filename = PackageInfo.PKGSUFFIX_REGEX.sub ( '', filename_with_ext )
package_name, sepa, package_version = filename.partition (
config.get ( 'R_PACKAGE.name_ver_separator', '_' )
@@ -228,13 +258,38 @@ class PackageInfo ( object ):
raise Exception ( "cannot use file '%s'." % filename )
return
+ version_str = PackageInfo.EBUILDVER_REGEX.sub ( '.', package_version )
+
+ try:
+ version = tuple ( int ( z ) for z in version_str.split ( '.' ) )
+ self ['version'] = version
+ except ValueError as ve:
+ # version string is malformed
+ # TODO: discard or continue with bad version?
+ logging.error (
+ "Cannot parse version string '%s' for '%s'"
+ % ( filepath, version_str )
+ )
+ raise
+
+
- self ['filepath'] = filepath
- self ['package_file'] = package_file
- self ['package_dir' ] = os.path.dirname ( filepath )
- self ['filename'] = filename
- self ['package_name'] = package_name
- self ['package_version'] = package_version
+ # using package name as name (unless modified later),
+ # using pkg_version for the ebuild version
+ self ['name'] = package_name
+ self ['ebuild_verstr'] = version_str
+
+
+ # for DescriptionReader
+ self ['package_file'] = filepath
+ self ['package_name'] = package_name
+
+ self ['package_filename'] = filename_with_ext
+
+ # keys never used (FIXME remove or use)
+ #self ['filename'] = filename
+ #self ['filepath'] = filepath
+ #self ['package_version'] = package_version
# --- end of _use_filepath (...) ---
def _use_ebuild ( self, ebuild ):
@@ -244,11 +299,5 @@ class PackageInfo ( object ):
* ebuild --
"""
self ['ebuild'] = ebuild
- # set status to ready for overlay
-
- # this does no longer work FIXME
- self ['has_suggests'] = ebuild.has_rsuggests
- # todo move Ebuild funcs to here
- self ['ebuild_dir'] = ebuild.suggest_dir_name()
- self ['ebuild_name'] = ebuild.suggest_name()
+ # ##set status to ready for overlay
# --- end of _use_ebuild (...) ---
diff --git a/roverlay/rpackage/descriptionreader.py b/roverlay/rpackage/descriptionreader.py
index 279aac3..e700907 100644
--- a/roverlay/rpackage/descriptionreader.py
+++ b/roverlay/rpackage/descriptionreader.py
@@ -212,7 +212,7 @@ class DescriptionReader ( object ):
try:
desc_lines = get_desc_from_file (
- self.fileinfo ['filepath'],
+ self.fileinfo ['package_file'],
self.fileinfo ['package_name']
)
@@ -288,7 +288,7 @@ class DescriptionReader ( object ):
if self._parse_read_data ( read_data ):
self.logger.debug ( "Successfully read file '%s' with data = %s.",
- self.fileinfo ['filepath'], str ( read_data )
+ self.fileinfo ['package_file'], str ( read_data )
)
self.desc_data = read_data