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

[RFC/PATCH] gitweb: Create special from-file/to-file header for combined diff

From
Jakub Narebski <jnareb@gmail.com>
Date
May 27, 2007, 23:16 UTC
Message-ID
<11803077792064-git-send-email-jnareb@gmail.com>
In-Reply-To
<11803077771867-git-send-email-jnareb@gmail.com>

Instead of using default, diff(1) like from-file/to-file header for combined diff (for a merge commit), which looks like:

  --- a/git-gui/git-gui.sh
  +++ b/_git-gui/git-gui.sh_

(where _link_ denotes [hidden] hyperlink), create from-file(n)/to-file header, using n/file for each or parents, e.g.:

  --- 1/_git-gui/git-gui.sh_
  --- 2/_git-gui.sh_
  +++ b/_git-gui/git-gui.sh_
Test it on one of merge commits involving rename, e.g.
  95f97567c1887d77f3a46b42d8622c76414d964d (rename at top)
  5bac4a671907604b5fb4e24ff682d5b0e8431931 (file from one branch)
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
This is just an idea, not seriously meant to be applied... unless of
course you think that this is great. What do you think about it?
This patch depends on my earlier patch
  "gitweb: Split git_patchset_body into separate subroutines"
 gitweb/gitweb.perl |   32 ++++++++++++++++++++++++--------
 1 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 795af92..f73f184 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1045,17 +1045,33 @@ sub format_diff_from_to_header {
 	#assert($line =~ m/^---/) if DEBUG;
 	# no extra formatting "^--- /dev/null"
 	if ($line =~ m!^--- "?a/!) {
-		if (!$diffinfo->{'nparents'} && # multiple 'from'
-		    $from->{'href'}) {
-			$line = '--- a/' .
-			        $cgi->a({-href=>$from->{'href'}, -class=>"path"},
-			                esc_path($from->{'file'}));
+		if (!$diffinfo->{'nparents'}) {
+			if ($from->{'href'}) {
+				$line = '--- a/' .
+				        $cgi->a({-href=>$from->{'href'}, -class=>"path"},
+				                esc_path($from->{'file'}));
+			} else {
+				$line = '--- a/' .
+				        esc_path($from->{'file'});
+			}
+			$result .= qq!<div class="diff from_file">$line</div>\n!;
 		} else {
-			$line = '--- a/' .
-			        esc_path($from->{'file'});
+			for (my $i = 0; $i < $diffinfo->{'nparents'}; $i++) {
+				if ($from->{'href'}[$i]) {
+					$result .= qq!<div class="diff from_file">--- ! .
+					           ($i+1) . "/" .
+					           $cgi->a({-href=>$from->{'href'}[$i], -class=>"path"},
+					                   esc_path($from->{'file'}[$i])) .
+					           qq!</div>\n!;
+				} else {
+					$result .= qq!<div class="diff from_file">--- /dev/null</div>\n!;
+				}
+			}
 		}
+	} else {
+		$result .= qq!<div class="diff from_file">$line</div>\n!;
 	}
-	$result .= qq!<div class="diff from_file">$line</div>\n!;
+
 
 	$line = $to_line;
 	#assert($line =~ m/^\+\+\+/) if DEBUG;
-- 
1.5.2
Previous: Jakub NarebskiNext: Jakub Narebski
Message 2 of 8 in “gitweb: Split git_patchset_body into separate subroutines”
  1. gitweb: Split git_patchset_body into separate subroutinesJakub Narebski, May 27, 2007
  2. gitweb: Create special from-file/to-file header for combined diffJakub Narebski, May 27, 2007
  3. gitweb: Create special from-file/to-file header for combined diffJakub Narebski, May 27, 2007
  4. Jakub NarebskiMay 27, 2007
  5. Junio C HamanoMay 28, 2007
  6. Jakub NarebskiMay 28, 2007
  7. Petr BaudisMay 28, 2007
  8. Jakub NarebskiMay 28, 2007

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.