namespace :gitlab do
  desc "sync gitlab's commit acts to trustie"
  task :acts_to_trustie => :environment do
    begin
      projects = Project.where(:status => 1)
      projects.each do |project|
        c = Commit.find_by_sql("SELECT * FROM `commits` where project_id = #{project.id} order by committed_on limit 1;")
        g_project = g.project(project.gpid)
      end
    rescue Exception => e
      puts e
    end
    g = Gitlab.client
    ids = [2,847,931,942]
    projects = Project.find(ids)
    projects.each do |project|
      c = Commit.where(:project_id => project.id)
      if c.blank?
        begin
          g_project = g.project(project.gpid)
          # 获取默认分支
          g_default_branch = g_project.default_branch.nil? ?  "master" : g_project.default_branch
          # 总的提交次数
          commit_count = g.user_static(project.gpid, :rev => g_default_branch).count
          pages = commit_count / 20 + 1
          puts "#{pages}"
          puts "project id is #{project.id}"
          # api获取每次只能获取20次提交，所以需要通过取得page值来获取每页的提交动态
          (0..pages).each do |page|
            commits = g.commits(project.gpid, :ref_name => g_default_branch, :page => page)
            commits.each do |commit|
              Commit.create(:project_id => project.id, :repository_id => project.gpid, :version => commit.id, :committer => commit.author_email, :comments => Redmine::CodesetUtil.to_utf8(commit.title, 'UTF-8'), :committed_on => commit.created_at)
            end
          end
        rescue Exception => e
          puts e
        end
      end
    end
  end
end
