PageRenderTime 47ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/app/models/repository_observer.rb

https://bitbucket.org/yymm/redmine_bitbucketgit_hook
Ruby | 39 lines | 33 code | 3 blank | 3 comment | 6 complexity | 30ca5772b034b9334797e5d698bcd8c7 MD5 | raw file
  1. class RepositoryObserver < ActiveRecord::Observer
  2. # CREATE DIR Manually
  3. # KNOWN Problem: Changing BitBucket Git Dir in use
  4. # KNOWN Problem: Two Repositorys with the same name from different users
  5. def before_save(repository)
  6. Rails.logger.info("before save")
  7. flag = repository.type == 'Git' || repository.type == 'Repository::Git'
  8. flag &= repository.url.match('.*(bitbucket.org|github.com).*')
  9. if flag
  10. base_dir_name = repository.url[/[^\/]+.git/]
  11. url = repository.url
  12. user = /^\S*[:\/](.*)\/\S*$/.match( url )
  13. user = user[1]
  14. git_dir = Setting.plugin_redmine_bitbucketgit_hook[:bitbucketgit_dir].to_s
  15. git_dir = git_dir + '/' + user + '_' + base_dir_name
  16. Rails.logger.info git_dir
  17. redminedir = Dir.getwd + '/'
  18. Rails.logger.info redminedir+git_dir
  19. if Dir[redminedir+git_dir] == []
  20. comm_str = 'git clone --mirror '+ url + ' "'+ redminedir + git_dir +'"'
  21. b = system(comm_str)
  22. repository.url = redminedir + git_dir
  23. return false
  24. else
  25. Rails.logger.info "Dir already in use..."
  26. return false
  27. end
  28. end
  29. end
  30. private
  31. def exec(command)
  32. Rails.logger.info("BitbucketGitHook: Executing command: '#{command}'")
  33. output = `#{command}`
  34. Rails.logger.info("BitbucketGitHook: Shell returned '#{output}'")
  35. end
  36. end