Merge branch 'maint'
authorJunio C Hamano <junkio@cox.net>
Sat, 4 Nov 2006 11:54:20 +0000 (03:54 -0800)
committerJunio C Hamano <junkio@cox.net>
Sat, 4 Nov 2006 11:54:20 +0000 (03:54 -0800)
* maint:
apply: handle "traditional" creation/deletion diff correctly.

1  2 
builtin-apply.c
diff --combined builtin-apply.c
index 11397f5504f98ccff47a90b228abc71b30327fb9,f70ee98e2d68385124ac75b2c53f068e63a6bf86..db7cdce1d37e2984f4d2663bb86eaec7f33f5789
@@@ -360,7 -360,7 +360,7 @@@ static int gitdiff_hdrend(const char *l
  static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name, const char *oldnew)
  {
        if (!orig_name && !isnull)
 -              return find_name(line, NULL, 1, 0);
 +              return find_name(line, NULL, 1, TERM_TAB);
  
        if (orig_name) {
                int len;
                len = strlen(name);
                if (isnull)
                        die("git-apply: bad git-diff - expected /dev/null, got %s on line %d", name, linenr);
 -              another = find_name(line, NULL, 1, 0);
 +              another = find_name(line, NULL, 1, TERM_TAB);
                if (!another || memcmp(another, name, len))
                        die("git-apply: bad git-diff - inconsistent %s filename on line %d", oldnew, linenr);
                free(another);
@@@ -1043,10 -1043,14 +1043,14 @@@ static int parse_single_patch(char *lin
                 * then not having oldlines means the patch is creation,
                 * and not having newlines means the patch is deletion.
                 */
-               if (patch->is_new < 0 && !oldlines)
+               if (patch->is_new < 0 && !oldlines) {
                        patch->is_new = 1;
-               if (patch->is_delete < 0 && !newlines)
+                       patch->old_name = NULL;
+               }
+               if (patch->is_delete < 0 && !newlines) {
                        patch->is_delete = 1;
+                       patch->new_name = NULL;
+               }
        }
  
        if (0 < patch->is_new && oldlines)