[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