Merge tag 'gitgui-0.20.0' of http://repo.or.cz/r/git-gui
git-gui 0.20.0 * tag 'gitgui-0.20.0' of http://repo.or.cz/r/git-gui: git-gui: set version 0.20 git-gui: sv.po: Update Swedish translation (547t0f0u) git-gui i18n: Updated Bulgarian translation (547t,0f,0u) git-gui: Makes chooser set 'gitdir' to the resolved path git-gui: Fixes chooser not accepting gitfiles git-gui: reinstate support for Tcl 8.4 git-gui: fix problem with gui.maxfilesdisplayed git-gui: fix verbose loading when git path contains spaces. git-gui/gitk: Do not depend on Cygwin's "kill" command on Windows git-gui: add configurable tab size to the diff view git-gui: Make git-gui lib dir configurable at runime git-gui i18n: Updated Bulgarian translation (520t,0f,0u) L10n: vi.po (543t): Init translation for Vietnamese git-gui: align the new recursive checkbox with the radiobuttons. git-gui: Add a 'recursive' checkbox in the clone menu.
This commit is contained in:
@ -18,6 +18,7 @@ field local_path {} ; # Where this repository is locally
|
||||
field origin_url {} ; # Where we are cloning from
|
||||
field origin_name origin ; # What we shall call 'origin'
|
||||
field clone_type hardlink ; # Type of clone to construct
|
||||
field recursive true ; # Recursive cloning flag
|
||||
field readtree_err ; # Error output from read-tree (if any)
|
||||
field sorted_recent ; # recent repositories (sorted)
|
||||
|
||||
@ -337,16 +338,31 @@ method _git_init {} {
|
||||
return 1
|
||||
}
|
||||
|
||||
proc _is_git {path} {
|
||||
proc _is_git {path {outdir_var ""}} {
|
||||
if {$outdir_var ne ""} {
|
||||
upvar 1 $outdir_var outdir
|
||||
}
|
||||
if {[file isfile $path]} {
|
||||
set fp [open $path r]
|
||||
gets $fp line
|
||||
close $fp
|
||||
if {[regexp "^gitdir: (.+)$" $line line link_target]} {
|
||||
set path [file join [file dirname $path] $link_target]
|
||||
set path [file normalize $path]
|
||||
}
|
||||
}
|
||||
|
||||
if {[file exists [file join $path HEAD]]
|
||||
&& [file exists [file join $path objects]]
|
||||
&& [file exists [file join $path config]]} {
|
||||
set outdir $path
|
||||
return 1
|
||||
}
|
||||
if {[is_Cygwin]} {
|
||||
if {[file exists [file join $path HEAD]]
|
||||
&& [file exists [file join $path objects.lnk]]
|
||||
&& [file exists [file join $path config.lnk]]} {
|
||||
set outdir $path
|
||||
return 1
|
||||
}
|
||||
}
|
||||
@ -525,6 +541,11 @@ method _do_clone {} {
|
||||
foreach r $w_types {
|
||||
pack $r -anchor w
|
||||
}
|
||||
${NS}::checkbutton $args.type_f.recursive \
|
||||
-text [mc "Recursively clone submodules too"] \
|
||||
-variable @recursive \
|
||||
-onvalue true -offvalue false
|
||||
pack $args.type_f.recursive -anchor w
|
||||
grid $args.type_l $args.type_f -sticky new
|
||||
|
||||
grid columnconfigure $args 1 -weight 1
|
||||
@ -952,6 +973,30 @@ method _do_clone_checkout {HEAD} {
|
||||
fileevent $fd readable [cb _readtree_wait $fd]
|
||||
}
|
||||
|
||||
method _do_validate_submodule_cloning {ok} {
|
||||
if {$ok} {
|
||||
$o_cons done $ok
|
||||
set done 1
|
||||
} else {
|
||||
_clone_failed $this [mc "Cannot clone submodules."]
|
||||
}
|
||||
}
|
||||
|
||||
method _do_clone_submodules {} {
|
||||
if {$recursive eq {true}} {
|
||||
destroy $w_body
|
||||
set o_cons [console::embed \
|
||||
$w_body \
|
||||
[mc "Cloning submodules"]]
|
||||
pack $w_body -fill both -expand 1 -padx 10
|
||||
$o_cons exec \
|
||||
[list git submodule update --init --recursive] \
|
||||
[cb _do_validate_submodule_cloning]
|
||||
} else {
|
||||
set done 1
|
||||
}
|
||||
}
|
||||
|
||||
method _readtree_wait {fd} {
|
||||
set buf [read $fd]
|
||||
$o_cons update_meter $buf
|
||||
@ -982,7 +1027,7 @@ method _readtree_wait {fd} {
|
||||
fconfigure $fd_ph -blocking 0 -translation binary -eofchar {}
|
||||
fileevent $fd_ph readable [cb _postcheckout_wait $fd_ph]
|
||||
} else {
|
||||
set done 1
|
||||
_do_clone_submodules $this
|
||||
}
|
||||
}
|
||||
|
||||
@ -996,7 +1041,7 @@ method _postcheckout_wait {fd_ph} {
|
||||
hook_failed_popup post-checkout $pch_error 0
|
||||
}
|
||||
unset pch_error
|
||||
set done 1
|
||||
_do_clone_submodules $this
|
||||
return
|
||||
}
|
||||
fconfigure $fd_ph -blocking 0
|
||||
@ -1063,7 +1108,7 @@ method _open_local_path {} {
|
||||
}
|
||||
|
||||
method _do_open2 {} {
|
||||
if {![_is_git [file join $local_path .git]]} {
|
||||
if {![_is_git [file join $local_path .git] actualgit]} {
|
||||
error_popup [mc "Not a Git repository: %s" [file tail $local_path]]
|
||||
return
|
||||
}
|
||||
@ -1076,7 +1121,7 @@ method _do_open2 {} {
|
||||
}
|
||||
|
||||
_append_recentrepos [pwd]
|
||||
set ::_gitdir .git
|
||||
set ::_gitdir $actualgit
|
||||
set ::_prefix {}
|
||||
set done 1
|
||||
}
|
||||
|
||||
@ -1,6 +1,19 @@
|
||||
# git-gui diff viewer
|
||||
# Copyright (C) 2006, 2007 Shawn Pearce
|
||||
|
||||
proc apply_tab_size {{firsttab {}}} {
|
||||
global have_tk85 repo_config ui_diff
|
||||
|
||||
set w [font measure font_diff "0"]
|
||||
if {$have_tk85 && $firsttab != 0} {
|
||||
$ui_diff configure -tabs [list [expr {$firsttab * $w}] [expr {($firsttab + $repo_config(gui.tabsize)) * $w}]]
|
||||
} elseif {$have_tk85 || $repo_config(gui.tabsize) != 8} {
|
||||
$ui_diff configure -tabs [expr {$repo_config(gui.tabsize) * $w}]
|
||||
} else {
|
||||
$ui_diff configure -tabs {}
|
||||
}
|
||||
}
|
||||
|
||||
proc clear_diff {} {
|
||||
global ui_diff current_diff_path current_diff_header
|
||||
global ui_index ui_workdir
|
||||
@ -105,6 +118,8 @@ proc show_diff {path w {lno {}} {scroll_pos {}} {callback {}}} {
|
||||
|
||||
set cont_info [list $scroll_pos $callback]
|
||||
|
||||
apply_tab_size 0
|
||||
|
||||
if {[string first {U} $m] >= 0} {
|
||||
merge_load_stages $path [list show_unmerged_diff $cont_info]
|
||||
} elseif {$m eq {_O}} {
|
||||
@ -401,7 +416,10 @@ proc read_diff {fd conflict_size cont_info} {
|
||||
|
||||
# -- Automatically detect if this is a 3 way diff.
|
||||
#
|
||||
if {[string match {@@@ *} $line]} {set is_3way_diff 1}
|
||||
if {[string match {@@@ *} $line]} {
|
||||
set is_3way_diff 1
|
||||
apply_tab_size 1
|
||||
}
|
||||
|
||||
if {$::current_diff_inheader} {
|
||||
|
||||
|
||||
@ -161,6 +161,7 @@ proc do_options {} {
|
||||
{b gui.warndetachedcommit {mc "Warn before committing to a detached head"}}
|
||||
{s gui.stageuntracked {mc "Staging of untracked files"} {list "yes" "no" "ask"}}
|
||||
{b gui.displayuntracked {mc "Show untracked files"}}
|
||||
{i-1..99 gui.tabsize {mc "Tab spacing"}}
|
||||
} {
|
||||
set type [lindex $option 0]
|
||||
set name [lindex $option 1]
|
||||
|
||||
Reference in New Issue
Block a user