Lines Matching refs:blame

155 void git_blame_free(git_blame *blame)  in git_blame_free()  argument
160 if (!blame) return; in git_blame_free()
162 git_vector_foreach(&blame->hunks, i, hunk) in git_blame_free()
164 git_vector_free(&blame->hunks); in git_blame_free()
166 git_vector_free_deep(&blame->paths); in git_blame_free()
168 git_array_clear(blame->line_index); in git_blame_free()
170 git_mailmap_free(blame->mailmap); in git_blame_free()
172 git__free(blame->path); in git_blame_free()
173 git_blob_free(blame->final_blob); in git_blame_free()
174 git__free(blame); in git_blame_free()
177 uint32_t git_blame_get_hunk_count(git_blame *blame) in git_blame_get_hunk_count() argument
179 GIT_ASSERT_ARG(blame); in git_blame_get_hunk_count()
180 return (uint32_t)blame->hunks.length; in git_blame_get_hunk_count()
183 const git_blame_hunk *git_blame_get_hunk_byindex(git_blame *blame, uint32_t index) in git_blame_get_hunk_byindex() argument
185 GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL); in git_blame_get_hunk_byindex()
186 return (git_blame_hunk*)git_vector_get(&blame->hunks, index); in git_blame_get_hunk_byindex()
189 const git_blame_hunk *git_blame_get_hunk_byline(git_blame *blame, size_t lineno) in git_blame_get_hunk_byline() argument
193 GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL); in git_blame_get_hunk_byline()
195 if (!git_vector_bsearch2(&i, &blame->hunks, hunk_byfinalline_search_cmp, &new_lineno)) { in git_blame_get_hunk_byline()
196 return git_blame_get_hunk_byindex(blame, (uint32_t)i); in git_blame_get_hunk_byline()
274 static int index_blob_lines(git_blame *blame) in index_blob_lines() argument
276 const char *buf = blame->final_buf; in index_blob_lines()
277 size_t len = blame->final_buf_size; in index_blob_lines()
285 i = git_array_alloc(blame->line_index); in index_blob_lines()
287 *i = buf - blame->final_buf; in index_blob_lines()
295 i = git_array_alloc(blame->line_index); in index_blob_lines()
297 *i = buf - blame->final_buf; in index_blob_lines()
298 blame->num_lines = num + incomplete; in index_blob_lines()
299 return blame->num_lines; in index_blob_lines()
302 static git_blame_hunk* hunk_from_entry(git_blame__entry *e, git_blame *blame) in hunk_from_entry() argument
313 &h->final_signature, e->suspect->commit, blame->mailmap); in hunk_from_entry()
319 static int load_blob(git_blame *blame) in load_blob() argument
323 if (blame->final_blob) return 0; in load_blob()
325 error = git_commit_lookup(&blame->final, blame->repository, &blame->options.newest_commit); in load_blob()
328 error = git_object_lookup_bypath((git_object**)&blame->final_blob, in load_blob()
329 (git_object*)blame->final, blame->path, GIT_OBJECT_BLOB); in load_blob()
335 static int blame_internal(git_blame *blame) in blame_internal() argument
341 if ((error = load_blob(blame)) < 0 || in blame_internal()
342 (error = git_blame__get_origin(&o, blame, blame->final, blame->path)) < 0) in blame_internal()
345 if (git_blob_rawsize(blame->final_blob) > SIZE_MAX) { in blame_internal()
351 blame->final_buf = git_blob_rawcontent(blame->final_blob); in blame_internal()
352 blame->final_buf_size = (size_t)git_blob_rawsize(blame->final_blob); in blame_internal()
357 ent->num_lines = index_blob_lines(blame); in blame_internal()
358 ent->lno = blame->options.min_line - 1; in blame_internal()
359 ent->num_lines = ent->num_lines - blame->options.min_line + 1; in blame_internal()
360 if (blame->options.max_line > 0) in blame_internal()
361 ent->num_lines = blame->options.max_line - blame->options.min_line + 1; in blame_internal()
365 blame->ent = ent; in blame_internal()
367 error = git_blame__like_git(blame, blame->options.flags); in blame_internal()
370 for (ent = blame->ent; ent; ) { in blame_internal()
372 git_blame_hunk *h = hunk_from_entry(ent, blame); in blame_internal()
374 git_vector_insert(&blame->hunks, h); in blame_internal()
395 git_blame *blame = NULL; in git_blame_file() local
404 blame = git_blame__alloc(repo, normOptions, path); in git_blame_file()
405 GIT_ERROR_CHECK_ALLOC(blame); in git_blame_file()
407 if ((error = load_blob(blame)) < 0) in git_blame_file()
410 if ((error = blame_internal(blame)) < 0) in git_blame_file()
413 *out = blame; in git_blame_file()
417 git_blame_free(blame); in git_blame_file()
435 git_blame *blame = (git_blame*)payload; in buffer_hunk_cb() local
441 blame->current_diff_line = wedge_line; in buffer_hunk_cb()
443 blame->current_hunk = (git_blame_hunk*)git_blame_get_hunk_byline(blame, wedge_line); in buffer_hunk_cb()
444 if (!blame->current_hunk) { in buffer_hunk_cb()
446 blame->current_hunk = new_hunk(wedge_line, 0, wedge_line, blame->path); in buffer_hunk_cb()
447 GIT_ERROR_CHECK_ALLOC(blame->current_hunk); in buffer_hunk_cb()
449 git_vector_insert(&blame->hunks, blame->current_hunk); in buffer_hunk_cb()
450 } else if (!hunk_starts_at_or_after_line(blame->current_hunk, wedge_line)){ in buffer_hunk_cb()
452 blame->current_hunk = split_hunk_in_vector(&blame->hunks, blame->current_hunk, in buffer_hunk_cb()
453 wedge_line - blame->current_hunk->orig_start_line_number, true); in buffer_hunk_cb()
454 GIT_ERROR_CHECK_ALLOC(blame->current_hunk); in buffer_hunk_cb()
467 git_blame *blame = (git_blame*)payload; in buffer_line_cb() local
474 if (hunk_is_bufferblame(blame->current_hunk) && in buffer_line_cb()
475 hunk_ends_at_or_before_line(blame->current_hunk, blame->current_diff_line)) { in buffer_line_cb()
477 blame->current_hunk->lines_in_hunk++; in buffer_line_cb()
478 shift_hunks_by(&blame->hunks, blame->current_diff_line+1, 1); in buffer_line_cb()
481 shift_hunks_by(&blame->hunks, blame->current_diff_line, 1); in buffer_line_cb()
482 blame->current_hunk = new_hunk(blame->current_diff_line, 1, 0, blame->path); in buffer_line_cb()
483 GIT_ERROR_CHECK_ALLOC(blame->current_hunk); in buffer_line_cb()
485 git_vector_insert_sorted(&blame->hunks, blame->current_hunk, NULL); in buffer_line_cb()
487 blame->current_diff_line++; in buffer_line_cb()
492 size_t shift_base = blame->current_diff_line + blame->current_hunk->lines_in_hunk+1; in buffer_line_cb()
494 if (--(blame->current_hunk->lines_in_hunk) == 0) { in buffer_line_cb()
497 if (!git_vector_search2(&i, &blame->hunks, ptrs_equal_cmp, blame->current_hunk)) { in buffer_line_cb()
498 git_vector_remove(&blame->hunks, i); in buffer_line_cb()
499 free_hunk(blame->current_hunk); in buffer_line_cb()
500 blame->current_hunk = (git_blame_hunk*)git_blame_get_hunk_byindex(blame, (uint32_t)i); in buffer_line_cb()
503 shift_hunks_by(&blame->hunks, shift_base, -1); in buffer_line_cb()
514 git_blame *blame; in git_blame_buffer() local
525 blame = git_blame__alloc(reference->repository, reference->options, reference->path); in git_blame_buffer()
526 GIT_ERROR_CHECK_ALLOC(blame); in git_blame_buffer()
533 git_vector_insert(&blame->hunks, h); in git_blame_buffer()
537 git_diff_blob_to_buffer(reference->final_blob, blame->path, in git_blame_buffer()
538 buffer, buffer_len, blame->path, &diffopts, in git_blame_buffer()
539 NULL, NULL, buffer_hunk_cb, buffer_line_cb, blame); in git_blame_buffer()
541 *out = blame; in git_blame_buffer()