Teach Git to respect skip-worktree bit (writing part)
[gitweb.git] / read-cache.c
index f76b5bb2e13a06fbc393a2344f0310ee5e702594..5ee7d9da9c7674f2f7d16b64eaba9c21ae3d78c0 100644 (file)
@@ -265,7 +265,7 @@ int ie_match_stat(const struct index_state *istate,
         * If it's marked as always valid in the index, it's
         * valid whatever the checked-out copy says.
         */
-       if (!ignore_valid && (ce->ce_flags & CE_VALID))
+       if (!ignore_valid && ((ce->ce_flags & CE_VALID) || ce_skip_worktree(ce)))
                return 0;
 
        /*
@@ -1004,11 +1004,7 @@ static struct cache_entry *refresh_cache_ent(struct index_state *istate,
        if (ce_uptodate(ce))
                return ce;
 
-       /*
-        * CE_VALID means the user promised us that the change to
-        * the work tree does not matter and told us not to worry.
-        */
-       if (!ignore_valid && (ce->ce_flags & CE_VALID)) {
+       if (!ignore_valid && ((ce->ce_flags & CE_VALID) || ce_skip_worktree(ce))) {
                ce_mark_uptodate(ce);
                return ce;
        }
@@ -1265,7 +1261,7 @@ int read_index_from(struct index_state *istate, const char *path)
        mmap = xmmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
        close(fd);
        if (mmap == MAP_FAILED)
-               die("unable to map index file");
+               die_errno("unable to map index file");
 
        hdr = mmap;
        if (verify_hdr(hdr, mmap_size) < 0)