diff options
| author | Junio C Hamano <gitster@pobox.com> | 2007-09-18 00:42:01 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2007-09-18 00:42:01 -0700 |
| commit | 9346b4e1ad2d03541f18b38f7e9fb7ad0ca6434e (patch) | |
| tree | d49794a304c2b949d9a49e56b7e5028cce44e406 /read-cache.c | |
| parent | Merge branch 'maint' (diff) | |
| parent | Merge branch 'jc/cachetree' into cr/reset (diff) | |
| download | git-9346b4e1ad2d03541f18b38f7e9fb7ad0ca6434e.tar.gz git-9346b4e1ad2d03541f18b38f7e9fb7ad0ca6434e.zip | |
Merge branch 'cr/reset'
* cr/reset:
Simplify cache API
An additional test for "git-reset -- path"
Make "git reset" a builtin.
Move make_cache_entry() from merge-recursive.c into read-cache.c
Add tests for documented features of "git reset".
Diffstat (limited to 'read-cache.c')
| -rw-r--r-- | read-cache.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/read-cache.c b/read-cache.c index 8b1c94e0e3..2e40a34420 100644 --- a/read-cache.c +++ b/read-cache.c @@ -346,6 +346,7 @@ int remove_file_from_index(struct index_state *istate, const char *path) int pos = index_name_pos(istate, path, strlen(path)); if (pos < 0) pos = -pos-1; + cache_tree_invalidate_path(istate->cache_tree, path); while (pos < istate->cache_nr && !strcmp(istate->cache[pos]->name, path)) remove_index_entry_at(istate, pos); return 0; @@ -430,10 +431,34 @@ int add_file_to_index(struct index_state *istate, const char *path, int verbose) die("unable to add %s to index",path); if (verbose) printf("add '%s'\n", path); - cache_tree_invalidate_path(istate->cache_tree, path); return 0; } +struct cache_entry *make_cache_entry(unsigned int mode, + const unsigned char *sha1, const char *path, int stage, + int refresh) +{ + int size, len; + struct cache_entry *ce; + + if (!verify_path(path)) + return NULL; + + len = strlen(path); + size = cache_entry_size(len); + ce = xcalloc(1, size); + + hashcpy(ce->sha1, sha1); + memcpy(ce->name, path, len); + ce->ce_flags = create_ce_flags(len, stage); + ce->ce_mode = create_ce_mode(mode); + + if (refresh) + return refresh_cache_entry(ce, 0); + + return ce; +} + int ce_same_name(struct cache_entry *a, struct cache_entry *b) { int len = ce_namelen(a); @@ -673,6 +698,7 @@ static int add_index_entry_with_check(struct index_state *istate, struct cache_e int ok_to_replace = option & ADD_CACHE_OK_TO_REPLACE; int skip_df_check = option & ADD_CACHE_SKIP_DFCHECK; + cache_tree_invalidate_path(istate->cache_tree, ce->name); pos = index_name_pos(istate, ce->name, ntohs(ce->ce_flags)); /* existing match? Just replace it. */ |
