gitweb: Great subroutines renaming

Rename some of subroutines to better reflect what they do.
Some renames were not performed because subroutine name
reflects hash key.

Subroutines name guideline:
* git_ prefix for subroutines related to git commands,
  git repository, or to gitweb actions
* git_get_ prefix for inner subroutines calling git command
  or reading some file in the repository and returning some output
* parse_ prefix for subroutines parsing some text (or reading and
  parsing some text) into hash or list
* format_ prefix for subroutines formatting, post-processing
  or generating some HTML/text fragment
* _get_ infix for subroutines which return result
* _print_ infix for subroutines which print fragment of output
* _body suffix for subroutines which outputs main part (body)
  of related action (usually table)
* _nav suffix for subroutines related to navigation bars
* _div suffix for subroutines returning or printing div element
* subroutine names should not be based on how the result is obtained,
  as this might change easily

Renames performed:
- git_get_referencing => format_ref_marker
- git_get_paging_nav => format_paging_nav
- git_read_head => git_get_head_hash
- git_read_hash => git_get_hash_by_ref
- git_read_description => git_get_project_description
- git_read_projects => git_get_projects_list
- read_info_ref => git_get_references
- git_read_refs => git_get_refs_list
- date_str => parse_date
- git_read_tag => parse_tag
- git_read_commit => parse_commit
- git_blob_plain_mimetype => blob_mimetype
- git_page_nav => git_print_page_nav
- git_header_div => git_print_header_div

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Jakub Narebski 2006-08-14 02:05:47 +02:00 committed by Junio C Hamano
parent 460cccd3ba
commit 847e01fb00
1 changed files with 125 additions and 125 deletions

View File

@ -362,7 +362,7 @@ sub format_log_line_html {
} }


