* Re: [PATCH] Fix crash when GIT_DIR is invalid
From: Johannes Schindelin @ 2006-08-04 22:42 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7virl8jpnw.fsf@assigned-by-dhcp.cox.net>
Hi,
On Fri, 4 Aug 2006, Junio C Hamano wrote:
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>
> > bad_dir_environ:
> > - if (!nongit_ok) {
> > + if (nongit_ok) {
> > *nongit_ok = 1;
>
> *BLUSH* How could I have missed something like this...
It's too easy. I actually reviewed that patch, saw that I did the same
(not!), and hit the bug...
Ciao,
Dscho "errare humanum est" --
^ permalink raw reply
* [PATCH 1/5] gitweb: Cleanup input validation and error messages
From: Jakub Narebski @ 2006-08-04 22:38 UTC (permalink / raw)
To: git
In-Reply-To: <200608050036.06490.jnareb@gmail.com>
Clean up input validation, including removing $rss_link variable and
making error messages more explicit. Expand and uniquify other error
messages.
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
This probably conflicts "[PATCH 4/4] gitweb: No periods for error messages".
It uses periods for error messages which does not end in with some
value of some variable.
gitweb/gitweb.perl | 88 ++++++++++++++++++++++++----------------------------
1 files changed, 40 insertions(+), 48 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 58eb5b1..dfc2d09 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -71,13 +71,15 @@ if (! -d $git_temp) {
mkdir($git_temp, 0700) || die_error("Couldn't mkdir $git_temp");
}
+
+# ======================================================================
# input validation and dispatch
our $action = $cgi->param('a');
if (defined $action) {
if ($action =~ m/[^0-9a-zA-Z\.\-_]/) {
- undef $action;
- die_error(undef, "Invalid action parameter.");
+ die_error(undef, "Invalid action parameter $action");
}
+ # action which does not check rest of parameters
if ($action eq "opml") {
git_opml();
exit;
@@ -85,22 +87,17 @@ if (defined $action) {
}
our $project = ($cgi->param('p') || $ENV{'PATH_INFO'});
-if (defined $project) {
- $project =~ s|^/||; $project =~ s|/$||;
- $project = validate_input($project);
- if (!defined($project)) {
- die_error(undef, "Invalid project parameter.");
+$project =~ s|^/||; $project =~ s|/$||;
+if (defined $project || $project) {
+ if (!validate_input($project)) {
+ die_error(undef, "Invalid project parameter $project");
}
if (!(-d "$projectroot/$project")) {
- undef $project;
- die_error(undef, "No such directory.");
+ die_error(undef, "No such directory $project");
}
if (!(-e "$projectroot/$project/HEAD")) {
- undef $project;
- die_error(undef, "No such project.");
+ die_error(undef, "No such project $project");
}
- $rss_link = "<link rel=\"alternate\" title=\"" . esc_param($project) . " log\" href=\"" .
- "$my_uri?" . esc_param("p=$project;a=rss") . "\" type=\"application/rss+xml\"/>";
$ENV{'GIT_DIR'} = "$projectroot/$project";
} else {
git_project_list();
@@ -109,49 +106,43 @@ if (defined $project) {
our $file_name = $cgi->param('f');
if (defined $file_name) {
- $file_name = validate_input($file_name);
- if (!defined($file_name)) {
- die_error(undef, "Invalid file parameter.");
+ if (!validate_input($file_name)) {
+ die_error(undef, "Invalid file parameter $file_name");
}
}
our $hash = $cgi->param('h');
if (defined $hash) {
- $hash = validate_input($hash);
- if (!defined($hash)) {
- die_error(undef, "Invalid hash parameter.");
+ if (!validate_input($hash)) {
+ die_error(undef, "Invalid hash parameter $hash");
}
}
our $hash_parent = $cgi->param('hp');
if (defined $hash_parent) {
- $hash_parent = validate_input($hash_parent);
- if (!defined($hash_parent)) {
- die_error(undef, "Invalid hash parent parameter.");
+ if (!validate_input($hash_parent)) {
+ die_error(undef, "Invalid hash parent parameter $hash_parent");
}
}
our $hash_base = $cgi->param('hb');
if (defined $hash_base) {
- $hash_base = validate_input($hash_base);
- if (!defined($hash_base)) {
- die_error(undef, "Invalid hash base parameter.");
+ if (!validate_input($hash_base)) {
+ die_error(undef, "Invalid hash base parameter $hash_base");
}
}
our $page = $cgi->param('pg');
if (defined $page) {
if ($page =~ m/[^0-9]$/) {
- undef $page;
- die_error(undef, "Invalid page parameter.");
+ die_error(undef, "Invalid page parameter $page");
}
}
our $searchtext = $cgi->param('s');
if (defined $searchtext) {
if ($searchtext =~ m/[^a-zA-Z0-9_\.\/\-\+\:\@ ]/) {
- undef $searchtext;
- die_error(undef, "Invalid search parameter.");
+ die_error(undef, "Invalid search parameter $searchtext");
}
$searchtext = quotemeta $searchtext;
}
@@ -180,8 +171,7 @@ my %actions = (
$action = 'summary' if (!defined($action));
if (!defined($actions{$action})) {
- undef $action;
- die_error(undef, "Unknown action.");
+ die_error(undef, "Unknown action $action");
}
$actions{$action}->();
exit;
@@ -871,11 +861,13 @@ sub git_header_html {
<meta name="robots" content="index, nofollow"/>
<title>$title</title>
<link rel="stylesheet" type="text/css" href="$stylesheet"/>
-$rss_link
-</head>
-<body>
EOF
- print "<div class=\"page_header\">\n" .
+ print "<link rel=\"alternate\" title=\"" . esc_param($project) . " log\" href=\"" .
+ "$my_uri?" . esc_param("p=$project;a=rss") . "\" type=\"application/rss+xml\"/>\n" .
+ "</head>\n";
+
+ print "<body>\n" .
+ "<div class=\"page_header\">\n" .
"<a href=\"http://www.kernel.org/pub/software/scm/git/docs/\" title=\"git documentation\">" .
"<img src=\"$logo\" width=\"72\" height=\"27\" alt=\"git\" style=\"float:right; border-width:0px;\"/>" .
"</a>\n";
@@ -1471,18 +1463,18 @@ sub git_blame2 {
my $fd;
my $ftype;
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);
- die_error(undef, "Reading commit failed") unless ($hash_base);
+ die_error(undef, "Couldn't find base commit.") unless ($hash_base);
my %co = git_read_commit($hash_base)
- or die_error(undef, "Reading commit failed");
+ or die_error(undef, "Reading commit failed.");
if (!defined $hash) {
$hash = git_get_hash_by_path($hash_base, $file_name, "blob")
- or die_error(undef, "Error looking up file");
+ or die_error(undef, "Error looking up file $file_name");
}
$ftype = git_get_type($hash);
if ($ftype !~ "blob") {
- die_error("400 Bad Request", "object is not a blob");
+ die_error("400 Bad Request", "Object is not a blob.");
}
open ($fd, "-|", $GIT, "blame", '-l', $file_name, $hash_base)
or die_error(undef, "Open git-blame failed.");
@@ -1529,14 +1521,14 @@ sub git_blame2 {
sub git_blame {
my $fd;
die_error('403 Permission denied', "Permission denied.") if (!git_get_project_config_bool ('blame'));
- die_error('404 Not Found', "What file will it be, master?") if (!$file_name);
+ die_error('404 Not Found', "File name not defined.") if (!$file_name);
$hash_base ||= git_read_head($project);
- die_error(undef, "Reading commit failed.") unless ($hash_base);
+ die_error(undef, "Couldn't find base commit.") unless ($hash_base);
my %co = git_read_commit($hash_base)
or die_error(undef, "Reading commit failed.");
if (!defined $hash) {
$hash = git_get_hash_by_path($hash_base, $file_name, "blob")
- or die_error(undef, "Error lookup file.");
+ or die_error(undef, "Error lookup file $file_name");
}
open ($fd, "-|", $GIT, "annotate", '-l', '-t', '-r', $file_name, $hash_base)
or die_error(undef, "Open git-annotate failed.");
@@ -1649,7 +1641,7 @@ sub git_blob_plain {
if (defined $file_name) {
my $base = $hash_base || git_read_head($project);
$hash = git_get_hash_by_path($base, $file_name, "blob")
- or die_error(undef, "Error lookup file.");
+ or die_error(undef, "Error lookup file $file_name");
} else {
die_error(undef, "No file name defined.");
}
@@ -1682,7 +1674,7 @@ sub git_blob {
if (defined $file_name) {
my $base = $hash_base || git_read_head($project);
$hash = git_get_hash_by_path($base, $file_name, "blob")
- or die_error(undef, "Error lookup file.");
+ or die_error(undef, "Error lookup file $file_name");
} else {
die_error(undef, "No file name defined.");
}
@@ -2122,7 +2114,7 @@ sub git_commitdiff {
open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash
or die_error(undef, "Open git-diff-tree failed.");
my @difftree = map { chomp; $_ } <$fd>;
- close $fd or die_error(undef, "Reading diff-tree failed.");
+ close $fd or die_error(undef, "Reading git-diff-tree failed.");
# non-textual hash id's can be cached
my $expires;
@@ -2202,7 +2194,7 @@ sub git_commitdiff_plain {
open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash
or die_error(undef, "Open git-diff-tree failed.");
my @difftree = map { chomp; $_ } <$fd>;
- close $fd or die_error(undef, "Reading diff-tree failed.");
+ close $fd or die_error(undef, "Reading git-diff-tree failed.");
# try to figure out the next tag after this commit
my $tagname;
@@ -2493,7 +2485,7 @@ sub git_rss {
open my $fd, "-|", $GIT, "rev-list", "--max-count=150", git_read_head($project)
or die_error(undef, "Open git-rev-list failed.");
my @revlist = map { chomp; $_ } <$fd>;
- close $fd or die_error(undef, "Reading rev-list failed.");
+ close $fd or die_error(undef, "Reading git-rev-list failed.");
print $cgi->header(-type => 'text/xml', -charset => 'utf-8');
print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n".
"<rss version=\"2.0\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\">\n";
--
1.4.1.1
^ permalink raw reply related
* [PATCH 5/5] gitweb: Change appereance of marker of refs pointing to given object
From: Jakub Narebski @ 2006-08-04 22:43 UTC (permalink / raw)
To: git
In-Reply-To: <200608050036.06490.jnareb@gmail.com>
Change default value of $type in git_read_info_refs to correctly show
full name of ref (and not only last part) if $type was not set.
Refs are now in separate span elements. Class was changed from "tag"
to "ref", as ref can be head, not only tag. Currently there is no way
to distinguish between tags and heads.
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
gitweb/gitweb.css | 2 +-
gitweb/gitweb.perl | 12 ++++++++----
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/gitweb/gitweb.css b/gitweb/gitweb.css
index 460e728..921b339 100644
--- a/gitweb/gitweb.css
+++ b/gitweb/gitweb.css
@@ -317,7 +317,7 @@ a.rss_logo:hover {
background-color: #ee5500;
}
-span.tag {
+span.ref {
padding: 0px 4px;
font-size: 10px;
font-weight: normal;
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 9e4822b..e983452 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -350,9 +350,13 @@ sub format_mark_referencing {
my ($refs, $id) = @_;
if (defined $refs->{$id}) {
- return ' <span class="tag">' . esc_html($refs->{$id}) . '</span>';
+ my $markers = '';
+ foreach my $ref (split /:/, $refs->{$id}) {
+ $markers .= ' <span class="ref">' . esc_html($ref) . '</span>';
+ }
+ return $markers;
} else {
- return "";
+ return '';
}
}
@@ -496,7 +500,7 @@ sub git_read_projects {
}
sub git_read_info_refs {
- my $type = shift || "";
+ my $type = shift || "(?:heads|tags)";
my %refs;
# 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11
# c39ae07f393806ccf406ef966e9a15afc43cc36a refs/tags/v2.6.11^{}
@@ -507,7 +511,7 @@ sub git_read_info_refs {
# e.g. from 'refs/heads/jn/gitweb' it would leave only 'gitweb'
if ($line =~ m/^([0-9a-fA-F]{40})\t.*$type\/([^\^]+)/) {
if (defined $refs{$1}) {
- $refs{$1} .= " / $2";
+ $refs{$1} .= ':' . $2;
} else {
$refs{$1} = $2;
}
--
1.4.1.1
^ permalink raw reply related
* [PATCH 3/5] gitweb: Separate ref parsing in git_read_refs into parse_ref
From: Jakub Narebski @ 2006-08-04 22:40 UTC (permalink / raw)
To: git
In-Reply-To: <200608050036.06490.jnareb@gmail.com>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
Pure coding style patch.
gitweb/gitweb.perl | 80 +++++++++++++++++++++++++++++-----------------------
1 files changed, 45 insertions(+), 35 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index d440546..5b30654 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -677,6 +677,49 @@ sub parse_commit {
return %co;
}
+# parse ref from ref_file, given by ref_id, with given type
+sub parse_ref {
+ my $ref_file = shift;
+ my $ref_id = shift;
+ my $type = shift || git_get_type($ref_id);
+ my %ref_item;
+
+ $ref_item{'type'} = $type;
+ $ref_item{'id'} = $ref_id;
+ $ref_item{'epoch'} = 0;
+ $ref_item{'age'} = "unknown";
+ if ($type eq "tag") {
+ my %tag = parse_tag($ref_id);
+ $ref_item{'comment'} = $tag{'comment'};
+ if ($tag{'type'} eq "commit") {
+ my %co = parse_commit($tag{'object'});
+ $ref_item{'epoch'} = $co{'committer_epoch'};
+ $ref_item{'age'} = $co{'age_string'};
+ } elsif (defined($tag{'epoch'})) {
+ my $age = time - $tag{'epoch'};
+ $ref_item{'epoch'} = $tag{'epoch'};
+ $ref_item{'age'} = age_string($age);
+ }
+ $ref_item{'reftype'} = $tag{'type'};
+ $ref_item{'name'} = $tag{'name'};
+ $ref_item{'refid'} = $tag{'object'};
+ } elsif ($type eq "commit"){
+ my %co = parse_commit($ref_id);
+ $ref_item{'reftype'} = "commit";
+ $ref_item{'name'} = $ref_file;
+ $ref_item{'title'} = $co{'title'};
+ $ref_item{'refid'} = $ref_id;
+ $ref_item{'epoch'} = $co{'committer_epoch'};
+ $ref_item{'age'} = $co{'age_string'};
+ } else {
+ $ref_item{'reftype'} = $type;
+ $ref_item{'name'} = $ref_file;
+ $ref_item{'refid'} = $ref_id;
+ }
+
+ return %ref_item;
+}
+
## ......................................................................
## parse to array of hashes functions
@@ -696,44 +739,11 @@ sub git_read_refs {
foreach my $ref_file (@refs) {
my $ref_id = git_read_hash("$project/$ref_dir/$ref_file");
my $type = git_get_type($ref_id) || next;
- my %ref_item;
- my %co;
- $ref_item{'type'} = $type;
- $ref_item{'id'} = $ref_id;
- $ref_item{'epoch'} = 0;
- $ref_item{'age'} = "unknown";
- if ($type eq "tag") {
- my %tag = parse_tag($ref_id);
- $ref_item{'comment'} = $tag{'comment'};
- if ($tag{'type'} eq "commit") {
- %co = parse_commit($tag{'object'});
- $ref_item{'epoch'} = $co{'committer_epoch'};
- $ref_item{'age'} = $co{'age_string'};
- } elsif (defined($tag{'epoch'})) {
- my $age = time - $tag{'epoch'};
- $ref_item{'epoch'} = $tag{'epoch'};
- $ref_item{'age'} = age_string($age);
- }
- $ref_item{'reftype'} = $tag{'type'};
- $ref_item{'name'} = $tag{'name'};
- $ref_item{'refid'} = $tag{'object'};
- } elsif ($type eq "commit"){
- %co = parse_commit($ref_id);
- $ref_item{'reftype'} = "commit";
- $ref_item{'name'} = $ref_file;
- $ref_item{'title'} = $co{'title'};
- $ref_item{'refid'} = $ref_id;
- $ref_item{'epoch'} = $co{'committer_epoch'};
- $ref_item{'age'} = $co{'age_string'};
- } else {
- $ref_item{'reftype'} = $type;
- $ref_item{'name'} = $ref_file;
- $ref_item{'refid'} = $ref_id;
- }
+ my %ref_item = parse_ref($ref_file, $ref_id, $type);
push @reflist, \%ref_item;
}
- # sort tags by age
+ # sort refs by age
@reflist = sort {$b->{'epoch'} <=> $a->{'epoch'}} @reflist;
return \@reflist;
}
--
1.4.1.1
^ permalink raw reply related
* [PATCH 2/5] gitweb: Great subroutines renaming
From: Jakub Narebski @ 2006-08-04 22:39 UTC (permalink / raw)
To: git
In-Reply-To: <200608050036.06490.jnareb@gmail.com>
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,
or to gitweb actions
* git_get_ prefix for subroutines calling git command
and returning some output
* git_read_ prefix for subroutines directly accessing git
repository files
* parse_ prefix for subroutines parsing some text, or reading and
parsing some text into hash or list
* format_ prefix for subroutines formatting/post-processing 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
* _nav suffix for subroutines related to navigation bars
* _div suffix for subroutines returning or ptinting div element
Renames:
- git_get_referencing => format_mark_referencing
- git_read_head => git_get_head
- read_info_ref => git_read_info_refs
- date_str => parse_date
- git_read_tag => parse_tag
- git_read_commit => parse_commit
- git_blob_plain_mimetype => blob_plain_mimetype
- git_page_nav => git_print_page_nav
- git_header_div => git_print_header_div
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
I don't follow my own guidelines, not completely.
I should probably post this patch earlier.
gitweb/gitweb.perl | 232 ++++++++++++++++++++++++++--------------------------
1 files changed, 117 insertions(+), 115 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index dfc2d09..d440546 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -21,7 +21,6 @@ our $cgi = new CGI;
our $version = "++GIT_VERSION++";
our $my_url = $cgi->url();
our $my_uri = $cgi->url(-absolute => 1);
-our $rss_link = "";
# core git executable to use
# this can just be "git" if your webserver has a sensible PATH
@@ -347,7 +346,7 @@ sub format_log_line_html {
}
# format marker of refs pointing to given object
-sub git_get_referencing {
+sub format_mark_referencing {
my ($refs, $id) = @_;
if (defined $refs->{$id}) {
@@ -361,7 +360,7 @@ ## -------------------------------------
## git utility subroutines, invoking git commands
# get HEAD ref of given project as hash
-sub git_read_head {
+sub git_get_head {
my $project = shift;
my $oENV = $ENV{'GIT_DIR'};
my $retval = undef;
@@ -496,7 +495,7 @@ sub git_read_projects {
return @list;
}
-sub read_info_ref {
+sub git_read_info_refs {
my $type = shift || "";
my %refs;
# 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11
@@ -521,7 +520,8 @@ sub read_info_ref {
## ----------------------------------------------------------------------
## parse to hash functions
-sub date_str {
+# parse date from epoch and timezone
+sub parse_date {
my $epoch = shift;
my $tz = shift || "-0000";
@@ -546,7 +546,8 @@ sub date_str {
return %date;
}
-sub git_read_tag {
+# parse tag given by tag_id
+sub parse_tag {
my $tag_id = shift;
my %tag;
my @comment;
@@ -581,7 +582,8 @@ sub git_read_tag {
return %tag
}
-sub git_read_commit {
+# parse commit given by commit_id, with optionally given @commit_lines
+sub parse_commit {
my $commit_id = shift;
my $commit_text = shift;
@@ -701,10 +703,10 @@ sub git_read_refs {
$ref_item{'epoch'} = 0;
$ref_item{'age'} = "unknown";
if ($type eq "tag") {
- my %tag = git_read_tag($ref_id);
+ my %tag = parse_tag($ref_id);
$ref_item{'comment'} = $tag{'comment'};
if ($tag{'type'} eq "commit") {
- %co = git_read_commit($tag{'object'});
+ %co = parse_commit($tag{'object'});
$ref_item{'epoch'} = $co{'committer_epoch'};
$ref_item{'age'} = $co{'age_string'};
} elsif (defined($tag{'epoch'})) {
@@ -716,7 +718,7 @@ sub git_read_refs {
$ref_item{'name'} = $tag{'name'};
$ref_item{'refid'} = $tag{'object'};
} elsif ($type eq "commit"){
- %co = git_read_commit($ref_id);
+ %co = parse_commit($ref_id);
$ref_item{'reftype'} = "commit";
$ref_item{'name'} = $ref_file;
$ref_item{'title'} = $co{'title'};
@@ -791,7 +793,7 @@ sub mimetype_guess {
return $mime;
}
-sub git_blob_plain_mimetype {
+sub blob_plain_mimetype {
my $fd = shift;
my $filename = shift;
@@ -936,7 +938,7 @@ sub die_error {
## ----------------------------------------------------------------------
## functions printing or outputting HTML: navigation
-sub git_page_nav {
+sub git_print_page_nav {
my ($current, $suppress, $head, $treehead, $treebase, $extra) = @_;
$extra = '' if !defined $extra; # pager or formats
@@ -1003,7 +1005,7 @@ sub git_get_paging_nav {
## ......................................................................
## functions printing or outputting HTML: div
-sub git_header_div {
+sub git_print_header_div {
my ($action, $title, $hash, $hash_base) = @_;
my $rest = '';
@@ -1043,10 +1045,10 @@ sub git_shortlog_body {
my $alternate = 0;
for (my $i = $from; $i <= $to; $i++) {
my $commit = $revlist->[$i];
- #my $ref = defined $refs ? git_get_referencing($refs, $commit) : '';
- my $ref = git_get_referencing($refs, $commit);
- my %co = git_read_commit($commit);
- my %ad = date_str($co{'author_epoch'});
+ #my $ref = defined $refs ? format_mark_referencing($refs, $commit) : '';
+ my $ref = format_mark_referencing($refs, $commit);
+ my %co = parse_commit($commit);
+ my %ad = parse_date($co{'author_epoch'});
if ($alternate) {
print "<tr class=\"dark\">\n";
} else {
@@ -1275,12 +1277,12 @@ sub git_project_list {
die_error(undef, "No projects found.");
}
foreach my $pr (@list) {
- my $head = git_read_head($pr->{'path'});
+ my $head = git_get_head($pr->{'path'});
if (!defined $head) {
next;
}
$ENV{'GIT_DIR'} = "$projectroot/$pr->{'path'}";
- my %co = git_read_commit($head);
+ my %co = parse_commit($head);
if (!%co) {
next;
}
@@ -1371,9 +1373,9 @@ sub git_project_list {
sub git_summary {
my $descr = git_read_description($project) || "none";
- my $head = git_read_head($project);
- my %co = git_read_commit($head);
- my %cd = date_str($co{'committer_epoch'}, $co{'committer_tz'});
+ my $head = git_get_head($project);
+ my %co = parse_commit($head);
+ my %cd = parse_date($co{'committer_epoch'}, $co{'committer_tz'});
my $owner;
if (-f $projects_list) {
@@ -1394,9 +1396,9 @@ sub git_summary {
$owner = get_file_owner("$projectroot/$project");
}
- my $refs = read_info_ref();
+ my $refs = git_read_info_refs();
git_header_html();
- git_page_nav('summary','', $head);
+ git_print_page_nav('summary','', $head);
print "<div class=\"title\"> </div>\n";
print "<table cellspacing=\"0\">\n" .
@@ -1405,24 +1407,24 @@ sub git_summary {
"<tr><td>last change</td><td>$cd{'rfc2822'}</td></tr>\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($project)
or die_error(undef, "Open git-rev-list failed.");
my @revlist = map { chomp; $_ } <$fd>;
close $fd;
- git_header_div('shortlog');
+ git_print_header_div('shortlog');
git_shortlog_body(\@revlist, 0, 15, $refs,
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=shortlog")}, "..."));
my $taglist = git_read_refs("refs/tags");
if (defined @$taglist) {
- git_header_div('tags');
+ git_print_header_div('tags');
git_tags_body($taglist, 0, 15,
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tags")}, "..."));
}
my $headlist = git_read_refs("refs/heads");
if (defined @$headlist) {
- git_header_div('heads');
+ git_print_header_div('heads');
git_heads_body($headlist, $head, 0, 15,
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=heads")}, "..."));
}
@@ -1431,11 +1433,11 @@ sub git_summary {
}
sub git_tag {
- my $head = git_read_head($project);
+ my $head = git_get_head($project);
git_header_html();
- git_page_nav('','', $head,undef,$head);
- my %tag = git_read_tag($hash);
- git_header_div('commit', esc_html($tag{'name'}), $hash);
+ git_print_page_nav('','', $head,undef,$head);
+ my %tag = parse_tag($hash);
+ git_print_header_div('commit', esc_html($tag{'name'}), $hash);
print "<div class=\"title_text\">\n" .
"<table cellspacing=\"0\">\n" .
"<tr>\n" .
@@ -1444,7 +1446,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" .
"</tr>\n";
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></td><td>" . $ad{'rfc2822'} . sprintf(" (%02d:%02d %s)", $ad{'hour_local'}, $ad{'minute_local'}, $ad{'tz_local'}) . "</td></tr>\n";
}
@@ -1464,9 +1466,9 @@ sub git_blame2 {
my $ftype;
die_error(undef, "Permission denied.") if (!git_get_project_config_bool ('blame'));
die_error('404 Not Found', "File name not defined.") if (!$file_name);
- $hash_base ||= git_read_head($project);
+ $hash_base ||= git_get_head($project);
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.");
if (!defined $hash) {
$hash = git_get_hash_by_path($hash_base, $file_name, "blob")
@@ -1482,8 +1484,8 @@ sub git_blame2 {
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=blame;f=$file_name")}, "head");
- git_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
- git_header_div('commit', esc_html($co{'title'}), $hash_base);
+ git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
+ git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
git_print_page_path($file_name, $ftype);
my @rev_color = (qw(light dark));
my $num_colors = scalar(@rev_color);
@@ -1522,9 +1524,9 @@ sub git_blame {
my $fd;
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);
- $hash_base ||= git_read_head($project);
+ $hash_base ||= git_get_head($project);
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.");
if (!defined $hash) {
$hash = git_get_hash_by_path($hash_base, $file_name, "blob")
@@ -1536,8 +1538,8 @@ sub git_blame {
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=blame;f=$file_name")}, "head");
- git_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
- git_header_div('commit', esc_html($co{'title'}), $hash_base);
+ git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
+ git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
git_print_page_path($file_name, 'blob');
print "<div class=\"page_body\">\n";
print <<HTML;
@@ -1610,10 +1612,10 @@ HTML
}
sub git_tags {
- my $head = git_read_head($project);
+ my $head = git_get_head($project);
git_header_html();
- git_page_nav('','', $head,undef,$head);
- git_header_div('summary', $project);
+ git_print_page_nav('','', $head,undef,$head);
+ git_print_header_div('summary', $project);
my $taglist = git_read_refs("refs/tags");
if (defined @$taglist) {
@@ -1623,10 +1625,10 @@ sub git_tags {
}
sub git_heads {
- my $head = git_read_head($project);
+ my $head = git_get_head($project);
git_header_html();
- git_page_nav('','', $head,undef,$head);
- git_header_div('summary', $project);
+ git_print_page_nav('','', $head,undef,$head);
+ git_print_header_div('summary', $project);
my $taglist = git_read_refs("refs/heads");
my $alternate = 0;
@@ -1639,7 +1641,7 @@ sub git_heads {
sub git_blob_plain {
if (!defined $hash) {
if (defined $file_name) {
- my $base = $hash_base || git_read_head($project);
+ my $base = $hash_base || git_get_head($project);
$hash = git_get_hash_by_path($base, $file_name, "blob")
or die_error(undef, "Error lookup file $file_name");
} else {
@@ -1650,7 +1652,7 @@ sub git_blob_plain {
open my $fd, "-|", $GIT, "cat-file", "blob", $hash
or die_error("Couldn't cat $file_name, $hash");
- $type ||= git_blob_plain_mimetype($fd, $file_name);
+ $type ||= blob_plain_mimetype($fd, $file_name);
# save as filename, even when no $file_name is given
my $save_as = "$hash";
@@ -1672,7 +1674,7 @@ sub git_blob_plain {
sub git_blob {
if (!defined $hash) {
if (defined $file_name) {
- my $base = $hash_base || git_read_head($project);
+ my $base = $hash_base || git_get_head($project);
$hash = git_get_hash_by_path($base, $file_name, "blob")
or die_error(undef, "Error lookup file $file_name");
} else {
@@ -1682,14 +1684,14 @@ sub git_blob {
my $have_blame = git_get_project_config_bool ('blame');
open my $fd, "-|", $GIT, "cat-file", "blob", $hash
or die_error(undef, "Couldn't cat $file_name, $hash.");
- my $mimetype = git_blob_plain_mimetype($fd, $file_name);
+ my $mimetype = blob_plain_mimetype($fd, $file_name);
if ($mimetype !~ m/^text\//) {
close $fd;
return git_blob_plain($mimetype);
}
git_header_html();
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 ($have_blame) {
$formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;h=$hash;hb=$hash_base;f=$file_name")}, "blame") . " | ";
@@ -1700,8 +1702,8 @@ sub git_blob {
} else {
$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_header_div('commit', esc_html($co{'title'}), $hash_base);
+ git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
+ git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
} else {
print "<div class=\"page_nav\">\n" .
"<br/><br/></div>\n" .
@@ -1728,7 +1730,7 @@ sub git_blob {
sub git_tree {
if (!defined $hash) {
- $hash = git_read_head($project);
+ $hash = git_get_head($project);
if (defined $file_name) {
my $base = $hash_base || $hash;
$hash = git_get_hash_by_path($base, $file_name, "tree");
@@ -1744,15 +1746,15 @@ sub git_tree {
close $fd or die_error(undef, "Reading tree failed.");
$/ = "\n";
- my $refs = read_info_ref();
- my $ref = git_get_referencing($refs, $hash_base);
+ my $refs = git_read_info_refs();
+ my $ref = format_mark_referencing($refs, $hash_base);
git_header_html();
my $base_key = "";
my $base = "";
- 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";
- git_page_nav('tree','', $hash_base);
- git_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base);
+ git_print_page_nav('tree','', $hash_base);
+ git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base);
} else {
print "<div class=\"page_nav\">\n";
print "<br/><br/></div>\n";
@@ -1806,14 +1808,14 @@ # " | " . $cgi->a({-href => "$my
}
sub git_log {
- my $head = git_read_head($project);
+ my $head = git_get_head($project);
if (!defined $hash) {
$hash = $head;
}
if (!defined $page) {
$page = 0;
}
- my $refs = read_info_ref();
+ my $refs = git_read_info_refs();
my $limit = sprintf("--max-count=%i", (100 * ($page+1)));
open my $fd, "-|", $GIT, "rev-list", $limit, $hash
@@ -1824,24 +1826,24 @@ sub git_log {
my $paging_nav = git_get_paging_nav('log', $hash, $head, $page, $#revlist);
git_header_html();
- git_page_nav('log','', $hash,undef,undef, $paging_nav);
+ git_print_page_nav('log','', $hash,undef,undef, $paging_nav);
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";
}
for (my $i = ($page * 100); $i <= $#revlist; $i++) {
my $commit = $revlist[$i];
- my $ref = git_get_referencing($refs, $commit);
- my %co = git_read_commit($commit);
+ my $ref = format_mark_referencing($refs, $commit);
+ my %co = parse_commit($commit);
next if !%co;
- my %ad = date_str($co{'author_epoch'});
- git_header_div('commit',
- "<span class=\"age\">$co{'age_string'}</span>" .
- esc_html($co{'title'}) . $ref,
- $commit);
+ my %ad = parse_date($co{'author_epoch'});
+ git_print_header_div('commit',
+ "<span class=\"age\">$co{'age_string'}</span>" .
+ esc_html($co{'title'}) . $ref,
+ $commit);
print "<div class=\"title_text\">\n" .
"<div class=\"log_link\">\n" .
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commit;h=$commit")}, "commit") .
@@ -1876,12 +1878,12 @@ sub git_log {
}
sub git_commit {
- my %co = git_read_commit($hash);
+ my %co = parse_commit($hash);
if (!%co) {
die_error(undef, "Unknown commit object.");
}
- my %ad = date_str($co{'author_epoch'}, $co{'author_tz'});
- my %cd = date_str($co{'committer_epoch'}, $co{'committer_tz'});
+ my %ad = parse_date($co{'author_epoch'}, $co{'author_tz'});
+ my %cd = parse_date($co{'committer_epoch'}, $co{'committer_tz'});
my $parent = $co{'parent'};
if (!defined $parent) {
@@ -1897,22 +1899,22 @@ sub git_commit {
if ($hash =~ m/^[0-9a-fA-F]{40}$/) {
$expires = "+1d";
}
- my $refs = read_info_ref();
- my $ref = git_get_referencing($refs, $co{'id'});
+ my $refs = git_read_info_refs();
+ my $ref = format_mark_referencing($refs, $co{'id'});
my $formats_nav = '';
if (defined $file_name && defined $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");
}
git_header_html(undef, $expires);
- git_page_nav('commit', defined $co{'parent'} ? '' : 'commitdiff',
- $hash, $co{'tree'}, $hash,
- $formats_nav);
+ git_print_page_nav('commit', defined $co{'parent'} ? '' : 'commitdiff',
+ $hash, $co{'tree'}, $hash,
+ $formats_nav);
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 {
- 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" .
"<table cellspacing=\"0\">\n";
@@ -2074,11 +2076,11 @@ sub git_commit {
sub git_blobdiff {
mkdir($git_temp, 0700);
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 =
$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_header_div('commit', esc_html($co{'title'}), $hash_base);
+ git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
+ git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
} else {
print "<div class=\"page_nav\">\n" .
"<br/><br/></div>\n" .
@@ -2104,7 +2106,7 @@ sub git_blobdiff_plain {
sub git_commitdiff {
mkdir($git_temp, 0700);
- my %co = git_read_commit($hash);
+ my %co = parse_commit($hash);
if (!%co) {
die_error(undef, "Unknown commit object.");
}
@@ -2121,13 +2123,13 @@ sub git_commitdiff {
if ($hash =~ m/^[0-9a-fA-F]{40}$/) {
$expires = "+1d";
}
- my $refs = read_info_ref();
- my $ref = git_get_referencing($refs, $co{'id'});
+ my $refs = git_read_info_refs();
+ my $ref = format_mark_referencing($refs, $co{'id'});
my $formats_nav =
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commitdiff_plain;h=$hash;hp=$hash_parent")}, "plain");
git_header_html(undef, $expires);
- git_page_nav('commitdiff','', $hash,$co{'tree'},$hash, $formats_nav);
- git_header_div('commit', esc_html($co{'title'}) . $ref, $hash);
+ git_print_page_nav('commitdiff','', $hash,$co{'tree'},$hash, $formats_nav);
+ git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash);
print "<div class=\"page_body\">\n";
my $comment = $co{'comment'};
my $empty = 0;
@@ -2198,7 +2200,7 @@ sub git_commitdiff_plain {
# try to figure out the next tag after this commit
my $tagname;
- my $refs = read_info_ref("tags");
+ my $refs = git_read_info_refs("tags");
open $fd, "-|", $GIT, "rev-list", "HEAD";
my @commits = map { chomp; $_ } <$fd>;
close $fd;
@@ -2212,8 +2214,8 @@ sub git_commitdiff_plain {
}
print $cgi->header(-type => "text/plain", -charset => 'utf-8', '-content-disposition' => "inline; filename=\"git-$hash.patch\"");
- my %co = git_read_commit($hash);
- my %ad = date_str($co{'author_epoch'}, $co{'author_tz'});
+ my %co = parse_commit($hash);
+ my %ad = parse_date($co{'author_epoch'}, $co{'author_tz'});
my $comment = $co{'comment'};
print "From: $co{'author'}\n" .
"Date: $ad{'rfc2822'} ($ad{'tz_local'})\n".
@@ -2247,17 +2249,17 @@ sub git_commitdiff_plain {
sub git_history {
if (!defined $hash_base) {
- $hash_base = git_read_head($project);
+ $hash_base = git_get_head($project);
}
my $ftype;
- my %co = git_read_commit($hash_base);
+ my %co = parse_commit($hash_base);
if (!%co) {
die_error(undef, "Unknown commit object.");
}
- my $refs = read_info_ref();
+ my $refs = git_read_info_refs();
git_header_html();
- git_page_nav('','', $hash_base,$co{'tree'},$hash_base);
- git_header_div('commit', esc_html($co{'title'}), $hash_base);
+ git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base);
+ git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
if (!defined $hash && defined $file_name) {
$hash = git_get_hash_by_path($hash_base, $file_name);
}
@@ -2273,11 +2275,11 @@ sub git_history {
while (my $line = <$fd>) {
if ($line =~ m/^([0-9a-fA-F]{40})/){
my $commit = $1;
- my %co = git_read_commit($commit);
+ my %co = parse_commit($commit);
if (!%co) {
next;
}
- my $ref = git_get_referencing($refs, $commit);
+ my $ref = format_mark_referencing($refs, $commit);
if ($alternate) {
print "<tr class=\"dark\">\n";
} else {
@@ -2313,9 +2315,9 @@ sub git_search {
die_error("", "Text field empty.");
}
if (!defined $hash) {
- $hash = git_read_head($project);
+ $hash = git_get_head($project);
}
- my %co = git_read_commit($hash);
+ my %co = parse_commit($hash);
if (!%co) {
die_error(undef, "Unknown commit object.");
}
@@ -2334,8 +2336,8 @@ sub git_search {
$pickaxe_search = 1;
}
git_header_html();
- git_page_nav('','', $hash,$co{'tree'},$hash);
- git_header_div('commit', esc_html($co{'title'}), $hash);
+ git_print_page_nav('','', $hash,$co{'tree'},$hash);
+ git_print_header_div('commit', esc_html($co{'title'}), $hash);
print "<table cellspacing=\"0\">\n";
my $alternate = 0;
@@ -2353,7 +2355,7 @@ sub git_search {
next;
}
my @commit_lines = split "\n", $commit_text;
- my %co = git_read_commit(undef, \@commit_lines);
+ my %co = parse_commit(undef, \@commit_lines);
if (!%co) {
next;
}
@@ -2434,7 +2436,7 @@ sub git_search {
print "</td>\n" .
"</tr>\n";
}
- %co = git_read_commit($1);
+ %co = parse_commit($1);
}
}
close $fd;
@@ -2444,14 +2446,14 @@ sub git_search {
}
sub git_shortlog {
- my $head = git_read_head($project);
+ my $head = git_get_head($project);
if (!defined $hash) {
$hash = $head;
}
if (!defined $page) {
$page = 0;
}
- my $refs = read_info_ref();
+ my $refs = git_read_info_refs();
my $limit = sprintf("--max-count=%i", (100 * ($page+1)));
open my $fd, "-|", $GIT, "rev-list", $limit, $hash
@@ -2469,8 +2471,8 @@ sub git_shortlog {
git_header_html();
- git_page_nav('shortlog','', $hash,$hash,$hash, $paging_nav);
- git_header_div('summary', $project);
+ git_print_page_nav('shortlog','', $hash,$hash,$hash, $paging_nav);
+ git_print_header_div('summary', $project);
git_shortlog_body(\@revlist, ($page * 100), $#revlist, $refs, $next_link);
@@ -2482,7 +2484,7 @@ ## feeds (RSS, OPML)
sub git_rss {
# 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($project)
or die_error(undef, "Open git-rev-list failed.");
my @revlist = map { chomp; $_ } <$fd>;
close $fd or die_error(undef, "Reading git-rev-list failed.");
@@ -2497,12 +2499,12 @@ sub git_rss {
for (my $i = 0; $i <= $#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
if (($i >= 20) && ((time - $co{'committer_epoch'}) > 48*60*60)) {
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;
my @difftree = map { chomp; $_ } <$fd>;
close $fd or next;
@@ -2552,12 +2554,12 @@ sub git_opml {
foreach my $pr (@list) {
my %proj = %$pr;
- my $head = git_read_head($proj{'path'});
+ my $head = git_get_head($proj{'path'});
if (!defined $head) {
next;
}
$ENV{'GIT_DIR'} = "$projectroot/$proj{'path'}";
- my %co = git_read_commit($head);
+ my %co = parse_commit($head);
if (!%co) {
next;
}
--
1.4.1.1
^ permalink raw reply related
* [PATCH 4/5] gitweb: git_heads cleanup
From: Jakub Narebski @ 2006-08-04 22:42 UTC (permalink / raw)
To: git
In-Reply-To: <200608050036.06490.jnareb@gmail.com>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
Leftover from refactor generation of shortlog, tags and heads body.
gitweb/gitweb.perl | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 5b30654..9e4822b 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1641,7 +1641,6 @@ sub git_heads {
git_print_header_div('summary', $project);
my $taglist = git_read_refs("refs/heads");
- my $alternate = 0;
if (defined @$taglist) {
git_heads_body($taglist, $head);
}
--
1.4.1.1
^ permalink raw reply related
* Re: HOWTO set up a repository which can be pushed into over HTTP
From: Johannes Schindelin @ 2006-08-04 22:45 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7vac6kjoxh.fsf@assigned-by-dhcp.cox.net>
Hi,
On Fri, 4 Aug 2006, Junio C Hamano wrote:
> Nice addition to Documentation/howto/ I would presume...
I actually planned to submit a patch with a file in that directory
first... But then I read the files already in it, and they all look like
they were emails first, which got -- presumably by several people finding
it useful -- into a patch.
Do people find it useful? Or would you like to wait until I implement an
option in git-http-push to actually init an HTTP repo remotely?
Ciao,
Dscho
^ permalink raw reply
* Re: [PATCH] Allow config file to specify Signed-off-by identity in format-patch.
From: Johannes Schindelin @ 2006-08-04 22:56 UTC (permalink / raw)
To: Ramsay Jones; +Cc: git
In-Reply-To: <000001c6b809$2919a200$c47eedc1@ramsay1.demon.co.uk>
On Fri, 4 Aug 2006, Ramsay Jones wrote:
> Unlike git-commit, git-format-patch was not picking up and using the
> user.email config variable for the email part of the committer info.
> I was forced to use the GIT_COMMITTER_EMAIL environment variable to
> override the default <user@localhost.localdomain>. The fix was to
> simply move the call to setup_ident() to come before the git_config()
> call.
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
I _always_ use environment variables, since the $HOME/.gitconfig is a
pretty recent addition. Therefore, I completely missed that one.
Ciao,
Dscho
^ permalink raw reply
* Re: [PATCH 1/5] gitweb: Cleanup input validation and error messages
From: Luben Tuikov @ 2006-08-04 23:54 UTC (permalink / raw)
To: Jakub Narebski, git
In-Reply-To: <200608050038.20534.jnareb@gmail.com>
--- Jakub Narebski <jnareb@gmail.com> wrote:
> Clean up input validation, including removing $rss_link variable and
> making error messages more explicit. Expand and uniquify other error
> messages.
Can you fix your patch then?
Error messages in general do not end with a period.
Luben
>
> Signed-off-by: Jakub Narebski <jnareb@gmail.com>
> ---
> This probably conflicts "[PATCH 4/4] gitweb: No periods for error messages".
> It uses periods for error messages which does not end in with some
> value of some variable.
>
> gitweb/gitweb.perl | 88 ++++++++++++++++++++++++----------------------------
> 1 files changed, 40 insertions(+), 48 deletions(-)
>
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 58eb5b1..dfc2d09 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -71,13 +71,15 @@ if (! -d $git_temp) {
> mkdir($git_temp, 0700) || die_error("Couldn't mkdir $git_temp");
> }
>
> +
> +# ======================================================================
> # input validation and dispatch
> our $action = $cgi->param('a');
> if (defined $action) {
> if ($action =~ m/[^0-9a-zA-Z\.\-_]/) {
> - undef $action;
> - die_error(undef, "Invalid action parameter.");
> + die_error(undef, "Invalid action parameter $action");
> }
> + # action which does not check rest of parameters
> if ($action eq "opml") {
> git_opml();
> exit;
> @@ -85,22 +87,17 @@ if (defined $action) {
> }
>
> our $project = ($cgi->param('p') || $ENV{'PATH_INFO'});
> -if (defined $project) {
> - $project =~ s|^/||; $project =~ s|/$||;
> - $project = validate_input($project);
> - if (!defined($project)) {
> - die_error(undef, "Invalid project parameter.");
> +$project =~ s|^/||; $project =~ s|/$||;
> +if (defined $project || $project) {
> + if (!validate_input($project)) {
> + die_error(undef, "Invalid project parameter $project");
> }
> if (!(-d "$projectroot/$project")) {
> - undef $project;
> - die_error(undef, "No such directory.");
> + die_error(undef, "No such directory $project");
> }
> if (!(-e "$projectroot/$project/HEAD")) {
> - undef $project;
> - die_error(undef, "No such project.");
> + die_error(undef, "No such project $project");
> }
> - $rss_link = "<link rel=\"alternate\" title=\"" . esc_param($project) . " log\" href=\"" .
> - "$my_uri?" . esc_param("p=$project;a=rss") . "\" type=\"application/rss+xml\"/>";
> $ENV{'GIT_DIR'} = "$projectroot/$project";
> } else {
> git_project_list();
> @@ -109,49 +106,43 @@ if (defined $project) {
>
> our $file_name = $cgi->param('f');
> if (defined $file_name) {
> - $file_name = validate_input($file_name);
> - if (!defined($file_name)) {
> - die_error(undef, "Invalid file parameter.");
> + if (!validate_input($file_name)) {
> + die_error(undef, "Invalid file parameter $file_name");
> }
> }
>
> our $hash = $cgi->param('h');
> if (defined $hash) {
> - $hash = validate_input($hash);
> - if (!defined($hash)) {
> - die_error(undef, "Invalid hash parameter.");
> + if (!validate_input($hash)) {
> + die_error(undef, "Invalid hash parameter $hash");
> }
> }
>
> our $hash_parent = $cgi->param('hp');
> if (defined $hash_parent) {
> - $hash_parent = validate_input($hash_parent);
> - if (!defined($hash_parent)) {
> - die_error(undef, "Invalid hash parent parameter.");
> + if (!validate_input($hash_parent)) {
> + die_error(undef, "Invalid hash parent parameter $hash_parent");
> }
> }
>
> our $hash_base = $cgi->param('hb');
> if (defined $hash_base) {
> - $hash_base = validate_input($hash_base);
> - if (!defined($hash_base)) {
> - die_error(undef, "Invalid hash base parameter.");
> + if (!validate_input($hash_base)) {
> + die_error(undef, "Invalid hash base parameter $hash_base");
> }
> }
>
> our $page = $cgi->param('pg');
> if (defined $page) {
> if ($page =~ m/[^0-9]$/) {
> - undef $page;
> - die_error(undef, "Invalid page parameter.");
> + die_error(undef, "Invalid page parameter $page");
> }
> }
>
> our $searchtext = $cgi->param('s');
> if (defined $searchtext) {
> if ($searchtext =~ m/[^a-zA-Z0-9_\.\/\-\+\:\@ ]/) {
> - undef $searchtext;
> - die_error(undef, "Invalid search parameter.");
> + die_error(undef, "Invalid search parameter $searchtext");
> }
> $searchtext = quotemeta $searchtext;
> }
> @@ -180,8 +171,7 @@ my %actions = (
>
> $action = 'summary' if (!defined($action));
> if (!defined($actions{$action})) {
> - undef $action;
> - die_error(undef, "Unknown action.");
> + die_error(undef, "Unknown action $action");
> }
> $actions{$action}->();
> exit;
> @@ -871,11 +861,13 @@ sub git_header_html {
> <meta name="robots" content="index, nofollow"/>
> <title>$title</title>
> <link rel="stylesheet" type="text/css" href="$stylesheet"/>
> -$rss_link
> -</head>
> -<body>
> EOF
> - print "<div class=\"page_header\">\n" .
> + print "<link rel=\"alternate\" title=\"" . esc_param($project) . " log\" href=\"" .
> + "$my_uri?" . esc_param("p=$project;a=rss") . "\" type=\"application/rss+xml\"/>\n" .
> + "</head>\n";
> +
> + print "<body>\n" .
> + "<div class=\"page_header\">\n" .
> "<a href=\"http://www.kernel.org/pub/software/scm/git/docs/\" title=\"git
> documentation\">" .
> "<img src=\"$logo\" width=\"72\" height=\"27\" alt=\"git\" style=\"float:right;
> border-width:0px;\"/>" .
> "</a>\n";
> @@ -1471,18 +1463,18 @@ sub git_blame2 {
> my $fd;
> my $ftype;
> 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);
> - die_error(undef, "Reading commit failed") unless ($hash_base);
> + die_error(undef, "Couldn't find base commit.") unless ($hash_base);
> my %co = git_read_commit($hash_base)
> - or die_error(undef, "Reading commit failed");
> + or die_error(undef, "Reading commit failed.");
> if (!defined $hash) {
> $hash = git_get_hash_by_path($hash_base, $file_name, "blob")
> - or die_error(undef, "Error looking up file");
> + or die_error(undef, "Error looking up file $file_name");
> }
> $ftype = git_get_type($hash);
> if ($ftype !~ "blob") {
> - die_error("400 Bad Request", "object is not a blob");
> + die_error("400 Bad Request", "Object is not a blob.");
> }
> open ($fd, "-|", $GIT, "blame", '-l', $file_name, $hash_base)
> or die_error(undef, "Open git-blame failed.");
> @@ -1529,14 +1521,14 @@ sub git_blame2 {
> sub git_blame {
> my $fd;
> die_error('403 Permission denied', "Permission denied.") if (!git_get_project_config_bool
> ('blame'));
> - die_error('404 Not Found', "What file will it be, master?") if (!$file_name);
> + die_error('404 Not Found', "File name not defined.") if (!$file_name);
> $hash_base ||= git_read_head($project);
> - die_error(undef, "Reading commit failed.") unless ($hash_base);
> + die_error(undef, "Couldn't find base commit.") unless ($hash_base);
> my %co = git_read_commit($hash_base)
> or die_error(undef, "Reading commit failed.");
> if (!defined $hash) {
> $hash = git_get_hash_by_path($hash_base, $file_name, "blob")
> - or die_error(undef, "Error lookup file.");
> + or die_error(undef, "Error lookup file $file_name");
> }
> open ($fd, "-|", $GIT, "annotate", '-l', '-t', '-r', $file_name, $hash_base)
> or die_error(undef, "Open git-annotate failed.");
> @@ -1649,7 +1641,7 @@ sub git_blob_plain {
> if (defined $file_name) {
> my $base = $hash_base || git_read_head($project);
> $hash = git_get_hash_by_path($base, $file_name, "blob")
> - or die_error(undef, "Error lookup file.");
> + or die_error(undef, "Error lookup file $file_name");
> } else {
> die_error(undef, "No file name defined.");
> }
> @@ -1682,7 +1674,7 @@ sub git_blob {
> if (defined $file_name) {
> my $base = $hash_base || git_read_head($project);
> $hash = git_get_hash_by_path($base, $file_name, "blob")
> - or die_error(undef, "Error lookup file.");
> + or die_error(undef, "Error lookup file $file_name");
> } else {
> die_error(undef, "No file name defined.");
> }
> @@ -2122,7 +2114,7 @@ sub git_commitdiff {
> open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash
> or die_error(undef, "Open git-diff-tree failed.");
> my @difftree = map { chomp; $_ } <$fd>;
> - close $fd or die_error(undef, "Reading diff-tree failed.");
> + close $fd or die_error(undef, "Reading git-diff-tree failed.");
>
> # non-textual hash id's can be cached
> my $expires;
> @@ -2202,7 +2194,7 @@ sub git_commitdiff_plain {
> open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash
> or die_error(undef, "Open git-diff-tree failed.");
> my @difftree = map { chomp; $_ } <$fd>;
> - close $fd or die_error(undef, "Reading diff-tree failed.");
> + close $fd or die_error(undef, "Reading git-diff-tree failed.");
>
> # try to figure out the next tag after this commit
> my $tagname;
> @@ -2493,7 +2485,7 @@ sub git_rss {
> open my $fd, "-|", $GIT, "rev-list", "--max-count=150", git_read_head($project)
> or die_error(undef, "Open git-rev-list failed.");
> my @revlist = map { chomp; $_ } <$fd>;
> - close $fd or die_error(undef, "Reading rev-list failed.");
> + close $fd or die_error(undef, "Reading git-rev-list failed.");
> print $cgi->header(-type => 'text/xml', -charset => 'utf-8');
> print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n".
> "<rss version=\"2.0\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\">\n";
> --
> 1.4.1.1
>
> -
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply
* Re: [PATCH 1/5] gitweb: Cleanup input validation and error messages
From: Luben Tuikov @ 2006-08-04 23:54 UTC (permalink / raw)
To: Jakub Narebski, git
In-Reply-To: <200608050038.20534.jnareb@gmail.com>
--- Jakub Narebski <jnareb@gmail.com> wrote:
> Clean up input validation, including removing $rss_link variable and
> making error messages more explicit. Expand and uniquify other error
> messages.
>
> Signed-off-by: Jakub Narebski <jnareb@gmail.com>
> ---
> This probably conflicts "[PATCH 4/4] gitweb: No periods for error messages".
> It uses periods for error messages which does not end in with some
> value of some variable.
Can you fix your patch then?
Error messages in general do not end with a period.
Luben
>
> gitweb/gitweb.perl | 88 ++++++++++++++++++++++++----------------------------
> 1 files changed, 40 insertions(+), 48 deletions(-)
>
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 58eb5b1..dfc2d09 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -71,13 +71,15 @@ if (! -d $git_temp) {
> mkdir($git_temp, 0700) || die_error("Couldn't mkdir $git_temp");
> }
>
> +
> +# ======================================================================
> # input validation and dispatch
> our $action = $cgi->param('a');
> if (defined $action) {
> if ($action =~ m/[^0-9a-zA-Z\.\-_]/) {
> - undef $action;
> - die_error(undef, "Invalid action parameter.");
> + die_error(undef, "Invalid action parameter $action");
> }
> + # action which does not check rest of parameters
> if ($action eq "opml") {
> git_opml();
> exit;
> @@ -85,22 +87,17 @@ if (defined $action) {
> }
>
> our $project = ($cgi->param('p') || $ENV{'PATH_INFO'});
> -if (defined $project) {
> - $project =~ s|^/||; $project =~ s|/$||;
> - $project = validate_input($project);
> - if (!defined($project)) {
> - die_error(undef, "Invalid project parameter.");
> +$project =~ s|^/||; $project =~ s|/$||;
> +if (defined $project || $project) {
> + if (!validate_input($project)) {
> + die_error(undef, "Invalid project parameter $project");
> }
> if (!(-d "$projectroot/$project")) {
> - undef $project;
> - die_error(undef, "No such directory.");
> + die_error(undef, "No such directory $project");
> }
> if (!(-e "$projectroot/$project/HEAD")) {
> - undef $project;
> - die_error(undef, "No such project.");
> + die_error(undef, "No such project $project");
> }
> - $rss_link = "<link rel=\"alternate\" title=\"" . esc_param($project) . " log\" href=\"" .
> - "$my_uri?" . esc_param("p=$project;a=rss") . "\" type=\"application/rss+xml\"/>";
> $ENV{'GIT_DIR'} = "$projectroot/$project";
> } else {
> git_project_list();
> @@ -109,49 +106,43 @@ if (defined $project) {
>
> our $file_name = $cgi->param('f');
> if (defined $file_name) {
> - $file_name = validate_input($file_name);
> - if (!defined($file_name)) {
> - die_error(undef, "Invalid file parameter.");
> + if (!validate_input($file_name)) {
> + die_error(undef, "Invalid file parameter $file_name");
> }
> }
>
> our $hash = $cgi->param('h');
> if (defined $hash) {
> - $hash = validate_input($hash);
> - if (!defined($hash)) {
> - die_error(undef, "Invalid hash parameter.");
> + if (!validate_input($hash)) {
> + die_error(undef, "Invalid hash parameter $hash");
> }
> }
>
> our $hash_parent = $cgi->param('hp');
> if (defined $hash_parent) {
> - $hash_parent = validate_input($hash_parent);
> - if (!defined($hash_parent)) {
> - die_error(undef, "Invalid hash parent parameter.");
> + if (!validate_input($hash_parent)) {
> + die_error(undef, "Invalid hash parent parameter $hash_parent");
> }
> }
>
> our $hash_base = $cgi->param('hb');
> if (defined $hash_base) {
> - $hash_base = validate_input($hash_base);
> - if (!defined($hash_base)) {
> - die_error(undef, "Invalid hash base parameter.");
> + if (!validate_input($hash_base)) {
> + die_error(undef, "Invalid hash base parameter $hash_base");
> }
> }
>
> our $page = $cgi->param('pg');
> if (defined $page) {
> if ($page =~ m/[^0-9]$/) {
> - undef $page;
> - die_error(undef, "Invalid page parameter.");
> + die_error(undef, "Invalid page parameter $page");
> }
> }
>
> our $searchtext = $cgi->param('s');
> if (defined $searchtext) {
> if ($searchtext =~ m/[^a-zA-Z0-9_\.\/\-\+\:\@ ]/) {
> - undef $searchtext;
> - die_error(undef, "Invalid search parameter.");
> + die_error(undef, "Invalid search parameter $searchtext");
> }
> $searchtext = quotemeta $searchtext;
> }
> @@ -180,8 +171,7 @@ my %actions = (
>
> $action = 'summary' if (!defined($action));
> if (!defined($actions{$action})) {
> - undef $action;
> - die_error(undef, "Unknown action.");
> + die_error(undef, "Unknown action $action");
> }
> $actions{$action}->();
> exit;
> @@ -871,11 +861,13 @@ sub git_header_html {
> <meta name="robots" content="index, nofollow"/>
> <title>$title</title>
> <link rel="stylesheet" type="text/css" href="$stylesheet"/>
> -$rss_link
> -</head>
> -<body>
> EOF
> - print "<div class=\"page_header\">\n" .
> + print "<link rel=\"alternate\" title=\"" . esc_param($project) . " log\" href=\"" .
> + "$my_uri?" . esc_param("p=$project;a=rss") . "\" type=\"application/rss+xml\"/>\n" .
> + "</head>\n";
> +
> + print "<body>\n" .
> + "<div class=\"page_header\">\n" .
> "<a href=\"http://www.kernel.org/pub/software/scm/git/docs/\" title=\"git
> documentation\">" .
> "<img src=\"$logo\" width=\"72\" height=\"27\" alt=\"git\" style=\"float:right;
> border-width:0px;\"/>" .
> "</a>\n";
> @@ -1471,18 +1463,18 @@ sub git_blame2 {
> my $fd;
> my $ftype;
> 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);
> - die_error(undef, "Reading commit failed") unless ($hash_base);
> + die_error(undef, "Couldn't find base commit.") unless ($hash_base);
> my %co = git_read_commit($hash_base)
> - or die_error(undef, "Reading commit failed");
> + or die_error(undef, "Reading commit failed.");
> if (!defined $hash) {
> $hash = git_get_hash_by_path($hash_base, $file_name, "blob")
> - or die_error(undef, "Error looking up file");
> + or die_error(undef, "Error looking up file $file_name");
> }
> $ftype = git_get_type($hash);
> if ($ftype !~ "blob") {
> - die_error("400 Bad Request", "object is not a blob");
> + die_error("400 Bad Request", "Object is not a blob.");
> }
> open ($fd, "-|", $GIT, "blame", '-l', $file_name, $hash_base)
> or die_error(undef, "Open git-blame failed.");
> @@ -1529,14 +1521,14 @@ sub git_blame2 {
> sub git_blame {
> my $fd;
> die_error('403 Permission denied', "Permission denied.") if (!git_get_project_config_bool
> ('blame'));
> - die_error('404 Not Found', "What file will it be, master?") if (!$file_name);
> + die_error('404 Not Found', "File name not defined.") if (!$file_name);
> $hash_base ||= git_read_head($project);
> - die_error(undef, "Reading commit failed.") unless ($hash_base);
> + die_error(undef, "Couldn't find base commit.") unless ($hash_base);
> my %co = git_read_commit($hash_base)
> or die_error(undef, "Reading commit failed.");
> if (!defined $hash) {
> $hash = git_get_hash_by_path($hash_base, $file_name, "blob")
> - or die_error(undef, "Error lookup file.");
> + or die_error(undef, "Error lookup file $file_name");
> }
> open ($fd, "-|", $GIT, "annotate", '-l', '-t', '-r', $file_name, $hash_base)
> or die_error(undef, "Open git-annotate failed.");
> @@ -1649,7 +1641,7 @@ sub git_blob_plain {
> if (defined $file_name) {
> my $base = $hash_base || git_read_head($project);
> $hash = git_get_hash_by_path($base, $file_name, "blob")
> - or die_error(undef, "Error lookup file.");
> + or die_error(undef, "Error lookup file $file_name");
> } else {
> die_error(undef, "No file name defined.");
> }
> @@ -1682,7 +1674,7 @@ sub git_blob {
> if (defined $file_name) {
> my $base = $hash_base || git_read_head($project);
> $hash = git_get_hash_by_path($base, $file_name, "blob")
> - or die_error(undef, "Error lookup file.");
> + or die_error(undef, "Error lookup file $file_name");
> } else {
> die_error(undef, "No file name defined.");
> }
> @@ -2122,7 +2114,7 @@ sub git_commitdiff {
> open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash
> or die_error(undef, "Open git-diff-tree failed.");
> my @difftree = map { chomp; $_ } <$fd>;
> - close $fd or die_error(undef, "Reading diff-tree failed.");
> + close $fd or die_error(undef, "Reading git-diff-tree failed.");
>
> # non-textual hash id's can be cached
> my $expires;
> @@ -2202,7 +2194,7 @@ sub git_commitdiff_plain {
> open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash
> or die_error(undef, "Open git-diff-tree failed.");
> my @difftree = map { chomp; $_ } <$fd>;
> - close $fd or die_error(undef, "Reading diff-tree failed.");
> + close $fd or die_error(undef, "Reading git-diff-tree failed.");
>
> # try to figure out the next tag after this commit
> my $tagname;
> @@ -2493,7 +2485,7 @@ sub git_rss {
> open my $fd, "-|", $GIT, "rev-list", "--max-count=150", git_read_head($project)
> or die_error(undef, "Open git-rev-list failed.");
> my @revlist = map { chomp; $_ } <$fd>;
> - close $fd or die_error(undef, "Reading rev-list failed.");
> + close $fd or die_error(undef, "Reading git-rev-list failed.");
> print $cgi->header(-type => 'text/xml', -charset => 'utf-8');
> print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n".
> "<rss version=\"2.0\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\">\n";
> --
> 1.4.1.1
>
> -
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply
* Re: [PATCH 1/4] gitweb: blame table row no highlight fix
From: Junio C Hamano @ 2006-08-04 23:58 UTC (permalink / raw)
To: ltuikov; +Cc: git
In-Reply-To: <20060804220959.8423.qmail@web31810.mail.mud.yahoo.com>
Luben Tuikov <ltuikov@yahoo.com> writes:
> Until now blame just used the commit/tree/tags/etc style of
> highlight-able table rows, which have strictly alternating
> light/dark rows. This is very annoying in blame, since the
> text is static and it interferes with the per-revision block
> highlight.
>
> Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
> ---
> gitweb/gitweb.css | 4 ++++
> gitweb/gitweb.perl | 2 +-
> 2 files changed, 5 insertions(+), 1 deletions(-)
>
> diff --git a/gitweb/gitweb.css b/gitweb/gitweb.css
> index 460e728..47c1ade 100644
> --- a/gitweb/gitweb.css
> +++ b/gitweb/gitweb.css
> @@ -171,6 +171,10 @@ tr.dark {
> background-color: #f6f6f0;
> }
>
> +tr.dark2 {
> + background-color: #f6f6f0;
> +}
> +
> tr.dark:hover {
> background-color: #edece6;
> }
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 58eb5b1..049f27e 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -1493,7 +1493,7 @@ sub git_blame2 {
> git_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
> git_header_div('commit', esc_html($co{'title'}), $hash_base);
> git_print_page_path($file_name, $ftype);
> - my @rev_color = (qw(light dark));
> + my @rev_color = (qw(light2 dark2));
> my $num_colors = scalar(@rev_color);
> my $current_color = 0;
> my $last_rev;
I do not see "tr.light" but "tr.light:hover" in the original
CSS. That is kind of understandable (unhovered light ones just
use default), but this patch completely lost me. You use light2
class but nothing affects that class in the CSS.
Maybe it is the commit log message that is misleading? I guess
what you are trying to achieve is to disable the color change
that follows the pointer?
^ permalink raw reply
* Re: [PATCH 2/4] gitweb: bugfix: git_commit and git_commitdiff parents
From: Junio C Hamano @ 2006-08-05 0:00 UTC (permalink / raw)
To: ltuikov; +Cc: git
In-Reply-To: <20060804221147.18778.qmail@web31801.mail.mud.yahoo.com>
Luben Tuikov <ltuikov@yahoo.com> writes:
> In git_commit() the hash base of $from_id is $parent, not
> $hash:
> - If status is "D", then action blob for $from_id wants
> $parent, not $hash. History needs $parent too.
> - If status is "R", then action blob for $from_id wants
> $parent, not $hash.
>
> In git_commitdiff() the hash base of $from_id is
> $hash_parent, not $hash:
> - If status is "D".
> - If status is "M".
... stopped in mid sentence???
^ permalink raw reply
* [PATCH 6/5] gitweb: No periods for error messages
From: Jakub Narebski @ 2006-08-05 0:02 UTC (permalink / raw)
To: git
In-Reply-To: <20060804235414.66496.qmail@web31801.mail.mud.yahoo.com>
Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
Luben Tuikov wrote:
> --- Jakub Narebski <jnareb@gmail.com> wrote:
> > Clean up input validation, including removing $rss_link variable and
> > making error messages more explicit. Expand and uniquify other error
> > messages.
>
> Can you fix your patch then?
>
> Error messages in general do not end with a period.
Here you have the patch, on top of series.
gitweb/gitweb.perl | 66 ++++++++++++++++++++++++++--------------------------
1 files changed, 33 insertions(+), 33 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index e983452..4316bd0 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -420,7 +420,7 @@ sub git_get_hash_by_path {
my $tree = $base;
open my $fd, "-|", $GIT, "ls-tree", $base, "--", $path
- or die_error(undef, "Open git-ls-tree failed.");
+ or die_error(undef, "Open git-ls-tree failed");
my $line = <$fd>;
close $fd or return undef;
@@ -1282,13 +1282,13 @@ ## actions
sub git_project_list {
my $order = $cgi->param('o');
if (defined $order && $order !~ m/project|descr|owner|age/) {
- die_error(undef, "Invalid order parameter '$order'.");
+ die_error(undef, "Invalid order parameter $order");
}
my @list = git_read_projects();
my @projects;
if (!@list) {
- die_error(undef, "No projects found.");
+ die_error(undef, "No projects found");
}
foreach my $pr (@list) {
my $head = git_get_head($pr->{'path'});
@@ -1422,7 +1422,7 @@ sub git_summary {
"</table>\n";
open my $fd, "-|", $GIT, "rev-list", "--max-count=17", git_get_head($project)
- or die_error(undef, "Open git-rev-list failed.");
+ or die_error(undef, "Open git-rev-list failed");
my @revlist = map { chomp; $_ } <$fd>;
close $fd;
git_print_header_div('shortlog');
@@ -1478,22 +1478,22 @@ sub git_tag {
sub git_blame2 {
my $fd;
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);
$hash_base ||= git_get_head($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 = parse_commit($hash_base)
- or die_error(undef, "Reading commit failed.");
+ or die_error(undef, "Reading commit failed");
if (!defined $hash) {
$hash = git_get_hash_by_path($hash_base, $file_name, "blob")
or die_error(undef, "Error looking up file $file_name");
}
$ftype = git_get_type($hash);
if ($ftype !~ "blob") {
- die_error("400 Bad Request", "Object is not a blob.");
+ die_error("400 Bad Request", "Object is not a blob");
}
open ($fd, "-|", $GIT, "blame", '-l', $file_name, $hash_base)
- or die_error(undef, "Open git-blame failed.");
+ or die_error(undef, "Open git-blame failed");
git_header_html();
my $formats_nav =
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$hash;hb=$hash_base;f=$file_name")}, "blob") .
@@ -1536,18 +1536,18 @@ sub git_blame2 {
sub git_blame {
my $fd;
- 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('403 Permission denied', "Permission denied") if (!git_get_project_config_bool ('blame'));
+ die_error('404 Not Found', "File name not defined") if (!$file_name);
$hash_base ||= git_get_head($project);
die_error(undef, "Couldn't find base commit.") unless ($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) {
$hash = git_get_hash_by_path($hash_base, $file_name, "blob")
or die_error(undef, "Error lookup file $file_name");
}
open ($fd, "-|", $GIT, "annotate", '-l', '-t', '-r', $file_name, $hash_base)
- or die_error(undef, "Open git-annotate failed.");
+ or die_error(undef, "Open git-annotate failed");
git_header_html();
my $formats_nav =
$cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$hash;hb=$hash_base;f=$file_name")}, "blob") .
@@ -1658,7 +1658,7 @@ sub git_blob_plain {
$hash = git_get_hash_by_path($base, $file_name, "blob")
or die_error(undef, "Error lookup file $file_name");
} else {
- die_error(undef, "No file name defined.");
+ die_error(undef, "No file name defined");
}
}
my $type = shift;
@@ -1691,12 +1691,12 @@ sub git_blob {
$hash = git_get_hash_by_path($base, $file_name, "blob")
or die_error(undef, "Error lookup file $file_name");
} else {
- die_error(undef, "No file name defined.");
+ die_error(undef, "No file name defined");
}
}
my $have_blame = git_get_project_config_bool ('blame');
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 = blob_plain_mimetype($fd, $file_name);
if ($mimetype !~ m/^text\//) {
close $fd;
@@ -1754,9 +1754,9 @@ sub git_tree {
}
$/ = "\0";
open my $fd, "-|", $GIT, "ls-tree", '-z', $hash
- or die_error(undef, "Open git-ls-tree failed.");
+ or die_error(undef, "Open git-ls-tree failed");
my @entries = map { chomp; $_ } <$fd>;
- close $fd or die_error(undef, "Reading tree failed.");
+ close $fd or die_error(undef, "Reading tree failed");
$/ = "\n";
my $refs = git_read_info_refs();
@@ -1832,7 +1832,7 @@ sub git_log {
my $limit = sprintf("--max-count=%i", (100 * ($page+1)));
open my $fd, "-|", $GIT, "rev-list", $limit, $hash
- or die_error(undef, "Open git-rev-list failed.");
+ or die_error(undef, "Open git-rev-list failed");
my @revlist = map { chomp; $_ } <$fd>;
close $fd;
@@ -1893,7 +1893,7 @@ sub git_log {
sub git_commit {
my %co = parse_commit($hash);
if (!%co) {
- die_error(undef, "Unknown commit object.");
+ die_error(undef, "Unknown commit object");
}
my %ad = parse_date($co{'author_epoch'}, $co{'author_tz'});
my %cd = parse_date($co{'committer_epoch'}, $co{'committer_tz'});
@@ -1903,9 +1903,9 @@ sub git_commit {
$parent = "--root";
}
open my $fd, "-|", $GIT, "diff-tree", '-r', '-M', $parent, $hash
- or die_error(undef, "Open git-diff-tree failed.");
+ or die_error(undef, "Open git-diff-tree failed");
my @difftree = map { chomp; $_ } <$fd>;
- close $fd or die_error(undef, "Reading git-diff-tree failed.");
+ close $fd or die_error(undef, "Reading git-diff-tree failed");
# non-textual hash id's can be cached
my $expires;
@@ -2121,15 +2121,15 @@ sub git_commitdiff {
mkdir($git_temp, 0700);
my %co = parse_commit($hash);
if (!%co) {
- die_error(undef, "Unknown commit object.");
+ die_error(undef, "Unknown commit object");
}
if (!defined $hash_parent) {
$hash_parent = $co{'parent'};
}
open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash
- or die_error(undef, "Open git-diff-tree failed.");
+ or die_error(undef, "Open git-diff-tree failed");
my @difftree = map { chomp; $_ } <$fd>;
- close $fd or die_error(undef, "Reading git-diff-tree failed.");
+ close $fd or die_error(undef, "Reading git-diff-tree failed");
# non-textual hash id's can be cached
my $expires;
@@ -2207,9 +2207,9 @@ sub git_commitdiff {
sub git_commitdiff_plain {
mkdir($git_temp, 0700);
open my $fd, "-|", $GIT, "diff-tree", '-r', $hash_parent, $hash
- or die_error(undef, "Open git-diff-tree failed.");
+ or die_error(undef, "Open git-diff-tree failed");
my @difftree = map { chomp; $_ } <$fd>;
- close $fd or die_error(undef, "Reading git-diff-tree failed.");
+ close $fd or die_error(undef, "Reading git-diff-tree failed");
# try to figure out the next tag after this commit
my $tagname;
@@ -2267,7 +2267,7 @@ sub git_history {
my $ftype;
my %co = parse_commit($hash_base);
if (!%co) {
- die_error(undef, "Unknown commit object.");
+ die_error(undef, "Unknown commit object");
}
my $refs = git_read_info_refs();
git_header_html();
@@ -2325,14 +2325,14 @@ sub git_history {
sub git_search {
if (!defined $searchtext) {
- die_error("", "Text field empty.");
+ die_error(undef, "Text field empty");
}
if (!defined $hash) {
$hash = git_get_head($project);
}
my %co = parse_commit($hash);
if (!%co) {
- die_error(undef, "Unknown commit object.");
+ die_error(undef, "Unknown commit object");
}
# pickaxe may take all resources of your box and run for several minutes
# with every query - so decide by yourself how public you make this feature :)
@@ -2470,7 +2470,7 @@ sub git_shortlog {
my $limit = sprintf("--max-count=%i", (100 * ($page+1)));
open my $fd, "-|", $GIT, "rev-list", $limit, $hash
- or die_error(undef, "Open git-rev-list failed.");
+ or die_error(undef, "Open git-rev-list failed");
my @revlist = map { chomp; $_ } <$fd>;
close $fd;
@@ -2498,9 +2498,9 @@ ## feeds (RSS, OPML)
sub git_rss {
# http://www.notestips.com/80256B3A007F2692/1/NAMO5P9UPQ
open my $fd, "-|", $GIT, "rev-list", "--max-count=150", git_get_head($project)
- or die_error(undef, "Open git-rev-list failed.");
+ or die_error(undef, "Open git-rev-list failed");
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");
print $cgi->header(-type => 'text/xml', -charset => 'utf-8');
print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n".
"<rss version=\"2.0\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\">\n";
--
1.4.1.1
^ permalink raw reply related
* Re: [PATCH 1/5] gitweb: Cleanup input validation and error messages
From: Junio C Hamano @ 2006-08-05 0:15 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git
In-Reply-To: <200608050038.20534.jnareb@gmail.com>
Jakub Narebski <jnareb@gmail.com> writes:
> our $action = $cgi->param('a');
> if (defined $action) {
> if ($action =~ m/[^0-9a-zA-Z\.\-_]/) {
> - undef $action;
> - die_error(undef, "Invalid action parameter.");
> + die_error(undef, "Invalid action parameter $action");
> }
Doesn't this make us parrot what the browser threw at us without
escaping back for HTML (iow, die_error does not seem to escape
$error)?
> our $project = ($cgi->param('p') || $ENV{'PATH_INFO'});
> -if (defined $project) {
> - $project =~ s|^/||; $project =~ s|/$||;
> - $project = validate_input($project);
> - if (!defined($project)) {
> - die_error(undef, "Invalid project parameter.");
> +$project =~ s|^/||; $project =~ s|/$||;
Unrelated change but it is probably safe.
> +if (defined $project || $project) {
> + if (!validate_input($project)) {
> + die_error(undef, "Invalid project parameter $project");
> }
Because undef is not true, "|| $project" here does not make much
sense to me. Even if you meant to say "&&" to exclude empty
string or "0", wouldn't validate_input() take care of them?
Same input parrotting comment applies here and everywhere.
> - $rss_link = "<link rel=\"alternate\" title=\"" . esc_param($project) . " log\" href=\"" .
> - "$my_uri?" . esc_param("p=$project;a=rss") . "\" type=\"application/rss+xml\"/>";
The reason of removal is...? Ah, you inlined it. It was not
clear from the proposed commit log message.
^ permalink raw reply
* Re: [PATCH 4/4] gitweb: No periods for error messages
From: Junio C Hamano @ 2006-08-05 0:20 UTC (permalink / raw)
To: Luben Tuikov; +Cc: git, Jakub Narebski
In-Reply-To: <20060804221602.98727.qmail@web31813.mail.mud.yahoo.com>
This and Jakub's [1/5] seem to be going the opposite way. I
tend to prefer ending each sentence with a full stop.
^ permalink raw reply
* Re: [PATCH 1/5] gitweb: Cleanup input validation and error messages
From: Jakub Narebski @ 2006-08-05 0:26 UTC (permalink / raw)
To: git
In-Reply-To: <7vu04sghr0.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
>
>> our $action = $cgi->param('a');
>> if (defined $action) {
>> if ($action =~ m/[^0-9a-zA-Z\.\-_]/) {
>> - undef $action;
>> - die_error(undef, "Invalid action parameter.");
>> + die_error(undef, "Invalid action parameter $action");
>> }
>
> Doesn't this make us parrot what the browser threw at us without
> escaping back for HTML (iow, die_error does not seem to escape
> $error)?
I wanted to know what is the parameter gitweb considers invalid.
Perhaps the execution wasn't the best...
[...]
>> - $rss_link = "<link rel=\"alternate\" title=\"" . esc_param($project) . " log\" href=\"" .
>> - "$my_uri?" . esc_param("p=$project;a=rss") . "\" type=\"application/rss+xml\"/>";
>
> The reason of removal is...? Ah, you inlined it. It was not
> clear from the proposed commit log message.
I'm sorry for unrelated changes (the commit could be probably split
into four).
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply
* Re: [PATCH 1/4] gitweb: blame table row no highlight fix
From: Luben Tuikov @ 2006-08-05 0:51 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7v4pwshx3h.fsf@assigned-by-dhcp.cox.net>
--- Junio C Hamano <junkio@cox.net> wrote:
> I do not see "tr.light" but "tr.light:hover" in the original
> CSS. That is kind of understandable (unhovered light ones just
> use default), but this patch completely lost me. You use light2
> class but nothing affects that class in the CSS.
Yes, it is the default, just as there is no "tr.light", there is
no "tr.light2".
> Maybe it is the commit log message that is misleading? I guess
> what you are trying to achieve is to disable the color change
> that follows the pointer?
Yes, indeed. It is very annoying.
Luben
^ permalink raw reply
* Re: [PATCH 2/4] gitweb: bugfix: git_commit and git_commitdiff parents
From: Luben Tuikov @ 2006-08-05 0:53 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7vzmekgigm.fsf@assigned-by-dhcp.cox.net>
--- Junio C Hamano <junkio@cox.net> wrote:
> Luben Tuikov <ltuikov@yahoo.com> writes:
>
> > In git_commit() the hash base of $from_id is $parent, not
> > $hash:
> > - If status is "D", then action blob for $from_id wants
> > $parent, not $hash. History needs $parent too.
> > - If status is "R", then action blob for $from_id wants
> > $parent, not $hash.
> >
> > In git_commitdiff() the hash base of $from_id is
> > $hash_parent, not $hash:
> > - If status is "D".
> > - If status is "M".
>
> ... stopped in mid sentence???
Sorry. The meaning is the same as for git_commit() and as
the paragraph text ("In git_commitdiff() the hash base of ...").
Luben
^ permalink raw reply
* Re: [PATCH 4/4] gitweb: No periods for error messages
From: Luben Tuikov @ 2006-08-05 1:03 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Jakub Narebski
In-Reply-To: <7vpsfgghi2.fsf@assigned-by-dhcp.cox.net>
--- Junio C Hamano <junkio@cox.net> wrote:
> This and Jakub's [1/5] seem to be going the opposite way.
Not quite. They both do the same thing, except his patch
does it only half way:
- no full stop for error messages ending with some kind
of variable expansion.
- full stop for static error messages.
> I tend to prefer ending each sentence with a full stop.
I've never seen this in, among other things,
- kernel messages
- errno messages
- web server messages
- RFC text describing error messages, (web services),
- etc.
I was going for was consistency. I'd say apply Jacob's [6/5].
Luben
^ permalink raw reply
* Re: update-ref logs: problem with committer info?
From: Shawn Pearce @ 2006-08-05 2:56 UTC (permalink / raw)
To: Ramsay Jones, Junio C Hamano; +Cc: git
In-Reply-To: <000501c6b809$2b18cd60$c47eedc1@ramsay1.demon.co.uk>
Ramsay Jones <ramsay@ramsay1.demon.co.uk> wrote:
> diff --git a/builtin-update-ref.c b/builtin-update-ref.c
> index 00333c7..83094ab 100644
> --- a/builtin-update-ref.c
> +++ b/builtin-update-ref.c
> @@ -12,6 +12,7 @@ int cmd_update_ref(int argc, const char
> unsigned char sha1[20], oldsha1[20];
> int i;
>
> + setup_ident();
> setup_git_directory();
> git_config(git_default_config);
> diff --git a/refs.c b/refs.c
> index 713ca46..a4060d8 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -379,7 +379,6 @@ static int log_ref_write(struct ref_lock
> lock->log_file, strerror(errno));
> }
>
> - setup_ident();
> comitter = git_committer_info(1);
> if (msg) {
> maxlen = strlen(comitter) + strlen(msg) + 2*40 + 5;
These two changes were already fixed by me in 0b0fe4a6 on July
10th. That change is in `next`, in `master` and in v1.4.2-rc3.
So I expect it to be available in a final release real-soon-now.
Maybe you should consider running a newer version of GIT?
> diff --git a/http-fetch.c b/http-fetch.c
> index 44eba5f..fe3a4fd 100644
> --- a/http-fetch.c
> +++ b/http-fetch.c
> @@ -1222,6 +1222,7 @@ int main(int argc, char **argv)
> int arg = 1;
> int rc = 0;
>
> + setup_ident();
> setup_git_directory();
> git_config(git_default_config);
>
> diff --git a/local-fetch.c b/local-fetch.c
> index ffa4887..d059a51 100644
> --- a/local-fetch.c
> +++ b/local-fetch.c
> @@ -207,6 +207,7 @@ int main(int argc, char **argv)
> char *commit_id;
> int arg = 1;
>
> + setup_ident();
> setup_git_directory();
> git_config(git_default_config);
>
> diff --git a/ssh-fetch.c b/ssh-fetch.c
> index 1e59cd2..a42d17e 100644
> --- a/ssh-fetch.c
> +++ b/ssh-fetch.c
> @@ -131,6 +131,7 @@ int main(int argc, char **argv)
> prog = getenv("GIT_SSH_PUSH");
> if (!prog) prog = "git-ssh-upload";
>
> + setup_ident();
> setup_git_directory();
> git_config(git_default_config);
>
These changes aren't in `next` right now, but should be. Junio,
can you apply them?
--
Shawn.
^ permalink raw reply
* [PATCH] git-status: colorize status output
From: Jeff King @ 2006-08-05 3:14 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
The git-status output can sometimes be very verbose, making it difficult to
quickly see whether your files are updated in the index. This adds 4 levels
of colorizing to the status output:
- general header (defaults to normal white)
- updated but not committed (defaults to green)
- changed but not updated (defaults to red)
- untracked files (defaults to red)
The idea is that red things indicate a potential mistake on the part of the
user (e.g., forgetting to update a file, forgetting to git-add a file).
This patch also has a few minor output related cleanups. Untracked files are
now displayed using the 'report' function (marked with the character 'O').
The report function now uses a simple hdr_shown variable instead of
flip-flopping the header and trailer, which was somewhat difficult to read.
Color support is controlled by status.color and status.color.*. There is no
command line option, and the status.color variable is a simple boolean (no
checking for tty output).
Signed-off-by: Jeff King <peff@peff.net>
---
Documentation/config.txt | 12 ++++++
git-commit.sh | 99 ++++++++++++++++++++++++++++++----------------
2 files changed, 77 insertions(+), 34 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index d89916b..83f4627 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -222,6 +222,18 @@ showbranch.default::
The default set of branches for gitlink:git-show-branch[1].
See gitlink:git-show-branch[1].
+status.color::
+ A boolean to enable/disable color in the output of
+ gitlink:git-status[1]. Defaults to false.
+
+status.color.<slot>::
+ Use customized color for status colorization. `<slot>` is
+ one of `header` (the header text of the status message),
+ `updated` (files which are updated but not committed),
+ `changed` (files which are changed but not updated in the index),
+ or `untracked` (files which are not tracked by git). The values of
+ these variables may be specified as in diff.color.<slot>.
+
tar.umask::
By default, gitlink:git-tar-tree[1] sets file and directories modes
to 0666 or 0777. While this is both useful and acceptable for projects
diff --git a/git-commit.sh b/git-commit.sh
index 4cf3fab..b7269c2 100755
--- a/git-commit.sh
+++ b/git-commit.sh
@@ -10,15 +10,49 @@ SUBDIRECTORY_OK=Yes
git-rev-parse --verify HEAD >/dev/null 2>&1 || initial_commit=t
branch=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD)
+color=false
+color_header=normal
+color_updated=green
+color_changed=red
+color_untracked=red
+
case "$0" in
*status)
status_only=t
- unmerged_ok_if_status=--unmerged ;;
+ unmerged_ok_if_status=--unmerged
+ color=`git-repo-config --bool --get status.color`
+ eval `git-repo-config --get-regexp status.color. \
+ | while read k v; do
+ echo color_${k#status.color.}=$v
+ done`
+ ;;
*commit)
status_only=
unmerged_ok_if_status= ;;
esac
+color() {
+ case "$color" in true) ;; *) return ;; esac
+ case `eval "echo \\$color_$1"` in
+ normal) ;;
+ bold) printf '\033[1m' ;;
+ red) printf '\033[31m' ;;
+ green) printf '\033[32m' ;;
+ yellow) printf '\033[33m' ;;
+ blue) printf '\033[34m' ;;
+ magenta) printf '\033[35m' ;;
+ cyan) printf '\033[36m' ;;
+ esac
+}
+
+uncolor() {
+ case "$color" in true) ;; *) return ;; esac
+ case "$1" in
+ normal) ;;
+ *) printf '\033[m' ;;
+ esac
+}
+
refuse_partial () {
echo >&2 "$1"
echo >&2 "You might have meant to say 'git commit -i paths...', perhaps?"
@@ -33,30 +67,32 @@ save_index () {
}
report () {
- header="#
-# $1:
-# ($2)
-#
-"
- trailer=""
+ hdr_shown=0
while read status name newname
do
- printf '%s' "$header"
- header=""
- trailer="#
-"
+ case "$hdr_shown" in
+ 0) color header; echo "# $2:"; uncolor header
+ color header; echo "# ($3)"; uncolor header
+ color header; echo "#"; uncolor header
+ hdr_shown=1
+ ;;
+ esac
+ color header; printf '#\t'; uncolor header
case "$status" in
- M ) echo "# modified: $name";;
- D*) echo "# deleted: $name";;
- T ) echo "# typechange: $name";;
- C*) echo "# copied: $name -> $newname";;
- R*) echo "# renamed: $name -> $newname";;
- A*) echo "# new file: $name";;
- U ) echo "# unmerged: $name";;
+ M ) color $1; echo "modified: $name"; uncolor $1;;
+ D*) color $1; echo "deleted: $name"; uncolor $1;;
+ T ) color $1; echo "1change: $name"; uncolor $1;;
+ C*) color $1; echo "copied: $name -> $newname"; uncolor $1;;
+ R*) color $1; echo "renamed: $name -> $newname"; uncolor $1;;
+ A*) color $1; echo "new file: $name"; uncolor $1;;
+ U ) color $1; echo "unmerged: $name"; uncolor $1;;
+ O ) color $1; echo "$name"; uncolor $1;;
esac
done
- printf '%s' "$trailer"
- [ "$header" ]
+ case "$hdr_shown" in
+ 1) color header; echo '#'; uncolor header;;
+ esac
+ test "$hdr_shown" = 0
}
run_status () {
@@ -109,7 +145,7 @@ run_status () {
s/\\/\\\\/g
s/ /\\ /g
' |
- report "Updated but not checked in" "will commit"
+ report updated "Updated but not checked in" "will commit"
committable="$?"
else
echo '#
@@ -121,7 +157,7 @@ #'
s/ /\\ /g
s/^/A /
' |
- report "Updated but not checked in" "will commit"
+ report updated "Updated but not checked in" "will commit"
committable="$?"
fi
@@ -131,14 +167,13 @@ #'
s/\\/\\\\/g
s/ /\\ /g
' |
- report "Changed but not updated" \
+ report changed "Changed but not updated" \
"use git-update-index to mark for commit"
option=""
if test -z "$untracked_files"; then
option="--directory --no-empty-directory"
fi
- hdr_shown=
if test -f "$GIT_DIR/info/exclude"
then
git-ls-files --others $option \
@@ -148,16 +183,12 @@ #'
git-ls-files --others $option \
--exclude-per-directory=.gitignore
fi |
- while read line; do
- if [ -z "$hdr_shown" ]; then
- echo '#'
- echo '# Untracked files:'
- echo '# (use "git add" to add to commit)'
- echo '#'
- hdr_shown=1
- fi
- echo "# $line"
- done
+ sed -e '
+ s/\\/\\\\/g
+ s/ /\\ /g
+ s/^/O /
+ ' |
+ report untracked "Untracked files" "use git add to commit"
if test -n "$verbose" -a -z "$IS_INITIAL"
then
--
1.4.2.rc3.g06c3
^ permalink raw reply related
* Re: [RFC][PATCH] Branch history
From: Shawn Pearce @ 2006-08-05 3:18 UTC (permalink / raw)
To: Eric W. Biederman; +Cc: git
In-Reply-To: <m1mzakpam8.fsf@ebiederm.dsl.xmission.com>
"Eric W. Biederman" <ebiederm@xmission.com> wrote:
>
> The problem:
> git-rebase, stgit and the like destructively edit the commit history
> on a branch. Making it a challenge to go back to a known good point.
>
> revlog and the like sort of help this but they don't address the
> issues that they capture irrelevant points and are not git-prune safe.
How are the points irrelevant? Each commit/rebase/am/update-ref
is recorded. That's each change to the branch head. It appears
as though you are mainly interested in tracking across rebases,
which a reflog would do, assuming you filtered the events down to
only those caused by rebase and ignored the others.
But yea, a reflog is not prune-safe, but it wouldn't be hard to
modify git-prune to also consider the reflog associated with
a ref if its using that ref as a root that must be preserved.
Assuming anyone really wants that as a feature...
> After thinking about the problem some more I believe I have found
> a rather simple solution to the problem of keeping branch history.
>
> For each branch you want to keep the history of keep 2 branches.
> A normal working branch, and a second archive branch that records
> the history of the branch you are editing.
It would appear as though you are really only tracking rebase events,
as everything else done on the branch is preserved since the work
branch is itself parent #1 for the archive branch commit. So the
archive branch shows every commit ever done along the main branch,
but also shows itself joining back quite frequently. Further if you
archive away the work branch without during a rebase since the last
archive then there's really nothing happening except saving a tag
(but as a commit!) on the archive branch.
This creates for a rather messy history, and is more-or-less what
pg does when patches get pushed onto a stack and they can't be
pushed by a simple fast-forward operation. Reading this history
in gitk is "interesting" at best. This is the main reason I've
been trying to write `tb` (a topic branch manager, fashioned after
Junio's TO script) but I can't seem to find enough time to get it
finished.
> The neat thing is that it gives an immutable history of a branch that
> is actively being edited. So if you export your archive branch people
> will never see time roll backward.
Right. That's an interesting way of handling it, but that branch
is also quite messy as its full of merge commits. Although it may
be useful to export its going to carry along with it all of the bad
edits and prior rebases made on that branch. You probably wouldn't
want to merge that branch into a mainline, which means that branch
is likely to be discarded at some point in the future. When that
happens then nobody can track it anymore and that immutable history
just got mutated out of existance.
I think the right way to deal with these types of branches is to
publicly publish whether or not the branch is going to be expected
to roll backwards in time (due to a rebase type of event) then
let clients always update those branches during pulls, rather
than needing to explicitly mark them with '+' on the client side.
Further good remege tools (git-rerere on steriods) would help
re-resolve conflicts resulting from continous rebasing. This would
make it easier to maintain such a branch and carry the thing forward;
or to leave it on its original base but to continously remerge
it and the current mainline into a temporary working branch for
testing purposes.
This is largely the policy that Junio uses for the `pu` and
the `next` branches, as well as for the topic branches that he
carries for everyone else doing GIT development. It appears to be
working rather well, but it certainly could be streamlined better.
My git-rerere2 and tb tools are an attempt to do this, but sadly
they aren't in a useful state yet. Maybe because they are both
far more complex then what you are doing here. :-)
Nonethless it is an interesting contribution. Thank you for taking
the time to send it.
--
Shawn.
^ permalink raw reply
* Re: [PATCH] git-status: colorize status output
From: Jeff King @ 2006-08-05 3:21 UTC (permalink / raw)
To: git
In-Reply-To: <20060805031418.GA11102@coredump.intra.peff.net>
On Fri, Aug 04, 2006 at 11:14:19PM -0400, Jeff King wrote:
> The idea is that red things indicate a potential mistake on the part of the
> user (e.g., forgetting to update a file, forgetting to git-add a file).
I actually wanted to do this because I started syntax-highlighting the
git-commit message in vim. I found myself catching simple mistakes in
commits, like the ones I mentioned above, before committing, saving me
from doing an --amend. Then I got so hooked on it I wanted the
colorization everytime I ran git-status.
If anyone is interested in the vim syntax highlighting, it is below.
Copy the file to $HOME/.vim/syntax/gitcommit.vim and add the following
line to your .vimrc:
autocmd BufNewFile,BufRead COMMIT_EDITMSG set filetype=gitcommit
-Peff
-- >8 --
syn region gitLine start=/^#/ end=/$/
syn region gitCommit start=/^# Updated but not checked in:$/ end=/^#$/ contains=gitHead,gitCommitFile
syn region gitHead contained start=/^# (.*)/ end=/^#$/
syn region gitChanged start=/^# Changed but not updated:/ end=/^#$/ contains=gitHead,gitChangedFile
syn region gitUntracked start=/^# Untracked files:/ end=/^#$/ contains=gitHead,gitUntrackedFile
syn match gitCommitFile contained /^#\t.*/hs=s+2
syn match gitChangedFile contained /^#\t.*/hs=s+2
syn match gitUntrackedFile contained /^#\t.*/hs=s+2
hi def link gitLine Comment
hi def link gitCommit Comment
hi def link gitChanged Comment
hi def link gitHead Comment
hi def link gitUntracked Comment
hi def link gitCommitFile Type
hi def link gitChangedFile Constant
hi def link gitUntrackedFile Constant
^ permalink raw reply
* Re: [RFC] Introduce git-xxdiff to invoke xxdiff for manual conflict resolution - take 2
From: Martin Langhoff @ 2006-08-05 3:26 UTC (permalink / raw)
To: Alex Riesen; +Cc: git
In-Reply-To: <81b0412b0608040109q683bd628rd9238662e0fdfb0@mail.gmail.com>
On 8/4/06, Alex Riesen <raa.lkml@gmail.com> wrote:
> On 8/4/06, Martin Langhoff <martin@catalyst.net.nz> wrote:
> > This is a bit of a crude but really useful shortcut for conflict resolution.
> > The name is bad, but git-merge-* is a different 'namespace', and git-resolve is
> > also taken.
>
> git-xxmerge?
Well, the xx part is taken because it uses xxdiff, so I thought
perhaps we can have trivial git wrappers for many popular mergers. Ie:
git-wiggle, git-sdiff.
We could have a single command with a 'strategy' parameter, say
git-mergehelper -s [xxdiff|sdiff|wiggle] path/to/file
but separate commands are easier for prototyping IMVHO.
cheers,
martin
^ permalink raw reply
* Re: Creating objects manually and repack
From: Martin Langhoff @ 2006-08-05 4:15 UTC (permalink / raw)
To: Jon Smirl; +Cc: Linus Torvalds, git
In-Reply-To: <9e4733910608041017v235da03ocd3eeeb0ba0e259b@mail.gmail.com>
On 8/5/06, Jon Smirl <jonsmirl@gmail.com> wrote:
> On 8/4/06, Linus Torvalds <torvalds@osdl.org> wrote:
> > and you're basically all done. The above would turn each *,v file into a
> > *-<sha>.pack/*-<sha>.idx file pair, so you'd have exactly as many
> > pack-files as you have *,v files.
>
> I'll end up with 110,000 pack files.
Then just do it every 100 files, and you'll only have 1,100 pack
files, and it'll be fine.
> I suspect when I run repack over
> that it is going to take 24hrs or more,
Probably, but only the initial import has to incur that huge cost.
cheers,
martin
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox