1 # git-gui branch checkout support
2 # Copyright (C) 2007 Shawn Pearce
4 class branch_checkout
{
6 field w
; # widget path
7 field w_rev
; # mega-widget to pick the initial revision
9 field opt_fetch
1; # refetch tracking branch if used?
10 field opt_detach
0; # force a detached head case?
12 constructor dialog
{} {
14 wm title
$top "[appname] ([reponame]): Checkout Branch"
16 wm geometry
$top "+[winfo rootx .]+[winfo rooty .]"
19 label $w.header
-text {Checkout Branch
} -font font_uibold
20 pack $w.header
-side top
-fill x
23 button $w.buttons.create
-text Checkout
\
25 -command [cb _checkout
]
26 pack $w.buttons.create
-side right
27 button $w.buttons.cancel
-text {Cancel
} \
28 -command [list destroy $w]
29 pack $w.buttons.cancel
-side right
-padx 5
30 pack $w.buttons
-side bottom
-fill x
-pady 10 -padx 10
32 set w_rev
[::choose_rev::new $w.rev
{Revision
}]
33 $w_rev bind_listbox
<Double-Button-1
> [cb _checkout
]
34 pack $w.rev
-anchor nw
-fill both
-expand 1 -pady 5 -padx 5
36 labelframe $w.
options -text {Options
}
38 checkbutton $w.
options.fetch
\
39 -text {Fetch Tracking Branch
} \
41 pack $w.
options.fetch
-anchor nw
43 checkbutton $w.
options.detach
\
44 -text {Detach From Local Branch
} \
46 pack $w.
options.detach
-anchor nw
48 pack $w.
options -anchor nw
-fill x
-pady 5 -padx 5
50 bind $w <Visibility
> [cb _visible
]
51 bind $w <Key-Escape
> [list destroy $w]
52 bind $w <Key-Return
> [cb _checkout
]\;break
57 set spec
[$w_rev get_tracking_branch
]
58 if {$spec ne
{} && $opt_fetch} {
60 } elseif
{[catch {set new
[$w_rev commit_or_die
]}]} {
67 set ref
[$w_rev get_local_branch
]
70 set co
[::checkout_op::new [$w_rev get
] $new $ref]
73 if {$spec ne
{} && $opt_fetch} {
74 $co enable_fetch
$spec