PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/lib/bitbucket_adapter.rb

https://bitbucket.org/yuji_developer/redmine_bitbucket
Ruby | 66 lines | 52 code | 14 blank | 0 comment | 2 complexity | f1ee630f1dc13745111a3fcf1f339532 MD5 | raw file
  1. class BitbucketAdapter
  2. def initialize(json, new_webhook)
  3. if new_webhook
  4. load_new_webhook_parameters(json)
  5. else
  6. load_old_service_parameters(json)
  7. end
  8. end
  9. def identifier
  10. "#{@owner}_#{@slug}"
  11. end
  12. def update_repository(repository)
  13. raise TypeError, "Invalid repository #{repository.identifier}" unless repository.is_a?(@scm.scm_class)
  14. @scm.update_repository(repository.url)
  15. end
  16. def create_repository(project)
  17. path = "#{@owner}/#{@slug}"
  18. local_root_path = Setting.plugin_redmine_bitbucket[:local_path]
  19. local_url = "#{local_root_path}/#{path}/#{project.identifier}/"
  20. FileUtils.mkdir_p(local_url) unless File.exists?(local_url)
  21. if @scm.clone_repository(path, local_url)
  22. repository = @scm.scm_class.new
  23. repository.identifier = identifier
  24. repository.url = local_url
  25. repository.is_default = project.repository.nil?
  26. repository.project = project
  27. repository.save
  28. return repository
  29. end
  30. end
  31. private
  32. def load_new_webhook_parameters(json)
  33. @owner = json['owner']['username']
  34. @slug = json['full_name'].split('/').last
  35. load_scm(json['scm'].downcase)
  36. end
  37. def load_old_service_parameters(json)
  38. @owner = json['owner']
  39. @slug = json['slug']
  40. load_scm(json['scm'].downcase)
  41. end
  42. def load_scm(scm)
  43. case scm
  44. when 'git'
  45. @scm = BitbucketGit
  46. when 'hg'
  47. @scm = BitbucketHg
  48. else
  49. raise TypeError, "Repository type (#{scm}) not supported"
  50. end
  51. end
  52. end