[23760] users/jberry/mpwa

source_changes at macosforge.org source_changes at macosforge.org
Sun Apr 8 21:10:53 PDT 2007


Revision: 23760
          http://trac.macosforge.org/projects/macports/changeset/23760
Author:   jberry at macports.org
Date:     2007-04-08 21:10:51 -0700 (Sun, 08 Apr 2007)

Log Message:
-----------
More mpwa progress:
 * Add portpkg.xar to database in table port_pkg_files
 * Submission of portpkgs now pretty much works

Modified Paths:
--------------
    users/jberry/mpwa/app/controllers/port_controller.rb
    users/jberry/mpwa/app/controllers/port_pkg_controller.rb
    users/jberry/mpwa/app/controllers/ports_controller.rb
    users/jberry/mpwa/app/models/person.rb
    users/jberry/mpwa/app/models/port.rb
    users/jberry/mpwa/app/models/port_pkg.rb
    users/jberry/mpwa/doc/schema-thoughts.sql

Added Paths:
-----------
    users/jberry/mpwa/app/controllers/port_pkg_files_controller.rb
    users/jberry/mpwa/app/helpers/port_pkg_files_helper.rb
    users/jberry/mpwa/app/models/port_pkg_files.rb
    users/jberry/mpwa/app/models/repository.rb
    users/jberry/mpwa/app/views/layouts/port_pkg_files.rhtml
    users/jberry/mpwa/app/views/port_pkg/submit.rhtml
    users/jberry/mpwa/app/views/port_pkg_files/
    users/jberry/mpwa/app/views/port_pkg_files/_form.rhtml
    users/jberry/mpwa/app/views/port_pkg_files/edit.rhtml
    users/jberry/mpwa/app/views/port_pkg_files/list.rhtml
    users/jberry/mpwa/app/views/port_pkg_files/new.rhtml
    users/jberry/mpwa/app/views/port_pkg_files/show.rhtml
    users/jberry/mpwa/lib/temp_directories.rb
    users/jberry/mpwa/test/fixtures/port_pkg_files.yml
    users/jberry/mpwa/test/functional/port_pkg_files_controller_test.rb
    users/jberry/mpwa/test/unit/port_pkg_files_test.rb

Modified: users/jberry/mpwa/app/controllers/port_controller.rb
===================================================================
--- users/jberry/mpwa/app/controllers/port_controller.rb	2007-04-09 02:58:08 UTC (rev 23759)
+++ users/jberry/mpwa/app/controllers/port_controller.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -48,4 +48,6 @@
     Port.find(params[:id]).destroy
     redirect_to :action => 'list'
   end
+  
+  
 end

Modified: users/jberry/mpwa/app/controllers/port_pkg_controller.rb
===================================================================
--- users/jberry/mpwa/app/controllers/port_pkg_controller.rb	2007-04-09 02:58:08 UTC (rev 23759)
+++ users/jberry/mpwa/app/controllers/port_pkg_controller.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -48,4 +48,16 @@
     PortPkg.find(params[:id]).destroy
     redirect_to :action => 'list'
   end
+  
+  def submit
+      portpkg = params[:portpkg]
+      
+      # Validate parameters (we're probably making this too hard)
+      raise "bad package" if portpkg.nil?
+      
+      # Import the package from the file
+      @port_pkg = PortPkg.import_from_file(portpkg)  
+  end
+  
+  
 end

