diff options
author | Ben Straub <bs@github.com> | 2013-11-12 18:57:16 -0800 |
---|---|---|
committer | Ben Straub <bs@github.com> | 2013-11-12 18:57:16 -0800 |
commit | 9db56cc4a78ee7799450cd3838af12124ccc4e8e (patch) | |
tree | e9918c0ab9487d7f247e3ace59569777acf418ac | |
parent | 089297b2cd4f50a2218130f9f3a0ddceb86b8697 (diff) | |
download | libgit2-9db56cc4a78ee7799450cd3838af12124ccc4e8e.tar.gz |
Fix buffer blame with new lines at end of file
-rw-r--r-- | src/blame.c | 15 | ||||
-rw-r--r-- | tests-clar/blame/buffer.c | 5 |
2 files changed, 9 insertions, 11 deletions
diff --git a/src/blame.c b/src/blame.c index b562b5b98..c5b7083ad 100644 --- a/src/blame.c +++ b/src/blame.c @@ -386,9 +386,13 @@ static int buffer_hunk_cb( wedge_line = (hunk->old_lines == 0) ? hunk->new_start : hunk->old_start; blame->current_diff_line = wedge_line; - /* If this hunk doesn't start between existing hunks, split a hunk up so it does */ blame->current_hunk = (git_blame_hunk*)git_blame_get_hunk_byline(blame, wedge_line); - if (!hunk_starts_at_or_after_line(blame->current_hunk, wedge_line)){ + if (!blame->current_hunk) { + /* Line added at the end of the file */ + blame->current_hunk = new_hunk(wedge_line, 0, wedge_line, blame->path); + git_vector_insert(&blame->hunks, blame->current_hunk); + } else if (!hunk_starts_at_or_after_line(blame->current_hunk, wedge_line)){ + /* If this hunk doesn't start between existing hunks, split a hunk up so it does */ blame->current_hunk = split_hunk_in_vector(&blame->hunks, blame->current_hunk, wedge_line - blame->current_hunk->orig_start_line_number, true); } @@ -409,13 +413,6 @@ static int buffer_line_cb( GIT_UNUSED(hunk); GIT_UNUSED(line); -#ifdef DO_DEBUG - { - char *str = git__substrdup(content, content_len); - git__free(str); - } -#endif - if (line->origin == GIT_DIFF_LINE_ADDITION) { if (hunk_is_bufferblame(blame->current_hunk) && hunk_ends_at_or_before_line(blame->current_hunk, blame->current_diff_line)) { diff --git a/tests-clar/blame/buffer.c b/tests-clar/blame/buffer.c index 5da004652..82085c3d5 100644 --- a/tests-clar/blame/buffer.c +++ b/tests-clar/blame/buffer.c @@ -152,8 +152,9 @@ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC\n\ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC\n\ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC\n\ +\n\ abc\n\ -\n"; +def\n"; cl_git_pass(git_blame_buffer(&g_bufferblame, g_fileblame, buffer, strlen(buffer))); cl_assert_equal_i(5, git_blame_get_hunk_count(g_bufferblame)); @@ -161,6 +162,6 @@ abc\n\ check_blame_hunk_index(g_repo, g_bufferblame, 1, 5, 1, 1, "b99f7ac0", "b.txt"); check_blame_hunk_index(g_repo, g_bufferblame, 2, 6, 5, 0, "63d671eb", "b.txt"); check_blame_hunk_index(g_repo, g_bufferblame, 3, 11, 5, 0, "aa06ecca", "b.txt"); - check_blame_hunk_index(g_repo, g_bufferblame, 4, 16, 1, 0, "00000000", "b.txt"); + check_blame_hunk_index(g_repo, g_bufferblame, 4, 16, 2, 0, "00000000", "b.txt"); } |