diff <(command1) <(command2) provides useful output, let's make it
possible for git to do the same.

Signed-off-by: Dennis Kaarsemaker <den...@kaarsemaker.net>
---
 diff-no-index.c |  8 ++++++++
 diff.c          | 13 +++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/diff-no-index.c b/diff-no-index.c
index 15811c2..487dbf5 100644
--- a/diff-no-index.c
+++ b/diff-no-index.c
@@ -83,6 +83,14 @@ static struct diff_filespec *noindex_filespec(const char 
*name, int mode)
                name = "/dev/null";
        s = alloc_filespec(name);
        fill_filespec(s, null_sha1, 0, mode);
+       /*
+        * In --no-index mode, we support reading from pipes. canon_mode, 
called by
+        * fill_filespec, gets confused by this and thinks we now have 
subprojects.
+        * Detect this and tell the rest of the diff machinery to treat pipes as
+        * normal files.
+        */
+       if (S_ISGITLINK(s->mode))
+               s->mode = S_IFREG | ce_permissions(mode);
        if (name == file_from_standard_input)
                populate_from_stdin(s);
        return s;
diff --git a/diff.c b/diff.c
index 1eaf604..c599efb 100644
--- a/diff.c
+++ b/diff.c
@@ -2839,9 +2839,18 @@ int diff_populate_filespec(struct diff_filespec *s, 
unsigned int flags)
                fd = open(s->path, O_RDONLY);
                if (fd < 0)
                        goto err_empty;
-               s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, 0);
+               if (!S_ISREG(st.st_mode)) {
+                       struct strbuf sb = STRBUF_INIT;
+                       strbuf_read(&sb, fd, 0);
+                       s->size = sb.len;
+                       s->data = strbuf_detach(&sb, NULL);
+                       s->should_free = 1;
+               }
+               else {
+                       s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, 
fd, 0);
+                       s->should_munmap = 1;
+               }
                close(fd);
-               s->should_munmap = 1;
 
                /*
                 * Convert from working tree format to canonical git format
-- 
2.10.1-449-gab0f84c

Reply via email to