Added: users/jberry/mpwa/app/controllers/port_pkg_files_controller.rb
===================================================================
--- users/jberry/mpwa/app/controllers/port_pkg_files_controller.rb	                        (rev 0)
+++ users/jberry/mpwa/app/controllers/port_pkg_files_controller.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,51 @@
+class PortPkgFilesController < ApplicationController
+  def index
+    list
+    render :action => 'list'
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+  verify :method => :post, :only => [ :destroy, :create, :update ],
+         :redirect_to => { :action => :list }
+
+  def list
+    @port_pkg_files_pages, @port_pkg_files = paginate :port_pkg_files, :per_page => 10
+  end
+
+  def show
+    @port_pkg_files = PortPkgFiles.find(params[:id])
+  end
+
+  def new
+    @port_pkg_files = PortPkgFiles.new
+  end
+
+  def create
+    @port_pkg_files = PortPkgFiles.new(params[:port_pkg_files])
+    if @port_pkg_files.save
+      flash[:notice] = 'PortPkgFiles was successfully created.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'new'
+    end
+  end
+
+  def edit
+    @port_pkg_files = PortPkgFiles.find(params[:id])
+  end
+
+  def update
+    @port_pkg_files = PortPkgFiles.find(params[:id])
+    if @port_pkg_files.update_attributes(params[:port_pkg_files])
+      flash[:notice] = 'PortPkgFiles was successfully updated.'
+      redirect_to :action => 'show', :id => @port_pkg_files
+    else
+      render :action => 'edit'
+    end
+  end
+
+  def destroy
+    PortPkgFiles.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+end

Modified: users/jberry/mpwa/app/controllers/ports_controller.rb
===================================================================
--- users/jberry/mpwa/app/controllers/ports_controller.rb	2007-04-09 02:58:08 UTC (rev 23759)
+++ users/jberry/mpwa/app/controllers/ports_controller.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -4,7 +4,7 @@
   
     def makeTempDir()
         tmpdir = Dir::tmpdir
-        basename = "macports"
+        basename = "mpwa"
         n = 1
         begin
             tmpname = File.join(tmpdir, sprintf('%s.%d.%d', basename, $$, n))

Added: users/jberry/mpwa/app/helpers/port_pkg_files_helper.rb
===================================================================
--- users/jberry/mpwa/app/helpers/port_pkg_files_helper.rb	                        (rev 0)
+++ users/jberry/mpwa/app/helpers/port_pkg_files_helper.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,2 @@
+module PortPkgFilesHelper
+end

Modified: users/jberry/mpwa/app/models/person.rb
===================================================================
--- users/jberry/mpwa/app/models/person.rb	2007-04-09 02:58:08 UTC (rev 23759)
+++ users/jberry/mpwa/app/models/person.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -1,4 +1,24 @@
 class Person < ActiveRecord::Base
     has_and_belongs_to_many :ports, :class_name => 'Port', :join_table => 'maintainers_ports'
     has_many :port_pkgs, :foreign_key => 'submitter_id'
+
+    def Person.by_email(email)
+        Person.find(:first, :conditions => "email = '#{email}'")
+    end
+    
+    def Person.ensure_person_with_email(email)
+        person = Person.by_email(email)
+        if person.nil?
+            # build a new person using the supplied email address
+            person = Person.new
+            
+            # Give it everything we know
+            person.user_name = email
+            person.email = email
+            
+            # Save the person
+            person.save
+        end
+        return person
+    end
 end

Modified: users/jberry/mpwa/app/models/port.rb
===================================================================
--- users/jberry/mpwa/app/models/port.rb	2007-04-09 02:58:08 UTC (rev 23759)
+++ users/jberry/mpwa/app/models/port.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -1,5 +1,35 @@
 class Port < ActiveRecord::Base
     has_many :port_pkgs
     has_and_belongs_to_many :tags
-    has_and_belongs_to_many :maintainers, :class_name => 'Person', :join_table => 'maintainers_ports'
+    has_and_belongs_to_many :maintainers, :class_name => 'Person', :join_table => 'maintainers_ports' 
+    
+    def Port.by_name(name)
+        Port.find(:first, :conditions => "name = '#{name}'")
+    end
+    
+    def Port.ensure_port(name, info)
+        port = Port.by_name(name)
+        if port.nil?
+            # build a new port using default values
+            port = Port.new
+            
+            port.name = name
+            port.short_desc = info['description']
+            port.long_desc = info['long_description']
+            port.home_page = info['homepage']
+            
+            maintainers = info['maintainers']
+            if !maintainers.nil?
+                maintainers.each do |maintainer|
+                    person = Person.ensure_person_with_email(maintainer)
+                    port.maintainers << person
+                end
+            end
+            
+            # Save the port
+            port.save
+        end
+        return port
+    end    
+    
 end

