diff options
-rw-r--r-- | Documentation/git-am.txt | 2 | ||||
-rw-r--r-- | Documentation/technical/pack-format.txt | 10 | ||||
-rw-r--r-- | gitweb/INSTALL | 184 | ||||
-rw-r--r-- | gitweb/gitweb.css | 2 | ||||
-rwxr-xr-x | gitweb/gitweb.perl | 12 |
5 files changed, 198 insertions, 12 deletions
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt index 4fb1d84413..13a7389867 100644 --- a/Documentation/git-am.txt +++ b/Documentation/git-am.txt @@ -70,7 +70,7 @@ default. You could use `--no-utf8` to override this. the patch. -C<n>, -p<n>:: - These flag are passed to the `git-apply` program that applies + These flags are passed to the `git-apply` program that applies the patch. --interactive:: diff --git a/Documentation/technical/pack-format.txt b/Documentation/technical/pack-format.txt index 0e1ffb2427..9ce3c473ae 100644 --- a/Documentation/technical/pack-format.txt +++ b/Documentation/technical/pack-format.txt @@ -21,11 +21,11 @@ GIT pack format which looks like this: (undeltified representation) - n-byte type and length (4-bit type, (n-1)*7+4-bit length) + n-byte type and length (3-bit type, (n-1)*7+4-bit length) compressed data (deltified representation) - n-byte type and length (4-bit type, (n-1)*7+4-bit length) + n-byte type and length (3-bit type, (n-1)*7+4-bit length) 20-byte base object name compressed delta data @@ -102,11 +102,13 @@ trailer | | packfile checksum | Pack file entry: <+ packed object header: - 1-byte type (upper 4-bit) + 1-byte size extension bit (MSB) + type (next 3 bit) size0 (lower 4-bit) n-byte sizeN (as long as MSB is set, each 7-bit) size0..sizeN form 4+7+7+..+7 bit integer, size0 - is the most significant part. + is the least significant part, and sizeN is the + most significant part. packed object data: If it is not DELTA, then deflated bytes (the size above is the size before compression). diff --git a/gitweb/INSTALL b/gitweb/INSTALL new file mode 100644 index 0000000000..371407dc23 --- /dev/null +++ b/gitweb/INSTALL @@ -0,0 +1,184 @@ +GIT web Interface (gitweb) Installation +======================================= + +First you have to generate gitweb.cgi from gitweb.perl using +"make gitweb/gitweb.cgi", then copy appropriate files (gitweb.cgi, +gitweb.css, git-logo.png and git-favicon.png) to their destination. +For example if git was (or is) installed with /usr prefix, you can do + + $ make prefix=/usr gitweb/gitweb.cgi ;# as yourself + # cp gitweb/git* /var/www/cgi-bin/ ;# as root + +Alternatively you can use autoconf generated ./configure script to +set up path to git binaries (via config.mak.autogen), so you can write +instead + + $ make configure ;# as yourself + $ ./configure --prefix=/usr ;# as yourself + $ make gitweb/gitweb.cgi ;# as yourself + # cp gitweb/git* /var/www/cgi-bin/ ;# as root + +The above example assumes that your web server is configured to run +[executable] files in /var/www/cgi-bin/ as server scripts (as CGI +scripts). + + +Build time configuration +------------------------ + +See also "How to configure gitweb for your local system" in README +file for gitweb (in gitweb/README). + +- There are many configuration variables which affects building of + gitweb.cgi; see "default configuration for gitweb" section in main + (top dir) Makefile, and instructions for building gitweb/gitweb.cgi + target. + + One of most important is where to find git wrapper binary. Gitweb + tries to find git wrapper at $(bindir)/git, so you have to set $bindir + when building gitweb.cgi, or $prefix from which $bindir is derived. If + you build and install gitweb together with the rest of git suite, + there should be no problems. Otherwise, if git was for example + installed from a binary package, you have to set $prefix (or $bindir) + accordingly. + +- Another important issue is where are git repositories you want to make + available to gitweb. By default gitweb search for repositories under + /pub/git; if you want to have projects somewhere else, like /home/git, + use GITWEB_PROJECTROOT build configuration variable. + + By default all git repositories under projectroot are visible and + available to gitweb. List of projects is generated by default by + scanning the projectroot directory for git repositories. This can be + changed (configured) as described in "Gitweb repositories" section + below. + + Note that gitweb deals directly with object database, and does not + need working directory; the name of the project is the name of its + repository object database, usually projectname.git for bare + repositories. If you want to provide gitweb access to non-bare (live) + repository, you can make projectname.git symbolic link under + projectroot linking to projectname/.git (but it is just + a suggestion). + +- You can control where gitweb tries to find its main CSS style file, + its favicon and logo with GITWEB_CSS, GITWEB_FAVICON and GITWEB_LOGO + build configuration variables. By default gitweb tries to find them + in the same directory as gitweb.cgi script. + +Build example +~~~~~~~~~~~~~ + +- To install gitweb to /var/www/cgi-bin/gitweb/ when git wrapper + is installed at /usr/local/bin/git and the repositories (projects) + we want to display are under /home/local/scm, you can do + + make GITWEB_PROJECTROOT="/home/local/scm" \ + GITWEB_CSS="/gitweb/gitweb.css" \ + GITWEB_LOGO="/gitweb/git-logo.png" \ + GITWEB_FAVICON="/gitweb/git-favicon.png" \ + bindir=/usr/local/bin \ + gitweb/gitweb.cgi + + cp -fv ~/git/gitweb/gitweb.{cgi,css} \ + ~/git/gitweb/git-{favicon,logo}.png \ + /var/www/cgi-bin/gitweb/ + + +Gitweb config file +------------------ + +See also "Runtime gitweb configuration" section in README file +for gitweb (in gitweb/README). + +- You can configure gitweb further using gitweb configuration file; + by default it is file named gitweb_config.perl in the same place as + gitweb.cgi script. You can control default place for config file + using GITWEB_CONFIG build configuration variable, and you can set it + using GITWEB_CONFIG environmental variable. + +- Gitweb config file is [fragment] of perl code. You can set variables + using "our $variable = value"; text from "#" character until the end + of a line is ignored. See perlsyn(1) for details. + + See the top of gitweb.perl file for examples of customizable options. + + +Gitweb repositories: +-------------------- + +- By default all git repositories under projectroot are visible and + available to gitweb. List of projects is generated by default by + scanning the projectroot directory for git repositories (for object + databases to be more exact). + + You can provide pre-generated list of [visible] repositories, + together with information about their owners (the project ownership + is taken from owner of repository directory otherwise), by setting + GITWEB_LIST build configuration variable (or $projects_list variable + in gitweb config file) to point to a plain file. + + Each line of projects list file should consist of url-encoded path + to project repository database (relative to projectroot) separated + by space from url-encoded project owner; spaces in both project path + and project owner have to be encoded as either '%20' or '+'. + + You can generate projects list index file using project_index action + (the 'TXT' link on projects list page) directly from gitweb. + +- By default even if project is not visible on projects list page, you + can view it nevertheless by hand-crafting gitweb URL. You can set + GITWEB_STRICT_EXPORT build configuration variable (or $strict_export + variable in gitweb config file) to only allow viewing of + repositories also shown on the overview page. + +- Alternatively, you can configure gitweb to only list and allow + viewing of the explicitly exported repositories, via + GITWEB_EXPORT_OK build configuration variable (or $export_ok + variable in gitweb config file). If it evaluates to true, gitweb + show repository only if this file exists in its object database + (if directory has the magic file $export_ok). + + +Requirements +------------ + + - Core git tools + - Perl + - Perl modules: CGI, Encode, Fcntl, File::Find, File::Basename. + - web server + + +Example web server configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See also "Webserver configuration" section in README file for gitweb +(in gitweb/README). + + +- Apache2, gitweb installed as CGI script, + under /var/www/cgi-bin/ + + ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" + + <Directory "/var/www/cgi-bin"> + Options Indexes FollowSymlinks ExecCGI + AllowOverride None + Order allow,deny + Allow from all + </Directory> + +- Apache2, gitweb installed as mod_perl legacy script, + under /var/www/perl/ + + Alias /perl "/var/www/perl" + + <Directory "/var/www/perl"> + SetHandler perl-script + PerlResponseHandler ModPerl::Registry + PerlOptions +ParseHeaders + Options Indexes FollowSymlinks +ExecCGI + AllowOverride None + Order allow,deny + Allow from all + </Directory> diff --git a/gitweb/gitweb.css b/gitweb/gitweb.css index 7177c6e86b..5e40292404 100644 --- a/gitweb/gitweb.css +++ b/gitweb/gitweb.css @@ -107,7 +107,7 @@ span.age { font-style: italic; } -div.page_body span.signoff { +span.signoff { color: #888888; } diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 653ca3cc60..5214050a88 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -591,7 +591,7 @@ sub esc_html ($;%) { my %opts = @_; $str = to_utf8($str); - $str = escapeHTML($str); + $str = $cgi->escapeHTML($str); if ($opts{'-nbsp'}) { $str =~ s/ / /g; } @@ -605,7 +605,7 @@ sub esc_path { my %opts = @_; $str = to_utf8($str); - $str = escapeHTML($str); + $str = $cgi->escapeHTML($str); if ($opts{'-nbsp'}) { $str =~ s/ / /g; } @@ -1974,17 +1974,17 @@ sub git_print_page_path { $fullname .= ($fullname ? '/' : '') . $dir; print $cgi->a({-href => href(action=>"tree", file_name=>$fullname, hash_base=>$hb), - -title => esc_html($fullname)}, esc_path($dir)); + -title => $fullname}, esc_path($dir)); print " / "; } if (defined $type && $type eq 'blob') { print $cgi->a({-href => href(action=>"blob_plain", file_name=>$file_name, hash_base=>$hb), - -title => esc_html($name)}, esc_path($basename)); + -title => $name}, esc_path($basename)); } elsif (defined $type && $type eq 'tree') { print $cgi->a({-href => href(action=>"tree", file_name=>$file_name, hash_base=>$hb), - -title => esc_html($name)}, esc_path($basename)); + -title => $name}, esc_path($basename)); print " / "; } else { print esc_path($basename); @@ -3719,7 +3719,7 @@ sub git_commit { $formats_nav .= '(merge: ' . join(' ', map { - $cgi->a({-href => href(action=>"commitdiff", + $cgi->a({-href => href(action=>"commit", hash=>$_)}, esc_html(substr($_, 0, 7))); } @$parents ) . |