From: Paul Mackerras <paulus@samba.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: gitk: Turn short SHA1 names into links too
Date: Sat, 27 Sep 2008 13:16:03 +1000 [thread overview]
Message-ID: <18653.42355.668715.736749@cargo.ozlabs.ibm.com> (raw)
In-Reply-To: <alpine.LFD.1.10.0809251657080.3265@nehalem.linux-foundation.org>
Linus Torvalds writes:
> And the thing I wanted to work was to have the abbreviated SHA1's that
> have started to get more common in the kernel commit logs work as links in
> gitk too, just the way a full 40-character SHA1 link works.
Fair enough...
> This patch does seem to work, but it's also buggy in exactly the same ways
> the regular 40-character links are buggy, and while I find those bugs
> very irritating _too_, I can't cut-and-paste myself to a solution for
> that.
>
> The pre-existing bugs that this shares with the long links are:
>
> - since gitk started doing incremental showing of the graph, the whole
> "check if it exists" doesn't work right if the target hasn't been
> loaded yet. And when it _does_ end up being loaded one second later,
> nothing re-does the scanning.
Actually there *is* logic in gitk to remember that certain SHA1 ids
are "interesting" and do something when we come across them later. So
when we see a string of 40 hex digits in a commit message and we don't
recognize that as an ID that we know about, we remember it as an
interesting ID, with the action being to turn the string into a link.
So when the ID turns up later, the string in the commit message
becomes a link.
However, that currently only works for the full 40-character IDs, not
for abbreviations, because the way we remember that the ID is
interesting is with an associative array (i.e. a hash). What we need
to do is use only the first 6 characters and then have each array
element be a list of (ID, action) pairs, where the ID can now be a
partial ID.
I'd hack it up now except that I just got home from the US and I need
to sleep...
> - slightly related to the above: when we _do_ find a link, we create it
> to be a link to line so-and-so, but since we now don't just
> incrementally parse the commits that come in, but gitk _also_ actually
> reflows the commits to be in topological order, the link we just
> created may actually no longer point to the right line by the time the
> link is then clicked on, so clicking on a link can actually take you to
> the wrong commit!
Yep, guilty as charged. We need to defer the ID -> line number
translation until the user actually clicks on the link.
> I suspect that the correct fix is to always do the link, whether we
> actually see it or not, and not make it point to a line number, but simply
> keep it as a SHA1, and then do the equivalent of "gotocommit" when
> clicking it. But I don't know how links workin tcl/tk, so I'm not going to
> be able to do that.
We need this change in setlink (caution, completely untested):
- $ctext tag bind $lk <1> [list selectline [rowofcommit $id] 1]
+ $ctext tag bind $lk <1> [list selbyid $id]
> In the meantime, this patch introduces no new bugs, and the workarounds
> are the same for abbreviated SHA1's as they are for the full ones.
>
> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
> ---
>
> I'm sure it could have been done better. In particular, I think the
> "short->long" translation could/should probably be a function of its own.
> But I'm so uncomfortable with wish programming that I'm not starting to
> write any new functions..
>
> Comments? Paul?
The main thing is to change how we handle the commitinterest array so
that we can use it to match on short IDs as well as full 40-char ones.
And yes, we should pull out the short->long translation into its own
function.
Paul.
next prev parent reply other threads:[~2008-09-27 3:19 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-26 0:11 gitk: Turn short SHA1 names into links too Linus Torvalds
2008-09-26 0:37 ` Linus Torvalds
2008-09-26 6:32 ` Wincent Colaiuta
2008-09-26 7:26 ` Andreas Ericsson
2008-09-26 7:29 ` Wincent Colaiuta
2008-09-26 8:21 ` Mikael Magnusson
2008-09-26 12:15 ` Brad King
2008-09-26 10:41 ` Marco Costalba
2008-09-27 3:18 ` Paul Mackerras
2008-09-27 3:16 ` Paul Mackerras [this message]
2008-10-20 23:20 ` Paul Mackerras
2008-10-21 19:09 ` 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=18653.42355.668715.736749@cargo.ozlabs.ibm.com \
--to=paulus@samba.org \
--cc=git@vger.kernel.org \
--cc=torvalds@linux-foundation.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).