Merge branch 'jk/checkout-attribute-lookup'
authorJunio C Hamano <gitster@pobox.com>
Thu, 28 Mar 2013 21:37:46 +0000 (14:37 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 28 Mar 2013 21:37:46 +0000 (14:37 -0700)
Codepath to stream blob object contents directly from the object
store to filesystem did not use the correct path to find conversion
filters when writing to temporary files.

* jk/checkout-attribute-lookup:
t2003: work around path mangling issue on Windows
entry: fix filter lookup
t2003: modernize style

1  2 
entry.c
diff --combined entry.c
index 17a6bccec64e0e523aacc124611c43bd818372e3,6a1eb80c387007b7c49999d5f47ded81a1bdcf0f..63c52edf600b5fd966e24cc5758bdab7dbeaf41b
+++ b/entry.c
@@@ -120,15 -120,58 +120,15 @@@ static int streaming_write_entry(struc
                                 const struct checkout *state, int to_tempfile,
                                 int *fstat_done, struct stat *statbuf)
  {
 -      struct git_istream *st;
 -      enum object_type type;
 -      unsigned long sz;
        int result = -1;
 -      ssize_t kept = 0;
 -      int fd = -1;
 -
 -      st = open_istream(ce->sha1, &type, &sz, filter);
 -      if (!st)
 -              return -1;
 -      if (type != OBJ_BLOB)
 -              goto close_and_exit;
 +      int fd;
  
        fd = open_output_fd(path, ce, to_tempfile);
 -      if (fd < 0)
 -              goto close_and_exit;
 -
 -      for (;;) {
 -              char buf[1024 * 16];
 -              ssize_t wrote, holeto;
 -              ssize_t readlen = read_istream(st, buf, sizeof(buf));
 -
 -              if (!readlen)
 -                      break;
 -              if (sizeof(buf) == readlen) {
 -                      for (holeto = 0; holeto < readlen; holeto++)
 -                              if (buf[holeto])
 -                                      break;
 -                      if (readlen == holeto) {
 -                              kept += holeto;
 -                              continue;
 -                      }
 -              }
 -
 -              if (kept && lseek(fd, kept, SEEK_CUR) == (off_t) -1)
 -                      goto close_and_exit;
 -              else
 -                      kept = 0;
 -              wrote = write_in_full(fd, buf, readlen);
 -
 -              if (wrote != readlen)
 -                      goto close_and_exit;
 -      }
 -      if (kept && (lseek(fd, kept - 1, SEEK_CUR) == (off_t) -1 ||
 -                   write(fd, "", 1) != 1))
 -              goto close_and_exit;
 -      *fstat_done = fstat_output(fd, state, statbuf);
 -
 -close_and_exit:
 -      close_istream(st);
 -      if (0 <= fd)
 +      if (0 <= fd) {
 +              result = stream_blob_to_fd(fd, ce->sha1, filter, 1);
 +              *fstat_done = fstat_output(fd, state, statbuf);
                result = close(fd);
 +      }
        if (result && 0 <= fd)
                unlink(path);
        return result;
@@@ -145,7 -188,7 +145,7 @@@ static int write_entry(struct cache_ent
        struct stat st;
  
        if (ce_mode_s_ifmt == S_IFREG) {
-               struct stream_filter *filter = get_stream_filter(path, ce->sha1);
+               struct stream_filter *filter = get_stream_filter(ce->name, ce->sha1);
                if (filter &&
                    !streaming_write_entry(ce, path, filter,
                                           state, to_tempfile,