diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-10-21 13:48:41 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-10-21 13:48:41 -0700 |
commit | 500ac7f42e7f2ae42e33be3bbb7120b788175b1d (patch) | |
tree | ae509ca36de687dd45d3a52532784f00b78daab0 /read-cache.c | |
parent | 20341dd970b331fd721225ca630548ec1e90d8a5 (diff) | |
parent | d1a43f2aa4bfb5aef29e9e1fe1fb9bb18c0e8b65 (diff) | |
download | git-500ac7f42e7f2ae42e33be3bbb7120b788175b1d.tar.gz |
Merge branch 'jc/maint-reset-remove-unmerged-new'
* jc/maint-reset-remove-unmerged-new:
reset --hard/read-tree --reset -u: remove unmerged new paths
Diffstat (limited to 'read-cache.c')
-rw-r--r-- | read-cache.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/read-cache.c b/read-cache.c index c229fd4d0d..8160022b25 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1489,25 +1489,30 @@ int write_index(const struct index_state *istate, int newfd) int read_index_unmerged(struct index_state *istate) { int i; - struct cache_entry **dst; - struct cache_entry *last = NULL; + int unmerged = 0; read_index(istate); - dst = istate->cache; for (i = 0; i < istate->cache_nr; i++) { struct cache_entry *ce = istate->cache[i]; - if (ce_stage(ce)) { - remove_name_hash(ce); - if (last && !strcmp(ce->name, last->name)) - continue; - cache_tree_invalidate_path(istate->cache_tree, ce->name); - last = ce; + struct cache_entry *new_ce; + int size, len; + + if (!ce_stage(ce)) continue; - } - *dst++ = ce; + unmerged = 1; + len = strlen(ce->name); + size = cache_entry_size(len); + new_ce = xcalloc(1, size); + hashcpy(new_ce->sha1, ce->sha1); + memcpy(new_ce->name, ce->name, len); + new_ce->ce_flags = create_ce_flags(len, 0); + new_ce->ce_mode = ce->ce_mode; + if (add_index_entry(istate, new_ce, 0)) + return error("%s: cannot drop to stage #0", + ce->name); + i = index_name_pos(istate, new_ce->name, len); } - istate->cache_nr = dst - istate->cache; - return !!last; + return unmerged; } struct update_callback_data |