cd1464083c
Add two subroutines: git_get_heads_list and git_get_refs_list, which fill out needed parts of refs info (heads and tags respectively) info using single call to git-for-each-ref, instead of using git-peek-remote to get list of references and using parse_ref for each ref to get ref info, which in turn uses at least one call of git command. Replace call to git_get_refs_list in git_summary by call to git_get_references, git_get_heads_list and git_get_tags_list (simplifying this subroutine a bit). Use git_get_heads_list in git_heads and git_get_tags_list in git_tags. Modify git_tags_body slightly to accept output from git_get_tags_list. Remove no longer used, and a bit hackish, git_get_refs_list. parse_ref is no longer used, but is left for now. Generating "summary" and "tags" views should be much faster for projects which have large number of tags. CHANGES IN OUTPUT: Before, if ref in refs/tags was tag pointing to commit we used committer epoch as epoch for ref, and used tagger epoch as epoch only for tag pointing to object of other type. If ref in refs/tags was commit, we used committer epoch as epoch for ref (see parse_ref; we sorted in gitweb by 'epoch' field). Currently we use committer epoch for refs pointing to commit objects, and tagger epoch for refs pointing to tag object, even if tag points to commit. Simple ab benchmark before and after this patch for my git.git repository (git/jnareb-git.git) with some heads and tags added as compared to git.git repository, shows around 2.4-3.0 times speedup for "summary" and "tags" views: summary 3134 +/- 24.2 ms --> 1081 +/- 30.2 ms tags 2886 +/- 18.9 ms --> 1196 +/- 15.6 ms Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net> |
||
---|---|---|
.. | ||
test | ||
git-favicon.png | ||
git-logo.png | ||
gitweb.css | ||
gitweb.perl | ||
README |
GIT web Interface ================= The one working on: http://www.kernel.org/git/ From the git version 1.4.0 gitweb is bundled with git. How to configure gitweb for your local system --------------------------------------------- You can specify the following configuration variables when building GIT: * GITWEB_SITENAME Shown in the title of all generated pages, defaults to the servers name. * GITWEB_PROJECTROOT The root directory for all projects shown by gitweb. * GITWEB_LIST points to a directory to scan for projects (defaults to project root) or to a file for explicit listing of projects. * GITWEB_HOMETEXT points to an .html file which is included on the gitweb project overview page. * GITWEB_CSS Points to the location where you put gitweb.css on your web server. * GITWEB_LOGO Points to the location where you put git-logo.png on your web server. * GITWEB_CONFIG This file will be loaded using 'require' and can be used to override any of the options above as well as some other options - see the top of 'gitweb.cgi' for their full list and description. If the environment $GITWEB_CONFIG is set when gitweb.cgi is executed the file in the environment variable will be loaded instead of the file specified when gitweb.cgi was created. Runtime gitweb configuration ---------------------------- You can adjust gitweb behaviour using the file specified in `GITWEB_CONFIG` (defaults to 'gitweb_config.perl' in the same directory as the CGI). See the top of 'gitweb.cgi' for the list of variables and some description. The most notable thing that is not configurable at compile time are the optional features, stored in the '%features' variable. You can find further description on how to reconfigure the default features setting in your `GITWEB_CONFIG` or per-project in `project.git/config` inside 'gitweb.cgi'. Webserver configuration ----------------------- If you want to have one URL for both gitweb and your http:// repositories, you can configure apache like this: <VirtualHost www:80> ServerName git.domain.org DocumentRoot /pub/git RewriteEngine on RewriteRule ^/(.*\.git/(?!/?(info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT] SetEnv GITWEB_CONFIG /etc/gitweb.conf </VirtualHost> The above configuration expects your public repositories to live under /pub/git and will serve them as http://git.domain.org/dir-under-pub-git, both as cloneable GIT URL and as browseable gitweb interface. If you then start your git-daemon with --base-path=/pub/git --export-all then you can even use the git:// URL with exactly the same path. Setting the environment variable GITWEB_CONFIG will tell gitweb to use the named file (i.e. in this example /etc/gitweb.conf) as a configuration for gitweb. Perl variables defined in here will override the defaults given at the head of the gitweb.perl (or gitweb.cgi). Look at the comments in that file for information on which variables and what they mean. Originally written by: Kay Sievers <kay.sievers@vrfy.org> Any comment/question/concern to: Git mailing list <git@vger.kernel.org>