From: Stefan Haller <stefan@haller-berlin.de>
To: paulus@ozlabs.org
Cc: git@vger.kernel.org
Subject: Re: [PATCH v2] gitk: Add options --select-file and --select-line
Date: Sat, 19 Dec 2020 11:21:16 +0100 [thread overview]
Message-ID: <bd940f73-ca2f-fe21-ea0a-fcd5f40af683@haller-berlin.de> (raw)
In-Reply-To: <6d6068cd-6f0d-cb1e-4a4b-ba1a2a562d5e@haller-berlin.de>
On 01.11.20 10:24, Stefan Haller wrote:
> On 15.10.20 9:31, Stefan Haller wrote:
>> These can be used in combination with --select-commit to jump to a given
>> line in a patch on startup. (They don't have any effect when
>> --select-commit is not used.)
>>
>> This is useful for the "Show History Context" command in Git Gui's blame
>> window, which currently only jumps to the right commit in gitk, but
>> doesn't select the line that the context menu was opened on.
>>
>> Also, these options allow for powerful editor integration; they make it
>> possible to jump into gitk right from a text editor. For example, here's
>> a small ruby script that takes a file path and a line number and opens
>> gitk with the commit selected that last modified that line. This can
>> easily be mapped to a key in vim or other editors.
>
> Just a gentle ping. Any thoughts?
>
> I have been running with this patch for a few years now, and I use the
> functionality daily. I'd love to get this applied so that I don't have
> to maintain this patch locally. Also, my co-workers are jealous every
> time they see what I can do with this. :-)
>
> Thanks, Stefan.
Another friendly ping; it's been two months since I submitted the patch.
Is there anything else I can do to get this included?
Thanks, Stefan.
>>
>> #!/usr/bin/env ruby
>>
>> if ARGV.length != 2
>> puts "Usage: #{$0} <file> <line>"
>> exit 1
>> end
>>
>> file, line = ARGV
>> blame_output = `git blame -p -L#{line},+1 "#{file}"`
>> exit 1 if $?.exitstatus != 0
>>
>> blame_output_lines = blame_output.split("\n")
>> commit, line = blame_output_lines[0].split
>>
>> file = blame_output_lines.grep(/^filename /)[0][9..-1]
>> date = blame_output_lines.grep(/^committer-time /)[0][15..-1]
>> two_weeks_later = date.to_i + 60 * 60 * 24 * 7 * 2
>>
>> system "gitk --before='#{two_weeks_later}' \
>> --select-commit=#{commit} \
>> --select-file='#{file}' \
>> --select-line=#{line} &"
>>
>> Signed-off-by: Stefan Haller <stefan@haller-berlin.de>
>> ---
>> Second version: added Signed-off-by. No other changes.
>>
>> gitk | 31 ++++++++++++++++++++++++++++---
>> 1 file changed, 28 insertions(+), 3 deletions(-)
>>
>> diff --git a/gitk b/gitk
>> index 23d9dd1..cf70313 100755
>> --- a/gitk
>> +++ b/gitk
>> @@ -475,12 +475,17 @@ proc stop_rev_list {view} {
>> }
>>
>> proc reset_pending_select {selid} {
>> - global pending_select mainheadid selectheadid
>> + global pending_select pending_select_file pending_select_line
>> + global mainheadid selectheadid select_file select_line
>>
>> if {$selid ne {}} {
>> set pending_select $selid
>> } elseif {$selectheadid ne {}} {
>> set pending_select $selectheadid
>> + if {$select_file ne {} && $select_line ne {}} {
>> + set pending_select_file $select_file
>> + set pending_select_line $select_line
>> + }
>> } else {
>> set pending_select $mainheadid
>> }
>> @@ -1612,6 +1617,16 @@ proc getcommitlines {fd inst view updating} {
>> return 2
>> }
>>
>> +proc select_pending_line {} {
>> + global pending_select pending_select_file pending_select_line
>> +
>> + set desired_loc [expr {[info exists pending_select_file]
>> + ? [list $pending_select_file $pending_select_line]
>> + : {}}]
>> +
>> + selectline [rowofcommit $pending_select] 1 $desired_loc
>> +}
>> +
>> proc chewcommits {} {
>> global curview hlview viewcomplete
>> global pending_select
>> @@ -1626,7 +1641,7 @@ proc chewcommits {} {
>> reset_pending_select {}
>>
>> if {[commitinview $pending_select $curview]} {
>> - selectline [rowofcommit $pending_select] 1
>> + select_pending_line
>> } else {
>> set row [first_real_row]
>> selectline $row 1
>> @@ -5244,7 +5259,7 @@ proc layoutmore {} {
>> if {[info exists pending_select] &&
>> [commitinview $pending_select $curview]} {
>> update
>> - selectline [rowofcommit $pending_select] 1
>> + select_pending_line
>> }
>> drawvisible
>> }
>> @@ -7325,6 +7340,8 @@ proc selectline {l isnew {desired_loc {}} {switch_to_patch 0}} {
>> global vinlinediff
>>
>> unset -nocomplain pending_select
>> + unset -nocomplain pending_select_file
>> + unset -nocomplain pending_select_line
>> $canv delete hover
>> normalline
>> unsel_reflist
>> @@ -12507,6 +12524,8 @@ if {[catch {set gitdir [exec git rev-parse --git-dir]}]} {
>>
>> set selecthead {}
>> set selectheadid {}
>> +set select_file {}
>> +set select_line {}
>>
>> set revtreeargs {}
>> set cmdline_files {}
>> @@ -12522,6 +12541,12 @@ foreach arg $argv {
>> "--select-commit=*" {
>> set selecthead [string range $arg 16 end]
>> }
>> + "--select-file=*" {
>> + set select_file [string range $arg 14 end]
>> + }
>> + "--select-line=*" {
>> + set select_line [string range $arg 14 end]
>> + }
>> "--argscmd=*" {
>> set revtreeargscmd [string range $arg 10 end]
>> }
>> --
>> 2.29.0.rc1.13.g3b7fca9674
>>
prev parent reply other threads:[~2020-12-19 10:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-14 14:55 [PATCH] gitk: Add options --select-file and --select-line Stefan Haller
2020-10-14 22:34 ` Eric Sunshine
2020-10-15 7:31 ` [PATCH v2] " Stefan Haller
2020-11-01 9:24 ` Stefan Haller
2020-12-19 10:21 ` Stefan Haller [this message]
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bd940f73-ca2f-fe21-ea0a-fcd5f40af683@haller-berlin.de \
--to=stefan@haller-berlin.de \
--cc=git@vger.kernel.org \
--cc=paulus@ozlabs.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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).