[refs #90] initial

This commit is contained in:
Alexander Machehin 2012-04-17 00:40:50 +06:00
parent 64ba44ccab
commit 71fdaa4e4d
4 changed files with 76 additions and 2 deletions

View File

@ -6,6 +6,7 @@ class Project < ActiveRecord::Base
belongs_to :owner, :polymorphic => true, :counter_cache => :own_projects_count
has_many :issues, :dependent => :destroy
has_many :pull_requests, :dependent => :destroy
has_many :build_lists, :dependent => :destroy
has_many :project_imports, :dependent => :destroy
@ -51,14 +52,14 @@ class Project < ActiveRecord::Base
include Modules::Models::Owner
def build_for(platform, user, arch = 'i586')
def build_for(platform, user, arch = 'i586')
# Select main and project platform repository(contrib, non-free and etc)
# If main does not exist, will connect only project platform repository
# If project platform repository is main, only main will be connect
build_reps = [platform.repositories.find_by_name('main')]
build_reps += platform.repositories.select {|rep| self.repository_ids.include? rep.id}
build_ids = build_reps.compact.map(&:id).uniq
arch = Arch.find_by_name(arch) if arch.acts_like?(:string)
build_lists.create do |bl|
bl.pl = platform

View File

@ -0,0 +1,62 @@
class PullRequest < Issue
serialize :data
state_machine :initial => :open do
event :open do
transition :closed => :open
transition :blocked => :open, :if => lambda {|pull| pull.can_merge?}
end
event :block do
transition :open => :blocked
end
event :merge do
transition :open => :merged, :if => lambda {|pull| pull.can_merge?}
transition :open => :blocked, :if => lambda {|pull| !pull.can_merge?}
end
event :close do
transition [:open, :blocked] => :closed
end
end
def can_merge?
!merge
end
protected
def path
if Rails.env == "production"
File.join('/srv/rosa_build/shared/tmp', "pull_requests", [id, project.owner.uname, project.name].join('-'))
else
File.join(Rails.root, "tmp", Rails.env, "pull_requests", [id, project.owner.uname, project.name].join('-'))
end
end
def merge
clone
system "cd #{path} && git checkout #{data.base_branch} && git merge #{data.head_branch} && git reset --hard #{data.head_branch}"
end
def clone
git = Git.new(path)
unless git.exist?
FileUtils.mkdir_p(path)
Dir.chdir(path) do
system("git clone --local --no-hardlinks #{project.path} #{path}")
end
else
Dir.chdir(path) do
[data.base_branch, data.head_branch].each do |branch|
system "git checkout #{branch} && git pull origin #{branch}"
end
end
end
# TODO catch errors
end
end

View File

@ -0,0 +1,6 @@
class CreatePullRequests < ActiveRecord::Migration
def change
add_column :issues, :type, :string
add_column :issues, :data, :text, :null => false, :default => 0
end
end

View File

@ -0,0 +1,5 @@
require 'spec_helper'
describe PullRequest do
pending "add some examples to (or delete) #{__FILE__}"
end