builtin / blame.con commit Merge branch 'wk/doc-clarify-upstream' (c8704ad)
   1/*
   2 * Blame
   3 *
   4 * Copyright (c) 2006, 2014 by its authors
   5 * See COPYING for licensing conditions
   6 */
   7
   8#include "cache.h"
   9#include "builtin.h"
  10#include "blob.h"
  11#include "commit.h"
  12#include "tag.h"
  13#include "tree-walk.h"
  14#include "diff.h"
  15#include "diffcore.h"
  16#include "revision.h"
  17#include "quote.h"
  18#include "xdiff-interface.h"
  19#include "cache-tree.h"
  20#include "string-list.h"
  21#include "mailmap.h"
  22#include "mergesort.h"
  23#include "parse-options.h"
  24#include "prio-queue.h"
  25#include "utf8.h"
  26#include "userdiff.h"
  27#include "line-range.h"
  28#include "line-log.h"
  29
  30static char blame_usage[] = N_("git blame [options] [rev-opts] [rev] [--] file");
  31
  32static const char *blame_opt_usage[] = {
  33        blame_usage,
  34        "",
  35        N_("[rev-opts] are documented in git-rev-list(1)"),
  36        NULL
  37};
  38
  39static int longest_file;
  40static int longest_author;
  41static int max_orig_digits;
  42static int max_digits;
  43static int max_score_digits;
  44static int show_root;
  45static int reverse;
  46static int blank_boundary;
  47static int incremental;
  48static int xdl_opts;
  49static int abbrev = -1;
  50static int no_whole_file_rename;
  51
  52static enum date_mode blame_date_mode = DATE_ISO8601;
  53static size_t blame_date_width;
  54
  55static struct string_list mailmap;
  56
  57#ifndef DEBUG
  58#define DEBUG 0
  59#endif
  60
  61/* stats */
  62static int num_read_blob;
  63static int num_get_patch;
  64static int num_commits;
  65
  66#define PICKAXE_BLAME_MOVE              01
  67#define PICKAXE_BLAME_COPY              02
  68#define PICKAXE_BLAME_COPY_HARDER       04
  69#define PICKAXE_BLAME_COPY_HARDEST      010
  70
  71/*
  72 * blame for a blame_entry with score lower than these thresholds
  73 * is not passed to the parent using move/copy logic.
  74 */
  75static unsigned blame_move_score;
  76static unsigned blame_copy_score;
  77#define BLAME_DEFAULT_MOVE_SCORE        20
  78#define BLAME_DEFAULT_COPY_SCORE        40
  79
  80/* Remember to update object flag allocation in object.h */
  81#define METAINFO_SHOWN          (1u<<12)
  82#define MORE_THAN_ONE_PATH      (1u<<13)
  83
  84/*
  85 * One blob in a commit that is being suspected
  86 */
  87struct origin {
  88        int refcnt;
  89        /* Record preceding blame record for this blob */
  90        struct origin *previous;
  91        /* origins are put in a list linked via `next' hanging off the
  92         * corresponding commit's util field in order to make finding
  93         * them fast.  The presence in this chain does not count
  94         * towards the origin's reference count.  It is tempting to
  95         * let it count as long as the commit is pending examination,
  96         * but even under circumstances where the commit will be
  97         * present multiple times in the priority queue of unexamined
  98         * commits, processing the first instance will not leave any
  99         * work requiring the origin data for the second instance.  An
 100         * interspersed commit changing that would have to be
 101         * preexisting with a different ancestry and with the same
 102         * commit date in order to wedge itself between two instances
 103         * of the same commit in the priority queue _and_ produce
 104         * blame entries relevant for it.  While we don't want to let
 105         * us get tripped up by this case, it certainly does not seem
 106         * worth optimizing for.
 107         */
 108        struct origin *next;
 109        struct commit *commit;
 110        /* `suspects' contains blame entries that may be attributed to
 111         * this origin's commit or to parent commits.  When a commit
 112         * is being processed, all suspects will be moved, either by
 113         * assigning them to an origin in a different commit, or by
 114         * shipping them to the scoreboard's ent list because they
 115         * cannot be attributed to a different commit.
 116         */
 117        struct blame_entry *suspects;
 118        mmfile_t file;
 119        unsigned char blob_sha1[20];
 120        unsigned mode;
 121        /* guilty gets set when shipping any suspects to the final
 122         * blame list instead of other commits
 123         */
 124        char guilty;
 125        char path[FLEX_ARRAY];
 126};
 127
 128static int diff_hunks(mmfile_t *file_a, mmfile_t *file_b, long ctxlen,
 129                      xdl_emit_hunk_consume_func_t hunk_func, void *cb_data)
 130{
 131        xpparam_t xpp = {0};
 132        xdemitconf_t xecfg = {0};
 133        xdemitcb_t ecb = {NULL};
 134
 135        xpp.flags = xdl_opts;
 136        xecfg.ctxlen = ctxlen;
 137        xecfg.hunk_func = hunk_func;
 138        ecb.priv = cb_data;
 139        return xdi_diff(file_a, file_b, &xpp, &xecfg, &ecb);
 140}
 141
 142/*
 143 * Prepare diff_filespec and convert it using diff textconv API
 144 * if the textconv driver exists.
 145 * Return 1 if the conversion succeeds, 0 otherwise.
 146 */
 147int textconv_object(const char *path,
 148                    unsigned mode,
 149                    const unsigned char *sha1,
 150                    int sha1_valid,
 151                    char **buf,
 152                    unsigned long *buf_size)
 153{
 154        struct diff_filespec *df;
 155        struct userdiff_driver *textconv;
 156
 157        df = alloc_filespec(path);
 158        fill_filespec(df, sha1, sha1_valid, mode);
 159        textconv = get_textconv(df);
 160        if (!textconv) {
 161                free_filespec(df);
 162                return 0;
 163        }
 164
 165        *buf_size = fill_textconv(textconv, df, buf);
 166        free_filespec(df);
 167        return 1;
 168}
 169
 170/*
 171 * Given an origin, prepare mmfile_t structure to be used by the
 172 * diff machinery
 173 */
 174static void fill_origin_blob(struct diff_options *opt,
 175                             struct origin *o, mmfile_t *file)
 176{
 177        if (!o->file.ptr) {
 178                enum object_type type;
 179                unsigned long file_size;
 180
 181                num_read_blob++;
 182                if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) &&
 183                    textconv_object(o->path, o->mode, o->blob_sha1, 1, &file->ptr, &file_size))
 184                        ;
 185                else
 186                        file->ptr = read_sha1_file(o->blob_sha1, &type, &file_size);
 187                file->size = file_size;
 188
 189                if (!file->ptr)
 190                        die("Cannot read blob %s for path %s",
 191                            sha1_to_hex(o->blob_sha1),
 192                            o->path);
 193                o->file = *file;
 194        }
 195        else
 196                *file = o->file;
 197}
 198
 199/*
 200 * Origin is refcounted and usually we keep the blob contents to be
 201 * reused.
 202 */
 203static inline struct origin *origin_incref(struct origin *o)
 204{
 205        if (o)
 206                o->refcnt++;
 207        return o;
 208}
 209
 210static void origin_decref(struct origin *o)
 211{
 212        if (o && --o->refcnt <= 0) {
 213                struct origin *p, *l = NULL;
 214                if (o->previous)
 215                        origin_decref(o->previous);
 216                free(o->file.ptr);
 217                /* Should be present exactly once in commit chain */
 218                for (p = o->commit->util; p; l = p, p = p->next) {
 219                        if (p == o) {
 220                                if (l)
 221                                        l->next = p->next;
 222                                else
 223                                        o->commit->util = p->next;
 224                                free(o);
 225                                return;
 226                        }
 227                }
 228                die("internal error in blame::origin_decref");
 229        }
 230}
 231
 232static void drop_origin_blob(struct origin *o)
 233{
 234        if (o->file.ptr) {
 235                free(o->file.ptr);
 236                o->file.ptr = NULL;
 237        }
 238}
 239
 240/*
 241 * Each group of lines is described by a blame_entry; it can be split
 242 * as we pass blame to the parents.  They are arranged in linked lists
 243 * kept as `suspects' of some unprocessed origin, or entered (when the
 244 * blame origin has been finalized) into the scoreboard structure.
 245 * While the scoreboard structure is only sorted at the end of
 246 * processing (according to final image line number), the lists
 247 * attached to an origin are sorted by the target line number.
 248 */
 249struct blame_entry {
 250        struct blame_entry *next;
 251
 252        /* the first line of this group in the final image;
 253         * internally all line numbers are 0 based.
 254         */
 255        int lno;
 256
 257        /* how many lines this group has */
 258        int num_lines;
 259
 260        /* the commit that introduced this group into the final image */
 261        struct origin *suspect;
 262
 263        /* the line number of the first line of this group in the
 264         * suspect's file; internally all line numbers are 0 based.
 265         */
 266        int s_lno;
 267
 268        /* how significant this entry is -- cached to avoid
 269         * scanning the lines over and over.
 270         */
 271        unsigned score;
 272};
 273
 274/*
 275 * Any merge of blames happens on lists of blames that arrived via
 276 * different parents in a single suspect.  In this case, we want to
 277 * sort according to the suspect line numbers as opposed to the final
 278 * image line numbers.  The function body is somewhat longish because
 279 * it avoids unnecessary writes.
 280 */
 281
 282static struct blame_entry *blame_merge(struct blame_entry *list1,
 283                                       struct blame_entry *list2)
 284{
 285        struct blame_entry *p1 = list1, *p2 = list2,
 286                **tail = &list1;
 287
 288        if (!p1)
 289                return p2;
 290        if (!p2)
 291                return p1;
 292
 293        if (p1->s_lno <= p2->s_lno) {
 294                do {
 295                        tail = &p1->next;
 296                        if ((p1 = *tail) == NULL) {
 297                                *tail = p2;
 298                                return list1;
 299                        }
 300                } while (p1->s_lno <= p2->s_lno);
 301        }
 302        for (;;) {
 303                *tail = p2;
 304                do {
 305                        tail = &p2->next;
 306                        if ((p2 = *tail) == NULL)  {
 307                                *tail = p1;
 308                                return list1;
 309                        }
 310                } while (p1->s_lno > p2->s_lno);
 311                *tail = p1;
 312                do {
 313                        tail = &p1->next;
 314                        if ((p1 = *tail) == NULL) {
 315                                *tail = p2;
 316                                return list1;
 317                        }
 318                } while (p1->s_lno <= p2->s_lno);
 319        }
 320}
 321
 322static void *get_next_blame(const void *p)
 323{
 324        return ((struct blame_entry *)p)->next;
 325}
 326
 327static void set_next_blame(void *p1, void *p2)
 328{
 329        ((struct blame_entry *)p1)->next = p2;
 330}
 331
 332/*
 333 * Final image line numbers are all different, so we don't need a
 334 * three-way comparison here.
 335 */
 336
 337static int compare_blame_final(const void *p1, const void *p2)
 338{
 339        return ((struct blame_entry *)p1)->lno > ((struct blame_entry *)p2)->lno
 340                ? 1 : -1;
 341}
 342
 343static int compare_blame_suspect(const void *p1, const void *p2)
 344{
 345        const struct blame_entry *s1 = p1, *s2 = p2;
 346        /*
 347         * to allow for collating suspects, we sort according to the
 348         * respective pointer value as the primary sorting criterion.
 349         * The actual relation is pretty unimportant as long as it
 350         * establishes a total order.  Comparing as integers gives us
 351         * that.
 352         */
 353        if (s1->suspect != s2->suspect)
 354                return (intptr_t)s1->suspect > (intptr_t)s2->suspect ? 1 : -1;
 355        if (s1->s_lno == s2->s_lno)
 356                return 0;
 357        return s1->s_lno > s2->s_lno ? 1 : -1;
 358}
 359
 360static struct blame_entry *blame_sort(struct blame_entry *head,
 361                                      int (*compare_fn)(const void *, const void *))
 362{
 363        return llist_mergesort (head, get_next_blame, set_next_blame, compare_fn);
 364}
 365
 366static int compare_commits_by_reverse_commit_date(const void *a,
 367                                                  const void *b,
 368                                                  void *c)
 369{
 370        return -compare_commits_by_commit_date(a, b, c);
 371}
 372
 373/*
 374 * The current state of the blame assignment.
 375 */
 376struct scoreboard {
 377        /* the final commit (i.e. where we started digging from) */
 378        struct commit *final;
 379        /* Priority queue for commits with unassigned blame records */
 380        struct prio_queue commits;
 381        struct rev_info *revs;
 382        const char *path;
 383
 384        /*
 385         * The contents in the final image.
 386         * Used by many functions to obtain contents of the nth line,
 387         * indexed with scoreboard.lineno[blame_entry.lno].
 388         */
 389        const char *final_buf;
 390        unsigned long final_buf_size;
 391
 392        /* linked list of blames */
 393        struct blame_entry *ent;
 394
 395        /* look-up a line in the final buffer */
 396        int num_lines;
 397        int *lineno;
 398};
 399
 400static void sanity_check_refcnt(struct scoreboard *);
 401
 402/*
 403 * If two blame entries that are next to each other came from
 404 * contiguous lines in the same origin (i.e. <commit, path> pair),
 405 * merge them together.
 406 */
 407static void coalesce(struct scoreboard *sb)
 408{
 409        struct blame_entry *ent, *next;
 410
 411        for (ent = sb->ent; ent && (next = ent->next); ent = next) {
 412                if (ent->suspect == next->suspect &&
 413                    ent->s_lno + ent->num_lines == next->s_lno) {
 414                        ent->num_lines += next->num_lines;
 415                        ent->next = next->next;
 416                        origin_decref(next->suspect);
 417                        free(next);
 418                        ent->score = 0;
 419                        next = ent; /* again */
 420                }
 421        }
 422
 423        if (DEBUG) /* sanity */
 424                sanity_check_refcnt(sb);
 425}
 426
 427/*
 428 * Merge the given sorted list of blames into a preexisting origin.
 429 * If there were no previous blames to that commit, it is entered into
 430 * the commit priority queue of the score board.
 431 */
 432
 433static void queue_blames(struct scoreboard *sb, struct origin *porigin,
 434                         struct blame_entry *sorted)
 435{
 436        if (porigin->suspects)
 437                porigin->suspects = blame_merge(porigin->suspects, sorted);
 438        else {
 439                struct origin *o;
 440                for (o = porigin->commit->util; o; o = o->next) {
 441                        if (o->suspects) {
 442                                porigin->suspects = sorted;
 443                                return;
 444                        }
 445                }
 446                porigin->suspects = sorted;
 447                prio_queue_put(&sb->commits, porigin->commit);
 448        }
 449}
 450
 451/*
 452 * Given a commit and a path in it, create a new origin structure.
 453 * The callers that add blame to the scoreboard should use
 454 * get_origin() to obtain shared, refcounted copy instead of calling
 455 * this function directly.
 456 */
 457static struct origin *make_origin(struct commit *commit, const char *path)
 458{
 459        struct origin *o;
 460        o = xcalloc(1, sizeof(*o) + strlen(path) + 1);
 461        o->commit = commit;
 462        o->refcnt = 1;
 463        o->next = commit->util;
 464        commit->util = o;
 465        strcpy(o->path, path);
 466        return o;
 467}
 468
 469/*
 470 * Locate an existing origin or create a new one.
 471 * This moves the origin to front position in the commit util list.
 472 */
 473static struct origin *get_origin(struct scoreboard *sb,
 474                                 struct commit *commit,
 475                                 const char *path)
 476{
 477        struct origin *o, *l;
 478
 479        for (o = commit->util, l = NULL; o; l = o, o = o->next) {
 480                if (!strcmp(o->path, path)) {
 481                        /* bump to front */
 482                        if (l) {
 483                                l->next = o->next;
 484                                o->next = commit->util;
 485                                commit->util = o;
 486                        }
 487                        return origin_incref(o);
 488                }
 489        }
 490        return make_origin(commit, path);
 491}
 492
 493/*
 494 * Fill the blob_sha1 field of an origin if it hasn't, so that later
 495 * call to fill_origin_blob() can use it to locate the data.  blob_sha1
 496 * for an origin is also used to pass the blame for the entire file to
 497 * the parent to detect the case where a child's blob is identical to
 498 * that of its parent's.
 499 *
 500 * This also fills origin->mode for corresponding tree path.
 501 */
 502static int fill_blob_sha1_and_mode(struct origin *origin)
 503{
 504        if (!is_null_sha1(origin->blob_sha1))
 505                return 0;
 506        if (get_tree_entry(origin->commit->object.sha1,
 507                           origin->path,
 508                           origin->blob_sha1, &origin->mode))
 509                goto error_out;
 510        if (sha1_object_info(origin->blob_sha1, NULL) != OBJ_BLOB)
 511                goto error_out;
 512        return 0;
 513 error_out:
 514        hashclr(origin->blob_sha1);
 515        origin->mode = S_IFINVALID;
 516        return -1;
 517}
 518
 519/*
 520 * We have an origin -- check if the same path exists in the
 521 * parent and return an origin structure to represent it.
 522 */
 523static struct origin *find_origin(struct scoreboard *sb,
 524                                  struct commit *parent,
 525                                  struct origin *origin)
 526{
 527        struct origin *porigin;
 528        struct diff_options diff_opts;
 529        const char *paths[2];
 530
 531        /* First check any existing origins */
 532        for (porigin = parent->util; porigin; porigin = porigin->next)
 533                if (!strcmp(porigin->path, origin->path)) {
 534                        /*
 535                         * The same path between origin and its parent
 536                         * without renaming -- the most common case.
 537                         */
 538                        return origin_incref (porigin);
 539                }
 540
 541        /* See if the origin->path is different between parent
 542         * and origin first.  Most of the time they are the
 543         * same and diff-tree is fairly efficient about this.
 544         */
 545        diff_setup(&diff_opts);
 546        DIFF_OPT_SET(&diff_opts, RECURSIVE);
 547        diff_opts.detect_rename = 0;
 548        diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
 549        paths[0] = origin->path;
 550        paths[1] = NULL;
 551
 552        parse_pathspec(&diff_opts.pathspec,
 553                       PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL,
 554                       PATHSPEC_LITERAL_PATH, "", paths);
 555        diff_setup_done(&diff_opts);
 556
 557        if (is_null_sha1(origin->commit->object.sha1))
 558                do_diff_cache(parent->tree->object.sha1, &diff_opts);
 559        else
 560                diff_tree_sha1(parent->tree->object.sha1,
 561                               origin->commit->tree->object.sha1,
 562                               "", &diff_opts);
 563        diffcore_std(&diff_opts);
 564
 565        if (!diff_queued_diff.nr) {
 566                /* The path is the same as parent */
 567                porigin = get_origin(sb, parent, origin->path);
 568                hashcpy(porigin->blob_sha1, origin->blob_sha1);
 569                porigin->mode = origin->mode;
 570        } else {
 571                /*
 572                 * Since origin->path is a pathspec, if the parent
 573                 * commit had it as a directory, we will see a whole
 574                 * bunch of deletion of files in the directory that we
 575                 * do not care about.
 576                 */
 577                int i;
 578                struct diff_filepair *p = NULL;
 579                for (i = 0; i < diff_queued_diff.nr; i++) {
 580                        const char *name;
 581                        p = diff_queued_diff.queue[i];
 582                        name = p->one->path ? p->one->path : p->two->path;
 583                        if (!strcmp(name, origin->path))
 584                                break;
 585                }
 586                if (!p)
 587                        die("internal error in blame::find_origin");
 588                switch (p->status) {
 589                default:
 590                        die("internal error in blame::find_origin (%c)",
 591                            p->status);
 592                case 'M':
 593                        porigin = get_origin(sb, parent, origin->path);
 594                        hashcpy(porigin->blob_sha1, p->one->sha1);
 595                        porigin->mode = p->one->mode;
 596                        break;
 597                case 'A':
 598                case 'T':
 599                        /* Did not exist in parent, or type changed */
 600                        break;
 601                }
 602        }
 603        diff_flush(&diff_opts);
 604        free_pathspec(&diff_opts.pathspec);
 605        return porigin;
 606}
 607
 608/*
 609 * We have an origin -- find the path that corresponds to it in its
 610 * parent and return an origin structure to represent it.
 611 */
 612static struct origin *find_rename(struct scoreboard *sb,
 613                                  struct commit *parent,
 614                                  struct origin *origin)
 615{
 616        struct origin *porigin = NULL;
 617        struct diff_options diff_opts;
 618        int i;
 619
 620        diff_setup(&diff_opts);
 621        DIFF_OPT_SET(&diff_opts, RECURSIVE);
 622        diff_opts.detect_rename = DIFF_DETECT_RENAME;
 623        diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
 624        diff_opts.single_follow = origin->path;
 625        diff_setup_done(&diff_opts);
 626
 627        if (is_null_sha1(origin->commit->object.sha1))
 628                do_diff_cache(parent->tree->object.sha1, &diff_opts);
 629        else
 630                diff_tree_sha1(parent->tree->object.sha1,
 631                               origin->commit->tree->object.sha1,
 632                               "", &diff_opts);
 633        diffcore_std(&diff_opts);
 634
 635        for (i = 0; i < diff_queued_diff.nr; i++) {
 636                struct diff_filepair *p = diff_queued_diff.queue[i];
 637                if ((p->status == 'R' || p->status == 'C') &&
 638                    !strcmp(p->two->path, origin->path)) {
 639                        porigin = get_origin(sb, parent, p->one->path);
 640                        hashcpy(porigin->blob_sha1, p->one->sha1);
 641                        porigin->mode = p->one->mode;
 642                        break;
 643                }
 644        }
 645        diff_flush(&diff_opts);
 646        free_pathspec(&diff_opts.pathspec);
 647        return porigin;
 648}
 649
 650/*
 651 * Append a new blame entry to a given output queue.
 652 */
 653static void add_blame_entry(struct blame_entry ***queue, struct blame_entry *e)
 654{
 655        origin_incref(e->suspect);
 656
 657        e->next = **queue;
 658        **queue = e;
 659        *queue = &e->next;
 660}
 661
 662/*
 663 * src typically is on-stack; we want to copy the information in it to
 664 * a malloced blame_entry that gets added to the given queue.  The
 665 * origin of dst loses a refcnt.
 666 */
 667static void dup_entry(struct blame_entry ***queue,
 668                      struct blame_entry *dst, struct blame_entry *src)
 669{
 670        origin_incref(src->suspect);
 671        origin_decref(dst->suspect);
 672        memcpy(dst, src, sizeof(*src));
 673        dst->next = **queue;
 674        **queue = dst;
 675        *queue = &dst->next;
 676}
 677
 678static const char *nth_line(struct scoreboard *sb, long lno)
 679{
 680        return sb->final_buf + sb->lineno[lno];
 681}
 682
 683static const char *nth_line_cb(void *data, long lno)
 684{
 685        return nth_line((struct scoreboard *)data, lno);
 686}
 687
 688/*
 689 * It is known that lines between tlno to same came from parent, and e
 690 * has an overlap with that range.  it also is known that parent's
 691 * line plno corresponds to e's line tlno.
 692 *
 693 *                <---- e ----->
 694 *                   <------>
 695 *                   <------------>
 696 *             <------------>
 697 *             <------------------>
 698 *
 699 * Split e into potentially three parts; before this chunk, the chunk
 700 * to be blamed for the parent, and after that portion.
 701 */
 702static void split_overlap(struct blame_entry *split,
 703                          struct blame_entry *e,
 704                          int tlno, int plno, int same,
 705                          struct origin *parent)
 706{
 707        int chunk_end_lno;
 708        memset(split, 0, sizeof(struct blame_entry [3]));
 709
 710        if (e->s_lno < tlno) {
 711                /* there is a pre-chunk part not blamed on parent */
 712                split[0].suspect = origin_incref(e->suspect);
 713                split[0].lno = e->lno;
 714                split[0].s_lno = e->s_lno;
 715                split[0].num_lines = tlno - e->s_lno;
 716                split[1].lno = e->lno + tlno - e->s_lno;
 717                split[1].s_lno = plno;
 718        }
 719        else {
 720                split[1].lno = e->lno;
 721                split[1].s_lno = plno + (e->s_lno - tlno);
 722        }
 723
 724        if (same < e->s_lno + e->num_lines) {
 725                /* there is a post-chunk part not blamed on parent */
 726                split[2].suspect = origin_incref(e->suspect);
 727                split[2].lno = e->lno + (same - e->s_lno);
 728                split[2].s_lno = e->s_lno + (same - e->s_lno);
 729                split[2].num_lines = e->s_lno + e->num_lines - same;
 730                chunk_end_lno = split[2].lno;
 731        }
 732        else
 733                chunk_end_lno = e->lno + e->num_lines;
 734        split[1].num_lines = chunk_end_lno - split[1].lno;
 735
 736        /*
 737         * if it turns out there is nothing to blame the parent for,
 738         * forget about the splitting.  !split[1].suspect signals this.
 739         */
 740        if (split[1].num_lines < 1)
 741                return;
 742        split[1].suspect = origin_incref(parent);
 743}
 744
 745/*
 746 * split_overlap() divided an existing blame e into up to three parts
 747 * in split.  Any assigned blame is moved to queue to
 748 * reflect the split.
 749 */
 750static void split_blame(struct blame_entry ***blamed,
 751                        struct blame_entry ***unblamed,
 752                        struct blame_entry *split,
 753                        struct blame_entry *e)
 754{
 755        struct blame_entry *new_entry;
 756
 757        if (split[0].suspect && split[2].suspect) {
 758                /* The first part (reuse storage for the existing entry e) */
 759                dup_entry(unblamed, e, &split[0]);
 760
 761                /* The last part -- me */
 762                new_entry = xmalloc(sizeof(*new_entry));
 763                memcpy(new_entry, &(split[2]), sizeof(struct blame_entry));
 764                add_blame_entry(unblamed, new_entry);
 765
 766                /* ... and the middle part -- parent */
 767                new_entry = xmalloc(sizeof(*new_entry));
 768                memcpy(new_entry, &(split[1]), sizeof(struct blame_entry));
 769                add_blame_entry(blamed, new_entry);
 770        }
 771        else if (!split[0].suspect && !split[2].suspect)
 772                /*
 773                 * The parent covers the entire area; reuse storage for
 774                 * e and replace it with the parent.
 775                 */
 776                dup_entry(blamed, e, &split[1]);
 777        else if (split[0].suspect) {
 778                /* me and then parent */
 779                dup_entry(unblamed, e, &split[0]);
 780
 781                new_entry = xmalloc(sizeof(*new_entry));
 782                memcpy(new_entry, &(split[1]), sizeof(struct blame_entry));
 783                add_blame_entry(blamed, new_entry);
 784        }
 785        else {
 786                /* parent and then me */
 787                dup_entry(blamed, e, &split[1]);
 788
 789                new_entry = xmalloc(sizeof(*new_entry));
 790                memcpy(new_entry, &(split[2]), sizeof(struct blame_entry));
 791                add_blame_entry(unblamed, new_entry);
 792        }
 793}
 794
 795/*
 796 * After splitting the blame, the origins used by the
 797 * on-stack blame_entry should lose one refcnt each.
 798 */
 799static void decref_split(struct blame_entry *split)
 800{
 801        int i;
 802
 803        for (i = 0; i < 3; i++)
 804                origin_decref(split[i].suspect);
 805}
 806
 807/*
 808 * reverse_blame reverses the list given in head, appending tail.
 809 * That allows us to build lists in reverse order, then reverse them
 810 * afterwards.  This can be faster than building the list in proper
 811 * order right away.  The reason is that building in proper order
 812 * requires writing a link in the _previous_ element, while building
 813 * in reverse order just requires placing the list head into the
 814 * _current_ element.
 815 */
 816
 817static struct blame_entry *reverse_blame(struct blame_entry *head,
 818                                         struct blame_entry *tail)
 819{
 820        while (head) {
 821                struct blame_entry *next = head->next;
 822                head->next = tail;
 823                tail = head;
 824                head = next;
 825        }
 826        return tail;
 827}
 828
 829/*
 830 * Process one hunk from the patch between the current suspect for
 831 * blame_entry e and its parent.  This first blames any unfinished
 832 * entries before the chunk (which is where target and parent start
 833 * differing) on the parent, and then splits blame entries at the
 834 * start and at the end of the difference region.  Since use of -M and
 835 * -C options may lead to overlapping/duplicate source line number
 836 * ranges, all we can rely on from sorting/merging is the order of the
 837 * first suspect line number.
 838 */
 839static void blame_chunk(struct blame_entry ***dstq, struct blame_entry ***srcq,
 840                        int tlno, int offset, int same,
 841                        struct origin *parent)
 842{
 843        struct blame_entry *e = **srcq;
 844        struct blame_entry *samep = NULL, *diffp = NULL;
 845
 846        while (e && e->s_lno < tlno) {
 847                struct blame_entry *next = e->next;
 848                /*
 849                 * current record starts before differing portion.  If
 850                 * it reaches into it, we need to split it up and
 851                 * examine the second part separately.
 852                 */
 853                if (e->s_lno + e->num_lines > tlno) {
 854                        /* Move second half to a new record */
 855                        int len = tlno - e->s_lno;
 856                        struct blame_entry *n = xcalloc(1, sizeof (struct blame_entry));
 857                        n->suspect = e->suspect;
 858                        n->lno = e->lno + len;
 859                        n->s_lno = e->s_lno + len;
 860                        n->num_lines = e->num_lines - len;
 861                        e->num_lines = len;
 862                        e->score = 0;
 863                        /* Push new record to diffp */
 864                        n->next = diffp;
 865                        diffp = n;
 866                } else
 867                        origin_decref(e->suspect);
 868                /* Pass blame for everything before the differing
 869                 * chunk to the parent */
 870                e->suspect = origin_incref(parent);
 871                e->s_lno += offset;
 872                e->next = samep;
 873                samep = e;
 874                e = next;
 875        }
 876        /*
 877         * As we don't know how much of a common stretch after this
 878         * diff will occur, the currently blamed parts are all that we
 879         * can assign to the parent for now.
 880         */
 881
 882        if (samep) {
 883                **dstq = reverse_blame(samep, **dstq);
 884                *dstq = &samep->next;
 885        }
 886        /*
 887         * Prepend the split off portions: everything after e starts
 888         * after the blameable portion.
 889         */
 890        e = reverse_blame(diffp, e);
 891
 892        /*
 893         * Now retain records on the target while parts are different
 894         * from the parent.
 895         */
 896        samep = NULL;
 897        diffp = NULL;
 898        while (e && e->s_lno < same) {
 899                struct blame_entry *next = e->next;
 900
 901                /*
 902                 * If current record extends into sameness, need to split.
 903                 */
 904                if (e->s_lno + e->num_lines > same) {
 905                        /*
 906                         * Move second half to a new record to be
 907                         * processed by later chunks
 908                         */
 909                        int len = same - e->s_lno;
 910                        struct blame_entry *n = xcalloc(1, sizeof (struct blame_entry));
 911                        n->suspect = origin_incref(e->suspect);
 912                        n->lno = e->lno + len;
 913                        n->s_lno = e->s_lno + len;
 914                        n->num_lines = e->num_lines - len;
 915                        e->num_lines = len;
 916                        e->score = 0;
 917                        /* Push new record to samep */
 918                        n->next = samep;
 919                        samep = n;
 920                }
 921                e->next = diffp;
 922                diffp = e;
 923                e = next;
 924        }
 925        **srcq = reverse_blame(diffp, reverse_blame(samep, e));
 926        /* Move across elements that are in the unblamable portion */
 927        if (diffp)
 928                *srcq = &diffp->next;
 929}
 930
 931struct blame_chunk_cb_data {
 932        struct origin *parent;
 933        long offset;
 934        struct blame_entry **dstq;
 935        struct blame_entry **srcq;
 936};
 937
 938/* diff chunks are from parent to target */
 939static int blame_chunk_cb(long start_a, long count_a,
 940                          long start_b, long count_b, void *data)
 941{
 942        struct blame_chunk_cb_data *d = data;
 943        if (start_a - start_b != d->offset)
 944                die("internal error in blame::blame_chunk_cb");
 945        blame_chunk(&d->dstq, &d->srcq, start_b, start_a - start_b,
 946                    start_b + count_b, d->parent);
 947        d->offset = start_a + count_a - (start_b + count_b);
 948        return 0;
 949}
 950
 951/*
 952 * We are looking at the origin 'target' and aiming to pass blame
 953 * for the lines it is suspected to its parent.  Run diff to find
 954 * which lines came from parent and pass blame for them.
 955 */
 956static void pass_blame_to_parent(struct scoreboard *sb,
 957                                 struct origin *target,
 958                                 struct origin *parent)
 959{
 960        mmfile_t file_p, file_o;
 961        struct blame_chunk_cb_data d;
 962        struct blame_entry *newdest = NULL;
 963
 964        if (!target->suspects)
 965                return; /* nothing remains for this target */
 966
 967        d.parent = parent;
 968        d.offset = 0;
 969        d.dstq = &newdest; d.srcq = &target->suspects;
 970
 971        fill_origin_blob(&sb->revs->diffopt, parent, &file_p);
 972        fill_origin_blob(&sb->revs->diffopt, target, &file_o);
 973        num_get_patch++;
 974
 975        diff_hunks(&file_p, &file_o, 0, blame_chunk_cb, &d);
 976        /* The rest are the same as the parent */
 977        blame_chunk(&d.dstq, &d.srcq, INT_MAX, d.offset, INT_MAX, parent);
 978        *d.dstq = NULL;
 979        queue_blames(sb, parent, newdest);
 980
 981        return;
 982}
 983
 984/*
 985 * The lines in blame_entry after splitting blames many times can become
 986 * very small and trivial, and at some point it becomes pointless to
 987 * blame the parents.  E.g. "\t\t}\n\t}\n\n" appears everywhere in any
 988 * ordinary C program, and it is not worth to say it was copied from
 989 * totally unrelated file in the parent.
 990 *
 991 * Compute how trivial the lines in the blame_entry are.
 992 */
 993static unsigned ent_score(struct scoreboard *sb, struct blame_entry *e)
 994{
 995        unsigned score;
 996        const char *cp, *ep;
 997
 998        if (e->score)
 999                return e->score;
1000
1001        score = 1;
1002        cp = nth_line(sb, e->lno);
1003        ep = nth_line(sb, e->lno + e->num_lines);
1004        while (cp < ep) {
1005                unsigned ch = *((unsigned char *)cp);
1006                if (isalnum(ch))
1007                        score++;
1008                cp++;
1009        }
1010        e->score = score;
1011        return score;
1012}
1013
1014/*
1015 * best_so_far[] and this[] are both a split of an existing blame_entry
1016 * that passes blame to the parent.  Maintain best_so_far the best split
1017 * so far, by comparing this and best_so_far and copying this into
1018 * bst_so_far as needed.
1019 */
1020static void copy_split_if_better(struct scoreboard *sb,
1021                                 struct blame_entry *best_so_far,
1022                                 struct blame_entry *this)
1023{
1024        int i;
1025
1026        if (!this[1].suspect)
1027                return;
1028        if (best_so_far[1].suspect) {
1029                if (ent_score(sb, &this[1]) < ent_score(sb, &best_so_far[1]))
1030                        return;
1031        }
1032
1033        for (i = 0; i < 3; i++)
1034                origin_incref(this[i].suspect);
1035        decref_split(best_so_far);
1036        memcpy(best_so_far, this, sizeof(struct blame_entry [3]));
1037}
1038
1039/*
1040 * We are looking at a part of the final image represented by
1041 * ent (tlno and same are offset by ent->s_lno).
1042 * tlno is where we are looking at in the final image.
1043 * up to (but not including) same match preimage.
1044 * plno is where we are looking at in the preimage.
1045 *
1046 * <-------------- final image ---------------------->
1047 *       <------ent------>
1048 *         ^tlno ^same
1049 *    <---------preimage----->
1050 *         ^plno
1051 *
1052 * All line numbers are 0-based.
1053 */
1054static void handle_split(struct scoreboard *sb,
1055                         struct blame_entry *ent,
1056                         int tlno, int plno, int same,
1057                         struct origin *parent,
1058                         struct blame_entry *split)
1059{
1060        if (ent->num_lines <= tlno)
1061                return;
1062        if (tlno < same) {
1063                struct blame_entry this[3];
1064                tlno += ent->s_lno;
1065                same += ent->s_lno;
1066                split_overlap(this, ent, tlno, plno, same, parent);
1067                copy_split_if_better(sb, split, this);
1068                decref_split(this);
1069        }
1070}
1071
1072struct handle_split_cb_data {
1073        struct scoreboard *sb;
1074        struct blame_entry *ent;
1075        struct origin *parent;
1076        struct blame_entry *split;
1077        long plno;
1078        long tlno;
1079};
1080
1081static int handle_split_cb(long start_a, long count_a,
1082                           long start_b, long count_b, void *data)
1083{
1084        struct handle_split_cb_data *d = data;
1085        handle_split(d->sb, d->ent, d->tlno, d->plno, start_b, d->parent,
1086                     d->split);
1087        d->plno = start_a + count_a;
1088        d->tlno = start_b + count_b;
1089        return 0;
1090}
1091
1092/*
1093 * Find the lines from parent that are the same as ent so that
1094 * we can pass blames to it.  file_p has the blob contents for
1095 * the parent.
1096 */
1097static void find_copy_in_blob(struct scoreboard *sb,
1098                              struct blame_entry *ent,
1099                              struct origin *parent,
1100                              struct blame_entry *split,
1101                              mmfile_t *file_p)
1102{
1103        const char *cp;
1104        mmfile_t file_o;
1105        struct handle_split_cb_data d;
1106
1107        memset(&d, 0, sizeof(d));
1108        d.sb = sb; d.ent = ent; d.parent = parent; d.split = split;
1109        /*
1110         * Prepare mmfile that contains only the lines in ent.
1111         */
1112        cp = nth_line(sb, ent->lno);
1113        file_o.ptr = (char *) cp;
1114        file_o.size = nth_line(sb, ent->lno + ent->num_lines) - cp;
1115
1116        /*
1117         * file_o is a part of final image we are annotating.
1118         * file_p partially may match that image.
1119         */
1120        memset(split, 0, sizeof(struct blame_entry [3]));
1121        diff_hunks(file_p, &file_o, 1, handle_split_cb, &d);
1122        /* remainder, if any, all match the preimage */
1123        handle_split(sb, ent, d.tlno, d.plno, ent->num_lines, parent, split);
1124}
1125
1126/* Move all blame entries from list *source that have a score smaller
1127 * than score_min to the front of list *small.
1128 * Returns a pointer to the link pointing to the old head of the small list.
1129 */
1130
1131static struct blame_entry **filter_small(struct scoreboard *sb,
1132                                         struct blame_entry **small,
1133                                         struct blame_entry **source,
1134                                         unsigned score_min)
1135{
1136        struct blame_entry *p = *source;
1137        struct blame_entry *oldsmall = *small;
1138        while (p) {
1139                if (ent_score(sb, p) <= score_min) {
1140                        *small = p;
1141                        small = &p->next;
1142                        p = *small;
1143                } else {
1144                        *source = p;
1145                        source = &p->next;
1146                        p = *source;
1147                }
1148        }
1149        *small = oldsmall;
1150        *source = NULL;
1151        return small;
1152}
1153
1154/*
1155 * See if lines currently target is suspected for can be attributed to
1156 * parent.
1157 */
1158static void find_move_in_parent(struct scoreboard *sb,
1159                                struct blame_entry ***blamed,
1160                                struct blame_entry **toosmall,
1161                                struct origin *target,
1162                                struct origin *parent)
1163{
1164        struct blame_entry *e, split[3];
1165        struct blame_entry *unblamed = target->suspects;
1166        struct blame_entry *leftover = NULL;
1167        mmfile_t file_p;
1168
1169        if (!unblamed)
1170                return; /* nothing remains for this target */
1171
1172        fill_origin_blob(&sb->revs->diffopt, parent, &file_p);
1173        if (!file_p.ptr)
1174                return;
1175
1176        /* At each iteration, unblamed has a NULL-terminated list of
1177         * entries that have not yet been tested for blame.  leftover
1178         * contains the reversed list of entries that have been tested
1179         * without being assignable to the parent.
1180         */
1181        do {
1182                struct blame_entry **unblamedtail = &unblamed;
1183                struct blame_entry *next;
1184                for (e = unblamed; e; e = next) {
1185                        next = e->next;
1186                        find_copy_in_blob(sb, e, parent, split, &file_p);
1187                        if (split[1].suspect &&
1188                            blame_move_score < ent_score(sb, &split[1])) {
1189                                split_blame(blamed, &unblamedtail, split, e);
1190                        } else {
1191                                e->next = leftover;
1192                                leftover = e;
1193                        }
1194                        decref_split(split);
1195                }
1196                *unblamedtail = NULL;
1197                toosmall = filter_small(sb, toosmall, &unblamed, blame_move_score);
1198        } while (unblamed);
1199        target->suspects = reverse_blame(leftover, NULL);
1200}
1201
1202struct blame_list {
1203        struct blame_entry *ent;
1204        struct blame_entry split[3];
1205};
1206
1207/*
1208 * Count the number of entries the target is suspected for,
1209 * and prepare a list of entry and the best split.
1210 */
1211static struct blame_list *setup_blame_list(struct blame_entry *unblamed,
1212                                           int *num_ents_p)
1213{
1214        struct blame_entry *e;
1215        int num_ents, i;
1216        struct blame_list *blame_list = NULL;
1217
1218        for (e = unblamed, num_ents = 0; e; e = e->next)
1219                num_ents++;
1220        if (num_ents) {
1221                blame_list = xcalloc(num_ents, sizeof(struct blame_list));
1222                for (e = unblamed, i = 0; e; e = e->next)
1223                        blame_list[i++].ent = e;
1224        }
1225        *num_ents_p = num_ents;
1226        return blame_list;
1227}
1228
1229/*
1230 * For lines target is suspected for, see if we can find code movement
1231 * across file boundary from the parent commit.  porigin is the path
1232 * in the parent we already tried.
1233 */
1234static void find_copy_in_parent(struct scoreboard *sb,
1235                                struct blame_entry ***blamed,
1236                                struct blame_entry **toosmall,
1237                                struct origin *target,
1238                                struct commit *parent,
1239                                struct origin *porigin,
1240                                int opt)
1241{
1242        struct diff_options diff_opts;
1243        int i, j;
1244        struct blame_list *blame_list;
1245        int num_ents;
1246        struct blame_entry *unblamed = target->suspects;
1247        struct blame_entry *leftover = NULL;
1248
1249        if (!unblamed)
1250                return; /* nothing remains for this target */
1251
1252        diff_setup(&diff_opts);
1253        DIFF_OPT_SET(&diff_opts, RECURSIVE);
1254        diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
1255
1256        diff_setup_done(&diff_opts);
1257
1258        /* Try "find copies harder" on new path if requested;
1259         * we do not want to use diffcore_rename() actually to
1260         * match things up; find_copies_harder is set only to
1261         * force diff_tree_sha1() to feed all filepairs to diff_queue,
1262         * and this code needs to be after diff_setup_done(), which
1263         * usually makes find-copies-harder imply copy detection.
1264         */
1265        if ((opt & PICKAXE_BLAME_COPY_HARDEST)
1266            || ((opt & PICKAXE_BLAME_COPY_HARDER)
1267                && (!porigin || strcmp(target->path, porigin->path))))
1268                DIFF_OPT_SET(&diff_opts, FIND_COPIES_HARDER);
1269
1270        if (is_null_sha1(target->commit->object.sha1))
1271                do_diff_cache(parent->tree->object.sha1, &diff_opts);
1272        else
1273                diff_tree_sha1(parent->tree->object.sha1,
1274                               target->commit->tree->object.sha1,
1275                               "", &diff_opts);
1276
1277        if (!DIFF_OPT_TST(&diff_opts, FIND_COPIES_HARDER))
1278                diffcore_std(&diff_opts);
1279
1280        do {
1281                struct blame_entry **unblamedtail = &unblamed;
1282                blame_list = setup_blame_list(unblamed, &num_ents);
1283
1284                for (i = 0; i < diff_queued_diff.nr; i++) {
1285                        struct diff_filepair *p = diff_queued_diff.queue[i];
1286                        struct origin *norigin;
1287                        mmfile_t file_p;
1288                        struct blame_entry this[3];
1289
1290                        if (!DIFF_FILE_VALID(p->one))
1291                                continue; /* does not exist in parent */
1292                        if (S_ISGITLINK(p->one->mode))
1293                                continue; /* ignore git links */
1294                        if (porigin && !strcmp(p->one->path, porigin->path))
1295                                /* find_move already dealt with this path */
1296                                continue;
1297
1298                        norigin = get_origin(sb, parent, p->one->path);
1299                        hashcpy(norigin->blob_sha1, p->one->sha1);
1300                        norigin->mode = p->one->mode;
1301                        fill_origin_blob(&sb->revs->diffopt, norigin, &file_p);
1302                        if (!file_p.ptr)
1303                                continue;
1304
1305                        for (j = 0; j < num_ents; j++) {
1306                                find_copy_in_blob(sb, blame_list[j].ent,
1307                                                  norigin, this, &file_p);
1308                                copy_split_if_better(sb, blame_list[j].split,
1309                                                     this);
1310                                decref_split(this);
1311                        }
1312                        origin_decref(norigin);
1313                }
1314
1315                for (j = 0; j < num_ents; j++) {
1316                        struct blame_entry *split = blame_list[j].split;
1317                        if (split[1].suspect &&
1318                            blame_copy_score < ent_score(sb, &split[1])) {
1319                                split_blame(blamed, &unblamedtail, split,
1320                                            blame_list[j].ent);
1321                        } else {
1322                                blame_list[j].ent->next = leftover;
1323                                leftover = blame_list[j].ent;
1324                        }
1325                        decref_split(split);
1326                }
1327                free(blame_list);
1328                *unblamedtail = NULL;
1329                toosmall = filter_small(sb, toosmall, &unblamed, blame_copy_score);
1330        } while (unblamed);
1331        target->suspects = reverse_blame(leftover, NULL);
1332        diff_flush(&diff_opts);
1333        free_pathspec(&diff_opts.pathspec);
1334}
1335
1336/*
1337 * The blobs of origin and porigin exactly match, so everything
1338 * origin is suspected for can be blamed on the parent.
1339 */
1340static void pass_whole_blame(struct scoreboard *sb,
1341                             struct origin *origin, struct origin *porigin)
1342{
1343        struct blame_entry *e, *suspects;
1344
1345        if (!porigin->file.ptr && origin->file.ptr) {
1346                /* Steal its file */
1347                porigin->file = origin->file;
1348                origin->file.ptr = NULL;
1349        }
1350        suspects = origin->suspects;
1351        origin->suspects = NULL;
1352        for (e = suspects; e; e = e->next) {
1353                origin_incref(porigin);
1354                origin_decref(e->suspect);
1355                e->suspect = porigin;
1356        }
1357        queue_blames(sb, porigin, suspects);
1358}
1359
1360/*
1361 * We pass blame from the current commit to its parents.  We keep saying
1362 * "parent" (and "porigin"), but what we mean is to find scapegoat to
1363 * exonerate ourselves.
1364 */
1365static struct commit_list *first_scapegoat(struct rev_info *revs, struct commit *commit)
1366{
1367        if (!reverse)
1368                return commit->parents;
1369        return lookup_decoration(&revs->children, &commit->object);
1370}
1371
1372static int num_scapegoats(struct rev_info *revs, struct commit *commit)
1373{
1374        int cnt;
1375        struct commit_list *l = first_scapegoat(revs, commit);
1376        for (cnt = 0; l; l = l->next)
1377                cnt++;
1378        return cnt;
1379}
1380
1381/* Distribute collected unsorted blames to the respected sorted lists
1382 * in the various origins.
1383 */
1384static void distribute_blame(struct scoreboard *sb, struct blame_entry *blamed)
1385{
1386        blamed = blame_sort(blamed, compare_blame_suspect);
1387        while (blamed)
1388        {
1389                struct origin *porigin = blamed->suspect;
1390                struct blame_entry *suspects = NULL;
1391                do {
1392                        struct blame_entry *next = blamed->next;
1393                        blamed->next = suspects;
1394                        suspects = blamed;
1395                        blamed = next;
1396                } while (blamed && blamed->suspect == porigin);
1397                suspects = reverse_blame(suspects, NULL);
1398                queue_blames(sb, porigin, suspects);
1399        }
1400}
1401
1402#define MAXSG 16
1403
1404static void pass_blame(struct scoreboard *sb, struct origin *origin, int opt)
1405{
1406        struct rev_info *revs = sb->revs;
1407        int i, pass, num_sg;
1408        struct commit *commit = origin->commit;
1409        struct commit_list *sg;
1410        struct origin *sg_buf[MAXSG];
1411        struct origin *porigin, **sg_origin = sg_buf;
1412        struct blame_entry *toosmall = NULL;
1413        struct blame_entry *blames, **blametail = &blames;
1414
1415        num_sg = num_scapegoats(revs, commit);
1416        if (!num_sg)
1417                goto finish;
1418        else if (num_sg < ARRAY_SIZE(sg_buf))
1419                memset(sg_buf, 0, sizeof(sg_buf));
1420        else
1421                sg_origin = xcalloc(num_sg, sizeof(*sg_origin));
1422
1423        /*
1424         * The first pass looks for unrenamed path to optimize for
1425         * common cases, then we look for renames in the second pass.
1426         */
1427        for (pass = 0; pass < 2 - no_whole_file_rename; pass++) {
1428                struct origin *(*find)(struct scoreboard *,
1429                                       struct commit *, struct origin *);
1430                find = pass ? find_rename : find_origin;
1431
1432                for (i = 0, sg = first_scapegoat(revs, commit);
1433                     i < num_sg && sg;
1434                     sg = sg->next, i++) {
1435                        struct commit *p = sg->item;
1436                        int j, same;
1437
1438                        if (sg_origin[i])
1439                                continue;
1440                        if (parse_commit(p))
1441                                continue;
1442                        porigin = find(sb, p, origin);
1443                        if (!porigin)
1444                                continue;
1445                        if (!hashcmp(porigin->blob_sha1, origin->blob_sha1)) {
1446                                pass_whole_blame(sb, origin, porigin);
1447                                origin_decref(porigin);
1448                                goto finish;
1449                        }
1450                        for (j = same = 0; j < i; j++)
1451                                if (sg_origin[j] &&
1452                                    !hashcmp(sg_origin[j]->blob_sha1,
1453                                             porigin->blob_sha1)) {
1454                                        same = 1;
1455                                        break;
1456                                }
1457                        if (!same)
1458                                sg_origin[i] = porigin;
1459                        else
1460                                origin_decref(porigin);
1461                }
1462        }
1463
1464        num_commits++;
1465        for (i = 0, sg = first_scapegoat(revs, commit);
1466             i < num_sg && sg;
1467             sg = sg->next, i++) {
1468                struct origin *porigin = sg_origin[i];
1469                if (!porigin)
1470                        continue;
1471                if (!origin->previous) {
1472                        origin_incref(porigin);
1473                        origin->previous = porigin;
1474                }
1475                pass_blame_to_parent(sb, origin, porigin);
1476                if (!origin->suspects)
1477                        goto finish;
1478        }
1479
1480        /*
1481         * Optionally find moves in parents' files.
1482         */
1483        if (opt & PICKAXE_BLAME_MOVE) {
1484                filter_small(sb, &toosmall, &origin->suspects, blame_move_score);
1485                if (origin->suspects) {
1486                        for (i = 0, sg = first_scapegoat(revs, commit);
1487                             i < num_sg && sg;
1488                             sg = sg->next, i++) {
1489                                struct origin *porigin = sg_origin[i];
1490                                if (!porigin)
1491                                        continue;
1492                                find_move_in_parent(sb, &blametail, &toosmall, origin, porigin);
1493                                if (!origin->suspects)
1494                                        break;
1495                        }
1496                }
1497        }
1498
1499        /*
1500         * Optionally find copies from parents' files.
1501         */
1502        if (opt & PICKAXE_BLAME_COPY) {
1503                if (blame_copy_score > blame_move_score)
1504                        filter_small(sb, &toosmall, &origin->suspects, blame_copy_score);
1505                else if (blame_copy_score < blame_move_score) {
1506                        origin->suspects = blame_merge(origin->suspects, toosmall);
1507                        toosmall = NULL;
1508                        filter_small(sb, &toosmall, &origin->suspects, blame_copy_score);
1509                }
1510                if (!origin->suspects)
1511                        goto finish;
1512
1513                for (i = 0, sg = first_scapegoat(revs, commit);
1514                     i < num_sg && sg;
1515                     sg = sg->next, i++) {
1516                        struct origin *porigin = sg_origin[i];
1517                        find_copy_in_parent(sb, &blametail, &toosmall,
1518                                            origin, sg->item, porigin, opt);
1519                        if (!origin->suspects)
1520                                goto finish;
1521                }
1522        }
1523
1524finish:
1525        *blametail = NULL;
1526        distribute_blame(sb, blames);
1527        /*
1528         * prepend toosmall to origin->suspects
1529         *
1530         * There is no point in sorting: this ends up on a big
1531         * unsorted list in the caller anyway.
1532         */
1533        if (toosmall) {
1534                struct blame_entry **tail = &toosmall;
1535                while (*tail)
1536                        tail = &(*tail)->next;
1537                *tail = origin->suspects;
1538                origin->suspects = toosmall;
1539        }
1540        for (i = 0; i < num_sg; i++) {
1541                if (sg_origin[i]) {
1542                        drop_origin_blob(sg_origin[i]);
1543                        origin_decref(sg_origin[i]);
1544                }
1545        }
1546        drop_origin_blob(origin);
1547        if (sg_buf != sg_origin)
1548                free(sg_origin);
1549}
1550
1551/*
1552 * Information on commits, used for output.
1553 */
1554struct commit_info {
1555        struct strbuf author;
1556        struct strbuf author_mail;
1557        unsigned long author_time;
1558        struct strbuf author_tz;
1559
1560        /* filled only when asked for details */
1561        struct strbuf committer;
1562        struct strbuf committer_mail;
1563        unsigned long committer_time;
1564        struct strbuf committer_tz;
1565
1566        struct strbuf summary;
1567};
1568
1569/*
1570 * Parse author/committer line in the commit object buffer
1571 */
1572static void get_ac_line(const char *inbuf, const char *what,
1573        struct strbuf *name, struct strbuf *mail,
1574        unsigned long *time, struct strbuf *tz)
1575{
1576        struct ident_split ident;
1577        size_t len, maillen, namelen;
1578        char *tmp, *endp;
1579        const char *namebuf, *mailbuf;
1580
1581        tmp = strstr(inbuf, what);
1582        if (!tmp)
1583                goto error_out;
1584        tmp += strlen(what);
1585        endp = strchr(tmp, '\n');
1586        if (!endp)
1587                len = strlen(tmp);
1588        else
1589                len = endp - tmp;
1590
1591        if (split_ident_line(&ident, tmp, len)) {
1592        error_out:
1593                /* Ugh */
1594                tmp = "(unknown)";
1595                strbuf_addstr(name, tmp);
1596                strbuf_addstr(mail, tmp);
1597                strbuf_addstr(tz, tmp);
1598                *time = 0;
1599                return;
1600        }
1601
1602        namelen = ident.name_end - ident.name_begin;
1603        namebuf = ident.name_begin;
1604
1605        maillen = ident.mail_end - ident.mail_begin;
1606        mailbuf = ident.mail_begin;
1607
1608        if (ident.date_begin && ident.date_end)
1609                *time = strtoul(ident.date_begin, NULL, 10);
1610        else
1611                *time = 0;
1612
1613        if (ident.tz_begin && ident.tz_end)
1614                strbuf_add(tz, ident.tz_begin, ident.tz_end - ident.tz_begin);
1615        else
1616                strbuf_addstr(tz, "(unknown)");
1617
1618        /*
1619         * Now, convert both name and e-mail using mailmap
1620         */
1621        map_user(&mailmap, &mailbuf, &maillen,
1622                 &namebuf, &namelen);
1623
1624        strbuf_addf(mail, "<%.*s>", (int)maillen, mailbuf);
1625        strbuf_add(name, namebuf, namelen);
1626}
1627
1628static void commit_info_init(struct commit_info *ci)
1629{
1630
1631        strbuf_init(&ci->author, 0);
1632        strbuf_init(&ci->author_mail, 0);
1633        strbuf_init(&ci->author_tz, 0);
1634        strbuf_init(&ci->committer, 0);
1635        strbuf_init(&ci->committer_mail, 0);
1636        strbuf_init(&ci->committer_tz, 0);
1637        strbuf_init(&ci->summary, 0);
1638}
1639
1640static void commit_info_destroy(struct commit_info *ci)
1641{
1642
1643        strbuf_release(&ci->author);
1644        strbuf_release(&ci->author_mail);
1645        strbuf_release(&ci->author_tz);
1646        strbuf_release(&ci->committer);
1647        strbuf_release(&ci->committer_mail);
1648        strbuf_release(&ci->committer_tz);
1649        strbuf_release(&ci->summary);
1650}
1651
1652static void get_commit_info(struct commit *commit,
1653                            struct commit_info *ret,
1654                            int detailed)
1655{
1656        int len;
1657        const char *subject, *encoding;
1658        char *message;
1659
1660        commit_info_init(ret);
1661
1662        encoding = get_log_output_encoding();
1663        message = logmsg_reencode(commit, NULL, encoding);
1664        get_ac_line(message, "\nauthor ",
1665                    &ret->author, &ret->author_mail,
1666                    &ret->author_time, &ret->author_tz);
1667
1668        if (!detailed) {
1669                logmsg_free(message, commit);
1670                return;
1671        }
1672
1673        get_ac_line(message, "\ncommitter ",
1674                    &ret->committer, &ret->committer_mail,
1675                    &ret->committer_time, &ret->committer_tz);
1676
1677        len = find_commit_subject(message, &subject);
1678        if (len)
1679                strbuf_add(&ret->summary, subject, len);
1680        else
1681                strbuf_addf(&ret->summary, "(%s)", sha1_to_hex(commit->object.sha1));
1682
1683        logmsg_free(message, commit);
1684}
1685
1686/*
1687 * To allow LF and other nonportable characters in pathnames,
1688 * they are c-style quoted as needed.
1689 */
1690static void write_filename_info(const char *path)
1691{
1692        printf("filename ");
1693        write_name_quoted(path, stdout, '\n');
1694}
1695
1696/*
1697 * Porcelain/Incremental format wants to show a lot of details per
1698 * commit.  Instead of repeating this every line, emit it only once,
1699 * the first time each commit appears in the output (unless the
1700 * user has specifically asked for us to repeat).
1701 */
1702static int emit_one_suspect_detail(struct origin *suspect, int repeat)
1703{
1704        struct commit_info ci;
1705
1706        if (!repeat && (suspect->commit->object.flags & METAINFO_SHOWN))
1707                return 0;
1708
1709        suspect->commit->object.flags |= METAINFO_SHOWN;
1710        get_commit_info(suspect->commit, &ci, 1);
1711        printf("author %s\n", ci.author.buf);
1712        printf("author-mail %s\n", ci.author_mail.buf);
1713        printf("author-time %lu\n", ci.author_time);
1714        printf("author-tz %s\n", ci.author_tz.buf);
1715        printf("committer %s\n", ci.committer.buf);
1716        printf("committer-mail %s\n", ci.committer_mail.buf);
1717        printf("committer-time %lu\n", ci.committer_time);
1718        printf("committer-tz %s\n", ci.committer_tz.buf);
1719        printf("summary %s\n", ci.summary.buf);
1720        if (suspect->commit->object.flags & UNINTERESTING)
1721                printf("boundary\n");
1722        if (suspect->previous) {
1723                struct origin *prev = suspect->previous;
1724                printf("previous %s ", sha1_to_hex(prev->commit->object.sha1));
1725                write_name_quoted(prev->path, stdout, '\n');
1726        }
1727
1728        commit_info_destroy(&ci);
1729
1730        return 1;
1731}
1732
1733/*
1734 * The blame_entry is found to be guilty for the range.
1735 * Show it in incremental output.
1736 */
1737static void found_guilty_entry(struct blame_entry *ent)
1738{
1739        if (incremental) {
1740                struct origin *suspect = ent->suspect;
1741
1742                printf("%s %d %d %d\n",
1743                       sha1_to_hex(suspect->commit->object.sha1),
1744                       ent->s_lno + 1, ent->lno + 1, ent->num_lines);
1745                emit_one_suspect_detail(suspect, 0);
1746                write_filename_info(suspect->path);
1747                maybe_flush_or_die(stdout, "stdout");
1748        }
1749}
1750
1751/*
1752 * The main loop -- while we have blobs with lines whose true origin
1753 * is still unknown, pick one blob, and allow its lines to pass blames
1754 * to its parents. */
1755static void assign_blame(struct scoreboard *sb, int opt)
1756{
1757        struct rev_info *revs = sb->revs;
1758        struct commit *commit = prio_queue_get(&sb->commits);
1759
1760        while (commit) {
1761                struct blame_entry *ent;
1762                struct origin *suspect = commit->util;
1763
1764                /* find one suspect to break down */
1765                while (suspect && !suspect->suspects)
1766                        suspect = suspect->next;
1767
1768                if (!suspect) {
1769                        commit = prio_queue_get(&sb->commits);
1770                        continue;
1771                }
1772
1773                assert(commit == suspect->commit);
1774
1775                /*
1776                 * We will use this suspect later in the loop,
1777                 * so hold onto it in the meantime.
1778                 */
1779                origin_incref(suspect);
1780                parse_commit(commit);
1781                if (reverse ||
1782                    (!(commit->object.flags & UNINTERESTING) &&
1783                     !(revs->max_age != -1 && commit->date < revs->max_age)))
1784                        pass_blame(sb, suspect, opt);
1785                else {
1786                        commit->object.flags |= UNINTERESTING;
1787                        if (commit->object.parsed)
1788                                mark_parents_uninteresting(commit);
1789                }
1790                /* treat root commit as boundary */
1791                if (!commit->parents && !show_root)
1792                        commit->object.flags |= UNINTERESTING;
1793
1794                /* Take responsibility for the remaining entries */
1795                ent = suspect->suspects;
1796                if (ent) {
1797                        suspect->guilty = 1;
1798                        for (;;) {
1799                                struct blame_entry *next = ent->next;
1800                                found_guilty_entry(ent);
1801                                if (next) {
1802                                        ent = next;
1803                                        continue;
1804                                }
1805                                ent->next = sb->ent;
1806                                sb->ent = suspect->suspects;
1807                                suspect->suspects = NULL;
1808                                break;
1809                        }
1810                }
1811                origin_decref(suspect);
1812
1813                if (DEBUG) /* sanity */
1814                        sanity_check_refcnt(sb);
1815        }
1816}
1817
1818static const char *format_time(unsigned long time, const char *tz_str,
1819                               int show_raw_time)
1820{
1821        static struct strbuf time_buf = STRBUF_INIT;
1822
1823        strbuf_reset(&time_buf);
1824        if (show_raw_time) {
1825                strbuf_addf(&time_buf, "%lu %s", time, tz_str);
1826        }
1827        else {
1828                const char *time_str;
1829                size_t time_width;
1830                int tz;
1831                tz = atoi(tz_str);
1832                time_str = show_date(time, tz, blame_date_mode);
1833                strbuf_addstr(&time_buf, time_str);
1834                /*
1835                 * Add space paddings to time_buf to display a fixed width
1836                 * string, and use time_width for display width calibration.
1837                 */
1838                for (time_width = utf8_strwidth(time_str);
1839                     time_width < blame_date_width;
1840                     time_width++)
1841                        strbuf_addch(&time_buf, ' ');
1842        }
1843        return time_buf.buf;
1844}
1845
1846#define OUTPUT_ANNOTATE_COMPAT  001
1847#define OUTPUT_LONG_OBJECT_NAME 002
1848#define OUTPUT_RAW_TIMESTAMP    004
1849#define OUTPUT_PORCELAIN        010
1850#define OUTPUT_SHOW_NAME        020
1851#define OUTPUT_SHOW_NUMBER      040
1852#define OUTPUT_SHOW_SCORE      0100
1853#define OUTPUT_NO_AUTHOR       0200
1854#define OUTPUT_SHOW_EMAIL       0400
1855#define OUTPUT_LINE_PORCELAIN 01000
1856
1857static void emit_porcelain_details(struct origin *suspect, int repeat)
1858{
1859        if (emit_one_suspect_detail(suspect, repeat) ||
1860            (suspect->commit->object.flags & MORE_THAN_ONE_PATH))
1861                write_filename_info(suspect->path);
1862}
1863
1864static void emit_porcelain(struct scoreboard *sb, struct blame_entry *ent,
1865                           int opt)
1866{
1867        int repeat = opt & OUTPUT_LINE_PORCELAIN;
1868        int cnt;
1869        const char *cp;
1870        struct origin *suspect = ent->suspect;
1871        char hex[41];
1872
1873        strcpy(hex, sha1_to_hex(suspect->commit->object.sha1));
1874        printf("%s %d %d %d\n",
1875               hex,
1876               ent->s_lno + 1,
1877               ent->lno + 1,
1878               ent->num_lines);
1879        emit_porcelain_details(suspect, repeat);
1880
1881        cp = nth_line(sb, ent->lno);
1882        for (cnt = 0; cnt < ent->num_lines; cnt++) {
1883                char ch;
1884                if (cnt) {
1885                        printf("%s %d %d\n", hex,
1886                               ent->s_lno + 1 + cnt,
1887                               ent->lno + 1 + cnt);
1888                        if (repeat)
1889                                emit_porcelain_details(suspect, 1);
1890                }
1891                putchar('\t');
1892                do {
1893                        ch = *cp++;
1894                        putchar(ch);
1895                } while (ch != '\n' &&
1896                         cp < sb->final_buf + sb->final_buf_size);
1897        }
1898
1899        if (sb->final_buf_size && cp[-1] != '\n')
1900                putchar('\n');
1901}
1902
1903static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt)
1904{
1905        int cnt;
1906        const char *cp;
1907        struct origin *suspect = ent->suspect;
1908        struct commit_info ci;
1909        char hex[41];
1910        int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP);
1911
1912        get_commit_info(suspect->commit, &ci, 1);
1913        strcpy(hex, sha1_to_hex(suspect->commit->object.sha1));
1914
1915        cp = nth_line(sb, ent->lno);
1916        for (cnt = 0; cnt < ent->num_lines; cnt++) {
1917                char ch;
1918                int length = (opt & OUTPUT_LONG_OBJECT_NAME) ? 40 : abbrev;
1919
1920                if (suspect->commit->object.flags & UNINTERESTING) {
1921                        if (blank_boundary)
1922                                memset(hex, ' ', length);
1923                        else if (!(opt & OUTPUT_ANNOTATE_COMPAT)) {
1924                                length--;
1925                                putchar('^');
1926                        }
1927                }
1928
1929                printf("%.*s", length, hex);
1930                if (opt & OUTPUT_ANNOTATE_COMPAT) {
1931                        const char *name;
1932                        if (opt & OUTPUT_SHOW_EMAIL)
1933                                name = ci.author_mail.buf;
1934                        else
1935                                name = ci.author.buf;
1936                        printf("\t(%10s\t%10s\t%d)", name,
1937                               format_time(ci.author_time, ci.author_tz.buf,
1938                                           show_raw_time),
1939                               ent->lno + 1 + cnt);
1940                } else {
1941                        if (opt & OUTPUT_SHOW_SCORE)
1942                                printf(" %*d %02d",
1943                                       max_score_digits, ent->score,
1944                                       ent->suspect->refcnt);
1945                        if (opt & OUTPUT_SHOW_NAME)
1946                                printf(" %-*.*s", longest_file, longest_file,
1947                                       suspect->path);
1948                        if (opt & OUTPUT_SHOW_NUMBER)
1949                                printf(" %*d", max_orig_digits,
1950                                       ent->s_lno + 1 + cnt);
1951
1952                        if (!(opt & OUTPUT_NO_AUTHOR)) {
1953                                const char *name;
1954                                int pad;
1955                                if (opt & OUTPUT_SHOW_EMAIL)
1956                                        name = ci.author_mail.buf;
1957                                else
1958                                        name = ci.author.buf;
1959                                pad = longest_author - utf8_strwidth(name);
1960                                printf(" (%s%*s %10s",
1961                                       name, pad, "",
1962                                       format_time(ci.author_time,
1963                                                   ci.author_tz.buf,
1964                                                   show_raw_time));
1965                        }
1966                        printf(" %*d) ",
1967                               max_digits, ent->lno + 1 + cnt);
1968                }
1969                do {
1970                        ch = *cp++;
1971                        putchar(ch);
1972                } while (ch != '\n' &&
1973                         cp < sb->final_buf + sb->final_buf_size);
1974        }
1975
1976        if (sb->final_buf_size && cp[-1] != '\n')
1977                putchar('\n');
1978
1979        commit_info_destroy(&ci);
1980}
1981
1982static void output(struct scoreboard *sb, int option)
1983{
1984        struct blame_entry *ent;
1985
1986        if (option & OUTPUT_PORCELAIN) {
1987                for (ent = sb->ent; ent; ent = ent->next) {
1988                        int count = 0;
1989                        struct origin *suspect;
1990                        struct commit *commit = ent->suspect->commit;
1991                        if (commit->object.flags & MORE_THAN_ONE_PATH)
1992                                continue;
1993                        for (suspect = commit->util; suspect; suspect = suspect->next) {
1994                                if (suspect->guilty && count++) {
1995                                        commit->object.flags |= MORE_THAN_ONE_PATH;
1996                                        break;
1997                                }
1998                        }
1999                }
2000        }
2001
2002        for (ent = sb->ent; ent; ent = ent->next) {
2003                if (option & OUTPUT_PORCELAIN)
2004                        emit_porcelain(sb, ent, option);
2005                else {
2006                        emit_other(sb, ent, option);
2007                }
2008        }
2009}
2010
2011/*
2012 * To allow quick access to the contents of nth line in the
2013 * final image, prepare an index in the scoreboard.
2014 */
2015static int prepare_lines(struct scoreboard *sb)
2016{
2017        const char *buf = sb->final_buf;
2018        unsigned long len = sb->final_buf_size;
2019        const char *end = buf + len;
2020        const char *p;
2021        int *lineno;
2022        int num = 0, incomplete = 0;
2023
2024        for (p = buf;;) {
2025                p = memchr(p, '\n', end - p);
2026                if (p) {
2027                        p++;
2028                        num++;
2029                        continue;
2030                }
2031                break;
2032        }
2033
2034        if (len && end[-1] != '\n')
2035                incomplete++; /* incomplete line at the end */
2036
2037        sb->lineno = xmalloc(sizeof(*sb->lineno) * (num + incomplete + 1));
2038        lineno = sb->lineno;
2039
2040        *lineno++ = 0;
2041        for (p = buf;;) {
2042                p = memchr(p, '\n', end - p);
2043                if (p) {
2044                        p++;
2045                        *lineno++ = p - buf;
2046                        continue;
2047                }
2048                break;
2049        }
2050
2051        if (incomplete)
2052                *lineno++ = len;
2053
2054        sb->num_lines = num + incomplete;
2055        return sb->num_lines;
2056}
2057
2058/*
2059 * Add phony grafts for use with -S; this is primarily to
2060 * support git's cvsserver that wants to give a linear history
2061 * to its clients.
2062 */
2063static int read_ancestry(const char *graft_file)
2064{
2065        FILE *fp = fopen(graft_file, "r");
2066        struct strbuf buf = STRBUF_INIT;
2067        if (!fp)
2068                return -1;
2069        while (!strbuf_getwholeline(&buf, fp, '\n')) {
2070                /* The format is just "Commit Parent1 Parent2 ...\n" */
2071                struct commit_graft *graft = read_graft_line(buf.buf, buf.len);
2072                if (graft)
2073                        register_commit_graft(graft, 0);
2074        }
2075        fclose(fp);
2076        strbuf_release(&buf);
2077        return 0;
2078}
2079
2080static int update_auto_abbrev(int auto_abbrev, struct origin *suspect)
2081{
2082        const char *uniq = find_unique_abbrev(suspect->commit->object.sha1,
2083                                              auto_abbrev);
2084        int len = strlen(uniq);
2085        if (auto_abbrev < len)
2086                return len;
2087        return auto_abbrev;
2088}
2089
2090/*
2091 * How many columns do we need to show line numbers, authors,
2092 * and filenames?
2093 */
2094static void find_alignment(struct scoreboard *sb, int *option)
2095{
2096        int longest_src_lines = 0;
2097        int longest_dst_lines = 0;
2098        unsigned largest_score = 0;
2099        struct blame_entry *e;
2100        int compute_auto_abbrev = (abbrev < 0);
2101        int auto_abbrev = default_abbrev;
2102
2103        for (e = sb->ent; e; e = e->next) {
2104                struct origin *suspect = e->suspect;
2105                struct commit_info ci;
2106                int num;
2107
2108                if (compute_auto_abbrev)
2109                        auto_abbrev = update_auto_abbrev(auto_abbrev, suspect);
2110                if (strcmp(suspect->path, sb->path))
2111                        *option |= OUTPUT_SHOW_NAME;
2112                num = strlen(suspect->path);
2113                if (longest_file < num)
2114                        longest_file = num;
2115                if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
2116                        suspect->commit->object.flags |= METAINFO_SHOWN;
2117                        get_commit_info(suspect->commit, &ci, 1);
2118                        if (*option & OUTPUT_SHOW_EMAIL)
2119                                num = utf8_strwidth(ci.author_mail.buf);
2120                        else
2121                                num = utf8_strwidth(ci.author.buf);
2122                        if (longest_author < num)
2123                                longest_author = num;
2124                }
2125                num = e->s_lno + e->num_lines;
2126                if (longest_src_lines < num)
2127                        longest_src_lines = num;
2128                num = e->lno + e->num_lines;
2129                if (longest_dst_lines < num)
2130                        longest_dst_lines = num;
2131                if (largest_score < ent_score(sb, e))
2132                        largest_score = ent_score(sb, e);
2133
2134                commit_info_destroy(&ci);
2135        }
2136        max_orig_digits = decimal_width(longest_src_lines);
2137        max_digits = decimal_width(longest_dst_lines);
2138        max_score_digits = decimal_width(largest_score);
2139
2140        if (compute_auto_abbrev)
2141                /* one more abbrev length is needed for the boundary commit */
2142                abbrev = auto_abbrev + 1;
2143}
2144
2145/*
2146 * For debugging -- origin is refcounted, and this asserts that
2147 * we do not underflow.
2148 */
2149static void sanity_check_refcnt(struct scoreboard *sb)
2150{
2151        int baa = 0;
2152        struct blame_entry *ent;
2153
2154        for (ent = sb->ent; ent; ent = ent->next) {
2155                /* Nobody should have zero or negative refcnt */
2156                if (ent->suspect->refcnt <= 0) {
2157                        fprintf(stderr, "%s in %s has negative refcnt %d\n",
2158                                ent->suspect->path,
2159                                sha1_to_hex(ent->suspect->commit->object.sha1),
2160                                ent->suspect->refcnt);
2161                        baa = 1;
2162                }
2163        }
2164        if (baa) {
2165                int opt = 0160;
2166                find_alignment(sb, &opt);
2167                output(sb, opt);
2168                die("Baa %d!", baa);
2169        }
2170}
2171
2172/*
2173 * Used for the command line parsing; check if the path exists
2174 * in the working tree.
2175 */
2176static int has_string_in_work_tree(const char *path)
2177{
2178        struct stat st;
2179        return !lstat(path, &st);
2180}
2181
2182static unsigned parse_score(const char *arg)
2183{
2184        char *end;
2185        unsigned long score = strtoul(arg, &end, 10);
2186        if (*end)
2187                return 0;
2188        return score;
2189}
2190
2191static const char *add_prefix(const char *prefix, const char *path)
2192{
2193        return prefix_path(prefix, prefix ? strlen(prefix) : 0, path);
2194}
2195
2196static int git_blame_config(const char *var, const char *value, void *cb)
2197{
2198        if (!strcmp(var, "blame.showroot")) {
2199                show_root = git_config_bool(var, value);
2200                return 0;
2201        }
2202        if (!strcmp(var, "blame.blankboundary")) {
2203                blank_boundary = git_config_bool(var, value);
2204                return 0;
2205        }
2206        if (!strcmp(var, "blame.date")) {
2207                if (!value)
2208                        return config_error_nonbool(var);
2209                blame_date_mode = parse_date_format(value);
2210                return 0;
2211        }
2212
2213        if (userdiff_config(var, value) < 0)
2214                return -1;
2215
2216        return git_default_config(var, value, cb);
2217}
2218
2219static void verify_working_tree_path(struct commit *work_tree, const char *path)
2220{
2221        struct commit_list *parents;
2222
2223        for (parents = work_tree->parents; parents; parents = parents->next) {
2224                const unsigned char *commit_sha1 = parents->item->object.sha1;
2225                unsigned char blob_sha1[20];
2226                unsigned mode;
2227
2228                if (!get_tree_entry(commit_sha1, path, blob_sha1, &mode) &&
2229                    sha1_object_info(blob_sha1, NULL) == OBJ_BLOB)
2230                        return;
2231        }
2232        die("no such path '%s' in HEAD", path);
2233}
2234
2235static struct commit_list **append_parent(struct commit_list **tail, const unsigned char *sha1)
2236{
2237        struct commit *parent;
2238
2239        parent = lookup_commit_reference(sha1);
2240        if (!parent)
2241                die("no such commit %s", sha1_to_hex(sha1));
2242        return &commit_list_insert(parent, tail)->next;
2243}
2244
2245static void append_merge_parents(struct commit_list **tail)
2246{
2247        int merge_head;
2248        const char *merge_head_file = git_path("MERGE_HEAD");
2249        struct strbuf line = STRBUF_INIT;
2250
2251        merge_head = open(merge_head_file, O_RDONLY);
2252        if (merge_head < 0) {
2253                if (errno == ENOENT)
2254                        return;
2255                die("cannot open '%s' for reading", merge_head_file);
2256        }
2257
2258        while (!strbuf_getwholeline_fd(&line, merge_head, '\n')) {
2259                unsigned char sha1[20];
2260                if (line.len < 40 || get_sha1_hex(line.buf, sha1))
2261                        die("unknown line in '%s': %s", merge_head_file, line.buf);
2262                tail = append_parent(tail, sha1);
2263        }
2264        close(merge_head);
2265        strbuf_release(&line);
2266}
2267
2268/*
2269 * Prepare a dummy commit that represents the work tree (or staged) item.
2270 * Note that annotating work tree item never works in the reverse.
2271 */
2272static struct commit *fake_working_tree_commit(struct diff_options *opt,
2273                                               const char *path,
2274                                               const char *contents_from)
2275{
2276        struct commit *commit;
2277        struct origin *origin;
2278        struct commit_list **parent_tail, *parent;
2279        unsigned char head_sha1[20];
2280        struct strbuf buf = STRBUF_INIT;
2281        const char *ident;
2282        time_t now;
2283        int size, len;
2284        struct cache_entry *ce;
2285        unsigned mode;
2286        struct strbuf msg = STRBUF_INIT;
2287
2288        time(&now);
2289        commit = xcalloc(1, sizeof(*commit));
2290        commit->object.parsed = 1;
2291        commit->date = now;
2292        commit->object.type = OBJ_COMMIT;
2293        parent_tail = &commit->parents;
2294
2295        if (!resolve_ref_unsafe("HEAD", head_sha1, 1, NULL))
2296                die("no such ref: HEAD");
2297
2298        parent_tail = append_parent(parent_tail, head_sha1);
2299        append_merge_parents(parent_tail);
2300        verify_working_tree_path(commit, path);
2301
2302        origin = make_origin(commit, path);
2303
2304        ident = fmt_ident("Not Committed Yet", "not.committed.yet", NULL, 0);
2305        strbuf_addstr(&msg, "tree 0000000000000000000000000000000000000000\n");
2306        for (parent = commit->parents; parent; parent = parent->next)
2307                strbuf_addf(&msg, "parent %s\n",
2308                            sha1_to_hex(parent->item->object.sha1));
2309        strbuf_addf(&msg,
2310                    "author %s\n"
2311                    "committer %s\n\n"
2312                    "Version of %s from %s\n",
2313                    ident, ident, path,
2314                    (!contents_from ? path :
2315                     (!strcmp(contents_from, "-") ? "standard input" : contents_from)));
2316        commit->buffer = strbuf_detach(&msg, NULL);
2317
2318        if (!contents_from || strcmp("-", contents_from)) {
2319                struct stat st;
2320                const char *read_from;
2321                char *buf_ptr;
2322                unsigned long buf_len;
2323
2324                if (contents_from) {
2325                        if (stat(contents_from, &st) < 0)
2326                                die_errno("Cannot stat '%s'", contents_from);
2327                        read_from = contents_from;
2328                }
2329                else {
2330                        if (lstat(path, &st) < 0)
2331                                die_errno("Cannot lstat '%s'", path);
2332                        read_from = path;
2333                }
2334                mode = canon_mode(st.st_mode);
2335
2336                switch (st.st_mode & S_IFMT) {
2337                case S_IFREG:
2338                        if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) &&
2339                            textconv_object(read_from, mode, null_sha1, 0, &buf_ptr, &buf_len))
2340                                strbuf_attach(&buf, buf_ptr, buf_len, buf_len + 1);
2341                        else if (strbuf_read_file(&buf, read_from, st.st_size) != st.st_size)
2342                                die_errno("cannot open or read '%s'", read_from);
2343                        break;
2344                case S_IFLNK:
2345                        if (strbuf_readlink(&buf, read_from, st.st_size) < 0)
2346                                die_errno("cannot readlink '%s'", read_from);
2347                        break;
2348                default:
2349                        die("unsupported file type %s", read_from);
2350                }
2351        }
2352        else {
2353                /* Reading from stdin */
2354                mode = 0;
2355                if (strbuf_read(&buf, 0, 0) < 0)
2356                        die_errno("failed to read from stdin");
2357        }
2358        origin->file.ptr = buf.buf;
2359        origin->file.size = buf.len;
2360        pretend_sha1_file(buf.buf, buf.len, OBJ_BLOB, origin->blob_sha1);
2361
2362        /*
2363         * Read the current index, replace the path entry with
2364         * origin->blob_sha1 without mucking with its mode or type
2365         * bits; we are not going to write this index out -- we just
2366         * want to run "diff-index --cached".
2367         */
2368        discard_cache();
2369        read_cache();
2370
2371        len = strlen(path);
2372        if (!mode) {
2373                int pos = cache_name_pos(path, len);
2374                if (0 <= pos)
2375                        mode = active_cache[pos]->ce_mode;
2376                else
2377                        /* Let's not bother reading from HEAD tree */
2378                        mode = S_IFREG | 0644;
2379        }
2380        size = cache_entry_size(len);
2381        ce = xcalloc(1, size);
2382        hashcpy(ce->sha1, origin->blob_sha1);
2383        memcpy(ce->name, path, len);
2384        ce->ce_flags = create_ce_flags(0);
2385        ce->ce_namelen = len;
2386        ce->ce_mode = create_ce_mode(mode);
2387        add_cache_entry(ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
2388
2389        /*
2390         * We are not going to write this out, so this does not matter
2391         * right now, but someday we might optimize diff-index --cached
2392         * with cache-tree information.
2393         */
2394        cache_tree_invalidate_path(active_cache_tree, path);
2395
2396        return commit;
2397}
2398
2399static const char *prepare_final(struct scoreboard *sb)
2400{
2401        int i;
2402        const char *final_commit_name = NULL;
2403        struct rev_info *revs = sb->revs;
2404
2405        /*
2406         * There must be one and only one positive commit in the
2407         * revs->pending array.
2408         */
2409        for (i = 0; i < revs->pending.nr; i++) {
2410                struct object *obj = revs->pending.objects[i].item;
2411                if (obj->flags & UNINTERESTING)
2412                        continue;
2413                while (obj->type == OBJ_TAG)
2414                        obj = deref_tag(obj, NULL, 0);
2415                if (obj->type != OBJ_COMMIT)
2416                        die("Non commit %s?", revs->pending.objects[i].name);
2417                if (sb->final)
2418                        die("More than one commit to dig from %s and %s?",
2419                            revs->pending.objects[i].name,
2420                            final_commit_name);
2421                sb->final = (struct commit *) obj;
2422                final_commit_name = revs->pending.objects[i].name;
2423        }
2424        return final_commit_name;
2425}
2426
2427static const char *prepare_initial(struct scoreboard *sb)
2428{
2429        int i;
2430        const char *final_commit_name = NULL;
2431        struct rev_info *revs = sb->revs;
2432
2433        /*
2434         * There must be one and only one negative commit, and it must be
2435         * the boundary.
2436         */
2437        for (i = 0; i < revs->pending.nr; i++) {
2438                struct object *obj = revs->pending.objects[i].item;
2439                if (!(obj->flags & UNINTERESTING))
2440                        continue;
2441                while (obj->type == OBJ_TAG)
2442                        obj = deref_tag(obj, NULL, 0);
2443                if (obj->type != OBJ_COMMIT)
2444                        die("Non commit %s?", revs->pending.objects[i].name);
2445                if (sb->final)
2446                        die("More than one commit to dig down to %s and %s?",
2447                            revs->pending.objects[i].name,
2448                            final_commit_name);
2449                sb->final = (struct commit *) obj;
2450                final_commit_name = revs->pending.objects[i].name;
2451        }
2452        if (!final_commit_name)
2453                die("No commit to dig down to?");
2454        return final_commit_name;
2455}
2456
2457static int blame_copy_callback(const struct option *option, const char *arg, int unset)
2458{
2459        int *opt = option->value;
2460
2461        /*
2462         * -C enables copy from removed files;
2463         * -C -C enables copy from existing files, but only
2464         *       when blaming a new file;
2465         * -C -C -C enables copy from existing files for
2466         *          everybody
2467         */
2468        if (*opt & PICKAXE_BLAME_COPY_HARDER)
2469                *opt |= PICKAXE_BLAME_COPY_HARDEST;
2470        if (*opt & PICKAXE_BLAME_COPY)
2471                *opt |= PICKAXE_BLAME_COPY_HARDER;
2472        *opt |= PICKAXE_BLAME_COPY | PICKAXE_BLAME_MOVE;
2473
2474        if (arg)
2475                blame_copy_score = parse_score(arg);
2476        return 0;
2477}
2478
2479static int blame_move_callback(const struct option *option, const char *arg, int unset)
2480{
2481        int *opt = option->value;
2482
2483        *opt |= PICKAXE_BLAME_MOVE;
2484
2485        if (arg)
2486                blame_move_score = parse_score(arg);
2487        return 0;
2488}
2489
2490int cmd_blame(int argc, const char **argv, const char *prefix)
2491{
2492        struct rev_info revs;
2493        const char *path;
2494        struct scoreboard sb;
2495        struct origin *o;
2496        struct blame_entry *ent = NULL;
2497        long dashdash_pos, lno;
2498        const char *final_commit_name = NULL;
2499        enum object_type type;
2500
2501        static struct string_list range_list;
2502        static int output_option = 0, opt = 0;
2503        static int show_stats = 0;
2504        static const char *revs_file = NULL;
2505        static const char *contents_from = NULL;
2506        static const struct option options[] = {
2507                OPT_BOOL(0, "incremental", &incremental, N_("Show blame entries as we find them, incrementally")),
2508                OPT_BOOL('b', NULL, &blank_boundary, N_("Show blank SHA-1 for boundary commits (Default: off)")),
2509                OPT_BOOL(0, "root", &show_root, N_("Do not treat root commits as boundaries (Default: off)")),
2510                OPT_BOOL(0, "show-stats", &show_stats, N_("Show work cost statistics")),
2511                OPT_BIT(0, "score-debug", &output_option, N_("Show output score for blame entries"), OUTPUT_SHOW_SCORE),
2512                OPT_BIT('f', "show-name", &output_option, N_("Show original filename (Default: auto)"), OUTPUT_SHOW_NAME),
2513                OPT_BIT('n', "show-number", &output_option, N_("Show original linenumber (Default: off)"), OUTPUT_SHOW_NUMBER),
2514                OPT_BIT('p', "porcelain", &output_option, N_("Show in a format designed for machine consumption"), OUTPUT_PORCELAIN),
2515                OPT_BIT(0, "line-porcelain", &output_option, N_("Show porcelain format with per-line commit information"), OUTPUT_PORCELAIN|OUTPUT_LINE_PORCELAIN),
2516                OPT_BIT('c', NULL, &output_option, N_("Use the same output mode as git-annotate (Default: off)"), OUTPUT_ANNOTATE_COMPAT),
2517                OPT_BIT('t', NULL, &output_option, N_("Show raw timestamp (Default: off)"), OUTPUT_RAW_TIMESTAMP),
2518                OPT_BIT('l', NULL, &output_option, N_("Show long commit SHA1 (Default: off)"), OUTPUT_LONG_OBJECT_NAME),
2519                OPT_BIT('s', NULL, &output_option, N_("Suppress author name and timestamp (Default: off)"), OUTPUT_NO_AUTHOR),
2520                OPT_BIT('e', "show-email", &output_option, N_("Show author email instead of name (Default: off)"), OUTPUT_SHOW_EMAIL),
2521                OPT_BIT('w', NULL, &xdl_opts, N_("Ignore whitespace differences"), XDF_IGNORE_WHITESPACE),
2522                OPT_BIT(0, "minimal", &xdl_opts, N_("Spend extra cycles to find better match"), XDF_NEED_MINIMAL),
2523                OPT_STRING('S', NULL, &revs_file, N_("file"), N_("Use revisions from <file> instead of calling git-rev-list")),
2524                OPT_STRING(0, "contents", &contents_from, N_("file"), N_("Use <file>'s contents as the final image")),
2525                { OPTION_CALLBACK, 'C', NULL, &opt, N_("score"), N_("Find line copies within and across files"), PARSE_OPT_OPTARG, blame_copy_callback },
2526                { OPTION_CALLBACK, 'M', NULL, &opt, N_("score"), N_("Find line movements within and across files"), PARSE_OPT_OPTARG, blame_move_callback },
2527                OPT_STRING_LIST('L', NULL, &range_list, N_("n,m"), N_("Process only line range n,m, counting from 1")),
2528                OPT__ABBREV(&abbrev),
2529                OPT_END()
2530        };
2531
2532        struct parse_opt_ctx_t ctx;
2533        int cmd_is_annotate = !strcmp(argv[0], "annotate");
2534        struct range_set ranges;
2535        unsigned int range_i;
2536        long anchor;
2537
2538        git_config(git_blame_config, NULL);
2539        init_revisions(&revs, NULL);
2540        revs.date_mode = blame_date_mode;
2541        DIFF_OPT_SET(&revs.diffopt, ALLOW_TEXTCONV);
2542        DIFF_OPT_SET(&revs.diffopt, FOLLOW_RENAMES);
2543
2544        save_commit_buffer = 0;
2545        dashdash_pos = 0;
2546
2547        parse_options_start(&ctx, argc, argv, prefix, options,
2548                            PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0);
2549        for (;;) {
2550                switch (parse_options_step(&ctx, options, blame_opt_usage)) {
2551                case PARSE_OPT_HELP:
2552                        exit(129);
2553                case PARSE_OPT_DONE:
2554                        if (ctx.argv[0])
2555                                dashdash_pos = ctx.cpidx;
2556                        goto parse_done;
2557                }
2558
2559                if (!strcmp(ctx.argv[0], "--reverse")) {
2560                        ctx.argv[0] = "--children";
2561                        reverse = 1;
2562                }
2563                parse_revision_opt(&revs, &ctx, options, blame_opt_usage);
2564        }
2565parse_done:
2566        no_whole_file_rename = !DIFF_OPT_TST(&revs.diffopt, FOLLOW_RENAMES);
2567        DIFF_OPT_CLR(&revs.diffopt, FOLLOW_RENAMES);
2568        argc = parse_options_end(&ctx);
2569
2570        if (0 < abbrev)
2571                /* one more abbrev length is needed for the boundary commit */
2572                abbrev++;
2573
2574        if (revs_file && read_ancestry(revs_file))
2575                die_errno("reading graft file '%s' failed", revs_file);
2576
2577        if (cmd_is_annotate) {
2578                output_option |= OUTPUT_ANNOTATE_COMPAT;
2579                blame_date_mode = DATE_ISO8601;
2580        } else {
2581                blame_date_mode = revs.date_mode;
2582        }
2583
2584        /* The maximum width used to show the dates */
2585        switch (blame_date_mode) {
2586        case DATE_RFC2822:
2587                blame_date_width = sizeof("Thu, 19 Oct 2006 16:00:04 -0700");
2588                break;
2589        case DATE_ISO8601:
2590                blame_date_width = sizeof("2006-10-19 16:00:04 -0700");
2591                break;
2592        case DATE_RAW:
2593                blame_date_width = sizeof("1161298804 -0700");
2594                break;
2595        case DATE_SHORT:
2596                blame_date_width = sizeof("2006-10-19");
2597                break;
2598        case DATE_RELATIVE:
2599                /* TRANSLATORS: This string is used to tell us the maximum
2600                   display width for a relative timestamp in "git blame"
2601                   output.  For C locale, "4 years, 11 months ago", which
2602                   takes 22 places, is the longest among various forms of
2603                   relative timestamps, but your language may need more or
2604                   fewer display columns. */
2605                blame_date_width = utf8_strwidth(_("4 years, 11 months ago")) + 1; /* add the null */
2606                break;
2607        case DATE_LOCAL:
2608        case DATE_NORMAL:
2609                blame_date_width = sizeof("Thu Oct 19 16:00:04 2006 -0700");
2610                break;
2611        }
2612        blame_date_width -= 1; /* strip the null */
2613
2614        if (DIFF_OPT_TST(&revs.diffopt, FIND_COPIES_HARDER))
2615                opt |= (PICKAXE_BLAME_COPY | PICKAXE_BLAME_MOVE |
2616                        PICKAXE_BLAME_COPY_HARDER);
2617
2618        if (!blame_move_score)
2619                blame_move_score = BLAME_DEFAULT_MOVE_SCORE;
2620        if (!blame_copy_score)
2621                blame_copy_score = BLAME_DEFAULT_COPY_SCORE;
2622
2623        /*
2624         * We have collected options unknown to us in argv[1..unk]
2625         * which are to be passed to revision machinery if we are
2626         * going to do the "bottom" processing.
2627         *
2628         * The remaining are:
2629         *
2630         * (1) if dashdash_pos != 0, it is either
2631         *     "blame [revisions] -- <path>" or
2632         *     "blame -- <path> <rev>"
2633         *
2634         * (2) otherwise, it is one of the two:
2635         *     "blame [revisions] <path>"
2636         *     "blame <path> <rev>"
2637         *
2638         * Note that we must strip out <path> from the arguments: we do not
2639         * want the path pruning but we may want "bottom" processing.
2640         */
2641        if (dashdash_pos) {
2642                switch (argc - dashdash_pos - 1) {
2643                case 2: /* (1b) */
2644                        if (argc != 4)
2645                                usage_with_options(blame_opt_usage, options);
2646                        /* reorder for the new way: <rev> -- <path> */
2647                        argv[1] = argv[3];
2648                        argv[3] = argv[2];
2649                        argv[2] = "--";
2650                        /* FALLTHROUGH */
2651                case 1: /* (1a) */
2652                        path = add_prefix(prefix, argv[--argc]);
2653                        argv[argc] = NULL;
2654                        break;
2655                default:
2656                        usage_with_options(blame_opt_usage, options);
2657                }
2658        } else {
2659                if (argc < 2)
2660                        usage_with_options(blame_opt_usage, options);
2661                path = add_prefix(prefix, argv[argc - 1]);
2662                if (argc == 3 && !has_string_in_work_tree(path)) { /* (2b) */
2663                        path = add_prefix(prefix, argv[1]);
2664                        argv[1] = argv[2];
2665                }
2666                argv[argc - 1] = "--";
2667
2668                setup_work_tree();
2669                if (!has_string_in_work_tree(path))
2670                        die_errno("cannot stat path '%s'", path);
2671        }
2672
2673        revs.disable_stdin = 1;
2674        setup_revisions(argc, argv, &revs, NULL);
2675        memset(&sb, 0, sizeof(sb));
2676
2677        sb.revs = &revs;
2678        if (!reverse) {
2679                final_commit_name = prepare_final(&sb);
2680                sb.commits.compare = compare_commits_by_commit_date;
2681        }
2682        else if (contents_from)
2683                die("--contents and --children do not blend well.");
2684        else {
2685                final_commit_name = prepare_initial(&sb);
2686                sb.commits.compare = compare_commits_by_reverse_commit_date;
2687        }
2688
2689        if (!sb.final) {
2690                /*
2691                 * "--not A B -- path" without anything positive;
2692                 * do not default to HEAD, but use the working tree
2693                 * or "--contents".
2694                 */
2695                setup_work_tree();
2696                sb.final = fake_working_tree_commit(&sb.revs->diffopt,
2697                                                    path, contents_from);
2698                add_pending_object(&revs, &(sb.final->object), ":");
2699        }
2700        else if (contents_from)
2701                die("Cannot use --contents with final commit object name");
2702
2703        /*
2704         * If we have bottom, this will mark the ancestors of the
2705         * bottom commits we would reach while traversing as
2706         * uninteresting.
2707         */
2708        if (prepare_revision_walk(&revs))
2709                die("revision walk setup failed");
2710
2711        if (is_null_sha1(sb.final->object.sha1)) {
2712                char *buf;
2713                o = sb.final->util;
2714                buf = xmalloc(o->file.size + 1);
2715                memcpy(buf, o->file.ptr, o->file.size + 1);
2716                sb.final_buf = buf;
2717                sb.final_buf_size = o->file.size;
2718        }
2719        else {
2720                o = get_origin(&sb, sb.final, path);
2721                if (fill_blob_sha1_and_mode(o))
2722                        die("no such path %s in %s", path, final_commit_name);
2723
2724                if (DIFF_OPT_TST(&sb.revs->diffopt, ALLOW_TEXTCONV) &&
2725                    textconv_object(path, o->mode, o->blob_sha1, 1, (char **) &sb.final_buf,
2726                                    &sb.final_buf_size))
2727                        ;
2728                else
2729                        sb.final_buf = read_sha1_file(o->blob_sha1, &type,
2730                                                      &sb.final_buf_size);
2731
2732                if (!sb.final_buf)
2733                        die("Cannot read blob %s for path %s",
2734                            sha1_to_hex(o->blob_sha1),
2735                            path);
2736        }
2737        num_read_blob++;
2738        lno = prepare_lines(&sb);
2739
2740        if (lno && !range_list.nr)
2741                string_list_append(&range_list, xstrdup("1"));
2742
2743        anchor = 1;
2744        range_set_init(&ranges, range_list.nr);
2745        for (range_i = 0; range_i < range_list.nr; ++range_i) {
2746                long bottom, top;
2747                if (parse_range_arg(range_list.items[range_i].string,
2748                                    nth_line_cb, &sb, lno, anchor,
2749                                    &bottom, &top, sb.path))
2750                        usage(blame_usage);
2751                if (lno < top || ((lno || bottom) && lno < bottom))
2752                        die("file %s has only %lu lines", path, lno);
2753                if (bottom < 1)
2754                        bottom = 1;
2755                if (top < 1)
2756                        top = lno;
2757                bottom--;
2758                range_set_append_unsafe(&ranges, bottom, top);
2759                anchor = top + 1;
2760        }
2761        sort_and_merge_range_set(&ranges);
2762
2763        for (range_i = ranges.nr; range_i > 0; --range_i) {
2764                const struct range *r = &ranges.ranges[range_i - 1];
2765                long bottom = r->start;
2766                long top = r->end;
2767                struct blame_entry *next = ent;
2768                ent = xcalloc(1, sizeof(*ent));
2769                ent->lno = bottom;
2770                ent->num_lines = top - bottom;
2771                ent->suspect = o;
2772                ent->s_lno = bottom;
2773                ent->next = next;
2774                origin_incref(o);
2775        }
2776
2777        o->suspects = ent;
2778        prio_queue_put(&sb.commits, o->commit);
2779
2780        origin_decref(o);
2781
2782        range_set_release(&ranges);
2783        string_list_clear(&range_list, 0);
2784
2785        sb.ent = NULL;
2786        sb.path = path;
2787
2788        read_mailmap(&mailmap, NULL);
2789
2790        if (!incremental)
2791                setup_pager();
2792
2793        assign_blame(&sb, opt);
2794
2795        if (incremental)
2796                return 0;
2797
2798        sb.ent = blame_sort(sb.ent, compare_blame_final);
2799
2800        coalesce(&sb);
2801
2802        if (!(output_option & OUTPUT_PORCELAIN))
2803                find_alignment(&sb, &output_option);
2804
2805        output(&sb, output_option);
2806        free((void *)sb.final_buf);
2807        for (ent = sb.ent; ent; ) {
2808                struct blame_entry *e = ent->next;
2809                free(ent);
2810                ent = e;
2811        }
2812
2813        if (show_stats) {
2814                printf("num read blob: %d\n", num_read_blob);
2815                printf("num get patch: %d\n", num_get_patch);
2816                printf("num commits: %d\n", num_commits);
2817        }
2818        return 0;
2819}