From: Junio C Hamano Date: Fri, 19 Apr 2013 17:08:51 GMT Subject: Re: [PATCH v2 1/8] Add new git-cc-cmd helper to contrib Message-ID: <7vfvym30t8.fsf@alter.siamese.dyndns.org> In-Reply-To: <1366348458-7706-2-git-send-email-felipe.contreras@gmail.com> Felipe Contreras writes: > The code finds the changes of a commit, runs 'git blame' for each chunk > to see which other commits are relevant, and then reports the author and > signers. In general, I am not all that interested in adding anything new to contrib/ as git.git has matured enough, but even if this will stay outside my tree, there are a few interesting things to note to help its eventual users. > + roles = roles.map do |person, role| > + address = "%s <%s>" % person > + [person, role] > + end Is address being used elsewhere, or is this a remnant from an earlier debugging or something? > + [id, roles] > + end > + > +end > ... > + File.open(file) do |f| > + f.each do |line| > + case line > + when /^From (\h+) (.+)$/ > + from = $1 > + when /^---\s+(\S+)/ > + source = $1 != '/dev/null' ? $1[2..-1] : nil This may need to be tightened if you want to use this on a real-world project (git.git itself does not count ;-); you may see something like: diff --git "a/a\"b" "b/a\"b" (I did an insane pathname 'a"b' to get the above example, but a more realistic is a character outside ASCII). > + when /^@@\s-(\d+),(\d+)/ > + get_blame(source, $1, $2, from) This may want to be a bit more careful for a hunk that adds to an empty file, which will give you something like @@ -0,0 +1 @@ @@ -0,0 +1,200 @@ Nobody sane would use -U0 when doing a format-patch, but if this wants to accomodate such a patch as well, it needs to ignore a hunk that only adds new lines.