• L
    [PATCH] Re-organize "git-rev-list --objects" logic · 5bdbaaa4
    Linus Torvalds 提交于
    The logic to calculate the full object list used to be very inter-twined
    with the logic that looked up the commits.
    
    For no good reason - it's actually a lot simpler to just do that logic
    as a separate pass.
    
    This improves performance a bit, and uses slightly less memory in my
    tests, but more importantly it makes the code simpler to work with and
    follow what it does.
    
    The performance win is less than I had hoped for, but I get:
    
    Before:
    
    	[torvalds@g5 linux]$ /usr/bin/time git-rev-list --objects v2.6.12..HEAD | wc -l
    	13.64user 0.42system 0:14.13elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
    	0inputs+0outputs (0major+47947minor)pagefaults 0swaps
    	58945
    
    After:
    
    	[torvalds@g5 linux]$ /usr/bin/time git-rev-list --objects v2.6.12..HEAD | wc -l
    	11.80user 0.36system 0:12.16elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
    	0inputs+0outputs (0major+42684minor)pagefaults 0swaps
    	58945
    
    ie it improved by 2 seconds, and took a 5000+ fewer pages (hey, that's
    20MB out of 174MB to go). And got the same number of objects (in theory,
    the more expensive one might find some more shared objects to avoid. In
    practice it obviously doesn't).
    
    I know how to make it use _lots_ less memory, which will probably speed it
    up. But that's for another time, and I'd prefer to see this go in first.
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    Signed-off-by: NJunio C Hamano <junkio@cox.net>
    5bdbaaa4
rev-list.c 13.4 KB