aboutsummaryrefslogtreecommitdiffstats
path: root/gitk-git
diff options
context:
space:
mode:
Diffstat (limited to 'gitk-git')
-rw-r--r--gitk-git/Makefile7
-rwxr-xr-xgitk-git/generate-tcl.sh11
-rwxr-xr-xgitk-git/gitk471
-rw-r--r--gitk-git/meson.build30
-rw-r--r--gitk-git/po/meson.build20
-rw-r--r--gitk-git/po/ta.po1457
6 files changed, 1845 insertions, 151 deletions
diff --git a/gitk-git/Makefile b/gitk-git/Makefile
index e1f0aff4a1..cc32dcab4b 100644
--- a/gitk-git/Makefile
+++ b/gitk-git/Makefile
@@ -8,6 +8,7 @@ gitk_libdir ?= $(sharedir)/gitk/lib
msgsdir ?= $(gitk_libdir)/msgs
msgsdir_SQ = $(subst ','\'',$(msgsdir))
+SHELL_PATH ?= /bin/sh
TCL_PATH ?= tclsh
TCLTK_PATH ?= wish
INSTALL ?= install
@@ -64,9 +65,7 @@ clean::
gitk-wish: gitk GIT-TCLTK-VARS
$(QUIET_GEN)$(RM) $@ $@+ && \
- sed -e '1,3s|^exec .* "$$0"|exec $(subst |,'\|',$(TCLTK_PATH_SQ)) "$$0"|' <gitk >$@+ && \
- chmod +x $@+ && \
- mv -f $@+ $@
+ $(SHELL_PATH) ./generate-tcl.sh "$(TCLTK_PATH_SQ)" "$<" "$@"
$(PO_TEMPLATE): gitk
$(XGETTEXT) -kmc -LTcl -o $@ gitk
@@ -74,7 +73,7 @@ update-po:: $(PO_TEMPLATE)
$(foreach p, $(ALL_POFILES), echo Updating $p ; msgmerge -U $p $(PO_TEMPLATE) ; )
$(ALL_MSGFILES): %.msg : %.po
@echo Generating catalog $@
- $(MSGFMT) --statistics --tcl $< -l $(basename $(notdir $<)) -d $(dir $@)
+ $(MSGFMT) --statistics --tcl -l $(basename $(notdir $<)) -d $(dir $@) $<
.PHONY: all install uninstall clean update-po
.PHONY: FORCE
diff --git a/gitk-git/generate-tcl.sh b/gitk-git/generate-tcl.sh
new file mode 100755
index 0000000000..46bba6d246
--- /dev/null
+++ b/gitk-git/generate-tcl.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+WISH=$(echo "$1" | sed 's/|/\\|/g')
+INPUT="$2"
+OUTPUT="$3"
+
+sed -e "1,3s|^exec .* \"\$0\"|exec $WISH \"\$0\"|" "$INPUT" >"$OUTPUT"+
+chmod a+x "$OUTPUT"+
+mv "$OUTPUT"+ "$OUTPUT"
diff --git a/gitk-git/gitk b/gitk-git/gitk
index 47a7c1d29c..5be8b2aeb0 100755
--- a/gitk-git/gitk
+++ b/gitk-git/gitk
@@ -9,6 +9,195 @@ exec wish "$0" -- "$@"
package require Tk
+######################################################################
+##
+## Enabling platform-specific code paths
+
+proc is_Windows {} {
+ if {$::tcl_platform(platform) eq {windows}} {
+ return 1
+ }
+ return 0
+}
+
+######################################################################
+##
+## PATH lookup
+
+if {[is_Windows]} {
+ set _search_path {}
+ proc _which {what args} {
+ global env _search_path
+
+ if {$_search_path eq {}} {
+ set gitguidir [file dirname [info script]]
+ regsub -all ";" $gitguidir "\\;" gitguidir
+ set env(PATH) "$gitguidir;$env(PATH)"
+ set _search_path [split $env(PATH) {;}]
+ # Skip empty `PATH` elements
+ set _search_path [lsearch -all -inline -not -exact \
+ $_search_path ""]
+ }
+
+ if {[lsearch -exact $args -script] >= 0} {
+ set suffix {}
+ } else {
+ set suffix .exe
+ }
+
+ foreach p $_search_path {
+ set p [file join $p $what$suffix]
+ if {[file exists $p]} {
+ return [file normalize $p]
+ }
+ }
+ return {}
+ }
+
+ proc sanitize_command_line {command_line from_index} {
+ set i $from_index
+ while {$i < [llength $command_line]} {
+ set cmd [lindex $command_line $i]
+ if {[llength [file split $cmd]] < 2} {
+ set fullpath [_which $cmd]
+ if {$fullpath eq ""} {
+ throw {NOT-FOUND} "$cmd not found in PATH"
+ }
+ lset command_line $i $fullpath
+ }
+
+ # handle piped commands, e.g. `exec A | B`
+ for {incr i} {$i < [llength $command_line]} {incr i} {
+ if {[lindex $command_line $i] eq "|"} {
+ incr i
+ break
+ }
+ }
+ }
+ return $command_line
+ }
+
+ # Override `exec` to avoid unsafe PATH lookup
+
+ rename exec real_exec
+
+ proc exec {args} {
+ # skip options
+ for {set i 0} {$i < [llength $args]} {incr i} {
+ set arg [lindex $args $i]
+ if {$arg eq "--"} {
+ incr i
+ break
+ }
+ if {[string range $arg 0 0] ne "-"} {
+ break
+ }
+ }
+ set args [sanitize_command_line $args $i]
+ uplevel 1 real_exec $args
+ }
+
+ # Override `open` to avoid unsafe PATH lookup
+
+ rename open real_open
+
+ proc open {args} {
+ set arg0 [lindex $args 0]
+ if {[string range $arg0 0 0] eq "|"} {
+ set command_line [string trim [string range $arg0 1 end]]
+ lset args 0 "| [sanitize_command_line $command_line 0]"
+ }
+ uplevel 1 real_open $args
+ }
+}
+
+# End of safe PATH lookup stuff
+
+# Wrap exec/open to sanitize arguments
+
+# unsafe arguments begin with redirections or the pipe or background operators
+proc is_arg_unsafe {arg} {
+ regexp {^([<|>&]|2>)} $arg
+}
+
+proc make_arg_safe {arg} {
+ if {[is_arg_unsafe $arg]} {
+ set arg [file join . $arg]
+ }
+ return $arg
+}
+
+proc make_arglist_safe {arglist} {
+ set res {}
+ foreach arg $arglist {
+ lappend res [make_arg_safe $arg]
+ }
+ return $res
+}
+
+# executes one command
+# no redirections or pipelines are possible
+# cmd is a list that specifies the command and its arguments
+# calls `exec` and returns its value
+proc safe_exec {cmd} {
+ eval exec [make_arglist_safe $cmd]
+}
+
+# executes one command with redirections
+# no pipelines are possible
+# cmd is a list that specifies the command and its arguments
+# redir is a list that specifies redirections (output, background, constant(!) commands)
+# calls `exec` and returns its value
+proc safe_exec_redirect {cmd redir} {
+ eval exec [make_arglist_safe $cmd] $redir
+}
+
+proc safe_open_file {filename flags} {
+ # a file name starting with "|" would attempt to run a process
+ # but such a file name must be treated as a relative path
+ # hide the "|" behind "./"
+ if {[string index $filename 0] eq "|"} {
+ set filename [file join . $filename]
+ }
+ open $filename $flags
+}
+
+# opens a command pipeline for reading
+# cmd is a list that specifies the command and its arguments
+# calls `open` and returns the file id
+proc safe_open_command {cmd} {
+ open |[make_arglist_safe $cmd] r
+}
+
+# opens a command pipeline for reading and writing
+# cmd is a list that specifies the command and its arguments
+# calls `open` and returns the file id
+proc safe_open_command_rw {cmd} {
+ open |[make_arglist_safe $cmd] r+
+}
+
+# opens a command pipeline for reading with redirections
+# cmd is a list that specifies the command and its arguments
+# redir is a list that specifies redirections
+# calls `open` and returns the file id
+proc safe_open_command_redirect {cmd redir} {
+ set cmd [make_arglist_safe $cmd]
+ open |[concat $cmd $redir] r
+}
+
+# opens a pipeline with several commands for reading
+# cmds is a list of lists, each of which specifies a command and its arguments
+# calls `open` and returns the file id
+proc safe_open_pipeline {cmds} {
+ set cmd {}
+ foreach subcmd $cmds {
+ set cmd [concat $cmd | [make_arglist_safe $subcmd]]
+ }
+ open $cmd r
+}
+
+# End exec/open wrappers
+
proc hasworktree {} {
return [expr {[exec git rev-parse --is-bare-repository] == "false" &&
[exec git rev-parse --is-inside-git-dir] == "false"}]
@@ -134,7 +323,7 @@ proc unmerged_files {files} {
set mlist {}
set nr_unmerged 0
if {[catch {
- set fd [open "| git ls-files -u" r]
+ set fd [safe_open_command {git ls-files -u}]
} err]} {
show_error {} . "[mc "Couldn't get list of unmerged files:"] $err"
exit 1
@@ -296,7 +485,7 @@ proc parseviewrevs {view revs} {
} elseif {[lsearch -exact $revs --all] >= 0} {
lappend revs HEAD
}
- if {[catch {set ids [eval exec git rev-parse $revs]} err]} {
+ if {[catch {set ids [safe_exec [concat git rev-parse $revs]]} err]} {
# we get stdout followed by stderr in $err
# for an unknown rev, git rev-parse echoes it and then errors out
set errlines [split $err "\n"]
@@ -353,16 +542,6 @@ proc parseviewrevs {view revs} {
return $ret
}
-# Escapes a list of filter paths to be passed to git log via stdin. Note that
-# paths must not be quoted.
-proc escape_filter_paths {paths} {
- set escaped [list]
- foreach path $paths {
- lappend escaped [string map {\\ \\\\ "\ " "\\\ "} $path]
- }
- return $escaped
-}
-
# Start off a git log process and arrange to read its output
proc start_rev_list {view} {
global startmsecs commitidx viewcomplete curview
@@ -384,7 +563,7 @@ proc start_rev_list {view} {
set args $viewargs($view)
if {$viewargscmd($view) ne {}} {
if {[catch {
- set str [exec sh -c $viewargscmd($view)]
+ set str [safe_exec [list sh -c $viewargscmd($view)]]
} err]} {
error_popup "[mc "Error executing --argscmd command:"] $err"
return 0
@@ -422,10 +601,9 @@ proc start_rev_list {view} {
}
if {[catch {
- set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
- --parents --boundary $args --stdin \
- "<<[join [concat $revs "--" \
- [escape_filter_paths $files]] "\\n"]"] r]
+ set fd [safe_open_command_redirect [concat git log --no-color -z --pretty=raw $show_notes \
+ --parents --boundary $args --stdin] \
+ [list "<<[join [concat $revs "--" $files] "\n"]"]]
} err]} {
error_popup "[mc "Error executing git log:"] $err"
return 0
@@ -459,9 +637,9 @@ proc stop_instance {inst} {
set pid [pid $fd]
if {$::tcl_platform(platform) eq {windows}} {
- exec taskkill /pid $pid
+ safe_exec [list taskkill /pid $pid]
} else {
- exec kill $pid
+ safe_exec [list kill $pid]
}
}
catch {close $fd}
@@ -576,11 +754,9 @@ proc updatecommits {} {
set args $vorigargs($view)
}
if {[catch {
- set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
- --parents --boundary $args --stdin \
- "<<[join [concat $revs "--" \
- [escape_filter_paths \
- $vfilelimit($view)]] "\\n"]"] r]
+ set fd [safe_open_command_redirect [concat git log --no-color -z --pretty=raw $show_notes \
+ --parents --boundary $args --stdin] \
+ [list "<<[join [concat $revs "--" $vfilelimit($view)] "\n"]"]]
} err]} {
error_popup "[mc "Error executing git log:"] $err"
return
@@ -1547,8 +1723,8 @@ proc getcommitlines {fd inst view updating} {
# and if we already know about it, using the rewritten
# parent as a substitute parent for $id's children.
if {![catch {
- set rwid [exec git rev-list --first-parent --max-count=1 \
- $id -- $vfilelimit($view)]
+ set rwid [safe_exec [list git rev-list --first-parent --max-count=1 \
+ $id -- $vfilelimit($view)]]
}]} {
if {$rwid ne {} && [info exists varcid($view,$rwid)]} {
# use $rwid in place of $id
@@ -1668,7 +1844,7 @@ proc do_readcommit {id} {
global tclencoding
# Invoke git-log to handle automatic encoding conversion
- set fd [open [concat | git log --no-color --pretty=raw -1 $id] r]
+ set fd [safe_open_command [concat git log --no-color --pretty=raw -1 $id]]
# Read the results using i18n.logoutputencoding
fconfigure $fd -translation lf -eofchar {}
if {$tclencoding != {}} {
@@ -1804,7 +1980,7 @@ proc readrefs {} {
foreach v {tagids idtags headids idheads otherrefids idotherrefs} {
unset -nocomplain $v
}
- set refd [open [list | git show-ref -d] r]
+ set refd [safe_open_command [list git show-ref -d]]
if {$tclencoding != {}} {
fconfigure $refd -encoding $tclencoding
}
@@ -1852,7 +2028,7 @@ proc readrefs {} {
set selectheadid {}
if {$selecthead ne {}} {
catch {
- set selectheadid [exec git rev-parse --verify $selecthead]
+ set selectheadid [safe_exec [list git rev-parse --verify $selecthead]]
}
}
}
@@ -2103,7 +2279,7 @@ proc makewindow {} {
global headctxmenu progresscanv progressitem progresscoords statusw
global fprogitem fprogcoord lastprogupdate progupdatepending
global rprogitem rprogcoord rownumsel numcommits
- global have_tk85 use_ttk NS
+ global have_tk85 have_tk86 use_ttk NS
global git_version
global worddiff
@@ -2116,7 +2292,7 @@ proc makewindow {} {
{mc "Reread re&ferences" command rereadrefs}
{mc "&List references" command showrefs -accelerator F2}
{xx "" separator}
- {mc "Start git &gui" command {exec git gui &}}
+ {mc "Start git &gui" command {safe_exec_redirect [list git gui] [list &]}}
{xx "" separator}
{mc "&Quit" command doquit -accelerator Meta1-Q}
}}
@@ -2601,8 +2777,13 @@ proc makewindow {} {
bind . <Key-Down> "selnextline 1"
bind . <Shift-Key-Up> "dofind -1 0"
bind . <Shift-Key-Down> "dofind 1 0"
- bindkey <Key-Right> "goforw"
- bindkey <Key-Left> "goback"
+ if {$have_tk86} {
+ bindkey <<NextChar>> "goforw"
+ bindkey <<PrevChar>> "goback"
+ } else {
+ bindkey <Key-Right> "goforw"
+ bindkey <Key-Left> "goback"
+ }
bind . <Key-Prior> "selnextpage -1"
bind . <Key-Next> "selnextpage 1"
bind . <$M1B-Home> "allcanvs yview moveto 0.0"
@@ -2898,7 +3079,7 @@ proc savestuff {w} {
set remove_tmp 0
if {[catch {
set try_count 0
- while {[catch {set f [open $config_file_tmp {WRONLY CREAT EXCL}]}]} {
+ while {[catch {set f [safe_open_file $config_file_tmp {WRONLY CREAT EXCL}]}]} {
if {[incr try_count] > 50} {
error "Unable to write config file: $config_file_tmp exists"
}
@@ -3614,7 +3795,7 @@ proc gitknewtmpdir {} {
set tmpdir $gitdir
}
set gitktmpformat [file join $tmpdir ".gitk-tmp.XXXXXX"]
- if {[catch {set gitktmpdir [exec mktemp -d $gitktmpformat]}]} {
+ if {[catch {set gitktmpdir [safe_exec [list mktemp -d $gitktmpformat]]}]} {
set gitktmpdir [file join $gitdir [format ".gitk-tmp.%s" [pid]]]
}
if {[catch {file mkdir $gitktmpdir} err]} {
@@ -3636,7 +3817,7 @@ proc gitknewtmpdir {} {
proc save_file_from_commit {filename output what} {
global nullfile
- if {[catch {exec git show $filename -- > $output} err]} {
+ if {[catch {safe_exec_redirect [list git show $filename --] [list > $output]} err]} {
if {[string match "fatal: bad revision *" $err]} {
return $nullfile
}
@@ -3701,7 +3882,7 @@ proc external_diff {} {
if {$difffromfile ne {} && $difftofile ne {}} {
set cmd [list [shellsplit $extdifftool] $difffromfile $difftofile]
- if {[catch {set fl [open |$cmd r]} err]} {
+ if {[catch {set fl [safe_open_command $cmd]} err]} {
file delete -force $diffdir
error_popup "$extdifftool: [mc "command failed:"] $err"
} else {
@@ -3805,7 +3986,7 @@ proc external_blame_diff {} {
# Find the SHA1 ID of the blob for file $fname in the index
# at stage 0 or 2
proc index_sha1 {fname} {
- set f [open [list | git ls-files -s $fname] r]
+ set f [safe_open_command [list git ls-files -s $fname]]
while {[gets $f line] >= 0} {
set info [lindex [split $line "\t"] 0]
set stage [lindex $info 2]
@@ -3865,7 +4046,7 @@ proc external_blame {parent_idx {line {}}} {
# being given an absolute path...
set f [make_relative $f]
lappend cmdline $base_commit $f
- if {[catch {eval exec $cmdline &} err]} {
+ if {[catch {safe_exec_redirect $cmdline [list &]} err]} {
error_popup "[mc "git gui blame: command failed:"] $err"
}
}
@@ -3893,7 +4074,7 @@ proc show_line_source {} {
# must be a merge in progress...
if {[catch {
# get the last line from .git/MERGE_HEAD
- set f [open [file join $gitdir MERGE_HEAD] r]
+ set f [safe_open_file [file join $gitdir MERGE_HEAD] r]
set id [lindex [split [read $f] "\n"] end-1]
close $f
} err]} {
@@ -3916,19 +4097,17 @@ proc show_line_source {} {
}
set line [lindex $h 1]
}
- set blameargs {}
+ set blamefile [file join $cdup $flist_menu_file]
if {$from_index ne {}} {
- lappend blameargs | git cat-file blob $from_index
- }
- lappend blameargs | git blame -p -L$line,+1
- if {$from_index ne {}} {
- lappend blameargs --contents -
+ set blameargs [list \
+ [list git cat-file blob $from_index] \
+ [list git blame -p -L$line,+1 --contents - -- $blamefile]]
} else {
- lappend blameargs $id
+ set blameargs [list \
+ [list git blame -p -L$line,+1 $id -- $blamefile]]
}
- lappend blameargs -- [file join $cdup $flist_menu_file]
if {[catch {
- set f [open $blameargs r]
+ set f [safe_open_pipeline $blameargs]
} err]} {
error_popup [mc "Couldn't start git blame: %s" $err]
return
@@ -4492,7 +4671,7 @@ proc addviewmenu {n} {
.bar.view add radiobutton -label $viewname($n) \
-command [list showview $n] -variable selectedview -value $n
#$viewhlmenu add radiobutton -label $viewname($n) \
- # -command [list addvhighlight $n] -variable selectedhlview
+ # -command [list addvhighlight $n] -variable selectedhlview
}
proc showview {n} {
@@ -4853,8 +5032,8 @@ proc do_file_hl {serial} {
# must be "containing:", i.e. we're searching commit info
return
}
- set cmd [concat | git diff-tree -r -s --stdin $gdtargs]
- set filehighlight [open $cmd r+]
+ set cmd [concat git diff-tree -r -s --stdin $gdtargs]
+ set filehighlight [safe_open_command_rw $cmd]
fconfigure $filehighlight -blocking 0
filerun $filehighlight readfhighlight
set fhl_list {}
@@ -5283,8 +5462,8 @@ proc get_viewmainhead {view} {
global viewmainheadid vfilelimit viewinstances mainheadid
catch {
- set rfd [open [concat | git rev-list -1 $mainheadid \
- -- $vfilelimit($view)] r]
+ set rfd [safe_open_command [concat git rev-list -1 $mainheadid \
+ -- $vfilelimit($view)]]
set j [reg_instance $rfd]
lappend viewinstances($view) $j
fconfigure $rfd -blocking 0
@@ -5349,14 +5528,14 @@ proc dodiffindex {} {
if {!$showlocalchanges || !$hasworktree} return
incr lserial
if {[package vcompare $git_version "1.7.2"] >= 0} {
- set cmd "|git diff-index --cached --ignore-submodules=dirty HEAD"
+ set cmd "git diff-index --cached --ignore-submodules=dirty HEAD"
} else {
- set cmd "|git diff-index --cached HEAD"
+ set cmd "git diff-index --cached HEAD"
}
if {$vfilelimit($curview) ne {}} {
set cmd [concat $cmd -- $vfilelimit($curview)]
}
- set fd [open $cmd r]
+ set fd [safe_open_command $cmd]
fconfigure $fd -blocking 0
set i [reg_instance $fd]
filerun $fd [list readdiffindex $fd $lserial $i]
@@ -5381,11 +5560,11 @@ proc readdiffindex {fd serial inst} {
}
# now see if there are any local changes not checked in to the index
- set cmd "|git diff-files"
+ set cmd "git diff-files"
if {$vfilelimit($curview) ne {}} {
set cmd [concat $cmd -- $vfilelimit($curview)]
}
- set fd [open $cmd r]
+ set fd [safe_open_command $cmd]
fconfigure $fd -blocking 0
set i [reg_instance $fd]
filerun $fd [list readdifffiles $fd $serial $i]
@@ -6999,7 +7178,7 @@ proc findselectline {l} {
# mark the bits of a headline or author that match a find string
proc markmatches {canv l str tag matches font row} {
- global selectedline
+ global selectedline foundbgcolor
set bbox [$canv bbox $tag]
set x0 [lindex $bbox 0]
@@ -7013,7 +7192,7 @@ proc markmatches {canv l str tag matches font row} {
set xlen [font measure $font [string range $str 0 [expr {$end}]]]
set t [$canv create rect [expr {$x0+$xoff}] $y0 \
[expr {$x0+$xlen+2}] $y1 \
- -outline {} -tags [list match$l matches] -fill yellow]
+ -outline {} -tags [list match$l matches] -fill $foundbgcolor]
$canv lower $t
if {$row == $selectedline} {
$canv raise $t secsel
@@ -7174,8 +7353,8 @@ proc browseweb {url} {
global web_browser
if {$web_browser eq {}} return
- # Use eval here in case $web_browser is a command plus some arguments
- if {[catch {eval exec $web_browser [list $url] &} err]} {
+ # Use concat here in case $web_browser is a command plus some arguments
+ if {[catch {safe_exec_redirect [concat $web_browser [list $url]] [list &]} err]} {
error_popup "[mc "Error starting web browser:"] $err"
}
}
@@ -7681,13 +7860,13 @@ proc gettree {id} {
if {![info exists treefilelist($id)]} {
if {![info exists treepending]} {
if {$id eq $nullid} {
- set cmd [list | git ls-files]
+ set cmd [list git ls-files]
} elseif {$id eq $nullid2} {
- set cmd [list | git ls-files --stage -t]
+ set cmd [list git ls-files --stage -t]
} else {
- set cmd [list | git ls-tree -r $id]
+ set cmd [list git ls-tree -r $id]
}
- if {[catch {set gtf [open $cmd r]}]} {
+ if {[catch {set gtf [safe_open_command $cmd]}]} {
return
}
set treepending $id
@@ -7720,7 +7899,7 @@ proc gettreeline {gtf id} {
if {[string index $fname 0] eq "\""} {
set fname [lindex $fname 0]
}
- set fname [encoding convertfrom $fname]
+ set fname [encoding convertfrom utf-8 $fname]
lappend treefilelist($id) $fname
}
if {![eof $gtf]} {
@@ -7751,13 +7930,13 @@ proc showfile {f} {
return
}
if {$diffids eq $nullid} {
- if {[catch {set bf [open $f r]} err]} {
+ if {[catch {set bf [safe_open_file $f r]} err]} {
puts "oops, can't read $f: $err"
return
}
} else {
set blob [lindex $treeidlist($diffids) $i]
- if {[catch {set bf [open [concat | git cat-file blob $blob] r]} err]} {
+ if {[catch {set bf [safe_open_command [concat git cat-file blob $blob]]} err]} {
puts "oops, error reading blob $blob: $err"
return
}
@@ -7907,7 +8086,7 @@ proc diffcmd {ids flags} {
if {$i >= 0} {
if {[llength $ids] > 1 && $j < 0} {
# comparing working directory with some specific revision
- set cmd [concat | git diff-index $flags]
+ set cmd [concat git diff-index $flags]
if {$i == 0} {
lappend cmd -R [lindex $ids 1]
} else {
@@ -7915,7 +8094,7 @@ proc diffcmd {ids flags} {
}
} else {
# comparing working directory with index
- set cmd [concat | git diff-files $flags]
+ set cmd [concat git diff-files $flags]
if {$j == 1} {
lappend cmd -R
}
@@ -7924,7 +8103,7 @@ proc diffcmd {ids flags} {
if {[package vcompare $git_version "1.7.2"] >= 0} {
set flags "$flags --ignore-submodules=dirty"
}
- set cmd [concat | git diff-index --cached $flags]
+ set cmd [concat git diff-index --cached $flags]
if {[llength $ids] > 1} {
# comparing index with specific revision
if {$j == 0} {
@@ -7940,7 +8119,7 @@ proc diffcmd {ids flags} {
if {$log_showroot} {
lappend flags --root
}
- set cmd [concat | git diff-tree -r $flags $ids]
+ set cmd [concat git diff-tree -r $flags $ids]
}
return $cmd
}
@@ -7952,7 +8131,7 @@ proc gettreediffs {ids} {
if {$limitdiffs && $vfilelimit($curview) ne {}} {
set cmd [concat $cmd -- $vfilelimit($curview)]
}
- if {[catch {set gdtf [open $cmd r]}]} return
+ if {[catch {set gdtf [safe_open_command $cmd]}]} return
set treepending $ids
set treediff {}
@@ -7982,7 +8161,7 @@ proc gettreediffline {gdtf ids} {
if {[string index $file 0] eq "\""} {
set file [lindex $file 0]
}
- set file [encoding convertfrom $file]
+ set file [encoding convertfrom utf-8 $file]
if {$file ne [lindex $treediff end]} {
lappend treediff $file
lappend sublist $file
@@ -8072,7 +8251,7 @@ proc getblobdiffs {ids} {
if {$limitdiffs && $vfilelimit($curview) ne {}} {
set cmd [concat $cmd -- $vfilelimit($curview)]
}
- if {[catch {set bdf [open $cmd r]} err]} {
+ if {[catch {set bdf [safe_open_command $cmd]} err]} {
error_popup [mc "Error getting diffs: %s" $err]
return
}
@@ -8127,7 +8306,7 @@ proc makediffhdr {fname ids} {
global ctext curdiffstart treediffs diffencoding
global ctext_file_names jump_to_here targetline diffline
- set fname [encoding convertfrom $fname]
+ set fname [encoding convertfrom utf-8 $fname]
set diffencoding [get_path_encoding $fname]
set i [lsearch -exact $treediffs($ids) $fname]
if {$i >= 0} {
@@ -8189,7 +8368,7 @@ proc parseblobdiffline {ids line} {
if {![string compare -length 5 "diff " $line]} {
if {![regexp {^diff (--cc|--git) } $line m type]} {
- set line [encoding convertfrom $line]
+ set line [encoding convertfrom utf-8 $line]
$ctext insert end "$line\n" hunksep
continue
}
@@ -8238,7 +8417,7 @@ proc parseblobdiffline {ids line} {
makediffhdr $fname $ids
} elseif {![string compare -length 16 "* Unmerged path " $line]} {
- set fname [encoding convertfrom [string range $line 16 end]]
+ set fname [encoding convertfrom utf-8 [string range $line 16 end]]
$ctext insert end "\n"
set curdiffstart [$ctext index "end - 1c"]
lappend ctext_file_names $fname
@@ -8291,7 +8470,7 @@ proc parseblobdiffline {ids line} {
if {[string index $fname 0] eq "\""} {
set fname [lindex $fname 0]
}
- set fname [encoding convertfrom $fname]
+ set fname [encoding convertfrom utf-8 $fname]
set i [lsearch -exact $treediffs($ids) $fname]
if {$i >= 0} {
setinlist difffilestart $i $curdiffstart
@@ -8310,6 +8489,7 @@ proc parseblobdiffline {ids line} {
set diffinhdr 0
return
}
+ set line [encoding convertfrom utf-8 $line]
$ctext insert end "$line\n" filesep
} else {
@@ -8789,7 +8969,7 @@ proc gotocommit {} {
set id [lindex $matches 0]
}
} else {
- if {[catch {set id [exec git rev-parse --verify $sha1string]}]} {
+ if {[catch {set id [safe_exec [list git rev-parse --verify $sha1string]]}]} {
error_popup [mc "Revision %s is not known" $sha1string]
return
}
@@ -9095,10 +9275,8 @@ proc getpatchid {id} {
if {![info exists patchids($id)]} {
set cmd [diffcmd [list $id] {-p --root}]
- # trim off the initial "|"
- set cmd [lrange $cmd 1 end]
if {[catch {
- set x [eval exec $cmd | git patch-id]
+ set x [safe_exec_redirect $cmd [list | git patch-id]]
set patchids($id) [lindex $x 0]
}]} {
set patchids($id) "error"
@@ -9194,14 +9372,14 @@ proc diffcommits {a b} {
set fna [file join $tmpdir "commit-[string range $a 0 7]"]
set fnb [file join $tmpdir "commit-[string range $b 0 7]"]
if {[catch {
- exec git diff-tree -p --pretty $a >$fna
- exec git diff-tree -p --pretty $b >$fnb
+ safe_exec_redirect [list git diff-tree -p --pretty $a] [list >$fna]
+ safe_exec_redirect [list git diff-tree -p --pretty $b] [list >$fnb]
} err]} {
error_popup [mc "Error writing commit to file: %s" $err]
return
}
if {[catch {
- set fd [open "| diff -U$diffcontext $fna $fnb" r]
+ set fd [safe_open_command "diff -U$diffcontext $fna $fnb"]
} err]} {
error_popup [mc "Error diffing commits: %s" $err]
return
@@ -9341,10 +9519,7 @@ proc mkpatchgo {} {
set newid [$patchtop.tosha1 get]
set fname [$patchtop.fname get]
set cmd [diffcmd [list $oldid $newid] -p]
- # trim off the initial "|"
- set cmd [lrange $cmd 1 end]
- lappend cmd >$fname &
- if {[catch {eval exec $cmd} err]} {
+ if {[catch {safe_exec_redirect $cmd [list >$fname &]} err]} {
error_popup "[mc "Error creating patch:"] $err" $patchtop
}
catch {destroy $patchtop}
@@ -9413,9 +9588,9 @@ proc domktag {} {
}
if {[catch {
if {$msg != {}} {
- exec git tag -a -m $msg $tag $id
+ safe_exec [list git tag -a -m $msg $tag $id]
} else {
- exec git tag $tag $id
+ safe_exec [list git tag $tag $id]
}
} err]} {
error_popup "[mc "Error creating tag:"] $err" $mktagtop
@@ -9483,7 +9658,7 @@ proc copyreference {} {
if {$autosellen < 40} {
lappend cmd --abbrev=$autosellen
}
- set reference [eval exec $cmd $rowmenuid]
+ set reference [safe_exec [concat $cmd $rowmenuid]]
clipboard clear
clipboard append $reference
@@ -9533,7 +9708,7 @@ proc wrcomgo {} {
set id [$wrcomtop.sha1 get]
set cmd "echo $id | [$wrcomtop.cmd get]"
set fname [$wrcomtop.fname get]
- if {[catch {exec sh -c $cmd >$fname &} err]} {
+ if {[catch {safe_exec_redirect [list sh -c $cmd] [list >$fname &]} err]} {
error_popup "[mc "Error writing commit:"] $err" $wrcomtop
}
catch {destroy $wrcomtop}
@@ -9637,7 +9812,7 @@ proc mkbrgo {top} {
nowbusy newbranch
update
if {[catch {
- eval exec git branch $cmdargs
+ safe_exec [concat git branch $cmdargs]
} err]} {
notbusy newbranch
error_popup $err
@@ -9678,7 +9853,7 @@ proc mvbrgo {top prevname} {
nowbusy renamebranch
update
if {[catch {
- eval exec git branch $cmdargs
+ safe_exec [concat git branch $cmdargs]
} err]} {
notbusy renamebranch
error_popup $err
@@ -9719,7 +9894,7 @@ proc exec_citool {tool_args {baseid {}}} {
}
}
- eval exec git citool $tool_args &
+ safe_exec_redirect [concat git citool $tool_args] [list &]
array unset env GIT_AUTHOR_*
array set env $save_env
@@ -9742,7 +9917,7 @@ proc cherrypick {} {
update
# Unfortunately git-cherry-pick writes stuff to stderr even when
# no error occurs, and exec takes that as an indication of error...
- if {[catch {exec sh -c "git cherry-pick -r $rowmenuid 2>&1"} err]} {
+ if {[catch {safe_exec [list sh -c "git cherry-pick -r $rowmenuid 2>&1"]} err]} {
notbusy cherrypick
if {[regexp -line \
{Entry '(.*)' (would be overwritten by merge|not uptodate)} \
@@ -9804,7 +9979,7 @@ proc revert {} {
nowbusy revert [mc "Reverting"]
update
- if [catch {exec git revert --no-edit $rowmenuid} err] {
+ if [catch {safe_exec [list git revert --no-edit $rowmenuid]} err] {
notbusy revert
if [regexp {files would be overwritten by merge:(\n(( |\t)+[^\n]+\n)+)}\
$err match files] {
@@ -9880,8 +10055,8 @@ proc resethead {} {
bind $w <Visibility> "grab $w; focus $w"
tkwait window $w
if {!$confirm_ok} return
- if {[catch {set fd [open \
- [list | git reset --$resettype $rowmenuid 2>@1] r]} err]} {
+ if {[catch {set fd [safe_open_command_redirect \
+ [list git reset --$resettype $rowmenuid] [list 2>@1]]} err]} {
error_popup $err
} else {
dohidelocalchanges
@@ -9952,7 +10127,7 @@ proc cobranch {} {
# check the tree is clean first??
set newhead $headmenuhead
- set command [list | git checkout]
+ set command [list git checkout]
if {[string match "remotes/*" $newhead]} {
set remote $newhead
set newhead [string range $newhead [expr [string last / $newhead] + 1] end]
@@ -9966,12 +10141,11 @@ proc cobranch {} {
} else {
lappend command $newhead
}
- lappend command 2>@1
nowbusy checkout [mc "Checking out"]
update
dohidelocalchanges
if {[catch {
- set fd [open $command r]
+ set fd [safe_open_command_redirect $command [list 2>@1]]
} err]} {
notbusy checkout
error_popup $err
@@ -10037,7 +10211,7 @@ proc rmbranch {} {
}
nowbusy rmbranch
update
- if {[catch {exec git branch -D $head} err]} {
+ if {[catch {safe_exec [list git branch -D $head]} err]} {
notbusy rmbranch
error_popup $err
return
@@ -10068,7 +10242,7 @@ proc showrefs {} {
text $top.list -background $bgcolor -foreground $fgcolor \
-selectbackground $selectbgcolor -font mainfont \
-xscrollcommand "$top.xsb set" -yscrollcommand "$top.ysb set" \
- -width 30 -height 20 -cursor $maincursor \
+ -width 60 -height 20 -cursor $maincursor \
-spacing1 1 -spacing3 1 -state disabled
$top.list tag configure highlight -background $selectbgcolor
if {![lsearch -exact $bglist $top.list]} {
@@ -10228,7 +10402,7 @@ proc getallcommits {} {
set cachedarcs 0
set allccache [file join $gitdir "gitk.cache"]
if {![catch {
- set f [open $allccache r]
+ set f [safe_open_file $allccache r]
set allcwait 1
getcache $f
}]} return
@@ -10237,7 +10411,7 @@ proc getallcommits {} {
if {$allcwait} {
return
}
- set cmd [list | git rev-list --parents]
+ set cmd [list git rev-list --parents]
set allcupdate [expr {$seeds ne {}}]
if {!$allcupdate} {
set ids "--all"
@@ -10265,10 +10439,11 @@ proc getallcommits {} {
if {$ids ne {}} {
if {$ids eq "--all"} {
set cmd [concat $cmd "--all"]
+ set fd [safe_open_command $cmd]
} else {
- set cmd [concat $cmd --stdin "<<[join $ids "\\n"]"]
+ set cmd [concat $cmd --stdin]
+ set fd [safe_open_command_redirect $cmd [list "<<[join $ids "\n"]"]]
}
- set fd [open $cmd r]
fconfigure $fd -blocking 0
incr allcommits
nowbusy allcommits
@@ -10658,7 +10833,7 @@ proc savecache {} {
set cachearc 0
set cachedarcs $nextarc
catch {
- set f [open $allccache w]
+ set f [safe_open_file $allccache w]
puts $f [list 1 $cachedarcs]
run writecache $f
}
@@ -11361,7 +11536,7 @@ proc add_tag_ctext {tag} {
if {![info exists cached_tagcontent($tag)]} {
catch {
- set cached_tagcontent($tag) [exec git cat-file -p $tag]
+ set cached_tagcontent($tag) [safe_exec [list git cat-file -p $tag]]
}
}
$ctext insert end "[mc "Tag"]: $tag\n" bold
@@ -11626,13 +11801,11 @@ proc prefspage_general {notebook} {
grid x $page.tabstopl $page.tabstop -sticky w
${NS}::label $page.wrapcommentl -text [mc "Wrap comment text"]
- ${NS}::combobox $page.wrapcomment -values {none char word} -state readonly \
- -textvariable wrapcomment
+ makedroplist $page.wrapcomment wrapcomment none char word
grid x $page.wrapcommentl $page.wrapcomment -sticky w
${NS}::label $page.wrapdefaultl -text [mc "Wrap other text"]
- ${NS}::combobox $page.wrapdefault -values {none char word} -state readonly \
- -textvariable wrapdefault
+ makedroplist $page.wrapdefault wrapdefault none char word
grid x $page.wrapdefaultl $page.wrapdefault -sticky w
${NS}::checkbutton $page.ntag -text [mc "Display nearby tags/heads"] \
@@ -12274,7 +12447,7 @@ proc gitattr {path attr default} {
set r $path_attr_cache($attr,$path)
} else {
set r "unspecified"
- if {![catch {set line [exec git check-attr $attr -- $path]}]} {
+ if {![catch {set line [safe_exec [list git check-attr $attr -- $path]]}]} {
regexp "(.*): $attr: (.*)" $line m f r
}
set path_attr_cache($attr,$path) $r
@@ -12301,11 +12474,11 @@ proc cache_gitattr {attr pathlist} {
while {$newlist ne {}} {
set head [lrange $newlist 0 [expr {$lim - 1}]]
set newlist [lrange $newlist $lim end]
- if {![catch {set rlist [eval exec git check-attr $attr -- $head]}]} {
+ if {![catch {set rlist [safe_exec [concat git check-attr $attr -- $head]]}]} {
foreach row [split $rlist "\n"] {
if {[regexp "(.*): $attr: (.*)" $row m path value]} {
if {[string index $path 0] eq "\""} {
- set path [encoding convertfrom [lindex $path 0]]
+ set path [encoding convertfrom utf-8 [lindex $path 0]]
}
set path_attr_cache($attr,$path) $value
}
@@ -12335,7 +12508,6 @@ if { [info exists ::env(GITK_MSGSDIR)] } {
set gitk_prefix [file dirname [file dirname [file normalize $argv0]]]
set gitk_libdir [file join $gitk_prefix share gitk lib]
set gitk_msgsdir [file join $gitk_libdir msgs]
- unset gitk_prefix
}
## Internationalization (i18n) through msgcat and gettext. See
@@ -12354,11 +12526,11 @@ if {[catch {package require Tk 8.4} err]} {
# on OSX bring the current Wish process window to front
if {[tk windowingsystem] eq "aqua"} {
- exec osascript -e [format {
+ safe_exec [list osascript -e [format {
tell application "System Events"
set frontmost of processes whose unix id is %d to true
end tell
- } [pid] ]
+ } [pid] ]]
}
# Unset GIT_TRACE var if set
@@ -12606,7 +12778,7 @@ if {$selecthead eq "HEAD"} {
if {$i >= [llength $argv] && $revtreeargs ne {}} {
# no -- on command line, but some arguments (other than --argscmd)
if {[catch {
- set f [eval exec git rev-parse --no-revs --no-flags $revtreeargs]
+ set f [safe_exec [concat git rev-parse --no-revs --no-flags $revtreeargs]]
set cmdline_files [split $f "\n"]
set n [llength $cmdline_files]
set revtreeargs [lrange $revtreeargs 0 end-$n]
@@ -12637,6 +12809,7 @@ set nullid2 "0000000000000000000000000000000000000001"
set nullfile "/dev/null"
set have_tk85 [expr {[package vcompare $tk_version "8.5"] >= 0}]
+set have_tk86 [expr {[package vcompare $tk_version "8.6"] >= 0}]
if {![info exists have_ttk]} {
set have_ttk [llength [info commands ::ttk::style]]
}
@@ -12701,28 +12874,32 @@ if {[expr {[exec git rev-parse --is-inside-work-tree] == "true"}]} {
set worktree [gitworktree]
setcoords
makewindow
-catch {
- image create photo gitlogo -width 16 -height 16
-
- image create photo gitlogominus -width 4 -height 2
- gitlogominus put #C00000 -to 0 0 4 2
- gitlogo copy gitlogominus -to 1 5
- gitlogo copy gitlogominus -to 6 5
- gitlogo copy gitlogominus -to 11 5
- image delete gitlogominus
-
- image create photo gitlogoplus -width 4 -height 4
- gitlogoplus put #008000 -to 1 0 3 4
- gitlogoplus put #008000 -to 0 1 4 3
- gitlogo copy gitlogoplus -to 1 9
- gitlogo copy gitlogoplus -to 6 9
- gitlogo copy gitlogoplus -to 11 9
- image delete gitlogoplus
-
- image create photo gitlogo32 -width 32 -height 32
- gitlogo32 copy gitlogo -zoom 2 2
-
- wm iconphoto . -default gitlogo gitlogo32
+if {$::tcl_platform(platform) eq {windows} && [file exists $gitk_prefix/etc/git.ico]} {
+ wm iconbitmap . -default $gitk_prefix/etc/git.ico
+} else {
+ catch {
+ image create photo gitlogo -width 16 -height 16
+
+ image create photo gitlogominus -width 4 -height 2
+ gitlogominus put #C00000 -to 0 0 4 2
+ gitlogo copy gitlogominus -to 1 5
+ gitlogo copy gitlogominus -to 6 5
+ gitlogo copy gitlogominus -to 11 5
+ image delete gitlogominus
+
+ image create photo gitlogoplus -width 4 -height 4
+ gitlogoplus put #008000 -to 1 0 3 4
+ gitlogoplus put #008000 -to 0 1 4 3
+ gitlogo copy gitlogoplus -to 1 9
+ gitlogo copy gitlogoplus -to 6 9
+ gitlogo copy gitlogoplus -to 11 9
+ image delete gitlogoplus
+
+ image create photo gitlogo32 -width 32 -height 32
+ gitlogo32 copy gitlogo -zoom 2 2
+
+ wm iconphoto . -default gitlogo gitlogo32
+ }
}
# wait for the window to become visible
if {![winfo viewable .]} {tkwait visibility .}
diff --git a/gitk-git/meson.build b/gitk-git/meson.build
new file mode 100644
index 0000000000..ca3c0cec58
--- /dev/null
+++ b/gitk-git/meson.build
@@ -0,0 +1,30 @@
+project('gitk')
+
+shell = find_program('sh')
+wish = find_program('wish')
+
+# Verify that dependencies of "generate-tcl.sh" are satisfied.
+foreach dependency : [ 'chmod', 'mv', 'sed' ]
+ find_program(dependency)
+endforeach
+
+custom_target(
+ command: [
+ shell,
+ meson.current_source_dir() / 'generate-tcl.sh',
+ wish.full_path(),
+ '@INPUT@',
+ '@OUTPUT@',
+ ],
+ input: 'gitk',
+ output: 'gitk',
+ depend_files: [
+ 'generate-tcl.sh',
+ ],
+ install: true,
+ install_dir: get_option('bindir'),
+)
+
+if find_program('msgfmt').found()
+ subdir('po')
+endif
diff --git a/gitk-git/po/meson.build b/gitk-git/po/meson.build
new file mode 100644
index 0000000000..c00b3d5c8d
--- /dev/null
+++ b/gitk-git/po/meson.build
@@ -0,0 +1,20 @@
+import('i18n').gettext('gitk',
+ languages: [
+ 'bg',
+ 'ca',
+ 'de',
+ 'es',
+ 'fr',
+ 'hu',
+ 'it',
+ 'ja',
+ 'pt_br',
+ 'pt_pt',
+ 'ru',
+ 'sv',
+ 'ta',
+ 'vi',
+ 'zh_cn',
+ ],
+ install: true,
+)
diff --git a/gitk-git/po/ta.po b/gitk-git/po/ta.po
new file mode 100644
index 0000000000..0e390c5153
--- /dev/null
+++ b/gitk-git/po/ta.po
@@ -0,0 +1,1457 @@
+# Translation of gitk
+# Copyright (C) 2024-2025 தமிழ்நேரம்
+# This file is distributed under the same license as the gitk package.
+# தமிழ்நேரம் (TamilNeram.github.io), 2025.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gitk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-05-07 08:01+0530\n"
+"PO-Revision-Date: 2025-05-07 09:17\n"
+"Last-Translator: தமிழ்நேரம் (TamilNeram.github.io)\n"
+"Language-Team: Tamil\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gitk:274
+msgid "Couldn't get list of unmerged files:"
+msgstr "ஒருங்கிணைக்கப்படாத கோப்புகளின் பட்டியலைப் பெற முடியவில்லை:"
+
+#: gitk:346 gitk:2565
+msgid "Color words"
+msgstr "வண்ண சொற்கள்"
+
+#: gitk:351 gitk:2565 gitk:8476 gitk:8509
+msgid "Markup words"
+msgstr "குறிக்கப்பட்ட சொற்கள்"
+
+#: gitk:458
+msgid "Error parsing revisions:"
+msgstr "பிழைகளை பாகுபடுத்துதல்:"
+
+#: gitk:524
+msgid "Error executing --argscmd command:"
+msgstr "--argscmd கட்டளையை இயக்குவதில் பிழை:"
+
+#: gitk:537
+msgid "No files selected: --merge specified but no files are unmerged."
+msgstr ""
+"கோப்புகள் எதுவும் தேர்ந்தெடுக்கப்படவில்லை: --ஒன்றிணை குறிப்பிடப்பட்டுள்ளது, "
+"ஆனால் கோப்புகள் எதுவும் அவிழ்க்கப்படவில்லை."
+
+#: gitk:540
+msgid ""
+"No files selected: --merge specified but no unmerged files are within file "
+"limit."
+msgstr ""
+"கோப்புகள் எதுவும் தேர்ந்தெடுக்கப்படவில்லை: --ஒன்றிணை குறிப்பிடப்பட்டுள்ளது, "
+"ஆனால் அவிழ்க்கப்படாத கோப்புகள் எதுவும் கோப்பு வரம்பிற்குள் இல்லை."
+
+#: gitk:565 gitk:720
+msgid "Error executing git log:"
+msgstr "அறிவிலி பதிவை இயக்குவதில் பிழை:"
+
+#: gitk:583 gitk:736
+msgid "Reading"
+msgstr "படித்தல்"
+
+#: gitk:643 gitk:4736
+msgid "Reading commits..."
+msgstr "உறுதிமொழிகளைப் படித்தல்..."
+
+#: gitk:646 gitk:1795 gitk:4739
+msgid "No commits selected"
+msgstr "எந்த உறுதிமொழிகளும் தேர்ந்தெடுக்கப்படவில்லை"
+
+#: gitk:1603 gitk:4256 gitk:12883
+msgid "Command line"
+msgstr "கட்டளை வரி"
+
+#: gitk:1669
+msgid "Can't parse git log output:"
+msgstr "அறிவிலி பதிவு வெளியீட்டை அலச முடியாது:"
+
+#: gitk:1898
+msgid "No commit information available"
+msgstr "உறுதிமொழி செய்தி எதுவும் கிடைக்கவில்லை"
+
+#: gitk:2065 gitk:2094 gitk:4526 gitk:10016 gitk:11626 gitk:11946
+msgid "OK"
+msgstr "சரி"
+
+#: gitk:2096 gitk:4528 gitk:9452 gitk:9531 gitk:9661 gitk:9747 gitk:10018
+#: gitk:11627 gitk:11947
+msgid "Cancel"
+msgstr "நீக்கறல்"
+
+#: gitk:2249
+msgid "&Update"
+msgstr "புதுப்பித்தல்"
+
+#: gitk:2250
+msgid "&Reload"
+msgstr "மீண்டும் ஏற்று"
+
+#: gitk:2251
+msgid "Reread re&ferences"
+msgstr "குறிப்புகளை மீண்டும் படி"
+
+#: gitk:2252
+msgid "&List references"
+msgstr "பட்டியல் குறிப்புகள்"
+
+#: gitk:2254
+msgid "Start git &gui"
+msgstr "அறிவிலி இடைமுகத்தைத் தொடங்கு"
+
+#: gitk:2256
+msgid "&Quit"
+msgstr "வெளியேறு"
+
+#: gitk:2248
+msgid "&File"
+msgstr "கோப்பு"
+
+#: gitk:2260
+msgid "&Preferences"
+msgstr "விருப்பத்தேர்வுகள்"
+
+#: gitk:2259
+msgid "&Edit"
+msgstr "திருத்து"
+
+#: gitk:2264
+msgid "&New view..."
+msgstr "புதிய பார்வை..."
+
+#: gitk:2265
+msgid "&Edit view..."
+msgstr "பார்வையைத் திருத்து..."
+
+#: gitk:2266
+msgid "&Delete view"
+msgstr "பார்வையை நீக்கு"
+
+#: gitk:2268
+msgid "&All files"
+msgstr "அனைத்து கோப்புகளும்"
+
+#: gitk:2263
+msgid "&View"
+msgstr "காண்க"
+
+#: gitk:2273 gitk:2283
+msgid "&About gitk"
+msgstr "அறிவிலிகே பற்றி"
+
+#: gitk:2274 gitk:2288
+msgid "&Key bindings"
+msgstr "முக்கிய பிணைப்புகள்"
+
+#: gitk:2272 gitk:2287
+msgid "&Help"
+msgstr "உதவி"
+
+#: gitk:2365 gitk:8908
+msgid "Commit ID:"
+msgstr "உறுதிமொழி அடையாளம்:"
+
+#: gitk:2409
+msgid "Row"
+msgstr "நிரை"
+
+#: gitk:2447
+msgid "Find"
+msgstr "கண்டுபிடி"
+
+#: gitk:2475
+msgid "commit"
+msgstr "உறுதிமொழி"
+
+#: gitk:2479 gitk:2481 gitk:4898 gitk:4921 gitk:4945 gitk:6966 gitk:7038
+#: gitk:7123
+msgid "containing:"
+msgstr "கொண்டிருக்கிறது:"
+
+#: gitk:2482 gitk:3737 gitk:3742 gitk:4974
+msgid "touching paths:"
+msgstr "தொடும் பாதைகள்:"
+
+#: gitk:2483 gitk:4988
+msgid "adding/removing string:"
+msgstr "சரத்தைச் சேர்ப்பது/அகற்றுவது:"
+
+#: gitk:2484 gitk:4990
+msgid "changing lines matching:"
+msgstr "பொருந்தக்கூடிய வரிகளை மாற்றுதல்:"
+
+#: gitk:2493 gitk:2495 gitk:4977
+msgid "Exact"
+msgstr "சரியான"
+
+#: gitk:2495 gitk:5065 gitk:6934
+msgid "IgnCase"
+msgstr "வழக்குதவிர்"
+
+#: gitk:2495 gitk:4947 gitk:5063 gitk:6930
+msgid "Regexp"
+msgstr "வழக்கவெளி"
+
+#: gitk:2497 gitk:2498 gitk:5085 gitk:5115 gitk:5122 gitk:7059 gitk:7127
+msgid "All fields"
+msgstr "அனைத்து புலங்களும்"
+
+#: gitk:2498 gitk:5082 gitk:5115 gitk:6997
+msgid "Headline"
+msgstr "தலைப்பு"
+
+#: gitk:2499 gitk:5082 gitk:6997 gitk:7127 gitk:7639
+msgid "Comments"
+msgstr "கருத்துகள்"
+
+#: gitk:2499 gitk:5082 gitk:5087 gitk:5122 gitk:6997 gitk:7574 gitk:9086
+#: gitk:9101
+msgid "Author"
+msgstr "நூலாசிரியர்"
+
+#: gitk:2499 gitk:5082 gitk:6997 gitk:7576
+msgid "Committer"
+msgstr "உறுதிமொழிபவர்"
+
+#: gitk:2533
+msgid "Search"
+msgstr "தேடு"
+
+#: gitk:2541
+msgid "Diff"
+msgstr "வேறுபாடு"
+
+#: gitk:2543
+msgid "Old version"
+msgstr "பழைய பதிப்பு"
+
+#: gitk:2545
+msgid "New version"
+msgstr "புதிய பதிப்பு"
+
+#: gitk:2548
+msgid "Lines of context"
+msgstr "சூழலின் வரிகள்"
+
+#: gitk:2558
+msgid "Ignore space change"
+msgstr "இடைவெளி மாற்றத்தை புறக்கணி"
+
+#: gitk:2562 gitk:2564 gitk:8209 gitk:8462
+msgid "Line diff"
+msgstr "வரி வேறுபாடு"
+
+#: gitk:2637
+msgid "Patch"
+msgstr "ஒட்டு"
+
+#: gitk:2639
+msgid "Tree"
+msgstr "மரம்"
+
+#: gitk:2814 gitk:2835
+msgid "Diff this -> selected"
+msgstr "இதை வேறுபடுத்துங்கள் -> தேர்ந்தெடுக்கப்பட்டது"
+
+#: gitk:2815 gitk:2836
+msgid "Diff selected -> this"
+msgstr "வேறுபாடு தேர்ந்தெடுக்கப்பட்டது -> இது"
+
+#: gitk:2816 gitk:2837
+msgid "Make patch"
+msgstr "ஒட்டு செய்"
+
+#: gitk:2817 gitk:9510
+msgid "Create tag"
+msgstr "குறிச்சொல்லை உருவாக்கு"
+
+#: gitk:2818
+msgid "Copy commit reference"
+msgstr "உறுதிமொழி குறிப்பு நகலெடு"
+
+#: gitk:2819 gitk:9641
+msgid "Write commit to file"
+msgstr "கோப்பில் உறவை எழுதுங்கள்"
+
+#: gitk:2820
+msgid "Create new branch"
+msgstr "புதிய கிளையை உருவாக்கு"
+
+#: gitk:2821
+msgid "Cherry-pick this commit"
+msgstr "கனி-எடு இந்த உறுதிமொழி"
+
+#: gitk:2822
+msgid "Reset HEAD branch to here"
+msgstr "தலை கிளையை இங்கே மீட்டமை"
+
+#: gitk:2823
+msgid "Mark this commit"
+msgstr "இந்த உறுதிமொழியைக் குறி"
+
+#: gitk:2824
+msgid "Return to mark"
+msgstr "மார்க்குக்குத் திரும்பு"
+
+#: gitk:2825
+msgid "Find descendant of this and mark"
+msgstr "இதன் வழித்தோன்றலைக் கண்டுபிடித்து குறி"
+
+#: gitk:2826
+msgid "Compare with marked commit"
+msgstr "குறிக்கப்பட்ட உறுதிப்பாட்டுடன் ஒப்பிடுக"
+
+#: gitk:2827 gitk:2838
+msgid "Diff this -> marked commit"
+msgstr "இதை வேறுபடுத்துங்கள் -> குறிக்கப்பட்ட உறுதிமொழி"
+
+#: gitk:2828 gitk:2839
+msgid "Diff marked commit -> this"
+msgstr "வேறுபாடு குறிக்கப்பட்ட உறுதிமொழி -> இது"
+
+#: gitk:2829
+msgid "Revert this commit"
+msgstr "இந்த உறுதிப்பாட்டை மாற்றவும்"
+
+#: gitk:2845
+msgid "Check out this branch"
+msgstr "இந்த கிளையைப் பாருங்கள்"
+
+#: gitk:2846
+msgid "Rename this branch"
+msgstr "இந்த கிளையை மறுபெயரிடு"
+
+#: gitk:2847
+msgid "Remove this branch"
+msgstr "இந்த கிளையை அகற்று"
+
+#: gitk:2848
+msgid "Copy branch name"
+msgstr "கிளை பெயரை நகலெடு"
+
+#: gitk:2855
+msgid "Highlight this too"
+msgstr "இதை முன்னிலைப்படுத்து"
+
+#: gitk:2856
+msgid "Highlight this only"
+msgstr "இதை முன்னிலைப்படுத்து"
+
+#: gitk:2857
+msgid "External diff"
+msgstr "வெளிப்புற வேறுபாடு"
+
+#: gitk:2858
+msgid "Blame parent commit"
+msgstr "பெற்றோரை குற்றம் சாட்டு"
+
+#: gitk:2859
+msgid "Copy path"
+msgstr "நகல் பாதை"
+
+#: gitk:2866
+msgid "Show origin of this line"
+msgstr "இந்த வரியின் தோற்றத்தைக் காட்டு"
+
+#: gitk:2867
+msgid "Run git gui blame on this line"
+msgstr "இந்த வரியில் அறிவிலி இடைமுகம் பழியை இயக்கு"
+
+#: gitk:3221
+msgid "About gitk"
+msgstr "அறிவிலிகே பற்றி"
+
+#: gitk:3223
+msgid ""
+"\n"
+"Gitk - a commit viewer for git\n"
+"\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
+"\n"
+"Use and redistribute under the terms of the GNU General Public License"
+msgstr ""
+"\n"
+"அறிவிலிகே - அறிவிலி ஒரு உறுதிமொழி பார்வையாளர் \n"
+"\n"
+"பதிப்புரிமை © 2005-2016 பால் மெக்கெராச் \n"
+"\n"
+"குனு பொது பொதுமக்கள் உரிமத்தின் விதிமுறைகளின் கீழ் பயன்படுத்தவும் மறுபகிர்வு செய்யவும்"
+
+#: gitk:3231 gitk:3298 gitk:10231
+msgid "Close"
+msgstr "மூடு"
+
+#: gitk:3252
+msgid "Gitk key bindings"
+msgstr "அறிவிலிகே விசை பிணைப்புகள்"
+
+#: gitk:3255
+msgid "Gitk key bindings:"
+msgstr "அறிவிலிகே விசை பிணைப்புகள்:"
+
+#: gitk:3257
+#, tcl-format
+msgid "<%s-Q>\t\tQuit"
+msgstr "<%s-Q>\t\tவெளியேறு"
+
+#: gitk:3258
+#, tcl-format
+msgid "<%s-W>\t\tClose window"
+msgstr "<%s-w>\t\tசாளரத்தை மூடு"
+
+#: gitk:3259
+msgid "<Home>\t\tMove to first commit"
+msgstr "<வீடு> முதல் உறுதிமொழிக்கு நகர்த்து"
+
+#: gitk:3260
+msgid "<End>\t\tMove to last commit"
+msgstr "<முடி> கடைசி உறுதிமொழிக்கு நகர்த்து"
+
+#: gitk:3261
+msgid "<Up>, p, k\tMove up one commit"
+msgstr "<மேலே>, பி, கே\tஒரு உறுதிமொழியை மேலே நகர்த்து"
+
+#: gitk:3262
+msgid "<Down>, n, j\tMove down one commit"
+msgstr "<கீழ்>, n, j\tஒரு உறுதிமொழியை கீழே நகர்த்து"
+
+#: gitk:3263
+msgid "<Left>, z, h\tGo back in history list"
+msgstr "<இடது>, z, h\tவரலாற்று பட்டியலில் திரும்பிச் செல்"
+
+#: gitk:3264
+msgid "<Right>, x, l\tGo forward in history list"
+msgstr "<வலது>, x, l\tவரலாற்று பட்டியலில் முன்னோக்கி செல்"
+
+#: gitk:3265
+#, tcl-format
+msgid "<%s-n>\tGo to n-th parent of current commit in history list"
+msgstr ""
+"<%s-n> வரலாற்று பட்டியலில் தற்போதைய உறுதிப்பாட்டின் n- வது பெற்றோரிடம் "
+"செல்"
+
+#: gitk:3266
+msgid "<PageUp>\tMove up one page in commit list"
+msgstr "<பக்கம்மேல்>\tஉறுதிமொழி பட்டியலில் ஒரு பக்கத்தை நகர்த்து"
+
+#: gitk:3267
+msgid "<PageDown>\tMove down one page in commit list"
+msgstr "<பக்கம்கீழ்>\tஉறுதிமொழி பட்டியலில் ஒரு பக்கத்தை நகர்த்து"
+
+#: gitk:3268
+#, tcl-format
+msgid "<%s-Home>\tScroll to top of commit list"
+msgstr "<%s-வீடு>\tஉறுதிமொழி பட்டியலை மேல் பகுதிக்கு உருட்டவும்"
+
+#: gitk:3269
+#, tcl-format
+msgid "<%s-End>\tScroll to bottom of commit list"
+msgstr "<%s-முடி> உறுதிமொழி பட்டியலின் கீழ் பகுதிக்கு உருட்டவும்"
+
+#: gitk:3270
+#, tcl-format
+msgid "<%s-Up>\tScroll commit list up one line"
+msgstr "<%s-மேலே>\tஉறுதிமொழி பட்டியலை ஒரு வரி மேலே உருட்டவும்"
+
+#: gitk:3271
+#, tcl-format
+msgid "<%s-Down>\tScroll commit list down one line"
+msgstr "<%s-கீழ்>\tஉறுதிமொழி பட்டியலை ஒரு வரி கீழே உருட்டவும்"
+
+#: gitk:3272
+#, tcl-format
+msgid "<%s-PageUp>\tScroll commit list up one page"
+msgstr "<%s-பக்கம்மேலே>\tஉறுதிமொழி பட்டியலை ஒரு பக்கம் மேலே உருட்டவும்"
+
+#: gitk:3273
+#, tcl-format
+msgid "<%s-PageDown>\tScroll commit list down one page"
+msgstr "<%s-பக்கம்கீழ்>\tஉறுதிமொழி பட்டியலை ஒரு பக்கம் கீழே உருட்டவும்"
+
+#: gitk:3274
+msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
+msgstr "<உயர்த்து-மேலே>\tபின்னோக்கி கண்டுபிடி (மேல்நோக்கி, பின்னர் உறுதிமொழிகள்)"
+
+#: gitk:3275
+msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
+msgstr ""
+"<உயர்த்து-கீழே>\tமுன்னோக்குகளைக் கண்டறியவும் (கீழ்நோக்கி, முந்தைய "
+"உறுதிமொழிகள்)"
+
+#: gitk:3276
+msgid "<Delete>, b\tScroll diff view up one page"
+msgstr "<நீக்கு>, b\tசுருள் வேறுபாடு ஒரு பக்கத்தை மேலே காண்க"
+
+#: gitk:3277
+msgid "<Backspace>\tScroll diff view up one page"
+msgstr "<பின்வெளி>\tசுருள் வேறுபாடு ஒரு பக்கத்தை மேலே காண்க"
+
+#: gitk:3278
+msgid "<Space>\t\tScroll diff view down one page"
+msgstr "<Space>\t\tசுருள் வேறுபாடு ஒரு பக்கத்தைக் கீழே காண்க"
+
+#: gitk:3279
+msgid "u\t\tScroll diff view up 18 lines"
+msgstr "u\t\tசுருள் வேறுபாடு 18 வரிகளை மேலே காண்க"
+
+#: gitk:3280
+msgid "d\t\tScroll diff view down 18 lines"
+msgstr "d\t\tசுருள் வேறுபாடு 18 வரிகளைக் கீழே காண்க"
+
+#: gitk:3281
+#, tcl-format
+msgid "<%s-F>\t\tFind"
+msgstr "<%s-F>\t\tகண்டுபிடி"
+
+#: gitk:3282
+#, tcl-format
+msgid "<%s-G>\t\tMove to next find hit"
+msgstr "<%s-G>\t\tஅடுத்த கண்டுபிடிப்பு வெற்றிக்கு செல்"
+
+#: gitk:3283
+msgid "<Return>\tMove to next find hit"
+msgstr "<திரும்பு>\tஅடுத்ததைக் கண்டுபிடி"
+
+#: gitk:3284
+msgid "g\t\tGo to commit"
+msgstr "g\t\tஉறுதிமொழிக்கு செல்"
+
+#: gitk:3285
+msgid "/\t\tFocus the search box"
+msgstr "/\t\tதேடல் பெட்டியில் கவனம் செலுத்து"
+
+#: gitk:3286
+msgid "?\t\tMove to previous find hit"
+msgstr "?\t\tமுந்தைய கண்டுபிடிப்பு வெற்றிக்கு செல்"
+
+#: gitk:3287
+msgid "f\t\tScroll diff view to next file"
+msgstr "f\t\tஅடுத்த கோப்பிற்கு உருள் வேறுபாடு பார்வை"
+
+#: gitk:3288
+#, tcl-format
+msgid "<%s-S>\t\tSearch for next hit in diff view"
+msgstr "<%s-S>\t\tவேறுபாடு பார்வையில் அடுத்த வெற்றியைத் தேடுங்கள்"
+
+#: gitk:3289
+#, tcl-format
+msgid "<%s-R>\t\tSearch for previous hit in diff view"
+msgstr "<%s-r> வேறுபட்ட பார்வையில் முந்தைய வெற்றியைத் தேடுங்கள்"
+
+#: gitk:3290
+#, tcl-format
+msgid "<%s-KP+>\tIncrease font size"
+msgstr "<%s-KP+>\tஎழுத்துரு அளவை அதிகரி"
+
+#: gitk:3291
+#, tcl-format
+msgid "<%s-plus>\tIncrease font size"
+msgstr "<%s-plus>\tஎழுத்துரு அளவை அதிகரி"
+
+#: gitk:3292
+#, tcl-format
+msgid "<%s-KP->\tDecrease font size"
+msgstr "<%s-KP->\tஎழுத்துரு அளவைக் குறை"
+
+#: gitk:3293
+#, tcl-format
+msgid "<%s-minus>\tDecrease font size"
+msgstr "<%s-minus>\tஎழுத்துரு அளவைக் குறை"
+
+#: gitk:3294
+msgid "<F5>\t\tUpdate"
+msgstr "<F5>\t\tபுதுப்பிப்பு"
+
+#: gitk:3761 gitk:3770
+#, tcl-format
+msgid "Error creating temporary directory %s:"
+msgstr "தற்காலிக அடைவு %s ஐ உருவாக்குவது பிழை:"
+
+#: gitk:3783
+#, tcl-format
+msgid "Error getting \"%s\" from %s:"
+msgstr "%s இலிருந்து \" %s\" பெறுவது பிழை:"
+
+#: gitk:3846
+msgid "command failed:"
+msgstr "கட்டளை தோல்வியுற்றது:"
+
+#: gitk:3995
+msgid "No such commit"
+msgstr "அத்தகைய உறுதிமொழி இல்லை"
+
+#: gitk:4009
+msgid "git gui blame: command failed:"
+msgstr "அறிவிலி இடைமுக பழி: கட்டளை தோல்வியுற்றது:"
+
+#: gitk:4040
+#, tcl-format
+msgid "Couldn't read merge head: %s"
+msgstr "ஒன்றிணைப்பு தலையைப் படிக்க முடியவில்லை: %s"
+
+#: gitk:4048
+#, tcl-format
+msgid "Error reading index: %s"
+msgstr "பிழை வாசிப்பு குறியீடு: %s"
+
+#: gitk:4073
+#, tcl-format
+msgid "Couldn't start git blame: %s"
+msgstr "அறிவிலி பழியைத் தொடங்க முடியவில்லை: %s"
+
+#: gitk:4076 gitk:6965
+msgid "Searching"
+msgstr "தேடுகிறது"
+
+#: gitk:4108
+#, tcl-format
+msgid "Error running git blame: %s"
+msgstr "பிழை இயங்கும் அறிவிலி பழி: %s"
+
+#: gitk:4136
+#, tcl-format
+msgid "That line comes from commit %s, which is not in this view"
+msgstr ""
+"அந்த வரி உறுதிமொழி %s என்பதிலிருந்து வருகிறது, இது இந்த பார்வையில் இல்லை"
+
+#: gitk:4150
+msgid "External diff viewer failed:"
+msgstr "வெளிப்புற வேறுபாடு பார்வையாளர் தோல்வியுற்றது:"
+
+#: gitk:4254
+msgid "All files"
+msgstr "அனைத்து கோப்புகளும்"
+
+#: gitk:4278
+msgid "View"
+msgstr "காண்க"
+
+#: gitk:4281
+msgid "Gitk view definition"
+msgstr "அறிவிலிகே பார்வை வரையறை"
+
+#: gitk:4285
+msgid "Remember this view"
+msgstr "இந்த பார்வையை நினைவில் கொள்ளுங்கள்"
+
+#: gitk:4286
+msgid "References (space separated list):"
+msgstr "குறிப்புகள் (இடைவெளி பிரிக்கப்பட்ட பட்டியல்):"
+
+#: gitk:4287
+msgid "Branches & tags:"
+msgstr "கிளைகள் மற்றும் குறிச்சொற்கள்:"
+
+#: gitk:4288
+msgid "All refs"
+msgstr "அனைத்து குறிப்புகள்"
+
+#: gitk:4289
+msgid "All (local) branches"
+msgstr "அனைத்து (உள்ளக) கிளைகளும்"
+
+#: gitk:4290
+msgid "All tags"
+msgstr "அனைத்து குறிச்சொற்களும்"
+
+#: gitk:4291
+msgid "All remote-tracking branches"
+msgstr "அனைத்து தொலை-கண்காணிப்பு கிளைகளும்"
+
+#: gitk:4292
+msgid "Commit Info (regular expressions):"
+msgstr "உறுதிமொழி செய்தி (வழக்கமான வெளிப்பாடுகள்):"
+
+#: gitk:4293
+msgid "Author:"
+msgstr "ஆசிரியர்:"
+
+#: gitk:4294
+msgid "Committer:"
+msgstr "உறுதிமொழிபவர்:"
+
+#: gitk:4295
+msgid "Commit Message:"
+msgstr "உறுதிமொழி செய்தி:"
+
+#: gitk:4296
+msgid "Matches all Commit Info criteria"
+msgstr "அனைத்து உறுதிமொழி செய்தி அளவுகோல்களையும் பொருத்துகிறது"
+
+#: gitk:4297
+msgid "Matches no Commit Info criteria"
+msgstr "உறுதிமொழி செய்தி அளவுகோல்களுடன் பொருந்தவில்லை"
+
+#: gitk:4298
+msgid "Changes to Files:"
+msgstr "கோப்புகளில் மாற்றங்கள்:"
+
+#: gitk:4299
+msgid "Fixed String"
+msgstr "நிலையான சரம்"
+
+#: gitk:4300
+msgid "Regular Expression"
+msgstr "வழக்கமான வெளிப்பாடு"
+
+#: gitk:4301
+msgid "Search string:"
+msgstr "தேடல் சரம்:"
+
+#: gitk:4302
+msgid ""
+"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
+"15:27:38\"):"
+msgstr ""
+"உறுதிமொழி தேதிகள் (\"2 வாரங்களுக்கு முன்பு\", \"2009-01-16 15:27:38\", \"மார்ச் 17, "
+"2009 15:27:38\"):"
+
+#: gitk:4303
+msgid "Since:"
+msgstr "பின்னர்:"
+
+#: gitk:4304
+msgid "Until:"
+msgstr "வரை:"
+
+#: gitk:4305
+msgid "Limit and/or skip a number of revisions (positive integer):"
+msgstr ""
+"பல திருத்தங்களை (நேர்மறை முழு எண்) கட்டுப்படுத்து மற்றும்/அல்லது தவிர்:"
+
+#: gitk:4306
+msgid "Number to show:"
+msgstr "காண்பிக்க எண்:"
+
+#: gitk:4307
+msgid "Number to skip:"
+msgstr "தவிர்க்க எண்:"
+
+#: gitk:4308
+msgid "Miscellaneous options:"
+msgstr "இதர விருப்பங்கள்:"
+
+#: gitk:4309
+msgid "Strictly sort by date"
+msgstr "கண்டிப்பாக தேதியின்படி வரிசைப்படுத்து"
+
+#: gitk:4310
+msgid "Mark branch sides"
+msgstr "கிளை பக்கங்களைக் குறி"
+
+#: gitk:4311
+msgid "Limit to first parent"
+msgstr "முதல் பெற்றோருக்கு வரம்பு"
+
+#: gitk:4312
+msgid "Simple history"
+msgstr "எளிய வரலாறு"
+
+#: gitk:4313
+msgid "Additional arguments to git log:"
+msgstr "அறிவிலி பதிவுக்கு கூடுதல் வாதங்கள்:"
+
+#: gitk:4314
+msgid "Enter files and directories to include, one per line:"
+msgstr "சேர்க்க கோப்புகள் மற்றும் கோப்பகங்களை உள்ளிடவும், ஒரு வரிக்கு ஒன்று:"
+
+#: gitk:4315
+msgid "Command to generate more commits to include:"
+msgstr "சேர்க்க கூடுதல் உறுதிமொழிகளை உருவாக்க கட்டளை:"
+
+#: gitk:4439
+msgid "Gitk: edit view"
+msgstr "அறிவிலிகே: திருத்து பார்வை"
+
+#: gitk:4447
+msgid "-- criteria for selecting revisions"
+msgstr "-- திருத்தங்களைத் தேர்ந்தெடுப்பதற்கான அளவுகோல்கள்"
+
+#: gitk:4452
+msgid "View Name"
+msgstr "பெயரைக் காண்க"
+
+#: gitk:4527
+msgid "Apply (F5)"
+msgstr "இடு (F5)"
+
+#: gitk:4565
+msgid "Error in commit selection arguments:"
+msgstr "உறுதிமொழி தேர்வு வாதங்களில் பிழை:"
+
+#: gitk:4620 gitk:4673 gitk:5135 gitk:5149 gitk:6419 gitk:12820 gitk:12821
+msgid "None"
+msgstr "எதுவுமில்லை"
+
+#: gitk:5232 gitk:5237
+msgid "Descendant"
+msgstr "வழித்தோன்றல்"
+
+#: gitk:5233
+msgid "Not descendant"
+msgstr "வழித்தோன்றல் அல்ல"
+
+#: gitk:5240 gitk:5245
+msgid "Ancestor"
+msgstr "மூதாதையர்"
+
+#: gitk:5241
+msgid "Not ancestor"
+msgstr "மூதாதையர் அல்ல"
+
+#: gitk:5535
+msgid "Local changes checked in to index but not committed"
+msgstr ""
+"உள்ளக மாற்றங்கள் குறியீட்டில் சரிபார்க்கப்பட்டன, ஆனால் உறுதிமொழியவில்லை"
+
+#: gitk:5571
+msgid "Local uncommitted changes, not checked in to index"
+msgstr "உள்ளக உறுதிமொழியாத மாற்றங்கள், குறியீட்டில் சரிபார்க்கப்படவில்லை"
+
+#: gitk:7319
+msgid "Error starting web browser:"
+msgstr "வலை உலாவியைத் தொடங்குவதில் பிழை:"
+
+#: gitk:7380
+msgid "and many more"
+msgstr "மற்றும் மேலும் பல"
+
+#: gitk:7383
+msgid "many"
+msgstr "பல"
+
+#: gitk:7578
+msgid "Tags:"
+msgstr "குறிச்சொற்கள்:"
+
+#: gitk:7595 gitk:7601 gitk:9081
+msgid "Parent"
+msgstr "பெற்றோர்"
+
+#: gitk:7606
+msgid "Child"
+msgstr "குழந்தை"
+
+#: gitk:7615
+msgid "Branch"
+msgstr "கிளை"
+
+#: gitk:7618
+msgid "Follows"
+msgstr "பின்வருமாறு"
+
+#: gitk:7621
+msgid "Precedes"
+msgstr "முன்னால்"
+
+#: gitk:8216
+#, tcl-format
+msgid "Error getting diffs: %s"
+msgstr "வேறுபாடு பெறுவதில் பிழை: %s"
+
+#: gitk:8906
+msgid "Goto:"
+msgstr "செல்:"
+
+#: gitk:8927
+#, tcl-format
+msgid "Short commit ID %s is ambiguous"
+msgstr "குறுகிய உறுதிமொழி அடையாளம் %s தெளிவற்றவை"
+
+#: gitk:8934
+#, tcl-format
+msgid "Revision %s is not known"
+msgstr "திருத்தம் %s தெரியவில்லை"
+
+#: gitk:8944
+#, tcl-format
+msgid "Commit ID %s is not known"
+msgstr "உறுதிமொழி அடையாளம் %s அறியப்படவில்லை"
+
+#: gitk:8946
+#, tcl-format
+msgid "Revision %s is not in the current view"
+msgstr "திருத்தம் %s தற்போதைய பார்வையில் இல்லை"
+
+#: gitk:9088 gitk:9103
+msgid "Date"
+msgstr "திகதி"
+
+#: gitk:9091
+msgid "Children"
+msgstr "குழந்தைகள்"
+
+#: gitk:9154
+#, tcl-format
+msgid "Reset %s branch to here"
+msgstr "%s கிளையை இங்கே மீட்டமை"
+
+#: gitk:9156
+msgid "Detached head: can't reset"
+msgstr "பிரிக்கப்பட்ட தலை: மீட்டமைக்க முடியாது"
+
+#: gitk:9261 gitk:9267
+msgid "Skipping merge commit "
+msgstr "ஒன்றிணை உறுதிமொழியை தவர்கிறது "
+
+#: gitk:9276 gitk:9281
+msgid "Error getting patch ID for "
+msgstr "ஒட்டு அடையாளத்தைப் பெறுவதில் பிழை"
+
+#: gitk:9277 gitk:9282
+msgid " - stopping\n"
+msgstr "- நிறுத்துதல்\n"
+
+#: gitk:9287 gitk:9290 gitk:9298 gitk:9312 gitk:9321
+msgid "Commit "
+msgstr "உறுதிமொழி"
+
+#: gitk:9291
+msgid ""
+" is the same patch as\n"
+" "
+msgstr "அதே ஒட்டு\n"
+" "
+
+#: gitk:9299
+msgid ""
+" differs from\n"
+" "
+msgstr "இருந்து வேறுபடுகிறது\n"
+" "
+
+#: gitk:9301
+msgid ""
+"Diff of commits:\n"
+"\n"
+msgstr "உறுதிமொழியின் வேறுபாடு:\n"
+"\n"
+
+#: gitk:9313 gitk:9322
+#, tcl-format
+msgid " has %s children - stopping\n"
+msgstr "%s குழந்தைகள் உள்ளனர் - நிறுத்துதல்\n"
+
+#: gitk:9341
+#, tcl-format
+msgid "Error writing commit to file: %s"
+msgstr "உறுதிமொழி கோப்பில் எழுதுதல் பிழை: %s"
+
+#: gitk:9347
+#, tcl-format
+msgid "Error diffing commits: %s"
+msgstr "உறுதிமொழிகள் வேறுபாடு பிழை: %s"
+
+#: gitk:9393
+msgid "Top"
+msgstr "மேலே"
+
+#: gitk:9394
+msgid "From"
+msgstr "இருந்து"
+
+#: gitk:9399
+msgid "To"
+msgstr "பெறுநர்"
+
+#: gitk:9423
+msgid "Generate patch"
+msgstr "ஒட்டை உருவாக்கு"
+
+#: gitk:9425
+msgid "From:"
+msgstr "இருந்து:"
+
+#: gitk:9434
+msgid "To:"
+msgstr "இதற்கு:"
+
+#: gitk:9443
+msgid "Reverse"
+msgstr "தலைகீழ்"
+
+#: gitk:9445 gitk:9655
+msgid "Output file:"
+msgstr "வெளியீட்டு கோப்பு:"
+
+#: gitk:9451
+msgid "Generate"
+msgstr "உருவாக்கு"
+
+#: gitk:9489
+msgid "Error creating patch:"
+msgstr "ஒட்டை உருவாக்கு பிழை:"
+
+#: gitk:9512 gitk:9643 gitk:9731
+msgid "ID:"
+msgstr "அடையாளம்:"
+
+#: gitk:9521
+msgid "Tag name:"
+msgstr "குறிச்சொல் பெயர்:"
+
+#: gitk:9524
+msgid "Tag message is optional"
+msgstr "குறிச்சொல் செய்தி விருப்பமானது"
+
+#: gitk:9526
+msgid "Tag message:"
+msgstr "குறிச்சொல் செய்தி:"
+
+#: gitk:9530 gitk:9701
+msgid "Create"
+msgstr "உருவாக்கு"
+
+#: gitk:9548
+msgid "No tag name specified"
+msgstr "குறிச்சொல் பெயர் குறிப்பிடப்படவில்லை"
+
+#: gitk:9552
+#, tcl-format
+msgid "Tag \"%s\" already exists"
+msgstr "குறிச்சொல் \"%s\" ஏற்கனவே உள்ளது"
+
+#: gitk:9562
+msgid "Error creating tag:"
+msgstr "குறிச்சொல்லை உருவாக்கு பிழை:"
+
+#: gitk:9652
+msgid "Command:"
+msgstr "கட்டளை:"
+
+#: gitk:9660
+msgid "Write"
+msgstr "எழுது"
+
+#: gitk:9678
+msgid "Error writing commit:"
+msgstr "பிழை எழுதுதல் உறுதிமொழி:"
+
+#: gitk:9700
+msgid "Create branch"
+msgstr "கிளையை உருவாக்கு"
+
+#: gitk:9716
+#, tcl-format
+msgid "Rename branch %s"
+msgstr "%s கிளையை மறுபெயரிடு"
+
+#: gitk:9717
+msgid "Rename"
+msgstr "மறுபெயரிடு"
+
+#: gitk:9741
+msgid "Name:"
+msgstr "பெயர்:"
+
+#: gitk:9765
+msgid "Please specify a name for the new branch"
+msgstr "புதிய கிளைக்கு ஒரு பெயரைக் குறிப்பிடு"
+
+#: gitk:9770
+#, tcl-format
+msgid "Branch '%s' already exists. Overwrite?"
+msgstr "கிளை '%s' ஏற்கனவே உள்ளது. மேலெழுதவா?"
+
+#: gitk:9814
+msgid "Please specify a new name for the branch"
+msgstr "கிளைக்கு ஒரு புதிய பெயரைக் குறிப்பிடு"
+
+#: gitk:9877
+#, tcl-format
+msgid "Commit %s is already included in branch %s -- really re-apply it?"
+msgstr ""
+"உறுதிமொழி %s ஏற்கனவே கிளை %s சேர்க்கப்பட்டுள்ளன-உண்மையில் அதை மீண்டும் இடவா?"
+
+#: gitk:9882
+msgid "Cherry-picking"
+msgstr "கனி எடுக்கும்"
+
+#: gitk:9891
+#, tcl-format
+msgid ""
+"Cherry-pick failed because of local changes to file '%s'.\n"
+"Please commit, reset or stash your changes and try again."
+msgstr ""
+"'%s' கோப்பில் உள்ளக மாற்றங்கள் காரணமாக கனி-எடு தோல்வியடைந்தது. \n"
+"தயவுசெய்து உங்கள் மாற்றங்களைச் உறுதிமொழி, மீட்டமை அல்லது சேமி பிறகு மீண்டும் முயற்சி."
+
+#: gitk:9897
+msgid ""
+"Cherry-pick failed because of merge conflict.\n"
+"Do you wish to run git citool to resolve it?"
+msgstr ""
+"ஒன்றிணைக்கும் மோதல் காரணமாக கனி-எடு தோல்வியடைந்தது. \n"
+"அதை தீர்க்க அறிவிலி சிஐகருவியை இயக்க விரும்புகிறீர்களா?"
+
+#: gitk:9913 gitk:9971
+msgid "No changes committed"
+msgstr "எந்த மாற்றங்களும் உறுதிமொழியப்படவில்லை"
+
+#: gitk:9940
+#, tcl-format
+msgid "Commit %s is not included in branch %s -- really revert it?"
+msgstr ""
+"உறுதிமொழி %s கிளை %s சேர்க்கப்படவில்லை - உண்மையில் அதை மீட்டெடுக்கவா?"
+
+#: gitk:9945
+msgid "Reverting"
+msgstr "மீட்டெடுத்தல்"
+
+#: gitk:9953
+#, tcl-format
+msgid ""
+"Revert failed because of local changes to the following files:%s Please "
+"commit, reset or stash your changes and try again."
+msgstr ""
+"பின்வரும் கோப்புகளில் உள்ளக மாற்றங்கள் காரணமாக மீட்டெடு தோல்வியுற்றது:%s "
+"தயவுசெய்து உங்கள் மாற்றங்களைச் உறுதிமொழி, மீட்டமை அல்லது "
+"சேமி மற்றும் மீண்டும் முயற்சி."
+
+#: gitk:9957
+msgid ""
+"Revert failed because of merge conflict.\n"
+" Do you wish to run git citool to resolve it?"
+msgstr ""
+"ஒன்றிணைக்கும் மோதல் காரணமாக மீட்டெடு தோல்வியடைந்தது. \n"
+"அதை தீர்க்க அறிவிலி சிஐகருவியை இயக்க விரும்புகிறீர்களா?"
+
+#: gitk:10000
+msgid "Confirm reset"
+msgstr "மீட்டமைப்பை உறுதிப்படுத்து"
+
+#: gitk:10002
+#, tcl-format
+msgid "Reset branch %s to %s?"
+msgstr "%s கிளையை %s க்கு மீட்டமைக்கவா?"
+
+#: gitk:10004
+msgid "Reset type:"
+msgstr "மீட்டமை வகை:"
+
+#: gitk:10007
+msgid "Soft: Leave working tree and index untouched"
+msgstr ""
+"மென்மை: வேலை செய்யும் மரம் மற்றும் குறியீட்டைத் தீண்டாமல் விடு"
+
+#: gitk:10010
+msgid "Mixed: Leave working tree untouched, reset index"
+msgstr ""
+"கலப்பு: வேலை செய்யும் மரத்தை தீண்டாமல் விடு, குறியீட்டை மீட்டமை"
+
+#: gitk:10013
+msgid ""
+"Hard: Reset working tree and index\n"
+"(discard ALL local changes)"
+msgstr ""
+"கடினம்: வேலை செய்யும் மரம் மற்றும் குறியீட்டை மீட்டமை \n"
+"(அனைத்து உள்ளக மாற்றங்களையும் நிராகரி)"
+
+#: gitk:10030
+msgid "Resetting"
+msgstr "மீட்டமைத்தல்"
+
+#: gitk:10103
+#, tcl-format
+msgid "A local branch named %s exists already"
+msgstr "%s என்ற உள்ளக கிளை ஏற்கனவே உள்ளது"
+
+#: gitk:10111
+msgid "Checking out"
+msgstr "சரிபார்"
+
+#: gitk:10170
+msgid "Cannot delete the currently checked-out branch"
+msgstr "தற்போது சரிபார்க்கப்பட்ட கிளையை நீக்க முடியாது"
+
+#: gitk:10176
+#, tcl-format
+msgid ""
+"The commits on branch %s aren't on any other branch.\n"
+"Really delete branch %s?"
+msgstr ""
+"கிளை %s மீதான உறுதிமொழிகள் வேறு எந்த கிளையிலும் இல்லை. \n"
+"உண்மையில் கிளை %s நீக்கவா?"
+
+#: gitk:10207
+#, tcl-format
+msgid "Tags and heads: %s"
+msgstr "குறிச்சொற்கள் மற்றும் தலைகள்: %s"
+
+#: gitk:10224
+msgid "Filter"
+msgstr "வடிப்பி"
+
+#: gitk:10531
+msgid ""
+"Error reading commit topology information; branch and preceding/following "
+"tag information will be incomplete."
+msgstr ""
+"உறுதிமொழி இடவியல் தகவலை படிப்பதில் பிழை; கிளை மற்றும் அதற்கு "
+"முந்தைய/பின்வரும் குறிச்சொல் செய்தி முழுமையடையாது."
+
+#: gitk:11508
+msgid "Tag"
+msgstr "குறிச்சொல்"
+
+#: gitk:11512
+msgid "Id"
+msgstr "அடையாளம்"
+
+#: gitk:11595
+msgid "Gitk font chooser"
+msgstr "அறிவிலிகே எழுத்துரு தேர்வு"
+
+#: gitk:11612
+msgid "B"
+msgstr "பி"
+
+#: gitk:11615
+msgid "I"
+msgstr "ஐ"
+
+#: gitk:11734
+msgid "Commit list display options"
+msgstr "உறுதிமொழி பட்டியல் காட்சி விருப்பங்கள்"
+
+#: gitk:11737
+msgid "Maximum graph width (lines)"
+msgstr "அதிகபட்ச வரைபட அகலம் (கோடுகள்)"
+
+#: gitk:11741
+#, no-tcl-format
+msgid "Maximum graph width (% of pane)"
+msgstr "அதிகபட்ச வரைபட அகலம் (பலகத்தின் %)"
+
+#: gitk:11744
+msgid "Show local changes"
+msgstr "உள்ளக மாற்றங்களைக் காட்டு"
+
+#: gitk:11747
+msgid "Hide remote refs"
+msgstr "தொலை குறிகளை மறை"
+
+#: gitk:11751
+msgid "Copy commit ID to clipboard"
+msgstr "இடைநிலைப்பலகைக்கு அடையாளத்தை நகலெடு"
+
+#: gitk:11755
+msgid "Copy commit ID to X11 selection"
+msgstr "உறுதிமொழி அடையாளத்தை ஃ11 பகுதிக்கு நகலெடு"
+
+#: gitk:11760
+msgid "Length of commit ID to copy"
+msgstr "நகலெடுக்க உறுதிமொழி அடையாளத்தின் நீளம்"
+
+#: gitk:11763
+msgid "Diff display options"
+msgstr "வேறுபாடு காட்சி விருப்பங்கள்"
+
+#: gitk:11765
+msgid "Tab spacing"
+msgstr "தாவல் இடைவெளி"
+
+#: gitk:11769
+msgid "Wrap comment text"
+msgstr "கருத்து உரையை மடி"
+
+#: gitk:11774
+msgid "Wrap other text"
+msgstr "மற்ற உரையை மடி"
+
+#: gitk:11779
+msgid "Display nearby tags/heads"
+msgstr "அருகிலுள்ள குறிச்சொற்கள்/தலைகளைக் காண்பி"
+
+#: gitk:11782
+msgid "Maximum # tags/heads to show"
+msgstr "காண்பிக்க அதிகபட்ச # குறிச்சொற்கள்/தலைகள்"
+
+#: gitk:11785
+msgid "Limit diffs to listed paths"
+msgstr "பட்டியலிடப்பட்ட பாதைகளுக்கு வரம்பு வேறுபடுகிறது"
+
+#: gitk:11788
+msgid "Support per-file encodings"
+msgstr "ஒரு கோப்பு குறியீடுகளை ஆதரி"
+
+#: gitk:11794 gitk:11961
+msgid "External diff tool"
+msgstr "வெளிப்புற வேறுபாடு கருவி"
+
+#: gitk:11795
+msgid "Choose..."
+msgstr "தேர்வு..."
+
+#: gitk:11802
+msgid "Web browser"
+msgstr "வலை உலாவி"
+
+#: gitk:11807
+msgid "General options"
+msgstr "பொது விருப்பங்கள்"
+
+#: gitk:11810
+msgid "Use themed widgets"
+msgstr "கருப்பொருள் நிரல்பலகைகளைப் பயன்படுத்து"
+
+#: gitk:11812
+msgid "(change requires restart)"
+msgstr "(மாற்றத்திற்கு மறுதொடக்கம் தேவை)"
+
+#: gitk:11814
+msgid "(currently unavailable)"
+msgstr "(தற்போது கிடைக்கவில்லை)"
+
+#: gitk:11826
+msgid "Colors: press to choose"
+msgstr "நிறங்கள்: தேர்வு செய்ய அழுத்தவும்"
+
+#: gitk:11829
+msgid "Interface"
+msgstr "இடைமுகம்"
+
+#: gitk:11830
+msgid "interface"
+msgstr "இடைமுகம்"
+
+#: gitk:11833
+msgid "Background"
+msgstr "பின்னணி"
+
+#: gitk:11834 gitk:11876
+msgid "background"
+msgstr "பின்னணி"
+
+#: gitk:11837
+msgid "Foreground"
+msgstr "முன்புறம்"
+
+#: gitk:11838
+msgid "foreground"
+msgstr "முன்புறம்"
+
+#: gitk:11841
+msgid "Diff: old lines"
+msgstr "வேறுபாடு: பழைய வரிகள்"
+
+#: gitk:11842
+msgid "diff old lines"
+msgstr "பழைய வரிகள் வேறுபாடு"
+
+#: gitk:11846
+msgid "Diff: old lines bg"
+msgstr "வேறுபாடு: பழைய வரிகள் பின்ணனி"
+
+#: gitk:11848
+msgid "diff old lines bg"
+msgstr "பழைய வரிகள் பின்ணனி வேறுபாடு"
+
+#: gitk:11852
+msgid "Diff: new lines"
+msgstr "வேறுபாடு: புதிய கோடுகள்"
+
+#: gitk:11853
+msgid "diff new lines"
+msgstr "புதிய வரிகள் வேறுபாடு"
+
+#: gitk:11857
+msgid "Diff: new lines bg"
+msgstr "வேறுபாடு: புதிய வரிகள் பின்ணனி"
+
+#: gitk:11859
+msgid "diff new lines bg"
+msgstr "புதிய வரிகளை பின்ணனி வேறுபாடு"
+
+#: gitk:11863
+msgid "Diff: hunk header"
+msgstr "வேறுபாடு: அங்க் தலைப்பு"
+
+#: gitk:11865
+msgid "diff hunk header"
+msgstr "அங்க் தலைப்பு வேறுபாடு"
+
+#: gitk:11869
+msgid "Marked line bg"
+msgstr "குறிக்கப்பட்ட வரி பின்னணி"
+
+#: gitk:11871
+msgid "marked line background"
+msgstr "குறிக்கப்பட்ட வரி பின்னணி"
+
+#: gitk:11875
+msgid "Select bg"
+msgstr "பின்னணி தேர்வு"
+
+#: gitk:11884
+msgid "Fonts: press to choose"
+msgstr "எழுத்துருக்கள்: தேர்வு செய்ய அழுத்து"
+
+#: gitk:11886
+msgid "Main font"
+msgstr "முதன்மையான எழுத்துரு"
+
+#: gitk:11887
+msgid "Diff display font"
+msgstr "காட்சி எழுத்துரு வேறுபாடு"
+
+#: gitk:11888
+msgid "User interface font"
+msgstr "பயனர் இடைமுக எழுத்துரு"
+
+#: gitk:11910
+msgid "Gitk preferences"
+msgstr "அறிவிலிகே விருப்பத்தேர்வுகள்"
+
+#: gitk:11919
+msgid "General"
+msgstr "பொது"
+
+#: gitk:11920
+msgid "Colors"
+msgstr "நிறங்கள்"
+
+#: gitk:11921
+msgid "Fonts"
+msgstr "எழுத்துருக்கள்"
+
+#: gitk:11971
+#, tcl-format
+msgid "Gitk: choose color for %s"
+msgstr "அறிவிலிகே: %s க்கு வண்ணத்தைத் தேர்வுசெய்க"
+
+#: gitk:12490
+msgid ""
+"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
+" Gitk requires at least Tcl/Tk 8.4."
+msgstr ""
+"மன்னிக்கவும், டிசிஎல்/டிகேயின் இந்த பதிப்பைக் கொண்டு அறிவிலிகே இயக்க முடியாது. \n"
+"அறிவிலிகேவுக்கு குறைந்தபட்சம் டிசிஎல்/டிகே 8.4 தேவைப்படுகிறது."
+
+#: gitk:12711
+msgid "Cannot find a git repository here."
+msgstr "இங்கே ஒரு அறிவிலி களஞ்சியத்தைக் கண்டுபிடிக்க முடியவில்லை."
+
+#: gitk:12758
+#, tcl-format
+msgid "Ambiguous argument '%s': both revision and filename"
+msgstr "தெளிவற்ற வாதம் '%s': திருத்தம் மற்றும் கோப்பு பெயர்"
+
+#: gitk:12770
+msgid "Bad arguments to gitk:"
+msgstr "அறிவிலிகேவிற்கு மோசமான வாதங்கள்:"
+
+#~ msgid "SHA1 ID:"
+#~ msgstr "சா1 அடையாளம்:"
+
+#~ msgid "Auto-select SHA1 (length)"
+#~ msgstr "தானாக தேர்ந்தெடுக்கப்பட்ட சா1 (நீளம்)"