PageRenderTime 65ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/bitbucket_adapter.rb

https://bitbucket.org/daenoor/redmine_bitbucket
Ruby | 46 lines | 36 code | 10 blank | 0 comment | 1 complexity | 99ab325560327958b392d6803ba57e8b MD5 | raw file
  1. require 'json'
  2. class BitbucketAdapter
  3. def initialize(json)
  4. @payload = JSON.parse(json)['repository']
  5. case @payload['scm'].downcase
  6. when 'git'
  7. @scm = BitbucketGit
  8. when 'hg'
  9. @scm = BitbucketHg
  10. else
  11. raise TypeError, "Repository type (#{@payload['scm']}) not supported"
  12. end
  13. end
  14. def identifier
  15. "#{@payload['owner']}_#{@payload['slug']}"
  16. end
  17. def update_repository(repository)
  18. raise TypeError, "Invalid repository #{repository.identifier}" unless repository.is_a?(@scm.scm_class)
  19. @scm.update_repository(repository.url)
  20. end
  21. def create_repository(project)
  22. path = "#{@payload['owner']}/#{@payload['slug']}"
  23. local_root_path = Setting.plugin_redmine_bitbucket[:local_path]
  24. local_url = "#{local_root_path}/#{project.identifier}/#{path}"
  25. FileUtils.mkdir_p(local_url) unless File.exists?(local_url)
  26. if @scm.clone_repository(path, local_url)
  27. repository = @scm.scm_class.new
  28. repository.identifier = identifier
  29. repository.url = local_url
  30. repository.is_default = project.repository.nil?
  31. repository.project = project
  32. repository.save
  33. return repository
  34. end
  35. end
  36. end