3 ms·
The code has grown and become more complex in the last versions because I optimized it until directory traversal + glob matching got sensibly faster than Git's
by mfp 19y ago
The code has grown and become more complex in the last versions because I optimized it until directory traversal + glob matching got sensibly faster than Git's own (git-ls-files --exclude-standard doesn't do exactly the same thing as find-git-files, but meaningful performance comparisons can be done with the -d -o and -m -o options). It's still much smaller than metastore (1/3rd or so) even though it does much more now, however.
You can take a look at the initial version of ometastore here: http://eigenclass.org/repos/gitweb?p=gibak.git;a=blob;f=ometastore.ml;h=cfcdc3fd31c1c80133dde17667288174f16da76d;hb=eae04a9f68c259ef76332c5d6f2b5a914ba4a886 http://eigenclass.org/repos/gitweb?p=gibak.git;a=blob;f=omet...
The functionality from metastore takes ~270 lines vs. ~1500 lines of C, the support for .gitignore takes another 70locs.
It's got one or two bugs in the Gitignore support which I fixed later (and a silly bug in do_finally), but this code is simpler if you want to see what OCaml looks like in actual use (for a system tool, in this case). It's almost (if not actually, I don't remember) the "first version that typed", by the way.