[paludis-commits] r4065 - in trunk: . doc/api doc/api/ruby ruby

rbrown at svn.pioto.org rbrown at svn.pioto.org
Wed Dec 12 15:48:15 UTC 2007


Author: rbrown
Date: 2007-12-12 15:48:12 +0000 (Wed, 12 Dec 2007)
New Revision: 4065

Modified:
   trunk/ChangeLog
   trunk/doc/api/index.html.part
   trunk/doc/api/ruby/Makefile.am
   trunk/ruby/Makefile.am
   trunk/ruby/package_id.cc
   trunk/ruby/package_id_TEST.rb
   trunk/ruby/paludis_ruby.hh
Log:
(ruby) Add Mask classes and keys.

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-12-06 19:16:40 UTC (rev 4064)
+++ trunk/ChangeLog	2007-12-12 15:48:12 UTC (rev 4065)
@@ -5,6 +5,10 @@
 only listed in SVN log. For a summary of what has changed between releases,
 see the NEWS file. This file is occasionally pruned to ChangeLog.old.bz2.
 
+2007-12-12 Richard Brown
+
+	* doc/api/, doc/api/ruby/, ruby/: (ruby) Add Mask classes and keys.
+
 2007-12-06 Piotr Jaroszyński
 
 	* paludis/merger.cc: Don't warn when installing empty $ROOT.

Modified: trunk/doc/api/index.html.part
===================================================================
--- trunk/doc/api/index.html.part	2007-12-06 19:16:40 UTC (rev 4064)
+++ trunk/doc/api/index.html.part	2007-12-12 15:48:12 UTC (rev 4065)
@@ -123,8 +123,8 @@
     <tr>
         <td>example_mask</td>
         <td><a href="cplusplus/example__mask_8cc-example.html">C++</a></td>
+        <td><a href="ruby/example_mask.html">Ruby</a></td>
         <td></td>
-        <td></td>
         <td>How to use Mask</td>
     </tr>
     <tr>

Modified: trunk/doc/api/ruby/Makefile.am
===================================================================
--- trunk/doc/api/ruby/Makefile.am	2007-12-06 19:16:40 UTC (rev 4064)
+++ trunk/doc/api/ruby/Makefile.am	2007-12-12 15:48:12 UTC (rev 4065)
@@ -30,6 +30,7 @@
 	example_environment.rb \
 	example_dep_spec.rb \
 	example_dep_tree.rb \
+	example_mask.rb \
 	example_query.rb \
 	example_version_operator.rb \
 	example_version_spec.rb

Modified: trunk/ruby/Makefile.am
===================================================================
--- trunk/ruby/Makefile.am	2007-12-06 19:16:40 UTC (rev 4064)
+++ trunk/ruby/Makefile.am	2007-12-12 15:48:12 UTC (rev 4065)
@@ -53,7 +53,8 @@
 	qualified_package_name.cc \
 	query.cc \
 	repository.cc \
-	version_spec.cc
+	version_spec.cc \
+	mask.cc
 
 IF_RUBY_QA_SOURCES = \
 	qa.cc

