]> git.armaanb.net Git - stagit.git/commitdiff
detect copies and renames based on the threshold of changes
authorHiltjo Posthuma <hiltjo@codemadness.org>
Sun, 11 Nov 2018 17:09:27 +0000 (18:09 +0100)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Sun, 11 Nov 2018 17:54:40 +0000 (18:54 +0100)
stagit.c

index 6598ddd2cc0523f918db6c87a01795ced9ee51d9..90fd7d18ea135f2c5134563f83879a8dfc5d0503 100644 (file)
--- a/stagit.c
+++ b/stagit.c
@@ -92,6 +92,7 @@ commitinfo_getstats(struct commitinfo *ci)
 {
        struct deltainfo *di;
        git_diff_options opts;
+       git_diff_find_options fopts;
        const git_diff_delta *delta;
        const git_diff_hunk *hunk;
        const git_diff_line *line;
@@ -113,6 +114,12 @@ commitinfo_getstats(struct commitinfo *ci)
        if (git_diff_tree_to_tree(&(ci->diff), repo, ci->parent_tree, ci->commit_tree, &opts))
                goto err;
 
+       if (git_diff_find_init_options(&fopts, GIT_DIFF_FIND_OPTIONS_VERSION))
+               goto err;
+       fopts.flags |= GIT_DIFF_FIND_RENAMES | GIT_DIFF_FIND_COPIES;
+       if (git_diff_find_similar(ci->diff, &fopts))
+               goto err;
+
        ndeltas = git_diff_num_deltas(ci->diff);
        if (ndeltas && !(ci->deltas = calloc(ndeltas, sizeof(struct deltainfo *))))
                err(1, "calloc");
@@ -120,6 +127,7 @@ commitinfo_getstats(struct commitinfo *ci)
        for (i = 0; i < ndeltas; i++) {
                if (git_patch_from_diff(&patch, ci->diff, i))
                        goto err;
+
                if (!(di = calloc(1, sizeof(struct deltainfo))))
                        err(1, "calloc");
                di->patch = patch;
@@ -460,6 +468,7 @@ printshowfile(FILE *fp, struct commitinfo *ci)
        fputs("<b>Diffstat:</b>\n<table>", fp);
        for (i = 0; i < ci->ndeltas; i++) {
                delta = git_patch_get_delta(ci->deltas[i]->patch);
+
                fprintf(fp, "<tr><td><a href=\"#h%zu\">", i);
                xmlencode(fp, delta->old_file.path, strlen(delta->old_file.path));
                if (strcmp(delta->old_file.path, delta->new_file.path)) {