|
Packit Service |
20376f |
#ifndef INCLUDE_blame_h__
|
|
Packit Service |
20376f |
#define INCLUDE_blame_h__
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
#include "git2/blame.h"
|
|
Packit Service |
20376f |
#include "common.h"
|
|
Packit Service |
20376f |
#include "vector.h"
|
|
Packit Service |
20376f |
#include "diff.h"
|
|
Packit Service |
20376f |
#include "array.h"
|
|
Packit Service |
20376f |
#include "git2/oid.h"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/*
|
|
Packit Service |
20376f |
* One blob in a commit that is being suspected
|
|
Packit Service |
20376f |
*/
|
|
Packit Service |
20376f |
typedef struct git_blame__origin {
|
|
Packit Service |
20376f |
int refcnt;
|
|
Packit Service |
20376f |
struct git_blame__origin *previous;
|
|
Packit Service |
20376f |
git_commit *commit;
|
|
Packit Service |
20376f |
git_blob *blob;
|
|
Packit Service |
20376f |
char path[GIT_FLEX_ARRAY];
|
|
Packit Service |
20376f |
} git_blame__origin;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/*
|
|
Packit Service |
20376f |
* Each group of lines is described by a git_blame__entry; it can be split
|
|
Packit Service |
20376f |
* as we pass blame to the parents. They form a linked list in the
|
|
Packit Service |
20376f |
* scoreboard structure, sorted by the target line number.
|
|
Packit Service |
20376f |
*/
|
|
Packit Service |
20376f |
typedef struct git_blame__entry {
|
|
Packit Service |
20376f |
struct git_blame__entry *prev;
|
|
Packit Service |
20376f |
struct git_blame__entry *next;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* the first line of this group in the final image;
|
|
Packit Service |
20376f |
* internally all line numbers are 0 based.
|
|
Packit Service |
20376f |
*/
|
|
Packit Service |
20376f |
size_t lno;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* how many lines this group has */
|
|
Packit Service |
20376f |
size_t num_lines;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* the commit that introduced this group into the final image */
|
|
Packit Service |
20376f |
git_blame__origin *suspect;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* true if the suspect is truly guilty; false while we have not
|
|
Packit Service |
20376f |
* checked if the group came from one of its parents.
|
|
Packit Service |
20376f |
*/
|
|
Packit Service |
20376f |
bool guilty;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* true if the entry has been scanned for copies in the current parent
|
|
Packit Service |
20376f |
*/
|
|
Packit Service |
20376f |
bool scanned;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* the line number of the first line of this group in the
|
|
Packit Service |
20376f |
* suspect's file; internally all line numbers are 0 based.
|
|
Packit Service |
20376f |
*/
|
|
Packit Service |
20376f |
size_t s_lno;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* how significant this entry is -- cached to avoid
|
|
Packit Service |
20376f |
* scanning the lines over and over.
|
|
Packit Service |
20376f |
*/
|
|
Packit Service |
20376f |
unsigned score;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* Whether this entry has been tracked to a boundary commit.
|
|
Packit Service |
20376f |
*/
|
|
Packit Service |
20376f |
bool is_boundary;
|
|
Packit Service |
20376f |
} git_blame__entry;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
struct git_blame {
|
|
Packit Service |
20376f |
char *path;
|
|
Packit Service |
20376f |
git_repository *repository;
|
|
Packit Service |
20376f |
git_blame_options options;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_vector hunks;
|
|
Packit Service |
20376f |
git_vector paths;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_blob *final_blob;
|
|
Packit Service |
20376f |
git_array_t(size_t) line_index;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
size_t current_diff_line;
|
|
Packit Service |
20376f |
git_blame_hunk *current_hunk;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* Scoreboard fields */
|
|
Packit Service |
20376f |
git_commit *final;
|
|
Packit Service |
20376f |
git_blame__entry *ent;
|
|
Packit Service |
20376f |
int num_lines;
|
|
Packit Service |
20376f |
const char *final_buf;
|
|
Packit Service |
20376f |
git_off_t final_buf_size;
|
|
Packit Service |
20376f |
};
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_blame *git_blame__alloc(
|
|
Packit Service |
20376f |
git_repository *repo,
|
|
Packit Service |
20376f |
git_blame_options opts,
|
|
Packit Service |
20376f |
const char *path);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
#endif
|