summaryrefslogtreecommitdiff
path: root/git-gui
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2008-11-16 15:51:11 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2008-11-16 15:51:11 -0800
commit6e13921b4f7adcc7316a76c0c4955b85b1589a65 (patch)
treed741279335c8a6b9e1565d1a999bc0018545a754 /git-gui
parentMerge branch 'maint' (diff)
parentgit-gui: Fix the search bar destruction handler. (diff)
downloadtgif-6e13921b4f7adcc7316a76c0c4955b85b1589a65.tar.xz
Merge git://repo.or.cz/git-gui
* git://repo.or.cz/git-gui: git-gui: Fix the search bar destruction handler. Update the po template git-gui: Implement automatic rescan after Tool execution. git-gui: Allow Tools request arguments from the user. git-gui: Add a Tools menu for arbitrary commands. git-gui: Fix the after callback execution in rescan. git-gui: Implement system-wide configuration handling. git-gui: try to provide a window icon under X
Diffstat (limited to 'git-gui')
-rwxr-xr-xgit-gui/git-gui.sh92
-rw-r--r--git-gui/lib/diff.tcl6
-rw-r--r--git-gui/lib/option.tcl12
-rw-r--r--git-gui/lib/search.tcl2
-rw-r--r--git-gui/lib/tools.tcl159
-rw-r--r--git-gui/lib/tools_dlg.tcl421
-rw-r--r--git-gui/po/git-gui.pot1076
7 files changed, 1457 insertions, 311 deletions
diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh
index cf9ef6ee07..8a4b42dbd7 100755
--- a/git-gui/git-gui.sh
+++ b/git-gui/git-gui.sh
@@ -597,6 +597,28 @@ if {[is_Windows]} {
if {![info exists env(DISPLAY)]} {
set env(DISPLAY) :9999
}
+} else {
+ catch {
+ image create photo gitlogo -width 16 -height 16
+
+ gitlogo put #33CC33 -to 7 0 9 2
+ gitlogo put #33CC33 -to 4 2 12 4
+ gitlogo put #33CC33 -to 7 4 9 6
+ gitlogo put #CC3333 -to 4 6 12 8
+ gitlogo put gray26 -to 4 9 6 10
+ gitlogo put gray26 -to 3 10 6 12
+ gitlogo put gray26 -to 8 9 13 11
+ gitlogo put gray26 -to 8 11 10 12
+ gitlogo put gray26 -to 11 11 13 14
+ gitlogo put gray26 -to 3 12 5 14
+ gitlogo put gray26 -to 5 13
+ gitlogo put gray26 -to 10 13
+ gitlogo put gray26 -to 4 14 12 15
+ gitlogo put gray26 -to 5 15 11 16
+ gitlogo redither
+
+ wm iconphoto . -default gitlogo
+ }
}
######################################################################
@@ -918,19 +940,25 @@ git-version proc _parse_config {arr_name args} {
}
proc load_config {include_global} {
- global repo_config global_config default_config
+ global repo_config global_config system_config default_config
if {$include_global} {
+ _parse_config system_config --system
_parse_config global_config --global
}
_parse_config repo_config
foreach name [array names default_config] {
+ if {[catch {set v $system_config($name)}]} {
+ set system_config($name) $default_config($name)
+ }
+ }
+ foreach name [array names system_config] {
if {[catch {set v $global_config($name)}]} {
- set global_config($name) $default_config($name)
+ set global_config($name) $system_config($name)
}
if {[catch {set v $repo_config($name)}]} {
- set repo_config($name) $default_config($name)
+ set repo_config($name) $system_config($name)
}
}
}
@@ -1463,10 +1491,8 @@ proc rescan_done {fd buf after} {
prune_selection
unlock_index
display_all_files
- if {$current_diff_path ne {}} reshow_diff
- if {$current_diff_path eq {}} select_first_diff
-
- uplevel #0 $after
+ if {$current_diff_path ne {}} { reshow_diff $after }
+ if {$current_diff_path eq {}} { select_first_diff $after }
}
proc prune_selection {} {
@@ -1978,16 +2004,16 @@ proc do_rescan {} {
}
proc ui_do_rescan {} {
- rescan {force_first_diff; ui_ready}
+ rescan {force_first_diff ui_ready}
}
proc do_commit {} {
commit_tree
}
-proc next_diff {} {
+proc next_diff {{after {}}} {
global next_diff_p next_diff_w next_diff_i
- show_diff $next_diff_p $next_diff_w {}
+ show_diff $next_diff_p $next_diff_w {} {} $after
}
proc find_anchor_pos {lst name} {
@@ -2072,25 +2098,42 @@ proc next_diff_after_action {w path {lno {}} {mmask {}}} {
}
}
-proc select_first_diff {} {
+proc select_first_diff {after} {
global ui_workdir
if {[find_next_diff $ui_workdir {} 1 {^_?U}] ||
[find_next_diff $ui_workdir {} 1 {[^O]$}]} {
- next_diff
+ next_diff $after
+ } else {
+ uplevel #0 $after
}
}
-proc force_first_diff {} {
- global current_diff_path
+proc force_first_diff {after} {
+ global ui_workdir current_diff_path file_states
if {[info exists file_states($current_diff_path)]} {
set state [lindex $file_states($current_diff_path) 0]
+ } else {
+ set state {OO}
+ }
- if {[string index $state 1] ne {O}} return
+ set reselect 0
+ if {[string first {U} $state] >= 0} {
+ # Already a conflict, do nothing
+ } elseif {[find_next_diff $ui_workdir $current_diff_path {} {^_?U}]} {
+ set reselect 1
+ } elseif {[string index $state 1] ne {O}} {
+ # Already a diff & no conflicts, do nothing
+ } elseif {[find_next_diff $ui_workdir $current_diff_path {} {[^O]$}]} {
+ set reselect 1
}
- select_first_diff
+ if {$reselect} {
+ next_diff $after
+ } else {
+ uplevel #0 $after
+ }
}
proc toggle_or_diff {w x y} {
@@ -2246,6 +2289,9 @@ if {[is_enabled transport]} {
.mbar add cascade -label [mc Merge] -menu .mbar.merge
.mbar add cascade -label [mc Remote] -menu .mbar.remote
}
+if {[is_enabled multicommit] || [is_enabled singlecommit]} {
+ .mbar add cascade -label [mc Tools] -menu .mbar.tools
+}
. configure -menu .mbar
# -- Repository Menu
@@ -2520,6 +2566,20 @@ if {[is_MacOSX]} {
-command do_options
}
+# -- Tools Menu
+#
+if {[is_enabled multicommit] || [is_enabled singlecommit]} {
+ set tools_menubar .mbar.tools
+ menu $tools_menubar
+ $tools_menubar add separator
+ $tools_menubar add command -label [mc "Add..."] -command tools_add::dialog
+ $tools_menubar add command -label [mc "Remove..."] -command tools_remove::dialog
+ set tools_tailcnt 3
+ if {[array names repo_config guitool.*.cmd] ne {}} {
+ tools_populate_all
+ }
+}
+
# -- Help Menu
#
.mbar add cascade -label [mc Help] -menu .mbar.help
diff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl
index 94ee38cccc..bbbf15c875 100644
--- a/git-gui/lib/diff.tcl
+++ b/git-gui/lib/diff.tcl
@@ -16,7 +16,7 @@ proc clear_diff {} {
$ui_workdir tag remove in_diff 0.0 end
}
-proc reshow_diff {} {
+proc reshow_diff {{after {}}} {
global file_states file_lists
global current_diff_path current_diff_side
global ui_diff
@@ -30,13 +30,13 @@ proc reshow_diff {} {
|| [lsearch -sorted -exact $file_lists($current_diff_side) $p] == -1} {
if {[find_next_diff $current_diff_side $p {} {[^O]}]} {
- next_diff
+ next_diff $after
} else {
clear_diff
}
} else {
set save_pos [lindex [$ui_diff yview] 0]
- show_diff $p $current_diff_side {} $save_pos
+ show_diff $p $current_diff_side {} $save_pos $after
}
}
diff --git a/git-gui/lib/option.tcl b/git-gui/lib/option.tcl
index c80c939878..1d55b49c9b 100644
--- a/git-gui/lib/option.tcl
+++ b/git-gui/lib/option.tcl
@@ -25,7 +25,7 @@ proc config_check_encodings {} {
proc save_config {} {
global default_config font_descs
- global repo_config global_config
+ global repo_config global_config system_config
global repo_config_new global_config_new
global ui_comm_spell
@@ -49,7 +49,7 @@ proc save_config {} {
foreach name [array names default_config] {
set value $global_config_new($name)
if {$value ne $global_config($name)} {
- if {$value eq $default_config($name)} {
+ if {$value eq $system_config($name)} {
catch {git config --global --unset $name}
} else {
regsub -all "\[{}\]" $value {"} value
@@ -284,17 +284,17 @@ proc do_options {} {
}
proc do_restore_defaults {} {
- global font_descs default_config repo_config
+ global font_descs default_config repo_config system_config
global repo_config_new global_config_new
foreach name [array names default_config] {
- set repo_config_new($name) $default_config($name)
- set global_config_new($name) $default_config($name)
+ set repo_config_new($name) $system_config($name)
+ set global_config_new($name) $system_config($name)
}
foreach option $font_descs {
set name [lindex $option 0]
- set repo_config(gui.$name) $default_config(gui.$name)
+ set repo_config(gui.$name) $system_config(gui.$name)
}
apply_config
diff --git a/git-gui/lib/search.tcl b/git-gui/lib/search.tcl
index 32c8656fc9..b371e9a30a 100644
--- a/git-gui/lib/search.tcl
+++ b/git-gui/lib/search.tcl
@@ -35,7 +35,7 @@ constructor new {i_w i_text args} {
trace add variable searchstring write [cb _incrsearch_cb]
- bind $w <Destroy> [cb delete_this]
+ bind $w <Destroy> [list delete_this $this]
return $this
}
diff --git a/git-gui/lib/tools.tcl b/git-gui/lib/tools.tcl
new file mode 100644
index 0000000000..6ae63b6c7c
--- /dev/null
+++ b/git-gui/lib/tools.tcl
@@ -0,0 +1,159 @@
+# git-gui Tools menu implementation
+
+proc tools_list {} {
+ global repo_config
+
+ set names {}
+ foreach item [array names repo_config guitool.*.cmd] {
+ lappend names [string range $item 8 end-4]
+ }
+ return [lsort $names]
+}
+
+proc tools_populate_all {} {
+ global tools_menubar tools_menutbl
+ global tools_tailcnt
+
+ set mbar_end [$tools_menubar index end]
+ set mbar_base [expr {$mbar_end - $tools_tailcnt}]
+ if {$mbar_base >= 0} {
+ $tools_menubar delete 0 $mbar_base
+ }
+
+ array unset tools_menutbl
+
+ foreach fullname [tools_list] {
+ tools_populate_one $fullname
+ }
+}
+
+proc tools_create_item {parent args} {
+ global tools_menubar tools_tailcnt
+ if {$parent eq $tools_menubar} {
+ set pos [expr {[$parent index end]-$tools_tailcnt+1}]
+ eval [list $parent insert $pos] $args
+ } else {
+ eval [list $parent add] $args
+ }
+}
+
+proc tools_populate_one {fullname} {
+ global tools_menubar tools_menutbl tools_id
+
+ if {![info exists tools_id]} {
+ set tools_id 0
+ }
+
+ set names [split $fullname '/']
+ set parent $tools_menubar
+ for {set i 0} {$i < [llength $names]-1} {incr i} {
+ set subname [join [lrange $names 0 $i] '/']
+ if {[info exists tools_menutbl($subname)]} {
+ set parent $tools_menutbl($subname)
+ } else {
+ set subid $parent.t$tools_id
+ tools_create_item $parent cascade \
+ -label [lindex $names $i] -menu $subid
+ menu $subid
+ set tools_menutbl($subname) $subid
+ set parent $subid
+ incr tools_id
+ }
+ }
+
+ tools_create_item $parent command \
+ -label [lindex $names end] \
+ -command [list tools_exec $fullname]
+}
+
+proc tools_exec {fullname} {
+ global repo_config env current_diff_path
+ global current_branch is_detached
+
+ if {[is_config_true "guitool.$fullname.needsfile"]} {
+ if {$current_diff_path eq {}} {
+ error_popup [mc "Running %s requires a selected file." $fullname]
+ return
+ }
+ }
+
+ catch { unset env(ARGS) }
+ catch { unset env(REVISION) }
+
+ if {[get_config "guitool.$fullname.revprompt"] ne {} ||
+ [get_config "guitool.$fullname.argprompt"] ne {}} {
+ set dlg [tools_askdlg::dialog $fullname]
+ if {![tools_askdlg::execute $dlg]} {
+ return
+ }
+ } elseif {[is_config_true "guitool.$fullname.confirm"]} {
+ if {[ask_popup [mc "Are you sure you want to run %s?" $fullname]] ne {yes}} {
+ return
+ }
+ }
+
+ set env(GIT_GUITOOL) $fullname
+ set env(FILENAME) $current_diff_path
+ if {$is_detached} {
+ set env(CUR_BRANCH) ""
+ } else {
+ set env(CUR_BRANCH) $current_branch
+ }
+
+ set cmdline $repo_config(guitool.$fullname.cmd)
+ if {[is_config_true "guitool.$fullname.noconsole"]} {
+ tools_run_silent [list sh -c $cmdline] \
+ [list tools_complete $fullname {}]
+ } else {
+ regsub {/} $fullname { / } title
+ set w [console::new \
+ [mc "Tool: %s" $title] \
+ [mc "Running: %s" $cmdline]]
+ console::exec $w [list sh -c $cmdline] \
+ [list tools_complete $fullname $w]
+ }
+
+ unset env(GIT_GUITOOL)
+ unset env(FILENAME)
+ unset env(CUR_BRANCH)
+ catch { unset env(ARGS) }
+ catch { unset env(REVISION) }
+}
+
+proc tools_run_silent {cmd after} {
+ lappend cmd 2>@1
+ set fd [_open_stdout_stderr $cmd]
+
+ fconfigure $fd -blocking 0 -translation binary
+ fileevent $fd readable [list tools_consume_input $fd $after]
+}
+
+proc tools_consume_input {fd after} {
+ read $fd
+ if {[eof $fd]} {
+ fconfigure $fd -blocking 1
+ if {[catch {close $fd}]} {
+ uplevel #0 $after 0
+ } else {
+ uplevel #0 $after 1
+ }
+ }
+}
+
+proc tools_complete {fullname w {ok 1}} {
+ if {$w ne {}} {
+ console::done $w $ok
+ }
+
+ if {$ok} {
+ set msg [mc "Tool completed succesfully: %s" $fullname]
+ } else {
+ set msg [mc "Tool failed: %s" $fullname]
+ }
+
+ if {[is_config_true "guitool.$fullname.norescan"]} {
+ ui_status $msg
+ } else {
+ rescan [list ui_status $msg]
+ }
+}
diff --git a/git-gui/lib/tools_dlg.tcl b/git-gui/lib/tools_dlg.tcl
new file mode 100644
index 0000000000..5f7f08e239
--- /dev/null
+++ b/git-gui/lib/tools_dlg.tcl
@@ -0,0 +1,421 @@
+# git-gui Tools menu dialogs
+
+class tools_add {
+
+field w ; # widget path
+field w_name ; # new remote name widget
+field w_cmd ; # new remote location widget
+
+field name {}; # name of the tool
+field command {}; # command to execute
+field add_global 0; # add to the --global config
+field no_console 0; # disable using the console
+field needs_file 0; # ensure filename is set
+field confirm 0; # ask for confirmation
+field ask_branch 0; # ask for a revision
+field ask_args 0; # ask for additional args
+
+constructor dialog {} {
+ global repo_config
+
+ make_toplevel top w
+ wm title $top [append "[appname] ([reponame]): " [mc "Add Tool"]]
+ if {$top ne {.}} {
+ wm geometry $top "+[winfo rootx .]+[winfo rooty .]"
+ wm transient $top .
+ }
+
+ label $w.header -text [mc "Add New Tool Command"] -font font_uibold
+ pack $w.header -side top -fill x
+
+ frame $w.buttons
+ checkbutton $w.buttons.global \
+ -text [mc "Add globally"] \
+ -variable @add_global
+ pack $w.buttons.global -side left -padx 5
+ button $w.buttons.create -text [mc Add] \
+ -default active \
+ -command [cb _add]
+ pack $w.buttons.create -side right
+ button $w.buttons.cancel -text [mc Cancel] \
+ -command [list destroy $w]
+ pack $w.buttons.cancel -side right -padx 5
+ pack $w.buttons -side bottom -fill x -pady 10 -padx 10
+
+ labelframe $w.desc -text [mc "Tool Details"]
+
+ label $w.desc.name_cmnt -anchor w\
+ -text [mc "Use '/' separators to create a submenu tree:"]
+ grid x $w.desc.name_cmnt -sticky we -padx {0 5} -pady {0 2}
+ label $w.desc.name_l -text [mc "Name:"]
+ set w_name $w.desc.name_t
+ entry $w_name \
+ -borderwidth 1 \
+ -relief sunken \
+ -width 40 \
+ -textvariable @name \
+ -validate key \
+ -validatecommand [cb _validate_name %d %S]
+ grid $w.desc.name_l $w_name -sticky we -padx {0 5}
+
+ label $w.desc.cmd_l -text [mc "Command:"]
+ set w_cmd $w.desc.cmd_t
+ entry $w_cmd \
+ -borderwidth 1 \
+ -relief sunken \
+ -width 40 \
+ -textvariable @command
+ grid $w.desc.cmd_l $w_cmd -sticky we -padx {0 5} -pady {0 3}
+
+ grid columnconfigure $w.desc 1 -weight 1
+ pack $w.desc -anchor nw -fill x -pady 5 -padx 5
+
+ checkbutton $w.confirm \
+ -text [mc "Show a dialog before running"] \
+ -variable @confirm -command [cb _check_enable_dlg]
+
+ labelframe $w.dlg -labelwidget $w.confirm
+
+ checkbutton $w.dlg.askbranch \
+ -text [mc "Ask the user to select a revision (sets \$REVISION)"] \
+ -variable @ask_branch -state disabled
+ pack $w.dlg.askbranch -anchor w -padx 15
+
+ checkbutton $w.dlg.askargs \
+ -text [mc "Ask the user for additional arguments (sets \$ARGS)"] \
+ -variable @ask_args -state disabled
+ pack $w.dlg.askargs -anchor w -padx 15
+
+ pack $w.dlg -anchor nw -fill x -pady {0 8} -padx 5
+
+ checkbutton $w.noconsole \
+ -text [mc "Don't show the command output window"] \
+ -variable @no_console
+ pack $w.noconsole -anchor w -padx 5
+
+ checkbutton $w.needsfile \
+ -text [mc "Run only if a diff is selected (\$FILENAME not empty)"] \
+ -variable @needs_file
+ pack $w.needsfile -anchor w -padx 5
+
+ bind $w <Visibility> [cb _visible]
+ bind $w <Key-Escape> [list destroy $w]
+ bind $w <Key-Return> [cb _add]\;break
+ tkwait window $w
+}
+
+method _check_enable_dlg {} {
+ if {$confirm} {
+ $w.dlg.askbranch configure -state normal
+ $w.dlg.askargs configure -state normal
+ } else {
+ $w.dlg.askbranch configure -state disabled
+ $w.dlg.askargs configure -state disabled
+ }
+}
+
+method _add {} {
+ global repo_config
+
+ if {$name eq {}} {
+ error_popup [mc "Please supply a name for the tool."]
+ focus $w_name
+ return
+ }
+
+ set item "guitool.$name.cmd"
+
+ if {[info exists repo_config($item)]} {
+ error_popup [mc "Tool '%s' already exists." $name]
+ focus $w_name
+ return
+ }
+
+ set cmd [list git config]
+ if {$add_global} { lappend cmd --global }
+ set items {}
+ if {$no_console} { lappend items "guitool.$name.noconsole" }
+ if {$needs_file} { lappend items "guitool.$name.needsfile" }
+ if {$confirm} {
+ if {$ask_args} { lappend items "guitool.$name.argprompt" }
+ if {$ask_branch} { lappend items "guitool.$name.revprompt" }
+ if {!$ask_args && !$ask_branch} {
+ lappend items "guitool.$name.confirm"
+ }
+ }
+
+ if {[catch {
+ eval $cmd [list $item $command]
+ foreach citem $items { eval $cmd [list $citem yes] }
+ } err]} {
+ error_popup [mc "Could not add tool:\n%s" $err]
+ } else {
+ set repo_config($item) $command
+ foreach citem $items { set repo_config($citem) yes }
+
+ tools_populate_all
+ }
+
+ destroy $w
+}
+
+method _validate_name {d S} {
+ if {$d == 1} {
+ if {[regexp {[~?*&\[\0\"\\\{]} $S]} {
+ return 0
+ }
+ }
+ return 1
+}
+
+method _visible {} {
+ grab $w
+ $w_name icursor end
+ focus $w_name
+}
+
+}
+
+class tools_remove {
+
+field w ; # widget path
+field w_names ; # name list
+
+constructor dialog {} {
+ global repo_config global_config system_config
+
+ load_config 1
+
+ make_toplevel top w
+ wm title $top [append "[appname] ([reponame]): " [mc "Remove Tool"]]
+ if {$top ne {.}} {
+ wm geometry $top "+[winfo rootx .]+[winfo rooty .]"
+ wm transient $top .
+ }
+
+ label $w.header -text [mc "Remove Tool Commands"] -font font_uibold
+ pack $w.header -side top -fill x
+
+ frame $w.buttons
+ button $w.buttons.create -text [mc Remove] \
+ -default active \
+ -command [cb _remove]
+ pack $w.buttons.create -side right
+ button $w.buttons.cancel -text [mc Cancel] \
+ -command [list destroy $w]
+ pack $w.buttons.cancel -side right -padx 5
+ pack $w.buttons -side bottom -fill x -pady 10 -padx 10
+
+ frame $w.list
+ set w_names $w.list.l
+ listbox $w_names \
+ -height 10 \
+ -width 30 \
+ -selectmode extended \
+ -exportselection false \
+ -yscrollcommand [list $w.list.sby set]
+ scrollbar $w.list.sby -command [list $w.list.l yview]
+ pack $w.list.sby -side right -fill y
+ pack $w.list.l -side left -fill both -expand 1
+ pack $w.list -fill both -expand 1 -pady 5 -padx 5
+
+ set local_cnt 0
+ foreach fullname [tools_list] {
+ # Cannot delete system tools
+ if {[info exists system_config(guitool.$fullname.cmd)]} continue
+
+ $w_names insert end $fullname
+ if {![info exists global_config(guitool.$fullname.cmd)]} {
+ $w_names itemconfigure end -foreground blue
+ incr local_cnt
+ }
+ }
+
+ if {$local_cnt > 0} {
+ label $w.colorlbl -foreground blue \
+ -text [mc "(Blue denotes repository-local tools)"]
+ pack $w.colorlbl -fill x -pady 5 -padx 5
+ }
+
+ bind $w <Visibility> [cb _visible]
+ bind $w <Key-Escape> [list destroy $w]
+ bind $w <Key-Return> [cb _remove]\;break
+ tkwait window $w
+}
+
+method _remove {} {
+ foreach i [$w_names curselection] {
+ set name [$w_names get $i]
+
+ catch { git config --remove-section guitool.$name }
+ catch { git config --global --remove-section guitool.$name }
+ }
+
+ load_config 0
+ tools_populate_all
+
+ destroy $w
+}
+
+method _visible {} {
+ grab $w
+ focus $w_names
+}
+
+}
+
+class tools_askdlg {
+
+field w ; # widget path
+field w_rev {}; # revision browser
+field w_args {}; # arguments
+
+field is_ask_args 0; # has arguments field
+field is_ask_revs 0; # has revision browser
+
+field is_ok 0; # ok to start
+field argstr {}; # arguments
+
+constructor dialog {fullname} {
+ global M1B
+
+ set title [get_config "guitool.$fullname.title"]
+ if {$title eq {}} {
+ regsub {/} $fullname { / } title
+ }
+
+ make_toplevel top w -autodelete 0
+ wm title $top [append "[appname] ([reponame]): " $title]
+ if {$top ne {.}} {
+ wm geometry $top "+[winfo rootx .]+[winfo rooty .]"
+ wm transient $top .
+ }
+
+ set prompt [get_config "guitool.$fullname.prompt"]
+ if {$prompt eq {}} {
+ set command [get_config "guitool.$fullname.cmd"]
+ set prompt [mc "Run Command: %s" $command]
+ }
+
+ label $w.header -text $prompt -font font_uibold
+ pack $w.header -side top -fill x
+
+ set argprompt [get_config "guitool.$fullname.argprompt"]
+ set revprompt [get_config "guitool.$fullname.revprompt"]
+
+ set is_ask_args [expr {$argprompt ne {}}]
+ set is_ask_revs [expr {$revprompt ne {}}]
+
+ if {$is_ask_args} {
+ if {$argprompt eq {yes} || $argprompt eq {true} || $argprompt eq {1}} {
+ set argprompt [mc "Arguments"]
+ }
+
+ labelframe $w.arg -text $argprompt
+
+ set w_args $w.arg.txt
+ entry $w_args \
+ -borderwidth 1 \
+ -relief sunken \
+ -width 40 \
+ -textvariable @argstr
+ pack $w_args -padx 5 -pady 5 -fill both
+ pack $w.arg -anchor nw -fill both -pady 5 -padx 5
+ }
+
+ if {$is_ask_revs} {
+ if {$revprompt eq {yes} || $revprompt eq {true} || $revprompt eq {1}} {
+ set revprompt [mc "Revision"]
+ }
+
+ if {[is_config_true "guitool.$fullname.revunmerged"]} {
+ set w_rev [::choose_rev::new_unmerged $w.rev $revprompt]
+ } else {
+ set w_rev [::choose_rev::new $w.rev $revprompt]
+ }
+
+ pack $w.rev -anchor nw -fill both -expand 1 -pady 5 -padx 5
+ }
+
+ frame $w.buttons
+ if {$is_ask_revs} {
+ button $w.buttons.visualize \
+ -text [mc Visualize] \
+ -command [cb _visualize]
+ pack $w.buttons.visualize -side left
+ }
+ button $w.buttons.ok \
+ -text [mc OK] \
+ -command [cb _start]
+ pack $w.buttons.ok -side right
+ button $w.buttons.cancel \
+ -text [mc "Cancel"] \
+ -command [cb _cancel]
+ pack $w.buttons.cancel -side right -padx 5
+ pack $w.buttons -side bottom -fill x -pady 10 -padx 10
+
+ bind $w <$M1B-Key-Return> [cb _start]
+ bind $w <Key-Return> [cb _start]
+ bind $w <Key-Escape> [cb _cancel]
+ wm protocol $w WM_DELETE_WINDOW [cb _cancel]
+
+ bind $w <Visibility> [cb _visible]
+ return $this
+}
+
+method execute {} {
+ tkwait window $w
+ set rv $is_ok
+ delete_this
+ return $rv
+}
+
+method _visible {} {
+ grab $w
+ if {$is_ask_args} {
+ focus $w_args
+ } elseif {$is_ask_revs} {
+ $w_rev focus_filter
+ }
+}
+
+method _cancel {} {
+ wm protocol $w WM_DELETE_WINDOW {}
+ destroy $w
+}
+
+method _rev {} {
+ if {[catch {$w_rev commit_or_die}]} {
+ return {}
+ }
+ return [$w_rev get]
+}
+
+method _visualize {} {
+ global current_branch
+ set rev [_rev $this]
+ if {$rev ne {}} {
+ do_gitk [list --left-right "$current_branch...$rev"]
+ }
+}
+
+method _start {} {
+ global env
+
+ if {$is_ask_revs} {
+ set name [_rev $this]
+ if {$name eq {}} {
+ return
+ }
+ set env(REVISION) $name
+ }
+
+ if {$is_ask_args} {
+ set env(ARGS) $argstr
+ }
+
+ set is_ok 1
+ _cancel $this
+}
+
+}
diff --git a/git-gui/po/git-gui.pot b/git-gui/po/git-gui.pot
index e295000e77..58db67c217 100644
--- a/git-gui/po/git-gui.pot
+++ b/git-gui/po/git-gui.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-02 14:45-0700\n"
+"POT-Creation-Date: 2008-11-16 13:56-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,33 +16,33 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: git-gui.sh:41 git-gui.sh:688 git-gui.sh:702 git-gui.sh:715 git-gui.sh:798
-#: git-gui.sh:817
+#: git-gui.sh:41 git-gui.sh:737 git-gui.sh:751 git-gui.sh:764 git-gui.sh:847
+#: git-gui.sh:866
msgid "git-gui: fatal error"
msgstr ""
-#: git-gui.sh:644
+#: git-gui.sh:689
#, tcl-format
msgid "Invalid font specified in %s:"
msgstr ""
-#: git-gui.sh:674
+#: git-gui.sh:723
msgid "Main Font"
msgstr ""
-#: git-gui.sh:675
+#: git-gui.sh:724
msgid "Diff/Console Font"
msgstr ""
-#: git-gui.sh:689
+#: git-gui.sh:738
msgid "Cannot find git in PATH."
msgstr ""
-#: git-gui.sh:716
+#: git-gui.sh:765
msgid "Cannot parse Git version string:"
msgstr ""
-#: git-gui.sh:734
+#: git-gui.sh:783
#, tcl-format
msgid ""
"Git version cannot be determined.\n"
@@ -54,379 +54,444 @@ msgid ""
"Assume '%s' is version 1.5.0?\n"
msgstr ""
-#: git-gui.sh:972
+#: git-gui.sh:1062
msgid "Git directory not found:"
msgstr ""
-#: git-gui.sh:979
+#: git-gui.sh:1069
msgid "Cannot move to top of working directory:"
msgstr ""
-#: git-gui.sh:986
+#: git-gui.sh:1076
msgid "Cannot use funny .git directory:"
msgstr ""
-#: git-gui.sh:991
+#: git-gui.sh:1081
msgid "No working directory"
msgstr ""
-#: git-gui.sh:1138 lib/checkout_op.tcl:305
+#: git-gui.sh:1247 lib/checkout_op.tcl:305
msgid "Refreshing file status..."
msgstr ""
-#: git-gui.sh:1194
+#: git-gui.sh:1303
msgid "Scanning for modified files ..."
msgstr ""
-#: git-gui.sh:1369 lib/browser.tcl:246
+#: git-gui.sh:1367
+msgid "Calling prepare-commit-msg hook..."
+msgstr ""
+
+#: git-gui.sh:1384
+msgid "Commit declined by prepare-commit-msg hook."
+msgstr ""
+
+#: git-gui.sh:1542 lib/browser.tcl:246
msgid "Ready."
msgstr ""
-#: git-gui.sh:1635
+#: git-gui.sh:1819
msgid "Unmodified"
msgstr ""
-#: git-gui.sh:1637
+#: git-gui.sh:1821
msgid "Modified, not staged"
msgstr ""
-#: git-gui.sh:1638 git-gui.sh:1643
+#: git-gui.sh:1822 git-gui.sh:1830
msgid "Staged for commit"
msgstr ""
-#: git-gui.sh:1639 git-gui.sh:1644
+#: git-gui.sh:1823 git-gui.sh:1831
msgid "Portions staged for commit"
msgstr ""
-#: git-gui.sh:1640 git-gui.sh:1645
+#: git-gui.sh:1824 git-gui.sh:1832
msgid "Staged for commit, missing"
msgstr ""
-#: git-gui.sh:1642
+#: git-gui.sh:1826
+msgid "File type changed, not staged"
+msgstr ""
+
+#: git-gui.sh:1827
+msgid "File type changed, staged"
+msgstr ""
+
+#: git-gui.sh:1829
msgid "Untracked, not staged"
msgstr ""
-#: git-gui.sh:1647
+#: git-gui.sh:1834
msgid "Missing"
msgstr ""
-#: git-gui.sh:1648
+#: git-gui.sh:1835
msgid "Staged for removal"
msgstr ""
-#: git-gui.sh:1649
+#: git-gui.sh:1836
msgid "Staged for removal, still present"
msgstr ""
-#: git-gui.sh:1651 git-gui.sh:1652 git-gui.sh:1653 git-gui.sh:1654
+#: git-gui.sh:1838 git-gui.sh:1839 git-gui.sh:1840 git-gui.sh:1841
+#: git-gui.sh:1842 git-gui.sh:1843
msgid "Requires merge resolution"
msgstr ""
-#: git-gui.sh:1689
+#: git-gui.sh:1878
msgid "Starting gitk... please wait..."
msgstr ""
-#: git-gui.sh:1698
+#: git-gui.sh:1887
msgid "Couldn't find gitk in PATH"
msgstr ""
-#: git-gui.sh:1948 lib/choose_repository.tcl:36
+#: git-gui.sh:2280 lib/choose_repository.tcl:36
msgid "Repository"
msgstr ""
-#: git-gui.sh:1949
+#: git-gui.sh:2281
msgid "Edit"
msgstr ""
-#: git-gui.sh:1951 lib/choose_rev.tcl:561
+#: git-gui.sh:2283 lib/choose_rev.tcl:561
msgid "Branch"
msgstr ""
-#: git-gui.sh:1954 lib/choose_rev.tcl:548
+#: git-gui.sh:2286 lib/choose_rev.tcl:548
msgid "Commit@@noun"
msgstr ""
-#: git-gui.sh:1957 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
+#: git-gui.sh:2289 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
msgid "Merge"
msgstr ""
-#: git-gui.sh:1958 lib/choose_rev.tcl:557
+#: git-gui.sh:2290 lib/choose_rev.tcl:557
msgid "Remote"
msgstr ""
-#: git-gui.sh:1967
+#: git-gui.sh:2293
+msgid "Tools"
+msgstr ""
+
+#: git-gui.sh:2302
+msgid "Explore Working Copy"
+msgstr ""
+
+#: git-gui.sh:2307
msgid "Browse Current Branch's Files"
msgstr ""
-#: git-gui.sh:1971
+#: git-gui.sh:2311
msgid "Browse Branch Files..."
msgstr ""
-#: git-gui.sh:1976
+#: git-gui.sh:2316
msgid "Visualize Current Branch's History"
msgstr ""
-#: git-gui.sh:1980
+#: git-gui.sh:2320
msgid "Visualize All Branch History"
msgstr ""
-#: git-gui.sh:1987
+#: git-gui.sh:2327
#, tcl-format
msgid "Browse %s's Files"
msgstr ""
-#: git-gui.sh:1989
+#: git-gui.sh:2329
#, tcl-format
msgid "Visualize %s's History"
msgstr ""
-#: git-gui.sh:1994 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:2334 lib/database.tcl:27 lib/database.tcl:67
msgid "Database Statistics"
msgstr ""
-#: git-gui.sh:1997 lib/database.tcl:34
+#: git-gui.sh:2337 lib/database.tcl:34
msgid "Compress Database"
msgstr ""
-#: git-gui.sh:2000
+#: git-gui.sh:2340
msgid "Verify Database"
msgstr ""
-#: git-gui.sh:2007 git-gui.sh:2011 git-gui.sh:2015 lib/shortcut.tcl:7
+#: git-gui.sh:2347 git-gui.sh:2351 git-gui.sh:2355 lib/shortcut.tcl:7
#: lib/shortcut.tcl:39 lib/shortcut.tcl:71
msgid "Create Desktop Icon"
msgstr ""
-#: git-gui.sh:2023 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
+#: git-gui.sh:2363 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191
msgid "Quit"
msgstr ""
-#: git-gui.sh:2031
+#: git-gui.sh:2371
msgid "Undo"
msgstr ""
-#: git-gui.sh:2034
+#: git-gui.sh:2374
msgid "Redo"
msgstr ""
-#: git-gui.sh:2038 git-gui.sh:2545
+#: git-gui.sh:2378 git-gui.sh:2923
msgid "Cut"
msgstr ""
-#: git-gui.sh:2041 git-gui.sh:2548 git-gui.sh:2622 git-gui.sh:2715
+#: git-gui.sh:2381 git-gui.sh:2926 git-gui.sh:3000 git-gui.sh:3082
#: lib/console.tcl:69
msgid "Copy"
msgstr ""
-#: git-gui.sh:2044 git-gui.sh:2551
+#: git-gui.sh:2384 git-gui.sh:2929
msgid "Paste"
msgstr ""
-#: git-gui.sh:2047 git-gui.sh:2554 lib/branch_delete.tcl:26
+#: git-gui.sh:2387 git-gui.sh:2932 lib/branch_delete.tcl:26
#: lib/remote_branch_delete.tcl:38
msgid "Delete"
msgstr ""
-#: git-gui.sh:2051 git-gui.sh:2558 git-gui.sh:2719 lib/console.tcl:71
+#: git-gui.sh:2391 git-gui.sh:2936 git-gui.sh:3086 lib/console.tcl:71
msgid "Select All"
msgstr ""
-#: git-gui.sh:2060
+#: git-gui.sh:2400
msgid "Create..."
msgstr ""
-#: git-gui.sh:2066
+#: git-gui.sh:2406
msgid "Checkout..."
msgstr ""
-#: git-gui.sh:2072
+#: git-gui.sh:2412
msgid "Rename..."
msgstr ""
-#: git-gui.sh:2077 git-gui.sh:2187
+#: git-gui.sh:2417
msgid "Delete..."
msgstr ""
-#: git-gui.sh:2082
+#: git-gui.sh:2422
msgid "Reset..."
msgstr ""
-#: git-gui.sh:2094 git-gui.sh:2491
+#: git-gui.sh:2432
+msgid "Done"
+msgstr ""
+
+#: git-gui.sh:2434
+msgid "Commit@@verb"
+msgstr ""
+
+#: git-gui.sh:2443 git-gui.sh:2864
msgid "New Commit"
msgstr ""
-#: git-gui.sh:2102 git-gui.sh:2498
+#: git-gui.sh:2451 git-gui.sh:2871
msgid "Amend Last Commit"
msgstr ""
-#: git-gui.sh:2111 git-gui.sh:2458 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2461 git-gui.sh:2825 lib/remote_branch_delete.tcl:99
msgid "Rescan"
msgstr ""
-#: git-gui.sh:2117
+#: git-gui.sh:2467
msgid "Stage To Commit"
msgstr ""
-#: git-gui.sh:2123
+#: git-gui.sh:2473
msgid "Stage Changed Files To Commit"
msgstr ""
-#: git-gui.sh:2129
+#: git-gui.sh:2479
msgid "Unstage From Commit"
msgstr ""
-#: git-gui.sh:2134 lib/index.tcl:395
+#: git-gui.sh:2484 lib/index.tcl:410
msgid "Revert Changes"
msgstr ""
-#: git-gui.sh:2141 git-gui.sh:2702
+#: git-gui.sh:2491 git-gui.sh:3069
msgid "Show Less Context"
msgstr ""
-#: git-gui.sh:2145 git-gui.sh:2706
+#: git-gui.sh:2495 git-gui.sh:3073
msgid "Show More Context"
msgstr ""
-#: git-gui.sh:2151 git-gui.sh:2470 git-gui.sh:2569
+#: git-gui.sh:2502 git-gui.sh:2838 git-gui.sh:2947
msgid "Sign Off"
msgstr ""
-#: git-gui.sh:2155 git-gui.sh:2474
-msgid "Commit@@verb"
-msgstr ""
-
-#: git-gui.sh:2166
+#: git-gui.sh:2518
msgid "Local Merge..."
msgstr ""
-#: git-gui.sh:2171
+#: git-gui.sh:2523
msgid "Abort Merge..."
msgstr ""
-#: git-gui.sh:2183
+#: git-gui.sh:2535 git-gui.sh:2575
+msgid "Add..."
+msgstr ""
+
+#: git-gui.sh:2539
msgid "Push..."
msgstr ""
-#: git-gui.sh:2197 git-gui.sh:2219 lib/about.tcl:14
-#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
+#: git-gui.sh:2543
+msgid "Delete Branch..."
+msgstr ""
+
+#: git-gui.sh:2553 git-gui.sh:2589 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:53
#, tcl-format
msgid "About %s"
msgstr ""
-#: git-gui.sh:2201
+#: git-gui.sh:2557
msgid "Preferences..."
msgstr ""
-#: git-gui.sh:2209 git-gui.sh:2740
+#: git-gui.sh:2565 git-gui.sh:3115
msgid "Options..."
msgstr ""
-#: git-gui.sh:2215 lib/choose_repository.tcl:47
+#: git-gui.sh:2576
+msgid "Remove..."
+msgstr ""
+
+#: git-gui.sh:2585 lib/choose_repository.tcl:50
msgid "Help"
msgstr ""
-#: git-gui.sh:2256
+#: git-gui.sh:2611
msgid "Online Documentation"
msgstr ""
-#: git-gui.sh:2340
+#: git-gui.sh:2614 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56
+msgid "Show SSH Key"
+msgstr ""
+
+#: git-gui.sh:2707
#, tcl-format
msgid "fatal: cannot stat path %s: No such file or directory"
msgstr ""
-#: git-gui.sh:2373
+#: git-gui.sh:2740
msgid "Current Branch:"
msgstr ""
-#: git-gui.sh:2394
+#: git-gui.sh:2761
msgid "Staged Changes (Will Commit)"
msgstr ""
-#: git-gui.sh:2414
+#: git-gui.sh:2781
msgid "Unstaged Changes"
msgstr ""
-#: git-gui.sh:2464
+#: git-gui.sh:2831
msgid "Stage Changed"
msgstr ""
-#: git-gui.sh:2480 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2850 lib/transport.tcl:93 lib/transport.tcl:182
msgid "Push"
msgstr ""
-#: git-gui.sh:2510
+#: git-gui.sh:2885
msgid "Initial Commit Message:"
msgstr ""
-#: git-gui.sh:2511
+#: git-gui.sh:2886
msgid "Amended Commit Message:"
msgstr ""
-#: git-gui.sh:2512
+#: git-gui.sh:2887
msgid "Amended Initial Commit Message:"
msgstr ""
-#: git-gui.sh:2513
+#: git-gui.sh:2888
msgid "Amended Merge Commit Message:"
msgstr ""
-#: git-gui.sh:2514
+#: git-gui.sh:2889
msgid "Merge Commit Message:"
msgstr ""
-#: git-gui.sh:2515
+#: git-gui.sh:2890
msgid "Commit Message:"
msgstr ""
-#: git-gui.sh:2561 git-gui.sh:2723 lib/console.tcl:73
+#: git-gui.sh:2939 git-gui.sh:3090 lib/console.tcl:73
msgid "Copy All"
msgstr ""
-#: git-gui.sh:2585 lib/blame.tcl:100
+#: git-gui.sh:2963 lib/blame.tcl:104
msgid "File:"
msgstr ""
-#: git-gui.sh:2691
+#: git-gui.sh:3078
+msgid "Refresh"
+msgstr ""
+
+#: git-gui.sh:3099
+msgid "Decrease Font Size"
+msgstr ""
+
+#: git-gui.sh:3103
+msgid "Increase Font Size"
+msgstr ""
+
+#: git-gui.sh:3111 lib/blame.tcl:281
+msgid "Encoding"
+msgstr ""
+
+#: git-gui.sh:3122
msgid "Apply/Reverse Hunk"
msgstr ""
-#: git-gui.sh:2696
+#: git-gui.sh:3127
msgid "Apply/Reverse Line"
msgstr ""
-#: git-gui.sh:2711
-msgid "Refresh"
+#: git-gui.sh:3137
+msgid "Run Merge Tool"
msgstr ""
-#: git-gui.sh:2732
-msgid "Decrease Font Size"
+#: git-gui.sh:3142
+msgid "Use Remote Version"
msgstr ""
-#: git-gui.sh:2736
-msgid "Increase Font Size"
+#: git-gui.sh:3146
+msgid "Use Local Version"
+msgstr ""
+
+#: git-gui.sh:3150
+msgid "Revert To Base"
msgstr ""
-#: git-gui.sh:2747
+#: git-gui.sh:3169
msgid "Unstage Hunk From Commit"
msgstr ""
-#: git-gui.sh:2748
+#: git-gui.sh:3170
msgid "Unstage Line From Commit"
msgstr ""
-#: git-gui.sh:2750
+#: git-gui.sh:3172
msgid "Stage Hunk For Commit"
msgstr ""
-#: git-gui.sh:2751
+#: git-gui.sh:3173
msgid "Stage Line For Commit"
msgstr ""
-#: git-gui.sh:2771
+#: git-gui.sh:3196
msgid "Initializing..."
msgstr ""
-#: git-gui.sh:2876
+#: git-gui.sh:3301
#, tcl-format
msgid ""
"Possible environment issues exist.\n"
@@ -437,14 +502,14 @@ msgid ""
"\n"
msgstr ""
-#: git-gui.sh:2906
+#: git-gui.sh:3331
msgid ""
"\n"
"This is due to a known issue with the\n"
"Tcl binary distributed by Cygwin."
msgstr ""
-#: git-gui.sh:2911
+#: git-gui.sh:3336
#, tcl-format
msgid ""
"\n"
@@ -459,80 +524,108 @@ msgstr ""
msgid "git-gui - a graphical user interface for Git."
msgstr ""
-#: lib/blame.tcl:70
+#: lib/blame.tcl:72
msgid "File Viewer"
msgstr ""
-#: lib/blame.tcl:74
+#: lib/blame.tcl:78
msgid "Commit:"
msgstr ""
-#: lib/blame.tcl:257
+#: lib/blame.tcl:271
msgid "Copy Commit"
msgstr ""
-#: lib/blame.tcl:260
+#: lib/blame.tcl:275
+msgid "Find Text..."
+msgstr ""
+
+#: lib/blame.tcl:284
msgid "Do Full Copy Detection"
msgstr ""
-#: lib/blame.tcl:388
+#: lib/blame.tcl:288
+msgid "Show History Context"
+msgstr ""
+
+#: lib/blame.tcl:291
+msgid "Blame Parent Commit"
+msgstr ""
+
+#: lib/blame.tcl:450
#, tcl-format
msgid "Reading %s..."
msgstr ""
-#: lib/blame.tcl:492
+#: lib/blame.tcl:557
msgid "Loading copy/move tracking annotations..."
msgstr ""
-#: lib/blame.tcl:512
+#: lib/blame.tcl:577
msgid "lines annotated"
msgstr ""
-#: lib/blame.tcl:704
+#: lib/blame.tcl:769
msgid "Loading original location annotations..."
msgstr ""
-#: lib/blame.tcl:707
+#: lib/blame.tcl:772
msgid "Annotation complete."
msgstr ""
-#: lib/blame.tcl:737
+#: lib/blame.tcl:802
msgid "Busy"
msgstr ""
-#: lib/blame.tcl:738
+#: lib/blame.tcl:803
msgid "Annotation process is already running."
msgstr ""
-#: lib/blame.tcl:777
+#: lib/blame.tcl:842
msgid "Running thorough copy detection..."
msgstr ""
-#: lib/blame.tcl:827
+#: lib/blame.tcl:910
msgid "Loading annotation..."
msgstr ""
-#: lib/blame.tcl:883
+#: lib/blame.tcl:964
msgid "Author:"
msgstr ""
-#: lib/blame.tcl:887
+#: lib/blame.tcl:968
msgid "Committer:"
msgstr ""
-#: lib/blame.tcl:892
+#: lib/blame.tcl:973
msgid "Original File:"
msgstr ""
-#: lib/blame.tcl:1006
+#: lib/blame.tcl:1021
+msgid "Cannot find HEAD commit:"
+msgstr ""
+
+#: lib/blame.tcl:1076
+msgid "Cannot find parent commit:"
+msgstr ""
+
+#: lib/blame.tcl:1091
+msgid "Unable to display parent"
+msgstr ""
+
+#: lib/blame.tcl:1092 lib/diff.tcl:297
+msgid "Error loading diff:"
+msgstr ""
+
+#: lib/blame.tcl:1232
msgid "Originally By:"
msgstr ""
-#: lib/blame.tcl:1012
+#: lib/blame.tcl:1238
msgid "In File:"
msgstr ""
-#: lib/blame.tcl:1017
+#: lib/blame.tcl:1243
msgid "Copied Or Moved Here By:"
msgstr ""
@@ -546,16 +639,18 @@ msgstr ""
#: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
-#: lib/checkout_op.tcl:544 lib/choose_font.tcl:43 lib/merge.tcl:171
-#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/checkout_op.tcl:544 lib/choose_font.tcl:43 lib/merge.tcl:172
+#: lib/option.tcl:125 lib/remote_add.tcl:32 lib/remote_branch_delete.tcl:42
+#: lib/tools_dlg.tcl:40 lib/tools_dlg.tcl:204 lib/tools_dlg.tcl:352
+#: lib/transport.tcl:97
msgid "Cancel"
msgstr ""
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287 lib/tools_dlg.tcl:328
msgid "Revision"
msgstr ""
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:244
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:280
msgid "Options"
msgstr ""
@@ -575,7 +670,7 @@ msgstr ""
msgid "Create New Branch"
msgstr ""
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:377
msgid "Create"
msgstr ""
@@ -583,7 +678,7 @@ msgstr ""
msgid "Branch Name"
msgstr ""
-#: lib/branch_create.tcl:43
+#: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50
msgid "Name:"
msgstr ""
@@ -723,9 +818,9 @@ msgstr ""
msgid "Browse Branch Files"
msgstr ""
-#: lib/browser.tcl:278 lib/choose_repository.tcl:387
-#: lib/choose_repository.tcl:472 lib/choose_repository.tcl:482
-#: lib/choose_repository.tcl:985
+#: lib/browser.tcl:278 lib/choose_repository.tcl:394
+#: lib/choose_repository.tcl:480 lib/choose_repository.tcl:491
+#: lib/choose_repository.tcl:995
msgid "Browse"
msgstr ""
@@ -740,6 +835,7 @@ msgid "fatal: Cannot resolve %s"
msgstr ""
#: lib/checkout_op.tcl:145 lib/console.tcl:81 lib/database.tcl:31
+#: lib/sshkey.tcl:53
msgid "Close"
msgstr ""
@@ -836,7 +932,7 @@ msgstr ""
msgid "Reset '%s'?"
msgstr ""
-#: lib/checkout_op.tcl:532 lib/merge.tcl:163
+#: lib/checkout_op.tcl:532 lib/merge.tcl:164 lib/tools_dlg.tcl:343
msgid "Visualize"
msgstr ""
@@ -877,221 +973,225 @@ msgstr ""
msgid "Git Gui"
msgstr ""
-#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
+#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:382
msgid "Create New Repository"
msgstr ""
-#: lib/choose_repository.tcl:87
+#: lib/choose_repository.tcl:93
msgid "New..."
msgstr ""
-#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:458
+#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:465
msgid "Clone Existing Repository"
msgstr ""
-#: lib/choose_repository.tcl:100
+#: lib/choose_repository.tcl:106
msgid "Clone..."
msgstr ""
-#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:974
+#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:983
msgid "Open Existing Repository"
msgstr ""
-#: lib/choose_repository.tcl:113
+#: lib/choose_repository.tcl:119
msgid "Open..."
msgstr ""
-#: lib/choose_repository.tcl:126
+#: lib/choose_repository.tcl:132
msgid "Recent Repositories"
msgstr ""
-#: lib/choose_repository.tcl:132
+#: lib/choose_repository.tcl:138
msgid "Open Recent Repository:"
msgstr ""
-#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
-#: lib/choose_repository.tcl:310
+#: lib/choose_repository.tcl:302 lib/choose_repository.tcl:309
+#: lib/choose_repository.tcl:316
#, tcl-format
msgid "Failed to create repository %s:"
msgstr ""
-#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:387
msgid "Directory:"
msgstr ""
-#: lib/choose_repository.tcl:410 lib/choose_repository.tcl:535
-#: lib/choose_repository.tcl:1007
+#: lib/choose_repository.tcl:417 lib/choose_repository.tcl:544
+#: lib/choose_repository.tcl:1017
msgid "Git Repository"
msgstr ""
-#: lib/choose_repository.tcl:435
+#: lib/choose_repository.tcl:442
#, tcl-format
msgid "Directory %s already exists."
msgstr ""
-#: lib/choose_repository.tcl:439
+#: lib/choose_repository.tcl:446
#, tcl-format
msgid "File %s already exists."
msgstr ""
-#: lib/choose_repository.tcl:453
+#: lib/choose_repository.tcl:460
msgid "Clone"
msgstr ""
-#: lib/choose_repository.tcl:466
-msgid "URL:"
+#: lib/choose_repository.tcl:473
+msgid "Source Location:"
msgstr ""
-#: lib/choose_repository.tcl:487
+#: lib/choose_repository.tcl:484
+msgid "Target Directory:"
+msgstr ""
+
+#: lib/choose_repository.tcl:496
msgid "Clone Type:"
msgstr ""
-#: lib/choose_repository.tcl:493
+#: lib/choose_repository.tcl:502
msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
msgstr ""
-#: lib/choose_repository.tcl:499
+#: lib/choose_repository.tcl:508
msgid "Full Copy (Slower, Redundant Backup)"
msgstr ""
-#: lib/choose_repository.tcl:505
+#: lib/choose_repository.tcl:514
msgid "Shared (Fastest, Not Recommended, No Backup)"
msgstr ""
-#: lib/choose_repository.tcl:541 lib/choose_repository.tcl:588
-#: lib/choose_repository.tcl:734 lib/choose_repository.tcl:804
-#: lib/choose_repository.tcl:1013 lib/choose_repository.tcl:1021
+#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
+#: lib/choose_repository.tcl:743 lib/choose_repository.tcl:813
+#: lib/choose_repository.tcl:1023 lib/choose_repository.tcl:1031
#, tcl-format
msgid "Not a Git repository: %s"
msgstr ""
-#: lib/choose_repository.tcl:577
+#: lib/choose_repository.tcl:586
msgid "Standard only available for local repository."
msgstr ""
-#: lib/choose_repository.tcl:581
+#: lib/choose_repository.tcl:590
msgid "Shared only available for local repository."
msgstr ""
-#: lib/choose_repository.tcl:602
+#: lib/choose_repository.tcl:611
#, tcl-format
msgid "Location %s already exists."
msgstr ""
-#: lib/choose_repository.tcl:613
+#: lib/choose_repository.tcl:622
msgid "Failed to configure origin"
msgstr ""
-#: lib/choose_repository.tcl:625
+#: lib/choose_repository.tcl:634
msgid "Counting objects"
msgstr ""
-#: lib/choose_repository.tcl:626
+#: lib/choose_repository.tcl:635
msgid "buckets"
msgstr ""
-#: lib/choose_repository.tcl:650
+#: lib/choose_repository.tcl:659
#, tcl-format
msgid "Unable to copy objects/info/alternates: %s"
msgstr ""
-#: lib/choose_repository.tcl:686
+#: lib/choose_repository.tcl:695
#, tcl-format
msgid "Nothing to clone from %s."
msgstr ""
-#: lib/choose_repository.tcl:688 lib/choose_repository.tcl:902
-#: lib/choose_repository.tcl:914
+#: lib/choose_repository.tcl:697 lib/choose_repository.tcl:911
+#: lib/choose_repository.tcl:923
msgid "The 'master' branch has not been initialized."
msgstr ""
-#: lib/choose_repository.tcl:701
+#: lib/choose_repository.tcl:710
msgid "Hardlinks are unavailable. Falling back to copying."
msgstr ""
-#: lib/choose_repository.tcl:713
+#: lib/choose_repository.tcl:722
#, tcl-format
msgid "Cloning from %s"
msgstr ""
-#: lib/choose_repository.tcl:744
+#: lib/choose_repository.tcl:753
msgid "Copying objects"
msgstr ""
-#: lib/choose_repository.tcl:745
+#: lib/choose_repository.tcl:754
msgid "KiB"
msgstr ""
-#: lib/choose_repository.tcl:769
+#: lib/choose_repository.tcl:778
#, tcl-format
msgid "Unable to copy object: %s"
msgstr ""
-#: lib/choose_repository.tcl:779
+#: lib/choose_repository.tcl:788
msgid "Linking objects"
msgstr ""
-#: lib/choose_repository.tcl:780
+#: lib/choose_repository.tcl:789
msgid "objects"
msgstr ""
-#: lib/choose_repository.tcl:788
+#: lib/choose_repository.tcl:797
#, tcl-format
msgid "Unable to hardlink object: %s"
msgstr ""
-#: lib/choose_repository.tcl:843
+#: lib/choose_repository.tcl:852
msgid "Cannot fetch branches and objects. See console output for details."
msgstr ""
-#: lib/choose_repository.tcl:854
+#: lib/choose_repository.tcl:863
msgid "Cannot fetch tags. See console output for details."
msgstr ""
-#: lib/choose_repository.tcl:878
+#: lib/choose_repository.tcl:887
msgid "Cannot determine HEAD. See console output for details."
msgstr ""
-#: lib/choose_repository.tcl:887
+#: lib/choose_repository.tcl:896
#, tcl-format
msgid "Unable to cleanup %s"
msgstr ""
-#: lib/choose_repository.tcl:893
+#: lib/choose_repository.tcl:902
msgid "Clone failed."
msgstr ""
-#: lib/choose_repository.tcl:900
+#: lib/choose_repository.tcl:909
msgid "No default branch obtained."
msgstr ""
-#: lib/choose_repository.tcl:911
+#: lib/choose_repository.tcl:920
#, tcl-format
msgid "Cannot resolve %s as a commit."
msgstr ""
-#: lib/choose_repository.tcl:923
+#: lib/choose_repository.tcl:932
msgid "Creating working directory"
msgstr ""
-#: lib/choose_repository.tcl:924 lib/index.tcl:65 lib/index.tcl:127
-#: lib/index.tcl:193
+#: lib/choose_repository.tcl:933 lib/index.tcl:65 lib/index.tcl:128
+#: lib/index.tcl:196
msgid "files"
msgstr ""
-#: lib/choose_repository.tcl:953
+#: lib/choose_repository.tcl:962
msgid "Initial file checkout failed."
msgstr ""
-#: lib/choose_repository.tcl:969
+#: lib/choose_repository.tcl:978
msgid "Open"
msgstr ""
-#: lib/choose_repository.tcl:979
+#: lib/choose_repository.tcl:988
msgid "Repository:"
msgstr ""
-#: lib/choose_repository.tcl:1027
+#: lib/choose_repository.tcl:1037
#, tcl-format
msgid "Failed to open repository %s:"
msgstr ""
@@ -1176,7 +1276,7 @@ msgid ""
"The rescan will be automatically started now.\n"
msgstr ""
-#: lib/commit.tcl:154
+#: lib/commit.tcl:156
#, tcl-format
msgid ""
"Unmerged files cannot be committed.\n"
@@ -1185,7 +1285,7 @@ msgid ""
"before committing.\n"
msgstr ""
-#: lib/commit.tcl:162
+#: lib/commit.tcl:164
#, tcl-format
msgid ""
"Unknown file state %s detected.\n"
@@ -1193,14 +1293,14 @@ msgid ""
"File %s cannot be committed by this program.\n"
msgstr ""
-#: lib/commit.tcl:170
+#: lib/commit.tcl:172
msgid ""
"No changes to commit.\n"
"\n"
"You must stage at least 1 file before you can commit.\n"
msgstr ""
-#: lib/commit.tcl:183
+#: lib/commit.tcl:187
msgid ""
"Please supply a commit message.\n"
"\n"
@@ -1211,45 +1311,45 @@ msgid ""
"- Remaining lines: Describe why this change is good.\n"
msgstr ""
-#: lib/commit.tcl:207
+#: lib/commit.tcl:211
#, tcl-format
msgid "warning: Tcl does not support encoding '%s'."
msgstr ""
-#: lib/commit.tcl:221
+#: lib/commit.tcl:227
msgid "Calling pre-commit hook..."
msgstr ""
-#: lib/commit.tcl:236
+#: lib/commit.tcl:242
msgid "Commit declined by pre-commit hook."
msgstr ""
-#: lib/commit.tcl:259
+#: lib/commit.tcl:265
msgid "Calling commit-msg hook..."
msgstr ""
-#: lib/commit.tcl:274
+#: lib/commit.tcl:280
msgid "Commit declined by commit-msg hook."
msgstr ""
-#: lib/commit.tcl:287
+#: lib/commit.tcl:293
msgid "Committing changes..."
msgstr ""
-#: lib/commit.tcl:303
+#: lib/commit.tcl:309
msgid "write-tree failed:"
msgstr ""
-#: lib/commit.tcl:304 lib/commit.tcl:348 lib/commit.tcl:368
+#: lib/commit.tcl:310 lib/commit.tcl:354 lib/commit.tcl:374
msgid "Commit failed."
msgstr ""
-#: lib/commit.tcl:321
+#: lib/commit.tcl:327
#, tcl-format
msgid "Commit %s appears to be corrupt"
msgstr ""
-#: lib/commit.tcl:326
+#: lib/commit.tcl:332
msgid ""
"No changes to commit.\n"
"\n"
@@ -1258,19 +1358,19 @@ msgid ""
"A rescan will be automatically started now.\n"
msgstr ""
-#: lib/commit.tcl:333
+#: lib/commit.tcl:339
msgid "No changes to commit."
msgstr ""
-#: lib/commit.tcl:347
+#: lib/commit.tcl:353
msgid "commit-tree failed:"
msgstr ""
-#: lib/commit.tcl:367
+#: lib/commit.tcl:373
msgid "update-ref failed:"
msgstr ""
-#: lib/commit.tcl:454
+#: lib/commit.tcl:461
#, tcl-format
msgid "Created commit %s: %s"
msgstr ""
@@ -1339,7 +1439,7 @@ msgstr ""
msgid "Invalid date from Git: %s"
msgstr ""
-#: lib/diff.tcl:44
+#: lib/diff.tcl:59
#, tcl-format
msgid ""
"No differences detected.\n"
@@ -1353,48 +1453,92 @@ msgid ""
"the same state."
msgstr ""
-#: lib/diff.tcl:83
+#: lib/diff.tcl:99
#, tcl-format
msgid "Loading diff of %s..."
msgstr ""
-#: lib/diff.tcl:116 lib/diff.tcl:190
+#: lib/diff.tcl:120
+msgid ""
+"LOCAL: deleted\n"
+"REMOTE:\n"
+msgstr ""
+
+#: lib/diff.tcl:125
+msgid ""
+"REMOTE: deleted\n"
+"LOCAL:\n"
+msgstr ""
+
+#: lib/diff.tcl:132
+msgid "LOCAL:\n"
+msgstr ""
+
+#: lib/diff.tcl:135
+msgid "REMOTE:\n"
+msgstr ""
+
+#: lib/diff.tcl:197 lib/diff.tcl:296
#, tcl-format
msgid "Unable to display %s"
msgstr ""
-#: lib/diff.tcl:117
+#: lib/diff.tcl:198
msgid "Error loading file:"
msgstr ""
-#: lib/diff.tcl:124
+#: lib/diff.tcl:205
msgid "Git Repository (subproject)"
msgstr ""
-#: lib/diff.tcl:136
+#: lib/diff.tcl:217
msgid "* Binary file (not showing content)."
msgstr ""
-#: lib/diff.tcl:191
-msgid "Error loading diff:"
+#: lib/diff.tcl:222
+#, tcl-format
+msgid ""
+"* Untracked file is %d bytes.\n"
+"* Showing only first %d bytes.\n"
+msgstr ""
+
+#: lib/diff.tcl:228
+#, tcl-format
+msgid ""
+"\n"
+"* Untracked file clipped here by %s.\n"
+"* To see the entire file, use an external editor.\n"
msgstr ""
-#: lib/diff.tcl:313
+#: lib/diff.tcl:436
msgid "Failed to unstage selected hunk."
msgstr ""
-#: lib/diff.tcl:320
+#: lib/diff.tcl:443
msgid "Failed to stage selected hunk."
msgstr ""
-#: lib/diff.tcl:386
+#: lib/diff.tcl:509
msgid "Failed to unstage selected line."
msgstr ""
-#: lib/diff.tcl:394
+#: lib/diff.tcl:517
msgid "Failed to stage selected line."
msgstr ""
+#: lib/encoding.tcl:443
+msgid "Default"
+msgstr ""
+
+#: lib/encoding.tcl:448
+#, tcl-format
+msgid "System (%s)"
+msgstr ""
+
+#: lib/encoding.tcl:459 lib/encoding.tcl:465
+msgid "Other"
+msgstr ""
+
#: lib/error.tcl:20 lib/error.tcl:114
msgid "error"
msgstr ""
@@ -1429,38 +1573,47 @@ msgstr ""
msgid "Unlock Index"
msgstr ""
-#: lib/index.tcl:282
+#: lib/index.tcl:287
#, tcl-format
msgid "Unstaging %s from commit"
msgstr ""
-#: lib/index.tcl:313
+#: lib/index.tcl:326
msgid "Ready to commit."
msgstr ""
-#: lib/index.tcl:326
+#: lib/index.tcl:339
#, tcl-format
msgid "Adding %s"
msgstr ""
-#: lib/index.tcl:381
+#: lib/index.tcl:396
#, tcl-format
msgid "Revert changes in file %s?"
msgstr ""
-#: lib/index.tcl:383
+#: lib/index.tcl:398
#, tcl-format
msgid "Revert changes in these %i files?"
msgstr ""
-#: lib/index.tcl:391
+#: lib/index.tcl:406
msgid "Any unstaged changes will be permanently lost by the revert."
msgstr ""
-#: lib/index.tcl:394
+#: lib/index.tcl:409
msgid "Do Nothing"
msgstr ""
+#: lib/index.tcl:427
+msgid "Reverting selected files"
+msgstr ""
+
+#: lib/index.tcl:431
+#, tcl-format
+msgid "Reverting %s"
+msgstr ""
+
#: lib/merge.tcl:13
msgid ""
"Cannot merge while amending.\n"
@@ -1478,7 +1631,7 @@ msgid ""
"The rescan will be automatically started now.\n"
msgstr ""
-#: lib/merge.tcl:44
+#: lib/merge.tcl:45
#, tcl-format
msgid ""
"You are in the middle of a conflicted merge.\n"
@@ -1489,7 +1642,7 @@ msgid ""
"merge. Only then can you begin another merge.\n"
msgstr ""
-#: lib/merge.tcl:54
+#: lib/merge.tcl:55
#, tcl-format
msgid ""
"You are in the middle of a change.\n"
@@ -1500,41 +1653,41 @@ msgid ""
"will help you abort a failed merge, should the need arise.\n"
msgstr ""
-#: lib/merge.tcl:106
+#: lib/merge.tcl:107
#, tcl-format
msgid "%s of %s"
msgstr ""
-#: lib/merge.tcl:119
+#: lib/merge.tcl:120
#, tcl-format
msgid "Merging %s and %s..."
msgstr ""
-#: lib/merge.tcl:130
+#: lib/merge.tcl:131
msgid "Merge completed successfully."
msgstr ""
-#: lib/merge.tcl:132
+#: lib/merge.tcl:133
msgid "Merge failed. Conflict resolution is required."
msgstr ""
-#: lib/merge.tcl:157
+#: lib/merge.tcl:158
#, tcl-format
msgid "Merge Into %s"
msgstr ""
-#: lib/merge.tcl:176
+#: lib/merge.tcl:177
msgid "Revision To Merge"
msgstr ""
-#: lib/merge.tcl:211
+#: lib/merge.tcl:212
msgid ""
"Cannot abort while amending.\n"
"\n"
"You must finish amending this commit.\n"
msgstr ""
-#: lib/merge.tcl:221
+#: lib/merge.tcl:222
msgid ""
"Abort merge?\n"
"\n"
@@ -1543,7 +1696,7 @@ msgid ""
"Continue with aborting the current merge?"
msgstr ""
-#: lib/merge.tcl:227
+#: lib/merge.tcl:228
msgid ""
"Reset changes?\n"
"\n"
@@ -1552,130 +1705,312 @@ msgid ""
"Continue with resetting the current changes?"
msgstr ""
-#: lib/merge.tcl:238
+#: lib/merge.tcl:239
msgid "Aborting"
msgstr ""
-#: lib/merge.tcl:238
+#: lib/merge.tcl:239
msgid "files reset"
msgstr ""
-#: lib/merge.tcl:266
+#: lib/merge.tcl:267
msgid "Abort failed."
msgstr ""
-#: lib/merge.tcl:268
+#: lib/merge.tcl:269
msgid "Abort completed. Ready."
msgstr ""
-#: lib/option.tcl:95
+#: lib/mergetool.tcl:8
+msgid "Force resolution to the base version?"
+msgstr ""
+
+#: lib/mergetool.tcl:9
+msgid "Force resolution to this branch?"
+msgstr ""
+
+#: lib/mergetool.tcl:10
+msgid "Force resolution to the other branch?"
+msgstr ""
+
+#: lib/mergetool.tcl:14
+#, tcl-format
+msgid ""
+"Note that the diff shows only conflicting changes.\n"
+"\n"
+"%s will be overwritten.\n"
+"\n"
+"This operation can be undone only by restarting the merge."
+msgstr ""
+
+#: lib/mergetool.tcl:45
+#, tcl-format
+msgid "File %s seems to have unresolved conflicts, still stage?"
+msgstr ""
+
+#: lib/mergetool.tcl:60
+#, tcl-format
+msgid "Adding resolution for %s"
+msgstr ""
+
+#: lib/mergetool.tcl:141
+msgid "Cannot resolve deletion or link conflicts using a tool"
+msgstr ""
+
+#: lib/mergetool.tcl:146
+msgid "Conflict file does not exist"
+msgstr ""
+
+#: lib/mergetool.tcl:264
+#, tcl-format
+msgid "Not a GUI merge tool: '%s'"
+msgstr ""
+
+#: lib/mergetool.tcl:268
+#, tcl-format
+msgid "Unsupported merge tool '%s'"
+msgstr ""
+
+#: lib/mergetool.tcl:303
+msgid "Merge tool is already running, terminate it?"
+msgstr ""
+
+#: lib/mergetool.tcl:323
+#, tcl-format
+msgid ""
+"Error retrieving versions:\n"
+"%s"
+msgstr ""
+
+#: lib/mergetool.tcl:343
+#, tcl-format
+msgid ""
+"Could not start the merge tool:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: lib/mergetool.tcl:347
+msgid "Running merge tool..."
+msgstr ""
+
+#: lib/mergetool.tcl:375 lib/mergetool.tcl:383
+msgid "Merge tool failed."
+msgstr ""
+
+#: lib/option.tcl:11
+#, tcl-format
+msgid "Invalid global encoding '%s'"
+msgstr ""
+
+#: lib/option.tcl:19
+#, tcl-format
+msgid "Invalid repo encoding '%s'"
+msgstr ""
+
+#: lib/option.tcl:117
msgid "Restore Defaults"
msgstr ""
-#: lib/option.tcl:99
+#: lib/option.tcl:121
msgid "Save"
msgstr ""
-#: lib/option.tcl:109
+#: lib/option.tcl:131
#, tcl-format
msgid "%s Repository"
msgstr ""
-#: lib/option.tcl:110
+#: lib/option.tcl:132
msgid "Global (All Repositories)"
msgstr ""
-#: lib/option.tcl:116
+#: lib/option.tcl:138
msgid "User Name"
msgstr ""
-#: lib/option.tcl:117
+#: lib/option.tcl:139
msgid "Email Address"
msgstr ""
-#: lib/option.tcl:119
+#: lib/option.tcl:141
msgid "Summarize Merge Commits"
msgstr ""
-#: lib/option.tcl:120
+#: lib/option.tcl:142
msgid "Merge Verbosity"
msgstr ""
-#: lib/option.tcl:121
+#: lib/option.tcl:143
msgid "Show Diffstat After Merge"
msgstr ""
-#: lib/option.tcl:123
+#: lib/option.tcl:144
+msgid "Use Merge Tool"
+msgstr ""
+
+#: lib/option.tcl:146
msgid "Trust File Modification Timestamps"
msgstr ""
-#: lib/option.tcl:124
+#: lib/option.tcl:147
msgid "Prune Tracking Branches During Fetch"
msgstr ""
-#: lib/option.tcl:125
+#: lib/option.tcl:148
msgid "Match Tracking Branches"
msgstr ""
-#: lib/option.tcl:126
+#: lib/option.tcl:149
msgid "Blame Copy Only On Changed Files"
msgstr ""
-#: lib/option.tcl:127
+#: lib/option.tcl:150
msgid "Minimum Letters To Blame Copy On"
msgstr ""
-#: lib/option.tcl:128
+#: lib/option.tcl:151
+msgid "Blame History Context Radius (days)"
+msgstr ""
+
+#: lib/option.tcl:152
msgid "Number of Diff Context Lines"
msgstr ""
-#: lib/option.tcl:129
+#: lib/option.tcl:153
msgid "Commit Message Text Width"
msgstr ""
-#: lib/option.tcl:130
+#: lib/option.tcl:154
msgid "New Branch Name Template"
msgstr ""
-#: lib/option.tcl:194
+#: lib/option.tcl:155
+msgid "Default File Contents Encoding"
+msgstr ""
+
+#: lib/option.tcl:203
+msgid "Change"
+msgstr ""
+
+#: lib/option.tcl:230
msgid "Spelling Dictionary:"
msgstr ""
-#: lib/option.tcl:218
+#: lib/option.tcl:254
msgid "Change Font"
msgstr ""
-#: lib/option.tcl:222
+#: lib/option.tcl:258
#, tcl-format
msgid "Choose %s"
msgstr ""
-#: lib/option.tcl:228
+#: lib/option.tcl:264
msgid "pt."
msgstr ""
-#: lib/option.tcl:242
+#: lib/option.tcl:278
msgid "Preferences"
msgstr ""
-#: lib/option.tcl:277
+#: lib/option.tcl:314
msgid "Failed to completely save options:"
msgstr ""
-#: lib/remote.tcl:165
+#: lib/remote.tcl:163
+msgid "Remove Remote"
+msgstr ""
+
+#: lib/remote.tcl:168
msgid "Prune from"
msgstr ""
-#: lib/remote.tcl:170
+#: lib/remote.tcl:173
msgid "Fetch from"
msgstr ""
-#: lib/remote.tcl:213
+#: lib/remote.tcl:215
msgid "Push to"
msgstr ""
+#: lib/remote_add.tcl:19
+msgid "Add Remote"
+msgstr ""
+
+#: lib/remote_add.tcl:24
+msgid "Add New Remote"
+msgstr ""
+
+#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36
+msgid "Add"
+msgstr ""
+
+#: lib/remote_add.tcl:37
+msgid "Remote Details"
+msgstr ""
+
+#: lib/remote_add.tcl:50
+msgid "Location:"
+msgstr ""
+
+#: lib/remote_add.tcl:62
+msgid "Further Action"
+msgstr ""
+
+#: lib/remote_add.tcl:65
+msgid "Fetch Immediately"
+msgstr ""
+
+#: lib/remote_add.tcl:71
+msgid "Initialize Remote Repository and Push"
+msgstr ""
+
+#: lib/remote_add.tcl:77
+msgid "Do Nothing Else Now"
+msgstr ""
+
+#: lib/remote_add.tcl:101
+msgid "Please supply a remote name."
+msgstr ""
+
+#: lib/remote_add.tcl:114
+#, tcl-format
+msgid "'%s' is not an acceptable remote name."
+msgstr ""
+
+#: lib/remote_add.tcl:125
+#, tcl-format
+msgid "Failed to add remote '%s' of location '%s'."
+msgstr ""
+
+#: lib/remote_add.tcl:133 lib/transport.tcl:6
+#, tcl-format
+msgid "fetch %s"
+msgstr ""
+
+#: lib/remote_add.tcl:134
+#, tcl-format
+msgid "Fetching the %s"
+msgstr ""
+
+#: lib/remote_add.tcl:157
+#, tcl-format
+msgid "Do not know how to initialize repository at location '%s'."
+msgstr ""
+
+#: lib/remote_add.tcl:163 lib/transport.tcl:25 lib/transport.tcl:71
+#, tcl-format
+msgid "push %s"
+msgstr ""
+
+#: lib/remote_add.tcl:164
+#, tcl-format
+msgid "Setting up the %s (at %s)"
+msgstr ""
+
#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34
-msgid "Delete Remote Branch"
+msgid "Delete Branch Remotely"
msgstr ""
#: lib/remote_branch_delete.tcl:47
@@ -1687,7 +2022,7 @@ msgid "Remote:"
msgstr ""
#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:138
-msgid "Arbitrary URL:"
+msgid "Arbitrary Location:"
msgstr ""
#: lib/remote_branch_delete.tcl:84
@@ -1750,6 +2085,22 @@ msgstr ""
msgid "Scanning %s..."
msgstr ""
+#: lib/search.tcl:21
+msgid "Find:"
+msgstr ""
+
+#: lib/search.tcl:23
+msgid "Next"
+msgstr ""
+
+#: lib/search.tcl:24
+msgid "Prev"
+msgstr ""
+
+#: lib/search.tcl:25
+msgid "Case-Sensitive"
+msgstr ""
+
#: lib/shortcut.tcl:20 lib/shortcut.tcl:61
msgid "Cannot write shortcut:"
msgstr ""
@@ -1787,22 +2138,182 @@ msgstr ""
msgid "No Suggestions"
msgstr ""
-#: lib/spellcheck.tcl:387
+#: lib/spellcheck.tcl:388
msgid "Unexpected EOF from spell checker"
msgstr ""
-#: lib/spellcheck.tcl:391
+#: lib/spellcheck.tcl:392
msgid "Spell Checker Failed"
msgstr ""
+#: lib/sshkey.tcl:31
+msgid "No keys found."
+msgstr ""
+
+#: lib/sshkey.tcl:34
+#, tcl-format
+msgid "Found a public key in: %s"
+msgstr ""
+
+#: lib/sshkey.tcl:40
+msgid "Generate Key"
+msgstr ""
+
+#: lib/sshkey.tcl:56
+msgid "Copy To Clipboard"
+msgstr ""
+
+#: lib/sshkey.tcl:70
+msgid "Your OpenSSH Public Key"
+msgstr ""
+
+#: lib/sshkey.tcl:78
+msgid "Generating..."
+msgstr ""
+
+#: lib/sshkey.tcl:84
+#, tcl-format
+msgid ""
+"Could not start ssh-keygen:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: lib/sshkey.tcl:111
+msgid "Generation failed."
+msgstr ""
+
+#: lib/sshkey.tcl:118
+msgid "Generation succeded, but no keys found."
+msgstr ""
+
+#: lib/sshkey.tcl:121
+#, tcl-format
+msgid "Your key is in: %s"
+msgstr ""
+
#: lib/status_bar.tcl:83
#, tcl-format
msgid "%s ... %*i of %*i %s (%3i%%)"
msgstr ""
-#: lib/transport.tcl:6
+#: lib/tools.tcl:75
#, tcl-format
-msgid "fetch %s"
+msgid "Running %s requires a selected file."
+msgstr ""
+
+#: lib/tools.tcl:90
+#, tcl-format
+msgid "Are you sure you want to run %s?"
+msgstr ""
+
+#: lib/tools.tcl:110
+#, tcl-format
+msgid "Tool: %s"
+msgstr ""
+
+#: lib/tools.tcl:111
+#, tcl-format
+msgid "Running: %s"
+msgstr ""
+
+#: lib/tools.tcl:149
+#, tcl-format
+msgid "Tool completed succesfully: %s"
+msgstr ""
+
+#: lib/tools.tcl:151
+#, tcl-format
+msgid "Tool failed: %s"
+msgstr ""
+
+#: lib/tools_dlg.tcl:22
+msgid "Add Tool"
+msgstr ""
+
+#: lib/tools_dlg.tcl:28
+msgid "Add New Tool Command"
+msgstr ""
+
+#: lib/tools_dlg.tcl:33
+msgid "Add globally"
+msgstr ""
+
+#: lib/tools_dlg.tcl:45
+msgid "Tool Details"
+msgstr ""
+
+#: lib/tools_dlg.tcl:48
+msgid "Use '/' separators to create a submenu tree:"
+msgstr ""
+
+#: lib/tools_dlg.tcl:61
+msgid "Command:"
+msgstr ""
+
+#: lib/tools_dlg.tcl:74
+msgid "Show a dialog before running"
+msgstr ""
+
+#: lib/tools_dlg.tcl:80
+msgid "Ask the user to select a revision (sets $REVISION)"
+msgstr ""
+
+#: lib/tools_dlg.tcl:85
+msgid "Ask the user for additional arguments (sets $ARGS)"
+msgstr ""
+
+#: lib/tools_dlg.tcl:92
+msgid "Don't show the command output window"
+msgstr ""
+
+#: lib/tools_dlg.tcl:97
+msgid "Run only if a diff is selected ($FILENAME not empty)"
+msgstr ""
+
+#: lib/tools_dlg.tcl:121
+msgid "Please supply a name for the tool."
+msgstr ""
+
+#: lib/tools_dlg.tcl:129
+#, tcl-format
+msgid "Tool '%s' already exists."
+msgstr ""
+
+#: lib/tools_dlg.tcl:151
+#, tcl-format
+msgid ""
+"Could not add tool:\n"
+"%s"
+msgstr ""
+
+#: lib/tools_dlg.tcl:190
+msgid "Remove Tool"
+msgstr ""
+
+#: lib/tools_dlg.tcl:196
+msgid "Remove Tool Commands"
+msgstr ""
+
+#: lib/tools_dlg.tcl:200
+msgid "Remove"
+msgstr ""
+
+#: lib/tools_dlg.tcl:236
+msgid "(Blue denotes repository-local tools)"
+msgstr ""
+
+#: lib/tools_dlg.tcl:297
+#, tcl-format
+msgid "Run Command: %s"
+msgstr ""
+
+#: lib/tools_dlg.tcl:311
+msgid "Arguments"
+msgstr ""
+
+#: lib/tools_dlg.tcl:348
+msgid "OK"
msgstr ""
#: lib/transport.tcl:7
@@ -1820,11 +2331,6 @@ msgstr ""
msgid "Pruning tracking branches deleted from %s"
msgstr ""
-#: lib/transport.tcl:25 lib/transport.tcl:71
-#, tcl-format
-msgid "push %s"
-msgstr ""
-
#: lib/transport.tcl:26
#, tcl-format
msgid "Pushing changes to %s"