summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: bb6c2fb)
raw | patch | inline | side by side (parent: bb6c2fb)
author | Martin Koegler <mkoegler@auto.tuwien.ac.at> | |
Sun, 22 Apr 2007 16:44:00 +0000 (18:44 +0200) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Tue, 24 Apr 2007 07:08:49 +0000 (00:08 -0700) |
Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-diff.c | patch | blob | history |
diff --git a/builtin-diff.c b/builtin-diff.c
index 2ae60097b8cfddd873a38f3988185d9fde77f511..4ba4d18f871122e0585ead1d09deb728ff518174 100644 (file)
--- a/builtin-diff.c
+++ b/builtin-diff.c
#include "log-tree.h"
#include "builtin.h"
-/* NEEDSWORK: struct object has place for name but we _do_
- * know mode when we extracted the blob out of a tree, which
- * we currently lose.
- */
struct blobinfo {
unsigned char sha1[20];
const char *name;
+ unsigned mode;
};
static const char builtin_diff_usage[] =
die("'%s': %s", path, strerror(errno));
if (!(S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)))
die("'%s': not a regular file or symlink", path);
+
+ if (blob[0].mode == S_IFINVALID)
+ blob[0].mode = canon_mode(st.st_mode);
+
stuff_change(&revs->diffopt,
- canon_mode(st.st_mode), canon_mode(st.st_mode),
+ blob[0].mode, canon_mode(st.st_mode),
blob[0].sha1, null_sha1,
path, path);
diffcore_std(&revs->diffopt);
if (argc > 1)
usage(builtin_diff_usage);
+ if (blob[0].mode == S_IFINVALID)
+ blob[0].mode = mode;
+
+ if (blob[1].mode == S_IFINVALID)
+ blob[1].mode = mode;
+
stuff_change(&revs->diffopt,
- mode, mode,
+ blob[0].mode, blob[1].mode,
blob[0].sha1, blob[1].sha1,
blob[0].name, blob[1].name);
diffcore_std(&revs->diffopt);
die("more than two blobs given: '%s'", name);
hashcpy(blob[blobs].sha1, obj->sha1);
blob[blobs].name = name;
+ blob[blobs].mode = list->mode;
blobs++;
continue;