git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jakub Narebski <jnareb@gmail.com>
To: Kacper Kornet <draenog@pld-linux.org>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] gitweb: Option to omit column with time of the last change
Date: Mon, 16 Apr 2012 22:06:49 +0200	[thread overview]
Message-ID: <201204162206.50631.jnareb@gmail.com> (raw)
In-Reply-To: <20120416101242.GK17753@camk.edu.pl>

On Mon, 16 Apr 2012, Kacper Kornet wrote:
> On Sat, Apr 14, 2012 at 03:16:01PM +0200, Jakub Narebski wrote:
>> On Wed, 4 Apr 2012, Kacper Kornet wrote:
>>> On Wed, Apr 04, 2012 at 04:31:42PM +0200, Jakub Narebski wrote:
>>>> On Wed, 4 April 2012, Kacper Kornet wrote:
>>>>> On Wed, Apr 04, 2012 at 01:12:01AM +0200, Jakub Narebski wrote:
>>>>>> On Tue, 3 Apr 2012, Kacper Kornet wrote:
[...] 
>>>> But the fact that it also saves a fork (a git command call) per repository
>>>> reminds me of something which I missed in first round of review, namely
>>>> that generating 'age' and 'age_string' fields serve also as a check if
>>>> repository really exist.
>>>> 
>>>> So either we document this fact, or use some other way to verify that
>>>> git repository is valid.
>>> 
>>> I think that git_project_list_body always works with the list returned
>>> by git_get_projects_list. And git_get_projects_list validates if the
>>> path is a git repository. So it should not be a problem. Please correct
>>> me, if I am wrong.
> 
>> If $projects_list points to plain file, git_get_projects_list() just
>> gets list of projects (and project owners) from $projects_list file
>> by reading and parsing this file.  No verification that repository
>> exists is done.
> 
> I think that even in this case check_export_ok is called. But there is
> still the problem you have mentioned below.

True, somehow I missed the fact that check_export_ok() is called to
check if it looks like repository and if it is to be exported in both
cases ($projects_list a directory or a file).

>> If $projects_list points to directory (which is the default), then
>> git_get_projects_list() scans starting from $projects_list directory
>> for somtehing that _looks like_ git repository with check_head_link()
>> via check_export_ok().  But you still can encounter something that
>> looks like git repository (has "HEAD" file in it), but isn't.
>> 
>> So we would probably want to have said variable or set of variables
>> describe three states:
> 
>> * find date of last change in repository with git-for-each-ref called
>>   by git_get_last_activity(), which as a side effect verifies that
>>   repository actually exist.  
>> 
>>   git_get_last_activity() returns empty list in list context if repo
>>   does not exist, hence
>> 
>>   	my (@activity) = git_get_last_activity($pr->{'path'});
>>   	unless (@activity) {
>>   		next PROJECT;
>>   	}
>> 
>> * verify that repository exists with "git rev-parse --git-dir" or
>>   "git rev-parse --verify HEAD", or "git symbolic-ref HEAD", redirecting
>>   stderr to /dev/null (we would probably want to save output of the
>>   latter two somewhere to use it later).
>> 
>>   That saves I/O, but not fork.

Actually if you look at the footer of projects list page with 'timed'
feature enable you see that for N projects on list, gitweb uses 2*N+1
git commands.  The "+1" part is from "git version", the "2*N" are from
git-for-each-ref to get last activity (and verify repository as a
side-effect)...

...and from call to "git config" to get owner (unconditional check for
`gitweb.owner` override), description (if '.git/description' file got
deleted), if applicable category (file then config), if applicable ctags
(file(s) then config).

So we can rely on "git config" being called, no need for separate
verification.  My mistake.  (Though it might be hard to use this fact.)


Well, with proposed option to remove 'owner' field we would have sometimes
to verify repository with an extra git command...

>> * don't verify that repository exists.
> 
>> Though perhaps the last possibility isn't a good idea, so it would be
>> left two-state, as in your patch. 
> 
> My tests show that forks are also a bottleneck in my setup.

What do you mean by "my tests" here?  Is it benchmark (perhaps just using
'timed' feature) with and without custom change removing fork(s)?  Or did
you used profiler (e.g. wondefull Devel::NYTProf) for that?

>                                                             On the other 
> hand I think that I can trust that my projects.list contains only valid
> repositories. So I would prefer to have a don't verify option. Or there
> is a possibility to write perl function with the same functionality as
> is_git_directory() from setup.c and use it to verify if the directory is a
> valid git repo.

Well, we can add those checks to check_export_ok()... well to function
it would call.

is_git_repository from setup.c checks that "/objects" and "/refs"
have executable permissions, and that "/HEAD" is valid via validate_headref
which does slightly more than (now slightly misnamed) check_head_link()
from gitweb...

...or that DB_ENVIRONMENT i.e. GIT_OBJECT_DIRECTORY environment variable
is set, and path that it points to has executable permissions.  I don't
think we have to worry about this for gitweb.


I'll try to come up with a patch to gitweb that improves repository
verification, and perhaps a patch that uses the fact that "git config"
succeeded to verify repository.

-- 
Jakub Narębski

  reply	other threads:[~2012-04-16 20:06 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-03 13:27 [PATCH] gitweb: Option to omit column with time of the last change Kacper Kornet
2012-04-03 23:12 ` Jakub Narebski
2012-04-04  6:39   ` Kacper Kornet
2012-04-04 14:31     ` Jakub Narebski
2012-04-04 16:22       ` Kacper Kornet
2012-04-14 13:16         ` Jakub Narebski
2012-04-16 10:12           ` Kacper Kornet
2012-04-16 20:06             ` Jakub Narebski [this message]
2012-04-16 21:39               ` Kacper Kornet
2012-04-17 23:36                 ` Jakub Narebski
2012-04-19 16:07                   ` [PATCH] gitweb: Improve repository verification Jakub Narebski
2012-04-19 18:30                     ` Junio C Hamano
2012-04-19 19:46                       ` Jakub Narebski
2012-04-21 11:28                         ` Jakub Narebski
2012-04-24 17:39                     ` [PATCH 1/2] gitweb: Option to omit column with time of the last change Kacper Kornet
2012-04-24 17:41                     ` [PATCH 2/2] gitweb: Option to not display information about owner Kacper Kornet
2012-04-26  4:39                       ` Junio C Hamano
2012-04-26 15:07                         ` Kacper Kornet
2012-04-26 15:53                           ` Junio C Hamano
2012-04-26 16:35                             ` Kacper Kornet
2012-04-26 16:45                               ` [PATCH v2 " Kacper Kornet
2012-04-24 17:36                   ` [PATCH] gitweb: Option to omit column with time of the last change Kacper Kornet
2012-04-04 17:14       ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201204162206.50631.jnareb@gmail.com \
    --to=jnareb@gmail.com \
    --cc=draenog@pld-linux.org \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).