Modified: users/jberry/mpwa/app/models/port_pkg.rb
===================================================================
--- users/jberry/mpwa/app/models/port_pkg.rb	2007-04-09 02:58:08 UTC (rev 23759)
+++ users/jberry/mpwa/app/models/port_pkg.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -1,5 +1,96 @@
+require 'time'
+require 'temp_directories'
+require 'port'
+
 class PortPkg < ActiveRecord::Base
+	@@xar = "/opt/local/bin/xar"
+	@@porttool = "/opt/local/bin/port"
+
     belongs_to :port
     belongs_to :submitter, :class_name => 'Person', :foreign_key => 'submitter_id'
+    has_many :files, :class_name => 'PortPkgFiles'
     has_and_belongs_to_many :tags
+    
+    def PortPkg.import_from_file(file)
+        raise "badpkg" if file.nil?
+        
+        # Make a temporary directory
+        tempDirPath = TempDirectories.makeTempDir
+        
+        # Write the portpkg file to the temporary directory
+        pkgPath = tempDirPath + "portpkg.xar"
+        expandedPkgPath = tempDirPath + "portpkg"
+        File.open(pkgPath, "w") { |f| f.write(file.read) }
+
+        # Note: a bug in xar presently prevents us from limiting the extraction to the portpkg directory,
+        # => which we'd like to do for the sake of cleanliness. Hopefully this will become fixed soon.
+        puts("cd #{tempDirPath}; #{@@xar} -xf #{pkgPath}")
+        system("cd #{tempDirPath}; #{@@xar} -xf #{pkgPath}") or raise "badpkg"
+        
+        # Validate the portpkg, bailing on error
+        (expandedPkgPath + "Portfile").file? or raise "badpkg"
+        infoOut = `#{@@porttool} info --name --category --epoch --version --revision --variants --maintainers --short_desc --long_description --description --homepage #{expandedPkgPath}`
+        $?.exitstatus or raise "badpkg"
+        
+        # Extract:
+        # => name
+        # => category
+        # => epoch, version, revision
+        # => homepage
+        # => description
+        # => long_description
+        # => maintainers
+        # => variants
+        # => dependencies
+        info = {}
+        infoOut.each_line do |line|
+            m = /^(\w+):\s*(.*)\s*$/.match(line)
+            if !m.nil?
+                token = m[1]
+                value = m[2]
+
+                case token
+                    when 'maintainers'
+                        info[token] = value.split(/,\s*/)
+                    else
+                        info[token] = value
+                end
+            end
+        end
+        name = info['name']
+        puts "name: #{name}"
+        raise "badpkg" if name.nil?
+        
+        # Ensure a port for this pkg
+        port = Port.ensure_port(name, info)
+        
+        # Create the port_pkg object
+        port_pkg = PortPkg.new
+        
+        # TODO: Need to fix the submitter somehow
+        port_pkg.submitter = Person.ensure_person_with_email("jberry at macports.org")
+        port_pkg.submitted_at = Time.now
+ 
+        port_pkg.port = port
+        port_pkg.epoch = info['epoch']
+        port_pkg.version = info['version']
+        port_pkg.revision = info['revision']
+
+        # Save unpacked data into a file
+        portPkgFile = PortPkgFiles.new
+        portPkgFile.name = 'portpkg.xar'
+        file.rewind
+        portPkgFile.data = file.read
+        port_pkg.files << portPkgFile
+        
+        # Save the pkg (maybe we shouldn't?)
+        port_pkg.save
+        
+        # Cleanup the temp directory
+        tempDirPath.rmtree
+        
+        # Return the port_pkg
+        return port_pkg
+    end
+    
 end

