{ "copy to ", gitdiff_copydst },
{ "rename old ", gitdiff_renamesrc },
{ "rename new ", gitdiff_renamedst },
+ { "rename from ", gitdiff_renamesrc },
+ { "rename to ", gitdiff_renamedst },
{ "similarity index ", gitdiff_similarity },
{ "dissimilarity index ", gitdiff_dissimilarity },
{ "", gitdiff_unrecognized },
*/
if (!memcmp("diff --git ", line, 11)) {
int git_hdr_len = parse_git_header(line, len, size, patch);
- if (git_hdr_len < 0)
+ if (git_hdr_len <= len)
continue;
if (!patch->old_name && !patch->new_name)
die("git diff header lacks filename information (line %d)", linenr);
if (patch->is_new != !oldlines)
return error("new file depends on old contents");
- if (patch->is_delete != !newlines)
- return error("deleted file still has contents");
+ if (patch->is_delete != !newlines) {
+ if (newlines)
+ return error("deleted file still has contents");
+ fprintf(stderr, "** warning: file %s becomes empty but is not deleted\n", patch->new_name);
+ }
/* Parse the thing.. */
line += len;