[refs #90] initial
This commit is contained in:
parent
02095e62c1
commit
d48a3413cc
|
@ -6,6 +6,7 @@ class Project < ActiveRecord::Base
|
||||||
belongs_to :owner, :polymorphic => true, :counter_cache => :own_projects_count
|
belongs_to :owner, :polymorphic => true, :counter_cache => :own_projects_count
|
||||||
|
|
||||||
has_many :issues, :dependent => :destroy
|
has_many :issues, :dependent => :destroy
|
||||||
|
has_many :pull_requests, :dependent => :destroy
|
||||||
has_many :build_lists, :dependent => :destroy
|
has_many :build_lists, :dependent => :destroy
|
||||||
|
|
||||||
has_many :project_imports, :dependent => :destroy
|
has_many :project_imports, :dependent => :destroy
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -0,0 +1,5 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe PullRequest do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
Loading…
Reference in New Issue