- flush_cache();
- }
- fp = popen("git-write-tree 2>/dev/null", "r");
- while ((ch = fgetc(fp)) != EOF)
- if (i < sizeof(buf)-1 && ch >= '0' && ch <= 'f')
- buf[i++] = ch;
- else
- break;
- rc = pclose(fp);
- if (rc == -1 || WEXITSTATUS(rc))
- return NULL;
- buf[i] = '\0';
- if (get_sha1(buf, sha1) != 0)
- return NULL;
- return lookup_tree(sha1);
+ } else
+ read_cache_from(getenv("GIT_INDEX_FILE"));
+
+ if (!active_cache_tree)
+ active_cache_tree = cache_tree();
+
+ if (!cache_tree_fully_valid(active_cache_tree) &&
+ cache_tree_update(active_cache_tree,
+ active_cache, active_nr, 0, 0) < 0)
+ die("error building trees");
+
+ result = lookup_tree(active_cache_tree->sha1);
+
+ flush_cache();
+ cache_dirty = 0;
+
+ return result;