git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/6] gitweb: Simplify git_diff_print

From
Junio C Hamano <junkio@cox.net>
Date
Aug 6, 2006, 09:26 UTC
Message-ID
<7v8xm2b4g3.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<200608060211.38604.jnareb@gmail.com>
Jakub Narebski <jnareb@gmail.com> writes:
Show 8 quoted lines
> Copy to temporaty file more directly, not using temporary variable @file.
> Use list form of open for diff invocation (we cannot use git-diff because
> first it doesn't support -L/--label option, and we cannot generate diff
> between /dev/null and blob given by it's sha1 identifier). 
>
> Use "local $/ = undef;" for (temporary) slurp mode.
>
> Signed-off-by: Jakub Narebski <jnareb@gmail.com>

I think this part of the gitweb code predates the git-diff support by the core level. If I recall correctly, back then we did not even have "git-diff-{tree,files,index}" when this part was written.

I think you could use "git-diff $from $to" instead of using temporary files and running /usr/bin/diff on it with today's git. Which is a big win from both security and ease of administration point of view. Not having to write anything into temporary file from gitweb.cgi means you do not have to worry about stray gitweb process leaving temporary files dangling behind, for example.

You obviously would need to emulate the -L$from_name -L$to_name part by hand in the loop that reads from the diff output.

One worrysome pathological case is what happens if files being tracked happen to have names that consist of 40-byte hexdigits. I think "git-diff $from $to --" should do the right thing for gitweb use ($from and $to should not mistaken taken as pathnames with the explicit -- disambiguator) and "git-diff -- $from $to" also should do the right thing to take $from and $to as pathnames even if there are revisions with the same object names, but somebody may want to verify that (and send patches to fix if it is not the case).

Previous: Jakub NarebskiNext: Jakub Narebski
Message 5 of 12 in “gitweb: Further refactoring”
  1. 0/6 gitweb: Further refactoringJakub Narebski, Aug 6, 2006
  2. 1/6 gitweb: Refactor untabifying - converting tabs to spacesJakub Narebski, Aug 6, 2006
  3. Matthias LederhoferAug 6, 2006
  4. 2/6 gitweb: Simplify git_diff_printJakub Narebski, Aug 6, 2006
  5. Junio C HamanoAug 6, 2006
  6. Jakub NarebskiAug 6, 2006
  7. 3/6 gitweb: Remove unused parse_date invocation from git_shortlog_bodyJakub Narebski, Aug 6, 2006
  8. 4/6 gitweb: Make blob diff -p1 like commit diffJakub Narebski, Aug 6, 2006
  9. 5/6 gitweb: Refactor printing shortened title in git_shortlog_body and git_tags_bodyJakub Narebski, Aug 6, 2006
  10. 6/6 gitweb: Refactor git_history_bodyJakub Narebski, Aug 6, 2006
  11. Junio C HamanoAug 6, 2006
  12. Jakub NarebskiAug 6, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.