summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-gui.sh1
-rw-r--r--lib/option.tcl1
-rw-r--r--lib/remote.tcl11
-rw-r--r--lib/transport.tcl16
4 files changed, 26 insertions, 3 deletions
diff --git a/git-gui.sh b/git-gui.sh
index dba585111c..d238d45238 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -1243,6 +1243,7 @@ set default_config(merge.verbosity) 2
set default_config(user.name) {}
set default_config(user.email) {}
+set default_config(gui.pruneduringfetch) false
set default_config(gui.trustmtime) false
set default_config(gui.diffcontext) 5
set default_config(gui.newbranchtemplate) {}
diff --git a/lib/option.tcl b/lib/option.tcl
index 17fcc65f78..e06aca59f3 100644
--- a/lib/option.tcl
+++ b/lib/option.tcl
@@ -173,6 +173,7 @@ proc do_options {} {
{i-1..5 merge.verbosity {Merge Verbosity}}
{b gui.trustmtime {Trust File Modification Timestamps}}
+ {b gui.pruneduringfetch {Prune Tracking Branches During Fetch}}
{i-1..99 gui.diffcontext {Number of Diff Context Lines}}
{t gui.newbranchtemplate {New Branch Name Template}}
} {
diff --git a/lib/remote.tcl b/lib/remote.tcl
index 99f353ed7d..b54824ab72 100644
--- a/lib/remote.tcl
+++ b/lib/remote.tcl
@@ -95,6 +95,7 @@ proc populate_fetch_menu {} {
global all_remotes repo_config
set m .mbar.fetch
+ set prune_list [list]
foreach r $all_remotes {
set enable 0
if {![catch {set a $repo_config(remote.$r.url)}]} {
@@ -115,11 +116,21 @@ proc populate_fetch_menu {} {
}
if {$enable} {
+ lappend prune_list $r
$m add command \
-label "Fetch from $r..." \
-command [list fetch_from $r]
}
}
+
+ if {$prune_list ne {}} {
+ $m add separator
+ }
+ foreach r $prune_list {
+ $m add command \
+ -label "Prune from $r..." \
+ -command [list prune_from $r]
+ }
}
proc populate_push_menu {} {
diff --git a/lib/transport.tcl b/lib/transport.tcl
index c0e7d20fce..e8ebc6eda0 100644
--- a/lib/transport.tcl
+++ b/lib/transport.tcl
@@ -5,9 +5,19 @@ proc fetch_from {remote} {
set w [console::new \
"fetch $remote" \
"Fetching new changes from $remote"]
- set cmd [list git fetch]
- lappend cmd $remote
- console::exec $w $cmd
+ set cmds [list]
+ lappend cmds [list exec git fetch $remote]
+ if {[is_config_true gui.pruneduringfetch]} {
+ lappend cmds [list exec git remote prune $remote]
+ }
+ console::chain $w $cmds
+}
+
+proc prune_from {remote} {
+ set w [console::new \
+ "remote prune $remote" \
+ "Pruning tracking branches deleted from $remote"]
+ console::exec $w [list git remote prune $remote]
}
proc push_to {remote} {