[Xfce4-commits] <moka:master> Add script to generate gitolite config.

Nick Schermer noreply at xfce.org
Sun Nov 20 14:30:31 CET 2011


Updating branch refs/heads/master
         to c28c0f2805343cccc26d9b955ae0a6af3699fc4c (commit)
       from 1940bbc1366d6fd697c540b124e2477a97636e86 (commit)

commit c28c0f2805343cccc26d9b955ae0a6af3699fc4c
Author: Nick Schermer <nick at xfce.org>
Date:   Sun Oct 9 20:43:07 2011 +0200

    Add script to generate gitolite config.

 bin/xfce-gitolite.rb              |   93 +++++++++++++++++++++++++++++++++++++
 lib/models/archive.rb             |    2 +-
 lib/models/classification.rb      |   10 ++++
 lib/views/maintainer_profile.haml |    3 +-
 4 files changed, 105 insertions(+), 3 deletions(-)

diff --git a/bin/xfce-gitolite.rb b/bin/xfce-gitolite.rb
new file mode 100755
index 0000000..58e0c7c
--- /dev/null
+++ b/bin/xfce-gitolite.rb
@@ -0,0 +1,93 @@
+#!/usr/bin/env ruby
+
+require 'rubygems'
+require 'dm-core'
+require 'dm-migrations'
+require 'moka'
+
+# global configuration
+Moka::Models::Configuration.load do |conf|
+  conf.set :moka_url, 'http://localhost:9292'
+  conf.set :archive_dir, '/home/nick/websites/archive.xfce.org/'
+  conf.set :mirror, 'http://archive.xfce.org/'
+  conf.set :collection_release_pattern, /^([0-9]).([0-9]+)(pre[0-9])?$/
+  conf.set :noreply, 'noreply at xfce.org'
+end
+
+# Connect to the database
+directory = File.expand_path(File.dirname(__FILE__))
+db = File.join(directory, '../examples/xfce/example.db')
+
+#DataMapper::Logger.new($stdout, :debug)
+DataMapper.setup(:default, 'sqlite://' + db)
+
+gitolitedir = '/tmp/gitolitetest'
+
+keydir = File.join(gitolitedir, "keydir")
+File.makedirs(keydir) unless File.directory?(keydir)
+
+confdir = File.join(gitolitedir, "conf")
+File.makedirs(confdir) unless File.directory?(confdir)
+
+# project array
+projects = Hash.new
+
+for maintainer in Moka::Models::Maintainer.all(:active => true).sort
+
+  # update ssh key of this user
+  if maintainer.pubkeys and not maintainer.pubkeys.empty?
+    filename = File.join(keydir, maintainer.username + ".pub")
+    file = File.new(filename, "w+")
+
+    if file
+      begin
+        file.flock(File::LOCK_SH)
+        file.puts maintainer.pubkeys
+      ensure
+        file.flock(File::LOCK_UN)
+      end
+      file.close
+    else
+      puts "Unable to open file " + filename
+    end
+  end
+
+  # store the projects this maintainer handles
+  for project in maintainer.projects
+    if not projects[project.name]
+      projects[project.name ] = Array.new
+    end
+    projects[project.name] << maintainer.username
+  end
+end
+
+
+repo_rules = ""
+
+# build the gitolite config file
+for classification in Moka::Models::Classification.find_all.sort
+
+  for project in classification.project_names.sort
+
+    repo_rules << "repo " + classification.name + "/" + project + "\n"
+
+    if projects[project]
+      repo_rules << "\tRW ="
+      for username in projects[project].sort
+        repo_rules << " " + username
+      end
+      repo_rules << "\n"
+    end
+  repo_rules << "\n"
+  end
+end
+
+# write config file
+cfile = File.new(File.join(confdir, "gitolite.conf"), "w+")
+begin
+  cfile.flock(File::LOCK_SH)
+  cfile.puts repo_rules
+ensure
+  cfile.flock(File::LOCK_UN)
+end
+cfile.close
diff --git a/lib/models/archive.rb b/lib/models/archive.rb
index 4d1cd97..b4a1e0c 100755
--- a/lib/models/archive.rb
+++ b/lib/models/archive.rb
@@ -170,7 +170,7 @@ module Moka
               cdir = Dir.new(classification_dir(classification))
 
               classification.project_names = cdir.entries.select do |entry|
-                entry != '.' and entry != '.' \
+                entry != '.' and entry != '..' \
                   and File.directory?(File.join(classification_dir(classification), entry))
               end
             end
diff --git a/lib/models/classification.rb b/lib/models/classification.rb
index d202524..a8f066b 100755
--- a/lib/models/classification.rb
+++ b/lib/models/classification.rb
@@ -11,6 +11,16 @@ module Moka
         @directory = directory
         @project_names = []
       end
+      
+      def ==(other)
+        other.is_a?(self.class) \
+          and other.name == name
+      end
+
+      def <=>(other)
+        return 0 unless other.is_a?(self.class)
+        name <=> other.name
+      end
 
       def self.find_all
         Archive.instance.classifications
diff --git a/lib/views/maintainer_profile.haml b/lib/views/maintainer_profile.haml
index d716a24..43d4fe2 100644
--- a/lib/views/maintainer_profile.haml
+++ b/lib/views/maintainer_profile.haml
@@ -34,8 +34,7 @@
     %input{:type => "text", :name => "realname", :value => @maintainer.realname}
   %p
     %label{:for => "pubkeys"} SSH public-keys:
-    %textarea{:name => "pubkeys", :rows => "5", :wrap => "off"}
-      #{@maintainer.pubkeys}
+    %textarea{:name => "pubkeys", :rows => "5", :wrap => "off"} #{@maintainer.pubkeys}
   %p.info
     Each line of the public keys should start with ssh-dsa or ssh-rsa else
     the key is not saved. Updating the keys on the server can take up to 1


More information about the Xfce4-commits mailing list