[Xfce4-commits] <moka:nick/maintainer-improvements> Make the datamapper code work.

Nick Schermer noreply at xfce.org
Mon Apr 4 21:42:03 CEST 2011


Updating branch refs/heads/nick/maintainer-improvements
         to 20b2a186e2bd51b8d296688894232c173c0d4c3e (commit)
       from 571624237724b9c31e6fffdba31b9fb474192957 (commit)

commit 20b2a186e2bd51b8d296688894232c173c0d4c3e
Author: Nick Schermer <nick at xfce.org>
Date:   Mon Apr 4 21:40:12 2011 +0200

    Make the datamapper code work.

 examples/one-man-one-project/config.ru             |   49 +++++--
 .../one-man-one-project/project_release_mail.erb   |    3 +-
 lib/models/archive.rb                              |  152 ++++++++++----------
 lib/models/collection.rb                           |   24 ++-
 lib/models/maintainer.rb                           |    7 +-
 lib/models/project.rb                              |   26 +++--
 lib/models/role.rb                                 |    2 +
 lib/views/collection.erb                           |    2 +-
 lib/views/head.erb                                 |    4 +-
 lib/views/index.erb                                |    2 +-
 lib/views/manage_releases.erb                      |    4 +-
 lib/views/project.erb                              |    2 +-
 moka.gemspec                                       |    1 -
 13 files changed, 157 insertions(+), 121 deletions(-)

diff --git a/examples/one-man-one-project/config.ru b/examples/one-man-one-project/config.ru
index f0b68ad..971e910 100755
--- a/examples/one-man-one-project/config.ru
+++ b/examples/one-man-one-project/config.ru
@@ -24,47 +24,66 @@ Moka::Models::Configuration.load do |conf|
   conf.set :moka_url, 'https://releases.xfce.org'
   conf.set :archive_dir, '/home/nick/websites/archive.xfce.org/'
   conf.set :archive_url, 'http://archive.xfce.org'
+  conf.set :mirror, 'http://archive.xfce.org'
   conf.set :collection_release_pattern, /^([0-9]).([0-9]+)(pre[0-9])?$/
 end
 
 # Uncheck for production environment
 DataMapper.auto_migrate!
+DataMapper.finalize
 
 # create dummy roles
 admin = Moka::Models::Role.first_or_create(:name => 'admin')
 admin.save
 
+goodies = Moka::Models::Role.first_or_create(:name => 'goodies')
+goodies.save
+
 # create dummy user
