Hi, On Wed, 24 Jun 2009, Junio C Hamano wrote: > Johannes Schindelin writes: > > > This here script: > > > > -- snip -- > > for file in abspath.c alias.c cache.h color.c color.h config.c ctype.c \ > > environment.c exec_cmd.c exec_cmd.h help.c help.h levenshtein.c \ > > levenshtein.h pager.c parse-options.c parse-options.h path.c \ > > quote.c quote.h run-command.c run-command.h sigchain.c sigchain.h \ > > strbuf.c strbuf.h string.c string.h symbol.c symbol.h usage.c \ > > util.h wrapper.c > > do > > echo $file > > git shortlog -n -s $file | head -n 2 > > done > > I have thought about suggesting this myself, and your output for many of > the files matched my intuition, but some were grossly off, so I checked. > > The above procedure counts commits, and a one liner "s/char \*/const &/" > weighs as heavily as the patch that implemented the whole thing, for a > file that was done in one commit almost perfectly except that it needed a > small constness fix. Summarizing output from "blame" for each file may > give you a more meaningful results: > > # timestamp > ts='[12][0-9][0-9][0-9]-[0-9][0-9]-[0-3][0-9] ..:..:.. [-+]....' > # linenum > lno='[1-9][0-9]*' > git blame "$file" | > sed -e 's/^[^ ]* *(\([^)]*[^ ]\) *'"$ts *$lno"').*/\1/' | > sort | > uniq -c | > sort -r -n > > For example, I do not think it is fair to credit me for abspath.c more > than Dmitry like this: > > > outputs this (note that a few files you mentioned are not in git.git): > > > > abspath.c > > 2 Junio C Hamano > > 1 Dmitry Potapov > > Initially Dmitry introduced this file with 5b8e6f8 (shrink git-shell by > avoiding redundant dependencies, 2008-06-28) at 68 lines. J6t added 36 > lines for add_path() with 10c4c88 (Allow add_path() to add non-existent > directories to the path, 2008-07-21), I added 12 lines to add a new > function with 90b4a71 (is_directory(): a generic helper function, > 2008-09-09) and then added a two-liner out-of-bounds-then-die check in > 737e31a (make_absolute_path(): check bounds when seeing an overlong > symlink, 2008-12-17). Okay, a script similar to what you propose shows this: abspath.c 67 Dmitry Potapov 36 Johannes Sixt alias.c 49 Miklos Vajna 24 Jeff King cache.h 305 Junio C Hamano 263 Linus Torvalds color.c 136 Jeff King 29 Johannes Schindelin color.h 10 Matthias Kestenholz 10 Jeff King config.c 352 Linus Torvalds 284 Johannes Schindelin ctype.c 15 René Scharfe 11 Linus Torvalds environment.c 68 Linus Torvalds 34 Johannes Schindelin exec_cmd.c 47 Michal Ostrowski 40 Steffen Prohaska exec_cmd.h 5 Junio C Hamano 2 Steve Haslam help.c 79 Linus Torvalds 73 Johannes Schindelin help.h 25 Miklos Vajna 3 Alex Riesen levenshtein.c 82 Johannes Schindelin 1 Samuel Tardieu levenshtein.h 8 Johannes Schindelin pager.c 34 Jeff King 25 Johannes Sixt parse-options.c 386 Pierre Habouzit 81 René Scharfe parse-options.h 151 Pierre Habouzit 14 René Scharfe path.c 201 Junio C Hamano 83 Linus Torvalds quote.c 189 Pierre Habouzit 106 Junio C Hamano quote.h 31 Junio C Hamano 11 Christian Couder run-command.c 173 Johannes Sixt 87 Shawn O. Pearce run-command.h 46 Johannes Sixt 20 Shawn O. Pearce sigchain.c 52 Jeff King sigchain.h 11 Jeff King strbuf.c 178 Johannes Schindelin 146 Pierre Habouzit strbuf.h 93 Pierre Habouzit 16 Junio C Hamano string.c string.h symbol.c symbol.h usage.c 31 Linus Torvalds 28 Petr Baudis util.h wrapper.c 220 Linus Torvalds 69 Junio C Hamano Obviously I don't like these results as much, as I do not show up as often anymore. Besides, I think it is not fair to put me on top of the list of authors of strbuf.c. Ciao, Dscho