Skip to content
  • Duy Nguyen's avatar
    Convert "struct cache_entry *" to "const ..." wherever possible · 9c5e6c80
    Duy Nguyen authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    I attempted to make index_state->cache[] a "const struct cache_entry **"
    to find out how existing entries in index are modified and where. The
    question I have is what do we do if we really need to keep track of on-disk
    changes in the index. The result is
    
     - diff-lib.c: setting CE_UPTODATE
    
     - name-hash.c: setting CE_HASHED
    
     - preload-index.c, read-cache.c, unpack-trees.c and
       builtin/update-index: obvious
    
     - entry.c: write_entry() may refresh the checked out entry via
       fill_stat_cache_info(). This causes "non-const struct cache_entry
       *" in builtin/apply.c, builtin/checkout-index.c and
       builtin/checkout.c
    
     - builtin/ls-files.c: --with-tree changes stagemask and may set
       CE_UPDATE
    
    Of these, write_entry() and its call sites are probably most
    interesting because it modifies on-disk info. But this is stat info
    and can be retrieved via refresh, at least for porcelain
    commands. Other just uses ce_flags for local purposes.
    
    So, keeping track of "dirty" entries is just a matter of setting a
    flag in index modification functions exposed by read-cache.c. Except
    unpack-trees, the rest of the code base does not do anything funny
    behind read-cache's back.
    
    The actual patch is less valueable than the summary above. But if
    anyone wants to re-identify the above sites. Applying this patch, then
    this:
    
        diff --git a/cache.h b/cache.h
        index 430d021..1692891 100644
        --- a/cache.h
        +++ b/cache.h
        @@ -267,7 +267,7 @@ static inline unsigned int canon_mode(unsigned int mode)
         #define cache_entry_size(len) (offsetof(struct cache_entry,name) + (len) + 1)
    
         struct index_state {
        -	struct cache_entry **cache;
        +	const struct cache_entry **cache;
         	unsigned int version;
         	unsigned int cache_nr, cache_alloc, cache_changed;
         	struct string_list *resolve_undo;
    
    will help quickly identify them without bogus warnings.
    
    Signed-off-by: default avatarNguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    9c5e6c80