Lazily open pack index files on demand
[gitweb.git] / read-cache.c
index e04e99112d4c4b19dc1b6e1dcab89600bb30b57a..ad4e18753777a951e396116c989896f393d56e47 100644 (file)
@@ -92,7 +92,7 @@ static int ce_compare_gitlink(struct cache_entry *ce)
 
        /*
         * We don't actually require that the .git directory
-        * under DIRLNK directory be a valid git directory. It
+        * under GITLINK directory be a valid git directory. It
         * might even be missing (in case nobody populated that
         * sub-project).
         *
@@ -115,7 +115,7 @@ static int ce_modified_check_fs(struct cache_entry *ce, struct stat *st)
                        return DATA_CHANGED;
                break;
        case S_IFDIR:
-               if (S_ISDIRLNK(ntohl(ce->ce_mode)))
+               if (S_ISGITLINK(ntohl(ce->ce_mode)))
                        return 0;
        default:
                return TYPE_CHANGED;
@@ -142,7 +142,7 @@ static int ce_match_stat_basic(struct cache_entry *ce, struct stat *st)
                    (has_symlinks || !S_ISREG(st->st_mode)))
                        changed |= TYPE_CHANGED;
                break;
-       case S_IFDIRLNK:
+       case S_IFGITLINK:
                if (!S_ISDIR(st->st_mode))
                        changed |= TYPE_CHANGED;
                else if (ce_compare_gitlink(ce))
@@ -864,16 +864,15 @@ int read_index_from(struct index_state *istate, const char *path)
                die("index file open failed (%s)", strerror(errno));
        }
 
-       if (!fstat(fd, &st)) {
-               istate->mmap_size = xsize_t(st.st_size);
-               errno = EINVAL;
-               if (istate->mmap_size >= sizeof(struct cache_header) + 20)
-                       istate->mmap = xmmap(NULL, istate->mmap_size,
-                                           PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
-               else
-                       die("index file smaller than expected");
-       } else
+       if (fstat(fd, &st))
                die("cannot stat the open index (%s)", strerror(errno));
+
+       errno = EINVAL;
+       istate->mmap_size = xsize_t(st.st_size);
+       if (istate->mmap_size < sizeof(struct cache_header) + 20)
+               die("index file smaller than expected");
+
+       istate->mmap = xmmap(NULL, istate->mmap_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
        close(fd);
 
        hdr = istate->mmap;