Modified: trunk/ruby/package_id.cc
===================================================================
--- trunk/ruby/package_id.cc	2007-12-06 19:16:40 UTC (rev 4064)
+++ trunk/ruby/package_id.cc	2007-12-12 15:48:12 UTC (rev 4065)
@@ -185,6 +185,74 @@
     }
 
     /*
+     * call-seq:
+     *     masks -> Array
+     *
+     * Our masks.
+     */
+    VALUE
+    package_id_masks(VALUE self)
+    {
+        tr1::shared_ptr<const PackageID> * self_ptr;
+        Data_Get_Struct(self, tr1::shared_ptr<const PackageID>, self_ptr);
+        VALUE result(rb_ary_new());
+        for (PackageID::MasksConstIterator it((*self_ptr)->begin_masks()),
+                it_end((*self_ptr)->end_masks()); it_end != it; ++it)
+        {
+            rb_ary_push(result, mask_to_value(*it));
+        }
+        return result;
+    }
+
+    /*
+     * call-seq:
+     *     invalidate_masks -> Qnil
+     *
+     * Invalidate any masks.
+     *
+     * PackageID implementations may cache masks. This can cause problems if the operating environment changes.
+     * Calling this method will clear any masks held by the PackageID.
+     */
+    VALUE
+    package_id_invalidate_masks(VALUE self)
+    {
+        tr1::shared_ptr<const PackageID> * self_ptr;
+        Data_Get_Struct(self, tr1::shared_ptr<const PackageID>, self_ptr);
+        (*self_ptr)->invalidate_masks();
+        return Qnil;
+    }
+
+    /*
+     * Document-method: masked?
+     *
+     * call-seq:
+     *     masked? -> true or false
+     *
+     * Do we have any masks?
+     */
+    /*
+     * Document-method: breaks_portage?
+     *
+     * call-seq:
+     *     breaks_portage? -> true or false
+     *
+     *  Do we break Portage?
+     *
+     *  This method may be used by Environment implementations to apply a "we don't want packages that break Portage" mask.
+     */
+    template <bool (PackageID::* m_) () const>
+    struct PackageIDBool
+    {
+        static VALUE
+        fetch(VALUE self)
+        {
+            tr1::shared_ptr<const PackageID> * self_ptr;
+            Data_Get_Struct(self, tr1::shared_ptr<const PackageID>, self_ptr);
+            return (self_ptr->get()->*m_)() ? Qtrue : Qfalse;
+        }
+    };
+
+    /*
      * Document-method: keywords_key
      *
      * call-seq:
@@ -367,6 +435,11 @@
         rb_define_method(c_package_id, "perform_action", RUBY_FUNC_CAST(&package_id_perform_action), 1);
         rb_define_method(c_package_id, "each_metadata", RUBY_FUNC_CAST(&package_id_each_metadata), 0);
 
+        rb_define_method(c_package_id, "masks", RUBY_FUNC_CAST(&package_id_masks), 0);
+        rb_define_method(c_package_id, "masked?", RUBY_FUNC_CAST((&PackageIDBool<&PackageID::masked>::fetch)), 0);
+        rb_define_method(c_package_id, "invalidate_masks", RUBY_FUNC_CAST(&package_id_invalidate_masks), 0);
+        rb_define_method(c_package_id, "breaks_portage?", RUBY_FUNC_CAST((&PackageIDBool<&PackageID::breaks_portage>::fetch)), 0);
+
         rb_define_method(c_package_id, "virtual_for_key", RUBY_FUNC_CAST((&KeyValue<MetadataPackageIDKey, &PackageID::virtual_for_key>::fetch)), 0);
         rb_define_method(c_package_id, "keywords_key", RUBY_FUNC_CAST((&KeyValue<MetadataCollectionKey<KeywordNameSet>,&PackageID::keywords_key>::fetch)), 0);
         rb_define_method(c_package_id, "iuse_key", RUBY_FUNC_CAST((&KeyValue<MetadataCollectionKey<IUseFlagSet>,&PackageID::iuse_key>::fetch)), 0);

Modified: trunk/ruby/package_id_TEST.rb
===================================================================
--- trunk/ruby/package_id_TEST.rb	2007-12-06 19:16:40 UTC (rev 4064)
+++ trunk/ruby/package_id_TEST.rb	2007-12-12 15:48:12 UTC (rev 4065)
@@ -109,7 +109,8 @@
                 :keywords_key => MetadataKeywordNameSetKey, :iuse_key => MetadataIUseFlagSetKey,
                 :short_description_key => MetadataStringKey, :long_description_key => MetadataStringKey,
                 :contents_key => MetadataContentsKey, :installed_time_key => MetadataTimeKey,
-                :source_origin_key => MetadataStringKey, :binary_origin_key => MetadataStringKey
+                :source_origin_key => MetadataStringKey, :binary_origin_key => MetadataStringKey,
+                :masks => Array
             }.each_pair do | method, type |
 
                 assert_respond_to pid_testrepo, method
@@ -161,6 +162,23 @@
             end
             assert keys.empty?
         end
+
+        def test_masked?
+            assert pid_testrepo.masked?
+            assert !pid_installed.masked?
+        end
+
+        def test_breaks_portage?
+            assert !pid_testrepo.breaks_portage?
+        end
+
+        def test_masks
+            masks = pid_testrepo.masks
+            assert_equal 1, masks.length
+            mask = masks.first
+            assert_kind_of RepositoryMask, mask
+            assert_equal "repository_mask", mask.mask_key.raw_name
+        end
     end
 
     class TestCase_ERepo < Test::Unit::TestCase

Modified: trunk/ruby/paludis_ruby.hh
===================================================================
--- trunk/ruby/paludis_ruby.hh	2007-12-06 19:16:40 UTC (rev 4064)
+++ trunk/ruby/paludis_ruby.hh	2007-12-12 15:48:12 UTC (rev 4065)
@@ -89,6 +89,7 @@
 #endif
         template <typename T_> VALUE dep_tree_to_value(const tr1::shared_ptr<const typename T_::ConstItem> &);
         VALUE package_dep_spec_to_value(const tr1::shared_ptr<const PackageDepSpec> &);
+        VALUE mask_to_value(tr1::shared_ptr<const Mask>);
 
         VersionSpec value_to_version_spec(VALUE v);
         tr1::shared_ptr<const PackageID> value_to_package_id(VALUE);



More information about the paludis-commits mailing list