Added: users/jberry/mpwa/app/models/port_pkg_files.rb
===================================================================
--- users/jberry/mpwa/app/models/port_pkg_files.rb	                        (rev 0)
+++ users/jberry/mpwa/app/models/port_pkg_files.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,3 @@
+class PortPkgFiles < ActiveRecord::Base
+    belongs_to :port_pkg
+end

Added: users/jberry/mpwa/app/models/repository.rb
===================================================================
--- users/jberry/mpwa/app/models/repository.rb	                        (rev 0)
+++ users/jberry/mpwa/app/models/repository.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,3 @@
+class Repository
+    
+end

Added: users/jberry/mpwa/app/views/layouts/port_pkg_files.rhtml
===================================================================
--- users/jberry/mpwa/app/views/layouts/port_pkg_files.rhtml	                        (rev 0)
+++ users/jberry/mpwa/app/views/layouts/port_pkg_files.rhtml	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,17 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
+  <title>PortPkgFiles: <%= controller.action_name %></title>
+  <%= stylesheet_link_tag 'scaffold' %>
+</head>
+<body>
+
+<p style="color: green"><%= flash[:notice] %></p>
+
+<%= yield  %>
+
+</body>
+</html>

Added: users/jberry/mpwa/app/views/port_pkg/submit.rhtml
===================================================================
--- users/jberry/mpwa/app/views/port_pkg/submit.rhtml	                        (rev 0)
+++ users/jberry/mpwa/app/views/port_pkg/submit.rhtml	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,8 @@
+<h1>New port_pkg</h1>
+
+<% form_tag :action => 'create' do %>
+  <%= render :partial => 'form' %>
+  <%= submit_tag "Create" %>
+<% end %>
+
+<%= link_to 'Back', :action => 'list' %>

Added: users/jberry/mpwa/app/views/port_pkg_files/_form.rhtml
===================================================================
--- users/jberry/mpwa/app/views/port_pkg_files/_form.rhtml	                        (rev 0)
+++ users/jberry/mpwa/app/views/port_pkg_files/_form.rhtml	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,10 @@
+<%= error_messages_for 'port_pkg_files' %>
+
+<!--[form:port_pkg_files]-->
+<p><label for="port_pkg_files_name">Name</label><br/>
+<%= text_field 'port_pkg_files', 'name'  %></p>
+
+<p><label for="port_pkg_files_data">Data</label><br/>
+</p>
+<!--[eoform:port_pkg_files]-->
+

Added: users/jberry/mpwa/app/views/port_pkg_files/edit.rhtml
===================================================================
--- users/jberry/mpwa/app/views/port_pkg_files/edit.rhtml	                        (rev 0)
+++ users/jberry/mpwa/app/views/port_pkg_files/edit.rhtml	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,9 @@
+<h1>Editing port_pkg_files</h1>
+
+<% form_tag :action => 'update', :id => @port_pkg_files do %>
+  <%= render :partial => 'form' %>
+  <%= submit_tag 'Edit' %>
+<% end %>
+
+<%= link_to 'Show', :action => 'show', :id => @port_pkg_files %> |
+<%= link_to 'Back', :action => 'list' %>