-user = Moka::Models::Maintainer.first_or_create(
+nick = Moka::Models::Maintainer.first_or_create(
   { :username => 'nick' },
   { :realname => 'Nick Schermer',
     :password => Digest::SHA1.hexdigest('test'),
     :email => 'nick at xfce.org' }
 )
-user.roles << admin
-user.save
-user = Moka::Models::Maintainer.first_or_create(
+nick.roles << admin
+nick.roles << goodies
+nick.save
+
+jannis = Moka::Models::Maintainer.first_or_create(
   { :username => 'jannis' },
   { :realname => 'Jannis Pohlmann',
     :password => Digest::SHA1.hexdigest('test'),
     :email => 'jannis at xfce.org' }
 )
-user.save
-user = Moka::Models::Maintainer.first_or_create(
+jannis.roles << goodies
+jannis.save
+
+jeromeg = Moka::Models::Maintainer.first_or_create(
   { :username => 'jeromeg' },
   { :realname => 'Jérôme Guelfuccin',
     :password => Digest::SHA1.hexdigest('test'),
     :email => 'jeromeg at xfce.org' }
 )
-user.save
+jeromeg.roles << goodies
+jeromeg.save
+
+panel = Moka::Models::Project.first_or_create(
+  { :name =>           'xfce4-panel' },
+  { :website =>        'http://www.xfce.org',
+    :description =>    'Xfce\'s Panel' }
+)
+panel.maintainers << nick
+panel.save
 
-project = Moka::Models::Project.first_or_create(
-  { :name =>        'xfce4-panel' },
-  { :website =>     'http://www.xfce.org',
-    :description => 'Xfce\'s Panel' }
+thunar = Moka::Models::Project.first_or_create(
+  { :name =>           'thunar' },
+  { :website =>        'http://thunar.xfce.org',
+    :description =>    'Xfce\'s File Manager' }
 )
-project.maintainers << user
-project.save
+thunar.maintainers << nick
+thunar.maintainers << jannis
+thunar.save
 
 # create dummy classification
 collection = Moka::Models::Collection.first_or_create(
@@ -72,7 +91,9 @@ collection = Moka::Models::Collection.first_or_create(
   { :display_name => 'Xfce',
     :website => 'http://www.xfce.org' }
 )
-collection.maintainers << user
+collection.maintainers << nick
+collection.maintainers << jannis
+collection.maintainers << jeromeg
 collection.save
 
 run Moka::Application
diff --git a/examples/one-man-one-project/project_release_mail.erb b/examples/one-man-one-project/project_release_mail.erb
index 4c0ca41..e6a1d8d 100644
--- a/examples/one-man-one-project/project_release_mail.erb
+++ b/examples/one-man-one-project/project_release_mail.erb
@@ -7,6 +7,5 @@
 
 from the following mirrors:
 
-<% for mirror in Moka::Models::Mirror.find_all %>  <%= mirror.download_url(release) %>
-<% end %>
+<%= release.download_url %>
 <%= message %>
diff --git a/lib/models/archive.rb b/lib/models/archive.rb
index af5841b..4d1cd97 100755
--- a/lib/models/archive.rb
+++ b/lib/models/archive.rb
@@ -4,29 +4,29 @@ require 'singleton'
 module Moka
   module Models
     class Archive
-    
+
       include Singleton
-    
+
       def root_dir
         Configuration.get(:archive_dir)
       end
-    
+
       def excluded_classifications
         begin
           Configuration.get(:excluded_classifications)
-        rescue 
+        rescue
           []
         end
       end
-    
+
       def collection_dir(collection)
         File.join(root_dir, collection.name)
       end
-    
+
       def collection_release_dir(release)
         File.join(collection_dir(release.collection), release.version)
       end
-    
+
       def collection_source_dir(release)
         File.join(collection_release_dir(release), 'src')
       end
@@ -34,11 +34,11 @@ module Moka
       def collection_fat_tarball_dir(release)
         File.join(collection_release_dir(release), 'fat_tarballs')
       end
-    
+
       def collection_installer_dir(release)
         File.join(collection_release_dir(release), 'installers')
       end
-    
+
       def collection_fat_tarball_basename(release)
         "#{release.collection.name}-#{release.version}.tar.bz2"
       end
@@ -51,31 +51,31 @@ module Moka
 
       def collection_releases(collection)
         releases = []
-    
+
         if File.directory?(collection_dir(collection))
           dir = Dir.new(collection_dir(collection))
-          
+
           versions = dir.entries.select do |entry|
             entry != '.' and entry != '..' \
               and File.directory?(File.join(collection_dir(collection), entry))
           end
-    
+
           releases += versions.collect do |version|
             Collection::Release.new(collection, version)
           end
         end
-    
+
         releases
       end
-    
+
       def collection_release_add_project_release(release, project_release)
         source_dir = collection_source_dir(release)
-    
+
         File.makedirs(source_dir) unless File.directory?(source_dir)
-    
+
         link_target = project_release_tarball_filename(project_release)
         link_filename = File.join(source_dir, File.basename(link_target))
-    
+
         File.delete(link_filename) if File.file?(link_filename)
         File.link(link_target, link_filename)
 
@@ -88,31 +88,31 @@ module Moka
           File.link(link_target, link_filename)
         end
       end
-    
+
       def collection_release_remove_project_release(release, project_release)
         source_dir = collection_source_dir(release)
         tarball_basename = project_release_tarball_basename(project_release)
-    
+
         filename = File.join(source_dir, tarball_basename)
         File.delete(filename) if File.file?(filename)
       end
-    
+
       def collection_release_project_release_included?(release, project_release)
         source_dir = collection_source_dir(release)
-    
+
         if File.directory?(source_dir)
           dir = Dir.new(source_dir)
-    
+
           tarball = dir.entries.find do |entry|
             entry =~ project_release_tarball_pattern(project_release)
           end
-    
+
           return !tarball.nil?
         end
-    
+
         false
       end
-    
+
       def collection_release_delete(release)
         if File.directory?(collection_release_dir(release))
           FileUtils.rm_rf(collection_release_dir(release))
@@ -142,33 +142,33 @@ module Moka
         fat_tarball = collection_fat_tarball_filename(release)
         update_tarball_checksums(fat_tarball)
       end
-    
+
       def classification_dir(classification)
         File.join(root_dir, 'src', classification.name)
       end
-    
+
       def classifications
         return @classifications unless @classifications.nil?
-    
+
         @classifications = []
-    
+
         if File.directory?(File.join(root_dir, 'src'))
           dir = Dir.new(File.join(root_dir, 'src'))
-    
+
           names = dir.entries.select do |entry|
             entry != '.' and entry != '..' \
               and not excluded_classifications.include?(entry) \
               and File.directory?(File.join(root_dir, 'src', entry))
           end
-    
+
           @classifications += names.collect do |name|
             Classification.new(name, File.join(root_dir, 'src', name))
           end
-    
+
           @classifications.each do |classification|
             if File.directory?(classification_dir(classification))
               cdir = Dir.new(classification_dir(classification))
-    
+
               classification.project_names = cdir.entries.select do |entry|
                 entry != '.' and entry != '.' \
                   and File.directory?(File.join(classification_dir(classification), entry))
@@ -176,48 +176,48 @@ module Moka
             end
           end
         end
-    
+
         @classifications
       end
-    
+
       def project_dir(project)
         File.join(classification_dir(project.classification), project.name)
       end
-    
+
       def project_branch_dir(project, branch)
         File.join(project_dir(project), branch.name)
       end
-    
+
       def project_branches(project)
         branches = []
-    
+
         begin
           if File.directory?(project_dir(project))
             dir = Dir.new(project_dir(project))
-    
+
             names = dir.entries.select do |entry|
               entry != '.' and entry != '..' \
                 and File.directory?(File.join(project_dir(project), entry))
             end
-    
+
             branches += names.collect do |name|
               Project::Branch.new(project, name)
             end
           end
         rescue NoMethodError
         end
-    
+
         branches
       end
-    
+
       def project_branch_add_tarball(branch, file, basename)
         dir = project_branch_dir(branch.project, branch)
-    
+
         File.makedirs(dir) unless File.directory?(dir)
-    
+
         source_file = file.path
         target_file = File.join(dir, basename)
-    
+
         if File.file?(target_file)
           begin
             lockfile = File.new(target_file)
@@ -232,7 +232,7 @@ module Moka
           File.move(source_file, target_file)
           File.chmod(0664, target_file)
         end
-        
+
         update_tarball_checksums(target_file)
 
         project_branch_update(branch)
@@ -249,7 +249,7 @@ module Moka
             file.flock(File::LOCK_UN)
           end
         end
-    
+
         open("#{tarball}.sha1", File::CREAT|File::TRUNC|File::RDWR) do |file|
           begin
             file.flock(File::LOCK_EX)
@@ -259,18 +259,18 @@ module Moka
           end
         end
       end
-    
+
       def project_release_from_tarball(project, tarball)
         branch = project_tarball_branch(project, tarball)
         version = project_tarball_version(project, tarball)
         Project::Release.new(branch.project, branch, version)
       end
-      
+
       def project_branch_update(branch)
         dirname = project_branch_dir(branch.project, branch)
         begin Dir.rmdir(dirname) rescue SystemCallError end
       end
-    
+
       def project_tarball_pattern(project)
         /^(#{project.name})-([0-9\.]+[a-zA-Z0-9\-_]+)\.tar\.(bz2|gz)$/i
       end
@@ -288,11 +288,11 @@ module Moka
         version = tarball.gsub(project_tarball_upload_pattern(project), '\2')
         Project::Branch.new(project, version)
       end
-    
+
       def project_tarball_version(project, tarball)
         tarball.gsub(project_tarball_pattern(project), '\2')
       end
-    
+
       def project_release_tarball_basename(release)
         source_dir = project_branch_dir(release.project, release.branch)
 
@@ -308,7 +308,7 @@ module Moka
 
         "#{release.project.name}-#{release.version}.tar.bz2"
       end
-    
+
       def project_release_tarball_filename(release)
         File.join(project_branch_dir(release.project, release.branch), \
                   project_release_tarball_basename(release))
@@ -318,36 +318,36 @@ module Moka
         tarball_basename = project_release_tarball_basename(release)
         dirname = project_branch_dir(release.project, release.branch)
 
-        filenames = [ 
-          File.join(dirname, "#{tarball_basename}.md5"), 
+        filenames = [
+          File.join(dirname, "#{tarball_basename}.md5"),
           File.join(dirname, "#{tarball_basename}.sha1")
         ]
       end
-    
+
       def project_release_delete(release)
         filename = project_release_tarball_filename(release)
 
         File.delete(filename) if File.file?(filename)
 
         checksum_filenames = project_release_checksum_filenames(release)
-        for file in checksum_filenames 
+        for file in checksum_filenames
           File.delete(file) if File.file?(file)
         end
 
         project_branch_update(release.branch)
       end
-    
+
       def project_release_checksum(release, type)
         result = nil
-    
+
         tarball_basename = project_release_tarball_basename(release)
         branch_dir = project_branch_dir(release.project, release.branch)
-        basename = if type == Digest::MD5 then 
-          "#{tarball_basename}.md5" 
-        else 
+        basename = if type == Digest::MD5 then
+          "#{tarball_basename}.md5"
+        else
           "#{tarball_basename}.sha1"
         end
-    
+
         open(File.join(branch_dir, basename)) do |checksum_file|
           begin
             checksum_file.flock(File::LOCK_SH)
@@ -362,46 +362,46 @@ module Moka
             checksum_file.flock(File::LOCK_UN)
           end
         end
-    
+
         result
       end
-    
+
       def project_releases(project)
         releases = []
-    
+
         for branch in project.branches
           if File.directory?(project_branch_dir(project, branch))
             dir = Dir.new(project_branch_dir(project, branch))
-    
+
             tarballs = dir.entries.select do |entry|
               entry =~ project_tarball_pattern(project)
             end
-    
+
             releases += tarballs.collect do |tarball|
               version = project_tarball_version(project, tarball)
               Project::Release.new(project, branch, version)
             end
           end
         end
-    
+
         releases
       end
-    
+
       def project_change_classification(project, new_classification)
         old_classification = project.classification
         old_dir = project_dir(project)
-        
+
         project.classification = new_classification
         new_dir = project_dir(project)
-    
+
         path = Pathname.new(new_dir)
         parent = path.parent
-    
+
         File.makedirs(parent) unless File.directory?(parent)
-    
+
         project.classification = old_classifcation unless File.move(old_dir, new_dir)
-    
-        begin 
+
+        begin
           Dir.delete(old_dir)
         rescue SystemCallError
         end
diff --git a/lib/models/collection.rb b/lib/models/collection.rb
index c808cd6..78fa458 100755
--- a/lib/models/collection.rb
+++ b/lib/models/collection.rb
@@ -60,6 +60,21 @@ module Moka
         def update_checksums
           Archive.instance.collection_release_update_checksums(self)
         end
+        
+        def release_url
+          dir = Archive.instance.collection_release_dir(self)
+          dir.gsub(Archive.instance.root_dir, Configuration.get(:mirror))
+        end
+        
+        def download_url
+          dir  = Archive.instance.collection_source_dir(self)
+          dir.gsub(Archive.instance.root_dir, Configuration.get(:mirror))
+        end
+        
+        def fat_tarball_url
+          dir = Archive.instance.collection_fat_tarball_dir(self)
+          dir.gsub(Archive.instance.root_dir, Configuration.get(:mirror))
+        end
 
         def template_name
           'mailinglist_collection_announcement'
@@ -71,10 +86,7 @@ module Moka
       property :display_name, String
       property :website,      String
 
-      has n, :maintainers, :through => Resource
-      #has n, :maintainers, :through => Resource
-      #has n, :mailinglists, :through => Resource
-      #belongs_to :maintainer
+      has n,   :maintainers, :through => Resource
 
       def ==(other)
         other.is_a?(self.class) and other.name == name
@@ -83,10 +95,6 @@ module Moka
       def releases
         Archive.instance.collection_releases(self).sort
       end
-
-      def self.find_all_by_maintainer(maintainer)
-        all()
-      end
     end
   end
 end
diff --git a/lib/models/maintainer.rb b/lib/models/maintainer.rb
index 827689d..1815e07 100755
--- a/lib/models/maintainer.rb
+++ b/lib/models/maintainer.rb
@@ -11,10 +11,9 @@ module Moka
       property :email,    String
       property :pubkeys,  Text
 
-      has n, :roles, :through => Resource
-
-      #has n, :collections, :through => Resource
-      #has n, :projects, :through => Resource
+      has n,   :roles,       :through => Resource
+      has n,   :collections, :through => Resource
+      has n,   :projects,    :through => Resource
 
       def self.authenticate(username, password)
         encrypted_password = Digest::SHA1.hexdigest(password)
diff --git a/lib/models/project.rb b/lib/models/project.rb
index 37058a4..a3d790d 100755
--- a/lib/models/project.rb
+++ b/lib/models/project.rb
@@ -68,22 +68,34 @@ module Moka
           Archive.instance.project_release_delete(self)
         end
 
+        def release_url
+          dir = Archive.instance.project_branch_dir(self.project, self.branch)
+          dir.gsub(Archive.instance.root_dir, Configuration.get(:mirror))
+        end
+
+        def download_url
+          dir = Archive.instance.project_branch_dir(self.project, self.branch)
+          dir.gsub(Archive.instance.root_dir, Configuration.get(:mirror))
+        end
+
         def template_name
           'mailinglist_project_announcement'
         end
 
       end
 
-      property :name,           String, :key => true
-      property :website,        String
-      property :classification, String
-      property :description,    Text
+      property :name,        String, :key => true
+      property :website,     String
+      property :description, Text
 
       has n,   :maintainers, :through => Resource
 
-      # classification
       # mailinglists
 
+      def classification
+        Classification.find_by_project(self)
+      end
+
       def ==(other)
         other.is_a?(self.class) and other.name == name
       end
@@ -118,10 +130,6 @@ module Moka
       def release_from_tarball(tarball)
         Archive.instance.project_release_from_tarball(self, tarball)
       end
-
-      def self.find_all_by_maintainer(maintainer)
-        all()
-      end
     end
   end
 end
diff --git a/lib/models/role.rb b/lib/models/role.rb
index 877a6ec..c736974 100644
--- a/lib/models/role.rb
+++ b/lib/models/role.rb
@@ -4,6 +4,8 @@ module Moka
       include DataMapper::Resource
 
       property :name, String, :key => true
+
+      has n,   :maintainers, :through => Resource
     end
   end
 end
diff --git a/lib/views/collection.erb b/lib/views/collection.erb
index 152d451..09acb5a 100755
--- a/lib/views/collection.erb
+++ b/lib/views/collection.erb
@@ -3,7 +3,7 @@
 <table cellspacing="0" cellpadding="0">
   <% for release in @collection.releases.sort.reverse %>
     <tr>
-      <th><a href="<%= Mirror.find_all.first.release_url(release) %>"><%= release.version %></a></th>
+      <th><a href="<%= release.release_url %>"><%= release.version %></a></th>
       <td>
         <a href="/collection/<%= @collection.name %>/release/<%= release.version %>">Update</a>
         <a href="/collection/<%= @collection.name %>/release/<%= release.version %>/delete">Delete</a>
diff --git a/lib/views/head.erb b/lib/views/head.erb
index ef32520..dc858e9 100755
--- a/lib/views/head.erb
+++ b/lib/views/head.erb
@@ -8,13 +8,13 @@
   <body>
     <h1><%= if params.has_key?(:title) then params[:title] else 'Xfce Release Manager' end %></h1>
     <p id="main-toolbar">
-      <% if env['warden'].authenticated? %>
+      <% if authentication_finished? %>
         <a href="/">Manage Releases</a>
       <% else %>
         <a href="/login">Login</a>
         <a href="/request">Request Account</a>
       <% end %>
-      <% if env['warden'].authenticated? and authentication_user %>
+      <% if authentication_finished? and authentication_user %>
         <% if authentication_user.is_admin %>
           <a href="/maintainer">Maintainers</a>
         <% end %>
diff --git a/lib/views/index.erb b/lib/views/index.erb
index 8af75ab..22d3b96 100755
--- a/lib/views/index.erb
+++ b/lib/views/index.erb
@@ -3,7 +3,7 @@
 <ul>
   <li><a href="/feed">View the release news feed</a></li>
   <li><a href="http://identi.ca/xfce">Visit the identi.ca release news channel</a></li>
-  <% if env['warden'].authenticated? %>
+  <% if authentication_finished? %>
     <li><a href="/">Manage releases of your projects</a></li>
   <% else %>
     <li><a href="/login">Manage releases of your projects</a></li>
diff --git a/lib/views/manage_releases.erb b/lib/views/manage_releases.erb
index 5240e36..430cff7 100644
--- a/lib/views/manage_releases.erb
+++ b/lib/views/manage_releases.erb
@@ -3,7 +3,7 @@
 <p><a href="/announcements">Publish announcements</a></p>
 <h2>Collections</h2>
 <table cellspacing="0" cellpadding="0">
-  <% for collection in Collection.find_all_by_maintainer(env['warden'].user).sort %>
+  <% for collection in authentication_user.collections.sort %>
     <tr>
       <th><a href="/collection/<%= collection.name %>"><%= collection.display_name %></a></th>
       <td>
@@ -14,7 +14,7 @@
 </table>
 <h2>Projects</h2>
 <table cellspacing="0" cellpadding="0">
-  <% for project in Project.find_all_by_maintainer(env['warden'].user).sort %>
+  <% for project in authentication_user.projects.sort %>
     <tr>
       <th><a href="/project/<%= project.name %>"><%= project.name %></a></th>
       <td>
diff --git a/lib/views/project.erb b/lib/views/project.erb
index 952276e..e8d3fae 100755
--- a/lib/views/project.erb
+++ b/lib/views/project.erb
@@ -29,7 +29,7 @@
     <% for release in releases %>
       <tr>
         <th><%= "#{branch.name} Branch" if release == releases.first %></th>
-        <th><a href="<%= Mirror.find_all.first.download_url(release) %>"><%= release.version %></a></th>
+        <th><a href="<%= release.download_url %>"><%= release.version %></a></th>
         <td>
           <a href="/project/<%= @project.name %>/branch/<%= branch.name %>/release/<%= release.version %>/update">Update</a>
           <a href="/project/<%= @project.name %>/branch/<%= branch.name %>/release/<%= release.version %>/delete">Delete</a>
diff --git a/moka.gemspec b/moka.gemspec
index 6e4b147..efae094 100644
--- a/moka.gemspec
+++ b/moka.gemspec
@@ -33,7 +33,6 @@ Gem::Specification.new do |s|
     "lib/models/collection.rb",
     "lib/models/configuration.rb",
     "lib/models/maintainer.rb",
-    "lib/models/mirror.rb",
     "lib/models/project.rb",
     "lib/models/role.rb",
     "lib/moka.rb",



More information about the Xfce4-commits mailing list