2012-03-29 25 views
3

在我本地的ikiwiki上,我使用gitweb瀏覽文件歷史記錄。如果我在ikiwiki中的GitWeb點擊history,然後diff to current它指向我像下面這樣的URL:404 Not Found - 缺少其中一個blob diff參數

http://localhost/gitweb/gitweb.cgi?p=.git;a=blobdiff;f=index.mdwn;h=0622da9b56b6a4f79388f3dc539d4c7d603ae4e9;hp=619d6d14eaf36b6bff80f7b68ce4f139fa0de9b2;hpb=000825c005ffc4c62279509119d80f1262023338 

,並顯示錯誤消息:

404未找到 - 缺少的一個blob diff參數

但blob和commitdiff的作品。

任何想法如何解決這個問題?

回答

0

下面是從最新的源root/gitweb/gitweb.perl

# preparing $fd and %diffinfo for git_patchset_body 
# new style URI 
if (defined $hash_base && defined $hash_parent_base) { 
    if (defined $file_name) { 
     # read raw output 
     open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, 
      $hash_parent_base, $hash_base, 
      "--", (defined $file_parent ? $file_parent :()), $file_name 
      or die_error(500, "Open git-diff-tree failed"); 
     @difftree = map { chomp; $_ } <$fd>; 
     close $fd 
      or die_error(404, "Reading git-diff-tree failed"); 
     @difftree 
      or die_error(404, "Blob diff not found"); 

    } elsif (defined $hash && 
      $hash =~ /[0-9a-fA-F]{40}/) { 
     # try to find filename from $hash 

     # read filtered raw output 
     open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, 
      $hash_parent_base, $hash_base, "--" 
      or die_error(500, "Open git-diff-tree failed"); 
     @difftree = 
      # ':100644 100644 03b21826... 3b93d5e7... M ls-files.c' 
      # $hash == to_id 
      grep { /^:[0-7]{6} [0-7]{6} [0-9a-fA-F]{40} $hash/ } 
      map { chomp; $_ } <$fd>; 
     close $fd 
      or die_error(404, "Reading git-diff-tree failed"); 
     @difftree 
      or die_error(404, "Blob diff not found"); 

    } else { 
     die_error(400, "Missing one of the blob diff parameters"); 
    } 

    if (@difftree > 1) { 
     die_error(400, "Ambiguous blob diff specification"); 
    } 

    %diffinfo = parse_difftree_raw_line($difftree[0]); 
    $file_parent ||= $diffinfo{'from_file'} || $file_name; 
    $file_name ||= $diffinfo{'to_file'}; 

    $hash_parent ||= $diffinfo{'from_id'}; 
    $hash  ||= $diffinfo{'to_id'}; 

    # non-textual hash id's can be cached 
    if ($hash_base =~ m/^[0-9a-fA-F]{40}$/ && 
     $hash_parent_base =~ m/^[0-9a-fA-F]{40}$/) { 
     $expires = '+1d'; 
    } 

    # open patch output 
    open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts, 
     '-p', ($format eq 'html' ? "--full-index" :()), 
     $hash_parent_base, $hash_base, 
     "--", (defined $file_parent ? $file_parent :()), $file_name 
     or die_error(500, "Open git-diff-tree failed"); 
} 

# old/legacy style URI 
if (!%diffinfo && # if new style URI failed 
    defined $hash && defined $hash_parent) { 
    # fake git-diff-tree raw output 
    $diffinfo{'from_mode'} = $diffinfo{'to_mode'} = "blob"; 
    $diffinfo{'from_id'} = $hash_parent; 
    $diffinfo{'to_id'} = $hash; 
    if (defined $file_name) { 
     if (defined $file_parent) { 
      $diffinfo{'status'} = '2'; 
      $diffinfo{'from_file'} = $file_parent; 
      $diffinfo{'to_file'} = $file_name; 
     } else { # assume not renamed 
      $diffinfo{'status'} = '1'; 
      $diffinfo{'from_file'} = $file_name; 
      $diffinfo{'to_file'} = $file_name; 
     } 
    } else { # no filename given 
     $diffinfo{'status'} = '2'; 
     $diffinfo{'from_file'} = $hash_parent; 
     $diffinfo{'to_file'} = $hash; 
    } 

    # non-textual hash id's can be cached 
    if ($hash =~ m/^[0-9a-fA-F]{40}$/ && 
     $hash_parent =~ m/^[0-9a-fA-F]{40}$/) { 
     $expires = '+1d'; 
    } 

    # open patch output 
    open $fd, "-|", git_cmd(), "diff", @diff_opts, 
     '-p', ($format eq 'html' ? "--full-index" :()), 
     $hash_parent, $hash, "--" 
     or die_error(500, "Open git-diff failed"); 
} else { 
    die_error(400, "Missing one of the blob diff parameters") 
     unless %diffinfo; 
} 

與其它代碼段的代碼片段(不相關的代碼被省略)下面是用於參數解析:

our $file_name = $cgi->param('f'); 
our $hash = $cgi->param('h'); 
our $hash_parent = $cgi->param('hp'); 
our $hash_base = $cgi->param('hb'); 
our $hash_parent_base = $cgi->param('hpb'); 

因此,以下是假:

defined $hash_base 

不幸的是,這些都是我得到的。
從上面的這些代碼,預計不會發生異常。
但是,你的gitweb可能不是最新的。我建議你檢查你的來源。

+0

@student你可以升級gitweb,看看問題是否仍然存在 – 2012-07-12 23:19:57