<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/ruby/cabar/plugin/auto/action.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/bin.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/component.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/config.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/debian.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/env.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/facet.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/help.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/include.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/lib.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/path.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/perl.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/plugin.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/ruby.rb</filename>
    </added>
    <added>
      <filename>lib/ruby/cabar/plugin/auto/test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -113,25 +113,25 @@ lib/ruby/cabar/facet/standard.rb
 lib/ruby/cabar/loader.rb
 lib/ruby/cabar/main.rb
 lib/ruby/cabar/plugin.rb
-lib/ruby/cabar/plugin/action.rb
-lib/ruby/cabar/plugin/bin.rb
+lib/ruby/cabar/plugin/auto/action.rb
+lib/ruby/cabar/plugin/auto/bin.rb
+lib/ruby/cabar/plugin/auto/component.rb
+lib/ruby/cabar/plugin/auto/config.rb
+lib/ruby/cabar/plugin/auto/debian.rb
+lib/ruby/cabar/plugin/auto/env.rb
+lib/ruby/cabar/plugin/auto/facet.rb
+lib/ruby/cabar/plugin/auto/help.rb
+lib/ruby/cabar/plugin/auto/include.rb
+lib/ruby/cabar/plugin/auto/lib.rb
+lib/ruby/cabar/plugin/auto/path.rb
+lib/ruby/cabar/plugin/auto/perl.rb
+lib/ruby/cabar/plugin/auto/plugin.rb
+lib/ruby/cabar/plugin/auto/ruby.rb
+lib/ruby/cabar/plugin/auto/test.rb
 lib/ruby/cabar/plugin/builder.rb
 lib/ruby/cabar/plugin/cabar.rb
-lib/ruby/cabar/plugin/component.rb
-lib/ruby/cabar/plugin/config.rb
 lib/ruby/cabar/plugin/core.rb
-lib/ruby/cabar/plugin/debian.rb
-lib/ruby/cabar/plugin/env.rb
-lib/ruby/cabar/plugin/facet.rb
-lib/ruby/cabar/plugin/help.rb
-lib/ruby/cabar/plugin/include.rb
-lib/ruby/cabar/plugin/lib.rb
 lib/ruby/cabar/plugin/manager.rb
-lib/ruby/cabar/plugin/path.rb
-lib/ruby/cabar/plugin/perl.rb
-lib/ruby/cabar/plugin/plugin.rb
-lib/ruby/cabar/plugin/ruby.rb
-lib/ruby/cabar/plugin/test.rb
 lib/ruby/cabar/relationship.rb
 lib/ruby/cabar/renderer.rb
 lib/ruby/cabar/renderer/dot.rb</diff>
      <filename>Manifest</filename>
    </modified>
    <modified>
      <diff>@@ -48,7 +48,7 @@ end
 
 # task :publish_docs =&gt; :docs_example
 
-$: &lt;&lt; 'lib/ruby'
+$: &lt;&lt; File.expand_path('lib/ruby')
 
 desc &quot;Run tests in example/&quot;
 task :test_example do
@@ -60,7 +60,7 @@ end
 begin
   require 'spec/rake/spectask'
  
-  SPEC_RUBY_OPTS = [ '-I', 'lib/ruby' ]
+  SPEC_RUBY_OPTS = [ '-I', File.expand_path('lib/ruby') ]
   SPEC_FILES = FileList['test/**/*.spec']
   SPEC_OPTS = ['--color', '--backtrace']
 </diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -80,7 +80,10 @@ module Cabar
 
     # Returns the Facet prototype by its key.
     def self.proto_by_key key
-      raise TypeError, &quot;expected Symbol, given #{key.class}&quot; unless Symbol === key
+      if String === key
+        $stderr.puts &quot;#{$0}: DEPRECATED: expected Symbol, given #{key.class}&quot; 
+        key = key.to_sym
+      end
       @@key_to_proto[key]
     end
 
@@ -106,9 +109,9 @@ module Cabar
         _logger.debug2 do
           &quot;register_prototype(#{facet_proto.inspect}) as #{key.inspect}&quot;
         end
-        $stderr.puts &quot;#{$0}: WARNING: DEPRECATED: Facet key is not a Symbol&quot; unless Symbol === key
-
+        $stderr.puts &quot;#{$0}: DEPRECATED: Facet key is not a Symbol&quot; unless Symbol === key
         key = key.to_sym
+
         if (f = @@key_to_proto[key.to_sym]) and (f != facet_proto)
           _logger.warn &quot;Facet #{f.class} #{f.key.inspect} already registered for #{key.inspect}, ignoring registration of Facet #{facet_proto.class}&quot;
         else
@@ -294,6 +297,7 @@ module Cabar
 
     # Called when a Facet is going to be attached
     # to a Component.
+    #
     # Subclasses may override this.
     def attach_component! c
       c.attach_facet!(self)</diff>
      <filename>lib/ruby/cabar/facet.rb</filename>
    </modified>
    <modified>
      <diff>@@ -97,13 +97,28 @@ module Cabar
     end
 
 
-    # Installs the plugin's parts.
+    # Installs the Plugin's parts.
+    #
+    # If the Plugin has not already been installed,
+    # it's block is invoked by Plugin::Builder.
+    #
+    # This invokes Plugin#plugin_installed and Manager's :plugin_installed observers,
+    # even if the the Plugin has already been installed.
+    #
+    # This allows multiple Main objects to exists while sharing the same Plugin::Manager.
+    #
+    # Called by Manager#register_plugin! the first time the Plugin is loaded and
+    # and in load_plugin! every subsequent call to Manager#load_plugin!.
+    #
     def install!
+      error = nil
       return if @installed
 
       return if @installing
       @installing = true
 
+      # $stderr.puts &quot;  #{self} install! #{@file.inspect}&quot;
+
       # Create a new builder, use the plugin's
       # block to execute the DSL.
       Builder.factory.new(:plugin =&gt; self, :default_doc =&gt; documentation, &amp;@block)
@@ -111,10 +126,28 @@ module Cabar
       @installed = true
 
     rescue Exception =&gt; err
+      error = err
       raise Error.new(:message =&gt; &quot;In plugin #{name.inspect} (in #{file}): #{err.message}&quot;, :error =&gt; err)
       
     ensure
       @installing = false
+      if @installed &amp;&amp; ! error
+        # $stderr.puts &quot;  #{self} plugin_installed!&quot;
+
+        # Notify callback.
+        self.plugin_installed!
+
+        # Notify any active observers (i.e. Loader) so
+        # it can associate existing plugins with the proper Components.
+        # See comp.spec.
+        @manager.notify_observers(:plugin_installed, self)
+      end
+    end
+
+
+    # Callback from install!
+    def plugin_installed!
+      # $stderr.puts &quot;#{self} plugin_installed! NOP&quot;
     end
 
 </diff>
      <filename>lib/ruby/cabar/plugin.rb</filename>
    </modified>
    <modified>
      <diff>@@ -54,6 +54,14 @@ module Cabar
       end
 
 
+      # Defines plugin_installed! callback.
+      def when_installed &amp;blk
+        raise ArgumentError, &quot;no block given&quot; unless block_given?
+        (class &lt;&lt; @plugin; self; end).send(:define_method, :plugin_installed!, &amp;blk)
+        self
+      end
+
+
       # Define :documentation for the next item.
       def doc text
         text &lt;&lt; &quot;\n&quot; unless /\n\Z/ =~ text</diff>
      <filename>lib/ruby/cabar/plugin/builder.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,23 +3,31 @@
 Cabar::Plugin.new :name =&gt; 'cabar', :documentation =&gt; &lt;&lt;&quot;DOC&quot; do
 Cabar standard plugin.
 
-Includes all plugins named 'cabar/plugin/*.rb' found in $:.
+Autoloads all plugins named 'cabar/plugin/auto/*.rb' found along $:.
 DOC
 
   require 'shellwords'
 
-  # Pull any files named cabar/plugin/*.rb
-  # in the current $: ruby lib search path.
-  $:.map { | dir | Dir[&quot;#{dir}/cabar/plugin/*.rb&quot;] }.
+  when_installed do
+    # $stderr.puts &quot;*** #{self} plugin_installed! MORE!&quot;
+
+    # Autoload any plugins named cabar/plugin/auto/*.rb
+    # in the current $: ruby lib search path.
+    $:.map do | dir | 
+      x = Dir[&quot;#{dir}/cabar/plugin/auto/*.rb&quot;]
+      # $stderr.puts &quot;  dir #{dir.inspect} plugins #{x.inspect}&quot;
+      x
+    end.
     flatten.
     reject { | fn | fn == __FILE__ }.
     compact.
     sort.
     uniq.
-    each do | n |
+    each do | n | 
       # $stderr.puts &quot;loading #{n}&quot;
       manager.load_plugin! n
     end
+  end
 
   doc &quot;Internals and introspection.&quot;
   cmd_group [ :cabar, :cbr ] do</diff>
      <filename>lib/ruby/cabar/plugin/cabar.rb</filename>
    </modified>
    <modified>
      <diff>@@ -45,15 +45,16 @@ module Cabar
         file = File.expand_path(file)
 
         if plugins = @plugin_by_file[file]
-          # Notify any active observers (i.e. Loader) so
-          # it can associate existing plugins with the proper Components.
-          # See comp.spec.
+          
+          # Notify callbacks.
           plugins.each do | plugin |
-            notify_observers(:plugin_installed, plugin)
+            plugin.install!
           end
 
           :already
         else
+          # $stderr.puts &quot;  #{self.class} load_plugin! #{file.inspect}&quot;
+          
           @plugin_by_file[file] = [ ]
           _logger.info { &quot;plugin: loading plugin #{file.inspect}&quot; }
           require file
@@ -97,16 +98,16 @@ module Cabar
           return
         end
 
-        # This realizes the plugin.
-        plugin.install!
-
+        # Associate the Plugin with this Manager.
         plugin.manager = self
         @plugins &lt;&lt; plugin
         @plugin_by_name[name] = plugin
         @plugin_by_file[plugin.file] &lt;&lt; plugin
 
-        notify_observers(:plugin_installed, plugin)
-        
+        # This realizes the Plugin.
+        # If this fails here, there might be am invalid Plugin installed in this Manager.
+        plugin.install!
+
         _logger.info { &quot;plugin: #{plugin} installed #{opts.inspect}&quot; }
 
         self</diff>
      <filename>lib/ruby/cabar/plugin/manager.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,6 +8,7 @@ module Cabar
       
       # Redirect standard IO streams.
       def redirect_io opts, &amp;blk
+        error = nil
         @@uid ||= 0
         uid = @@uid += 1
         base_file = &quot;/tmp/#{$$}.#{uid}&quot;
@@ -22,22 +23,30 @@ module Cabar
         end
 
         if stdout = opts.delete(:stdout)
+          $stdout.flush
           old_stdout = $stdout.clone
           tmp_stdout_file = &quot;#{base_file}.out&quot;
           tmp_stdout = File.open(tmp_stdout_file, &quot;w+&quot;)
           $stdout.reopen(tmp_stdout)
+          $stdout = tmp_stdout
         end
 
         if stderr = opts.delete(:stderr)
+          $stderr.flush
           old_stderr = $stderr.clone
           tmp_stderr_file = &quot;#{base_file}.err&quot;
           tmp_stderr = File.open(tmp_stderr_file, &quot;w+&quot;)
           $stderr.reopen(tmp_stderr)
+          $stderr = tmp_stderr
         end
 
         yield
 
+      rescue Object =&gt; err
+        error = err
+
       ensure
+        tmp_stdout.flush if tmp_stdout
         tmp_stdout.close if tmp_stdout
         if tmp_stdout_file
           if String === stdout
@@ -46,6 +55,7 @@ module Cabar
           File.unlink(tmp_stdout_file)
         end
 
+        tmp_stderr.flush if tmp_stderr
         tmp_stderr.close if tmp_stderr
         if tmp_stderr_file
           if String === stderr
@@ -58,6 +68,14 @@ module Cabar
 
         $stdout.reopen(old_stdout) if old_stdout
         $stderr.reopen(old_stderr) if old_stderr
+
+        if error
+          $stderr.puts &quot;ERROR: #{error.inspect}\n#{error.backtrace * &quot;\n&quot;}&quot;
+          if String == stderr
+            $stderr.puts &quot;STDERR:\n#{stderr}\n----&quot;
+          end
+          raise error
+        end
       end
     end # module
   end # module</diff>
      <filename>lib/ruby/cabar/test/io_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,6 +4,7 @@ require 'cabar/test/main_helper'
 describe 'cbr action' do
   include Cabar::Test::MainHelper
 
+  # NOTE: difficulties in correctly capturing stdout from Ruby leads to empty output: ||.
   it 'cbr act do --quiet dir' do
     example_main(:args =&gt; 'act do --quiet dir', 
                  :match_stdout =&gt; &lt;&lt;'EOF')
@@ -14,6 +15,8 @@ EOF
   it 'cbr act do foo' do
     example_main(:args =&gt; 'act do foo', 
                  :match_stdout =&gt; &lt;&lt;'EOF')
+foo c1 1.0
+foo
 component:
   c1/1.0:
     action: 
@@ -21,7 +24,6 @@ component:
         expr: &quot;echo foo \#{name} \#{version}&quot;
         command: &quot;echo foo c1 1.0&quot;
         output: |
-foo c1 1.0
                 |
         result: true
 
@@ -32,7 +34,6 @@ component:
         expr: &quot;echo foo&quot;
         command: &quot;echo foo&quot;
         output: |
-foo
                 |
         result: true
 </diff>
      <filename>test/ruby/cabar/action.spec</filename>
    </modified>
    <modified>
      <diff>@@ -53,23 +53,23 @@ cabar:
   - name:          &quot;c2&quot;
     version:       &quot;1.2&quot;
     enabled:       true
-    directory:     &quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c2/1.2&quot;
-    facet:         [ &quot;action&quot;, &quot;bin&quot;, &quot;env_var&quot;, &quot;lib/ruby&quot; ]
+    directory:     &quot;/home/kurt/local/src/cabar/example/repo/dev/c2/1.2&quot;
+    facet:         [ :&quot;lib/ruby&quot;, :action, :bin, :env_var_C2_2_ENV, :env_var_C2_ENV ]
     requires:      [ &quot;ruby/&quot; ]
     plugins:       [&quot;c2&quot;]
 
   - name:          &quot;c2&quot;
     version:       &quot;1.1&quot;
     enabled:       true
-    directory:     &quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c2/1.1&quot;
-    facet:         [ &quot;bin&quot;, &quot;lib/ruby&quot; ]
+    directory:     &quot;/home/kurt/local/src/cabar/example/repo/dev/c2/1.1&quot;
+    facet:         [ :&quot;lib/ruby&quot;, :bin ]
     requires:      [  ]
 
   - name:          &quot;c2&quot;
     version:       &quot;1.0&quot;
     enabled:       true
-    directory:     &quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/c2/1.0&quot;
-    facet:         [ &quot;lib/ruby&quot; ]
+    directory:     &quot;/home/kurt/local/src/cabar/example/repo/prod/c2/1.0&quot;
+    facet:         [ :&quot;lib/ruby&quot; ]
     requires:      [  ]
 
 EOF</diff>
      <filename>test/ruby/cabar/comp.spec</filename>
    </modified>
    <modified>
      <diff>@@ -9,11 +9,10 @@ describe 'cbr env' do
                  :match_stdout =&gt; [ 
 &lt;&lt;&quot;EOF&quot;
 CABAR_TOP_LEVEL_COMPONENTS=&quot;boc&quot;; export CABAR_TOP_LEVEL_COMPONENTS;
-CABAR_REQUIRED_COMPONENTS=&quot;boc todo c1 boc_customer gems c3 c2 boc_locale boc_config rubygems cabar_rubygems cabar cabar_core ruby derby&quot;; export CABAR_REQUIRED_COMPONENTS;
+CABAR_REQUIRED_COMPONENTS=&quot;boc todo c1 boc_customer gems c3 c2 boc_locale boc_config rubygems cabar_rubygems cabar ruby derby cabar_core&quot;; export CABAR_REQUIRED_COMPONENTS;
 CABAR_PATH_SEP=&quot;:&quot;; export CABAR_PATH_SEP;
-CABAR_FACETS=&quot;bin,boc_config_path,boc_locale_path,components,env_var,env_var,include,lib,lib/perl,lib/ruby,rails/models,rakefile,rubygems,test_runner,tests&quot;; export CABAR_FACETS;
-CABAR_FACET_ENV_VAR_MAP=&quot;bin=PATH,boc_config_path=BOC_CONFIG_PATH,boc_locale_path=BOC_LOCALE_PATH,env_var=C2_2_ENV,env_var=C2_ENV,include=INCLUDE_PATH,lib/perl=PERL5LIB,lib/ruby=RUBYLIB,lib=LD_LIBRARY_PATH,rai
-ls/models=RAILS_MODELS_PATH,rakefile=CABAR_RAKE_FILE,rubygems=GEM_PATH,test_runner=CABAR_TEST_RUNNER,tests=CABAR_TESTS_PATH&quot;; export CABAR_FACET_ENV_VAR_MAP;
+CABAR_FACETS=&quot;bin,boc_config_path,boc_locale_path,components,env_var_C2_2_ENV,env_var_C2_ENV,include,lib,lib/perl,lib/ruby,rakefile,rubygems&quot;; export CABAR_FACETS;
+CABAR_FACET_ENV_VAR_MAP=&quot;bin=PATH,boc_config_path=BOC_CONFIG_PATH,boc_locale_path=BOC_LOCALE_PATH,env_var_C2_2_ENV=C2_2_ENV,env_var_C2_ENV=C2_ENV,include=INCLUDE_PATH,lib/perl=PERL5LIB,lib/ruby=RUBYLIB,lib=LD_LIBRARY_PATH,rakefile=CABAR_RAKE_FILE,rubygems=GEM_PATH&quot;; export CABAR_FACET_ENV_VAR_MAP;
 CABAR_boc_NAME=&quot;boc&quot;; export CABAR_boc_NAME;
 CABAR_boc_VERSION=&quot;1.1&quot;; export CABAR_boc_VERSION;
 CABAR_boc_DIRECTORY=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc&quot;; export CABAR_boc_DIRECTORY;
@@ -87,7 +86,7 @@ CABAR_ruby_NAME=&quot;ruby&quot;; export CABAR_ruby_NAME;
 CABAR_ruby_VERSION=&quot;&lt;&lt;ANY&gt;&gt;&quot;; export CABAR_ruby_VERSION;
 CABAR_ruby_DIRECTORY=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/ruby/std&quot;; export CABAR_ruby_DIRECTORY;
 CABAR_ruby_BASE_DIRECTORY=&quot;&lt;&lt;ANY&gt;&gt;&quot;; export CABAR_ruby_BASE_DIRECTORY;
-CABAR_ruby_RUBYLIB=&quot;&lt;&lt;ANY&gt;&gt;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/lib/ruby:&lt;&lt;ANY&gt;&gt;:.&quot;; export CABAR_ruby_RUBYLIB;
+CABAR_ruby_RUBYLIB=&quot;&lt;&lt;ANY&gt;&gt;&quot;; export CABAR_ruby_RUBYLIB;
 CABAR_ruby_PATH=&quot;&lt;&lt;ANY&gt;&gt;&quot;; export CABAR_ruby_PATH;
 CABAR_ENV_PERL5LIB=&quot;&lt;&lt;ANY&gt;&gt;&quot;; export CABAR_ENV_PERL5LIB;
 PERL5LIB=&quot;&lt;&lt;ANY&gt;&gt;&quot;; export PERL5LIB;
@@ -102,9 +101,9 @@ BOC_LOCALE_PATH=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_customer/1.2/locale&quot;;
 CABAR_ENV_INCLUDE_PATH=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/c3/include&quot;; export CABAR_ENV_INCLUDE_PATH;
 INCLUDE_PATH=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/c3/include&quot;; export INCLUDE_PATH;
 CABAR_ENV_RUBYLIB=&quot;&lt;&lt;ANY&gt;&gt;:.&quot;; export CABAR_ENV_RUBYLIB;
-RUBYLIB=&quot;&lt;&lt;ANY&gt;&gt;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/lib/ruby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_customer/1.2/lib:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c2/1.2/lib/ruby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_locale/1.1/lib:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/lib:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/lib/ruby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/lib/ruby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/lib/ruby:&lt;&lt;ANY&gt;&gt;:.&quot;; export RUBYLIB;
-CABAR_ENV_CABAR_RAKE_FILE=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/Rakefile!boc:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/Rakefile!c1:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/Rakefile!boc_config:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/Rakefile!cabar:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/Rakefile!derby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/Rakefile!cabar_core:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/Rakefile!boc!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/Rakefile!c1!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/Rakefile!boc_config!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/Rakefile!cabar!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/Rakefile!derby!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/Rakefile!cabar_core!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/Rakefile!boc!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/Rakefile!c1!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/Rakefile!boc_config!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/Rakefile!cabar!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/Rakefile!derby!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/Rakefile!cabar_core!!&quot;; export CABAR_ENV_CABAR_RAKE_FILE;
-CABAR_RAKE_FILE=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/Rakefile!boc:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/Rakefile!c1:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/Rakefile!boc_config:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/Rakefile!cabar:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/Rakefile!derby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/Rakefile!cabar_core:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/Rakefile!boc!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/Rakefile!c1!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/Rakefile!boc_config!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/Rakefile!cabar!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/Rakefile!derby!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/Rakefile!cabar_core!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/Rakefile!boc!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/Rakefile!c1!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/Rakefile!boc_config!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/Rakefile!cabar!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/Rakefile!derby!!:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/Rakefile!cabar_core!!&quot;; export CABAR_RAKE_FILE;
+RUBYLIB=&quot;&lt;&lt;ANY&gt;&gt;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/lib/ruby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_customer/1.2/lib:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c2/1.2/lib/ruby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_locale/1.1/lib:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/lib:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/lib/ruby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/lib/ruby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/lib/ruby:&lt;&lt;ANY&gt;&gt;:.&quot;; export RUBYLIB;
+CABAR_ENV_CABAR_RAKE_FILE=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/Rakefile!boc:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/Rakefile!c1:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/Rakefile!boc_config:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/Rakefile!cabar:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/Rakefile!derby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/Rakefile!cabar_core&quot;; export CABAR_ENV_CABAR_RAKE_FILE;
+CABAR_RAKE_FILE=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/Rakefile!boc:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/Rakefile!c1:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/boc_config/1.0/Rakefile!boc_config:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/Rakefile!cabar:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/derby/1.0/Rakefile!derby:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/comp/cabar_core/Rakefile!cabar_core&quot;; export CABAR_RAKE_FILE;
 CABAR_ENV_PATH=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/bin:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/bin:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/c3/bin:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c2/1.2/bin:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/bin:&lt;&lt;ANY&gt;&gt;&quot;; export CABAR_ENV_PATH;
 PATH=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc/bin:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c1/bin:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/prod/c3/bin:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/c2/1.2/bin:&lt;&lt;CABAR_BASE_DIR&gt;&gt;/bin:&lt;&lt;ANY&gt;&gt;&quot;; export PATH;
 CABAR_ENV_GEM_PATH=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/plat/gems/1.0/gems-&lt;&lt;ANY&gt;&gt;&quot;; export CABAR_ENV_GEM_PATH;
@@ -127,8 +126,8 @@ EOF
 CABAR_ENV_SELECTED_COMPONENTS=&quot;boc&quot;; export CABAR_ENV_SELECTED_COMPONENTS;
 SELECTED_COMPONENTS=&quot;boc&quot;; export SELECTED_COMPONENTS;
 CABAR_PATH_SEP=&quot;:&quot;; export CABAR_PATH_SEP;
-CABAR_FACETS=&quot;bin,boc_config_path,boc_locale_path,components,env_var,include,lib,lib/perl,lib/ruby,rails/models,rakefile,rubygems,test_runner,tests&quot;; export CABAR_FACETS;
-CABAR_FACET_ENV_VAR_MAP=&quot;bin=PATH,boc_config_path=BOC_CONFIG_PATH,boc_locale_path=BOC_LOCALE_PATH,env_var=C2_ENV,include=INCLUDE_PATH,lib/perl=PERL5LIB,lib/ruby=RUBYLIB,lib=LD_LIBRARY_PATH,rails/models=RAILS_MODELS_PATH,rakefile=CABAR_RAKE_FILE,rubygems=GEM_PATH,test_runner=CABAR_TEST_RUNNER,tests=CABAR_TESTS_PATH&quot;; export CABAR_FACET_ENV_VAR_MAP;
+CABAR_FACETS=&quot;bin,boc_config_path,boc_locale_path,components,env_var_C2_2_ENV,env_var_C2_ENV,include,lib,lib/perl,lib/ruby,rakefile,rubygems&quot;; export CABAR_FACETS;
+CABAR_FACET_ENV_VAR_MAP=&quot;bin=PATH,boc_config_path=BOC_CONFIG_PATH,boc_locale_path=BOC_LOCALE_PATH,env_var_C2_2_ENV=C2_2_ENV,env_var_C2_ENV=C2_ENV,include=INCLUDE_PATH,lib/perl=PERL5LIB,lib/ruby=RUBYLIB,lib=LD_LIBRARY_PATH,rakefile=CABAR_RAKE_FILE,rubygems=GEM_PATH&quot;; export CABAR_FACET_ENV_VAR_MAP;
 CABAR_boc_NAME=&quot;boc&quot;; export CABAR_boc_NAME;
 CABAR_boc_VERSION=&quot;1.1&quot;; export CABAR_boc_VERSION;
 CABAR_boc_DIRECTORY=&quot;&lt;&lt;CABAR_BASE_DIR&gt;&gt;/example/repo/dev/boc&quot;; export CABAR_boc_DIRECTORY;</diff>
      <filename>test/ruby/cabar/env.spec</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>lib/ruby/cabar/plugin/action.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/bin.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/component.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/config.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/debian.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/env.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/facet.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/help.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/include.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/lib.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/path.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/perl.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/plugin.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/ruby.rb</filename>
    </removed>
    <removed>
      <filename>lib/ruby/cabar/plugin/test.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>1e988fc5fd6a63a2bb7b93a3b3e25ba0c8460acb</id>
    </parent>
  </parents>
  <author>
    <name>Kurt Stephens</name>
    <email>kurt@trans3.(none)</email>
  </author>
  <url>http://github.com/kstephens/cabar/commit/51c68a9b18a3ac9a644ae7550587c0706a82ce8c</url>
  <id>51c68a9b18a3ac9a644ae7550587c0706a82ce8c</id>
  <committed-date>2009-08-04T20:57:21-07:00</committed-date>
  <authored-date>2009-08-04T20:57:21-07:00</authored-date>
  <message>Major rework of Facets and Plugins, fixed problems with :env_var Facets.
Task 72975

Facet.proto_for_key warns about String arguments.
cabar/plugin/cabar.rb now autoloads cabar/plugin/auto/*.rb.
Most standard cabar plugins have moved to cabar/plugin/auto.
Plugin#install! callbacks are centralized and always called for multiple load_plugin! requests.
Plugins can register a when_installed callback (see cabar/plug/cabar.rb).</message>
  <tree>32371ab6b545e9dba61fe99c6e2ead04e3b64933</tree>
  <committer>
    <name>Kurt Stephens</name>
    <email>kurt@trans3.(none)</email>
  </committer>
</commit>
