Skip to contentSkip to conversation

gitk: add option to perform 'git fetch' command

PATCH In review Vladimir Chigarev via GitGitGadget 3 participants 3 messages Jan 22, 2021 – Nov 5, 2021 1 message not in the archive

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 gitk: add option to perform 'git fetch' command

From: Vladimir Chigarev <[email protected]>

There wasn't ability to perform 'git fetch' from gitk tool. Add 'Fetch' option to 'File' menu.
Bind it to 'F7' key.

---
gitk: add option to perform 'git fetch' command

There wasn't ability to perform 'git fetch' from gitk tool. Add 'Fetch' option to 'File' menu. Bind it to 'F7' key.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-872%2Fchiga17%2Fgitk-fetch-option-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-872/chiga17/gitk-fetch-option-v1
Pull-Request: https://github.com/git/git/pull/872

 gitk-git/gitk | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)
gitk-git/gitk +31 -0
index 23d9dd1fe0d..1756385886f 100755
@@ -499,6 +499,34 @@ proc getcommits {selid} {
     }
 }
 
+proc fetch {} {
+    global bgcolor NS fetch_output
+
+    set fetch_output {}
+    if {[catch {exec sh -c "git fetch -v 2>&1"} fetch_output]} {
+    }
+
+    set w .about
+    if {[winfo exists $w]} {
+	raise $w
+	return
+    }
+    ttk_toplevel $w
+    wm title $w [mc "Fetch"]
+    make_transient $w .
+    message $w.m -text [mc " $fetch_output "] \
+	    -justify left -aspect 600 -border 2 -bg $bgcolor -relief groove
+    pack $w.m -side top -fill x -padx 2 -pady 2
+    ${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
+    pack $w.ok -side bottom
+    bind $w <Visibility> "focus $w.ok"
+    bind $w <Key-Escape> "destroy $w"
+    bind $w <Key-Return> "destroy $w"
+    tk::PlaceWindow $w widget .
+
+    reloadcommits
+}
+
 proc updatecommits {} {
     global curview vcanopt vorigargs vfilelimit viewinstances
     global viewactive viewcomplete tclencoding
@@ -2089,6 +2117,7 @@ proc makewindow {} {
         mc "&File" cascade {
             {mc "&Update" command updatecommits -accelerator F5}
             {mc "&Reload" command reloadcommits -accelerator Shift-F5}
+            {mc "&Fetch" command fetch -accelerator F7}
             {mc "Reread re&ferences" command rereadrefs}
             {mc "&List references" command showrefs -accelerator F2}
             {xx "" separator}
@@ -2609,6 +2638,7 @@ proc makewindow {} {
     bindkey f nextfile
     bind . <F5> updatecommits
     bindmodfunctionkey Shift 5 reloadcommits
+    bind . <F7> fetch
     bind . <F2> showrefs
     bindmodfunctionkey Shift 4 {newview 0}
     bind . <F4> edit_or_newview
@@ -3125,6 +3155,7 @@ proc keys {} {
 [mc "<%s-KP->	Decrease font size" $M1T]
 [mc "<%s-minus>	Decrease font size" $M1T]
 [mc "<F5>		Update"]
+[mc "<F7>		Fetch"]
 " \
             -justify left -bg $bgcolor -border 2 -relief groove
     pack $w.m -side top -fill both -padx 2 -pady 2

base-commit: 72c4083ddf91b489b7b7b812df67ee8842177d98

Signature · 1 line
gitgitgadget
#1 lore raw

[Cc:ing Paul, the gitk maintainer]

Paul, this patch has been stuck on the Git mailing list for a few months. Could I ask you whether there is a chance that you could review it?

Thanks,
Johannes

Quoted 89 lines · Vladimir Chigarev via GitGitGadget

From: Vladimir Chigarev <[email protected]>

There wasn't ability to perform 'git fetch' from gitk tool. Add 'Fetch' option to 'File' menu.
Bind it to 'F7' key.

---
gitk: add option to perform 'git fetch' command

There wasn't ability to perform 'git fetch' from gitk tool. Add 'Fetch' option to 'File' menu. Bind it to 'F7' key.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-872%2Fchiga17%2Fgitk-fetch-option-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-872/chiga17/gitk-fetch-option-v1
Pull-Request: https://github.com/git/git/pull/872

 gitk-git/gitk | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)
gitk-git/gitk +31 -0
index 23d9dd1fe0d..1756385886f 100755
@@ -499,6 +499,34 @@ proc getcommits {selid} {
     }
 }
 
+proc fetch {} {
+    global bgcolor NS fetch_output
+
+    set fetch_output {}
+    if {[catch {exec sh -c "git fetch -v 2>&1"} fetch_output]} {
+    }
+
+    set w .about
+    if {[winfo exists $w]} {
+	raise $w
+	return
+    }
+    ttk_toplevel $w
+    wm title $w [mc "Fetch"]
+    make_transient $w .
+    message $w.m -text [mc " $fetch_output "] \
+	    -justify left -aspect 600 -border 2 -bg $bgcolor -relief groove
+    pack $w.m -side top -fill x -padx 2 -pady 2
+    ${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
+    pack $w.ok -side bottom
+    bind $w <Visibility> "focus $w.ok"
+    bind $w <Key-Escape> "destroy $w"
+    bind $w <Key-Return> "destroy $w"
+    tk::PlaceWindow $w widget .
+
+    reloadcommits
+}
+
 proc updatecommits {} {
     global curview vcanopt vorigargs vfilelimit viewinstances
     global viewactive viewcomplete tclencoding
@@ -2089,6 +2117,7 @@ proc makewindow {} {
         mc "&File" cascade {
             {mc "&Update" command updatecommits -accelerator F5}
             {mc "&Reload" command reloadcommits -accelerator Shift-F5}
+            {mc "&Fetch" command fetch -accelerator F7}
             {mc "Reread re&ferences" command rereadrefs}
             {mc "&List references" command showrefs -accelerator F2}
             {xx "" separator}
@@ -2609,6 +2638,7 @@ proc makewindow {} {
     bindkey f nextfile
     bind . <F5> updatecommits
     bindmodfunctionkey Shift 5 reloadcommits
+    bind . <F7> fetch
     bind . <F2> showrefs
     bindmodfunctionkey Shift 4 {newview 0}
     bind . <F4> edit_or_newview
@@ -3125,6 +3155,7 @@ proc keys {} {
 [mc "<%s-KP->	Decrease font size" $M1T]
 [mc "<%s-minus>	Decrease font size" $M1T]
 [mc "<F5>		Update"]
+[mc "<F7>		Fetch"]
 " \
             -justify left -bg $bgcolor -border 2 -relief groove
     pack $w.m -side top -fill both -padx 2 -pady 2

base-commit: 72c4083ddf91b489b7b7b812df67ee8842177d98 --
gitgitgadget

#3 lore raw
In reply to a message not in the archive
Quoted 4 lines · Vladimir Chigarev

Hello Paul,

Just a gentle reminder.
May I ask you to review my changes in gitk?

Thanks for the reminder. See comments below.

Quoted 5 lines
Quoted 5 lines

gitk-git/gitk proc getcommits {selid} { · line 506

Quoted 5 lines
gitk-git/gitk +5 -0
+proc fetch {} {
+    global bgcolor NS fetch_output
+
+    set fetch_output {}
+    if {[catch {exec sh -c "git fetch -v 2>&1"} fetch_output]} {

This "exec" call is synchronous, meaning that the gitk process won't do anything else until the exec call returns. Since git fetch is a network operation, that could be quite a long time, during which the GUI will be unresponsive. It would be better to use open rather than exec, which will return a file descriptor. You would then use filerun to set up a procedure to be called when the file descriptor is readable. That way you can arrange for the GUI to continue to respond while the git fetch is happening.

Also, it may be more useful to do "git fetch --all" rather than just "git fetch", though I'm not going to insist on that.

Quoted 3 lines
Quoted 3 lines

gitk-git/gitk proc getcommits {selid} { · line 509

Quoted 3 lines
gitk-git/gitk +3 -0
+    }
+
+    set w .about

Why are you reusing the "About gitk" window here? That doesn't seem right. Don't you mean "set w .fetch" or similar?

Quoted 9 lines
Quoted 9 lines

gitk-git/gitk proc getcommits {selid} { · line 518

Quoted 9 lines
gitk-git/gitk +9 -0
+    if {[winfo exists $w]} {
+     raise $w
+     return
+    }
+    ttk_toplevel $w
+    wm title $w [mc "Fetch"]
+    make_transient $w .
+    message $w.m -text [mc " $fetch_output "] \
+         -justify left -aspect 600 -border 2 -bg $bgcolor -relief groove

How long can the git fetch output be? If it can be say ten or more lines you might need to use a text widget and a scrollbar rather than a message widget.

Quoted 31 lines
Quoted 31 lines

Review

Quoted 2 lines
(quoted diff) +2 -0
+    pack $w.m -side top -fill x -padx 2 -pady 2
+    ${NS}::button $w.ok -text [mc "Close"] -command "destroy $w"

-default active

Quoted 28 lines
gitk-git/gitk +11 -0
+    pack $w.ok -side bottom
+    bind $w <Visibility> "focus $w.ok"
+    bind $w <Key-Escape> "destroy $w"
+    bind $w <Key-Return> "destroy $w"
+    tk::PlaceWindow $w widget .
+
+    reloadcommits
+}
+
 proc updatecommits {} {
     global curview vcanopt vorigargs vfilelimit viewinstances
     global viewactive viewcomplete tclencoding
@@ -2089,6 +2117,7 @@ proc makewindow {} {
         mc "&File" cascade {
             {mc "&Update" command updatecommits -accelerator F5}
             {mc "&Reload" command reloadcommits -accelerator Shift-F5}
+            {mc "&Fetch" command fetch -accelerator F7}
             {mc "Reread re&ferences" command rereadrefs}
             {mc "&List references" command showrefs -accelerator F2}
             {xx "" separator}
@@ -2609,6 +2638,7 @@ proc makewindow {} {
     bindkey f nextfile
     bind . <F5> updatecommits
     bindmodfunctionkey Shift 5 reloadcommits
+    bind . <F7> fetch
     bind . <F2> showrefs
     bindmodfunctionkey Shift 4 {newview 0}
     bind . <F4> edit_or_newview
Quoted 8 lines
Quoted 8 lines

gitk-git/gitk proc keys {} { · line 3161

Quoted 8 lines
gitk-git/gitk +1 -0
@@ -3125,6 +3155,7 @@ proc keys {} {
 [mc "<%s-KP->        Decrease font size" $M1T]
 [mc "<%s-minus>      Decrease font size" $M1T]
 [mc "<F5>            Update"]
+[mc "<F7>            Fetch"]
 " \
             -justify left -bg $bgcolor -border 2 -relief groove
     pack $w.m -side top -fill both -padx 2 -pady 2

Paul.