aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Voigt <hvoigt@hvoigt.net>2011-02-13 14:57:15 +0100
committerPat Thoyts <patthoyts@users.sourceforge.net>2011-02-14 12:15:36 +0000
commit69e21b8392ac74338f3378a63f3db6b9df5249d7 (patch)
tree3cd654d20f830cf35a0448d2da5a02702dee5431
parente8db4035df29edc29815ac9a374d0e3dfb8ef329 (diff)
downloadgit-69e21b8392ac74338f3378a63f3db6b9df5249d7.tar.gz
git-69e21b8392ac74338f3378a63f3db6b9df5249d7.tar.xz
git-gui: teach fetch/prune menu to do it for all remotes
The commandline fetch already has this option for some time. Since this was not available at the time git gui was written lets implement it now. Signed-off-by: Heiko Voigt <heiko.voigt@mahr.de> Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
-rw-r--r--lib/remote.tcl45
-rw-r--r--lib/transport.tcl29
2 files changed, 74 insertions, 0 deletions
diff --git a/lib/remote.tcl b/lib/remote.tcl
index cf2fc9501..817ca1b6a 100644
--- a/lib/remote.tcl
+++ b/lib/remote.tcl
@@ -230,6 +230,45 @@ proc make_sure_remote_submenues_exist {remote_m} {
}
}
+proc update_all_remotes_menu_entry {} {
+ global all_remotes
+
+ set have_remote 0
+ foreach r $all_remotes {
+ set have_remote 1
+ }
+
+ set remote_m .mbar.remote
+ set fetch_m $remote_m.fetch
+ set prune_m $remote_m.prune
+ if {$have_remote} {
+ make_sure_remote_submenues_exist $remote_m
+ if {[$fetch_m entrycget 0 -label] ne "All"} {
+
+ $fetch_m insert 0 separator
+ $fetch_m insert 0 command \
+ -label "All" \
+ -command fetch_from_all
+
+ $prune_m insert 0 separator
+ $prune_m insert 0 command \
+ -label "All" \
+ -command prune_from_all
+ }
+ } else {
+ if {[winfo exists $fetch_m]} {
+ if {[$fetch_m type end] eq "separator"} {
+
+ delete_from_menu $fetch_m 0
+ delete_from_menu $fetch_m 0
+
+ delete_from_menu $prune_m 0
+ delete_from_menu $prune_m 0
+ }
+ }
+ }
+}
+
proc populate_remotes_menu {} {
global all_remotes
@@ -237,6 +276,8 @@ proc populate_remotes_menu {} {
add_fetch_entry $r
add_push_entry $r
}
+
+ update_all_remotes_menu_entry
}
proc add_single_remote {name location} {
@@ -252,6 +293,8 @@ proc add_single_remote {name location} {
add_fetch_entry $name
add_push_entry $name
+
+ update_all_remotes_menu_entry
}
proc delete_from_menu {menu name} {
@@ -281,4 +324,6 @@ proc remove_remote {name} {
delete_from_menu $remote_m.remove $name
# Not all remotes are in the push menu
catch { delete_from_menu $remote_m.push $name }
+
+ update_all_remotes_menu_entry
}
diff --git a/lib/transport.tcl b/lib/transport.tcl
index 306705885..7fad9b7d9 100644
--- a/lib/transport.tcl
+++ b/lib/transport.tcl
@@ -20,6 +20,35 @@ proc prune_from {remote} {
console::exec $w [list git remote prune $remote]
}
+proc fetch_from_all {} {
+ set w [console::new \
+ [mc "fetch all remotes"] \
+ [mc "Fetching new changes from all remotes"]]
+
+ set cmd [list git fetch --all]
+ if {[is_config_true gui.pruneduringfetch]} {
+ lappend cmd --prune
+ }
+
+ console::exec $w $cmd
+}
+
+proc prune_from_all {} {
+ global all_remotes
+
+ set w [console::new \
+ [mc "remote prune all remotes"] \
+ [mc "Pruning tracking branches deleted from all remotes"]]
+
+ set cmd [list git remote prune]
+
+ foreach r $all_remotes {
+ lappend cmd $r
+ }
+
+ console::exec $w $cmd
+}
+
proc push_to {remote} {
set w [console::new \
[mc "push %s" $remote] \