Added: users/jberry/mpwa/app/views/port_pkg_files/list.rhtml
===================================================================
--- users/jberry/mpwa/app/views/port_pkg_files/list.rhtml	                        (rev 0)
+++ users/jberry/mpwa/app/views/port_pkg_files/list.rhtml	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,27 @@
+<h1>Listing port_pkg_files</h1>
+
+<table>
+  <tr>
+  <% for column in PortPkgFiles.content_columns %>
+    <th><%= column.human_name %></th>
+  <% end %>
+  </tr>
+  
+<% for port_pkg_files in @port_pkg_files %>
+  <tr>
+  <% for column in PortPkgFiles.content_columns %>
+    <td><%=h port_pkg_files.send(column.name) %></td>
+  <% end %>
+    <td><%= link_to 'Show', :action => 'show', :id => port_pkg_files %></td>
+    <td><%= link_to 'Edit', :action => 'edit', :id => port_pkg_files %></td>
+    <td><%= link_to 'Destroy', { :action => 'destroy', :id => port_pkg_files }, :confirm => 'Are you sure?', :method => :post %></td>
+  </tr>
+<% end %>
+</table>
+
+<%= link_to 'Previous page', { :page => @port_pkg_files_pages.current.previous } if @port_pkg_files_pages.current.previous %>
+<%= link_to 'Next page', { :page => @port_pkg_files_pages.current.next } if @port_pkg_files_pages.current.next %> 
+
+<br />
+
+<%= link_to 'New port_pkg_files', :action => 'new' %>

Added: users/jberry/mpwa/app/views/port_pkg_files/new.rhtml
===================================================================
--- users/jberry/mpwa/app/views/port_pkg_files/new.rhtml	                        (rev 0)
+++ users/jberry/mpwa/app/views/port_pkg_files/new.rhtml	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,8 @@
+<h1>New port_pkg_files</h1>
+
+<% form_tag :action => 'create' do %>
+  <%= render :partial => 'form' %>
+  <%= submit_tag "Create" %>
+<% end %>
+
+<%= link_to 'Back', :action => 'list' %>

Added: users/jberry/mpwa/app/views/port_pkg_files/show.rhtml
===================================================================
--- users/jberry/mpwa/app/views/port_pkg_files/show.rhtml	                        (rev 0)
+++ users/jberry/mpwa/app/views/port_pkg_files/show.rhtml	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,8 @@
+<% for column in PortPkgFiles.content_columns %>
+<p>
+  <b><%= column.human_name %>:</b> <%=h @port_pkg_files.send(column.name) %>
+</p>
+<% end %>
+
+<%= link_to 'Edit', :action => 'edit', :id => @port_pkg_files %> |
+<%= link_to 'Back', :action => 'list' %>

Modified: users/jberry/mpwa/doc/schema-thoughts.sql
===================================================================
--- users/jberry/mpwa/doc/schema-thoughts.sql	2007-04-09 02:58:08 UTC (rev 23759)
+++ users/jberry/mpwa/doc/schema-thoughts.sql	2007-04-09 04:10:51 UTC (rev 23760)
@@ -47,10 +47,7 @@
     
     epoch           varchar(32),
     version         varchar(32),
-    revision        varchar(32),
-    
-    url             varchar(127)    -- uniquely identify a portpkg to outside world
-                                    -- this might also also indexing of externally served portpkgs
+    revision        varchar(32)
                                     
     -- one-many association for variants
     -- many-many association for tags through PkgTagAssoc
@@ -59,6 +56,14 @@
     -- (note that both pkgs and variants, have dependency relations)
 );
 
