Hi, On Sat, 19 Jan 2008, Linus Torvalds wrote: > Best time before: > > [torvalds@woody linux]$ time git commit > /dev/null > real 0m0.399s > user 0m0.232s > sys 0m0.164s > > Best time after: > > [torvalds@woody linux]$ time git commit > /dev/null > real 0m0.254s > user 0m0.140s > sys 0m0.112s Wow. > I bet you'll see a much bigger performance improvement from this on > Windows in particular. I bet so, too. Traditionally, filesystem calls are painfully slow on Windows. But I cannot test before Monday, so I would not be mad if somebody else could perform some tests on Windows. Now, the changes you made are quite a ways off of my current knowledge of git codepaths, so I cannot really comment. Although they look sane enough. > @@ -687,13 +732,20 @@ int run_diff_index(struct rev_info *revs, int cached) > tree = parse_tree_indirect(ent->sha1); > if (!tree) > return error("bad tree object %s", tree_name); > - if (read_tree(tree, 1, revs->prune_data)) > - return error("unable to read tree object %s", tree_name); > - ret = diff_cache(revs, active_cache, active_nr, revs->prune_data, > - cached, match_missing); > + > + memset(&opts, 0, sizeof(opts)); > + opts.head_idx = 1; > + opts.index_only = cached; > + opts.merge = 1; > + opts.fn = oneway_diff; > + opts.unpack_data = revs; > + > + init_tree_desc(&t, tree->buffer, tree->size); > + unpack_trees(1, &t, &opts); > + > diffcore_std(&revs->diffopt); > diff_flush(&revs->diffopt); > - return ret; > + return 0; > } > > int do_diff_cache(const unsigned char *tree_sha1, struct diff_options *opt) What about do_diff_cache()? Shouldn't it get exactly the same treatment as run_diff_index()? In which case, do_diff_cache() would not be needed anymore, too. > diff --git a/unpack-trees.h b/unpack-trees.h > index 5517faa..197a004 100644 > --- a/unpack-trees.h > +++ b/unpack-trees.h > @@ -25,6 +25,7 @@ struct unpack_trees_options { > int merge_size; > > struct cache_entry *df_conflict_entry; > + void *unpack_data; Maybe this should be called "cb_data", in line with similar places in git.git? > diff --git a/wt-status.c b/wt-status.c > index c0c2472..a18ed11 100644 > --- a/wt-status.c > +++ b/wt-status.c > @@ -229,7 +229,6 @@ static void wt_status_print_initial(struct wt_status *s) > struct strbuf buf; > > strbuf_init(&buf, 0); > - wt_read_cache(s); If I'm not mistaken, you removed all four call sites of wt_read_cache(), and it is static anyway, so it should be removed, no? Ciao, Dscho "who will try to wrap his head around what read_tree() && diff_cache() are supposed to do" - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html