git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: hvoigt <hvoigt@hvoigt.net>
To: Paul Mackerras <paulus@samba.org>
Cc: git@vger.kernel.org
Subject: [PATCH v3] gitk: add menuitem for file checkout from this or parent commit
Date: Mon, 13 Dec 2010 22:46:14 +0100	[thread overview]
Message-ID: <20101213214613.GA2497@sandbox> (raw)
In-Reply-To: <20101211232324.GB3788@brick.ozlabs.ibm.com>

This is useful if a user wants to checkout a file from a certain
commit. This is equivalent to

  git checkout $commit $file

and

  git checkout $commit^ $file

Checkout of the first parent is useful in situations where you want to
checkout a file before some modification. In the patch view only the
modified filenames are shown. It is much quicker to select the commit
which modified the file and then choose the file from the patch view
compared to select the parent commit and then browse through the whole
tree to choose the file.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
---
On Sun, Dec 12, 2010 at 10:23:24AM +1100, Paul Mackerras wrote:
> Thanks for the patch.  However, the commit message doesn't mention
> that the patch also adds the 'checkout from parent' menu item or why
> that's a useful thing to have.  I like the 'checkout from this commit'
> thing but I don't immediately see why checking out from the first
> parent is so useful that we have to have it as a menu item, but
> checking out from other parents of a merge isn't.

Here is a new version of the patch with some added explanation why this
is useful in day to day use. I choose the first parent because in my
usecase I checkout single files by typically using non-merge commits.
Do you think there are usecases for second or other parent commits on
merge commits?

Cheers Heiko

 gitk |   24 ++++++++++++++++++------
 1 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/gitk b/gitk
index e82c6bf..e0dd94d 100755
--- a/gitk
+++ b/gitk
@@ -2522,6 +2522,8 @@ proc makewindow {} {
 	{mc "Highlight this only" command {flist_hl 1}}
 	{mc "External diff" command {external_diff}}
 	{mc "Blame parent commit" command {external_blame 1}}
+	{mc "Checkout from this commit" command {external_checkout}}
+	{mc "Checkout from parent commit" command {external_checkout 1}}
     }
     $flist_menu configure -tearoff 0
 
@@ -3558,6 +3560,20 @@ proc make_relative {f} {
 }
 
 proc external_blame {parent_idx {line {}}} {
+
+    set cmdline [list git gui blame]
+    if {$line ne {} && $line > 1} {
+	lappend cmdline "--line=$line"
+    }
+    run_command_on_selected_file $cmdline $parent_idx
+}
+
+proc external_checkout {{parent_idx 0}} {
+    set cmdline [list git checkout]
+    run_command_on_selected_file $cmdline $parent_idx
+}
+
+proc run_command_on_selected_file {cmdline parent_idx} {
     global flist_menu_file gitdir
     global nullid nullid2
     global parentlist selectedline currentid
@@ -3573,17 +3589,13 @@ proc external_blame {parent_idx {line {}}} {
 	return
     }
 
-    set cmdline [list git gui blame]
-    if {$line ne {} && $line > 1} {
-	lappend cmdline "--line=$line"
-    }
     set f [file join [file dirname $gitdir] $flist_menu_file]
-    # Unfortunately it seems git gui blame doesn't like
+    # Unfortunately some commands do not like
     # being given an absolute path...
     set f [make_relative $f]
     lappend cmdline $base_commit $f
     if {[catch {eval exec $cmdline &} err]} {
-	error_popup "[mc "git gui blame: command failed:"] $err"
+	error_popup "[mc "$cmdline: command failed:"] $err"
     }
 }
 
-- 
1.7.2.3.msysgit.0.1.g5a65e

      reply	other threads:[~2010-12-13 21:53 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-28 20:03 [GITK PATCH] gitk: add menuitem for file checkout from selected or parent commit Heiko Voigt
2010-09-28 21:09 ` Ævar Arnfjörð Bjarmason
2010-09-29 15:23   ` Heiko Voigt
2010-09-29 15:48     ` Ævar Arnfjörð Bjarmason
2010-09-30 18:29       ` [PATCH v2] gitk: add menuitem for file checkout from this " Heiko Voigt
2010-09-29 15:27 ` [GITK PATCH] gitk: add menuitem for file checkout from selected " Michele Ballabio
2010-12-11 23:23 ` Paul Mackerras
2010-12-13 21:46   ` hvoigt [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=20101213214613.GA2497@sandbox \
    --to=hvoigt@hvoigt.net \
    --cc=git@vger.kernel.org \
    --cc=paulus@samba.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).