From 0293450e217c1cb6966655bb00cc11fdf626083d Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Fri, 17 May 2013 16:57:49 -0700 Subject: [PATCH] Fix delta compare to use correct pathname The delta cmp function needs to choose the correct path for ordering when a delta is ADDED, RENAMED, or COPIED. --- src/diff.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/diff.c b/src/diff.c index d93506984..d2389f103 100644 --- a/src/diff.c +++ b/src/diff.c @@ -231,10 +231,23 @@ static char *diff_strdup_prefix(git_pool *pool, const char *prefix) return git_pool_strndup(pool, prefix, len + 1); } +GIT_INLINE(const char *) diff_delta__path(const git_diff_delta *delta) +{ + const char *str = delta->old_file.path; + + if (!str || + delta->status == GIT_DELTA_ADDED || + delta->status == GIT_DELTA_RENAMED || + delta->status == GIT_DELTA_COPIED) + str = delta->new_file.path; + + return str; +} + int git_diff_delta__cmp(const void *a, const void *b) { const git_diff_delta *da = a, *db = b; - int val = strcmp(da->old_file.path, db->old_file.path); + int val = strcmp(diff_delta__path(da), diff_delta__path(db)); return val ? val : ((int)da->status - (int)db->status); }