threads / patch / 20482

patchgitk: parse arbitrary commit-ish in SHA1 field

Subject: [PATCH] gitk: parse arbitrary commit-ish in SHA1 field

## tl;dr

4 messages between Aug 8, 2009 and Aug 13, 2009. Diffs are folded; open one to read it.

replies: 3people: 3as markdown or json

Thomas Rast· Aug 8, 2009, 14:56 UTC · lore

We only accepted either SHA1s or heads/tags that have been read. This meant the user could not, e.g., enter HEAD to go back to the current commit.

Add code to call out to git-rev-parse with the string entered if all other methods of interpreting it failed. The error paths change slighly, because we now know from the rev-parse invocation whether the expression was valid at all. The previous "unknown" path is now only triggered if the revision does exist, but is not in the current view display.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---

Of course, *ideally* we'd resort to *changing* the current view so that it also lists the requested commit. But my Tk-fu is currently not up to that task.

 gitk |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
Show changes to gitk +6 −1
diff --git a/gitk b/gitk
index 4604c83..4b27886 100755
--- a/gitk
+++ b/gitk
@@ -7906,6 +7906,11 @@ proc gotocommit {} {
 		}
 		set id [lindex $matches 0]
 	    }
+	} else {
+	    if {[catch {set id [exec git rev-parse $sha1string]}]} {
+		error_popup [mc "Revision %s is not known" $sha1string]
+		return
+	    }
 	}
     }
     if {[commitinview $id $curview]} {
@@ -7915,7 +7920,7 @@ proc gotocommit {} {
     if {[regexp {^[0-9a-fA-F]{4,}$} $sha1string]} {
 	set msg [mc "SHA1 id %s is not known" $sha1string]
     } else {
-	set msg [mc "Tag/Head %s is not known" $sha1string]
+	set msg [mc "Revision %s is not in the current view" $sha1string]
     }
     error_popup $msg
 }
-- 
1.6.4.199.g24c3
Junio C Hamano· Aug 11, 2009, 05:13 UTC · re: Thomas Rast · lore

Re: [PATCH] gitk: parse arbitrary commit-ish in SHA1 field

Thomas Rast <trast@student.ethz.ch> writes:
> +	} else {
> +	    if {[catch {set id [exec git rev-parse $sha1string]}]} {

"--verify", or "--no-flags --revs-only"? Examples of possible bad input strings that you may otherwise not catch are:

	master..
        --merge -- a
Thomas Rast· Aug 13, 2009, 07:25 UTC · re: Junio C Hamano · lore

[PATCH v2] gitk: parse arbitrary commit-ish in SHA1 field

We only accepted either SHA1s or heads/tags that have been read. This meant the user could not, e.g., enter HEAD to go back to the current commit.

Add code to call out to git rev-parse --verify with the string entered if all other methods of interpreting it failed. (git-rev-parse alone is not enough as we really want a single revision.)

The error paths change slighly, because we now know from the rev-parse invocation whether the expression was valid at all. The previous "unknown" path is now only triggered if the revision does exist, but is not in the current view display.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
Junio C Hamano wrote:
> > +     } else {
> > +         if {[catch {set id [exec git rev-parse $sha1string]}]} {
> 
> "--verify", or "--no-flags --revs-only"?
Indeed, thanks.
 gitk |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
Show changes to gitk +6 −1
diff --git a/gitk b/gitk
index 4604c83..e50b666 100755
--- a/gitk
+++ b/gitk
@@ -7906,6 +7906,11 @@ proc gotocommit {} {
 		}
 		set id [lindex $matches 0]
 	    }
+	} else {
+	    if {[catch {set id [exec git rev-parse --verify $sha1string]}]} {
+		error_popup [mc "Revision %s is not known" $sha1string]
+		return
+	    }
 	}
     }
     if {[commitinview $id $curview]} {
@@ -7915,7 +7920,7 @@ proc gotocommit {} {
     if {[regexp {^[0-9a-fA-F]{4,}$} $sha1string]} {
 	set msg [mc "SHA1 id %s is not known" $sha1string]
     } else {
-	set msg [mc "Tag/Head %s is not known" $sha1string]
+	set msg [mc "Revision %s is not in the current view" $sha1string]
     }
     error_popup $msg
 }
-- 
1.6.4.269.g0449d
Paul Mackerras· Aug 13, 2009, 11:54 UTC · re: Thomas Rast · lore

Re: [PATCH v2] gitk: parse arbitrary commit-ish in SHA1 field

Thomas Rast writes:
Show 14 quoted lines
> We only accepted either SHA1s or heads/tags that have been read.  This
> meant the user could not, e.g., enter HEAD to go back to the current
> commit.
> 
> Add code to call out to git rev-parse --verify with the string entered
> if all other methods of interpreting it failed.  (git-rev-parse alone
> is not enough as we really want a single revision.)
> 
> The error paths change slighly, because we now know from the rev-parse
> invocation whether the expression was valid at all.  The previous
> "unknown" path is now only triggered if the revision does exist, but
> is not in the current view display.
> 
> Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Thanks, applied.
Paul.

← back to recent threads