diff options
author | Junio C Hamano <junkio@cox.net> | 2005-05-20 09:54:07 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-20 10:08:56 -0700 |
commit | 7ca45252a35df8c78060ff233957fc558714a5d6 (patch) | |
tree | 134a415f97f1a53c45219dd55c99b6788ab13f15 | |
parent | 411746940f02f6fb90c4b6b97c6f07cee599c2e1 (diff) | |
download | git-7ca45252a35df8c78060ff233957fc558714a5d6.tar.gz git-7ca45252a35df8c78060ff233957fc558714a5d6.tar.xz |
[PATCH] Simplify "reverse-diff" logic in the diff core.
Instead of swapping the arguments just before output, this patch
makes the swapping happen on the input side of the diff core,
when "reverse-diff" is in effect. This greatly simplifies the
logic, but more importantly it is necessary for upcoming "copy
detection" work.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | diff.c | 38 |
1 files changed, 15 insertions, 23 deletions
@@ -350,15 +350,6 @@ static void run_external_diff(const char *name, int status; static int atexit_asked = 0; - if (reverse_diff) { - struct diff_spec *tmp_spec; - tmp_spec = one; one = two; two = tmp_spec; - if (other) { - const char *tmp; - tmp = name; name = other; other = tmp; - } - } - if (!matches_pathspec(name) && (!other || !matches_pathspec(other))) return; @@ -765,11 +756,12 @@ void diff_addremove(int addremove, unsigned mode, char concatpath[PATH_MAX]; struct diff_spec spec[2], *one, *two; + if (reverse_diff) + addremove = (addremove == '+' ? '-' : '+'); + if (0 <= diff_raw_output) { if (!path) path = ""; - if (reverse_diff) - addremove = (addremove == '+' ? '-' : '+'); printf("%c%06o %s %s %s%s%c", addremove, mode, @@ -806,24 +798,24 @@ void diff_change(unsigned old_mode, unsigned new_mode, char concatpath[PATH_MAX]; struct diff_spec spec[2]; + if (reverse_diff) { + unsigned tmp; + const unsigned char *tmp_c; + tmp = old_mode; old_mode = new_mode; new_mode = tmp; + tmp_c = old_sha1; old_sha1 = new_sha1; new_sha1 = tmp_c; + } + if (0 <= diff_raw_output) { char old_hex[41]; strcpy(old_hex, sha1_to_hex(old_sha1)); if (!path) path = ""; - if (reverse_diff) - printf("*%06o->%06o %s %s->%s %s%s%c", - new_mode, old_mode, - git_object_type(new_mode), - sha1_to_hex(new_sha1), old_hex, - base, path, diff_raw_output); - else - printf("*%06o->%06o %s %s->%s %s%s%c", - old_mode, new_mode, - git_object_type(new_mode), - old_hex, sha1_to_hex(new_sha1), - base, path, diff_raw_output); + printf("*%06o->%06o %s %s->%s %s%s%c", + old_mode, new_mode, + git_object_type(new_mode), + old_hex, sha1_to_hex(new_sha1), + base, path, diff_raw_output); return; } if (S_ISDIR(new_mode)) |