aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Baudis <pasky@suse.cz>2008-09-24 22:44:02 +0200
committerShawn O. Pearce <spearce@spearce.org>2008-09-30 12:59:18 -0700
commit0d4044123cb081bd690dece6505ffbcb8476e7ef (patch)
treef7cb9badcc6c5624914e2bbce40b002a5e8cb2a6
parentba6485e05d43abf66e6b651a41b1ddc511b0e5eb (diff)
downloadgit-0d4044123cb081bd690dece6505ffbcb8476e7ef.tar.gz
git-0d4044123cb081bd690dece6505ffbcb8476e7ef.tar.xz
git-gui: Add support for removing remotes
We introduce new submenu Remote -> Remove Remote, allowing to remove remotes. In the future, we might consider a confirmation popup to avoid misclicks, but removing a remote is not very lossy operation. Signed-off-by: Petr Baudis <petr.baudis@novartis.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r--lib/remote.tcl37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/remote.tcl b/lib/remote.tcl
index 643f0bc54..185224735 100644
--- a/lib/remote.tcl
+++ b/lib/remote.tcl
@@ -137,6 +137,7 @@ proc add_fetch_entry {r} {
set remote_m .mbar.remote
set fetch_m $remote_m.fetch
set prune_m $remote_m.prune
+ set remove_m $remote_m.remove
set enable 0
if {![catch {set a $repo_config(remote.$r.url)}]} {
if {![catch {set a $repo_config(remote.$r.fetch)}]} {
@@ -157,6 +158,11 @@ proc add_fetch_entry {r} {
if {$enable} {
if {![winfo exists $fetch_m]} {
+ menu $remove_m
+ $remote_m insert 0 cascade \
+ -label [mc "Remove Remote"] \
+ -menu $remove_m
+
menu $prune_m
$remote_m insert 0 cascade \
-label [mc "Prune from"] \
@@ -174,6 +180,9 @@ proc add_fetch_entry {r} {
$prune_m add command \
-label $r \
-command [list prune_from $r]
+ $remove_m add command \
+ -label $r \
+ -command [list remove_remote $r]
}
}
@@ -236,3 +245,31 @@ proc add_single_remote {name location} {
add_fetch_entry $name
add_push_entry $name
}
+
+proc delete_from_menu {menu name} {
+ if {[winfo exists $menu]} {
+ $menu delete $name
+ }
+}
+
+proc remove_remote {name} {
+ global all_remotes repo_config
+
+ git remote rm $name
+
+ catch {
+ # Missing values are ok
+ unset repo_config(remote.$name.url)
+ unset repo_config(remote.$name.fetch)
+ unset repo_config(remote.$name.push)
+ }
+
+ set i [lsearch -exact all_remotes $name]
+ lreplace all_remotes $i $i
+
+ set remote_m .mbar.remote
+ delete_from_menu $remote_m.fetch $name
+ delete_from_menu $remote_m.prune $name
+ delete_from_menu $remote_m.remove $name
+ delete_from_menu $remote_m.push $name
+}