builtin-apply.con commit git-apply --reverse: simplify reverse option. (f686d03)
   1/*
   2 * apply.c
   3 *
   4 * Copyright (C) Linus Torvalds, 2005
   5 *
   6 * This applies patches on top of some (arbitrary) version of the SCM.
   7 *
   8 */
   9#include <fnmatch.h>
  10#include "cache.h"
  11#include "cache-tree.h"
  12#include "quote.h"
  13#include "blob.h"
  14#include "delta.h"
  15#include "builtin.h"
  16
  17/*
  18 *  --check turns on checking that the working tree matches the
  19 *    files that are being modified, but doesn't apply the patch
  20 *  --stat does just a diffstat, and doesn't actually apply
  21 *  --numstat does numeric diffstat, and doesn't actually apply
  22 *  --index-info shows the old and new index info for paths if available.
  23 *  --index updates the cache as well.
  24 *  --cached updates only the cache without ever touching the working tree.
  25 */
  26static const char *prefix;
  27static int prefix_length = -1;
  28static int newfd = -1;
  29
  30static int p_value = 1;
  31static int allow_binary_replacement = 0;
  32static int check_index = 0;
  33static int write_index = 0;
  34static int cached = 0;
  35static int diffstat = 0;
  36static int numstat = 0;
  37static int summary = 0;
  38static int check = 0;
  39static int apply = 1;
  40static int apply_in_reverse = 0;
  41static int no_add = 0;
  42static int show_index_info = 0;
  43static int line_termination = '\n';
  44static unsigned long p_context = -1;
  45static const char apply_usage[] =
  46"git-apply [--stat] [--numstat] [--summary] [--check] [--index] [--cached] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [-z] [-pNUM] [-CNUM] [--whitespace=<nowarn|warn|error|error-all|strip>] <patch>...";
  47
  48static enum whitespace_eol {
  49        nowarn_whitespace,
  50        warn_on_whitespace,
  51        error_on_whitespace,
  52        strip_whitespace,
  53} new_whitespace = warn_on_whitespace;
  54static int whitespace_error = 0;
  55static int squelch_whitespace_errors = 5;
  56static int applied_after_stripping = 0;
  57static const char *patch_input_file = NULL;
  58
  59static void parse_whitespace_option(const char *option)
  60{
  61        if (!option) {
  62                new_whitespace = warn_on_whitespace;
  63                return;
  64        }
  65        if (!strcmp(option, "warn")) {
  66                new_whitespace = warn_on_whitespace;
  67                return;
  68        }
  69        if (!strcmp(option, "nowarn")) {
  70                new_whitespace = nowarn_whitespace;
  71                return;
  72        }
  73        if (!strcmp(option, "error")) {
  74                new_whitespace = error_on_whitespace;
  75                return;
  76        }
  77        if (!strcmp(option, "error-all")) {
  78                new_whitespace = error_on_whitespace;
  79                squelch_whitespace_errors = 0;
  80                return;
  81        }
  82        if (!strcmp(option, "strip")) {
  83                new_whitespace = strip_whitespace;
  84                return;
  85        }
  86        die("unrecognized whitespace option '%s'", option);
  87}
  88
  89static void set_default_whitespace_mode(const char *whitespace_option)
  90{
  91        if (!whitespace_option && !apply_default_whitespace) {
  92                new_whitespace = (apply
  93                                  ? warn_on_whitespace
  94                                  : nowarn_whitespace);
  95        }
  96}
  97
  98/*
  99 * For "diff-stat" like behaviour, we keep track of the biggest change
 100 * we've seen, and the longest filename. That allows us to do simple
 101 * scaling.
 102 */
 103static int max_change, max_len;
 104
 105/*
 106 * Various "current state", notably line numbers and what
 107 * file (and how) we're patching right now.. The "is_xxxx"
 108 * things are flags, where -1 means "don't know yet".
 109 */
 110static int linenr = 1;
 111
 112struct fragment {
 113        unsigned long leading, trailing;
 114        unsigned long oldpos, oldlines;
 115        unsigned long newpos, newlines;
 116        const char *patch;
 117        int size;
 118        struct fragment *next;
 119};
 120
 121struct patch {
 122        char *new_name, *old_name, *def_name;
 123        unsigned int old_mode, new_mode;
 124        int is_rename, is_copy, is_new, is_delete, is_binary;
 125#define BINARY_DELTA_DEFLATED 1
 126#define BINARY_LITERAL_DEFLATED 2
 127        unsigned long deflate_origlen;
 128        int lines_added, lines_deleted;
 129        int score;
 130        int inaccurate_eof:1;
 131        struct fragment *fragments;
 132        char *result;
 133        unsigned long resultsize;
 134        char old_sha1_prefix[41];
 135        char new_sha1_prefix[41];
 136        struct patch *next;
 137};
 138
 139#define CHUNKSIZE (8192)
 140#define SLOP (16)
 141
 142static void *read_patch_file(int fd, unsigned long *sizep)
 143{
 144        unsigned long size = 0, alloc = CHUNKSIZE;
 145        void *buffer = xmalloc(alloc);
 146
 147        for (;;) {
 148                int nr = alloc - size;
 149                if (nr < 1024) {
 150                        alloc += CHUNKSIZE;
 151                        buffer = xrealloc(buffer, alloc);
 152                        nr = alloc - size;
 153                }
 154                nr = xread(fd, (char *) buffer + size, nr);
 155                if (!nr)
 156                        break;
 157                if (nr < 0)
 158                        die("git-apply: read returned %s", strerror(errno));
 159                size += nr;
 160        }
 161        *sizep = size;
 162
 163        /*
 164         * Make sure that we have some slop in the buffer
 165         * so that we can do speculative "memcmp" etc, and
 166         * see to it that it is NUL-filled.
 167         */
 168        if (alloc < size + SLOP)
 169                buffer = xrealloc(buffer, size + SLOP);
 170        memset((char *) buffer + size, 0, SLOP);
 171        return buffer;
 172}
 173
 174static unsigned long linelen(const char *buffer, unsigned long size)
 175{
 176        unsigned long len = 0;
 177        while (size--) {
 178                len++;
 179                if (*buffer++ == '\n')
 180                        break;
 181        }
 182        return len;
 183}
 184
 185static int is_dev_null(const char *str)
 186{
 187        return !memcmp("/dev/null", str, 9) && isspace(str[9]);
 188}
 189
 190#define TERM_SPACE      1
 191#define TERM_TAB        2
 192
 193static int name_terminate(const char *name, int namelen, int c, int terminate)
 194{
 195        if (c == ' ' && !(terminate & TERM_SPACE))
 196                return 0;
 197        if (c == '\t' && !(terminate & TERM_TAB))
 198                return 0;
 199
 200        return 1;
 201}
 202
 203static char * find_name(const char *line, char *def, int p_value, int terminate)
 204{
 205        int len;
 206        const char *start = line;
 207        char *name;
 208
 209        if (*line == '"') {
 210                /* Proposed "new-style" GNU patch/diff format; see
 211                 * http://marc.theaimsgroup.com/?l=git&m=112927316408690&w=2
 212                 */
 213                name = unquote_c_style(line, NULL);
 214                if (name) {
 215                        char *cp = name;
 216                        while (p_value) {
 217                                cp = strchr(name, '/');
 218                                if (!cp)
 219                                        break;
 220                                cp++;
 221                                p_value--;
 222                        }
 223                        if (cp) {
 224                                /* name can later be freed, so we need
 225                                 * to memmove, not just return cp
 226                                 */
 227                                memmove(name, cp, strlen(cp) + 1);
 228                                free(def);
 229                                return name;
 230                        }
 231                        else {
 232                                free(name);
 233                                name = NULL;
 234                        }
 235                }
 236        }
 237
 238        for (;;) {
 239                char c = *line;
 240
 241                if (isspace(c)) {
 242                        if (c == '\n')
 243                                break;
 244                        if (name_terminate(start, line-start, c, terminate))
 245                                break;
 246                }
 247                line++;
 248                if (c == '/' && !--p_value)
 249                        start = line;
 250        }
 251        if (!start)
 252                return def;
 253        len = line - start;
 254        if (!len)
 255                return def;
 256
 257        /*
 258         * Generally we prefer the shorter name, especially
 259         * if the other one is just a variation of that with
 260         * something else tacked on to the end (ie "file.orig"
 261         * or "file~").
 262         */
 263        if (def) {
 264                int deflen = strlen(def);
 265                if (deflen < len && !strncmp(start, def, deflen))
 266                        return def;
 267        }
 268
 269        name = xmalloc(len + 1);
 270        memcpy(name, start, len);
 271        name[len] = 0;
 272        free(def);
 273        return name;
 274}
 275
 276/*
 277 * Get the name etc info from the --/+++ lines of a traditional patch header
 278 *
 279 * NOTE! This hardcodes "-p1" behaviour in filename detection.
 280 *
 281 * FIXME! The end-of-filename heuristics are kind of screwy. For existing
 282 * files, we can happily check the index for a match, but for creating a
 283 * new file we should try to match whatever "patch" does. I have no idea.
 284 */
 285static void parse_traditional_patch(const char *first, const char *second, struct patch *patch)
 286{
 287        char *name;
 288
 289        first += 4;     /* skip "--- " */
 290        second += 4;    /* skip "+++ " */
 291        if (is_dev_null(first)) {
 292                patch->is_new = 1;
 293                patch->is_delete = 0;
 294                name = find_name(second, NULL, p_value, TERM_SPACE | TERM_TAB);
 295                patch->new_name = name;
 296        } else if (is_dev_null(second)) {
 297                patch->is_new = 0;
 298                patch->is_delete = 1;
 299                name = find_name(first, NULL, p_value, TERM_SPACE | TERM_TAB);
 300                patch->old_name = name;
 301        } else {
 302                name = find_name(first, NULL, p_value, TERM_SPACE | TERM_TAB);
 303                name = find_name(second, name, p_value, TERM_SPACE | TERM_TAB);
 304                patch->old_name = patch->new_name = name;
 305        }
 306        if (!name)
 307                die("unable to find filename in patch at line %d", linenr);
 308}
 309
 310static int gitdiff_hdrend(const char *line, struct patch *patch)
 311{
 312        return -1;
 313}
 314
 315/*
 316 * We're anal about diff header consistency, to make
 317 * sure that we don't end up having strange ambiguous
 318 * patches floating around.
 319 *
 320 * As a result, gitdiff_{old|new}name() will check
 321 * their names against any previous information, just
 322 * to make sure..
 323 */
 324static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name, const char *oldnew)
 325{
 326        if (!orig_name && !isnull)
 327                return find_name(line, NULL, 1, 0);
 328
 329        if (orig_name) {
 330                int len;
 331                const char *name;
 332                char *another;
 333                name = orig_name;
 334                len = strlen(name);
 335                if (isnull)
 336                        die("git-apply: bad git-diff - expected /dev/null, got %s on line %d", name, linenr);
 337                another = find_name(line, NULL, 1, 0);
 338                if (!another || memcmp(another, name, len))
 339                        die("git-apply: bad git-diff - inconsistent %s filename on line %d", oldnew, linenr);
 340                free(another);
 341                return orig_name;
 342        }
 343        else {
 344                /* expect "/dev/null" */
 345                if (memcmp("/dev/null", line, 9) || line[9] != '\n')
 346                        die("git-apply: bad git-diff - expected /dev/null on line %d", linenr);
 347                return NULL;
 348        }
 349}
 350
 351static int gitdiff_oldname(const char *line, struct patch *patch)
 352{
 353        patch->old_name = gitdiff_verify_name(line, patch->is_new, patch->old_name, "old");
 354        return 0;
 355}
 356
 357static int gitdiff_newname(const char *line, struct patch *patch)
 358{
 359        patch->new_name = gitdiff_verify_name(line, patch->is_delete, patch->new_name, "new");
 360        return 0;
 361}
 362
 363static int gitdiff_oldmode(const char *line, struct patch *patch)
 364{
 365        patch->old_mode = strtoul(line, NULL, 8);
 366        return 0;
 367}
 368
 369static int gitdiff_newmode(const char *line, struct patch *patch)
 370{
 371        patch->new_mode = strtoul(line, NULL, 8);
 372        return 0;
 373}
 374
 375static int gitdiff_delete(const char *line, struct patch *patch)
 376{
 377        patch->is_delete = 1;
 378        patch->old_name = patch->def_name;
 379        return gitdiff_oldmode(line, patch);
 380}
 381
 382static int gitdiff_newfile(const char *line, struct patch *patch)
 383{
 384        patch->is_new = 1;
 385        patch->new_name = patch->def_name;
 386        return gitdiff_newmode(line, patch);
 387}
 388
 389static int gitdiff_copysrc(const char *line, struct patch *patch)
 390{
 391        patch->is_copy = 1;
 392        patch->old_name = find_name(line, NULL, 0, 0);
 393        return 0;
 394}
 395
 396static int gitdiff_copydst(const char *line, struct patch *patch)
 397{
 398        patch->is_copy = 1;
 399        patch->new_name = find_name(line, NULL, 0, 0);
 400        return 0;
 401}
 402
 403static int gitdiff_renamesrc(const char *line, struct patch *patch)
 404{
 405        patch->is_rename = 1;
 406        patch->old_name = find_name(line, NULL, 0, 0);
 407        return 0;
 408}
 409
 410static int gitdiff_renamedst(const char *line, struct patch *patch)
 411{
 412        patch->is_rename = 1;
 413        patch->new_name = find_name(line, NULL, 0, 0);
 414        return 0;
 415}
 416
 417static int gitdiff_similarity(const char *line, struct patch *patch)
 418{
 419        if ((patch->score = strtoul(line, NULL, 10)) == ULONG_MAX)
 420                patch->score = 0;
 421        return 0;
 422}
 423
 424static int gitdiff_dissimilarity(const char *line, struct patch *patch)
 425{
 426        if ((patch->score = strtoul(line, NULL, 10)) == ULONG_MAX)
 427                patch->score = 0;
 428        return 0;
 429}
 430
 431static int gitdiff_index(const char *line, struct patch *patch)
 432{
 433        /* index line is N hexadecimal, "..", N hexadecimal,
 434         * and optional space with octal mode.
 435         */
 436        const char *ptr, *eol;
 437        int len;
 438
 439        ptr = strchr(line, '.');
 440        if (!ptr || ptr[1] != '.' || 40 < ptr - line)
 441                return 0;
 442        len = ptr - line;
 443        memcpy(patch->old_sha1_prefix, line, len);
 444        patch->old_sha1_prefix[len] = 0;
 445
 446        line = ptr + 2;
 447        ptr = strchr(line, ' ');
 448        eol = strchr(line, '\n');
 449
 450        if (!ptr || eol < ptr)
 451                ptr = eol;
 452        len = ptr - line;
 453
 454        if (40 < len)
 455                return 0;
 456        memcpy(patch->new_sha1_prefix, line, len);
 457        patch->new_sha1_prefix[len] = 0;
 458        if (*ptr == ' ')
 459                patch->new_mode = patch->old_mode = strtoul(ptr+1, NULL, 8);
 460        return 0;
 461}
 462
 463/*
 464 * This is normal for a diff that doesn't change anything: we'll fall through
 465 * into the next diff. Tell the parser to break out.
 466 */
 467static int gitdiff_unrecognized(const char *line, struct patch *patch)
 468{
 469        return -1;
 470}
 471
 472static const char *stop_at_slash(const char *line, int llen)
 473{
 474        int i;
 475
 476        for (i = 0; i < llen; i++) {
 477                int ch = line[i];
 478                if (ch == '/')
 479                        return line + i;
 480        }
 481        return NULL;
 482}
 483
 484/* This is to extract the same name that appears on "diff --git"
 485 * line.  We do not find and return anything if it is a rename
 486 * patch, and it is OK because we will find the name elsewhere.
 487 * We need to reliably find name only when it is mode-change only,
 488 * creation or deletion of an empty file.  In any of these cases,
 489 * both sides are the same name under a/ and b/ respectively.
 490 */
 491static char *git_header_name(char *line, int llen)
 492{
 493        int len;
 494        const char *name;
 495        const char *second = NULL;
 496
 497        line += strlen("diff --git ");
 498        llen -= strlen("diff --git ");
 499
 500        if (*line == '"') {
 501                const char *cp;
 502                char *first = unquote_c_style(line, &second);
 503                if (!first)
 504                        return NULL;
 505
 506                /* advance to the first slash */
 507                cp = stop_at_slash(first, strlen(first));
 508                if (!cp || cp == first) {
 509                        /* we do not accept absolute paths */
 510                free_first_and_fail:
 511                        free(first);
 512                        return NULL;
 513                }
 514                len = strlen(cp+1);
 515                memmove(first, cp+1, len+1); /* including NUL */
 516
 517                /* second points at one past closing dq of name.
 518                 * find the second name.
 519                 */
 520                while ((second < line + llen) && isspace(*second))
 521                        second++;
 522
 523                if (line + llen <= second)
 524                        goto free_first_and_fail;
 525                if (*second == '"') {
 526                        char *sp = unquote_c_style(second, NULL);
 527                        if (!sp)
 528                                goto free_first_and_fail;
 529                        cp = stop_at_slash(sp, strlen(sp));
 530                        if (!cp || cp == sp) {
 531                        free_both_and_fail:
 532                                free(sp);
 533                                goto free_first_and_fail;
 534                        }
 535                        /* They must match, otherwise ignore */
 536                        if (strcmp(cp+1, first))
 537                                goto free_both_and_fail;
 538                        free(sp);
 539                        return first;
 540                }
 541
 542                /* unquoted second */
 543                cp = stop_at_slash(second, line + llen - second);
 544                if (!cp || cp == second)
 545                        goto free_first_and_fail;
 546                cp++;
 547                if (line + llen - cp != len + 1 ||
 548                    memcmp(first, cp, len))
 549                        goto free_first_and_fail;
 550                return first;
 551        }
 552
 553        /* unquoted first name */
 554        name = stop_at_slash(line, llen);
 555        if (!name || name == line)
 556                return NULL;
 557
 558        name++;
 559
 560        /* since the first name is unquoted, a dq if exists must be
 561         * the beginning of the second name.
 562         */
 563        for (second = name; second < line + llen; second++) {
 564                if (*second == '"') {
 565                        const char *cp = second;
 566                        const char *np;
 567                        char *sp = unquote_c_style(second, NULL);
 568
 569                        if (!sp)
 570                                return NULL;
 571                        np = stop_at_slash(sp, strlen(sp));
 572                        if (!np || np == sp) {
 573                        free_second_and_fail:
 574                                free(sp);
 575                                return NULL;
 576                        }
 577                        np++;
 578                        len = strlen(np);
 579                        if (len < cp - name &&
 580                            !strncmp(np, name, len) &&
 581                            isspace(name[len])) {
 582                                /* Good */
 583                                memmove(sp, np, len + 1);
 584                                return sp;
 585                        }
 586                        goto free_second_and_fail;
 587                }
 588        }
 589
 590        /*
 591         * Accept a name only if it shows up twice, exactly the same
 592         * form.
 593         */
 594        for (len = 0 ; ; len++) {
 595                char c = name[len];
 596
 597                switch (c) {
 598                default:
 599                        continue;
 600                case '\n':
 601                        return NULL;
 602                case '\t': case ' ':
 603                        second = name+len;
 604                        for (;;) {
 605                                char c = *second++;
 606                                if (c == '\n')
 607                                        return NULL;
 608                                if (c == '/')
 609                                        break;
 610                        }
 611                        if (second[len] == '\n' && !memcmp(name, second, len)) {
 612                                char *ret = xmalloc(len + 1);
 613                                memcpy(ret, name, len);
 614                                ret[len] = 0;
 615                                return ret;
 616                        }
 617                }
 618        }
 619        return NULL;
 620}
 621
 622/* Verify that we recognize the lines following a git header */
 623static int parse_git_header(char *line, int len, unsigned int size, struct patch *patch)
 624{
 625        unsigned long offset;
 626
 627        /* A git diff has explicit new/delete information, so we don't guess */
 628        patch->is_new = 0;
 629        patch->is_delete = 0;
 630
 631        /*
 632         * Some things may not have the old name in the
 633         * rest of the headers anywhere (pure mode changes,
 634         * or removing or adding empty files), so we get
 635         * the default name from the header.
 636         */
 637        patch->def_name = git_header_name(line, len);
 638
 639        line += len;
 640        size -= len;
 641        linenr++;
 642        for (offset = len ; size > 0 ; offset += len, size -= len, line += len, linenr++) {
 643                static const struct opentry {
 644                        const char *str;
 645                        int (*fn)(const char *, struct patch *);
 646                } optable[] = {
 647                        { "@@ -", gitdiff_hdrend },
 648                        { "--- ", gitdiff_oldname },
 649                        { "+++ ", gitdiff_newname },
 650                        { "old mode ", gitdiff_oldmode },
 651                        { "new mode ", gitdiff_newmode },
 652                        { "deleted file mode ", gitdiff_delete },
 653                        { "new file mode ", gitdiff_newfile },
 654                        { "copy from ", gitdiff_copysrc },
 655                        { "copy to ", gitdiff_copydst },
 656                        { "rename old ", gitdiff_renamesrc },
 657                        { "rename new ", gitdiff_renamedst },
 658                        { "rename from ", gitdiff_renamesrc },
 659                        { "rename to ", gitdiff_renamedst },
 660                        { "similarity index ", gitdiff_similarity },
 661                        { "dissimilarity index ", gitdiff_dissimilarity },
 662                        { "index ", gitdiff_index },
 663                        { "", gitdiff_unrecognized },
 664                };
 665                int i;
 666
 667                len = linelen(line, size);
 668                if (!len || line[len-1] != '\n')
 669                        break;
 670                for (i = 0; i < ARRAY_SIZE(optable); i++) {
 671                        const struct opentry *p = optable + i;
 672                        int oplen = strlen(p->str);
 673                        if (len < oplen || memcmp(p->str, line, oplen))
 674                                continue;
 675                        if (p->fn(line + oplen, patch) < 0)
 676                                return offset;
 677                        break;
 678                }
 679        }
 680
 681        return offset;
 682}
 683
 684static int parse_num(const char *line, unsigned long *p)
 685{
 686        char *ptr;
 687
 688        if (!isdigit(*line))
 689                return 0;
 690        *p = strtoul(line, &ptr, 10);
 691        return ptr - line;
 692}
 693
 694static int parse_range(const char *line, int len, int offset, const char *expect,
 695                        unsigned long *p1, unsigned long *p2)
 696{
 697        int digits, ex;
 698
 699        if (offset < 0 || offset >= len)
 700                return -1;
 701        line += offset;
 702        len -= offset;
 703
 704        digits = parse_num(line, p1);
 705        if (!digits)
 706                return -1;
 707
 708        offset += digits;
 709        line += digits;
 710        len -= digits;
 711
 712        *p2 = 1;
 713        if (*line == ',') {
 714                digits = parse_num(line+1, p2);
 715                if (!digits)
 716                        return -1;
 717
 718                offset += digits+1;
 719                line += digits+1;
 720                len -= digits+1;
 721        }
 722
 723        ex = strlen(expect);
 724        if (ex > len)
 725                return -1;
 726        if (memcmp(line, expect, ex))
 727                return -1;
 728
 729        return offset + ex;
 730}
 731
 732/*
 733 * Parse a unified diff fragment header of the
 734 * form "@@ -a,b +c,d @@"
 735 */
 736static int parse_fragment_header(char *line, int len, struct fragment *fragment)
 737{
 738        int offset;
 739
 740        if (!len || line[len-1] != '\n')
 741                return -1;
 742
 743        /* Figure out the number of lines in a fragment */
 744        offset = parse_range(line, len, 4, " +", &fragment->oldpos, &fragment->oldlines);
 745        offset = parse_range(line, len, offset, " @@", &fragment->newpos, &fragment->newlines);
 746
 747        return offset;
 748}
 749
 750static int find_header(char *line, unsigned long size, int *hdrsize, struct patch *patch)
 751{
 752        unsigned long offset, len;
 753
 754        patch->is_rename = patch->is_copy = 0;
 755        patch->is_new = patch->is_delete = -1;
 756        patch->old_mode = patch->new_mode = 0;
 757        patch->old_name = patch->new_name = NULL;
 758        for (offset = 0; size > 0; offset += len, size -= len, line += len, linenr++) {
 759                unsigned long nextlen;
 760
 761                len = linelen(line, size);
 762                if (!len)
 763                        break;
 764
 765                /* Testing this early allows us to take a few shortcuts.. */
 766                if (len < 6)
 767                        continue;
 768
 769                /*
 770                 * Make sure we don't find any unconnected patch fragments.
 771                 * That's a sign that we didn't find a header, and that a
 772                 * patch has become corrupted/broken up.
 773                 */
 774                if (!memcmp("@@ -", line, 4)) {
 775                        struct fragment dummy;
 776                        if (parse_fragment_header(line, len, &dummy) < 0)
 777                                continue;
 778                        error("patch fragment without header at line %d: %.*s", linenr, (int)len-1, line);
 779                }
 780
 781                if (size < len + 6)
 782                        break;
 783
 784                /*
 785                 * Git patch? It might not have a real patch, just a rename
 786                 * or mode change, so we handle that specially
 787                 */
 788                if (!memcmp("diff --git ", line, 11)) {
 789                        int git_hdr_len = parse_git_header(line, len, size, patch);
 790                        if (git_hdr_len <= len)
 791                                continue;
 792                        if (!patch->old_name && !patch->new_name) {
 793                                if (!patch->def_name)
 794                                        die("git diff header lacks filename information (line %d)", linenr);
 795                                patch->old_name = patch->new_name = patch->def_name;
 796                        }
 797                        *hdrsize = git_hdr_len;
 798                        return offset;
 799                }
 800
 801                /** --- followed by +++ ? */
 802                if (memcmp("--- ", line,  4) || memcmp("+++ ", line + len, 4))
 803                        continue;
 804
 805                /*
 806                 * We only accept unified patches, so we want it to
 807                 * at least have "@@ -a,b +c,d @@\n", which is 14 chars
 808                 * minimum
 809                 */
 810                nextlen = linelen(line + len, size - len);
 811                if (size < nextlen + 14 || memcmp("@@ -", line + len + nextlen, 4))
 812                        continue;
 813
 814                /* Ok, we'll consider it a patch */
 815                parse_traditional_patch(line, line+len, patch);
 816                *hdrsize = len + nextlen;
 817                linenr += 2;
 818                return offset;
 819        }
 820        return -1;
 821}
 822
 823/*
 824 * Parse a unified diff. Note that this really needs
 825 * to parse each fragment separately, since the only
 826 * way to know the difference between a "---" that is
 827 * part of a patch, and a "---" that starts the next
 828 * patch is to look at the line counts..
 829 */
 830static int parse_fragment(char *line, unsigned long size, struct patch *patch, struct fragment *fragment)
 831{
 832        int added, deleted;
 833        int len = linelen(line, size), offset;
 834        unsigned long oldlines, newlines;
 835        unsigned long leading, trailing;
 836
 837        offset = parse_fragment_header(line, len, fragment);
 838        if (offset < 0)
 839                return -1;
 840        oldlines = fragment->oldlines;
 841        newlines = fragment->newlines;
 842        leading = 0;
 843        trailing = 0;
 844
 845        if (patch->is_new < 0) {
 846                patch->is_new =  !oldlines;
 847                if (!oldlines)
 848                        patch->old_name = NULL;
 849        }
 850        if (patch->is_delete < 0) {
 851                patch->is_delete = !newlines;
 852                if (!newlines)
 853                        patch->new_name = NULL;
 854        }
 855
 856        if (patch->is_new && oldlines)
 857                return error("new file depends on old contents");
 858        if (patch->is_delete != !newlines) {
 859                if (newlines)
 860                        return error("deleted file still has contents");
 861                fprintf(stderr, "** warning: file %s becomes empty but is not deleted\n", patch->new_name);
 862        }
 863
 864        /* Parse the thing.. */
 865        line += len;
 866        size -= len;
 867        linenr++;
 868        added = deleted = 0;
 869        for (offset = len; size > 0; offset += len, size -= len, line += len, linenr++) {
 870                if (!oldlines && !newlines)
 871                        break;
 872                len = linelen(line, size);
 873                if (!len || line[len-1] != '\n')
 874                        return -1;
 875                switch (*line) {
 876                default:
 877                        return -1;
 878                case ' ':
 879                        oldlines--;
 880                        newlines--;
 881                        if (!deleted && !added)
 882                                leading++;
 883                        trailing++;
 884                        break;
 885                case '-':
 886                        deleted++;
 887                        oldlines--;
 888                        trailing = 0;
 889                        break;
 890                case '+':
 891                        /*
 892                         * We know len is at least two, since we have a '+' and
 893                         * we checked that the last character was a '\n' above.
 894                         * That is, an addition of an empty line would check
 895                         * the '+' here.  Sneaky...
 896                         */
 897                        if ((new_whitespace != nowarn_whitespace) &&
 898                            isspace(line[len-2])) {
 899                                whitespace_error++;
 900                                if (squelch_whitespace_errors &&
 901                                    squelch_whitespace_errors <
 902                                    whitespace_error)
 903                                        ;
 904                                else {
 905                                        fprintf(stderr, "Adds trailing whitespace.\n%s:%d:%.*s\n",
 906                                                patch_input_file,
 907                                                linenr, len-2, line+1);
 908                                }
 909                        }
 910                        added++;
 911                        newlines--;
 912                        trailing = 0;
 913                        break;
 914
 915                /* We allow "\ No newline at end of file". Depending
 916                 * on locale settings when the patch was produced we
 917                 * don't know what this line looks like. The only
 918                 * thing we do know is that it begins with "\ ".
 919                 * Checking for 12 is just for sanity check -- any
 920                 * l10n of "\ No newline..." is at least that long.
 921                 */
 922                case '\\':
 923                        if (len < 12 || memcmp(line, "\\ ", 2))
 924                                return -1;
 925                        break;
 926                }
 927        }
 928        if (oldlines || newlines)
 929                return -1;
 930        fragment->leading = leading;
 931        fragment->trailing = trailing;
 932
 933        /* If a fragment ends with an incomplete line, we failed to include
 934         * it in the above loop because we hit oldlines == newlines == 0
 935         * before seeing it.
 936         */
 937        if (12 < size && !memcmp(line, "\\ ", 2))
 938                offset += linelen(line, size);
 939
 940        patch->lines_added += added;
 941        patch->lines_deleted += deleted;
 942        return offset;
 943}
 944
 945static int parse_single_patch(char *line, unsigned long size, struct patch *patch)
 946{
 947        unsigned long offset = 0;
 948        struct fragment **fragp = &patch->fragments;
 949
 950        while (size > 4 && !memcmp(line, "@@ -", 4)) {
 951                struct fragment *fragment;
 952                int len;
 953
 954                fragment = xcalloc(1, sizeof(*fragment));
 955                len = parse_fragment(line, size, patch, fragment);
 956                if (len <= 0)
 957                        die("corrupt patch at line %d", linenr);
 958
 959                fragment->patch = line;
 960                fragment->size = len;
 961
 962                *fragp = fragment;
 963                fragp = &fragment->next;
 964
 965                offset += len;
 966                line += len;
 967                size -= len;
 968        }
 969        return offset;
 970}
 971
 972static inline int metadata_changes(struct patch *patch)
 973{
 974        return  patch->is_rename > 0 ||
 975                patch->is_copy > 0 ||
 976                patch->is_new > 0 ||
 977                patch->is_delete ||
 978                (patch->old_mode && patch->new_mode &&
 979                 patch->old_mode != patch->new_mode);
 980}
 981
 982static int parse_binary(char *buffer, unsigned long size, struct patch *patch)
 983{
 984        /* We have read "GIT binary patch\n"; what follows is a line
 985         * that says the patch method (currently, either "deflated
 986         * literal" or "deflated delta") and the length of data before
 987         * deflating; a sequence of 'length-byte' followed by base-85
 988         * encoded data follows.
 989         *
 990         * Each 5-byte sequence of base-85 encodes up to 4 bytes,
 991         * and we would limit the patch line to 66 characters,
 992         * so one line can fit up to 13 groups that would decode
 993         * to 52 bytes max.  The length byte 'A'-'Z' corresponds
 994         * to 1-26 bytes, and 'a'-'z' corresponds to 27-52 bytes.
 995         * The end of binary is signaled with an empty line.
 996         */
 997        int llen, used;
 998        struct fragment *fragment;
 999        char *data = NULL;
1000
1001        patch->fragments = fragment = xcalloc(1, sizeof(*fragment));
1002
1003        /* Grab the type of patch */
1004        llen = linelen(buffer, size);
1005        used = llen;
1006        linenr++;
1007
1008        if (!strncmp(buffer, "delta ", 6)) {
1009                patch->is_binary = BINARY_DELTA_DEFLATED;
1010                patch->deflate_origlen = strtoul(buffer + 6, NULL, 10);
1011        }
1012        else if (!strncmp(buffer, "literal ", 8)) {
1013                patch->is_binary = BINARY_LITERAL_DEFLATED;
1014                patch->deflate_origlen = strtoul(buffer + 8, NULL, 10);
1015        }
1016        else
1017                return error("unrecognized binary patch at line %d: %.*s",
1018                             linenr-1, llen-1, buffer);
1019        buffer += llen;
1020        while (1) {
1021                int byte_length, max_byte_length, newsize;
1022                llen = linelen(buffer, size);
1023                used += llen;
1024                linenr++;
1025                if (llen == 1)
1026                        break;
1027                /* Minimum line is "A00000\n" which is 7-byte long,
1028                 * and the line length must be multiple of 5 plus 2.
1029                 */
1030                if ((llen < 7) || (llen-2) % 5)
1031                        goto corrupt;
1032                max_byte_length = (llen - 2) / 5 * 4;
1033                byte_length = *buffer;
1034                if ('A' <= byte_length && byte_length <= 'Z')
1035                        byte_length = byte_length - 'A' + 1;
1036                else if ('a' <= byte_length && byte_length <= 'z')
1037                        byte_length = byte_length - 'a' + 27;
1038                else
1039                        goto corrupt;
1040                /* if the input length was not multiple of 4, we would
1041                 * have filler at the end but the filler should never
1042                 * exceed 3 bytes
1043                 */
1044                if (max_byte_length < byte_length ||
1045                    byte_length <= max_byte_length - 4)
1046                        goto corrupt;
1047                newsize = fragment->size + byte_length;
1048                data = xrealloc(data, newsize);
1049                if (decode_85(data + fragment->size,
1050                              buffer + 1,
1051                              byte_length))
1052                        goto corrupt;
1053                fragment->size = newsize;
1054                buffer += llen;
1055                size -= llen;
1056        }
1057        fragment->patch = data;
1058        return used;
1059 corrupt:
1060        return error("corrupt binary patch at line %d: %.*s",
1061                     linenr-1, llen-1, buffer);
1062}
1063
1064static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)
1065{
1066        int hdrsize, patchsize;
1067        int offset = find_header(buffer, size, &hdrsize, patch);
1068
1069        if (offset < 0)
1070                return offset;
1071
1072        patchsize = parse_single_patch(buffer + offset + hdrsize, size - offset - hdrsize, patch);
1073
1074        if (!patchsize) {
1075                static const char *binhdr[] = {
1076                        "Binary files ",
1077                        "Files ",
1078                        NULL,
1079                };
1080                static const char git_binary[] = "GIT binary patch\n";
1081                int i;
1082                int hd = hdrsize + offset;
1083                unsigned long llen = linelen(buffer + hd, size - hd);
1084
1085                if (llen == sizeof(git_binary) - 1 &&
1086                    !memcmp(git_binary, buffer + hd, llen)) {
1087                        int used;
1088                        linenr++;
1089                        used = parse_binary(buffer + hd + llen,
1090                                            size - hd - llen, patch);
1091                        if (used)
1092                                patchsize = used + llen;
1093                        else
1094                                patchsize = 0;
1095                }
1096                else if (!memcmp(" differ\n", buffer + hd + llen - 8, 8)) {
1097                        for (i = 0; binhdr[i]; i++) {
1098                                int len = strlen(binhdr[i]);
1099                                if (len < size - hd &&
1100                                    !memcmp(binhdr[i], buffer + hd, len)) {
1101                                        linenr++;
1102                                        patch->is_binary = 1;
1103                                        patchsize = llen;
1104                                        break;
1105                                }
1106                        }
1107                }
1108
1109                /* Empty patch cannot be applied if:
1110                 * - it is a binary patch and we do not do binary_replace, or
1111                 * - text patch without metadata change
1112                 */
1113                if ((apply || check) &&
1114                    (patch->is_binary
1115                     ? !allow_binary_replacement
1116                     : !metadata_changes(patch)))
1117                        die("patch with only garbage at line %d", linenr);
1118        }
1119
1120        return offset + hdrsize + patchsize;
1121}
1122
1123#define swap(a,b) myswap((a),(b),sizeof(a))
1124
1125#define myswap(a, b, size) do {         \
1126        unsigned char mytmp[size];      \
1127        memcpy(mytmp, &a, size);                \
1128        memcpy(&a, &b, size);           \
1129        memcpy(&b, mytmp, size);                \
1130} while (0)
1131
1132static void reverse_patches(struct patch *p)
1133{
1134        for (; p; p = p->next) {
1135                struct fragment *frag = p->fragments;
1136
1137                swap(p->new_name, p->old_name);
1138                swap(p->new_mode, p->old_mode);
1139                swap(p->is_new, p->is_delete);
1140                swap(p->lines_added, p->lines_deleted);
1141                swap(p->old_sha1_prefix, p->new_sha1_prefix);
1142
1143                for (; frag; frag = frag->next) {
1144                        swap(frag->newpos, frag->oldpos);
1145                        swap(frag->newlines, frag->oldlines);
1146                }
1147        }
1148}
1149
1150static const char pluses[] = "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";
1151static const char minuses[]= "----------------------------------------------------------------------";
1152
1153static void show_stats(struct patch *patch)
1154{
1155        const char *prefix = "";
1156        char *name = patch->new_name;
1157        char *qname = NULL;
1158        int len, max, add, del, total;
1159
1160        if (!name)
1161                name = patch->old_name;
1162
1163        if (0 < (len = quote_c_style(name, NULL, NULL, 0))) {
1164                qname = xmalloc(len + 1);
1165                quote_c_style(name, qname, NULL, 0);
1166                name = qname;
1167        }
1168
1169        /*
1170         * "scale" the filename
1171         */
1172        len = strlen(name);
1173        max = max_len;
1174        if (max > 50)
1175                max = 50;
1176        if (len > max) {
1177                char *slash;
1178                prefix = "...";
1179                max -= 3;
1180                name += len - max;
1181                slash = strchr(name, '/');
1182                if (slash)
1183                        name = slash;
1184        }
1185        len = max;
1186
1187        /*
1188         * scale the add/delete
1189         */
1190        max = max_change;
1191        if (max + len > 70)
1192                max = 70 - len;
1193
1194        add = patch->lines_added;
1195        del = patch->lines_deleted;
1196        total = add + del;
1197
1198        if (max_change > 0) {
1199                total = (total * max + max_change / 2) / max_change;
1200                add = (add * max + max_change / 2) / max_change;
1201                del = total - add;
1202        }
1203        if (patch->is_binary)
1204                printf(" %s%-*s |  Bin\n", prefix, len, name);
1205        else
1206                printf(" %s%-*s |%5d %.*s%.*s\n", prefix,
1207                       len, name, patch->lines_added + patch->lines_deleted,
1208                       add, pluses, del, minuses);
1209        if (qname)
1210                free(qname);
1211}
1212
1213static int read_old_data(struct stat *st, const char *path, void *buf, unsigned long size)
1214{
1215        int fd;
1216        unsigned long got;
1217
1218        switch (st->st_mode & S_IFMT) {
1219        case S_IFLNK:
1220                return readlink(path, buf, size);
1221        case S_IFREG:
1222                fd = open(path, O_RDONLY);
1223                if (fd < 0)
1224                        return error("unable to open %s", path);
1225                got = 0;
1226                for (;;) {
1227                        int ret = xread(fd, (char *) buf + got, size - got);
1228                        if (ret <= 0)
1229                                break;
1230                        got += ret;
1231                }
1232                close(fd);
1233                return got;
1234
1235        default:
1236                return -1;
1237        }
1238}
1239
1240static int find_offset(const char *buf, unsigned long size, const char *fragment, unsigned long fragsize, int line, int *lines)
1241{
1242        int i;
1243        unsigned long start, backwards, forwards;
1244
1245        if (fragsize > size)
1246                return -1;
1247
1248        start = 0;
1249        if (line > 1) {
1250                unsigned long offset = 0;
1251                i = line-1;
1252                while (offset + fragsize <= size) {
1253                        if (buf[offset++] == '\n') {
1254                                start = offset;
1255                                if (!--i)
1256                                        break;
1257                        }
1258                }
1259        }
1260
1261        /* Exact line number? */
1262        if (!memcmp(buf + start, fragment, fragsize))
1263                return start;
1264
1265        /*
1266         * There's probably some smart way to do this, but I'll leave
1267         * that to the smart and beautiful people. I'm simple and stupid.
1268         */
1269        backwards = start;
1270        forwards = start;
1271        for (i = 0; ; i++) {
1272                unsigned long try;
1273                int n;
1274
1275                /* "backward" */
1276                if (i & 1) {
1277                        if (!backwards) {
1278                                if (forwards + fragsize > size)
1279                                        break;
1280                                continue;
1281                        }
1282                        do {
1283                                --backwards;
1284                        } while (backwards && buf[backwards-1] != '\n');
1285                        try = backwards;
1286                } else {
1287                        while (forwards + fragsize <= size) {
1288                                if (buf[forwards++] == '\n')
1289                                        break;
1290                        }
1291                        try = forwards;
1292                }
1293
1294                if (try + fragsize > size)
1295                        continue;
1296                if (memcmp(buf + try, fragment, fragsize))
1297                        continue;
1298                n = (i >> 1)+1;
1299                if (i & 1)
1300                        n = -n;
1301                *lines = n;
1302                return try;
1303        }
1304
1305        /*
1306         * We should start searching forward and backward.
1307         */
1308        return -1;
1309}
1310
1311static void remove_first_line(const char **rbuf, int *rsize)
1312{
1313        const char *buf = *rbuf;
1314        int size = *rsize;
1315        unsigned long offset;
1316        offset = 0;
1317        while (offset <= size) {
1318                if (buf[offset++] == '\n')
1319                        break;
1320        }
1321        *rsize = size - offset;
1322        *rbuf = buf + offset;
1323}
1324
1325static void remove_last_line(const char **rbuf, int *rsize)
1326{
1327        const char *buf = *rbuf;
1328        int size = *rsize;
1329        unsigned long offset;
1330        offset = size - 1;
1331        while (offset > 0) {
1332                if (buf[--offset] == '\n')
1333                        break;
1334        }
1335        *rsize = offset + 1;
1336}
1337
1338struct buffer_desc {
1339        char *buffer;
1340        unsigned long size;
1341        unsigned long alloc;
1342};
1343
1344static int apply_line(char *output, const char *patch, int plen)
1345{
1346        /* plen is number of bytes to be copied from patch,
1347         * starting at patch+1 (patch[0] is '+').  Typically
1348         * patch[plen] is '\n'.
1349         */
1350        int add_nl_to_tail = 0;
1351        if ((new_whitespace == strip_whitespace) &&
1352            1 < plen && isspace(patch[plen-1])) {
1353                if (patch[plen] == '\n')
1354                        add_nl_to_tail = 1;
1355                plen--;
1356                while (0 < plen && isspace(patch[plen]))
1357                        plen--;
1358                applied_after_stripping++;
1359        }
1360        memcpy(output, patch + 1, plen);
1361        if (add_nl_to_tail)
1362                output[plen++] = '\n';
1363        return plen;
1364}
1365
1366static int apply_one_fragment(struct buffer_desc *desc, struct fragment *frag, int inaccurate_eof)
1367{
1368        int match_beginning, match_end;
1369        char *buf = desc->buffer;
1370        const char *patch = frag->patch;
1371        int offset, size = frag->size;
1372        char *old = xmalloc(size);
1373        char *new = xmalloc(size);
1374        const char *oldlines, *newlines;
1375        int oldsize = 0, newsize = 0;
1376        unsigned long leading, trailing;
1377        int pos, lines;
1378
1379        while (size > 0) {
1380                char first;
1381                int len = linelen(patch, size);
1382                int plen;
1383
1384                if (!len)
1385                        break;
1386
1387                /*
1388                 * "plen" is how much of the line we should use for
1389                 * the actual patch data. Normally we just remove the
1390                 * first character on the line, but if the line is
1391                 * followed by "\ No newline", then we also remove the
1392                 * last one (which is the newline, of course).
1393                 */
1394                plen = len-1;
1395                if (len < size && patch[len] == '\\')
1396                        plen--;
1397                first = *patch;
1398                if (apply_in_reverse) {
1399                        if (first == '-')
1400                                first = '+';
1401                        else if (first == '+')
1402                                first = '-';
1403                }
1404                switch (first) {
1405                case ' ':
1406                case '-':
1407                        memcpy(old + oldsize, patch + 1, plen);
1408                        oldsize += plen;
1409                        if (first == '-')
1410                                break;
1411                /* Fall-through for ' ' */
1412                case '+':
1413                        if (first != '+' || !no_add)
1414                                newsize += apply_line(new + newsize, patch,
1415                                                      plen);
1416                        break;
1417                case '@': case '\\':
1418                        /* Ignore it, we already handled it */
1419                        break;
1420                default:
1421                        return -1;
1422                }
1423                patch += len;
1424                size -= len;
1425        }
1426
1427        if (inaccurate_eof && oldsize > 0 && old[oldsize - 1] == '\n' &&
1428                        newsize > 0 && new[newsize - 1] == '\n') {
1429                oldsize--;
1430                newsize--;
1431        }
1432
1433        oldlines = old;
1434        newlines = new;
1435        leading = frag->leading;
1436        trailing = frag->trailing;
1437
1438        /*
1439         * If we don't have any leading/trailing data in the patch,
1440         * we want it to match at the beginning/end of the file.
1441         */
1442        match_beginning = !leading && (frag->oldpos == 1);
1443        match_end = !trailing;
1444
1445        lines = 0;
1446        pos = frag->newpos;
1447        for (;;) {
1448                offset = find_offset(buf, desc->size, oldlines, oldsize, pos, &lines);
1449                if (match_end && offset + oldsize != desc->size)
1450                        offset = -1;
1451                if (match_beginning && offset)
1452                        offset = -1;
1453                if (offset >= 0) {
1454                        int diff = newsize - oldsize;
1455                        unsigned long size = desc->size + diff;
1456                        unsigned long alloc = desc->alloc;
1457
1458                        /* Warn if it was necessary to reduce the number
1459                         * of context lines.
1460                         */
1461                        if ((leading != frag->leading) || (trailing != frag->trailing))
1462                                fprintf(stderr, "Context reduced to (%ld/%ld) to apply fragment at %d\n",
1463                                        leading, trailing, pos + lines);
1464
1465                        if (size > alloc) {
1466                                alloc = size + 8192;
1467                                desc->alloc = alloc;
1468                                buf = xrealloc(buf, alloc);
1469                                desc->buffer = buf;
1470                        }
1471                        desc->size = size;
1472                        memmove(buf + offset + newsize, buf + offset + oldsize, size - offset - newsize);
1473                        memcpy(buf + offset, newlines, newsize);
1474                        offset = 0;
1475
1476                        break;
1477                }
1478
1479                /* Am I at my context limits? */
1480                if ((leading <= p_context) && (trailing <= p_context))
1481                        break;
1482                if (match_beginning || match_end) {
1483                        match_beginning = match_end = 0;
1484                        continue;
1485                }
1486                /* Reduce the number of context lines
1487                 * Reduce both leading and trailing if they are equal
1488                 * otherwise just reduce the larger context.
1489                 */
1490                if (leading >= trailing) {
1491                        remove_first_line(&oldlines, &oldsize);
1492                        remove_first_line(&newlines, &newsize);
1493                        pos--;
1494                        leading--;
1495                }
1496                if (trailing > leading) {
1497                        remove_last_line(&oldlines, &oldsize);
1498                        remove_last_line(&newlines, &newsize);
1499                        trailing--;
1500                }
1501        }
1502
1503        free(old);
1504        free(new);
1505        return offset;
1506}
1507
1508static char *inflate_it(const void *data, unsigned long size,
1509                        unsigned long inflated_size)
1510{
1511        z_stream stream;
1512        void *out;
1513        int st;
1514
1515        memset(&stream, 0, sizeof(stream));
1516
1517        stream.next_in = (unsigned char *)data;
1518        stream.avail_in = size;
1519        stream.next_out = out = xmalloc(inflated_size);
1520        stream.avail_out = inflated_size;
1521        inflateInit(&stream);
1522        st = inflate(&stream, Z_FINISH);
1523        if ((st != Z_STREAM_END) || stream.total_out != inflated_size) {
1524                free(out);
1525                return NULL;
1526        }
1527        return out;
1528}
1529
1530static int apply_binary_fragment(struct buffer_desc *desc, struct patch *patch)
1531{
1532        unsigned long dst_size;
1533        struct fragment *fragment = patch->fragments;
1534        void *data;
1535        void *result;
1536
1537        /* Binary patch is irreversible */
1538        if (apply_in_reverse)
1539                return error("cannot reverse-apply a binary patch to '%s'",
1540                             patch->new_name
1541                             ? patch->new_name : patch->old_name);
1542
1543        data = inflate_it(fragment->patch, fragment->size,
1544                          patch->deflate_origlen);
1545        if (!data)
1546                return error("corrupt patch data");
1547        switch (patch->is_binary) {
1548        case BINARY_DELTA_DEFLATED:
1549                result = patch_delta(desc->buffer, desc->size,
1550                                     data,
1551                                     patch->deflate_origlen,
1552                                     &dst_size);
1553                free(desc->buffer);
1554                desc->buffer = result;
1555                free(data);
1556                break;
1557        case BINARY_LITERAL_DEFLATED:
1558                free(desc->buffer);
1559                desc->buffer = data;
1560                dst_size = patch->deflate_origlen;
1561                break;
1562        }
1563        if (!desc->buffer)
1564                return -1;
1565        desc->size = desc->alloc = dst_size;
1566        return 0;
1567}
1568
1569static int apply_binary(struct buffer_desc *desc, struct patch *patch)
1570{
1571        const char *name = patch->old_name ? patch->old_name : patch->new_name;
1572        unsigned char sha1[20];
1573        unsigned char hdr[50];
1574        int hdrlen;
1575
1576        if (!allow_binary_replacement)
1577                return error("cannot apply binary patch to '%s' "
1578                             "without --allow-binary-replacement",
1579                             name);
1580
1581        /* For safety, we require patch index line to contain
1582         * full 40-byte textual SHA1 for old and new, at least for now.
1583         */
1584        if (strlen(patch->old_sha1_prefix) != 40 ||
1585            strlen(patch->new_sha1_prefix) != 40 ||
1586            get_sha1_hex(patch->old_sha1_prefix, sha1) ||
1587            get_sha1_hex(patch->new_sha1_prefix, sha1))
1588                return error("cannot apply binary patch to '%s' "
1589                             "without full index line", name);
1590
1591        if (patch->old_name) {
1592                /* See if the old one matches what the patch
1593                 * applies to.
1594                 */
1595                write_sha1_file_prepare(desc->buffer, desc->size,
1596                                        blob_type, sha1, hdr, &hdrlen);
1597                if (strcmp(sha1_to_hex(sha1), patch->old_sha1_prefix))
1598                        return error("the patch applies to '%s' (%s), "
1599                                     "which does not match the "
1600                                     "current contents.",
1601                                     name, sha1_to_hex(sha1));
1602        }
1603        else {
1604                /* Otherwise, the old one must be empty. */
1605                if (desc->size)
1606                        return error("the patch applies to an empty "
1607                                     "'%s' but it is not empty", name);
1608        }
1609
1610        get_sha1_hex(patch->new_sha1_prefix, sha1);
1611        if (!memcmp(sha1, null_sha1, 20)) {
1612                free(desc->buffer);
1613                desc->alloc = desc->size = 0;
1614                desc->buffer = NULL;
1615                return 0; /* deletion patch */
1616        }
1617
1618        if (has_sha1_file(sha1)) {
1619                /* We already have the postimage */
1620                char type[10];
1621                unsigned long size;
1622
1623                free(desc->buffer);
1624                desc->buffer = read_sha1_file(sha1, type, &size);
1625                if (!desc->buffer)
1626                        return error("the necessary postimage %s for "
1627                                     "'%s' cannot be read",
1628                                     patch->new_sha1_prefix, name);
1629                desc->alloc = desc->size = size;
1630        }
1631        else {
1632                /* We have verified desc matches the preimage;
1633                 * apply the patch data to it, which is stored
1634                 * in the patch->fragments->{patch,size}.
1635                 */
1636                if (apply_binary_fragment(desc, patch))
1637                        return error("binary patch does not apply to '%s'",
1638                                     name);
1639
1640                /* verify that the result matches */
1641                write_sha1_file_prepare(desc->buffer, desc->size, blob_type,
1642                                        sha1, hdr, &hdrlen);
1643                if (strcmp(sha1_to_hex(sha1), patch->new_sha1_prefix))
1644                        return error("binary patch to '%s' creates incorrect result", name);
1645        }
1646
1647        return 0;
1648}
1649
1650static int apply_fragments(struct buffer_desc *desc, struct patch *patch)
1651{
1652        struct fragment *frag = patch->fragments;
1653        const char *name = patch->old_name ? patch->old_name : patch->new_name;
1654
1655        if (patch->is_binary)
1656                return apply_binary(desc, patch);
1657
1658        while (frag) {
1659                if (apply_one_fragment(desc, frag, patch->inaccurate_eof) < 0)
1660                        return error("patch failed: %s:%ld",
1661                                     name, frag->oldpos);
1662                frag = frag->next;
1663        }
1664        return 0;
1665}
1666
1667static int apply_data(struct patch *patch, struct stat *st, struct cache_entry *ce)
1668{
1669        char *buf;
1670        unsigned long size, alloc;
1671        struct buffer_desc desc;
1672
1673        size = 0;
1674        alloc = 0;
1675        buf = NULL;
1676        if (cached) {
1677                if (ce) {
1678                        char type[20];
1679                        buf = read_sha1_file(ce->sha1, type, &size);
1680                        if (!buf)
1681                                return error("read of %s failed",
1682                                             patch->old_name);
1683                        alloc = size;
1684                }
1685        }
1686        else if (patch->old_name) {
1687                size = st->st_size;
1688                alloc = size + 8192;
1689                buf = xmalloc(alloc);
1690                if (read_old_data(st, patch->old_name, buf, alloc) != size)
1691                        return error("read of %s failed", patch->old_name);
1692        }
1693
1694        desc.size = size;
1695        desc.alloc = alloc;
1696        desc.buffer = buf;
1697        if (apply_fragments(&desc, patch) < 0)
1698                return -1;
1699
1700        /* NUL terminate the result */
1701        if (desc.alloc <= desc.size)
1702                desc.buffer = xrealloc(desc.buffer, desc.size + 1);
1703        desc.buffer[desc.size] = 0;
1704
1705        patch->result = desc.buffer;
1706        patch->resultsize = desc.size;
1707
1708        if (patch->is_delete && patch->resultsize)
1709                return error("removal patch leaves file contents");
1710
1711        return 0;
1712}
1713
1714static int check_patch(struct patch *patch, struct patch *prev_patch)
1715{
1716        struct stat st;
1717        const char *old_name = patch->old_name;
1718        const char *new_name = patch->new_name;
1719        const char *name = old_name ? old_name : new_name;
1720        struct cache_entry *ce = NULL;
1721        int ok_if_exists;
1722
1723        if (old_name) {
1724                int changed = 0;
1725                int stat_ret = 0;
1726                unsigned st_mode = 0;
1727
1728                if (!cached)
1729                        stat_ret = lstat(old_name, &st);
1730                if (check_index) {
1731                        int pos = cache_name_pos(old_name, strlen(old_name));
1732                        if (pos < 0)
1733                                return error("%s: does not exist in index",
1734                                             old_name);
1735                        ce = active_cache[pos];
1736                        if (stat_ret < 0) {
1737                                struct checkout costate;
1738                                if (errno != ENOENT)
1739                                        return error("%s: %s", old_name,
1740                                                     strerror(errno));
1741                                /* checkout */
1742                                costate.base_dir = "";
1743                                costate.base_dir_len = 0;
1744                                costate.force = 0;
1745                                costate.quiet = 0;
1746                                costate.not_new = 0;
1747                                costate.refresh_cache = 1;
1748                                if (checkout_entry(ce,
1749                                                   &costate,
1750                                                   NULL) ||
1751                                    lstat(old_name, &st))
1752                                        return -1;
1753                        }
1754                        if (!cached)
1755                                changed = ce_match_stat(ce, &st, 1);
1756                        if (changed)
1757                                return error("%s: does not match index",
1758                                             old_name);
1759                        if (cached)
1760                                st_mode = ntohl(ce->ce_mode);
1761                }
1762                else if (stat_ret < 0)
1763                        return error("%s: %s", old_name, strerror(errno));
1764
1765                if (!cached)
1766                        st_mode = ntohl(create_ce_mode(st.st_mode));
1767
1768                if (patch->is_new < 0)
1769                        patch->is_new = 0;
1770                if (!patch->old_mode)
1771                        patch->old_mode = st_mode;
1772                if ((st_mode ^ patch->old_mode) & S_IFMT)
1773                        return error("%s: wrong type", old_name);
1774                if (st_mode != patch->old_mode)
1775                        fprintf(stderr, "warning: %s has type %o, expected %o\n",
1776                                old_name, st_mode, patch->old_mode);
1777        }
1778
1779        if (new_name && prev_patch && prev_patch->is_delete &&
1780            !strcmp(prev_patch->old_name, new_name))
1781                /* A type-change diff is always split into a patch to
1782                 * delete old, immediately followed by a patch to
1783                 * create new (see diff.c::run_diff()); in such a case
1784                 * it is Ok that the entry to be deleted by the
1785                 * previous patch is still in the working tree and in
1786                 * the index.
1787                 */
1788                ok_if_exists = 1;
1789        else
1790                ok_if_exists = 0;
1791
1792        if (new_name && (patch->is_new | patch->is_rename | patch->is_copy)) {
1793                if (check_index &&
1794                    cache_name_pos(new_name, strlen(new_name)) >= 0 &&
1795                    !ok_if_exists)
1796                        return error("%s: already exists in index", new_name);
1797                if (!cached) {
1798                        struct stat nst;
1799                        if (!lstat(new_name, &nst)) {
1800                                if (S_ISDIR(nst.st_mode) || ok_if_exists)
1801                                        ; /* ok */
1802                                else
1803                                        return error("%s: already exists in working directory", new_name);
1804                        }
1805                        else if ((errno != ENOENT) && (errno != ENOTDIR))
1806                                return error("%s: %s", new_name, strerror(errno));
1807                }
1808                if (!patch->new_mode) {
1809                        if (patch->is_new)
1810                                patch->new_mode = S_IFREG | 0644;
1811                        else
1812                                patch->new_mode = patch->old_mode;
1813                }
1814        }
1815
1816        if (new_name && old_name) {
1817                int same = !strcmp(old_name, new_name);
1818                if (!patch->new_mode)
1819                        patch->new_mode = patch->old_mode;
1820                if ((patch->old_mode ^ patch->new_mode) & S_IFMT)
1821                        return error("new mode (%o) of %s does not match old mode (%o)%s%s",
1822                                patch->new_mode, new_name, patch->old_mode,
1823                                same ? "" : " of ", same ? "" : old_name);
1824        }
1825
1826        if (apply_data(patch, &st, ce) < 0)
1827                return error("%s: patch does not apply", name);
1828        return 0;
1829}
1830
1831static int check_patch_list(struct patch *patch)
1832{
1833        struct patch *prev_patch = NULL;
1834        int error = 0;
1835
1836        for (prev_patch = NULL; patch ; patch = patch->next) {
1837                error |= check_patch(patch, prev_patch);
1838                prev_patch = patch;
1839        }
1840        return error;
1841}
1842
1843static inline int is_null_sha1(const unsigned char *sha1)
1844{
1845        return !memcmp(sha1, null_sha1, 20);
1846}
1847
1848static void show_index_list(struct patch *list)
1849{
1850        struct patch *patch;
1851
1852        /* Once we start supporting the reverse patch, it may be
1853         * worth showing the new sha1 prefix, but until then...
1854         */
1855        for (patch = list; patch; patch = patch->next) {
1856                const unsigned char *sha1_ptr;
1857                unsigned char sha1[20];
1858                const char *name;
1859
1860                name = patch->old_name ? patch->old_name : patch->new_name;
1861                if (patch->is_new)
1862                        sha1_ptr = null_sha1;
1863                else if (get_sha1(patch->old_sha1_prefix, sha1))
1864                        die("sha1 information is lacking or useless (%s).",
1865                            name);
1866                else
1867                        sha1_ptr = sha1;
1868
1869                printf("%06o %s ",patch->old_mode, sha1_to_hex(sha1_ptr));
1870                if (line_termination && quote_c_style(name, NULL, NULL, 0))
1871                        quote_c_style(name, NULL, stdout, 0);
1872                else
1873                        fputs(name, stdout);
1874                putchar(line_termination);
1875        }
1876}
1877
1878static void stat_patch_list(struct patch *patch)
1879{
1880        int files, adds, dels;
1881
1882        for (files = adds = dels = 0 ; patch ; patch = patch->next) {
1883                files++;
1884                adds += patch->lines_added;
1885                dels += patch->lines_deleted;
1886                show_stats(patch);
1887        }
1888
1889        printf(" %d files changed, %d insertions(+), %d deletions(-)\n", files, adds, dels);
1890}
1891
1892static void numstat_patch_list(struct patch *patch)
1893{
1894        for ( ; patch; patch = patch->next) {
1895                const char *name;
1896                name = patch->new_name ? patch->new_name : patch->old_name;
1897                printf("%d\t%d\t", patch->lines_added, patch->lines_deleted);
1898                if (line_termination && quote_c_style(name, NULL, NULL, 0))
1899                        quote_c_style(name, NULL, stdout, 0);
1900                else
1901                        fputs(name, stdout);
1902                putchar('\n');
1903        }
1904}
1905
1906static void show_file_mode_name(const char *newdelete, unsigned int mode, const char *name)
1907{
1908        if (mode)
1909                printf(" %s mode %06o %s\n", newdelete, mode, name);
1910        else
1911                printf(" %s %s\n", newdelete, name);
1912}
1913
1914static void show_mode_change(struct patch *p, int show_name)
1915{
1916        if (p->old_mode && p->new_mode && p->old_mode != p->new_mode) {
1917                if (show_name)
1918                        printf(" mode change %06o => %06o %s\n",
1919                               p->old_mode, p->new_mode, p->new_name);
1920                else
1921                        printf(" mode change %06o => %06o\n",
1922                               p->old_mode, p->new_mode);
1923        }
1924}
1925
1926static void show_rename_copy(struct patch *p)
1927{
1928        const char *renamecopy = p->is_rename ? "rename" : "copy";
1929        const char *old, *new;
1930
1931        /* Find common prefix */
1932        old = p->old_name;
1933        new = p->new_name;
1934        while (1) {
1935                const char *slash_old, *slash_new;
1936                slash_old = strchr(old, '/');
1937                slash_new = strchr(new, '/');
1938                if (!slash_old ||
1939                    !slash_new ||
1940                    slash_old - old != slash_new - new ||
1941                    memcmp(old, new, slash_new - new))
1942                        break;
1943                old = slash_old + 1;
1944                new = slash_new + 1;
1945        }
1946        /* p->old_name thru old is the common prefix, and old and new
1947         * through the end of names are renames
1948         */
1949        if (old != p->old_name)
1950                printf(" %s %.*s{%s => %s} (%d%%)\n", renamecopy,
1951                       (int)(old - p->old_name), p->old_name,
1952                       old, new, p->score);
1953        else
1954                printf(" %s %s => %s (%d%%)\n", renamecopy,
1955                       p->old_name, p->new_name, p->score);
1956        show_mode_change(p, 0);
1957}
1958
1959static void summary_patch_list(struct patch *patch)
1960{
1961        struct patch *p;
1962
1963        for (p = patch; p; p = p->next) {
1964                if (p->is_new)
1965                        show_file_mode_name("create", p->new_mode, p->new_name);
1966                else if (p->is_delete)
1967                        show_file_mode_name("delete", p->old_mode, p->old_name);
1968                else {
1969                        if (p->is_rename || p->is_copy)
1970                                show_rename_copy(p);
1971                        else {
1972                                if (p->score) {
1973                                        printf(" rewrite %s (%d%%)\n",
1974                                               p->new_name, p->score);
1975                                        show_mode_change(p, 0);
1976                                }
1977                                else
1978                                        show_mode_change(p, 1);
1979                        }
1980                }
1981        }
1982}
1983
1984static void patch_stats(struct patch *patch)
1985{
1986        int lines = patch->lines_added + patch->lines_deleted;
1987
1988        if (lines > max_change)
1989                max_change = lines;
1990        if (patch->old_name) {
1991                int len = quote_c_style(patch->old_name, NULL, NULL, 0);
1992                if (!len)
1993                        len = strlen(patch->old_name);
1994                if (len > max_len)
1995                        max_len = len;
1996        }
1997        if (patch->new_name) {
1998                int len = quote_c_style(patch->new_name, NULL, NULL, 0);
1999                if (!len)
2000                        len = strlen(patch->new_name);
2001                if (len > max_len)
2002                        max_len = len;
2003        }
2004}
2005
2006static void remove_file(struct patch *patch)
2007{
2008        if (write_index) {
2009                if (remove_file_from_cache(patch->old_name) < 0)
2010                        die("unable to remove %s from index", patch->old_name);
2011                cache_tree_invalidate_path(active_cache_tree, patch->old_name);
2012        }
2013        if (!cached)
2014                unlink(patch->old_name);
2015}
2016
2017static void add_index_file(const char *path, unsigned mode, void *buf, unsigned long size)
2018{
2019        struct stat st;
2020        struct cache_entry *ce;
2021        int namelen = strlen(path);
2022        unsigned ce_size = cache_entry_size(namelen);
2023
2024        if (!write_index)
2025                return;
2026
2027        ce = xcalloc(1, ce_size);
2028        memcpy(ce->name, path, namelen);
2029        ce->ce_mode = create_ce_mode(mode);
2030        ce->ce_flags = htons(namelen);
2031        if (!cached) {
2032                if (lstat(path, &st) < 0)
2033                        die("unable to stat newly created file %s", path);
2034                fill_stat_cache_info(ce, &st);
2035        }
2036        if (write_sha1_file(buf, size, blob_type, ce->sha1) < 0)
2037                die("unable to create backing store for newly created file %s", path);
2038        if (add_cache_entry(ce, ADD_CACHE_OK_TO_ADD) < 0)
2039                die("unable to add cache entry for %s", path);
2040}
2041
2042static int try_create_file(const char *path, unsigned int mode, const char *buf, unsigned long size)
2043{
2044        int fd;
2045
2046        if (S_ISLNK(mode))
2047                /* Although buf:size is counted string, it also is NUL
2048                 * terminated.
2049                 */
2050                return symlink(buf, path);
2051        fd = open(path, O_CREAT | O_EXCL | O_WRONLY, (mode & 0100) ? 0777 : 0666);
2052        if (fd < 0)
2053                return -1;
2054        while (size) {
2055                int written = xwrite(fd, buf, size);
2056                if (written < 0)
2057                        die("writing file %s: %s", path, strerror(errno));
2058                if (!written)
2059                        die("out of space writing file %s", path);
2060                buf += written;
2061                size -= written;
2062        }
2063        if (close(fd) < 0)
2064                die("closing file %s: %s", path, strerror(errno));
2065        return 0;
2066}
2067
2068/*
2069 * We optimistically assume that the directories exist,
2070 * which is true 99% of the time anyway. If they don't,
2071 * we create them and try again.
2072 */
2073static void create_one_file(char *path, unsigned mode, const char *buf, unsigned long size)
2074{
2075        if (cached)
2076                return;
2077        if (!try_create_file(path, mode, buf, size))
2078                return;
2079
2080        if (errno == ENOENT) {
2081                if (safe_create_leading_directories(path))
2082                        return;
2083                if (!try_create_file(path, mode, buf, size))
2084                        return;
2085        }
2086
2087        if (errno == EEXIST || errno == EACCES) {
2088                /* We may be trying to create a file where a directory
2089                 * used to be.
2090                 */
2091                struct stat st;
2092                errno = 0;
2093                if (!lstat(path, &st) && S_ISDIR(st.st_mode) && !rmdir(path))
2094                        errno = EEXIST;
2095        }
2096
2097        if (errno == EEXIST) {
2098                unsigned int nr = getpid();
2099
2100                for (;;) {
2101                        const char *newpath;
2102                        newpath = mkpath("%s~%u", path, nr);
2103                        if (!try_create_file(newpath, mode, buf, size)) {
2104                                if (!rename(newpath, path))
2105                                        return;
2106                                unlink(newpath);
2107                                break;
2108                        }
2109                        if (errno != EEXIST)
2110                                break;
2111                        ++nr;
2112                }
2113        }
2114        die("unable to write file %s mode %o", path, mode);
2115}
2116
2117static void create_file(struct patch *patch)
2118{
2119        char *path = patch->new_name;
2120        unsigned mode = patch->new_mode;
2121        unsigned long size = patch->resultsize;
2122        char *buf = patch->result;
2123
2124        if (!mode)
2125                mode = S_IFREG | 0644;
2126        create_one_file(path, mode, buf, size);
2127        add_index_file(path, mode, buf, size);
2128        cache_tree_invalidate_path(active_cache_tree, path);
2129}
2130
2131/* phase zero is to remove, phase one is to create */
2132static void write_out_one_result(struct patch *patch, int phase)
2133{
2134        if (patch->is_delete > 0) {
2135                if (phase == 0)
2136                        remove_file(patch);
2137                return;
2138        }
2139        if (patch->is_new > 0 || patch->is_copy) {
2140                if (phase == 1)
2141                        create_file(patch);
2142                return;
2143        }
2144        /*
2145         * Rename or modification boils down to the same
2146         * thing: remove the old, write the new
2147         */
2148        if (phase == 0)
2149                remove_file(patch);
2150        if (phase == 1)
2151        create_file(patch);
2152}
2153
2154static void write_out_results(struct patch *list, int skipped_patch)
2155{
2156        int phase;
2157
2158        if (!list && !skipped_patch)
2159                die("No changes");
2160
2161        for (phase = 0; phase < 2; phase++) {
2162                struct patch *l = list;
2163                while (l) {
2164                        write_out_one_result(l, phase);
2165                        l = l->next;
2166                }
2167        }
2168}
2169
2170static struct lock_file lock_file;
2171
2172static struct excludes {
2173        struct excludes *next;
2174        const char *path;
2175} *excludes;
2176
2177static int use_patch(struct patch *p)
2178{
2179        const char *pathname = p->new_name ? p->new_name : p->old_name;
2180        struct excludes *x = excludes;
2181        while (x) {
2182                if (fnmatch(x->path, pathname, 0) == 0)
2183                        return 0;
2184                x = x->next;
2185        }
2186        if (0 < prefix_length) {
2187                int pathlen = strlen(pathname);
2188                if (pathlen <= prefix_length ||
2189                    memcmp(prefix, pathname, prefix_length))
2190                        return 0;
2191        }
2192        return 1;
2193}
2194
2195static int apply_patch(int fd, const char *filename, int inaccurate_eof)
2196{
2197        unsigned long offset, size;
2198        char *buffer = read_patch_file(fd, &size);
2199        struct patch *list = NULL, **listp = &list;
2200        int skipped_patch = 0;
2201
2202        patch_input_file = filename;
2203        if (!buffer)
2204                return -1;
2205        offset = 0;
2206        while (size > 0) {
2207                struct patch *patch;
2208                int nr;
2209
2210                patch = xcalloc(1, sizeof(*patch));
2211                patch->inaccurate_eof = inaccurate_eof;
2212                nr = parse_chunk(buffer + offset, size, patch);
2213                if (nr < 0)
2214                        break;
2215                if (apply_in_reverse)
2216                        reverse_patches(patch);
2217                if (use_patch(patch)) {
2218                        patch_stats(patch);
2219                        *listp = patch;
2220                        listp = &patch->next;
2221                } else {
2222                        /* perhaps free it a bit better? */
2223                        free(patch);
2224                        skipped_patch++;
2225                }
2226                offset += nr;
2227                size -= nr;
2228        }
2229
2230        if (whitespace_error && (new_whitespace == error_on_whitespace))
2231                apply = 0;
2232
2233        write_index = check_index && apply;
2234        if (write_index && newfd < 0)
2235                newfd = hold_lock_file_for_update(&lock_file,
2236                                                  get_index_file(), 1);
2237        if (check_index) {
2238                if (read_cache() < 0)
2239                        die("unable to read index file");
2240        }
2241
2242        if ((check || apply) && check_patch_list(list) < 0)
2243                exit(1);
2244
2245        if (apply)
2246                write_out_results(list, skipped_patch);
2247
2248        if (show_index_info)
2249                show_index_list(list);
2250
2251        if (diffstat)
2252                stat_patch_list(list);
2253
2254        if (numstat)
2255                numstat_patch_list(list);
2256
2257        if (summary)
2258                summary_patch_list(list);
2259
2260        free(buffer);
2261        return 0;
2262}
2263
2264static int git_apply_config(const char *var, const char *value)
2265{
2266        if (!strcmp(var, "apply.whitespace")) {
2267                apply_default_whitespace = strdup(value);
2268                return 0;
2269        }
2270        return git_default_config(var, value);
2271}
2272
2273
2274int cmd_apply(int argc, const char **argv, const char *prefix)
2275{
2276        int i;
2277        int read_stdin = 1;
2278        int inaccurate_eof = 0;
2279
2280        const char *whitespace_option = NULL;
2281
2282        for (i = 1; i < argc; i++) {
2283                const char *arg = argv[i];
2284                char *end;
2285                int fd;
2286
2287                if (!strcmp(arg, "-")) {
2288                        apply_patch(0, "<stdin>", inaccurate_eof);
2289                        read_stdin = 0;
2290                        continue;
2291                }
2292                if (!strncmp(arg, "--exclude=", 10)) {
2293                        struct excludes *x = xmalloc(sizeof(*x));
2294                        x->path = arg + 10;
2295                        x->next = excludes;
2296                        excludes = x;
2297                        continue;
2298                }
2299                if (!strncmp(arg, "-p", 2)) {
2300                        p_value = atoi(arg + 2);
2301                        continue;
2302                }
2303                if (!strcmp(arg, "--no-add")) {
2304                        no_add = 1;
2305                        continue;
2306                }
2307                if (!strcmp(arg, "--stat")) {
2308                        apply = 0;
2309                        diffstat = 1;
2310                        continue;
2311                }
2312                if (!strcmp(arg, "--allow-binary-replacement") ||
2313                    !strcmp(arg, "--binary")) {
2314                        allow_binary_replacement = 1;
2315                        continue;
2316                }
2317                if (!strcmp(arg, "--numstat")) {
2318                        apply = 0;
2319                        numstat = 1;
2320                        continue;
2321                }
2322                if (!strcmp(arg, "--summary")) {
2323                        apply = 0;
2324                        summary = 1;
2325                        continue;
2326                }
2327                if (!strcmp(arg, "--check")) {
2328                        apply = 0;
2329                        check = 1;
2330                        continue;
2331                }
2332                if (!strcmp(arg, "--index")) {
2333                        check_index = 1;
2334                        continue;
2335                }
2336                if (!strcmp(arg, "--cached")) {
2337                        check_index = 1;
2338                        cached = 1;
2339                        continue;
2340                }
2341                if (!strcmp(arg, "--apply")) {
2342                        apply = 1;
2343                        continue;
2344                }
2345                if (!strcmp(arg, "--index-info")) {
2346                        apply = 0;
2347                        show_index_info = 1;
2348                        continue;
2349                }
2350                if (!strcmp(arg, "-z")) {
2351                        line_termination = 0;
2352                        continue;
2353                }
2354                if (!strncmp(arg, "-C", 2)) {
2355                        p_context = strtoul(arg + 2, &end, 0);
2356                        if (*end != '\0')
2357                                die("unrecognized context count '%s'", arg + 2);
2358                        continue;
2359                }
2360                if (!strncmp(arg, "--whitespace=", 13)) {
2361                        whitespace_option = arg + 13;
2362                        parse_whitespace_option(arg + 13);
2363                        continue;
2364                }
2365                if (!strcmp(arg, "-R") || !strcmp(arg, "--reverse")) {
2366                        apply_in_reverse = 1;
2367                        continue;
2368                }
2369                if (!strcmp(arg, "--inaccurate-eof")) {
2370                        inaccurate_eof = 1;
2371                        continue;
2372                }
2373
2374                if (check_index && prefix_length < 0) {
2375                        prefix = setup_git_directory();
2376                        prefix_length = prefix ? strlen(prefix) : 0;
2377                        git_config(git_apply_config);
2378                        if (!whitespace_option && apply_default_whitespace)
2379                                parse_whitespace_option(apply_default_whitespace);
2380                }
2381                if (0 < prefix_length)
2382                        arg = prefix_filename(prefix, prefix_length, arg);
2383
2384                fd = open(arg, O_RDONLY);
2385                if (fd < 0)
2386                        usage(apply_usage);
2387                read_stdin = 0;
2388                set_default_whitespace_mode(whitespace_option);
2389                apply_patch(fd, arg, inaccurate_eof);
2390                close(fd);
2391        }
2392        set_default_whitespace_mode(whitespace_option);
2393        if (read_stdin)
2394                apply_patch(0, "<stdin>", inaccurate_eof);
2395        if (whitespace_error) {
2396                if (squelch_whitespace_errors &&
2397                    squelch_whitespace_errors < whitespace_error) {
2398                        int squelched =
2399                                whitespace_error - squelch_whitespace_errors;
2400                        fprintf(stderr, "warning: squelched %d whitespace error%s\n",
2401                                squelched,
2402                                squelched == 1 ? "" : "s");
2403                }
2404                if (new_whitespace == error_on_whitespace)
2405                        die("%d line%s add%s trailing whitespaces.",
2406                            whitespace_error,
2407                            whitespace_error == 1 ? "" : "s",
2408                            whitespace_error == 1 ? "s" : "");
2409                if (applied_after_stripping)
2410                        fprintf(stderr, "warning: %d line%s applied after"
2411                                " stripping trailing whitespaces.\n",
2412                                applied_after_stripping,
2413                                applied_after_stripping == 1 ? "" : "s");
2414                else if (whitespace_error)
2415                        fprintf(stderr, "warning: %d line%s add%s trailing"
2416                                " whitespaces.\n",
2417                                whitespace_error,
2418                                whitespace_error == 1 ? "" : "s",
2419                                whitespace_error == 1 ? "s" : "");
2420        }
2421
2422        if (write_index) {
2423                if (write_cache(newfd, active_cache, active_nr) ||
2424                    close(newfd) || commit_lock_file(&lock_file))
2425                        die("Unable to write new index file");
2426        }
2427
2428        return 0;
2429}