Patch #986 ยป clone_remote_git.diff
| app/models/repository/git.rb (working copy) | ||
|---|---|---|
| 16 | 16 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| 17 | 17 | |
| 18 | 18 |
require 'redmine/scm/adapters/git_adapter' |
| 19 | ||
| 19 |
require 'fileutils' |
|
| 20 | 20 |
class Repository::Git < Repository |
| 21 | 21 |
attr_protected :root_url |
| 22 | 22 |
validates_presence_of :url |
| 23 | 23 | |
| 24 |
before_save :clone_repository |
|
| 25 |
after_destroy :remove_clone |
|
| 26 |
|
|
| 27 |
def identifier |
|
| 28 |
self.project.identifier |
|
| 29 |
end |
|
| 30 |
|
|
| 31 |
def clone_repository |
|
| 32 |
return unless self.url.starts_with?("git://")
|
|
| 33 |
git_project_name = self.url.split("/").last.gsub(".git","")
|
|
| 34 |
|
|
| 35 |
dir = "#{RAILS_ROOT}/repositories/git/#{identifier}/"
|
|
| 36 |
path_to_git_repository = dir + git_project_name |
|
| 37 |
|
|
| 38 |
FileUtils.rm_rf(dir) if File.exist?(dir) |
|
| 39 |
FileUtils.mkdir_p(dir) |
|
| 40 |
cmd = "cd #{dir} && git clone #{self.url}"
|
|
| 41 |
IO.popen(cmd, "r+") |
|
| 42 |
self.url = "#{path_to_git_repository}/.git"
|
|
| 43 |
end |
|
| 44 |
|
|
| 45 |
def remove_clone |
|
| 46 |
dir = "#{RAILS_ROOT}/repositories/git/#{identifier}"
|
|
| 47 |
FileUtils.rm_rf(dir) if File.exist?(dir) |
|
| 48 |
end |
|
| 49 |
|
|
| 24 | 50 |
def scm_adapter |
| 25 | 51 |
Redmine::Scm::Adapters::GitAdapter |
| 26 | 52 |
end |
| lib/redmine/scm/adapters/git_adapter.rb (working copy) | ||
|---|---|---|
| 22 | 22 |
module Adapters |
| 23 | 23 |
class GitAdapter < AbstractAdapter |
| 24 | 24 |
|
| 25 |
def target(path) |
|
| 26 |
url |
|
| 27 |
end |
|
| 28 |
|
|
| 25 | 29 |
# Git executable name |
| 26 | 30 |
GIT_BIN = "git" |
| 27 | 31 | |