#!/usr/bin/ruby
require 'rubygems'
require 'time'
require 'net/http'
require 'json'
require 'net/https'


# You will need to change the following five lines. Svnviewer_url is optional.
########################
icescrum_url = "http://localhost:8080/icescrum/"
pkey = "TESTPROJ"
username = "admin"
password = "adminadmin!"
svnviewer_url = "http://svnviewer/svn-history/"
########################
icescrum_url = icescrum_url[-1,1] == '/' ? icescrum_url : icescrum_url +'/'
receiver = icescrum_url + "ws/p/" + pkey + "/commit"
svnviewer_url = svnviewer_url[-1,1] == '/' ? svnviewer_url : svnviewer_url +'/'
svnlook = "/usr/bin/svnlook"

if ARGV.size<2
  puts "Usage: post_commit.rb REPO REV"
  return 0
end
repository= ARGV[0]
revision= ARGV[1]
commit={ }
commit[:revision] = revision
commit[:message] = `#{svnlook} log #{repository} -r #{revision}`.strip
commit[:author] = `#{svnlook} author #{repository} -r #{revision}`.strip
commit[:timestamp] = Time.parse(`#{svnlook} date #{repository} -r #{revision}`.strip.sub(/ /,'T').sub(/ /,'').split(" (").first).iso8601
changed = `#{svnlook} changed #{repository} -r #{revision}`.split(/\n/).collect{ |line| line.split(' ')}
commit[:path_count] = changed.size
if svnviewer_url
        commit[:url] = svnviewer_url + "r" + revision
end
commit[:modified]=[]
commit[:added]=[]
commit[:removed]=[]
changed.each do |line|
  case line[0]
    when 'A' then commit[:added]<< line[-1]
    when 'D' then commit[:removed]<< line[-1]
    else  commit[:modified]<< line[-1]
  end
end

uri=URI.parse(receiver)
req = Net::HTTP::Post.new(uri.path)
req.basic_auth username, password
req.form_data =  {"payload"=>  { :revisions=>[commit] }.to_json}
http = Net::HTTP.new(uri.host, uri.port)

if uri.scheme == 'https'
  http.use_ssl=true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end

res = http.start { |http| http.request(req) }