+drop table if exists Port_Pkg_Files;
+create table Port_Pkg_Files (
+    id              bigint not null primary key auto_increment,
+    port_pkg_id     bigint not null,
+    name            varchar(255),
+    data            blob
+);
+    
 -- A tag which may be attached to various items through Ports_Tags, Port_Pkgs_Tags
 drop table if exists Tags;
 create table Tags (

Added: users/jberry/mpwa/lib/temp_directories.rb
===================================================================
--- users/jberry/mpwa/lib/temp_directories.rb	                        (rev 0)
+++ users/jberry/mpwa/lib/temp_directories.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,24 @@
+require "fileutils"
+
+class TempDirectories
+    
+    def TempDirectories.makeTempDir
+        # Note: for long running processes, we should really incorporate time or randomness into this
+        tmpdir = Dir::tmpdir
+        basename = "mpwa"
+        n = 1
+        begin
+            tmpname = Pathname.new(tmpdir) + sprintf('%s.%d.%d', basename, $$, n)
+            n += 1
+            next if tmpname.exist?
+            begin
+                tmpname.mkdir
+            rescue SystemCallError
+                next
+            end
+        end while !tmpname.exist?
+        return tmpname
+    end
+
+end
+

Added: users/jberry/mpwa/test/fixtures/port_pkg_files.yml
===================================================================
--- users/jberry/mpwa/test/fixtures/port_pkg_files.yml	                        (rev 0)
+++ users/jberry/mpwa/test/fixtures/port_pkg_files.yml	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,5 @@
+# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
+one:
+  id: 1
+two:
+  id: 2

Added: users/jberry/mpwa/test/functional/port_pkg_files_controller_test.rb
===================================================================
--- users/jberry/mpwa/test/functional/port_pkg_files_controller_test.rb	                        (rev 0)
+++ users/jberry/mpwa/test/functional/port_pkg_files_controller_test.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,92 @@
+require File.dirname(__FILE__) + '/../test_helper'
+require 'port_pkg_files_controller'
+
+# Re-raise errors caught by the controller.
+class PortPkgFilesController; def rescue_action(e) raise e end; end
+
+class PortPkgFilesControllerTest < Test::Unit::TestCase
+  fixtures :port_pkg_files
+
+  def setup
+    @controller = PortPkgFilesController.new
+    @request    = ActionController::TestRequest.new
+    @response   = ActionController::TestResponse.new
+
+    @first_id = port_pkg_files(:first).id
+  end
+
+  def test_index
+    get :index
+    assert_response :success
+    assert_template 'list'
+  end
+
+  def test_list
+    get :list
+
+    assert_response :success
+    assert_template 'list'
+
+    assert_not_nil assigns(:port_pkg_files)
+  end
+
+  def test_show
+    get :show, :id => @first_id
+
+    assert_response :success
+    assert_template 'show'
+
+    assert_not_nil assigns(:port_pkg_files)
+    assert assigns(:port_pkg_files).valid?
+  end
+
+  def test_new
+    get :new
+
+    assert_response :success
+    assert_template 'new'
+
+    assert_not_nil assigns(:port_pkg_files)
+  end
+
+  def test_create
+    num_port_pkg_files = PortPkgFiles.count
+
+    post :create, :port_pkg_files => {}
+
+    assert_response :redirect
+    assert_redirected_to :action => 'list'
+
+    assert_equal num_port_pkg_files + 1, PortPkgFiles.count
+  end
+
+  def test_edit
+    get :edit, :id => @first_id
+
+    assert_response :success
+    assert_template 'edit'
+
+    assert_not_nil assigns(:port_pkg_files)
+    assert assigns(:port_pkg_files).valid?
+  end
+
+  def test_update
+    post :update, :id => @first_id
+    assert_response :redirect
+    assert_redirected_to :action => 'show', :id => @first_id
+  end
+
+  def test_destroy
+    assert_nothing_raised {
+      PortPkgFiles.find(@first_id)
+    }
+
+    post :destroy, :id => @first_id
+    assert_response :redirect
+    assert_redirected_to :action => 'list'
+
+    assert_raise(ActiveRecord::RecordNotFound) {
+      PortPkgFiles.find(@first_id)
+    }
+  end
+end

Added: users/jberry/mpwa/test/unit/port_pkg_files_test.rb
===================================================================
--- users/jberry/mpwa/test/unit/port_pkg_files_test.rb	                        (rev 0)
+++ users/jberry/mpwa/test/unit/port_pkg_files_test.rb	2007-04-09 04:10:51 UTC (rev 23760)
@@ -0,0 +1,10 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class PortPkgFilesTest < Test::Unit::TestCase
+  fixtures :port_pkg_files
+
+  # Replace this with your real tests.
+  def test_truth
+    assert true
+  end
+end

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20070408/a932d199/attachment.html


More information about the macports-changes mailing list