From: "André Erdmann" <dywi@mailerd.de>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/depres/simpledeprule/
Date: Sat, 23 Aug 2014 19:03:04 +0000 (UTC) [thread overview]
Message-ID: <1406653206.1cc91c92cd6103185598fa2e4ce9829a01a30b2d.dywi@gentoo> (raw)
Message-ID: <20140823190304.2eGutl9JRO7_DyoE5YhXMc6FkSg-UUKHh5RfMrD_UGc@z> (raw)
commit: 1cc91c92cd6103185598fa2e4ce9829a01a30b2d
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Tue Jul 29 17:00:06 2014 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Tue Jul 29 17:00:06 2014 +0000
URL: http://sources.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=1cc91c92
roverlay/depres, slot rules: "wide match"
In continuation of commit #50bd6d5aac48317c46b777acf9c1836e792bff58,
make the slot match behavior configurable (depending on the slot rule,
not the dep env<-package).
---
roverlay/depres/simpledeprule/rules.py | 142 +++++++++++++++++++++++----------
1 file changed, 98 insertions(+), 44 deletions(-)
diff --git a/roverlay/depres/simpledeprule/rules.py b/roverlay/depres/simpledeprule/rules.py
index 7ba4967..df767ba 100644
--- a/roverlay/depres/simpledeprule/rules.py
+++ b/roverlay/depres/simpledeprule/rules.py
@@ -27,6 +27,8 @@ from roverlay.depres.simpledeprule.util import \
from roverlay.depres.simpledeprule.abstractrules import \
SimpleRule, FuzzySimpleRule
+import roverlay.depres.depenv
+
@@ -100,6 +102,12 @@ class RuleConstructor ( object ):
# # unsafe, could be used to inject "$(rm -rf /)" etc.
# kwargs ['slot_operator'] = value
+ elif opt == 'wide_match':
+ if not has_value:
+ kwargs ['allow_wide_match'] = True
+ else:
+ raise NotImplementedError("wide_match value")
+
elif opt == '*':
kwargs ['slot_operator'] = '*'
@@ -232,8 +240,17 @@ class SimpleFuzzySlotDependencyRule ( FuzzySimpleRule ):
# 'slot' : '{slot}',
# }
- #RULE_PREFIX = '~'
- RULE_PREFIX = SimpleFuzzyDependencyRule.RULE_PREFIX
+ #RULE_PREFIX = '~'
+ RULE_PREFIX = SimpleFuzzyDependencyRule.RULE_PREFIX
+
+ # version relation operators that should never be matched in slot dep rules
+ # (bitmask)
+ VMOD_BASE_DENY_MASK = roverlay.depres.depenv.DepEnv.VMOD_NOT
+
+ # operators that should not be matched in nonwide mode (bitmask)
+ # - in addition to the base mask -
+ VMOD_WIDE_DENY_MASK = roverlay.depres.depenv.DepEnv.VMOD_GT
+
def __init__ ( self,
priority = 71,
@@ -243,6 +260,7 @@ class SimpleFuzzySlotDependencyRule ( FuzzySimpleRule ):
slotparts = None,
subslotparts = None,
slot_operator = None,
+ allow_wide_match = None,
**kw
):
super ( SimpleFuzzySlotDependencyRule, self ) . __init__ (
@@ -252,11 +270,17 @@ class SimpleFuzzySlotDependencyRule ( FuzzySimpleRule ):
**kw
)
- self.mode = 0 if slot_mode is None else slot_mode
- self.slot_restrict = slot_restrict
- self.slot_operator = slot_operator
- self.slotparts = get_slot_parser ("0") if slotparts is None else slotparts
- self.subslotparts = subslotparts
+ self.mode = 0 if slot_mode is None else slot_mode
+ self.slot_restrict = slot_restrict
+ self.slot_operator = slot_operator
+ self.slotparts = (
+ get_slot_parser ("0") if slotparts is None else slotparts
+ )
+ self.subslotparts = subslotparts
+ self.allow_wide_match = allow_wide_match
+ self.vmod_mask = self.VMOD_BASE_DENY_MASK
+ if not allow_wide_match:
+ self.vmod_mask |= self.VMOD_WIDE_DENY_MASK
if self.mode == 0:
# "default"
@@ -294,13 +318,21 @@ class SimpleFuzzySlotDependencyRule ( FuzzySimpleRule ):
def noexport ( self ):
del self.slot_operator
- del self.mode
+ del self.allow_wide_match
+
if self.slot_restrict:
self.slot_restrict.noexport()
# --- end of noexport (...) ---
def get_resolving_str ( self ):
def gen_opts():
+ if self.allow_wide_match:
+ yield "wide_match"
+
+# yield "vmod_mask={:#x}".format (
+# self.vmod_mask & ~self.VMOD_BASE_DENY_MASK
+# )
+
if self.mode == 2:
yield "open"
else:
@@ -327,52 +359,74 @@ class SimpleFuzzySlotDependencyRule ( FuzzySimpleRule ):
resolv = (
self._orig_resolving_package
if hasattr ( self, '_orig_resolving_package' )
- else self.resolving_package,
+ else self.resolving_package
),
opts = ':'.join ( gen_opts() )
)
# --- end of get_resolving_str (...) ---
def handle_version_relative_match ( self, dep_env, fuzzy ):
+ def get_slotted_result ( dep_env, fuzzy, vmod ):
+ slot_str = None
+ vslot_str = None
+ slot = self.slotparts.get_slot ( fuzzy )
+
+ if slot is not None:
+ if self.subslotparts:
+ subslot = self.subslotparts.get_slot ( fuzzy )
+ if subslot is not None:
+ slot_str = slot + '/' + subslot
+ vslot_str = (
+ self.slotparts.calculate_slot ( fuzzy, slot )
+ + '/'
+ + self.subslotparts.calculate_slot ( fuzzy, subslot )
+ )
+ else:
+ vslot_str = self.slotparts.calculate_slot ( fuzzy, slot )
+ slot_str = slot
+
+ if slot_str and (
+ not self.slot_restrict
+ or self.slot_restrict.accepts ( vslot_str )
+ ):
+ return self._resolving_fmt.format (
+ slot = slot_str,
+ version = fuzzy ['version'],
+ vmod = fuzzy ['version_modifier']
+ )
+ # -- end if <accepted slot>
+ # -- end if <have slot>
+
+ # explicit return
+ return None
+ # --- end of get_slot_result (...) ---
+
res = False
vmod = fuzzy ['vmod']
- # FIXME: improve decision making
- #
- if not ( vmod & (dep_env.VMOD_NOT|dep_env.VMOD_GT) ):
- # can be resolved as slot(ted) dep
- if self.mode == 2:
- res = self.resolving_package
- elif vmod & dep_env.VMOD_EQ:
- slot_str = None
- vslot_str = None
- slot = self.slotparts.get_slot ( fuzzy )
-
- if slot is not None:
- if self.subslotparts:
- subslot = self.subslotparts.get_slot ( fuzzy )
- if subslot is not None:
- slot_str = slot + '/' + subslot
- vslot_str = (
- self.slotparts.calculate_slot ( fuzzy, slot )
- + '/'
- + self.subslotparts.calculate_slot ( fuzzy, subslot )
- )
- else:
- vslot_str = self.slotparts.calculate_slot ( fuzzy, slot )
- slot_str = slot
-
- if slot_str and (
- not self.slot_restrict
- or self.slot_restrict.accepts ( vslot_str )
- ):
- res = self._resolving_fmt.format (
- slot=slot_str,
- version=fuzzy['version'], vmod=fuzzy['version_modifier']
- )
+ if vmod & self.vmod_mask:
+ # can never be resolved as slot(ted) dep
+ return False
- # -- end if vmod != NOT
+## MAYBE TODO
+## elif self.ident and dep_env.want_slotres_override(self.ident):
+### ^^^^^^^^^^? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?
+## want_slot_res, ... = dep_env.get_slotres_override(self.ident,...)
+### ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?
+## if not want_slot_res:
+## return False
+## elif ...:
+## ...
+##
+
+ # else might be resolvable as slot(ted) dep
+ elif self.mode == 2:
+ return self.resolving_package
+ elif vmod & dep_env.VMOD_EQ:
+ return get_slotted_result ( dep_env, fuzzy, vmod )
+ else:
+ return False
+ # -- end if <vmod>
- return res
# --- end of handle_version_relative_match (...) ---
next reply other threads:[~2014-08-23 19:03 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-29 18:29 André Erdmann [this message]
2014-08-23 19:03 ` [gentoo-commits] proj/R_overlay:master commit in: roverlay/depres/simpledeprule/ André Erdmann
-- strict thread matches above, loose matches on Subject: below --
2014-08-23 19:03 André Erdmann
2014-06-25 16:41 André Erdmann
2014-06-05 22:09 André Erdmann
2013-09-03 8:35 André Erdmann
2013-08-27 15:39 André Erdmann
2013-08-21 13:51 André Erdmann
2013-08-21 10:10 André Erdmann
2013-07-23 7:51 André Erdmann
2013-07-10 15:10 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-10 16:16 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-07-03 10:05 André Erdmann
2013-07-03 10:04 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-03 10:05 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-06-05 18:08 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-06-13 16:34 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-06-04 21:06 André Erdmann
2012-08-13 16:34 André Erdmann
2012-08-02 15:14 André Erdmann
2012-08-01 21:10 André Erdmann
2012-07-11 18:43 André Erdmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1406653206.1cc91c92cd6103185598fa2e4ce9829a01a30b2d.dywi@gentoo \
--to=dywi@mailerd.de \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox