Merge pull request #2067 from riyad/diff-and-patch-for-commits-and-merge-requests
Diff and patch for commits and merge requests
This commit is contained in:
commit
e750efd9fc
14 changed files with 238 additions and 37 deletions
|
@ -150,4 +150,19 @@ class Commit
|
|||
def parents_count
|
||||
parents && parents.count || 0
|
||||
end
|
||||
|
||||
# Shows the diff between the commit's parent and the commit.
|
||||
#
|
||||
# Cuts out the header and stats from #to_patch and returns only the diff.
|
||||
def to_diff
|
||||
# see Grit::Commit#show
|
||||
patch = to_patch
|
||||
|
||||
# discard lines before the diff
|
||||
lines = patch.split("\n")
|
||||
while !lines.first.start_with?("diff --git") do
|
||||
lines.shift
|
||||
end
|
||||
lines.join("\n")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -202,20 +202,22 @@ class MergeRequest < ActiveRecord::Base
|
|||
false
|
||||
end
|
||||
|
||||
def to_raw
|
||||
FileUtils.mkdir_p(Rails.root.join("tmp", "patches"))
|
||||
patch_path = Rails.root.join("tmp", "patches", "merge_request_#{self.id}.patch")
|
||||
|
||||
from = commits.last.id
|
||||
to = source_branch
|
||||
|
||||
project.repo.git.run('', "format-patch" , " > #{patch_path.to_s}", {}, ["#{from}..#{to}", "--stdout"])
|
||||
|
||||
patch_path
|
||||
end
|
||||
|
||||
def mr_and_commit_notes
|
||||
commit_ids = commits.map(&:id)
|
||||
Note.where("(noteable_type = 'MergeRequest' AND noteable_id = :mr_id) OR (noteable_type = 'Commit' AND noteable_id IN (:commit_ids))", mr_id: id, commit_ids: commit_ids)
|
||||
end
|
||||
|
||||
# Returns the raw diff for this merge request
|
||||
#
|
||||
# see "git diff"
|
||||
def to_diff
|
||||
project.repo.git.native(:diff, {timeout: 30, raise: true}, "#{target_branch}...#{source_branch}")
|
||||
end
|
||||
|
||||
# Returns the commit as a series of email patches.
|
||||
#
|
||||
# see "git format-patch"
|
||||
def to_patch
|
||||
project.repo.git.format_patch({timeout: 30, raise: true, stdout: true}, "#{target_branch}..#{source_branch}")
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue