summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2016-08-19 15:05:47 +0100
committerSean McGivern <sean@gitlab.com>2016-08-19 15:05:47 +0100
commit91336f399bdd716aece8bcd8d28fdd354f86695b (patch)
treeb8e3d21ea677a39a098c303a17aeb86f9ebc5c55
parent12e9df327042f3b368878d14f6e18e51b9f668b9 (diff)
downloadgitlab-ce-20895-inline-comments-for-first-commit.tar.gz
Fix line commenting for the initial commit20895-inline-comments-for-first-commit
The initial commit doesn't have a parent, so explicitly pass the blank SHA and handle that when calculating the position.
-rw-r--r--app/models/commit.rb2
-rw-r--r--lib/gitlab/diff/position.rb12
-rw-r--r--spec/lib/gitlab/diff/position_spec.rb42
3 files changed, 52 insertions, 4 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb
index cc413448ce8..817d063e4a2 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -229,7 +229,7 @@ class Commit
def diff_refs
Gitlab::Diff::DiffRefs.new(
- base_sha: self.parent_id || self.sha,
+ base_sha: self.parent_id || Gitlab::Git::BLANK_SHA,
head_sha: self.sha
)
end
diff --git a/lib/gitlab/diff/position.rb b/lib/gitlab/diff/position.rb
index 2fdcf8d7838..088e105d771 100644
--- a/lib/gitlab/diff/position.rb
+++ b/lib/gitlab/diff/position.rb
@@ -139,13 +139,19 @@ module Gitlab
private
def find_diff_file(repository)
- diffs = Gitlab::Git::Compare.new(
+ compare = Gitlab::Git::Compare.new(
repository.raw_repository,
start_sha,
head_sha
- ).diffs(paths: paths)
+ )
+
+ # We're at the initial commit, so just get that.
+ if start_sha == Gitlab::Git::BLANK_SHA && compare.commits.empty?
+ compare = Gitlab::Git::Commit.find(repository.raw_repository, head_sha)
+ end
+
+ diff = compare.diffs(paths: paths).first
- diff = diffs.first
return unless diff
Gitlab::Diff::File.new(diff, repository: repository, diff_refs: diff_refs)
diff --git a/spec/lib/gitlab/diff/position_spec.rb b/spec/lib/gitlab/diff/position_spec.rb
index 10537bea008..6e8fff6f516 100644
--- a/spec/lib/gitlab/diff/position_spec.rb
+++ b/spec/lib/gitlab/diff/position_spec.rb
@@ -339,6 +339,48 @@ describe Gitlab::Diff::Position, lib: true do
end
end
+ describe "position for a file in the initial commit" do
+ let(:commit) { project.commit("1a0b36b3cdad1d2ee32457c102a8c0b7056fa863") }
+
+ subject do
+ described_class.new(
+ old_path: "README.md",
+ new_path: "README.md",
+ old_line: nil,
+ new_line: 1,
+ diff_refs: commit.diff_refs
+ )
+ end
+
+ describe "#diff_file" do
+ it "returns the correct diff file" do
+ diff_file = subject.diff_file(project.repository)
+
+ expect(diff_file.new_file).to be true
+ expect(diff_file.new_path).to eq(subject.new_path)
+ expect(diff_file.diff_refs).to eq(subject.diff_refs)
+ end
+ end
+
+ describe "#diff_line" do
+ it "returns the correct diff line" do
+ diff_line = subject.diff_line(project.repository)
+
+ expect(diff_line.added?).to be true
+ expect(diff_line.new_line).to eq(subject.new_line)
+ expect(diff_line.text).to eq("+testme")
+ end
+ end
+
+ describe "#line_code" do
+ it "returns the correct line code" do
+ line_code = Gitlab::Diff::LineCode.generate(subject.file_path, subject.new_line, 0)
+
+ expect(subject.line_code(project.repository)).to eq(line_code)
+ end
+ end
+ end
+
describe "#to_json" do
let(:hash) do
{