]> git.proxmox.com Git - libgit2.git/blob - tests-clar/diff/diff_helpers.c
diff: Fix rebase breackage
[libgit2.git] / tests-clar / diff / diff_helpers.c
1 #include "clar_libgit2.h"
2 #include "diff_helpers.h"
3
4 git_tree *resolve_commit_oid_to_tree(
5 git_repository *repo,
6 const char *partial_oid)
7 {
8 size_t len = strlen(partial_oid);
9 git_oid oid;
10 git_object *obj = NULL;
11 git_tree *tree = NULL;
12
13 if (git_oid_fromstrn(&oid, partial_oid, len) == 0)
14 git_object_lookup_prefix(&obj, repo, &oid, len, GIT_OBJ_ANY);
15 cl_assert(obj);
16 if (git_object_type(obj) == GIT_OBJ_TREE)
17 return (git_tree *)obj;
18 cl_assert(git_object_type(obj) == GIT_OBJ_COMMIT);
19 cl_git_pass(git_commit_tree(&tree, (git_commit *)obj));
20 git_object_free(obj);
21 return tree;
22 }
23
24 int diff_file_fn(
25 void *cb_data,
26 git_diff_delta *delta,
27 float progress)
28 {
29 diff_expects *e = cb_data;
30 (void)progress;
31 e->files++;
32 switch (delta->status) {
33 case GIT_DELTA_ADDED: e->file_adds++; break;
34 case GIT_DELTA_DELETED: e->file_dels++; break;
35 case GIT_DELTA_MODIFIED: e->file_mods++; break;
36 case GIT_DELTA_IGNORED: e->file_ignored++; break;
37 case GIT_DELTA_UNTRACKED: e->file_untracked++; break;
38 default: break;
39 }
40 return 0;
41 }
42
43 int diff_hunk_fn(
44 void *cb_data,
45 git_diff_delta *delta,
46 git_diff_range *range,
47 const char *header,
48 size_t header_len)
49 {
50 diff_expects *e = cb_data;
51 (void)delta;
52 (void)header;
53 (void)header_len;
54 e->hunks++;
55 e->hunk_old_lines += range->old_lines;
56 e->hunk_new_lines += range->new_lines;
57 return 0;
58 }
59
60 int diff_line_fn(
61 void *cb_data,
62 git_diff_delta *delta,
63 char line_origin,
64 const char *content,
65 size_t content_len)
66 {
67 diff_expects *e = cb_data;
68 (void)delta;
69 (void)content;
70 (void)content_len;
71 e->lines++;
72 switch (line_origin) {
73 case GIT_DIFF_LINE_CONTEXT:
74 e->line_ctxt++;
75 break;
76 case GIT_DIFF_LINE_ADDITION:
77 case GIT_DIFF_LINE_ADD_EOFNL:
78 e->line_adds++;
79 break;
80 case GIT_DIFF_LINE_DELETION:
81 case GIT_DIFF_LINE_DEL_EOFNL:
82 e->line_dels++;
83 break;
84 default:
85 break;
86 }
87 return 0;
88 }