59 lines
1.7 KiB
Ruby
59 lines
1.7 KiB
Ruby
module Middleman
|
|
module Deploy
|
|
module Strategies
|
|
module Git
|
|
class ForcePush < Base
|
|
def process
|
|
Dir.chdir(build_dir) do
|
|
add_remote_url
|
|
checkout_branch
|
|
commit_branch('-f')
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def add_remote_url
|
|
url = get_remote_url
|
|
|
|
unless File.exist?('.git')
|
|
`git init`
|
|
`git remote add origin #{url}`
|
|
`git config user.name "#{user_name}"`
|
|
`git config user.email "#{user_email}"`
|
|
else
|
|
# check if the remote repo has changed
|
|
unless url == `git config --get remote.origin.url`.chop
|
|
`git remote rm origin`
|
|
`git remote add origin #{url}`
|
|
end
|
|
# check if the user name has changed
|
|
`git config user.name "#{user_name}"` unless user_name == `git config --get user.name`
|
|
# check if the user email has changed
|
|
`git config user.email "#{user_email}"` unless user_email == `git config --get user.email`
|
|
end
|
|
end
|
|
|
|
def get_remote_url
|
|
remote = self.remote
|
|
url = remote
|
|
|
|
# check if remote is not a git url
|
|
unless remote =~ /\.git$/
|
|
url = `git config --get remote.#{url}.url`.chop
|
|
end
|
|
|
|
# if the remote name doesn't exist in the main repo
|
|
if url == ''
|
|
puts "Can't deploy! Please add a remote with the name '#{remote}' to your repo."
|
|
exit
|
|
end
|
|
|
|
url
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|