Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Dewar <george.dewar@datacom.co.nz>2014-03-21 08:05:46 +0400
committerGeorge Dewar <george.dewar@datacom.co.nz>2014-03-27 00:15:25 +0400
commit83f811fff5f6b2188c82f187f747122d2f7cd936 (patch)
tree24280b67db4af295f0d4e7687362c600330e86f3 /app/helpers
parentad7cd8fb35869abc884a415fd16057d522a2fd8e (diff)
Refactor Parallel Diff feature and add scrollbars
Also now removed lines relating to unused comments feature
Diffstat (limited to 'app/helpers')
-rw-r--r--app/helpers/commits_helper.rb76
1 files changed, 74 insertions, 2 deletions
diff --git a/app/helpers/commits_helper.rb b/app/helpers/commits_helper.rb
index 5e5f3f77a21..c6e4f574b67 100644
--- a/app/helpers/commits_helper.rb
+++ b/app/helpers/commits_helper.rb
@@ -105,8 +105,80 @@ module CommitsHelper
branches.sort.map { |branch| link_to(branch, project_tree_path(project, branch)) }.join(", ").html_safe
end
- def get_old_file(project, commit, diff)
- project.repository.blob_at(commit.parent_id, diff.old_path) if commit.parent_id
+ def parallel_diff_lines(project, commit, diff, file)
+ old_file = project.repository.blob_at(commit.parent_id, diff.old_path) if commit.parent_id
+ deleted_lines = {}
+ added_lines = {}
+ each_diff_line(diff, 0) do |line, type, line_code, line_new, line_old|
+ if type == "old"
+ deleted_lines[line_old] = { line_code: line_code, type: type, line: line }
+ elsif type == "new"
+ added_lines[line_new] = { line_code: line_code, type: type, line: line }
+ end
+ end
+ max_length = old_file ? old_file.sloc + added_lines.length : file.sloc
+
+ offset1 = 0
+ offset2 = 0
+ old_lines = []
+ new_lines = []
+
+ max_length.times do |line_index|
+ line_index1 = line_index - offset1
+ line_index2 = line_index - offset2
+ deleted_line = deleted_lines[line_index1 + 1]
+ added_line = added_lines[line_index2 + 1]
+ old_line = old_file.lines[line_index1] if old_file
+ new_line = file.lines[line_index2]
+
+ if deleted_line && added_line
+ elsif deleted_line
+ new_line = nil
+ offset2 += 1
+ elsif added_line
+ old_line = nil
+ offset1 += 1
+ end
+
+ old_lines[line_index] = DiffLine.new
+ new_lines[line_index] = DiffLine.new
+
+ # old
+ if line_index == 0 && diff.new_file
+ old_lines[line_index].type = :file_created
+ old_lines[line_index].content = 'File was created'
+ elsif deleted_line
+ old_lines[line_index].type = :deleted
+ old_lines[line_index].content = old_line
+ old_lines[line_index].num = line_index1 + 1
+ old_lines[line_index].code = deleted_line[:line_code]
+ elsif old_line
+ old_lines[line_index].type = :no_change
+ old_lines[line_index].content = old_line
+ old_lines[line_index].num = line_index1 + 1
+ else
+ old_lines[line_index].type = :added
+ end
+
+ # new
+ if line_index == 0 && diff.deleted_file
+ new_lines[line_index].type = :file_deleted
+ new_lines[line_index].content = "File was deleted"
+ elsif added_line
+ new_lines[line_index].type = :added
+ new_lines[line_index].num = line_index2 + 1
+ new_lines[line_index].content = new_line
+ new_lines[line_index].code = added_line[:line_code]
+ elsif new_line
+ new_lines[line_index].type = :no_change
+ new_lines[line_index].num = line_index2 + 1
+ new_lines[line_index].content = new_line
+ else
+ new_lines[line_index].type = :deleted
+ end
+ end
+
+ return old_lines, new_lines
end
protected