Class: GithubRepo
- Inherits:
-
Oxidized::Hook
- Object
- Oxidized::Hook
- GithubRepo
- Defined in:
- lib/oxidized/hook/githubrepo.rb
Instance Attribute Summary
Attributes inherited from Oxidized::Hook
Instance Method Summary collapse
Instance Method Details
#fetch_and_merge_remote(repo, creds) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/oxidized/hook/githubrepo.rb', line 52 def fetch_and_merge_remote(repo, creds) result = repo.fetch('origin', [repo.head.name], credentials: creds) logger.debug result.inspect their_branch = remote_branch(repo) unless their_branch logger.debug 'remote branch does not exist yet, nothing to merge' return end result = repo.merge_analysis(their_branch.target_id) if result.include? :up_to_date logger.debug 'nothing to merge' return end logger.debug "merging fetched branch #{their_branch.name}" merge_index = repo.merge_commits(repo.head.target_id, their_branch.target_id) if merge_index.conflicts? logger.warn "Conflicts detected, skipping Rugged::Commit.create" return end Rugged::Commit.create(repo, parents: [repo.head.target, their_branch.target], tree: merge_index.write_tree(repo), message: "Merge remote-tracking branch '#{their_branch.name}'", update_ref: "HEAD") end |
#run_hook(ctx) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/oxidized/hook/githubrepo.rb', line 8 def run_hook(ctx) unless ctx.node logger.error 'GithubRepo.run_hook: no node provided' return end unless ctx.node.repo logger.error "Oxidized output is not git, can't push to remote" return end repo = Rugged::Repository.new(ctx.node.repo) creds = credentials(ctx.node) url = remote_repo(ctx.node) if url.nil? || url.empty? logger.error "No repository defined for #{ctx.node.group}/#{ctx.node.name}" return end logger.info "Pushing local repository(#{repo.path}) to remote: #{url}" if repo.remotes['origin'].nil? repo.remotes.create('origin', url) elsif repo.remotes['origin'].url != url repo.remotes.set_url('origin', url) end remote = repo.remotes['origin'] begin fetch_and_merge_remote(repo, creds) remote.push([repo.head.name], credentials: creds) rescue Rugged::NetworkError => e if e. == 'unsupported URL protocol' logger.warn "Rugged does not support the git URL '#{url}'." unless Rugged.features.include?(:ssh) logger.warn "Note: Rugged isn't installed with ssh support. You may need " \ '"gem install rugged -- --with-ssh"' end end # re-raise exception for the calling method raise end end |
#validate_cfg! ⇒ Object
4 5 6 |
# File 'lib/oxidized/hook/githubrepo.rb', line 4 def validate_cfg! raise KeyError, 'hook.remote_repo is required' unless cfg.has_key?('remote_repo') end |