git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Stefan Haller <stefan@haller-berlin.de>
To: paulus@ozlabs.org
Cc: git@vger.kernel.org, sunshine@sunshineco.com
Subject: Re: [PATCH v2] gitk: Add options --select-file and --select-line
Date: Sun, 1 Nov 2020 10:24:37 +0100	[thread overview]
Message-ID: <6d6068cd-6f0d-cb1e-4a4b-ba1a2a562d5e@haller-berlin.de> (raw)
In-Reply-To: <20201015073138.50899-1-stefan@haller-berlin.de>

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.

> 
>     #!/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
> 

  reply	other threads:[~2020-11-01  9:24 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 [this message]
2020-12-19 10:21       ` Stefan Haller

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=6d6068cd-6f0d-cb1e-4a4b-ba1a2a562d5e@haller-berlin.de \
    --to=stefan@haller-berlin.de \
    --cc=git@vger.kernel.org \
    --cc=paulus@ozlabs.org \
    --cc=sunshine@sunshineco.com \
    /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).