| 473 | } |
| 474 | |
| 475 | int cache_tree_update(struct index_state *istate, int flags) |
| 476 | { |
| 477 | struct odb_transaction *transaction; |
| 478 | int skip, i; |
| 479 | |
| 480 | i = verify_cache(istate, flags); |
| 481 | |
| 482 | if (i) |
| 483 | return i; |
| 484 | |
| 485 | if (!istate->cache_tree) |
| 486 | istate->cache_tree = cache_tree(); |
| 487 | |
| 488 | if (!(flags & WRITE_TREE_MISSING_OK) && repo_has_promisor_remote(the_repository)) |
| 489 | prefetch_cache_entries(istate, must_check_existence); |
| 490 | |
| 491 | trace_performance_enter(); |
| 492 | trace2_region_enter("cache_tree", "update", istate->repo); |
| 493 | transaction = odb_transaction_begin(the_repository->objects); |
| 494 | i = update_one(istate->cache_tree, istate->cache, istate->cache_nr, |
| 495 | "", 0, &skip, flags); |
| 496 | odb_transaction_commit(transaction); |
| 497 | trace2_region_leave("cache_tree", "update", istate->repo); |
| 498 | trace_performance_leave("cache_tree_update"); |
| 499 | if (i < 0) |
| 500 | return i; |
| 501 | istate->cache_changed |= CACHE_TREE_CHANGED; |
| 502 | return 0; |
| 503 | } |
| 504 | |
| 505 | static void write_one(struct strbuf *buffer, struct cache_tree *it, |
| 506 | const char *path, int pathlen) |