From: Jakub Narebski <jnareb@gmail.com>
To: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Cc: git@vger.kernel.org, Petr Baudis <pasky@suse.cz>,
Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2 08/11] gitweb: display HEAD in heads list when detached
Date: Sat, 15 Nov 2008 23:31:15 +0100 [thread overview]
Message-ID: <200811152331.17294.jnareb@gmail.com> (raw)
In-Reply-To: <1226616555-24503-9-git-send-email-giuseppe.bilotta@gmail.com>
On Thu, 13 Nov 2008, Giuseppe Bilotta wrote:
First, I think that _at least_ the first two patches dealing with
detached should be squashed.
Second, not this way!
But I think that support for detached HEAD (I am not sure if it should
have to be explicitly turned on using some %feature, or reusing some
existing feature like 'remote_heads') is a very good idea. Especially
for git-instaweb.
> Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
> ---
> gitweb/gitweb.perl | 21 +++++++++++++++++++++
> 1 files changed, 21 insertions(+), 0 deletions(-)
>
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 09728cb..a168f6f 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -2672,6 +2672,27 @@ sub git_get_heads_list {
> my @refs = map { "refs/$_" } @class;
> my @headslist;
>
> + if (grep { $_ eq 'heads' } @class) {
First, IMHO layering violation. Resolving detached HEAD should not be
in my opinion left to git_get_heads_list, which is wrapped around
git-for-each-ref, which for some reason (contrary for example to
"git ls-remote ." or "git show-ref -h") doesn't show HEAD even if it
is detached. Probably misfeature / a bug in git-for-each-ref. I guess
that we should resolve detached HEAD in caller.
But I am not sure about this decision. Maybe instead of showing
detached HEAD (if it is detached) for 'heads', we should show it if
there is 'HEAD' in @class (well, @refs would have to be corrected,
too)?
> + my @x = (git_cmd(), 'branch');
> + my @ret = split("\n", qx(@x));
^^^^^^^- bit strange
Especially compared to almost everywhere else using open ... "-|"
> + if (grep { /^\* \(no branch\)$/ } @ret) { ;
^
WTF? -------------------------|
Second, if we go the route of manually resolving detached HEAD,
instead of adding [-h|--head] (from git-show-ref) option equivalent
to git-for-each-ref, which would work only for detached HEAD (fixing
kind of a bug), this is *not* the way to do it.
A. It should be done using encapsulation, adding is_HEAD_detached() or
git_is_head_detached() subroutine (squashing the next patch), or
simply using !defined($current_branch), where $current_branch would
be set using git_get_symbolic_ref('HEAD') or something.
B. Using porcelain, especially end-user porcelain such as git-branch,
which can change its output format (because they are porcelain). Use
equivalent plumbing, be if git-symbolic-ref ("git symbolic-ref -q HEAD"
to be more exact) to get current branch name[1], or just simply do
that in Perl: check if it is symlink, or if it starts with "ref: "
if it is regular file (IIRC HEAD, even detached HEAD, cannot get
packed into .git/packed-refs and deleted... at least I think so).
[1] This means that we have better way of detecting (and showing)
which branch is current one than comparing sha1 with resolved HEAD.
($head_hash).
> + my %ref_item;
> + @x = (git_cmd(), 'log', '-1', '--pretty=format:%H%n%ct%n%s');
> + my ($hash, $epoch, $title) = split("\n", qx(@x), 3);
Errr... if we don't fix git-for-each-ref, and go that route, why not
simply use parse_commit subroutine, and extract relevant info from
there, instead of handcrafting git-log (why not git-show?) call?
You get more info than needed, but I think the cost of getting it is
almost the same, and you can reuse existing code.
And if we go --pretty=format:<...> or --pretty=tformat:<...> route for
git-log, git-rev-list or git-show, wouldn't it be possible to generate
the same output format as git-for-each-ref below?
> +
> + $ref_item{'class'} = 'head';
> + $ref_item{'name'} = 'HEAD';
> + $ref_item{'id'} = $hash;
> + $ref_item{'title'} = $title || '(no commit message)';
> + if ($ref_item{'epoch'} = $epoch) {
> + $ref_item{'age'} = age_string(time - $ref_item{'epoch'});
Hmmm...
> + } else {
> + $ref_item{'age'} = "unknown";
> + }
> + push @headslist, \%ref_item;
> + }
> + }
> +
> open my $fd, '-|', git_cmd(), 'for-each-ref',
> ($limit ? '--count='.($limit+1) : ()), '--sort=-committerdate',
> '--format=%(objectname) %(refname) %(subject)%00%(committer)',
> --
> 1.5.6.5
>
>
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2008-11-15 22:34 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-13 22:49 [PATCH v2 00/11] gitweb: display remote heads Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 01/11] gitweb: introduce remote_heads feature Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 02/11] gitweb: git_get_heads_list accepts an optional list of refs Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 03/11] gitweb: separate heads and remotes list in summary view Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 04/11] gitweb: optional custom name for refs in git_heads_body Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 05/11] gitweb: git_split_heads_body function Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 06/11] gitweb: use CSS to style split head lists Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 07/11] gitweb: add 'remotes' action Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 08/11] gitweb: display HEAD in heads list when detached Giuseppe Bilotta
2008-11-13 22:49 ` [PATCH v2 09/11] gitweb: git_is_head_detached() function Giuseppe Bilotta
2008-11-13 23:54 ` [PATCH v2 10/11] gitweb: add HEAD to list of shortlog refs if detached Giuseppe Bilotta
2008-11-13 23:54 ` [PATCH v2 11/11] gitweb: CSS style and refs mark for detached HEAD Giuseppe Bilotta
2008-11-16 0:08 ` Jakub Narebski
2008-11-15 23:59 ` [PATCH v2 10/11] gitweb: add HEAD to list of shortlog refs if detached Jakub Narebski
2008-11-14 6:40 ` [PATCH v2 09/11] gitweb: git_is_head_detached() function Junio C Hamano
2008-11-14 8:52 ` Giuseppe Bilotta
2008-11-14 17:44 ` Junio C Hamano
2008-11-14 21:17 ` Nanako Shiraishi
2008-11-15 23:43 ` Jakub Narebski
2008-11-15 22:31 ` Jakub Narebski [this message]
2008-11-15 12:16 ` [PATCH v2 07/11] gitweb: add 'remotes' action Jakub Narebski
2008-11-15 12:32 ` Giuseppe Bilotta
2008-11-16 0:29 ` Jakub Narebski
2008-11-16 2:47 ` Giuseppe Bilotta
2008-11-15 0:20 ` [PATCH v2 06/11] gitweb: use CSS to style split head lists Jakub Narebski
2008-11-14 23:59 ` [PATCH v2 05/11] gitweb: git_split_heads_body function Jakub Narebski
2008-11-15 10:04 ` Giuseppe Bilotta
2008-11-16 1:13 ` Jakub Narebski
2008-11-16 2:53 ` Giuseppe Bilotta
2008-11-15 12:14 ` Junio C Hamano
2008-11-15 12:25 ` Giuseppe Bilotta
2008-11-16 12:12 ` Jakub Narebski
2008-11-16 12:26 ` Giuseppe Bilotta
2008-11-16 14:21 ` Jakub Narebski
2008-11-16 15:28 ` Giuseppe Bilotta
2008-11-14 23:32 ` [PATCH v2 04/11] gitweb: optional custom name for refs in git_heads_body Jakub Narebski
2008-11-15 10:11 ` Giuseppe Bilotta
2008-11-14 20:04 ` [PATCH v2 03/11] gitweb: separate heads and remotes list in summary view Jakub Narebski
2008-11-14 22:01 ` Giuseppe Bilotta
2008-11-14 18:48 ` [PATCH v2 02/11] gitweb: git_get_heads_list accepts an optional list of refs Jakub Narebski
2008-11-14 21:52 ` Giuseppe Bilotta
2008-11-14 18:15 ` [PATCH v2 01/11] gitweb: introduce remote_heads feature Jakub Narebski
2008-11-14 21:44 ` Giuseppe Bilotta
2008-11-14 14:33 ` [PATCH v2 00/11] gitweb: display remote heads Jakub Narebski
2008-11-14 15:25 ` Sverre Rabbelier
2008-11-14 18:37 ` Giuseppe Bilotta
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=200811152331.17294.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=giuseppe.bilotta@gmail.com \
--cc=pasky@suse.cz \
/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).