diff options
Diffstat (limited to 'gitk-git')
-rwxr-xr-x | gitk-git/gitk | 136 | ||||
-rw-r--r-- | gitk-git/po/ru.po | 24 |
2 files changed, 92 insertions, 68 deletions
diff --git a/gitk-git/gitk b/gitk-git/gitk index e82c6bfede..64ef3c4013 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -2,20 +2,16 @@ # Tcl ignores the next line -*- tcl -*- \ exec wish "$0" -- "$@" -# Copyright © 2005-2009 Paul Mackerras. All rights reserved. +# Copyright © 2005-2011 Paul Mackerras. All rights reserved. # This program is free software; it may be used, copied, modified # and distributed under the terms of the GNU General Public Licence, # either version 2, or (at your option) any later version. package require Tk -proc gitdir {} { - global env - if {[info exists env(GIT_DIR)]} { - return $env(GIT_DIR) - } else { - return [exec git rev-parse --git-dir] - } +proc hasworktree {} { + return [expr {[exec git rev-parse --is-bare-repository] == "false" && + [exec git rev-parse --is-inside-git-dir] == "false"}] } # A simple scheduler for compute-intensive stuff. @@ -468,11 +464,11 @@ proc updatecommits {} { global viewactive viewcomplete tclencoding global startmsecs showneartags showlocalchanges global mainheadid viewmainheadid viewmainheadid_orig pending_select - global isworktree + global hasworktree global varcid vposids vnegids vflags vrevs global show_notes - set isworktree [expr {[exec git rev-parse --is-inside-work-tree] == "true"}] + set hasworktree [hasworktree] rereadrefs set view $curview if {$mainheadid ne $viewmainheadid_orig($view)} { @@ -659,7 +655,7 @@ proc newvarc {view id} { if {![info exists commitinfo($id)]} { parsecommit $id $commitdata($id) 1 } - set cdate [lindex $commitinfo($id) 4] + set cdate [lindex [lindex $commitinfo($id) 4] 0] if {![string is integer -strict $cdate]} { set cdate 0 } @@ -1621,7 +1617,7 @@ proc readcommit {id} { } proc parsecommit {id contents listed} { - global commitinfo cdate + global commitinfo set inhdr 1 set comment {} @@ -1641,10 +1637,10 @@ proc parsecommit {id contents listed} { set line [split $line " "] set tag [lindex $line 0] if {$tag == "author"} { - set audate [lindex $line end-1] + set audate [lrange $line end-1 end] set auname [join [lrange $line 1 end-2] " "] } elseif {$tag == "committer"} { - set comdate [lindex $line end-1] + set comdate [lrange $line end-1 end] set comname [join [lrange $line 1 end-2] " "] } } @@ -1671,11 +1667,9 @@ proc parsecommit {id contents listed} { } set comment $newcomment } - if {$comdate != {}} { - set cdate($id) $comdate - } + set hasnote [string first "\nNotes:\n" $contents] set commitinfo($id) [list $headline $auname $audate \ - $comname $comdate $comment] + $comname $comdate $comment $hasnote] } proc getcommit {id} { @@ -2437,9 +2431,9 @@ proc makewindow {} { bindkey n "selnextline 1" bindkey z "goback" bindkey x "goforw" - bindkey i "selnextline -1" - bindkey k "selnextline 1" - bindkey j "goback" + bindkey k "selnextline -1" + bindkey j "selnextline 1" + bindkey h "goback" bindkey l "goforw" bindkey b prevfile bindkey d "$ctext yview scroll 18 units" @@ -2652,7 +2646,7 @@ proc savestuff {w} { global viewname viewfiles viewargs viewargscmd viewperm nextviewnum global cmitmode wrapcomment datetimeformat limitdiffs global colors uicolor bgcolor fgcolor diffcolors diffcontext selectbgcolor - global autoselect extdifftool perfile_attrs markbgcolor use_ttk + global autoselect autosellen extdifftool perfile_attrs markbgcolor use_ttk global hideremotes want_ttk if {$stuffsaved} return @@ -2673,6 +2667,7 @@ proc savestuff {w} { puts $f [list set cmitmode $cmitmode] puts $f [list set wrapcomment $wrapcomment] puts $f [list set autoselect $autoselect] + puts $f [list set autosellen $autosellen] puts $f [list set showneartags $showneartags] puts $f [list set hideremotes $hideremotes] puts $f [list set showlocalchanges $showlocalchanges] @@ -2814,7 +2809,7 @@ proc about {} { message $w.m -text [mc " Gitk - a commit viewer for git -Copyright \u00a9 2005-2010 Paul Mackerras +Copyright \u00a9 2005-2011 Paul Mackerras Use and redistribute under the terms of the GNU General Public License"] \ -justify center -aspect 400 -border 2 -bg white -relief groove @@ -2849,9 +2844,9 @@ proc keys {} { [mc "<%s-W> Close window" $M1T] [mc "<Home> Move to first commit"] [mc "<End> Move to last commit"] -[mc "<Up>, p, i Move up one commit"] -[mc "<Down>, n, k Move down one commit"] -[mc "<Left>, z, j Go back in history list"] +[mc "<Up>, p, k Move up one commit"] +[mc "<Down>, n, j Move down one commit"] +[mc "<Left>, z, h Go back in history list"] [mc "<Right>, x, l Go forward in history list"] [mc "<PageUp> Move up one page in commit list"] [mc "<PageDown> Move down one page in commit list"] @@ -3332,8 +3327,7 @@ proc gitknewtmpdir {} { global diffnum gitktmpdir gitdir if {![info exists gitktmpdir]} { - set gitktmpdir [file join [file dirname $gitdir] \ - [format ".gitk-tmp.%s" [pid]]] + set gitktmpdir [file join $gitdir [format ".gitk-tmp.%s" [pid]]] if {[catch {file mkdir $gitktmpdir} err]} { error_popup "[mc "Error creating temporary directory %s:" $gitktmpdir] $err" unset gitktmpdir @@ -3365,10 +3359,10 @@ proc save_file_from_commit {filename output what} { proc external_diff_get_one_file {diffid filename diffdir} { global nullid nullid2 nullfile - global gitdir + global worktree if {$diffid == $nullid} { - set difffile [file join [file dirname $gitdir] $filename] + set difffile [file join $worktree $filename] if {[file exists $difffile]} { return $difffile } @@ -3558,7 +3552,7 @@ proc make_relative {f} { } proc external_blame {parent_idx {line {}}} { - global flist_menu_file gitdir + global flist_menu_file cdup global nullid nullid2 global parentlist selectedline currentid @@ -3577,7 +3571,7 @@ proc external_blame {parent_idx {line {}}} { if {$line ne {} && $line > 1} { lappend cmdline "--line=$line" } - set f [file join [file dirname $gitdir] $flist_menu_file] + set f [file join $cdup $flist_menu_file] # Unfortunately it seems git gui blame doesn't like # being given an absolute path... set f [make_relative $f] @@ -3590,7 +3584,7 @@ proc external_blame {parent_idx {line {}}} { proc show_line_source {} { global cmitmode currentid parents curview blamestuff blameinst global diff_menu_line diff_menu_filebase flist_menu_file - global nullid nullid2 gitdir + global nullid nullid2 gitdir cdup set from_index {} if {$cmitmode eq "tree"} { @@ -3643,7 +3637,7 @@ proc show_line_source {} { } else { lappend blameargs $id } - lappend blameargs -- [file join [file dirname $gitdir] $flist_menu_file] + lappend blameargs -- [file join $cdup $flist_menu_file] if {[catch { set f [open $blameargs r] } err]} { @@ -4528,12 +4522,22 @@ proc makepatterns {l} { proc do_file_hl {serial} { global highlight_files filehighlight highlight_paths gdttype fhl_list + global cdup findtype if {$gdttype eq [mc "touching paths:"]} { + # If "exact" match then convert backslashes to forward slashes. + # Most useful to support Windows-flavoured file paths. + if {$findtype eq [mc "Exact"]} { + set highlight_files [string map {"\\" "/"} $highlight_files] + } if {[catch {set paths [shellsplit $highlight_files]}]} return set highlight_paths [makepatterns $paths] highlight_filelist - set gdtargs [concat -- $paths] + set relative_paths {} + foreach path $paths { + lappend relative_paths [file join $cdup $path] + } + set gdtargs [concat -- $relative_paths] } elseif {$gdttype eq [mc "adding/removing string:"]} { set gdtargs [list "-S$highlight_files"] } else { @@ -5030,9 +5034,9 @@ proc dohidelocalchanges {} { # spawn off a process to do git diff-index --cached HEAD proc dodiffindex {} { global lserial showlocalchanges vfilelimit curview - global isworktree + global hasworktree - if {!$showlocalchanges || !$isworktree} return + if {!$showlocalchanges || !$hasworktree} return incr lserial set cmd "|git diff-index --cached HEAD" if {$vfilelimit($curview) ne {}} { @@ -5898,6 +5902,9 @@ proc drawcmittext {id row col} { || [info exists idotherrefs($id)]} { set xt [drawtags $id $x $xt $y] } + if {[lindex $commitinfo($id) 6] > 0} { + set xt [drawnotesign $xt $y] + } set headline [lindex $commitinfo($id) 0] set name [lindex $commitinfo($id) 1] set date [lindex $commitinfo($id) 2] @@ -6300,6 +6307,7 @@ proc drawtags {id x xt y1} { -width $lthickness -fill black -tags tag.$id] $canv lower $t foreach tag $marks x $xvals wid $wvals { + set tag_quoted [string map {% %%} $tag] set xl [expr {$x + $delta}] set xr [expr {$x + $delta + $wid + $lthickness}] set font mainfont @@ -6308,7 +6316,7 @@ proc drawtags {id x xt y1} { set t [$canv create polygon $x [expr {$yt + $delta}] $xl $yt \ $xr $yt $xr $yb $xl $yb $x [expr {$yb - $delta}] \ -width 1 -outline black -fill yellow -tags tag.$id] - $canv bind $t <1> [list showtag $tag 1] + $canv bind $t <1> [list showtag $tag_quoted 1] set rowtextx([rowofcommit $id]) [expr {$xr + $linespc}] } else { # draw a head or other ref @@ -6335,14 +6343,25 @@ proc drawtags {id x xt y1} { set t [$canv create text $xl $y1 -anchor w -text $tag -fill $fgcolor \ -font $font -tags [list tag.$id text]] if {$ntags >= 0} { - $canv bind $t <1> [list showtag $tag 1] + $canv bind $t <1> [list showtag $tag_quoted 1] } elseif {$nheads >= 0} { - $canv bind $t $ctxbut [list headmenu %X %Y $id $tag] + $canv bind $t $ctxbut [list headmenu %X %Y $id $tag_quoted] } } return $xt } +proc drawnotesign {xt y} { + global linespc canv fgcolor + + set orad [expr {$linespc / 3}] + set t [$canv create rectangle [expr {$xt - $orad}] [expr {$y - $orad}] \ + [expr {$xt + $orad - 1}] [expr {$y + $orad - 1}] \ + -fill yellow -outline $fgcolor -width 1 -tags circle] + set xt [expr {$xt + $orad * 3}] + return $xt +} + proc xcoord {i level ln} { global canvx0 xspc1 xspc2 @@ -6896,7 +6915,7 @@ proc selectline {l isnew {desired_loc {}}} { global mergemax numcommits pending_select global cmitmode showneartags allcommits global targetrow targetid lastscrollrows - global autoselect jump_to_here + global autoselect autosellen jump_to_here catch {unset pending_select} $canv delete hover @@ -6958,7 +6977,7 @@ proc selectline {l isnew {desired_loc {}}} { $sha1entry delete 0 end $sha1entry insert 0 $id if {$autoselect} { - $sha1entry selection range 0 end + $sha1entry selection range 0 $autosellen } rhighlight_sel $id @@ -9041,6 +9060,7 @@ proc exec_citool {tool_args {baseid {}}} { proc cherrypick {} { global rowmenuid curview global mainhead mainheadid + global gitdir set oldhead [exec git rev-parse HEAD] set dheads [descheads $rowmenuid] @@ -9063,13 +9083,13 @@ proc cherrypick {} { to file '%s'.\nPlease commit, reset or stash\ your changes and try again." $fname] } elseif {[regexp -line \ - {^(CONFLICT \(.*\):|Automatic cherry-pick failed)} \ + {^(CONFLICT \(.*\):|Automatic cherry-pick failed|error: could not apply)} \ $err]} { if {[confirm_popup [mc "Cherry-pick failed because of merge\ conflict.\nDo you wish to run git citool to\ resolve it?"]]} { # Force citool to read MERGE_MSG - file delete [file join [gitdir] "GITGUI_MSG"] + file delete [file join $gitdir "GITGUI_MSG"] exec_citool {} $rowmenuid } } else { @@ -9435,6 +9455,7 @@ proc refill_reflist {} { proc getallcommits {} { global allcommits nextarc seeds allccache allcwait cachedarcs allcupdate global idheads idtags idotherrefs allparents tagobjid + global gitdir if {![info exists allcommits]} { set nextarc 0 @@ -9442,7 +9463,7 @@ proc getallcommits {} { set seeds {} set allcwait 0 set cachedarcs 0 - set allccache [file join [gitdir] "gitk.cache"] + set allccache [file join $gitdir "gitk.cache"] if {![catch { set f [open $allccache r] set allcwait 1 @@ -10756,7 +10777,7 @@ proc doprefs {} { global maxwidth maxgraphpct use_ttk NS global oldprefs prefstop showneartags showlocalchanges global uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor - global tabstop limitdiffs autoselect extdifftool perfile_attrs + global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs global hideremotes want_ttk have_ttk set top .gitkprefs @@ -10784,9 +10805,10 @@ proc doprefs {} { ${NS}::checkbutton $top.showlocal -text [mc "Show local changes"] \ -variable showlocalchanges grid x $top.showlocal -sticky w - ${NS}::checkbutton $top.autoselect -text [mc "Auto-select SHA1"] \ + ${NS}::checkbutton $top.autoselect -text [mc "Auto-select SHA1 (length)"] \ -variable autoselect - grid x $top.autoselect -sticky w + spinbox $top.autosellen -from 1 -to 40 -width 4 -textvariable autosellen + grid x $top.autoselect $top.autosellen -sticky w ${NS}::checkbutton $top.hideremotes -text [mc "Hide remote refs"] \ -variable hideremotes grid x $top.hideremotes -sticky w @@ -11021,7 +11043,7 @@ proc prefsok {} { proc formatdate {d} { global datetimeformat if {$d ne {}} { - set d [clock format $d -format $datetimeformat] + set d [clock format [lindex $d 0] -format $datetimeformat] } return $d } @@ -11428,6 +11450,7 @@ set showlocalchanges 1 set limitdiffs 1 set datetimeformat "%Y-%m-%d %H:%M:%S" set autoselect 1 +set autosellen 40 set perfile_attrs 0 set want_ttk 1 @@ -11501,14 +11524,10 @@ setui $uicolor setoptions # check that we can find a .git directory somewhere... -if {[catch {set gitdir [gitdir]}]} { +if {[catch {set gitdir [exec git rev-parse --git-dir]}]} { show_error {} . [mc "Cannot find a git repository here."] exit 1 } -if {![file isdirectory $gitdir]} { - show_error {} . [mc "Cannot find the git directory \"%s\"." $gitdir] - exit 1 -} set selecthead {} set selectheadid {} @@ -11581,7 +11600,7 @@ if {![info exists have_ttk]} { set use_ttk [expr {$have_ttk && $want_ttk}] set NS [expr {$use_ttk ? "ttk" : ""}] -set git_version [join [lrange [split [lindex [exec git version] end] .] 0 2] .] +regexp {^git version ([\d.]*\d)} [exec git version] _ git_version set show_notes {} if {[package vcompare $git_version "1.6.6.2"] >= 0} { @@ -11624,7 +11643,12 @@ set stopped 0 set stuffsaved 0 set patchnum 0 set lserial 0 -set isworktree [expr {[exec git rev-parse --is-inside-work-tree] == "true"}] +set hasworktree [hasworktree] +set cdup {} +if {[expr {[exec git rev-parse --is-inside-work-tree] == "true"}]} { + set cdup [exec git rev-parse --show-cdup] +} +set worktree [exec git rev-parse --show-toplevel] setcoords makewindow catch { diff --git a/gitk-git/po/ru.po b/gitk-git/po/ru.po index c3d0285b24..59873033af 100644 --- a/gitk-git/po/ru.po +++ b/gitk-git/po/ru.po @@ -24,7 +24,7 @@ msgstr "Ошибка в идентификаторе версии:" #: gitk:323 msgid "Error executing --argscmd command:" -msgstr "Ошибка выполнения команды заданой --argscmd:" +msgstr "Ошибка выполнения команды заданной --argscmd:" #: gitk:336 msgid "No files selected: --merge specified but no files are unmerged." @@ -37,7 +37,7 @@ msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." msgstr "" -"Файлы не выбраны: указан --merge, но в рамках указаного " +"Файлы не выбраны: указан --merge, но в рамках указанного " "ограничения на имена файлов нет ни одного " "где эта операция должна быть завершена." @@ -246,11 +246,11 @@ msgstr "Файлы" #: gitk:2326 gitk:2339 msgid "Diff this -> selected" -msgstr "Сравнить это состояние с выделеным" +msgstr "Сравнить это состояние с выделенным" #: gitk:2327 gitk:2340 msgid "Diff selected -> this" -msgstr "Сравнить выделеное с этим состоянием" +msgstr "Сравнить выделенное с этим состоянием" #: gitk:2328 gitk:2341 msgid "Make patch" @@ -440,11 +440,11 @@ msgstr "<%s-F>\t\tПоиск" #: gitk:2666 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" -msgstr "<%s-G>\t\tПерейти к следующему найденому состоянию" +msgstr "<%s-G>\t\tПерейти к следующему найденному состоянию" #: gitk:2667 msgid "<Return>\tMove to next find hit" -msgstr "<Return>\tПерейти к следующему найденому состоянию" +msgstr "<Return>\tПерейти к следующему найденному состоянию" #: gitk:2668 msgid "/\t\tFocus the search box" @@ -452,7 +452,7 @@ msgstr "/\t\tПерейти к полю поиска" #: gitk:2669 msgid "?\t\tMove to previous find hit" -msgstr "?\t\tПерейти к предыдущему найденому состоянию" +msgstr "?\t\tПерейти к предыдущему найденному состоянию" #: gitk:2670 msgid "f\t\tScroll diff view to next file" @@ -466,7 +466,7 @@ msgstr "<%s-S>\t\tПродолжить поиск в списке изменен #: gitk:2672 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" -msgstr "<%s-R>\t\tПерейти к предыдущему найденому тексту в списке изменений" +msgstr "<%s-R>\t\tПерейти к предыдущему найденному тексту в списке изменений" #: gitk:2673 #, tcl-format @@ -855,7 +855,7 @@ msgstr "Лёгкий: оставить рабочий каталог и инде #: gitk:8472 msgid "Mixed: Leave working tree untouched, reset index" msgstr "" -"Смешаный: оставить рабочий каталог неизменным, установить индекс" +"Смешанный: оставить рабочий каталог неизменным, установить индекс" #: gitk:8475 msgid "" @@ -962,7 +962,7 @@ msgstr "Показывать близкие метки" #: gitk:10126 msgid "Limit diffs to listed paths" -msgstr "Ограничить показ изменений выбраными файлами" +msgstr "Ограничить показ изменений выбранными файлами" #: gitk:10129 msgid "Support per-file encodings" @@ -1022,11 +1022,11 @@ msgstr "заголовок блока изменений" #: gitk:10169 msgid "Marked line bg" -msgstr "Фон выбраной строки" +msgstr "Фон выбранной строки" #: gitk:10171 msgid "marked line background" -msgstr "фон выбраной строки" +msgstr "фон выбранной строки" #: gitk:10175 msgid "Select bg" |