diff options
-rwxr-xr-x | git-gui.sh | 1 | ||||
-rw-r--r-- | lib/option.tcl | 1 | ||||
-rw-r--r-- | lib/remote.tcl | 11 | ||||
-rw-r--r-- | lib/transport.tcl | 16 |
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} { |