# format marker of refs pointing to given object # format marker of refs pointing to given object
sub git_get_referencing { sub format_ref_marker {
my ($refs, $id) = @_; my ($refs, $id) = @_;


if (defined $refs->{$id}) { if (defined $refs->{$id}) {
@ -376,7 +376,7 @@ sub git_get_referencing {
## git utility subroutines, invoking git commands ## git utility subroutines, invoking git commands


# get HEAD ref of given project as hash # get HEAD ref of given project as hash
sub git_read_head { sub git_get_head_hash {
my $project = shift; my $project = shift;
my $oENV = $ENV{'GIT_DIR'}; my $oENV = $ENV{'GIT_DIR'};
my $retval = undef; my $retval = undef;
@ -445,7 +445,7 @@ sub git_get_hash_by_path {
## git utility functions, directly accessing git repository ## git utility functions, directly accessing git repository


# assumes that PATH is not symref # assumes that PATH is not symref
sub git_read_hash { sub git_get_hash_by_ref {
my $path = shift; my $path = shift;


open my $fd, "$projectroot/$path" or return undef; open my $fd, "$projectroot/$path" or return undef;
@ -457,7 +457,7 @@ sub git_read_hash {
} }
} }


sub git_read_description { sub git_get_project_description {
my $path = shift; my $path = shift;


open my $fd, "$projectroot/$path/description" or return undef; open my $fd, "$projectroot/$path/description" or return undef;
@ -467,7 +467,7 @@ sub git_read_description {
return $descr; return $descr;
} }


sub git_read_projects { sub git_get_projects_list {
my @list; my @list;


if (-d $projects_list) { if (-d $projects_list) {
@ -511,7 +511,7 @@ sub git_read_projects {
return @list; return @list;
} }


sub read_info_ref { sub git_get_references {
my $type = shift || ""; my $type = shift || "";
my %refs; my %refs;
# 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11 # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11
@ -536,7 +536,7 @@ sub read_info_ref {
## ---------------------------------------------------------------------- ## ----------------------------------------------------------------------
## parse to hash functions ## parse to hash functions


sub date_str { sub parse_date {
my $epoch = shift; my $epoch = shift;
my $tz = shift || "-0000"; my $tz = shift || "-0000";


@ -561,7 +561,7 @@ sub date_str {
return %date; return %date;
} }


sub git_read_tag { sub parse_tag {
my $tag_id = shift; my $tag_id = shift;
my %tag; my %tag;
my @comment; my @comment;
@ -596,7 +596,7 @@ sub git_read_tag {
return %tag return %tag
} }


sub git_read_commit { sub parse_commit {
my $commit_id = shift; my $commit_id = shift;
my $commit_text = shift; my $commit_text = shift;


@ -693,7 +693,7 @@ sub git_read_commit {
## ...................................................................... ## ......................................................................
## parse to array of hashes functions ## parse to array of hashes functions


sub git_read_refs { sub git_get_refs_list {
my $ref_dir = shift; my $ref_dir = shift;
my @reflist; my @reflist;


@ -707,7 +707,7 @@ sub git_read_refs {
}, "$projectroot/$project/$ref_dir"); }, "$projectroot/$project/$ref_dir");


foreach my $ref_file (@refs) { foreach my $ref_file (@refs) {
my $ref_id = git_read_hash("$project/$ref_dir/$ref_file"); my $ref_id = git_get_hash_by_ref("$project/$ref_dir/$ref_file");
my $type = git_get_type($ref_id) || next; my $type = git_get_type($ref_id) || next;
my %ref_item; my %ref_item;
my %co; my %co;
@ -716,10 +716,10 @@ sub git_read_refs {
$ref_item{'epoch'} = 0; $ref_item{'epoch'} = 0;
$ref_item{'age'} = "unknown"; $ref_item{'age'} = "unknown";
if ($type eq "tag") { if ($type eq "tag") {
my %tag = git_read_tag($ref_id); my %tag = parse_tag($ref_id);
$ref_item{'comment'} = $tag{'comment'}; $ref_item{'comment'} = $tag{'comment'};
if ($tag{'type'} eq "commit") { if ($tag{'type'} eq "commit") {
%co = git_read_commit($tag{'object'}); %co = parse_commit($tag{'object'});
$ref_item{'epoch'} = $co{'committer_epoch'}; $ref_item{'epoch'} = $co{'committer_epoch'};
$ref_item{'age'} = $co{'age_string'}; $ref_item{'age'} = $co{'age_string'};
} elsif (defined($tag{'epoch'})) { } elsif (defined($tag{'epoch'})) {
@ -731,7 +731,7 @@ sub git_read_refs {
$ref_item{'name'} = $tag{'name'}; $ref_item{'name'} = $tag{'name'};
$ref_item{'refid'} = $tag{'object'}; $ref_item{'refid'} = $tag{'object'};
} elsif ($type eq "commit"){ } elsif ($type eq "commit"){
%co = git_read_commit($ref_id); %co = parse_commit($ref_id);
$ref_item{'reftype'} = "commit"; $ref_item{'reftype'} = "commit";
$ref_item{'name'} = $ref_file; $ref_item{'name'} = $ref_file;
$ref_item{'title'} = $co{'title'}; $ref_item{'title'} = $co{'title'};
@ -806,7 +806,7 @@ sub mimetype_guess {
return $mime; return $mime;
} }


sub git_blob_plain_mimetype { sub blob_mimetype {
my $fd = shift; my $fd = shift;
my $filename = shift; my $filename = shift;


@ -925,7 +925,7 @@ EOF
sub git_footer_html { sub git_footer_html {
print "<div class=\"page_footer\">\n"; print "<div class=\"page_footer\">\n";
if (defined $project) { if (defined $project) {
my $descr = git_read_description($project); my $descr = git_get_project_description($project);
if (defined $descr) { if (defined $descr) {
print "<div class=\"page_footer_text\">" . esc_html($descr) . "</div>\n"; print "<div class=\"page_footer_text\">" . esc_html($descr) . "</div>\n";
} }
@ -955,7 +955,7 @@ sub die_error {
## ---------------------------------------------------------------------- ## ----------------------------------------------------------------------
## functions printing or outputting HTML: navigation ## functions printing or outputting HTML: navigation


sub git_page_nav { sub git_print_page_nav {
my ($current, $suppress, $head, $treehead, $treebase, $extra) = @_; my ($current, $suppress, $head, $treehead, $treebase, $extra) = @_;
$extra = '' if !defined $extra; # pager or formats $extra = '' if !defined $extra; # pager or formats


@ -989,7 +989,7 @@ sub git_page_nav {
"</div>\n"; "</div>\n";
} }


sub git_get_paging_nav { sub format_paging_nav {
my ($action, $hash, $head, $page, $nrevs) = @_; my ($action, $hash, $head, $page, $nrevs) = @_;
my $paging_nav; my $paging_nav;


@ -1022,7 +1022,7 @@ sub git_get_paging_nav {
## ...................................................................... ## ......................................................................
## functions printing or outputting HTML: div ## functions printing or outputting HTML: div


sub git_header_div { sub git_print_header_div {
my ($action, $title, $hash, $hash_base) = @_; my ($action, $title, $hash, $hash_base) = @_;
my $rest = ''; my $rest = '';


@ -1062,9 +1062,9 @@ sub git_shortlog_body {
my $alternate = 0; my $alternate = 0;
for (my $i = $from; $i <= $to; $i++) { for (my $i = $from; $i <= $to; $i++) {
my $commit = $revlist->[$i]; my $commit = $revlist->[$i];
#my $ref = defined $refs ? git_get_referencing($refs, $commit) : ''; #my $ref = defined $refs ? format_ref_marker($refs, $commit) : '';
my $ref = git_get_referencing($refs, $commit); my $ref = format_ref_marker($refs, $commit);
my %co = git_read_commit($commit); my %co = parse_commit($commit);
if ($alternate) { if ($alternate) {
print "<tr class=\"dark\">\n"; print "<tr class=\"dark\">\n";
} else { } else {
@ -1282,24 +1282,24 @@ sub git_project_list {
die_error(undef, "Unknown order parameter"); die_error(undef, "Unknown order parameter");
} }


my @list = git_read_projects(); my @list = git_get_projects_list();
my @projects; my @projects;
if (!@list) { if (!@list) {
die_error(undef, "No projects found"); die_error(undef, "No projects found");
} }
foreach my $pr (@list) { foreach my $pr (@list) {
my $head = git_read_head($pr->{'path'}); my $head = git_get_head_hash($pr->{'path'});
if (!defined $head) { if (!defined $head) {
next; next;
} }
$ENV{'GIT_DIR'} = "$projectroot/$pr->{'path'}"; $ENV{'GIT_DIR'} = "$projectroot/$pr->{'path'}";
my %co = git_read_commit($head); my %co = parse_commit($head);
if (!%co) { if (!%co) {
next; next;
} }
$pr->{'commit'} = \%co; $pr->{'commit'} = \%co;
if (!defined $pr->{'descr'}) { if (!defined $pr->{'descr'}) {
my $descr = git_read_description($pr->{'path'}) || ""; my $descr = git_get_project_description($pr->{'path'}) || "";
$pr->{'descr'} = chop_str($descr, 25, 5); $pr->{'descr'} = chop_str($descr, 25, 5);
} }
if (!defined $pr->{'owner'}) { if (!defined $pr->{'owner'}) {
@ -1383,10 +1383,10 @@ sub git_project_list {
} }


sub git_summary { sub git_summary {
my $descr = git_read_description($project) || "none"; my $descr = git_get_project_description($project) || "none";
my $head = git_read_head($project); my $head = git_get_head_hash($project);
my %co = git_read_commit($head); my %co = parse_commit($head);
my %cd = date_str($co{'committer_epoch'}, $co{'committer_tz'}); my %cd = parse_date($co{'committer_epoch'}, $co{'committer_tz'});


my $owner; my $owner;
if (-f $projects_list) { if (-f $projects_list) {
@ -1407,9 +1407,9 @@ sub git_summary {
$owner = get_file_owner("$projectroot/$project"); $owner = get_file_owner("$projectroot/$project");
} }


my $refs = read_info_ref(); my $refs = git_get_references();
git_header_html(); git_header_html();
git_page_nav('summary','', $head); git_print_page_nav('summary','', $head);


print "<div class=\"title\">&nbsp;</div>\n"; print "<div class=\"title\">&nbsp;</div>\n";
print "<table cellspacing=\"0\">\n" . print "<table cellspacing=\"0\">\n" .
@ -1418,24 +1418,24 @@ sub git_summary {
"<tr><td>last change</td><td>$cd{'rfc2822'}</td></tr>\n" . "<tr><td>last change</td><td>$cd{'rfc2822'}</td></tr>\n" .
"</table>\n"; "</table>\n";


open my $fd, "-|", $GIT, "rev-list", "--max-count=17", git_read_head($project) open my $fd, "-|", $GIT, "rev-list", "--max-count=17", git_get_head_hash($project)
or die_error(undef, "Open git-rev-list failed"); or die_error(undef, "Open git-rev-list failed");
my @revlist = map { chomp; $_ } <$fd>; my @revlist = map { chomp; $_ } <$fd>;
close $fd; close $fd;
git_header_div('shortlog'); git_print_header_div('shortlog');
git_shortlog_body(\@revlist, 0, 15, $refs, git_shortlog_body(\@revlist, 0, 15, $refs,
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=shortlog")}, "...")); $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=shortlog")}, "..."));


my $taglist = git_read_refs("refs/tags"); my $taglist = git_get_refs_list("refs/tags");
if (defined @$taglist) { if (defined @$taglist) {
git_header_div('tags'); git_print_header_div('tags');
git_tags_body($taglist, 0, 15, git_tags_body($taglist, 0, 15,
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tags")}, "...")); $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tags")}, "..."));
} }


my $headlist = git_read_refs("refs/heads"); my $headlist = git_get_refs_list("refs/heads");
if (defined @$headlist) { if (defined @$headlist) {
git_header_div('heads'); git_print_header_div('heads');
git_heads_body($headlist, $head, 0, 15, git_heads_body($headlist, $head, 0, 15,
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=heads")}, "...")); $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=heads")}, "..."));
} }
@ -1444,11 +1444,11 @@ sub git_summary {
} }


sub git_tag { sub git_tag {
my $head = git_read_head($project); my $head = git_get_head_hash($project);
git_header_html(); git_header_html();
git_page_nav('','', $head,undef,$head); git_print_page_nav('','', $head,undef,$head);
my %tag = git_read_tag($hash); my %tag = parse_tag($hash);
git_header_div('commit', esc_html($tag{'name'}), $hash); git_print_header_div('commit', esc_html($tag{'name'}), $hash);
print "<div class=\"title_text\">\n" . print "<div class=\"title_text\">\n" .
"<table cellspacing=\"0\">\n" . "<table cellspacing=\"0\">\n" .
"<tr>\n" . "<tr>\n" .
@ -1457,7 +1457,7 @@ sub git_tag {
"<td class=\"link\">" . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$tag{'type'};h=$tag{'object'}")}, $tag{'type'}) . "</td>\n" . "<td class=\"link\">" . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$tag{'type'};h=$tag{'object'}")}, $tag{'type'}) . "</td>\n" .
"</tr>\n"; "</tr>\n";
if (defined($tag{'author'})) { if (defined($tag{'author'})) {
my %ad = date_str($tag{'epoch'}, $tag{'tz'}); my %ad = parse_date($tag{'epoch'}, $tag{'tz'});
print "<tr><td>author</td><td>" . esc_html($tag{'author'}) . "</td></tr>\n"; print "<tr><td>author</td><td>" . esc_html($tag{'author'}) . "</td></tr>\n";
print "<tr><td></td><td>" . $ad{'rfc2822'} . sprintf(" (%02d:%02d %s)", $ad{'hour_local'}, $ad{'minute_local'}, $ad{'tz_local'}) . "</td></tr>\n"; print "<tr><td></td><td>" . $ad{'rfc2822'} . sprintf(" (%02d:%02d %s)", $ad{'hour_local'}, $ad{'minute_local'}, $ad{'tz_local'}) . "</td></tr>\n";
} }
@ -1477,9 +1477,9 @@ sub git_blame2 {
my $ftype; my $ftype;
die_error(undef, "Permission denied") if (!git_get_project_config_bool ('blame')); die_error(undef, "Permission denied") if (!git_get_project_config_bool ('blame'));
die_error('404 Not Found', "File name not defined") if (!$file_name); die_error('404 Not Found', "File name not defined") if (!$file_name);
$hash_base ||= git_read_head($project); $hash_base ||= git_get_head_hash($project);
die_error(undef, "Couldn't find base commit") unless ($hash_base); die_error(undef, "Couldn't find base commit") unless ($hash_base);
my %co = git_read_commit($hash_base) my %co = parse_commit($hash_base)
or die_error(undef, "Reading commit failed"); or die_error(undef, "Reading commit failed");
if (!defined $hash) { if (!defined $hash) {
$hash = git_get_hash_by_path($hash_base, $file_name, "blob") $hash = git_get_hash_by_path($hash_base, $file_name, "blob")
@ -1495,8 +1495,8 @@ sub git_blame2 {
my $formats_nav = my $formats_nav =
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$hash;hb=$hash_base;f=$file_name")}, "blob") . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$hash;hb=$hash_base;f=$file_name")}, "blob") .
" | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;f=$file_name")}, "head"); " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;f=$file_name")}, "head");
git_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav); git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
git_header_div('commit', esc_html($co{'title'}), $hash_base); git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
git_print_page_path($file_name, $ftype); git_print_page_path($file_name, $ftype);
my @rev_color = (qw(light2 dark2)); my @rev_color = (qw(light2 dark2));
my $num_colors = scalar(@rev_color); my $num_colors = scalar(@rev_color);
@ -1535,9 +1535,9 @@ sub git_blame {
my $fd; my $fd;
die_error('403 Permission denied', "Permission denied") if (!git_get_project_config_bool ('blame')); die_error('403 Permission denied', "Permission denied") if (!git_get_project_config_bool ('blame'));
die_error('404 Not Found', "File name not defined") if (!$file_name); die_error('404 Not Found', "File name not defined") if (!$file_name);
$hash_base ||= git_read_head($project); $hash_base ||= git_get_head_hash($project);
die_error(undef, "Couldn't find base commit") unless ($hash_base); die_error(undef, "Couldn't find base commit") unless ($hash_base);
my %co = git_read_commit($hash_base) my %co = parse_commit($hash_base)
or die_error(undef, "Reading commit failed"); or die_error(undef, "Reading commit failed");
if (!defined $hash) { if (!defined $hash) {
$hash = git_get_hash_by_path($hash_base, $file_name, "blob") $hash = git_get_hash_by_path($hash_base, $file_name, "blob")
@ -1549,8 +1549,8 @@ sub git_blame {
my $formats_nav = my $formats_nav =
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$hash;hb=$hash_base;f=$file_name")}, "blob") . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$hash;hb=$hash_base;f=$file_name")}, "blob") .
" | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;f=$file_name")}, "head"); " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;f=$file_name")}, "head");
git_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav); git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
git_header_div('commit', esc_html($co{'title'}), $hash_base); git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
git_print_page_path($file_name, 'blob'); git_print_page_path($file_name, 'blob');
print "<div class=\"page_body\">\n"; print "<div class=\"page_body\">\n";
print <<HTML; print <<HTML;
@ -1618,12 +1618,12 @@ HTML
} }


sub git_tags { sub git_tags {
my $head = git_read_head($project); my $head = git_get_head_hash($project);
git_header_html(); git_header_html();
git_page_nav('','', $head,undef,$head); git_print_page_nav('','', $head,undef,$head);
git_header_div('summary', $project); git_print_header_div('summary', $project);


my $taglist = git_read_refs("refs/tags"); my $taglist = git_get_refs_list("refs/tags");
if (defined @$taglist) { if (defined @$taglist) {
git_tags_body($taglist); git_tags_body($taglist);
} }
@ -1631,12 +1631,12 @@ sub git_tags {
} }


sub git_heads { sub git_heads {
my $head = git_read_head($project); my $head = git_get_head_hash($project);
git_header_html(); git_header_html();
git_page_nav('','', $head,undef,$head); git_print_page_nav('','', $head,undef,$head);
git_header_div('summary', $project); git_print_header_div('summary', $project);


my $taglist = git_read_refs("refs/heads"); my $taglist = git_get_refs_list("refs/heads");
if (defined @$taglist) { if (defined @$taglist) {
git_heads_body($taglist, $head); git_heads_body($taglist, $head);
} }
@ -1646,7 +1646,7 @@ sub git_heads {
sub git_blob_plain { sub git_blob_plain {
if (!defined $hash) { if (!defined $hash) {
if (defined $file_name) { if (defined $file_name) {
my $base = $hash_base || git_read_head($project); my $base = $hash_base || git_get_head_hash($project);
$hash = git_get_hash_by_path($base, $file_name, "blob") $hash = git_get_hash_by_path($base, $file_name, "blob")
or die_error(undef, "Error lookup file"); or die_error(undef, "Error lookup file");
} else { } else {
@ -1657,7 +1657,7 @@ sub git_blob_plain {
open my $fd, "-|", $GIT, "cat-file", "blob", $hash open my $fd, "-|", $GIT, "cat-file", "blob", $hash
or die_error(undef, "Couldn't cat $file_name, $hash"); or die_error(undef, "Couldn't cat $file_name, $hash");


$type ||= git_blob_plain_mimetype($fd, $file_name); $type ||= blob_mimetype($fd, $file_name);


# save as filename, even when no $file_name is given # save as filename, even when no $file_name is given
my $save_as = "$hash"; my $save_as = "$hash";
@ -1679,7 +1679,7 @@ sub git_blob_plain {
sub git_blob { sub git_blob {
if (!defined $hash) { if (!defined $hash) {
if (defined $file_name) { if (defined $file_name) {
my $base = $hash_base || git_read_head($project); my $base = $hash_base || git_get_head_hash($project);
$hash = git_get_hash_by_path($base, $file_name, "blob") $hash = git_get_hash_by_path($base, $file_name, "blob")
or die_error(undef, "Error lookup file"); or die_error(undef, "Error lookup file");
} else { } else {
@ -1689,14 +1689,14 @@ sub git_blob {
my $have_blame = git_get_project_config_bool ('blame'); my $have_blame = git_get_project_config_bool ('blame');
open my $fd, "-|", $GIT, "cat-file", "blob", $hash open my $fd, "-|", $GIT, "cat-file", "blob", $hash
or die_error(undef, "Couldn't cat $file_name, $hash"); or die_error(undef, "Couldn't cat $file_name, $hash");
my $mimetype = git_blob_plain_mimetype($fd, $file_name); my $mimetype = blob_mimetype($fd, $file_name);
if ($mimetype !~ m/^text\//) { if ($mimetype !~ m/^text\//) {
close $fd; close $fd;
return git_blob_plain($mimetype); return git_blob_plain($mimetype);
} }
git_header_html(); git_header_html();
my $formats_nav = ''; my $formats_nav = '';
if (defined $hash_base && (my %co = git_read_commit($hash_base))) { if (defined $hash_base && (my %co = parse_commit($hash_base))) {
if (defined $file_name) { if (defined $file_name) {
if ($have_blame) { if ($have_blame) {
$formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;h=$hash;hb=$hash_base;f=$file_name")}, "blame") . " | "; $formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;h=$hash;hb=$hash_base;f=$file_name")}, "blame") . " | ";
@ -1707,8 +1707,8 @@ sub git_blob {
} else { } else {
$formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob_plain;h=$hash")}, "plain"); $formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob_plain;h=$hash")}, "plain");
} }
git_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav); git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
git_header_div('commit', esc_html($co{'title'}), $hash_base); git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
} else { } else {
print "<div class=\"page_nav\">\n" . print "<div class=\"page_nav\">\n" .
"<br/><br/></div>\n" . "<br/><br/></div>\n" .
@ -1730,7 +1730,7 @@ sub git_blob {


sub git_tree { sub git_tree {
if (!defined $hash) { if (!defined $hash) {
$hash = git_read_head($project); $hash = git_get_head_hash($project);
if (defined $file_name) { if (defined $file_name) {
my $base = $hash_base || $hash; my $base = $hash_base || $hash;
$hash = git_get_hash_by_path($base, $file_name, "tree"); $hash = git_get_hash_by_path($base, $file_name, "tree");
@ -1746,16 +1746,16 @@ sub git_tree {
close $fd or die_error(undef, "Reading tree failed"); close $fd or die_error(undef, "Reading tree failed");
$/ = "\n"; $/ = "\n";


my $refs = read_info_ref(); my $refs = git_get_references();
my $ref = git_get_referencing($refs, $hash_base); my $ref = format_ref_marker($refs, $hash_base);
git_header_html(); git_header_html();
my $base_key = ""; my $base_key = "";
my $base = ""; my $base = "";
my $have_blame = git_get_project_config_bool ('blame'); my $have_blame = git_get_project_config_bool ('blame');
if (defined $hash_base && (my %co = git_read_commit($hash_base))) { if (defined $hash_base && (my %co = parse_commit($hash_base))) {
$base_key = ";hb=$hash_base"; $base_key = ";hb=$hash_base";
git_page_nav('tree','', $hash_base); git_print_page_nav('tree','', $hash_base);
git_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base); git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base);
} else { } else {
print "<div class=\"page_nav\">\n"; print "<div class=\"page_nav\">\n";
print "<br/><br/></div>\n"; print "<br/><br/></div>\n";
@ -1811,14 +1811,14 @@ sub git_tree {
} }


sub git_log { sub git_log {
my $head = git_read_head($project); my $head = git_get_head_hash($project);
if (!defined $hash) { if (!defined $hash) {
$hash = $head; $hash = $head;
} }
if (!defined $page) { if (!defined $page) {
$page = 0; $page = 0;
} }
my $refs = read_info_ref(); my $refs = git_get_references();


my $limit = sprintf("--max-count=%i", (100 * ($page+1))); my $limit = sprintf("--max-count=%i", (100 * ($page+1)));
open my $fd, "-|", $GIT, "rev-list", $limit, $hash open my $fd, "-|", $GIT, "rev-list", $limit, $hash
@ -1826,24 +1826,24 @@ sub git_log {
my @revlist = map { chomp; $_ } <$fd>; my @revlist = map { chomp; $_ } <$fd>;
close $fd; close $fd;


my $paging_nav = git_get_paging_nav('log', $hash, $head, $page, $#revlist); my $paging_nav = format_paging_nav('log', $hash, $head, $page, $#revlist);


git_header_html(); git_header_html();
git_page_nav('log','', $hash,undef,undef, $paging_nav); git_print_page_nav('log','', $hash,undef,undef, $paging_nav);


if (!@revlist) { if (!@revlist) {
my %co = git_read_commit($hash); my %co = parse_commit($hash);


git_header_div('summary', $project); git_print_header_div('summary', $project);
print "<div class=\"page_body\"> Last change $co{'age_string'}.<br/><br/></div>\n"; print "<div class=\"page_body\"> Last change $co{'age_string'}.<br/><br/></div>\n";
} }
for (my $i = ($page * 100); $i <= $#revlist; $i++) { for (my $i = ($page * 100); $i <= $#revlist; $i++) {
my $commit = $revlist[$i]; my $commit = $revlist[$i];
my $ref = git_get_referencing($refs, $commit); my $ref = format_ref_marker($refs, $commit);
my %co = git_read_commit($commit); my %co = parse_commit($commit);
next if !%co; next if !%co;
my %ad = date_str($co{'author_epoch'}); my %ad = parse_date($co{'author_epoch'});
git_header_div('commit', git_print_header_div('commit',
"<span class=\"age\">$co{'age_string'}</span>" . "<span class=\"age\">$co{'age_string'}</span>" .
esc_html($co{'title'}) . $ref, esc_html($co{'title'}) . $ref,
$commit); $commit);
@ -1881,12 +1881,12 @@ sub git_log {
} }


sub git_commit { sub git_commit {
my %co = git_read_commit($hash); my %co = parse_commit($hash);
if (!%co) { if (!%co) {
die_error(undef, "Unknown commit object"); die_error(undef, "Unknown commit object");
} }
my %ad = date_str($co{'author_epoch'}, $co{'author_tz'}); my %ad = parse_date($co{'author_epoch'}, $co{'author_tz'});
my %cd = date_str($co{'committer_epoch'}, $co{'committer_tz'}); my %cd = parse_date($co{'committer_epoch'}, $co{'committer_tz'});


my $parent = $co{'parent'}; my $parent = $co{'parent'};
if (!defined $parent) { if (!defined $parent) {
@ -1902,22 +1902,22 @@ sub git_commit {
if ($hash =~ m/^[0-9a-fA-F]{40}$/) { if ($hash =~ m/^[0-9a-fA-F]{40}$/) {
$expires = "+1d"; $expires = "+1d";
} }
my $refs = read_info_ref(); my $refs = git_get_references();
my $ref = git_get_referencing($refs, $co{'id'}); my $ref = format_ref_marker($refs, $co{'id'});
my $formats_nav = ''; my $formats_nav = '';
if (defined $file_name && defined $co{'parent'}) { if (defined $file_name && defined $co{'parent'}) {
my $parent = $co{'parent'}; my $parent = $co{'parent'};
$formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;hb=$parent;f=$file_name")}, "blame"); $formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;hb=$parent;f=$file_name")}, "blame");
} }
git_header_html(undef, $expires); git_header_html(undef, $expires);
git_page_nav('commit', defined $co{'parent'} ? '' : 'commitdiff', git_print_page_nav('commit', defined $co{'parent'} ? '' : 'commitdiff',
$hash, $co{'tree'}, $hash, $hash, $co{'tree'}, $hash,
$formats_nav); $formats_nav);


if (defined $co{'parent'}) { if (defined $co{'parent'}) {
git_header_div('commitdiff', esc_html($co{'title'}) . $ref, $hash); git_print_header_div('commitdiff', esc_html($co{'title'}) . $ref, $hash);
} else { } else {
git_header_div('tree', esc_html($co{'title'}) . $ref, $co{'tree'}, $hash); git_print_header_div('tree', esc_html($co{'title'}) . $ref, $co{'tree'}, $hash);
} }
print "<div class=\"title_text\">\n" . print "<div class=\"title_text\">\n" .
"<table cellspacing=\"0\">\n"; "<table cellspacing=\"0\">\n";
@ -2079,11 +2079,11 @@ sub git_commit {
sub git_blobdiff { sub git_blobdiff {
mkdir($git_temp, 0700); mkdir($git_temp, 0700);
git_header_html(); git_header_html();
if (defined $hash_base && (my %co = git_read_commit($hash_base))) { if (defined $hash_base && (my %co = parse_commit($hash_base))) {
my $formats_nav = my $formats_nav =
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blobdiff_plain;h=$hash;hp=$hash_parent")}, "plain"); $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blobdiff_plain;h=$hash;hp=$hash_parent")}, "plain");
git_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav); git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
git_header_div('commit', esc_html($co{'title'}), $hash_base); git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
} else { } else {
print "<div class=\"page_nav\">\n" . print "<div class=\"page_nav\">\n" .
"<br/><br/></div>\n" . "<br/><br/></div>\n" .
@ -2109,7 +2109,7 @@ sub git_blobdiff_plain {


sub git_commitdiff { sub git_commitdiff {
mkdir($git_temp, 0700); mkdir($git_temp, 0700);
my %co = git_read_commit($hash); my %co = parse_commit($hash);
if (!%co) { if (!%co) {
die_error(undef, "Unknown commit object"); die_error(undef, "Unknown commit object");
} }
@ -2126,13 +2126,13 @@ sub git_commitdiff {
if ($hash =~ m/^[0-9a-fA-F]{40}$/) { if ($hash =~ m/^[0-9a-fA-F]{40}$/) {
$expires = "+1d"; $expires = "+1d";
} }
my $refs = read_info_ref(); my $refs = git_get_references();
my $ref = git_get_referencing($refs, $co{'id'}); my $ref = format_ref_marker($refs, $co{'id'});
my $formats_nav = my $formats_nav =
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commitdiff_plain;h=$hash;hp=$hash_parent")}, "plain"); $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commitdiff_plain;h=$hash;hp=$hash_parent")}, "plain");
git_header_html(undef, $expires); git_header_html(undef, $expires);
git_page_nav('commitdiff','', $hash,$co{'tree'},$hash, $formats_nav); git_print_page_nav('commitdiff','', $hash,$co{'tree'},$hash, $formats_nav);
git_header_div('commit', esc_html($co{'title'}) . $ref, $hash); git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash);
print "<div class=\"page_body\">\n"; print "<div class=\"page_body\">\n";
my $comment = $co{'comment'}; my $comment = $co{'comment'};
my $empty = 0; my $empty = 0;
@ -2200,7 +2200,7 @@ sub git_commitdiff {


sub git_commitdiff_plain { sub git_commitdiff_plain {
mkdir($git_temp, 0700); mkdir($git_temp, 0700);
my %co = git_read_commit($hash); my %co = parse_commit($hash);
if (!%co) { if (!%co) {
die_error(undef, "Unknown commit object"); die_error(undef, "Unknown commit object");
} }
@ -2214,7 +2214,7 @@ sub git_commitdiff_plain {


# try to figure out the next tag after this commit # try to figure out the next tag after this commit
my $tagname; my $tagname;
my $refs = read_info_ref("tags"); my $refs = git_get_references("tags");
open $fd, "-|", $GIT, "rev-list", "HEAD"; open $fd, "-|", $GIT, "rev-list", "HEAD";
my @commits = map { chomp; $_ } <$fd>; my @commits = map { chomp; $_ } <$fd>;
close $fd; close $fd;
@ -2228,7 +2228,7 @@ sub git_commitdiff_plain {
} }


print $cgi->header(-type => "text/plain", -charset => 'utf-8', '-content-disposition' => "inline; filename=\"git-$hash.patch\""); print $cgi->header(-type => "text/plain", -charset => 'utf-8', '-content-disposition' => "inline; filename=\"git-$hash.patch\"");
my %ad = date_str($co{'author_epoch'}, $co{'author_tz'}); my %ad = parse_date($co{'author_epoch'}, $co{'author_tz'});
my $comment = $co{'comment'}; my $comment = $co{'comment'};
print "From: $co{'author'}\n" . print "From: $co{'author'}\n" .
"Date: $ad{'rfc2822'} ($ad{'tz_local'})\n". "Date: $ad{'rfc2822'} ($ad{'tz_local'})\n".
@ -2264,17 +2264,17 @@ sub git_commitdiff_plain {


sub git_history { sub git_history {
if (!defined $hash_base) { if (!defined $hash_base) {
$hash_base = git_read_head($project); $hash_base = git_get_head_hash($project);
} }
my $ftype; my $ftype;
my %co = git_read_commit($hash_base); my %co = parse_commit($hash_base);
if (!%co) { if (!%co) {
die_error(undef, "Unknown commit object"); die_error(undef, "Unknown commit object");
} }
my $refs = read_info_ref(); my $refs = git_get_references();
git_header_html(); git_header_html();
git_page_nav('','', $hash_base,$co{'tree'},$hash_base); git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base);
git_header_div('commit', esc_html($co{'title'}), $hash_base); git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
if (!defined $hash && defined $file_name) { if (!defined $hash && defined $file_name) {
$hash = git_get_hash_by_path($hash_base, $file_name); $hash = git_get_hash_by_path($hash_base, $file_name);
} }
@ -2290,11 +2290,11 @@ sub git_history {
while (my $line = <$fd>) { while (my $line = <$fd>) {
if ($line =~ m/^([0-9a-fA-F]{40})/){ if ($line =~ m/^([0-9a-fA-F]{40})/){
my $commit = $1; my $commit = $1;
my %co = git_read_commit($commit); my %co = parse_commit($commit);
if (!%co) { if (!%co) {
next; next;
} }
my $ref = git_get_referencing($refs, $commit); my $ref = format_ref_marker($refs, $commit);
if ($alternate) { if ($alternate) {
print "<tr class=\"dark\">\n"; print "<tr class=\"dark\">\n";
} else { } else {
@ -2330,9 +2330,9 @@ sub git_search {
die_error(undef, "Text field empty"); die_error(undef, "Text field empty");
} }
if (!defined $hash) { if (!defined $hash) {
$hash = git_read_head($project); $hash = git_get_head_hash($project);
} }
my %co = git_read_commit($hash); my %co = parse_commit($hash);
if (!%co) { if (!%co) {
die_error(undef, "Unknown commit object"); die_error(undef, "Unknown commit object");
} }
@ -2351,8 +2351,8 @@ sub git_search {
$pickaxe_search = 1; $pickaxe_search = 1;
} }
git_header_html(); git_header_html();
git_page_nav('','', $hash,$co{'tree'},$hash); git_print_page_nav('','', $hash,$co{'tree'},$hash);
git_header_div('commit', esc_html($co{'title'}), $hash); git_print_header_div('commit', esc_html($co{'title'}), $hash);


print "<table cellspacing=\"0\">\n"; print "<table cellspacing=\"0\">\n";
my $alternate = 0; my $alternate = 0;
@ -2370,7 +2370,7 @@ sub git_search {
next; next;
} }
my @commit_lines = split "\n", $commit_text; my @commit_lines = split "\n", $commit_text;
my %co = git_read_commit(undef, \@commit_lines); my %co = parse_commit(undef, \@commit_lines);
if (!%co) { if (!%co) {
next; next;
} }
@ -2451,7 +2451,7 @@ sub git_search {
print "</td>\n" . print "</td>\n" .
"</tr>\n"; "</tr>\n";
} }
%co = git_read_commit($1); %co = parse_commit($1);
} }
} }
close $fd; close $fd;
@ -2461,14 +2461,14 @@ sub git_search {
} }


sub git_shortlog { sub git_shortlog {
my $head = git_read_head($project); my $head = git_get_head_hash($project);
if (!defined $hash) { if (!defined $hash) {
$hash = $head; $hash = $head;
} }
if (!defined $page) { if (!defined $page) {
$page = 0; $page = 0;
} }
my $refs = read_info_ref(); my $refs = git_get_references();


my $limit = sprintf("--max-count=%i", (100 * ($page+1))); my $limit = sprintf("--max-count=%i", (100 * ($page+1)));
open my $fd, "-|", $GIT, "rev-list", $limit, $hash open my $fd, "-|", $GIT, "rev-list", $limit, $hash
@ -2476,7 +2476,7 @@ sub git_shortlog {
my @revlist = map { chomp; $_ } <$fd>; my @revlist = map { chomp; $_ } <$fd>;
close $fd; close $fd;


my $paging_nav = git_get_paging_nav('shortlog', $hash, $head, $page, $#revlist); my $paging_nav = format_paging_nav('shortlog', $hash, $head, $page, $#revlist);
my $next_link = ''; my $next_link = '';
if ($#revlist >= (100 * ($page+1)-1)) { if ($#revlist >= (100 * ($page+1)-1)) {
$next_link = $next_link =
@ -2486,8 +2486,8 @@ sub git_shortlog {




git_header_html(); git_header_html();
git_page_nav('shortlog','', $hash,$hash,$hash, $paging_nav); git_print_page_nav('shortlog','', $hash,$hash,$hash, $paging_nav);
git_header_div('summary', $project); git_print_header_div('summary', $project);


git_shortlog_body(\@revlist, ($page * 100), $#revlist, $refs, $next_link); git_shortlog_body(\@revlist, ($page * 100), $#revlist, $refs, $next_link);


@ -2499,7 +2499,7 @@ sub git_shortlog {


sub git_rss { sub git_rss {
# http://www.notestips.com/80256B3A007F2692/1/NAMO5P9UPQ # http://www.notestips.com/80256B3A007F2692/1/NAMO5P9UPQ
open my $fd, "-|", $GIT, "rev-list", "--max-count=150", git_read_head($project) open my $fd, "-|", $GIT, "rev-list", "--max-count=150", git_get_head_hash($project)
or die_error(undef, "Open git-rev-list failed"); or die_error(undef, "Open git-rev-list failed");
my @revlist = map { chomp; $_ } <$fd>; my @revlist = map { chomp; $_ } <$fd>;
close $fd or die_error(undef, "Reading git-rev-list failed"); close $fd or die_error(undef, "Reading git-rev-list failed");
@ -2514,12 +2514,12 @@ sub git_rss {


for (my $i = 0; $i <= $#revlist; $i++) { for (my $i = 0; $i <= $#revlist; $i++) {
my $commit = $revlist[$i]; my $commit = $revlist[$i];
my %co = git_read_commit($commit); my %co = parse_commit($commit);
# we read 150, we always show 30 and the ones more recent than 48 hours # we read 150, we always show 30 and the ones more recent than 48 hours
if (($i >= 20) && ((time - $co{'committer_epoch'}) > 48*60*60)) { if (($i >= 20) && ((time - $co{'committer_epoch'}) > 48*60*60)) {
last; last;
} }
my %cd = date_str($co{'committer_epoch'}); my %cd = parse_date($co{'committer_epoch'});
open $fd, "-|", $GIT, "diff-tree", '-r', $co{'parent'}, $co{'id'} or next; open $fd, "-|", $GIT, "diff-tree", '-r', $co{'parent'}, $co{'id'} or next;
my @difftree = map { chomp; $_ } <$fd>; my @difftree = map { chomp; $_ } <$fd>;
close $fd or next; close $fd or next;
@ -2556,7 +2556,7 @@ sub git_rss {
} }


sub git_opml { sub git_opml {
my @list = git_read_projects(); my @list = git_get_projects_list();


print $cgi->header(-type => 'text/xml', -charset => 'utf-8'); print $cgi->header(-type => 'text/xml', -charset => 'utf-8');
print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n". print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n".
@ -2569,12 +2569,12 @@ sub git_opml {


foreach my $pr (@list) { foreach my $pr (@list) {
my %proj = %$pr; my %proj = %$pr;
my $head = git_read_head($proj{'path'}); my $head = git_get_head_hash($proj{'path'});
if (!defined $head) { if (!defined $head) {
next; next;
} }
$ENV{'GIT_DIR'} = "$projectroot/$proj{'path'}"; $ENV{'GIT_DIR'} = "$projectroot/$proj{'path'}";
my %co = git_read_commit($head); my %co = parse_commit($head);
if (!%co) { if (!%co) {
next; next;
} }