On Mon, 22 Oct 2007, Linus Torvalds wrote: > > I'm sure there's more to come.. One more detail.. The updated comment explains the issue: if we broke a file apart, and rename detection joined it back together, the result is neither a rename nor a copy, it's a regular modification (and all remaining renames will be copies of the original, so don't bother decrementing the "rename_used" count). Linus --- diff.c | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-) diff --git a/diff.c b/diff.c index 2e74cb3..e839f59 100644 --- a/diff.c +++ b/diff.c @@ -2636,13 +2636,19 @@ static void diff_resolve_rename_copy(void) * either in-place edit or rename/copy edit. */ else if (DIFF_PAIR_RENAME(p)) { - /* See if there is some other filepair that - * copies from the same source as us. If so - * we are a copy. Otherwise we are either a - * copy if the path stays, or a rename if it - * does not, but we already handled "stays" case. + /* + * A rename might have re-connected a broken + * pair up, causing the pathnames to be the + * same again. If so, that's not a rename at + * all, just a modification.. + * + * Otherwise, see if this source was used for + * multiple renames, in which case we decrement + * the count, and call it a copy. */ - if (--p->one->rename_used > 0) + if (!strcmp(p->one->path, p->two->path)) + p->status = DIFF_STATUS_MODIFIED; + else if (--p->one->rename_used > 0) p->status = DIFF_STATUS_COPIED; else p->status = DIFF_STATUS_RENAMED; - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html