The war on trailing whitespace
[git.git] / apply.c
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 "quote.h"
12
13 //  --check turns on checking that the working tree matches the
14 //    files that are being modified, but doesn't apply the patch
15 //  --stat does just a diffstat, and doesn't actually apply
16 //  --numstat does numeric diffstat, and doesn't actually apply
17 //  --index-info shows the old and new index info for paths if available.
18 //
19 static const char *prefix;
20 static int prefix_length = -1;
21
22 static int p_value = 1;
23 static int allow_binary_replacement = 0;
24 static int check_index = 0;
25 static int write_index = 0;
26 static int diffstat = 0;
27 static int numstat = 0;
28 static int summary = 0;
29 static int check = 0;
30 static int apply = 1;
31 static int no_add = 0;
32 static int show_index_info = 0;
33 static int line_termination = '\n';
34 static const char apply_usage[] =
35 "git-apply [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [-z] [-pNUM] <patch>...";
36
37 static enum whitespace_eol {
38         nowarn,
39         warn_on_whitespace,
40         error_on_whitespace
41 } new_whitespace = nowarn;
42
43 /*
44  * For "diff-stat" like behaviour, we keep track of the biggest change
45  * we've seen, and the longest filename. That allows us to do simple
46  * scaling.
47  */
48 static int max_change, max_len;
49
50 /*
51  * Various "current state", notably line numbers and what
52  * file (and how) we're patching right now.. The "is_xxxx"
53  * things are flags, where -1 means "don't know yet".
54  */
55 static int linenr = 1;
56
57 struct fragment {
58         unsigned long oldpos, oldlines;
59         unsigned long newpos, newlines;
60         const char *patch;
61         int size;
62         struct fragment *next;
63 };
64
65 struct patch {
66         char *new_name, *old_name, *def_name;
67         unsigned int old_mode, new_mode;
68         int is_rename, is_copy, is_new, is_delete, is_binary;
69         int lines_added, lines_deleted;
70         int score;
71         struct fragment *fragments;
72         char *result;
73         unsigned long resultsize;
74         char old_sha1_prefix[41];
75         char new_sha1_prefix[41];
76         struct patch *next;
77 };
78
79 #define CHUNKSIZE (8192)
80 #define SLOP (16)
81
82 static void *read_patch_file(int fd, unsigned long *sizep)
83 {
84         unsigned long size = 0, alloc = CHUNKSIZE;
85         void *buffer = xmalloc(alloc);
86
87         for (;;) {
88                 int nr = alloc - size;
89                 if (nr < 1024) {
90                         alloc += CHUNKSIZE;
91                         buffer = xrealloc(buffer, alloc);
92                         nr = alloc - size;
93                 }
94                 nr = xread(fd, buffer + size, nr);
95                 if (!nr)
96                         break;
97                 if (nr < 0)
98                         die("git-apply: read returned %s", strerror(errno));
99                 size += nr;
100         }
101         *sizep = size;
102
103         /*
104          * Make sure that we have some slop in the buffer
105          * so that we can do speculative "memcmp" etc, and
106          * see to it that it is NUL-filled.
107          */
108         if (alloc < size + SLOP)
109                 buffer = xrealloc(buffer, size + SLOP);
110         memset(buffer + size, 0, SLOP);
111         return buffer;
112 }
113
114 static unsigned long linelen(const char *buffer, unsigned long size)
115 {
116         unsigned long len = 0;
117         while (size--) {
118                 len++;
119                 if (*buffer++ == '\n')
120                         break;
121         }
122         return len;
123 }
124
125 static int is_dev_null(const char *str)
126 {
127         return !memcmp("/dev/null", str, 9) && isspace(str[9]);
128 }
129
130 #define TERM_SPACE      1
131 #define TERM_TAB        2
132
133 static int name_terminate(const char *name, int namelen, int c, int terminate)
134 {
135         if (c == ' ' && !(terminate & TERM_SPACE))
136                 return 0;
137         if (c == '\t' && !(terminate & TERM_TAB))
138                 return 0;
139
140         return 1;
141 }
142
143 static char * find_name(const char *line, char *def, int p_value, int terminate)
144 {
145         int len;
146         const char *start = line;
147         char *name;
148
149         if (*line == '"') {
150                 /* Proposed "new-style" GNU patch/diff format; see
151                  * http://marc.theaimsgroup.com/?l=git&m=112927316408690&w=2
152                  */
153                 name = unquote_c_style(line, NULL);
154                 if (name) {
155                         char *cp = name;
156                         while (p_value) {
157                                 cp = strchr(name, '/');
158                                 if (!cp)
159                                         break;
160                                 cp++;
161                                 p_value--;
162                         }
163                         if (cp) {
164                                 /* name can later be freed, so we need
165                                  * to memmove, not just return cp
166                                  */
167                                 memmove(name, cp, strlen(cp) + 1);
168                                 free(def);
169                                 return name;
170                         }
171                         else {
172                                 free(name);
173                                 name = NULL;
174                         }
175                 }
176         }
177
178         for (;;) {
179                 char c = *line;
180
181                 if (isspace(c)) {
182                         if (c == '\n')
183                                 break;
184                         if (name_terminate(start, line-start, c, terminate))
185                                 break;
186                 }
187                 line++;
188                 if (c == '/' && !--p_value)
189                         start = line;
190         }
191         if (!start)
192                 return def;
193         len = line - start;
194         if (!len)
195                 return def;
196
197         /*
198          * Generally we prefer the shorter name, especially
199          * if the other one is just a variation of that with
200          * something else tacked on to the end (ie "file.orig"
201          * or "file~").
202          */
203         if (def) {
204                 int deflen = strlen(def);
205                 if (deflen < len && !strncmp(start, def, deflen))
206                         return def;
207         }
208
209         name = xmalloc(len + 1);
210         memcpy(name, start, len);
211         name[len] = 0;
212         free(def);
213         return name;
214 }
215
216 /*
217  * Get the name etc info from the --/+++ lines of a traditional patch header
218  *
219  * NOTE! This hardcodes "-p1" behaviour in filename detection.
220  *
221  * FIXME! The end-of-filename heuristics are kind of screwy. For existing
222  * files, we can happily check the index for a match, but for creating a
223  * new file we should try to match whatever "patch" does. I have no idea.
224  */
225 static void parse_traditional_patch(const char *first, const char *second, struct patch *patch)
226 {
227         char *name;
228
229         first += 4;     // skip "--- "
230         second += 4;    // skip "+++ "
231         if (is_dev_null(first)) {
232                 patch->is_new = 1;
233                 patch->is_delete = 0;
234                 name = find_name(second, NULL, p_value, TERM_SPACE | TERM_TAB);
235                 patch->new_name = name;
236         } else if (is_dev_null(second)) {
237                 patch->is_new = 0;
238                 patch->is_delete = 1;
239                 name = find_name(first, NULL, p_value, TERM_SPACE | TERM_TAB);
240                 patch->old_name = name;
241         } else {
242                 name = find_name(first, NULL, p_value, TERM_SPACE | TERM_TAB);
243                 name = find_name(second, name, p_value, TERM_SPACE | TERM_TAB);
244                 patch->old_name = patch->new_name = name;
245         }
246         if (!name)
247                 die("unable to find filename in patch at line %d", linenr);
248 }
249
250 static int gitdiff_hdrend(const char *line, struct patch *patch)
251 {
252         return -1;
253 }
254
255 /*
256  * We're anal about diff header consistency, to make
257  * sure that we don't end up having strange ambiguous
258  * patches floating around.
259  *
260  * As a result, gitdiff_{old|new}name() will check
261  * their names against any previous information, just
262  * to make sure..
263  */
264 static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name, const char *oldnew)
265 {
266         if (!orig_name && !isnull)
267                 return find_name(line, NULL, 1, 0);
268
269         if (orig_name) {
270                 int len;
271                 const char *name;
272                 char *another;
273                 name = orig_name;
274                 len = strlen(name);
275                 if (isnull)
276                         die("git-apply: bad git-diff - expected /dev/null, got %s on line %d", name, linenr);
277                 another = find_name(line, NULL, 1, 0);
278                 if (!another || memcmp(another, name, len))
279                         die("git-apply: bad git-diff - inconsistent %s filename on line %d", oldnew, linenr);
280                 free(another);
281                 return orig_name;
282         }
283         else {
284                 /* expect "/dev/null" */
285                 if (memcmp("/dev/null", line, 9) || line[9] != '\n')
286                         die("git-apply: bad git-diff - expected /dev/null on line %d", linenr);
287                 return NULL;
288         }
289 }
290
291 static int gitdiff_oldname(const char *line, struct patch *patch)
292 {
293         patch->old_name = gitdiff_verify_name(line, patch->is_new, patch->old_name, "old");
294         return 0;
295 }
296
297 static int gitdiff_newname(const char *line, struct patch *patch)
298 {
299         patch->new_name = gitdiff_verify_name(line, patch->is_delete, patch->new_name, "new");
300         return 0;
301 }
302
303 static int gitdiff_oldmode(const char *line, struct patch *patch)
304 {
305         patch->old_mode = strtoul(line, NULL, 8);
306         return 0;
307 }
308
309 static int gitdiff_newmode(const char *line, struct patch *patch)
310 {
311         patch->new_mode = strtoul(line, NULL, 8);
312         return 0;
313 }
314
315 static int gitdiff_delete(const char *line, struct patch *patch)
316 {
317         patch->is_delete = 1;
318         patch->old_name = patch->def_name;
319         return gitdiff_oldmode(line, patch);
320 }
321
322 static int gitdiff_newfile(const char *line, struct patch *patch)
323 {
324         patch->is_new = 1;
325         patch->new_name = patch->def_name;
326         return gitdiff_newmode(line, patch);
327 }
328
329 static int gitdiff_copysrc(const char *line, struct patch *patch)
330 {
331         patch->is_copy = 1;
332         patch->old_name = find_name(line, NULL, 0, 0);
333         return 0;
334 }
335
336 static int gitdiff_copydst(const char *line, struct patch *patch)
337 {
338         patch->is_copy = 1;
339         patch->new_name = find_name(line, NULL, 0, 0);
340         return 0;
341 }
342
343 static int gitdiff_renamesrc(const char *line, struct patch *patch)
344 {
345         patch->is_rename = 1;
346         patch->old_name = find_name(line, NULL, 0, 0);
347         return 0;
348 }
349
350 static int gitdiff_renamedst(const char *line, struct patch *patch)
351 {
352         patch->is_rename = 1;
353         patch->new_name = find_name(line, NULL, 0, 0);
354         return 0;
355 }
356
357 static int gitdiff_similarity(const char *line, struct patch *patch)
358 {
359         if ((patch->score = strtoul(line, NULL, 10)) == ULONG_MAX)
360                 patch->score = 0;
361         return 0;
362 }
363
364 static int gitdiff_dissimilarity(const char *line, struct patch *patch)
365 {
366         if ((patch->score = strtoul(line, NULL, 10)) == ULONG_MAX)
367                 patch->score = 0;
368         return 0;
369 }
370
371 static int gitdiff_index(const char *line, struct patch *patch)
372 {
373         /* index line is N hexadecimal, "..", N hexadecimal,
374          * and optional space with octal mode.
375          */
376         const char *ptr, *eol;
377         int len;
378
379         ptr = strchr(line, '.');
380         if (!ptr || ptr[1] != '.' || 40 < ptr - line)
381                 return 0;
382         len = ptr - line;
383         memcpy(patch->old_sha1_prefix, line, len);
384         patch->old_sha1_prefix[len] = 0;
385
386         line = ptr + 2;
387         ptr = strchr(line, ' ');
388         eol = strchr(line, '\n');
389
390         if (!ptr || eol < ptr)
391                 ptr = eol;
392         len = ptr - line;
393
394         if (40 < len)
395                 return 0;
396         memcpy(patch->new_sha1_prefix, line, len);
397         patch->new_sha1_prefix[len] = 0;
398         if (*ptr == ' ')
399                 patch->new_mode = patch->old_mode = strtoul(ptr+1, NULL, 8);
400         return 0;
401 }
402
403 /*
404  * This is normal for a diff that doesn't change anything: we'll fall through
405  * into the next diff. Tell the parser to break out.
406  */
407 static int gitdiff_unrecognized(const char *line, struct patch *patch)
408 {
409         return -1;
410 }
411
412 static const char *stop_at_slash(const char *line, int llen)
413 {
414         int i;
415
416         for (i = 0; i < llen; i++) {
417                 int ch = line[i];
418                 if (ch == '/')
419                         return line + i;
420         }
421         return NULL;
422 }
423
424 /* This is to extract the same name that appears on "diff --git"
425  * line.  We do not find and return anything if it is a rename
426  * patch, and it is OK because we will find the name elsewhere.
427  * We need to reliably find name only when it is mode-change only,
428  * creation or deletion of an empty file.  In any of these cases,
429  * both sides are the same name under a/ and b/ respectively.
430  */
431 static char *git_header_name(char *line, int llen)
432 {
433         int len;
434         const char *name;
435         const char *second = NULL;
436
437         line += strlen("diff --git ");
438         llen -= strlen("diff --git ");
439
440         if (*line == '"') {
441                 const char *cp;
442                 char *first = unquote_c_style(line, &second);
443                 if (!first)
444                         return NULL;
445
446                 /* advance to the first slash */
447                 cp = stop_at_slash(first, strlen(first));
448                 if (!cp || cp == first) {
449                         /* we do not accept absolute paths */
450                 free_first_and_fail:
451                         free(first);
452                         return NULL;
453                 }
454                 len = strlen(cp+1);
455                 memmove(first, cp+1, len+1); /* including NUL */
456
457                 /* second points at one past closing dq of name.
458                  * find the second name.
459                  */
460                 while ((second < line + llen) && isspace(*second))
461                         second++;
462
463                 if (line + llen <= second)
464                         goto free_first_and_fail;
465                 if (*second == '"') {
466                         char *sp = unquote_c_style(second, NULL);
467                         if (!sp)
468                                 goto free_first_and_fail;
469                         cp = stop_at_slash(sp, strlen(sp));
470                         if (!cp || cp == sp) {
471                         free_both_and_fail:
472                                 free(sp);
473                                 goto free_first_and_fail;
474                         }
475                         /* They must match, otherwise ignore */
476                         if (strcmp(cp+1, first))
477                                 goto free_both_and_fail;
478                         free(sp);
479                         return first;
480                 }
481
482                 /* unquoted second */
483                 cp = stop_at_slash(second, line + llen - second);
484                 if (!cp || cp == second)
485                         goto free_first_and_fail;
486                 cp++;
487                 if (line + llen - cp != len + 1 ||
488                     memcmp(first, cp, len))
489                         goto free_first_and_fail;
490                 return first;
491         }
492
493         /* unquoted first name */
494         name = stop_at_slash(line, llen);
495         if (!name || name == line)
496                 return NULL;
497
498         name++;
499
500         /* since the first name is unquoted, a dq if exists must be
501          * the beginning of the second name.
502          */
503         for (second = name; second < line + llen; second++) {
504                 if (*second == '"') {
505                         const char *cp = second;
506                         const char *np;
507                         char *sp = unquote_c_style(second, NULL);
508
509                         if (!sp)
510                                 return NULL;
511                         np = stop_at_slash(sp, strlen(sp));
512                         if (!np || np == sp) {
513                         free_second_and_fail:
514                                 free(sp);
515                                 return NULL;
516                         }
517                         np++;
518                         len = strlen(np);
519                         if (len < cp - name &&
520                             !strncmp(np, name, len) &&
521                             isspace(name[len])) {
522                                 /* Good */
523                                 memmove(sp, np, len + 1);
524                                 return sp;
525                         }
526                         goto free_second_and_fail;
527                 }
528         }
529
530         /*
531          * Accept a name only if it shows up twice, exactly the same
532          * form.
533          */
534         for (len = 0 ; ; len++) {
535                 char c = name[len];
536
537                 switch (c) {
538                 default:
539                         continue;
540                 case '\n':
541                         return NULL;
542                 case '\t': case ' ':
543                         second = name+len;
544                         for (;;) {
545                                 char c = *second++;
546                                 if (c == '\n')
547                                         return NULL;
548                                 if (c == '/')
549                                         break;
550                         }
551                         if (second[len] == '\n' && !memcmp(name, second, len)) {
552                                 char *ret = xmalloc(len + 1);
553                                 memcpy(ret, name, len);
554                                 ret[len] = 0;
555                                 return ret;
556                         }
557                 }
558         }
559         return NULL;
560 }
561
562 /* Verify that we recognize the lines following a git header */
563 static int parse_git_header(char *line, int len, unsigned int size, struct patch *patch)
564 {
565         unsigned long offset;
566
567         /* A git diff has explicit new/delete information, so we don't guess */
568         patch->is_new = 0;
569         patch->is_delete = 0;
570
571         /*
572          * Some things may not have the old name in the
573          * rest of the headers anywhere (pure mode changes,
574          * or removing or adding empty files), so we get
575          * the default name from the header.
576          */
577         patch->def_name = git_header_name(line, len);
578
579         line += len;
580         size -= len;
581         linenr++;
582         for (offset = len ; size > 0 ; offset += len, size -= len, line += len, linenr++) {
583                 static const struct opentry {
584                         const char *str;
585                         int (*fn)(const char *, struct patch *);
586                 } optable[] = {
587                         { "@@ -", gitdiff_hdrend },
588                         { "--- ", gitdiff_oldname },
589                         { "+++ ", gitdiff_newname },
590                         { "old mode ", gitdiff_oldmode },
591                         { "new mode ", gitdiff_newmode },
592                         { "deleted file mode ", gitdiff_delete },
593                         { "new file mode ", gitdiff_newfile },
594                         { "copy from ", gitdiff_copysrc },
595                         { "copy to ", gitdiff_copydst },
596                         { "rename old ", gitdiff_renamesrc },
597                         { "rename new ", gitdiff_renamedst },
598                         { "rename from ", gitdiff_renamesrc },
599                         { "rename to ", gitdiff_renamedst },
600                         { "similarity index ", gitdiff_similarity },
601                         { "dissimilarity index ", gitdiff_dissimilarity },
602                         { "index ", gitdiff_index },
603                         { "", gitdiff_unrecognized },
604                 };
605                 int i;
606
607                 len = linelen(line, size);
608                 if (!len || line[len-1] != '\n')
609                         break;
610                 for (i = 0; i < sizeof(optable) / sizeof(optable[0]); i++) {
611                         const struct opentry *p = optable + i;
612                         int oplen = strlen(p->str);
613                         if (len < oplen || memcmp(p->str, line, oplen))
614                                 continue;
615                         if (p->fn(line + oplen, patch) < 0)
616                                 return offset;
617                         break;
618                 }
619         }
620
621         return offset;
622 }
623
624 static int parse_num(const char *line, unsigned long *p)
625 {
626         char *ptr;
627
628         if (!isdigit(*line))
629                 return 0;
630         *p = strtoul(line, &ptr, 10);
631         return ptr - line;
632 }
633
634 static int parse_range(const char *line, int len, int offset, const char *expect,
635                         unsigned long *p1, unsigned long *p2)
636 {
637         int digits, ex;
638
639         if (offset < 0 || offset >= len)
640                 return -1;
641         line += offset;
642         len -= offset;
643
644         digits = parse_num(line, p1);
645         if (!digits)
646                 return -1;
647
648         offset += digits;
649         line += digits;
650         len -= digits;
651
652         *p2 = *p1;
653         if (*line == ',') {
654                 digits = parse_num(line+1, p2);
655                 if (!digits)
656                         return -1;
657
658                 offset += digits+1;
659                 line += digits+1;
660                 len -= digits+1;
661         }
662
663         ex = strlen(expect);
664         if (ex > len)
665                 return -1;
666         if (memcmp(line, expect, ex))
667                 return -1;
668
669         return offset + ex;
670 }
671
672 /*
673  * Parse a unified diff fragment header of the
674  * form "@@ -a,b +c,d @@"
675  */
676 static int parse_fragment_header(char *line, int len, struct fragment *fragment)
677 {
678         int offset;
679
680         if (!len || line[len-1] != '\n')
681                 return -1;
682
683         /* Figure out the number of lines in a fragment */
684         offset = parse_range(line, len, 4, " +", &fragment->oldpos, &fragment->oldlines);
685         offset = parse_range(line, len, offset, " @@", &fragment->newpos, &fragment->newlines);
686
687         return offset;
688 }
689
690 static int find_header(char *line, unsigned long size, int *hdrsize, struct patch *patch)
691 {
692         unsigned long offset, len;
693
694         patch->is_rename = patch->is_copy = 0;
695         patch->is_new = patch->is_delete = -1;
696         patch->old_mode = patch->new_mode = 0;
697         patch->old_name = patch->new_name = NULL;
698         for (offset = 0; size > 0; offset += len, size -= len, line += len, linenr++) {
699                 unsigned long nextlen;
700
701                 len = linelen(line, size);
702                 if (!len)
703                         break;
704
705                 /* Testing this early allows us to take a few shortcuts.. */
706                 if (len < 6)
707                         continue;
708
709                 /*
710                  * Make sure we don't find any unconnected patch fragmants.
711                  * That's a sign that we didn't find a header, and that a
712                  * patch has become corrupted/broken up.
713                  */
714                 if (!memcmp("@@ -", line, 4)) {
715                         struct fragment dummy;
716                         if (parse_fragment_header(line, len, &dummy) < 0)
717                                 continue;
718                         error("patch fragment without header at line %d: %.*s", linenr, (int)len-1, line);
719                 }
720
721                 if (size < len + 6)
722                         break;
723
724                 /*
725                  * Git patch? It might not have a real patch, just a rename
726                  * or mode change, so we handle that specially
727                  */
728                 if (!memcmp("diff --git ", line, 11)) {
729                         int git_hdr_len = parse_git_header(line, len, size, patch);
730                         if (git_hdr_len <= len)
731                                 continue;
732                         if (!patch->old_name && !patch->new_name) {
733                                 if (!patch->def_name)
734                                         die("git diff header lacks filename information (line %d)", linenr);
735                                 patch->old_name = patch->new_name = patch->def_name;
736                         }
737                         *hdrsize = git_hdr_len;
738                         return offset;
739                 }
740
741                 /** --- followed by +++ ? */
742                 if (memcmp("--- ", line,  4) || memcmp("+++ ", line + len, 4))
743                         continue;
744
745                 /*
746                  * We only accept unified patches, so we want it to
747                  * at least have "@@ -a,b +c,d @@\n", which is 14 chars
748                  * minimum
749                  */
750                 nextlen = linelen(line + len, size - len);
751                 if (size < nextlen + 14 || memcmp("@@ -", line + len + nextlen, 4))
752                         continue;
753
754                 /* Ok, we'll consider it a patch */
755                 parse_traditional_patch(line, line+len, patch);
756                 *hdrsize = len + nextlen;
757                 linenr += 2;
758                 return offset;
759         }
760         return -1;
761 }
762
763 /*
764  * Parse a unified diff. Note that this really needs
765  * to parse each fragment separately, since the only
766  * way to know the difference between a "---" that is
767  * part of a patch, and a "---" that starts the next
768  * patch is to look at the line counts..
769  */
770 static int parse_fragment(char *line, unsigned long size, struct patch *patch, struct fragment *fragment)
771 {
772         int added, deleted;
773         int len = linelen(line, size), offset;
774         unsigned long oldlines, newlines;
775
776         offset = parse_fragment_header(line, len, fragment);
777         if (offset < 0)
778                 return -1;
779         oldlines = fragment->oldlines;
780         newlines = fragment->newlines;
781
782         if (patch->is_new < 0) {
783                 patch->is_new =  !oldlines;
784                 if (!oldlines)
785                         patch->old_name = NULL;
786         }
787         if (patch->is_delete < 0) {
788                 patch->is_delete = !newlines;
789                 if (!newlines)
790                         patch->new_name = NULL;
791         }
792
793         if (patch->is_new != !oldlines)
794                 return error("new file depends on old contents");
795         if (patch->is_delete != !newlines) {
796                 if (newlines)
797                         return error("deleted file still has contents");
798                 fprintf(stderr, "** warning: file %s becomes empty but is not deleted\n", patch->new_name);
799         }
800
801         /* Parse the thing.. */
802         line += len;
803         size -= len;
804         linenr++;
805         added = deleted = 0;
806         for (offset = len; size > 0; offset += len, size -= len, line += len, linenr++) {
807                 if (!oldlines && !newlines)
808                         break;
809                 len = linelen(line, size);
810                 if (!len || line[len-1] != '\n')
811                         return -1;
812                 switch (*line) {
813                 default:
814                         return -1;
815                 case ' ':
816                         oldlines--;
817                         newlines--;
818                         break;
819                 case '-':
820                         deleted++;
821                         oldlines--;
822                         break;
823                 case '+':
824                         /*
825                          * We know len is at least two, since we have a '+' and
826                          * we checked that the last character was a '\n' above
827                          */
828                         if (isspace(line[len-2])) {
829                                 switch (new_whitespace) {
830                                 case nowarn:
831                                         break;
832                                 case warn_on_whitespace:
833                                         new_whitespace = nowarn;        /* Just once */
834                                         error("Added whitespace at end of line at line %d", linenr);
835                                         break;
836                                 case error_on_whitespace:
837                                         die("Added whitespace at end of line at line %d", linenr);
838                                 }
839                         }
840                         added++;
841                         newlines--;
842                         break;
843
844                 /* We allow "\ No newline at end of file". Depending
845                  * on locale settings when the patch was produced we
846                  * don't know what this line looks like. The only
847                  * thing we do know is that it begins with "\ ".
848                  * Checking for 12 is just for sanity check -- any
849                  * l10n of "\ No newline..." is at least that long.
850                  */
851                 case '\\':
852                         if (len < 12 || memcmp(line, "\\ ", 2))
853                                 return -1;
854                         break;
855                 }
856         }
857         /* If a fragment ends with an incomplete line, we failed to include
858          * it in the above loop because we hit oldlines == newlines == 0
859          * before seeing it.
860          */
861         if (12 < size && !memcmp(line, "\\ ", 2))
862                 offset += linelen(line, size);
863
864         patch->lines_added += added;
865         patch->lines_deleted += deleted;
866         return offset;
867 }
868
869 static int parse_single_patch(char *line, unsigned long size, struct patch *patch)
870 {
871         unsigned long offset = 0;
872         struct fragment **fragp = &patch->fragments;
873
874         while (size > 4 && !memcmp(line, "@@ -", 4)) {
875                 struct fragment *fragment;
876                 int len;
877
878                 fragment = xmalloc(sizeof(*fragment));
879                 memset(fragment, 0, sizeof(*fragment));
880                 len = parse_fragment(line, size, patch, fragment);
881                 if (len <= 0)
882                         die("corrupt patch at line %d", linenr);
883
884                 fragment->patch = line;
885                 fragment->size = len;
886
887                 *fragp = fragment;
888                 fragp = &fragment->next;
889
890                 offset += len;
891                 line += len;
892                 size -= len;
893         }
894         return offset;
895 }
896
897 static inline int metadata_changes(struct patch *patch)
898 {
899         return  patch->is_rename > 0 ||
900                 patch->is_copy > 0 ||
901                 patch->is_new > 0 ||
902                 patch->is_delete ||
903                 (patch->old_mode && patch->new_mode &&
904                  patch->old_mode != patch->new_mode);
905 }
906
907 static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)
908 {
909         int hdrsize, patchsize;
910         int offset = find_header(buffer, size, &hdrsize, patch);
911
912         if (offset < 0)
913                 return offset;
914
915         patchsize = parse_single_patch(buffer + offset + hdrsize, size - offset - hdrsize, patch);
916
917         if (!patchsize) {
918                 static const char *binhdr[] = {
919                         "Binary files ",
920                         "Files ",
921                         NULL,
922                 };
923                 int i;
924                 int hd = hdrsize + offset;
925                 unsigned long llen = linelen(buffer + hd, size - hd);
926
927                 if (!memcmp(" differ\n", buffer + hd + llen - 8, 8))
928                         for (i = 0; binhdr[i]; i++) {
929                                 int len = strlen(binhdr[i]);
930                                 if (len < size - hd &&
931                                     !memcmp(binhdr[i], buffer + hd, len)) {
932                                         patch->is_binary = 1;
933                                         break;
934                                 }
935                         }
936
937                 /* Empty patch cannot be applied if:
938                  * - it is a binary patch and we do not do binary_replace, or
939                  * - text patch without metadata change
940                  */
941                 if ((apply || check) &&
942                     (patch->is_binary
943                      ? !allow_binary_replacement
944                      : !metadata_changes(patch)))
945                         die("patch with only garbage at line %d", linenr);
946         }
947
948         return offset + hdrsize + patchsize;
949 }
950
951 static const char pluses[] = "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";
952 static const char minuses[]= "----------------------------------------------------------------------";
953
954 static void show_stats(struct patch *patch)
955 {
956         const char *prefix = "";
957         char *name = patch->new_name;
958         char *qname = NULL;
959         int len, max, add, del, total;
960
961         if (!name)
962                 name = patch->old_name;
963
964         if (0 < (len = quote_c_style(name, NULL, NULL, 0))) {
965                 qname = xmalloc(len + 1);
966                 quote_c_style(name, qname, NULL, 0);
967                 name = qname;
968         }
969
970         /*
971          * "scale" the filename
972          */
973         len = strlen(name);
974         max = max_len;
975         if (max > 50)
976                 max = 50;
977         if (len > max) {
978                 char *slash;
979                 prefix = "...";
980                 max -= 3;
981                 name += len - max;
982                 slash = strchr(name, '/');
983                 if (slash)
984                         name = slash;
985         }
986         len = max;
987
988         /*
989          * scale the add/delete
990          */
991         max = max_change;
992         if (max + len > 70)
993                 max = 70 - len;
994
995         add = patch->lines_added;
996         del = patch->lines_deleted;
997         total = add + del;
998
999         if (max_change > 0) {
1000                 total = (total * max + max_change / 2) / max_change;
1001                 add = (add * max + max_change / 2) / max_change;
1002                 del = total - add;
1003         }
1004         if (patch->is_binary)
1005                 printf(" %s%-*s |  Bin\n", prefix, len, name);
1006         else
1007                 printf(" %s%-*s |%5d %.*s%.*s\n", prefix,
1008                        len, name, patch->lines_added + patch->lines_deleted,
1009                        add, pluses, del, minuses);
1010         if (qname)
1011                 free(qname);
1012 }
1013
1014 static int read_old_data(struct stat *st, const char *path, void *buf, unsigned long size)
1015 {
1016         int fd;
1017         unsigned long got;
1018
1019         switch (st->st_mode & S_IFMT) {
1020         case S_IFLNK:
1021                 return readlink(path, buf, size);
1022         case S_IFREG:
1023                 fd = open(path, O_RDONLY);
1024                 if (fd < 0)
1025                         return error("unable to open %s", path);
1026                 got = 0;
1027                 for (;;) {
1028                         int ret = xread(fd, buf + got, size - got);
1029                         if (ret <= 0)
1030                                 break;
1031                         got += ret;
1032                 }
1033                 close(fd);
1034                 return got;
1035
1036         default:
1037                 return -1;
1038         }
1039 }
1040
1041 static int find_offset(const char *buf, unsigned long size, const char *fragment, unsigned long fragsize, int line)
1042 {
1043         int i;
1044         unsigned long start, backwards, forwards;
1045
1046         if (fragsize > size)
1047                 return -1;
1048
1049         start = 0;
1050         if (line > 1) {
1051                 unsigned long offset = 0;
1052                 i = line-1;
1053                 while (offset + fragsize <= size) {
1054                         if (buf[offset++] == '\n') {
1055                                 start = offset;
1056                                 if (!--i)
1057                                         break;
1058                         }
1059                 }
1060         }
1061
1062         /* Exact line number? */
1063         if (!memcmp(buf + start, fragment, fragsize))
1064                 return start;
1065
1066         /*
1067          * There's probably some smart way to do this, but I'll leave
1068          * that to the smart and beautiful people. I'm simple and stupid.
1069          */
1070         backwards = start;
1071         forwards = start;
1072         for (i = 0; ; i++) {
1073                 unsigned long try;
1074                 int n;
1075
1076                 /* "backward" */
1077                 if (i & 1) {
1078                         if (!backwards) {
1079                                 if (forwards + fragsize > size)
1080                                         break;
1081                                 continue;
1082                         }
1083                         do {
1084                                 --backwards;
1085                         } while (backwards && buf[backwards-1] != '\n');
1086                         try = backwards;
1087                 } else {
1088                         while (forwards + fragsize <= size) {
1089                                 if (buf[forwards++] == '\n')
1090                                         break;
1091                         }
1092                         try = forwards;
1093                 }
1094
1095                 if (try + fragsize > size)
1096                         continue;
1097                 if (memcmp(buf + try, fragment, fragsize))
1098                         continue;
1099                 n = (i >> 1)+1;
1100                 if (i & 1)
1101                         n = -n;
1102                 return try;
1103         }
1104
1105         /*
1106          * We should start searching forward and backward.
1107          */
1108         return -1;
1109 }
1110
1111 struct buffer_desc {
1112         char *buffer;
1113         unsigned long size;
1114         unsigned long alloc;
1115 };
1116
1117 static int apply_one_fragment(struct buffer_desc *desc, struct fragment *frag)
1118 {
1119         char *buf = desc->buffer;
1120         const char *patch = frag->patch;
1121         int offset, size = frag->size;
1122         char *old = xmalloc(size);
1123         char *new = xmalloc(size);
1124         int oldsize = 0, newsize = 0;
1125
1126         while (size > 0) {
1127                 int len = linelen(patch, size);
1128                 int plen;
1129
1130                 if (!len)
1131                         break;
1132
1133                 /*
1134                  * "plen" is how much of the line we should use for
1135                  * the actual patch data. Normally we just remove the
1136                  * first character on the line, but if the line is
1137                  * followed by "\ No newline", then we also remove the
1138                  * last one (which is the newline, of course).
1139                  */
1140                 plen = len-1;
1141                 if (len < size && patch[len] == '\\')
1142                         plen--;
1143                 switch (*patch) {
1144                 case ' ':
1145                 case '-':
1146                         memcpy(old + oldsize, patch + 1, plen);
1147                         oldsize += plen;
1148                         if (*patch == '-')
1149                                 break;
1150                 /* Fall-through for ' ' */
1151                 case '+':
1152                         if (*patch != '+' || !no_add) {
1153                                 memcpy(new + newsize, patch + 1, plen);
1154                                 newsize += plen;
1155                         }
1156                         break;
1157                 case '@': case '\\':
1158                         /* Ignore it, we already handled it */
1159                         break;
1160                 default:
1161                         return -1;
1162                 }
1163                 patch += len;
1164                 size -= len;
1165         }
1166
1167         offset = find_offset(buf, desc->size, old, oldsize, frag->newpos);
1168         if (offset >= 0) {
1169                 int diff = newsize - oldsize;
1170                 unsigned long size = desc->size + diff;
1171                 unsigned long alloc = desc->alloc;
1172
1173                 if (size > alloc) {
1174                         alloc = size + 8192;
1175                         desc->alloc = alloc;
1176                         buf = xrealloc(buf, alloc);
1177                         desc->buffer = buf;
1178                 }
1179                 desc->size = size;
1180                 memmove(buf + offset + newsize, buf + offset + oldsize, size - offset - newsize);
1181                 memcpy(buf + offset, new, newsize);
1182                 offset = 0;
1183         }
1184
1185         free(old);
1186         free(new);
1187         return offset;
1188 }
1189
1190 static int apply_fragments(struct buffer_desc *desc, struct patch *patch)
1191 {
1192         struct fragment *frag = patch->fragments;
1193         const char *name = patch->old_name ? patch->old_name : patch->new_name;
1194
1195         if (patch->is_binary) {
1196                 unsigned char sha1[20];
1197
1198                 if (!allow_binary_replacement)
1199                         return error("cannot apply binary patch to '%s' "
1200                                      "without --allow-binary-replacement",
1201                                      name);
1202
1203                 /* For safety, we require patch index line to contain
1204                  * full 40-byte textual SHA1 for old and new, at least for now.
1205                  */
1206                 if (strlen(patch->old_sha1_prefix) != 40 ||
1207                     strlen(patch->new_sha1_prefix) != 40 ||
1208                     get_sha1_hex(patch->old_sha1_prefix, sha1) ||
1209                     get_sha1_hex(patch->new_sha1_prefix, sha1))
1210                         return error("cannot apply binary patch to '%s' "
1211                                      "without full index line", name);
1212
1213                 if (patch->old_name) {
1214                         unsigned char hdr[50];
1215                         int hdrlen;
1216
1217                         /* See if the old one matches what the patch
1218                          * applies to.
1219                          */
1220                         write_sha1_file_prepare(desc->buffer, desc->size,
1221                                                 "blob", sha1, hdr, &hdrlen);
1222                         if (strcmp(sha1_to_hex(sha1), patch->old_sha1_prefix))
1223                                 return error("the patch applies to '%s' (%s), "
1224                                              "which does not match the "
1225                                              "current contents.",
1226                                              name, sha1_to_hex(sha1));
1227                 }
1228                 else {
1229                         /* Otherwise, the old one must be empty. */
1230                         if (desc->size)
1231                                 return error("the patch applies to an empty "
1232                                              "'%s' but it is not empty", name);
1233                 }
1234
1235                 /* For now, we do not record post-image data in the patch,
1236                  * and require the object already present in the recipient's
1237                  * object database.
1238                  */
1239                 if (desc->buffer) {
1240                         free(desc->buffer);
1241                         desc->alloc = desc->size = 0;
1242                 }
1243                 get_sha1_hex(patch->new_sha1_prefix, sha1);
1244
1245                 if (memcmp(sha1, null_sha1, 20)) {
1246                         char type[10];
1247                         unsigned long size;
1248
1249                         desc->buffer = read_sha1_file(sha1, type, &size);
1250                         if (!desc->buffer)
1251                                 return error("the necessary postimage %s for "
1252                                              "'%s' does not exist",
1253                                              patch->new_sha1_prefix, name);
1254                         desc->alloc = desc->size = size;
1255                 }
1256
1257                 return 0;
1258         }
1259
1260         while (frag) {
1261                 if (apply_one_fragment(desc, frag) < 0)
1262                         return error("patch failed: %s:%ld",
1263                                      name, frag->oldpos);
1264                 frag = frag->next;
1265         }
1266         return 0;
1267 }
1268
1269 static int apply_data(struct patch *patch, struct stat *st)
1270 {
1271         char *buf;
1272         unsigned long size, alloc;
1273         struct buffer_desc desc;
1274
1275         size = 0;
1276         alloc = 0;
1277         buf = NULL;
1278         if (patch->old_name) {
1279                 size = st->st_size;
1280                 alloc = size + 8192;
1281                 buf = xmalloc(alloc);
1282                 if (read_old_data(st, patch->old_name, buf, alloc) != size)
1283                         return error("read of %s failed", patch->old_name);
1284         }
1285
1286         desc.size = size;
1287         desc.alloc = alloc;
1288         desc.buffer = buf;
1289         if (apply_fragments(&desc, patch) < 0)
1290                 return -1;
1291         patch->result = desc.buffer;
1292         patch->resultsize = desc.size;
1293
1294         if (patch->is_delete && patch->resultsize)
1295                 return error("removal patch leaves file contents");
1296
1297         return 0;
1298 }
1299
1300 static int check_patch(struct patch *patch)
1301 {
1302         struct stat st;
1303         const char *old_name = patch->old_name;
1304         const char *new_name = patch->new_name;
1305         const char *name = old_name ? old_name : new_name;
1306
1307         if (old_name) {
1308                 int changed;
1309                 int stat_ret = lstat(old_name, &st);
1310
1311                 if (check_index) {
1312                         int pos = cache_name_pos(old_name, strlen(old_name));
1313                         if (pos < 0)
1314                                 return error("%s: does not exist in index",
1315                                              old_name);
1316                         if (stat_ret < 0) {
1317                                 struct checkout costate;
1318                                 if (errno != ENOENT)
1319                                         return error("%s: %s", old_name,
1320                                                      strerror(errno));
1321                                 /* checkout */
1322                                 costate.base_dir = "";
1323                                 costate.base_dir_len = 0;
1324                                 costate.force = 0;
1325                                 costate.quiet = 0;
1326                                 costate.not_new = 0;
1327                                 costate.refresh_cache = 1;
1328                                 if (checkout_entry(active_cache[pos],
1329                                                    &costate) ||
1330                                     lstat(old_name, &st))
1331                                         return -1;
1332                         }
1333
1334                         changed = ce_match_stat(active_cache[pos], &st);
1335                         if (changed)
1336                                 return error("%s: does not match index",
1337                                              old_name);
1338                 }
1339                 else if (stat_ret < 0)
1340                         return error("%s: %s", old_name, strerror(errno));
1341
1342                 if (patch->is_new < 0)
1343                         patch->is_new = 0;
1344                 st.st_mode = ntohl(create_ce_mode(st.st_mode));
1345                 if (!patch->old_mode)
1346                         patch->old_mode = st.st_mode;
1347                 if ((st.st_mode ^ patch->old_mode) & S_IFMT)
1348                         return error("%s: wrong type", old_name);
1349                 if (st.st_mode != patch->old_mode)
1350                         fprintf(stderr, "warning: %s has type %o, expected %o\n",
1351                                 old_name, st.st_mode, patch->old_mode);
1352         }
1353
1354         if (new_name && (patch->is_new | patch->is_rename | patch->is_copy)) {
1355                 if (check_index && cache_name_pos(new_name, strlen(new_name)) >= 0)
1356                         return error("%s: already exists in index", new_name);
1357                 if (!lstat(new_name, &st))
1358                         return error("%s: already exists in working directory", new_name);
1359                 if (errno != ENOENT)
1360                         return error("%s: %s", new_name, strerror(errno));
1361                 if (!patch->new_mode) {
1362                         if (patch->is_new)
1363                                 patch->new_mode = S_IFREG | 0644;
1364                         else
1365                                 patch->new_mode = patch->old_mode;
1366                 }
1367         }
1368
1369         if (new_name && old_name) {
1370                 int same = !strcmp(old_name, new_name);
1371                 if (!patch->new_mode)
1372                         patch->new_mode = patch->old_mode;
1373                 if ((patch->old_mode ^ patch->new_mode) & S_IFMT)
1374                         return error("new mode (%o) of %s does not match old mode (%o)%s%s",
1375                                 patch->new_mode, new_name, patch->old_mode,
1376                                 same ? "" : " of ", same ? "" : old_name);
1377         }       
1378
1379         if (apply_data(patch, &st) < 0)
1380                 return error("%s: patch does not apply", name);
1381         return 0;
1382 }
1383
1384 static int check_patch_list(struct patch *patch)
1385 {
1386         int error = 0;
1387
1388         for (;patch ; patch = patch->next)
1389                 error |= check_patch(patch);
1390         return error;
1391 }
1392
1393 static inline int is_null_sha1(const unsigned char *sha1)
1394 {
1395         return !memcmp(sha1, null_sha1, 20);
1396 }
1397
1398 static void show_index_list(struct patch *list)
1399 {
1400         struct patch *patch;
1401
1402         /* Once we start supporting the reverse patch, it may be
1403          * worth showing the new sha1 prefix, but until then...
1404          */
1405         for (patch = list; patch; patch = patch->next) {
1406                 const unsigned char *sha1_ptr;
1407                 unsigned char sha1[20];
1408                 const char *name;
1409
1410                 name = patch->old_name ? patch->old_name : patch->new_name;
1411                 if (patch->is_new)
1412                         sha1_ptr = null_sha1;
1413                 else if (get_sha1(patch->old_sha1_prefix, sha1))
1414                         die("sha1 information is lacking or useless (%s).",
1415                             name);
1416                 else
1417                         sha1_ptr = sha1;
1418
1419                 printf("%06o %s ",patch->old_mode, sha1_to_hex(sha1_ptr));
1420                 if (line_termination && quote_c_style(name, NULL, NULL, 0))
1421                         quote_c_style(name, NULL, stdout, 0);
1422                 else
1423                         fputs(name, stdout);
1424                 putchar(line_termination);
1425         }
1426 }
1427
1428 static void stat_patch_list(struct patch *patch)
1429 {
1430         int files, adds, dels;
1431
1432         for (files = adds = dels = 0 ; patch ; patch = patch->next) {
1433                 files++;
1434                 adds += patch->lines_added;
1435                 dels += patch->lines_deleted;
1436                 show_stats(patch);
1437         }
1438
1439         printf(" %d files changed, %d insertions(+), %d deletions(-)\n", files, adds, dels);
1440 }
1441
1442 static void numstat_patch_list(struct patch *patch)
1443 {
1444         for ( ; patch; patch = patch->next) {
1445                 const char *name;
1446                 name = patch->old_name ? patch->old_name : patch->new_name;
1447                 printf("%d\t%d\t", patch->lines_added, patch->lines_deleted);
1448                 if (line_termination && quote_c_style(name, NULL, NULL, 0))
1449                         quote_c_style(name, NULL, stdout, 0);
1450                 else
1451                         fputs(name, stdout);
1452                 putchar('\n');
1453         }
1454 }
1455
1456 static void show_file_mode_name(const char *newdelete, unsigned int mode, const char *name)
1457 {
1458         if (mode)
1459                 printf(" %s mode %06o %s\n", newdelete, mode, name);
1460         else
1461                 printf(" %s %s\n", newdelete, name);
1462 }
1463
1464 static void show_mode_change(struct patch *p, int show_name)
1465 {
1466         if (p->old_mode && p->new_mode && p->old_mode != p->new_mode) {
1467                 if (show_name)
1468                         printf(" mode change %06o => %06o %s\n",
1469                                p->old_mode, p->new_mode, p->new_name);
1470                 else
1471                         printf(" mode change %06o => %06o\n",
1472                                p->old_mode, p->new_mode);
1473         }
1474 }
1475
1476 static void show_rename_copy(struct patch *p)
1477 {
1478         const char *renamecopy = p->is_rename ? "rename" : "copy";
1479         const char *old, *new;
1480
1481         /* Find common prefix */
1482         old = p->old_name;
1483         new = p->new_name;
1484         while (1) {
1485                 const char *slash_old, *slash_new;
1486                 slash_old = strchr(old, '/');
1487                 slash_new = strchr(new, '/');
1488                 if (!slash_old ||
1489                     !slash_new ||
1490                     slash_old - old != slash_new - new ||
1491                     memcmp(old, new, slash_new - new))
1492                         break;
1493                 old = slash_old + 1;
1494                 new = slash_new + 1;
1495         }
1496         /* p->old_name thru old is the common prefix, and old and new
1497          * through the end of names are renames
1498          */
1499         if (old != p->old_name)
1500                 printf(" %s %.*s{%s => %s} (%d%%)\n", renamecopy,
1501                        (int)(old - p->old_name), p->old_name,
1502                        old, new, p->score);
1503         else
1504                 printf(" %s %s => %s (%d%%)\n", renamecopy,
1505                        p->old_name, p->new_name, p->score);
1506         show_mode_change(p, 0);
1507 }
1508
1509 static void summary_patch_list(struct patch *patch)
1510 {
1511         struct patch *p;
1512
1513         for (p = patch; p; p = p->next) {
1514                 if (p->is_new)
1515                         show_file_mode_name("create", p->new_mode, p->new_name);
1516                 else if (p->is_delete)
1517                         show_file_mode_name("delete", p->old_mode, p->old_name);
1518                 else {
1519                         if (p->is_rename || p->is_copy)
1520                                 show_rename_copy(p);
1521                         else {
1522                                 if (p->score) {
1523                                         printf(" rewrite %s (%d%%)\n",
1524                                                p->new_name, p->score);
1525                                         show_mode_change(p, 0);
1526                                 }
1527                                 else
1528                                         show_mode_change(p, 1);
1529                         }
1530                 }
1531         }
1532 }
1533
1534 static void patch_stats(struct patch *patch)
1535 {
1536         int lines = patch->lines_added + patch->lines_deleted;
1537
1538         if (lines > max_change)
1539                 max_change = lines;
1540         if (patch->old_name) {
1541                 int len = quote_c_style(patch->old_name, NULL, NULL, 0);
1542                 if (!len)
1543                         len = strlen(patch->old_name);
1544                 if (len > max_len)
1545                         max_len = len;
1546         }
1547         if (patch->new_name) {
1548                 int len = quote_c_style(patch->new_name, NULL, NULL, 0);
1549                 if (!len)
1550                         len = strlen(patch->new_name);
1551                 if (len > max_len)
1552                         max_len = len;
1553         }
1554 }
1555
1556 static void remove_file(struct patch *patch)
1557 {
1558         if (write_index) {
1559                 if (remove_file_from_cache(patch->old_name) < 0)
1560                         die("unable to remove %s from index", patch->old_name);
1561         }
1562         unlink(patch->old_name);
1563 }
1564
1565 static void add_index_file(const char *path, unsigned mode, void *buf, unsigned long size)
1566 {
1567         struct stat st;
1568         struct cache_entry *ce;
1569         int namelen = strlen(path);
1570         unsigned ce_size = cache_entry_size(namelen);
1571
1572         if (!write_index)
1573                 return;
1574
1575         ce = xmalloc(ce_size);
1576         memset(ce, 0, ce_size);
1577         memcpy(ce->name, path, namelen);
1578         ce->ce_mode = create_ce_mode(mode);
1579         ce->ce_flags = htons(namelen);
1580         if (lstat(path, &st) < 0)
1581                 die("unable to stat newly created file %s", path);
1582         fill_stat_cache_info(ce, &st);
1583         if (write_sha1_file(buf, size, "blob", ce->sha1) < 0)
1584                 die("unable to create backing store for newly created file %s", path);
1585         if (add_cache_entry(ce, ADD_CACHE_OK_TO_ADD) < 0)
1586                 die("unable to add cache entry for %s", path);
1587 }
1588
1589 static int try_create_file(const char *path, unsigned int mode, const char *buf, unsigned long size)
1590 {
1591         int fd;
1592
1593         if (S_ISLNK(mode))
1594                 return symlink(buf, path);
1595         fd = open(path, O_CREAT | O_EXCL | O_WRONLY, (mode & 0100) ? 0777 : 0666);
1596         if (fd < 0)
1597                 return -1;
1598         while (size) {
1599                 int written = xwrite(fd, buf, size);
1600                 if (written < 0)
1601                         die("writing file %s: %s", path, strerror(errno));
1602                 if (!written)
1603                         die("out of space writing file %s", path);
1604                 buf += written;
1605                 size -= written;
1606         }
1607         if (close(fd) < 0)
1608                 die("closing file %s: %s", path, strerror(errno));
1609         return 0;
1610 }
1611
1612 /*
1613  * We optimistically assume that the directories exist,
1614  * which is true 99% of the time anyway. If they don't,
1615  * we create them and try again.
1616  */
1617 static void create_one_file(char *path, unsigned mode, const char *buf, unsigned long size)
1618 {
1619         if (!try_create_file(path, mode, buf, size))
1620                 return;
1621
1622         if (errno == ENOENT) {
1623                 if (safe_create_leading_directories(path))
1624                         return;
1625                 if (!try_create_file(path, mode, buf, size))
1626                         return;
1627         }
1628
1629         if (errno == EEXIST) {
1630                 unsigned int nr = getpid();
1631
1632                 for (;;) {
1633                         const char *newpath;
1634                         newpath = mkpath("%s~%u", path, nr);
1635                         if (!try_create_file(newpath, mode, buf, size)) {
1636                                 if (!rename(newpath, path))
1637                                         return;
1638                                 unlink(newpath);
1639                                 break;
1640                         }
1641                         if (errno != EEXIST)
1642                                 break;
1643                         ++nr;
1644                 }
1645         }
1646         die("unable to write file %s mode %o", path, mode);
1647 }
1648
1649 static void create_file(struct patch *patch)
1650 {
1651         char *path = patch->new_name;
1652         unsigned mode = patch->new_mode;
1653         unsigned long size = patch->resultsize;
1654         char *buf = patch->result;
1655
1656         if (!mode)
1657                 mode = S_IFREG | 0644;
1658         create_one_file(path, mode, buf, size); 
1659         add_index_file(path, mode, buf, size);
1660 }
1661
1662 static void write_out_one_result(struct patch *patch)
1663 {
1664         if (patch->is_delete > 0) {
1665                 remove_file(patch);
1666                 return;
1667         }
1668         if (patch->is_new > 0 || patch->is_copy) {
1669                 create_file(patch);
1670                 return;
1671         }
1672         /*
1673          * Rename or modification boils down to the same
1674          * thing: remove the old, write the new
1675          */
1676         remove_file(patch);
1677         create_file(patch);
1678 }
1679
1680 static void write_out_results(struct patch *list, int skipped_patch)
1681 {
1682         if (!list && !skipped_patch)
1683                 die("No changes");
1684
1685         while (list) {
1686                 write_out_one_result(list);
1687                 list = list->next;
1688         }
1689 }
1690
1691 static struct cache_file cache_file;
1692
1693 static struct excludes {
1694         struct excludes *next;
1695         const char *path;
1696 } *excludes;
1697
1698 static int use_patch(struct patch *p)
1699 {
1700         const char *pathname = p->new_name ? p->new_name : p->old_name;
1701         struct excludes *x = excludes;
1702         while (x) {
1703                 if (fnmatch(x->path, pathname, 0) == 0)
1704                         return 0;
1705                 x = x->next;
1706         }
1707         if (0 < prefix_length) {
1708                 int pathlen = strlen(pathname);
1709                 if (pathlen <= prefix_length ||
1710                     memcmp(prefix, pathname, prefix_length))
1711                         return 0;
1712         }
1713         return 1;
1714 }
1715
1716 static int apply_patch(int fd)
1717 {
1718         int newfd;
1719         unsigned long offset, size;
1720         char *buffer = read_patch_file(fd, &size);
1721         struct patch *list = NULL, **listp = &list;
1722         int skipped_patch = 0;
1723
1724         if (!buffer)
1725                 return -1;
1726         offset = 0;
1727         while (size > 0) {
1728                 struct patch *patch;
1729                 int nr;
1730
1731                 patch = xmalloc(sizeof(*patch));
1732                 memset(patch, 0, sizeof(*patch));
1733                 nr = parse_chunk(buffer + offset, size, patch);
1734                 if (nr < 0)
1735                         break;
1736                 if (use_patch(patch)) {
1737                         patch_stats(patch);
1738                         *listp = patch;
1739                         listp = &patch->next;
1740                 } else {
1741                         /* perhaps free it a bit better? */
1742                         free(patch);
1743                         skipped_patch++;
1744                 }
1745                 offset += nr;
1746                 size -= nr;
1747         }
1748
1749         newfd = -1;
1750         write_index = check_index && apply;
1751         if (write_index)
1752                 newfd = hold_index_file_for_update(&cache_file, get_index_file());
1753         if (check_index) {
1754                 if (read_cache() < 0)
1755                         die("unable to read index file");
1756         }
1757
1758         if ((check || apply) && check_patch_list(list) < 0)
1759                 exit(1);
1760
1761         if (apply)
1762                 write_out_results(list, skipped_patch);
1763
1764         if (write_index) {
1765                 if (write_cache(newfd, active_cache, active_nr) ||
1766                     commit_index_file(&cache_file))
1767                         die("Unable to write new cachefile");
1768         }
1769
1770         if (show_index_info)
1771                 show_index_list(list);
1772
1773         if (diffstat)
1774                 stat_patch_list(list);
1775
1776         if (numstat)
1777                 numstat_patch_list(list);
1778
1779         if (summary)
1780                 summary_patch_list(list);
1781
1782         free(buffer);
1783         return 0;
1784 }
1785
1786 int main(int argc, char **argv)
1787 {
1788         int i;
1789         int read_stdin = 1;
1790
1791         for (i = 1; i < argc; i++) {
1792                 const char *arg = argv[i];
1793                 int fd;
1794
1795                 if (!strcmp(arg, "-")) {
1796                         apply_patch(0);
1797                         read_stdin = 0;
1798                         continue;
1799                 }
1800                 if (!strncmp(arg, "--exclude=", 10)) {
1801                         struct excludes *x = xmalloc(sizeof(*x));
1802                         x->path = arg + 10;
1803                         x->next = excludes;
1804                         excludes = x;
1805                         continue;
1806                 }
1807                 if (!strncmp(arg, "-p", 2)) {
1808                         p_value = atoi(arg + 2);
1809                         continue;
1810                 }
1811                 if (!strcmp(arg, "--no-add")) {
1812                         no_add = 1;
1813                         continue;
1814                 }
1815                 if (!strcmp(arg, "--stat")) {
1816                         apply = 0;
1817                         diffstat = 1;
1818                         continue;
1819                 }
1820                 if (!strcmp(arg, "--allow-binary-replacement")) {
1821                         allow_binary_replacement = 1;
1822                         continue;
1823                 }
1824                 if (!strcmp(arg, "--numstat")) {
1825                         apply = 0;
1826                         numstat = 1;
1827                         continue;
1828                 }
1829                 if (!strcmp(arg, "--summary")) {
1830                         apply = 0;
1831                         summary = 1;
1832                         continue;
1833                 }
1834                 if (!strcmp(arg, "--check")) {
1835                         apply = 0;
1836                         check = 1;
1837                         continue;
1838                 }
1839                 if (!strcmp(arg, "--index")) {
1840                         check_index = 1;
1841                         continue;
1842                 }
1843                 if (!strcmp(arg, "--apply")) {
1844                         apply = 1;
1845                         continue;
1846                 }
1847                 if (!strcmp(arg, "--index-info")) {
1848                         apply = 0;
1849                         show_index_info = 1;
1850                         continue;
1851                 }
1852                 if (!strcmp(arg, "-z")) {
1853                         line_termination = 0;
1854                         continue;
1855                 }
1856                 if (!strncmp(arg, "--whitespace=", 13)) {
1857                         if (strcmp(arg+13, "warn")) {
1858                                 new_whitespace = warn_on_whitespace;
1859                                 continue;
1860                         }
1861                         if (strcmp(arg+13, "error")) {
1862                                 new_whitespace = error_on_whitespace;
1863                                 continue;
1864                         }
1865                         die("unrecognixed whitespace option '%s'", arg+13);
1866                 }
1867
1868                 if (check_index && prefix_length < 0) {
1869                         prefix = setup_git_directory();
1870                         prefix_length = prefix ? strlen(prefix) : 0;
1871                         git_config(git_default_config);
1872                 }
1873                 if (0 < prefix_length)
1874                         arg = prefix_filename(prefix, prefix_length, arg);
1875
1876                 fd = open(arg, O_RDONLY);
1877                 if (fd < 0)
1878                         usage(apply_usage);
1879                 read_stdin = 0;
1880                 apply_patch(fd);
1881                 close(fd);
1882         }
1883         if (read_stdin)
1884                 apply_patch(0);
1885         return 0;
1886 }