Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit b112b6a

Browse files
Adding functionality to checkout a remote branch via right click
1 parent a22725f commit b112b6a

File tree

1 file changed

+42
-39
lines changed

1 file changed

+42
-39
lines changed

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -301,45 +301,8 @@ private void OnTreeGUI(Rect rect)
301301

302302
rect = treeRemotes.Render(rect, scroll,
303303
node => { },
304-
selectedNode =>
305-
{
306-
var indexOfFirstSlash = selectedNode.Name.IndexOf('/');
307-
var originName = selectedNode.Name.Substring(0, indexOfFirstSlash);
308-
var branchName = selectedNode.Name.Substring(indexOfFirstSlash + 1);
309-
310-
if (Repository.LocalBranches.Any(localBranch => localBranch.Name == branchName))
311-
{
312-
EditorUtility.DisplayDialog(WarningCheckoutBranchExistsTitle,
313-
String.Format(WarningCheckoutBranchExistsMessage, branchName),
314-
WarningCheckoutBranchExistsOK);
315-
}
316-
else
317-
{
318-
var confirmCheckout = EditorUtility.DisplayDialog(ConfirmCheckoutBranchTitle,
319-
String.Format(ConfirmCheckoutBranchMessage, selectedNode.Name, originName),
320-
ConfirmCheckoutBranchOK,
321-
ConfirmCheckoutBranchCancel);
322-
323-
if (confirmCheckout)
324-
{
325-
GitClient
326-
.CreateBranch(branchName, selectedNode.Name)
327-
.FinallyInUI((success, e) =>
328-
{
329-
if (success)
330-
{
331-
Redraw();
332-
}
333-
else
334-
{
335-
EditorUtility.DisplayDialog(Localization.SwitchBranchTitle,
336-
String.Format(Localization.SwitchBranchFailedDescription, selectedNode.Name),
337-
Localization.Ok);
338-
}
339-
})
340-
.Start();
341-
}
342-
}
304+
selectedNode => {
305+
CheckoutRemoteBranch(selectedNode.Name);
343306
},
344307
node => {
345308
GenericMenu menu = CreateContextMenuForRemoteBranchNode(node);
@@ -362,6 +325,40 @@ private void OnTreeGUI(Rect rect)
362325
GUILayout.Space(rect.y - initialRect.y);
363326
}
364327

328+
private void CheckoutRemoteBranch(string selectedNodeName)
329+
{
330+
var indexOfFirstSlash = selectedNodeName.IndexOf('/');
331+
var originName = selectedNodeName.Substring(0, indexOfFirstSlash);
332+
var branchName = selectedNodeName.Substring(indexOfFirstSlash + 1);
333+
334+
if (Repository.LocalBranches.Any(localBranch => localBranch.Name == branchName))
335+
{
336+
EditorUtility.DisplayDialog(WarningCheckoutBranchExistsTitle,
337+
String.Format(WarningCheckoutBranchExistsMessage, branchName), WarningCheckoutBranchExistsOK);
338+
}
339+
else
340+
{
341+
var confirmCheckout = EditorUtility.DisplayDialog(ConfirmCheckoutBranchTitle,
342+
String.Format(ConfirmCheckoutBranchMessage, selectedNodeName, originName), ConfirmCheckoutBranchOK,
343+
ConfirmCheckoutBranchCancel);
344+
345+
if (confirmCheckout)
346+
{
347+
GitClient.CreateBranch(branchName, selectedNodeName).FinallyInUI((success, e) => {
348+
if (success)
349+
{
350+
Redraw();
351+
}
352+
else
353+
{
354+
EditorUtility.DisplayDialog(Localization.SwitchBranchTitle,
355+
String.Format(Localization.SwitchBranchFailedDescription, selectedNodeName), Localization.Ok);
356+
}
357+
}).Start();
358+
}
359+
}
360+
}
361+
365362
private GenericMenu CreateContextMenuForLocalBranchNode(TreeNode node)
366363
{
367364
var genericMenu = new GenericMenu();
@@ -420,6 +417,12 @@ private GenericMenu CreateContextMenuForRemoteBranchNode(TreeNode node)
420417
{
421418
var genericMenu = new GenericMenu();
422419

420+
var checkoutGuiContent = new GUIContent("Checkout");
421+
422+
genericMenu.AddItem(checkoutGuiContent, false, () => {
423+
CheckoutRemoteBranch(node.Name);
424+
});
425+
423426
return genericMenu;
424427
}
425428

0 commit comments

Comments
 (0)