Teach Git to respect skip-worktree bit (writing part)
[gitweb.git] / read-cache.c
index 3f587110cb9d7be1890b7db68a0bdac35d48cd35..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;
 
        /*
@@ -638,7 +638,7 @@ int add_file_to_index(struct index_state *istate, const char *path, int flags)
 {
        struct stat st;
        if (lstat(path, &st))
-               die("%s: unable to stat (%s)", path, strerror(errno));
+               die_errno("unable to stat '%s'", path);
        return add_to_index(istate, path, &st, flags);
 }
 
@@ -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;
        }
@@ -1251,11 +1247,11 @@ int read_index_from(struct index_state *istate, const char *path)
        if (fd < 0) {
                if (errno == ENOENT)
                        return 0;
-               die("index file open failed (%s)", strerror(errno));
+               die_errno("index file open failed");
        }
 
        if (fstat(fd, &st))
-               die("cannot stat the open index (%s)", strerror(errno));
+               die_errno("cannot stat the open index");
 
        errno = EINVAL;
        mmap_size = xsize_t(st.st_size);
@@ -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)