Skip to content

Instantly share code, notes, and snippets.

@chsh
Created December 20, 2010 04:21
Show Gist options
  • Save chsh/748009 to your computer and use it in GitHub Desktop.
Save chsh/748009 to your computer and use it in GitHub Desktop.
gitosis.conf to conf/gitolite.conf convert script
# sis2lite.rb
class RepoRep
def initialize()
@repomap = {}
end
def save_state(group, members, writable, readonly)
a_members = members.strip.split(/\s+/)
if writable
writables = writable.strip.split(/\s+/)
writables.each do |prj|
@repomap[prj] ||= {}
@repomap[prj]['RW+'] ||= []
@repomap[prj]['RW+'] = @repomap[prj]['RW+'] + a_members
end
end
if readonly
readonlies = readonly.strip.split(/\s+/)
readonlies.each do |prj|
@repomap[prj] ||= {}
@repomap[prj]['R'] ||= []
@repomap[prj]['R'] = @repomap[prj]['R'] + a_members
end
end
end
def flush_repomap
@repomap.each do |key, value|
puts "repo #{key}"
puts ""
puts " RW+ #{value['RW+'].sort.uniq.join(' ')}" if value['RW+']
puts " R #{value['R'].sort.uniq.join(' ')}" if value['R']
end
end
def run
group = nil
members = nil
writable = nil
readonly = nil
STDIN.each do |line|
line.chomp!
next if line =~ /^\s*$/
if line =~ /^\[group (.+)\]$/
grc = $1
if group && members && (writable || readonly)
save_state(group, members, writable, readonly)
STDERR.puts "status saved #{group},#{members},#{writable},#{readonly}"
end
group = grc; members = nil; writable = nil; readonly = nil
elsif line =~ /members\s*=\s*(.+)$/
members = $1
STDERR.puts "members = #{members}"
elsif line =~ /writable\s*=\s*(.+)$/
writable = $1
STDERR.puts "writable = #{writable}"
elsif line =~ /readonly\s*=\s*(.+)$/
readonly = $1
STDERR.puts "readonly = #{readonly}"
end
end
if group && members && (writable || readonly)
save_state(group, members, writable, readonly)
end
STDERR.puts "@repomap:#{@repomap.inspect}"
flush_repomap
end
end
RepoRep.new.run
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment