Merge branch 'master' into fixes/809-refactor-logins
Conflicts: src/GitHub.App/ViewModels/TwoFactorDialogViewModel.cs src/GitHub.Exports/Settings/Guids.cs src/GitHub.VisualStudio/UI/Views/Controls/LoginControl.xaml.cs
|
@ -16,6 +16,3 @@
|
|||
[submodule "script"]
|
||||
path = script
|
||||
url = git@github.com:github/VisualStudioBuildScripts
|
||||
[submodule "submodules/GitHubVSAutomationIDs"]
|
||||
path = submodules/GitHubVSAutomationIDs
|
||||
url = https://github.com/editor-tools/GitHubVSAutomationIDs.git
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
<ProjectConfiguration>
|
||||
<Settings>
|
||||
<CopyReferencedAssembliesToWorkspace>True</CopyReferencedAssembliesToWorkspace>
|
||||
<PreviouslyBuiltSuccessfully>True</PreviouslyBuiltSuccessfully>
|
||||
</Settings>
|
||||
</ProjectConfiguration>
|
147
GitHubVS.sln
|
@ -104,9 +104,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitHub.VisualStudio.UI", "s
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitHub.StartPage", "src\GitHub.StartPage\GitHub.StartPage.csproj", "{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHubVSAutomationIDs", "GitHubVSAutomationIDs", "{4405C20E-A72A-4807-9480-14E9BB558347}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GithubVSTestAutomationIDs", "submodules\GitHubVSAutomationIDs\GithubVSAutomationIDs\GithubVSTestAutomationIDs.csproj", "{665078F4-5875-431D-A2CC-421849B43328}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitHub.UI.UnitTests", "test\GitHub.UI.UnitTests\GitHub.UI.UnitTests.csproj", "{110B206F-8554-4B51-BF86-94DAA32F5E26}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
@ -116,8 +114,6 @@ Global
|
|||
Publish|x86 = Publish|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x86 = Release|x86
|
||||
XamlDesign|Any CPU = XamlDesign|Any CPU
|
||||
XamlDesign|x86 = XamlDesign|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
|
@ -131,10 +127,6 @@ Global
|
|||
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.XamlDesign|Any CPU.ActiveCfg = XamlDesign|Any CPU
|
||||
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.XamlDesign|Any CPU.Build.0 = XamlDesign|Any CPU
|
||||
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.XamlDesign|x86.ActiveCfg = XamlDesign|Any CPU
|
||||
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.XamlDesign|x86.Build.0 = XamlDesign|Any CPU
|
||||
{596595A6-2A3C-469E-9386-9E3767D863A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{596595A6-2A3C-469E-9386-9E3767D863A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{596595A6-2A3C-469E-9386-9E3767D863A5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -146,10 +138,6 @@ Global
|
|||
{596595A6-2A3C-469E-9386-9E3767D863A5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{596595A6-2A3C-469E-9386-9E3767D863A5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{596595A6-2A3C-469E-9386-9E3767D863A5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{596595A6-2A3C-469E-9386-9E3767D863A5}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{596595A6-2A3C-469E-9386-9E3767D863A5}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{596595A6-2A3C-469E-9386-9E3767D863A5}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{596595A6-2A3C-469E-9386-9E3767D863A5}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{346384DD-2445-4A28-AF22-B45F3957BD89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{346384DD-2445-4A28-AF22-B45F3957BD89}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{346384DD-2445-4A28-AF22-B45F3957BD89}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -161,10 +149,6 @@ Global
|
|||
{346384DD-2445-4A28-AF22-B45F3957BD89}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{346384DD-2445-4A28-AF22-B45F3957BD89}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{346384DD-2445-4A28-AF22-B45F3957BD89}.Release|x86.Build.0 = Release|Any CPU
|
||||
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -176,10 +160,6 @@ Global
|
|||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -191,10 +171,6 @@ Global
|
|||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -206,10 +182,6 @@ Global
|
|||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -221,10 +193,6 @@ Global
|
|||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -236,10 +204,6 @@ Global
|
|||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -251,10 +215,6 @@ Global
|
|||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -266,10 +226,6 @@ Global
|
|||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -281,10 +237,6 @@ Global
|
|||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -296,10 +248,6 @@ Global
|
|||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -311,10 +259,6 @@ Global
|
|||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Release|x86.Build.0 = Release|Any CPU
|
||||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{08DD4305-7787-4823-A53F-4D0F725A07F3}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -326,10 +270,6 @@ Global
|
|||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Release|x86.Build.0 = Release|Any CPU
|
||||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -341,10 +281,6 @@ Global
|
|||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -356,10 +292,6 @@ Global
|
|||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -371,10 +303,6 @@ Global
|
|||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -386,10 +314,6 @@ Global
|
|||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -402,10 +326,6 @@ Global
|
|||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Release|x86.Build.0 = Release|Any CPU
|
||||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -417,10 +337,6 @@ Global
|
|||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Release|x86.Build.0 = Release|Any CPU
|
||||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -432,10 +348,6 @@ Global
|
|||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -448,10 +360,6 @@ Global
|
|||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{41A47C5B-C606-45B4-B83C-22B9239E4DA0}.XamlDesign|x86.Build.0 = Debug|Any CPU
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.Debug|x86.ActiveCfg = Release|Any CPU
|
||||
|
@ -464,10 +372,6 @@ Global
|
|||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -480,8 +384,6 @@ Global
|
|||
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8}.Release|x86.Build.0 = Release|Any CPU
|
||||
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -494,10 +396,6 @@ Global
|
|||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720D}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -510,10 +408,6 @@ Global
|
|||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{161DBF01-1DBF-4B00-8551-C5C00F26720E}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -526,10 +420,6 @@ Global
|
|||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
|
@ -542,26 +432,18 @@ Global
|
|||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.Release|x86.Build.0 = Release|Any CPU
|
||||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Publish|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Publish|Any CPU.Build.0 = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Publish|x86.ActiveCfg = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Publish|x86.Build.0 = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.Release|x86.Build.0 = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.XamlDesign|x86.ActiveCfg = Release|Any CPU
|
||||
{665078F4-5875-431D-A2CC-421849B43328}.XamlDesign|x86.Build.0 = Release|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Publish|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Publish|Any CPU.Build.0 = Release|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Publish|x86.ActiveCfg = Release|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Publish|x86.Build.0 = Release|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -585,7 +467,6 @@ Global
|
|||
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF} = {1E7F7253-A6AF-43C4-A955-37BEDDA01AF9}
|
||||
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65} = {1E7F7253-A6AF-43C4-A955-37BEDDA01AB9}
|
||||
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8} = {8A7DA2E7-262B-4581-807A-1C45CE79CDFD}
|
||||
{4405C20E-A72A-4807-9480-14E9BB558347} = {1E7F7253-A6AF-43C4-A955-37BEDDA01AB8}
|
||||
{665078F4-5875-431D-A2CC-421849B43328} = {4405C20E-A72A-4807-9480-14E9BB558347}
|
||||
{110B206F-8554-4B51-BF86-94DAA32F5E26} = {8A7DA2E7-262B-4581-807A-1C45CE79CDFD}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -9,6 +9,9 @@ Official builds of this extension are available at [the official website](https:
|
|||
|
||||
[![Join the chat at freenode:github-vs](https://img.shields.io/badge/irc-freenode:%20%23github--vs-blue.svg)](http://webchat.freenode.net/?channels=%23github-vs) [![Join the chat at https://gitter.im/github/VisualStudio](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/github/VisualStudio?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
## Documentation
|
||||
Visit the [documentation](https://github.com/github/VisualStudio/tree/master/docs) for details on how to use the features in the GitHub Extension for Visual Studio.
|
||||
|
||||
## Installing beta versions
|
||||
|
||||
Older and pre-release/beta/untested versions are available at [the releases page](https://github.com/github/VisualStudio/releases), and also via a custom gallery feed for Visual Studio.
|
||||
|
@ -83,7 +86,6 @@ build.cmd
|
|||
Note, attempting to install `IsExperimental=false` builds of the VSIX is not recommended.
|
||||
|
||||
## More information
|
||||
|
||||
- Andreia Gaita's [presentation](https://www.youtube.com/watch?v=hz2hCO8e_8w) at Codemania 2016 about this extension.
|
||||
|
||||
## Contributing
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# Cloning a repository to Visual Studio
|
||||
|
||||
After you provide your GitHub or GitHub Enterprise credentials to GitHub for Visual Studio, the extension automatically detects the personal and organization repositories you have access to on your account.
|
||||
|
||||
1. Open **Team Explorer** by clicking on its tab next to *Solution Explorer*, or via the *View* menu.
|
||||
2. Click the **Manage Connections** toolbar button.
|
||||
|
||||
![Location of the manage connections toolbar button in Team Explorer](images/manage-connections.png)
|
||||
|
||||
3. Next to the account you want to clone from, click **Clone**.
|
||||
|
||||
![Clone button in the GitHub section of Team Explorer](images/clone-link.png)
|
||||
|
||||
4. In the list of repositories, click the repository you'd like to clone.
|
||||
|
||||
![List of GitHub repositories that can be cloned inside a dialog](images/clone-dialog.png)
|
||||
|
||||
5. If desired, change the local path where the repository will be cloned into, or leave the default as-is. Click **Clone**.
|
||||
6. In Team Explorer, under the list of repositories, locate the repository and double-click to open the project in Visual Studio.
|
|
@ -0,0 +1,10 @@
|
|||
# Creating a pull request
|
||||
|
||||
1. Open a solution in a GitHub repository.
|
||||
2. Open **Team Explorer** and click the **Pull Requests** button to open the **GitHub** pane.
|
||||
![Location of the pull requests button in the Team Explorer pane](images/pull-requests-button2.png)
|
||||
3. Click the **Create New** link above the list of pull requests for the repository.
|
||||
4. Select the target branch by clicking the link. If the current repository is a fork, then there will be two sets of branches in the dropdown - to submit a pull request upstream then select a branch with the `owner:` prefix of the upstream repository.
|
||||
![The pull request creation form in the GitHub pane](images/pr-create.png)
|
||||
5. Enter a pull request title and an optional description.
|
||||
6. Click the **Create Pull Request** button.
|
|
@ -0,0 +1,27 @@
|
|||
# Creating an empty repository from Visual Studio
|
||||
|
||||
1. [Sign in](authenticating-to-github) to GitHub.
|
||||
|
||||
2. Open **Team Explorer** by clicking on its tab next to *Solution Explorer*, or via the *View* menu.
|
||||
|
||||
3. Click the **Manage Connections** toolbar button.
|
||||
|
||||
![The manage connections toolbar button in Team Explorer](images/manage-connections.png)
|
||||
|
||||
4. Click the **Create** link next to the account you want to create the repository in.
|
||||
|
||||
![The create link in the Team Explorer pane](images/create-link.png)
|
||||
|
||||
5. In the **Create a GitHub Repository** dialog, enter a name, description and local path for the repository.
|
||||
|
||||
![The create a GitHub repository dialog](images/create-dialog.png)
|
||||
|
||||
6. Select a license for the repository.
|
||||
|
||||
7. Check the **Private Repository** box if you want to upload the repository as a private repository on GitHub. You must have a [Developer, Team or Business account](https://github.com/pricing) to create private repositories.
|
||||
|
||||
8. Click the **Create** button to create the repository
|
||||
|
||||
9. When the repository is created, click the **Create a new Project or Solution** link in Team Explorer to create a project or solution in the repository.
|
||||
|
||||
![Successful repository creation message at the top of the Team Explorer pane](images/successful-creation-message.png)
|
|
@ -0,0 +1,23 @@
|
|||
# Creating gists
|
||||
|
||||
GitHub for Visual Studio enables easy creation of gists directly from the Visual Studio Editor.
|
||||
|
||||
1. [Sign in](authenticating-to-github) to GitHub.
|
||||
|
||||
2. Open a file in the Visual Studio text editor.
|
||||
|
||||
3. Select the section of text that you want to create a gist from.
|
||||
|
||||
4. Right click and select **Create a GitHub Gist** from the **GitHub** submenu.
|
||||
|
||||
![Location of Create A GitHub Gist in the GitHub submenu](images/create-gist-menu.png)
|
||||
|
||||
5. In the **Create a GitHub Gist** dialog, check that the filename is correct and optionally add a description.
|
||||
|
||||
![GitHub Gist creation dialog window](images/create-gist-dialog.png)
|
||||
|
||||
6. If you want the gist to be private, check the **Private Gist** checkbox.
|
||||
|
||||
7. Click **Create**.
|
||||
|
||||
8. Once the gist is created it will be opened in your browser.
|
После Ширина: | Высота: | Размер: 14 KiB |
После Ширина: | Высота: | Размер: 26 KiB |
После Ширина: | Высота: | Размер: 14 KiB |
После Ширина: | Высота: | Размер: 28 KiB |
После Ширина: | Высота: | Размер: 20 KiB |
После Ширина: | Высота: | Размер: 45 KiB |
После Ширина: | Высота: | Размер: 14 KiB |
После Ширина: | Высота: | Размер: 4.1 KiB |
После Ширина: | Высота: | Размер: 16 KiB |
После Ширина: | Высота: | Размер: 12 KiB |
После Ширина: | Высота: | Размер: 20 KiB |
После Ширина: | Высота: | Размер: 14 KiB |
После Ширина: | Высота: | Размер: 20 KiB |
После Ширина: | Высота: | Размер: 57 KiB |
После Ширина: | Высота: | Размер: 188 KiB |
После Ширина: | Высота: | Размер: 14 KiB |
После Ширина: | Высота: | Размер: 9.2 KiB |
После Ширина: | Высота: | Размер: 29 KiB |
После Ширина: | Высота: | Размер: 40 KiB |
После Ширина: | Высота: | Размер: 16 KiB |
После Ширина: | Высота: | Размер: 15 KiB |
После Ширина: | Высота: | Размер: 17 KiB |
|
@ -0,0 +1,29 @@
|
|||
# Contributing to Projects with GitHub for Visual Studio
|
||||
|
||||
Use GitHub for Visual Studio to manage your projects and work with pull requests.
|
||||
|
||||
### Table of Contents
|
||||
|
||||
- Adding and cloning repositories
|
||||
- [Publishing an existing project to GitHub](publishing-an-existing-project-to-github.md)
|
||||
- [Creating an empty repository from Visual Studio](creating-an-empty-repository-from-visual-studio.md)
|
||||
- [Cloning a repository to Visual Studio](cloning-a-repository-to-visual-studio.md)
|
||||
- Working with pull requests
|
||||
- [Viewing pull requests for a repository](viewing-the-pull-requests-for-a-repository.md)
|
||||
- [Creating a pull request](creating-a-pull-request.md)
|
||||
- [Reviewing a pull request in Visual Studio](reviewing-a-pull-request-in-visual-studio.md)
|
||||
- [Making changes to a pull request](making-changes-to-a-pull-request.md)
|
||||
- [Creating gists](creating-gists.md)
|
||||
- [Viewing existing code on GitHub](viewing-code-on-github.md)
|
||||
- [Viewing the selected code on GitHub](viewing-code-on-github.md#viewing-the-selected-code-on-github)
|
||||
- [Copying the URL of the selected code's location on GitHub](viewing-code-on-github.md#copying-the-url-of-the-selected-codes-location-on-github)
|
||||
- [Viewing the selected code in blame view on GitHub](viewing-code-on-github.md#viewing-the-selected-code-in-blame-view-on-github)
|
||||
- [Using the GitHub toolbar](using-the-github-toolbar.md)
|
||||
- Operations provided by Visual Studio
|
||||
- [Committing](https://www.visualstudio.com/en-us/docs/git/tutorial/commits)
|
||||
- [Pushing commits to the remote repository](https://www.visualstudio.com/en-us/docs/git/tutorial/pushing)
|
||||
- [Fetching and pulling](https://www.visualstudio.com/en-us/docs/git/tutorial/pulling)
|
||||
- [Working with branches](https://www.visualstudio.com/en-us/docs/git/tutorial/branches)
|
||||
- [Viewing history](https://www.visualstudio.com/en-us/docs/git/tutorial/history)
|
||||
- [Ignoring files](https://www.visualstudio.com/en-us/docs/git/tutorial/ignore-files)
|
||||
- [Contact a human](https://github.com/contact)
|
|
@ -0,0 +1,17 @@
|
|||
# Making changes to a pull request
|
||||
|
||||
When a topic branch is [checked out](review-a-pull-request-in-visual-studio.md), you can commit changes to it and push and pull like any other branch. If the pull request branch is located in a fork and was checked out from the Pull Request Details view in the GitHub pane, then a remote to that fork will be created automatically and the branch set to track the fork branch.
|
||||
|
||||
## Pulling changes to your local clone
|
||||
|
||||
If a Pull Request is checked out and the author adds new commits to the branch, then the option will be given to pull the changes locally. This works both for pull requests from the same repository and from a fork.
|
||||
|
||||
![Pulling changes by clicking the pull link button](images/pr-pull-changes.png)
|
||||
|
||||
## Pushing changes
|
||||
|
||||
If you make commits locally to a topic branch, then you can push the changes to the remote branch. You can also do this from Git itself or from the Visual Studio Team Explorer **Sync** view.
|
||||
|
||||
> Note: for this to work with Pull Requests that come from forks, then you must be a maintainer on the repository and the Pull Request submitter must have checked [Allow edits from maintainers](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) when submitting the Pull Request.
|
||||
|
||||
If there are commits on the branch on the remote repository that you don't have on your local clone, you must pull them to your local clone and [resolve any conflicts](https://help.github.com/articles/addressing-merge-conflicts/) before you can push your local commits back to the remote repository.
|
|
@ -0,0 +1,14 @@
|
|||
# Publishing an existing project to GitHub
|
||||
|
||||
1. Open a solution in Visual Studio.
|
||||
2. If solution is not already initialized as a Git repository, select **Add to Source Control** from the **File** menu.
|
||||
![Location of Add to Source Control option in the file menu](images/add-to-source-control.png)
|
||||
3. Open **Team Explorer**.
|
||||
![Location of Team Explorer option in the view menu](images/open-team-explorer.png)
|
||||
4. In Team Explorer, click **Sync**.
|
||||
![Location of the sync button in the Team Explorer pane](images/team-explorer-sync.png)
|
||||
5. Click the **Publish to GitHub** button.
|
||||
![Location of the Publish to GitHub button in the Team Explorer pane](images/publish-to-github.png)
|
||||
6. Enter a name and description for the repository on GitHub.
|
||||
7. Check the **Private Repository** box if you want to upload the repository as a private repository on GitHub. You must have a [Developer, Team or Business account](https://github.com/pricing) to create private repositories.
|
||||
8. Click the **Publish** button.
|
|
@ -0,0 +1,35 @@
|
|||
# Reviewing a pull request in Visual Studio
|
||||
|
||||
GitHub for Visual Studio provides facilities for reviewing a pull request directly in Visual Studio.
|
||||
|
||||
1. Open a solution in a GitHub repository.
|
||||
|
||||
2. Open **Team Explorer** and click the **Pull Requests** button to open the **GitHub** pane.
|
||||
|
||||
![Pull Requests button in the Team Explorer pane](images/pull-requests-button.png)
|
||||
|
||||
3. Click the title of the pull request to be reviewed.
|
||||
|
||||
## Viewing a pull request
|
||||
|
||||
The Pull Request Details view shows the current state of the pull request, including information about who created the pull request, the source and target branch, and the files changed.
|
||||
|
||||
![The details of a single pull request in the GitHub pane](images/pr-details.png)
|
||||
|
||||
## Checking out a pull request
|
||||
|
||||
To check out the pull request branch, click the **Checkout [branch]** link where [branch] is the name of the branch that will be checked out.
|
||||
|
||||
![Location of the checkout link in the GitHub pull request details page](images/pr-details-checkout-link.png)
|
||||
|
||||
If the pull request is from a fork then a remote will be added to the forked repository and the branch checked out locally. This remote will automatically be cleaned up when the local branch is deleted.
|
||||
|
||||
> Note that you cannot check out a pull request branch when your working directory has uncommitted changes. First commit or stash your changes and then refresh the Pull Request view.
|
||||
|
||||
## Comparing files
|
||||
|
||||
To compare the contents of a file in the pull request with its content on the target branch, double click a file in the **Changed Files** tree. This will open the Visual Studio diff viewer. If the pull request has been checked out, the right hand pane will be editable.
|
||||
|
||||
![Diff of two files in the Visual Studio diff viewer](images/pr-diff-files.png)
|
||||
|
||||
If the pull request is checked out, right clicking on a file on the **Changed Files** tree and selecting **Open File** will open the file for editing in Visual Studio.
|
|
@ -0,0 +1,29 @@
|
|||
# Using the GitHub pane toolbar
|
||||
|
||||
The GitHub pane toolbar provides a way to navigate between views, refresh views, and open the current view on GitHub.
|
||||
|
||||
![The GitHub pane toolbar](images/github-pane-toolbar.png)
|
||||
|
||||
1. Open a solution in a GitHub repository.
|
||||
2. Open **Team Explorer** and click the **Pull Requests** button to open the **GitHub** pane.
|
||||
|
||||
## Using the back navigation button
|
||||
1. At the top of the **GitHub** pane, locate the button furthest to the left. This is the **Back** button.
|
||||
2. Click **Back** to navigate to the previous view. If **Back** is grey, you have reached the initial point in the view navigation.
|
||||
|
||||
## Using the forward navigation button
|
||||
1. At the top of the **GitHub** pane, locate the second button from the left, which is the **Forward** button.
|
||||
2. Click **Forward** to navigate to the next view. If **Forward** is grey, you have reached the furthest point in the view navigation.
|
||||
|
||||
## Using the pull request toolbar icon
|
||||
1. At the top of the **GitHub** pane, locate the third button from the left. This is the **Pull Requests** button.
|
||||
2. Click **Pull Requests** to navigate to the list of pull requests in the repository.
|
||||
|
||||
## Using the GitHub toolbar button
|
||||
1. At the top of the **GitHub** pane, locate the fourth button from the left. This is the **View On GitHub** button.
|
||||
2. While viewing the list of pull requests, click **View On Github**. Your browser will open and navigate to the repository's pull requests on GitHub.
|
||||
3. While viewing the details of a pull request, click **View On Github**. Your browser will open and navigate to the pull request on GitHub.
|
||||
|
||||
## Using the refresh toolbar button
|
||||
1. At the top of the **GitHub** pane, locate the fifth button from the left. This is the **Refresh** button.
|
||||
2. Click **Refresh** to refresh the current view in the **GitHub** pane.
|
|
@ -0,0 +1,21 @@
|
|||
# Viewing existing code on GitHub
|
||||
|
||||
GitHub for Visual Studio enables easy navigation to code that exists on GitHub directly from the Visual Studio code editor.
|
||||
|
||||
1. Open a solution in a GitHub repository.
|
||||
2. Open *Solution Explorer* by clicking on its tab, or via the *View* menu.
|
||||
3. In *Solution Explorer*, double click on a file to open it in Visual Studio code editor.
|
||||
3. In the code editor, highlight the section of text that you want to view in the browser.
|
||||
|
||||
## Viewing the selected code on GitHub
|
||||
1. Right click and select **Open on GitHub** from the **GitHub** submenu.
|
||||
![Open on GitHub selection in the GitHub context submenu](images/open-on-github.png)
|
||||
2. Your browser will open and navigate to the code on GitHub.
|
||||
|
||||
## Copying the URL of the selected code's location on GitHub
|
||||
1. Right click and select **Copy link to clipboard** from the **GitHub** submenu. The URL will be copied to the clipboard.
|
||||
2. Paste the URL into your browser to view it on GitHub.
|
||||
|
||||
## Viewing the selected code in blame view on GitHub
|
||||
1. Right click and select **Blame** from the **GitHub** submenu.
|
||||
2. Your browser will open and navigate to the code in blame view on GitHub.
|
|
@ -0,0 +1,15 @@
|
|||
# Viewing the pull requests for a repository
|
||||
|
||||
GitHub for Visual Studio exposes the pull requests for the current repository and lets you create new pull requests and review pull requests from other contributors.
|
||||
|
||||
1. [Sign in](authenticating-to-github) to GitHub.
|
||||
2. Open a solution in a GitHub repository.
|
||||
3. Open **Team Explorer** and click the **Pull Requests** button to open the **GitHub** pane.
|
||||
![Pull Requests button in the Team Explorer pane](images/pull-requests-button2.png)
|
||||
4. The open pull requests will be displayed.
|
||||
![Pull requests in the GitHub pane](images/pull-request-list.png)
|
||||
5. Change the Open/Closed filter by clicking the **Open** link and selecting the filter you want to use from the dropdown.
|
||||
6. Filter pull requests by Assignee by clicking the **Assignee** link and selecting the assignee you want to view from the dropdown.
|
||||
7. Filter pull requests by Author by clicking the **Author** link and selecting the author you want to view from the dropdown.
|
||||
8. Click on a pull request title to [view the pull request details and review the pull request](review-a-pull-request-in-visual-studio.md)
|
||||
9. Click on the **Create New** link to [create a pull request from the current branch](sending-a-pull-request.md)
|
|
@ -0,0 +1,19 @@
|
|||
# Authenticating to GitHub
|
||||
|
||||
Add your GitHub.com or GitHub Enterprise account information to GitHub Desktop so you can access your repositories.
|
||||
|
||||
Before you authenticate, you must already have a GitHub or GitHub Enterprise account.
|
||||
|
||||
- For more information on creating a GitHub account, see "[Signing up for a new GitHub account](https://help.github.com/articles/signing-up-for-a-new-github-account/)".
|
||||
- For a GitHub Enterprise account, contact your GitHub Enterprise site administrator.
|
||||
|
||||
> **Note:** If your organization is on the [Business plan](https://help.github.com/articles/organization-billing-plans) and has enabled SAML single sign-on, you must create and authorize a personal access token to access protected content. For more information on creating personal access tokens, see "[Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line). For more information on authenticating with SAML single sign-on, see "[About authentication with SAML single sign-on](https://help.github.com/articles/about-authentication-with-saml-single-sign-on)."
|
||||
|
||||
1. In Visual Studio, select **Team Explorer** from the **View** menu.
|
||||
![Team Explorer in the view menu](images/view_team_explorer.png)
|
||||
2. In the Team Explorer pane, click the **Manage Connections** toolbar button.
|
||||
![Manage connections toolbar button in the Team Explorer pane](images/manage_connections.png)
|
||||
3. Click the **Connect** link in the GitHub section. If you are already connected to a GitHub instance and want to connect to another, this link will not be visible; instead click **Manage Connections** and then **Connect to GitHub**.
|
||||
![Connect to GitHub in the manage connections dropdown in the Team Explorer pane](images/connect_to_github.png)
|
||||
4. In the **Connect to GitHub dialog** choose **GitHub** or **GitHub Enterprise**, depending on which product you're using.
|
||||
5. Type your credentials, then click **Sign In**.
|
|
@ -0,0 +1,17 @@
|
|||
# Configuring Git in Visual Studio
|
||||
|
||||
# Setting your name and email
|
||||
|
||||
The name and email that will be displayed with your commits can be set from Team Explorer's settings.
|
||||
|
||||
1. Open **Team Explorer** by clicking on its tab next to *Solution Explorer*, or via the *View* menu.
|
||||
|
||||
2. Click the **Settings** button in Team Explorer.
|
||||
|
||||
![The settings button in Team Explorer pane](images/settings-button.png)
|
||||
|
||||
3. Click **Global Settings** in the Team Explorer Settings page
|
||||
|
||||
![The global settings button in the Team Explorer settings page](images/global-settings-link.png)
|
||||
|
||||
4. Enter the name and email that you would like to appear in commits.
|
После Ширина: | Высота: | Размер: 17 KiB |
После Ширина: | Высота: | Размер: 14 KiB |
После Ширина: | Высота: | Размер: 181 KiB |
После Ширина: | Высота: | Размер: 19 KiB |
После Ширина: | Высота: | Размер: 40 KiB |
После Ширина: | Высота: | Размер: 120 KiB |
После Ширина: | Высота: | Размер: 34 KiB |
После Ширина: | Высота: | Размер: 110 KiB |
После Ширина: | Высота: | Размер: 186 KiB |
|
@ -0,0 +1,13 @@
|
|||
# Getting Started with GitHub for Visual Studio
|
||||
|
||||
## [Installing GitHub for Visual Studio](installing-github-for-visual-studio.md)
|
||||
|
||||
GitHub for Visual Studio is available for Visual Studio 2015 and later. The Community, Professional and Enterprise editions are supported.
|
||||
|
||||
## [Authenticating to GitHub](authenticating-to-github.md)
|
||||
|
||||
Add your GitHub.com or GitHub Enterprise account information to Visual Studio so you can access your repositories.
|
||||
|
||||
### [Configuring Git in Visual Studio](configuring-git-in-visual-studio.md)
|
||||
|
||||
Configure how Visual Studio interacts with GitHub
|
|
@ -0,0 +1,71 @@
|
|||
# Installing the GitHub Extension for Visual Studio
|
||||
|
||||
GitHub for Visual Studio is an extension for Microsoft Visual Studio 2015 and later. It is not supported on Visual Studio Code, Visual Studio Express or Visual Studio for Mac.
|
||||
|
||||
## Installing for all versions of Visual Studio 2015 and higher
|
||||
|
||||
If you already have Visual Studio 2015 or higher installed, you can install the extension into all your versions of Visual Studio with the following steps:
|
||||
|
||||
1. Visit the [GitHub for Visual Studio](https://visualstudio.github.com/) site.
|
||||
2. Click the **Download GitHub Extension for Visual Studio** button.
|
||||
3. In your computer's **Downloads** folder, double-click **GitHub.VisualStudio.vsix**.
|
||||
4. In the pop-up window, click **Install**.
|
||||
5. After the installation is completed, run Visual Studio.
|
||||
|
||||
## Installing from the Visual Studio gallery
|
||||
|
||||
If you're currently running Visual Studio 2015 or higher, you can install the extension from the Visual Studio gallery.
|
||||
|
||||
1. In Visual Studio, open the **Tools** menu and click **Extensions and Updates**
|
||||
|
||||
2. On the left side of the **Extensions and Updates** dialog, select **Online - Visual Studio gallery**
|
||||
|
||||
3. In the search box on the top right side, type **GitHub**
|
||||
|
||||
4. Select the **GitHub Extension for Visual Studio** entry and click **Download**
|
||||
|
||||
![Installing GitHub for Visual Studio in the settings extensions and updates gallery](images/install-from-gallery.png)
|
||||
|
||||
5. After installation is completed, restart Visual Studio.
|
||||
|
||||
## If you do not have Visual Studio installed yet
|
||||
|
||||
When you install Visual Studio, you can include the GitHub Extension for Visual Studio for installation, as it is available in the Visual Studio installer.
|
||||
|
||||
### Visual Studio 2015
|
||||
|
||||
**Note:** The Visual Studio 2015 installer is not guaranteed to install the latest version of the extension. Once the Visual Studio installation is complete, [update the extension](#updating-the-extension) from the Visual Studio gallery, or [run the installer](#installing-for-all-versions-of-visual-studio-2015-and-higher) from our website.
|
||||
|
||||
1. Start the Visual Studio 2015 installer.
|
||||
2. Scroll down to **Common Tools** and check **GitHub Extension for Visual Studio**.
|
||||
![GitHub Extension for Visual Studio in the common tools section of the Visual Studio 2015 installer](images/vs2015-installer.png)
|
||||
3. Click the **Install** button.
|
||||
4. Once installation is complete, run Visual Studio 2015 and [update the extension](#updating-the-extension)
|
||||
|
||||
### Visual Studio 2017
|
||||
|
||||
**Note:** The Visual Studio 2017 installer is not guaranteed to install the latest version of the extension. Once the Visual Studio installation is complete, [update the extension](#updating-the-extension) from the Visual Studio gallery, or [run the installer](#installing-for-all-versions-of-visual-studio-2015-and-higher) from our website.
|
||||
|
||||
1. Start the Visual Studio 2017 installer.
|
||||
|
||||
2. Select the **Individual components** tab at the top.
|
||||
|
||||
3. Scroll down to **Code tools** and check **GitHub Extension for Visual Studio**.
|
||||
|
||||
![GitHub Extension for Visual Studio in the code tools section of the Visual Studio 2017 installer](images/vs2017-installer.png)
|
||||
|
||||
4. Click the **Modify** button.
|
||||
|
||||
5. Once installation is complete, run Visual Studio 2017 and [update the extension](#updating-the-extension)
|
||||
|
||||
## Updating the extension
|
||||
|
||||
**Note:** If you're currently running Visual Studio 2015 or higher and the extension is already installed, Visual Studio will check for and install updates automatically every 24 hours. For this update process to run, Visual Studio must not be running.
|
||||
|
||||
Visual Studio 2017 will not run automatic updates until you update the extension at least once.
|
||||
|
||||
1. In Visual Studio, open the **Tools** menu and click **Extensions and Updates**
|
||||
2. On the left side of the **Extensions and Updates** dialog, select **Updates - Visual Studio gallery**
|
||||
3. If there are updates available, an entry titled **GitHub Extension for Visual Studio** will appear on the list. Select it and click **Update**
|
||||
![Updating GitHub for Visual Studio in the settings extensions and updates gallery](images/update-from-gallery.png)
|
||||
4. After installation is completed, restart Visual Studio.
|
|
@ -0,0 +1,9 @@
|
|||
# GitHub for Visual Studio Documentation
|
||||
|
||||
### [Getting Started with GitHub for Visual Studio](getting-started/index.md)
|
||||
|
||||
Get GitHub for Visual Studio set up to bring the GitHub flow to Visual Studio. Authenticate to GitHub.com or GitHub Enterprise, keep the extension up-to-date, and review your preferred settings.
|
||||
|
||||
### [Contributing to Projects with GitHub for Visual Studio](contributing/index.md)
|
||||
|
||||
Use GitHub for Visual Studio to manage your projects and work with pull requests.
|
|
@ -35,15 +35,6 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'XamlDesign|AnyCPU'">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<DefineConstants>DEBUG;TRACE;XAML_DESIGNER</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.ComponentModelHost, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\VSSDK.ComponentModelHost.12.0.4\lib\net45\Microsoft.VisualStudio.ComponentModelHost.dll</HintPath>
|
||||
|
|
|
@ -50,7 +50,7 @@ namespace GitHub.Authentication
|
|||
public async Task ChallengeFailed(Exception exception)
|
||||
{
|
||||
await ThreadingHelper.SwitchToMainThreadAsync();
|
||||
await twoFactorDialog.CancelCommand.ExecuteAsync(null);
|
||||
await twoFactorDialog.Cancel.ExecuteAsync(null);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -130,10 +130,10 @@ namespace GitHub.Controllers
|
|||
{
|
||||
disposablesForCurrentView?.Clear();
|
||||
|
||||
var action = view as ICanLoad;
|
||||
var action = view.ViewModel as ICanNavigate;
|
||||
if (action != null)
|
||||
{
|
||||
disposablesForCurrentView.Add(action?.Load.Subscribe(d =>
|
||||
disposablesForCurrentView.Add(action?.Navigate.Subscribe(d =>
|
||||
{
|
||||
LoadView(connection, d, onViewLoad);
|
||||
}));
|
||||
|
|
|
@ -82,6 +82,7 @@ namespace GitHub.Controllers
|
|||
*/
|
||||
|
||||
using App.Factories;
|
||||
using ViewModels;
|
||||
using StateMachineType = StateMachine<UIViewType, UIController.Trigger>;
|
||||
|
||||
public class UIController : IUIController
|
||||
|
@ -524,13 +525,15 @@ namespace GitHub.Controllers
|
|||
if (!firstTime)
|
||||
return;
|
||||
|
||||
SetupView(viewType, view);
|
||||
SetupView(viewType, view.ViewModel);
|
||||
}
|
||||
|
||||
void SetupView(UIViewType viewType, IView view)
|
||||
void SetupView(UIViewType viewType, IViewModel viewModel)
|
||||
{
|
||||
var list = GetObjectsForFlow(activeFlow);
|
||||
var pair = list[viewType];
|
||||
var hasDone = viewModel as IHasDone;
|
||||
var hasCancel = viewModel as IHasCancel;
|
||||
|
||||
// 2FA is set up when login is set up, so nothing to do
|
||||
if (viewType == UIViewType.TwoFactor)
|
||||
|
@ -543,29 +546,35 @@ namespace GitHub.Controllers
|
|||
if (viewType == UIViewType.Login)
|
||||
{
|
||||
var pair2fa = list[UIViewType.TwoFactor];
|
||||
pair2fa.AddHandler(pair2fa.ViewModel.WhenAny(x => x.IsShowing, x => x.Value)
|
||||
pair2fa.AddHandler(((IDialogViewModel)pair2fa.ViewModel).WhenAny(x => x.IsShowing, x => x.Value)
|
||||
.Where(x => x)
|
||||
.ObserveOn(RxApp.MainThreadScheduler)
|
||||
.Subscribe(_ => Fire(Trigger.Next)));
|
||||
|
||||
pair2fa.AddHandler(pair2fa.View.Cancel
|
||||
pair2fa.AddHandler(((IHasCancel)pair2fa.ViewModel).Cancel
|
||||
.ObserveOn(RxApp.MainThreadScheduler)
|
||||
.Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Cancel) ? Trigger.Cancel : Trigger.Finish)));
|
||||
|
||||
pair.AddHandler(view.Done
|
||||
.ObserveOn(RxApp.MainThreadScheduler)
|
||||
.Subscribe(_ => Fire(Trigger.Finish)));
|
||||
if (hasDone != null)
|
||||
{
|
||||
pair.AddHandler(hasDone.Done
|
||||
.ObserveOn(RxApp.MainThreadScheduler)
|
||||
.Subscribe(_ => Fire(Trigger.Finish)));
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (hasDone != null)
|
||||
{
|
||||
pair.AddHandler(view.Done
|
||||
pair.AddHandler(hasDone.Done
|
||||
.ObserveOn(RxApp.MainThreadScheduler)
|
||||
.Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Next) ? Trigger.Next : Trigger.Finish)));
|
||||
}
|
||||
|
||||
pair.AddHandler(view.Cancel
|
||||
.ObserveOn(RxApp.MainThreadScheduler)
|
||||
.Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Cancel) ? Trigger.Cancel : Trigger.Finish)));
|
||||
if (hasCancel != null)
|
||||
{
|
||||
pair.AddHandler(hasCancel.Cancel
|
||||
.ObserveOn(RxApp.MainThreadScheduler)
|
||||
.Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Cancel) ? Trigger.Cancel : Trigger.Finish)));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -132,6 +132,7 @@
|
|||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ViewModels\ViewModelBase.cs" />
|
||||
<None Include="..\..\script\Key.snk" Condition="$(Buildtype) == 'Internal'">
|
||||
<Link>Key.snk</Link>
|
||||
</None>
|
||||
|
@ -213,7 +214,8 @@
|
|||
<Compile Include="UserErrors\PublishRepositoryUserError.cs" />
|
||||
<Compile Include="UserErrors\PrivateRepositoryOnFreeAccountUserError.cs" />
|
||||
<Compile Include="UserErrors\PrivateRepositoryQuotaExceededUserError.cs" />
|
||||
<Compile Include="ViewModels\BaseViewModel.cs" />
|
||||
<Compile Include="ViewModels\PanePageViewModelBase.cs" />
|
||||
<Compile Include="ViewModels\DialogViewModelBase.cs" />
|
||||
<Compile Include="Models\ConnectionRepositoryHostMap.cs" />
|
||||
<Compile Include="ViewModels\GistCreationViewModel.cs" />
|
||||
<Compile Include="ViewModels\NotAGitRepositoryViewModel.cs" />
|
||||
|
|
|
@ -94,5 +94,10 @@ namespace GitHub.Info
|
|||
: string.Format(CultureInfo.InvariantCulture,
|
||||
GitHub + "/organizations/{0}/settings/billing", account.Login);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The URL for the GitHub for Visual Studio documentation.
|
||||
/// </summary>
|
||||
public const string Documentation = "https://github.com/github/VisualStudio/tree/master/docs";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ using GitHub.Models;
|
|||
using GitHub.Primitives;
|
||||
using GitHub.UI;
|
||||
using NullGuard;
|
||||
using GitHub.Exports;
|
||||
|
||||
namespace GitHub.App.SampleData
|
||||
{
|
||||
|
@ -22,7 +23,7 @@ namespace GitHub.App.SampleData
|
|||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
#pragma warning restore CS0067
|
||||
|
||||
public Task<UriString> GenerateUrl(string path = null, int startLine = -1, int endLine = -1)
|
||||
public Task<UriString> GenerateUrl(LinkType linkType, string path = null, int startLine = -1, int endLine = -1)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Reactive;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows.Input;
|
||||
using GitHub.Collections;
|
||||
using GitHub.Models;
|
||||
using GitHub.ViewModels;
|
||||
|
||||
namespace GitHub.SampleData
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class LoggedOutViewModelDesigner : BaseViewModel, IViewModel
|
||||
public class LoggedOutViewModelDesigner : PanePageViewModelBase, IViewModel
|
||||
{
|
||||
public LoggedOutViewModelDesigner()
|
||||
{
|
||||
|
|
|
@ -4,11 +4,13 @@ using System.Collections.Generic;
|
|||
using GitHub.Models;
|
||||
using GitHub.Validation;
|
||||
using ReactiveUI;
|
||||
using System;
|
||||
using System.Reactive;
|
||||
|
||||
namespace GitHub.SampleData
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class PullRequestCreationViewModelDesigner : BaseViewModel, IPullRequestCreationViewModel
|
||||
public class PullRequestCreationViewModelDesigner : DialogViewModelBase, IPullRequestCreationViewModel
|
||||
{
|
||||
public PullRequestCreationViewModelDesigner()
|
||||
{
|
||||
|
@ -46,5 +48,6 @@ namespace GitHub.SampleData
|
|||
|
||||
public ReactivePropertyValidator BranchValidator { get; }
|
||||
|
||||
public override IObservable<Unit> Done { get; }
|
||||
}
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -25,8 +26,10 @@ namespace GitHub.SampleData
|
|||
}
|
||||
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class PullRequestDetailViewModelDesigner : BaseViewModel, IPullRequestDetailViewModel
|
||||
public class PullRequestDetailViewModelDesigner : PanePageViewModelBase, IPullRequestDetailViewModel
|
||||
{
|
||||
private List<IPullRequestChangeNode> changedFilesTree;
|
||||
|
||||
public PullRequestDetailViewModelDesigner()
|
||||
{
|
||||
var repoPath = @"C:\Repo";
|
||||
|
@ -63,17 +66,19 @@ This requires that errors be propagated from the viewmodel to the view and from
|
|||
modelsDir.Files.Add(oldBranchModel);
|
||||
gitHubDir.Directories.Add(modelsDir);
|
||||
|
||||
ChangedFilesTree = new ReactiveList<IPullRequestChangeNode>();
|
||||
ChangedFilesTree.Add(gitHubDir);
|
||||
changedFilesTree = new List<IPullRequestChangeNode>();
|
||||
changedFilesTree.Add(gitHubDir);
|
||||
}
|
||||
|
||||
public IPullRequestModel Model { get; }
|
||||
public string SourceBranchDisplayName { get; set; }
|
||||
public string TargetBranchDisplayName { get; set; }
|
||||
public bool IsLoading { get; }
|
||||
public bool IsBusy { get; }
|
||||
public bool IsCheckedOut { get; }
|
||||
public bool IsFromFork { get; }
|
||||
public string Body { get; }
|
||||
public IReactiveList<IPullRequestChangeNode> ChangedFilesTree { get; }
|
||||
public IReadOnlyList<IPullRequestChangeNode> ChangedFilesTree => changedFilesTree;
|
||||
public IPullRequestCheckoutState CheckoutState { get; set; }
|
||||
public IPullRequestUpdateState UpdateState { get; set; }
|
||||
public string OperationError { get; set; }
|
||||
|
|
|
@ -9,11 +9,12 @@ using System.Collections.Generic;
|
|||
using ReactiveUI;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using GitHub.UI;
|
||||
|
||||
namespace GitHub.SampleData
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class PullRequestListViewModelDesigner : BaseViewModel, IPullRequestListViewModel
|
||||
public class PullRequestListViewModelDesigner : PanePageViewModelBase, IPullRequestListViewModel
|
||||
{
|
||||
public PullRequestListViewModelDesigner()
|
||||
{
|
||||
|
@ -56,7 +57,6 @@ namespace GitHub.SampleData
|
|||
|
||||
public ITrackingCollection<IPullRequestModel> PullRequests { get; set; }
|
||||
public IPullRequestModel SelectedPullRequest { get; set; }
|
||||
public ICommand OpenPullRequest { get; set; }
|
||||
|
||||
public IReadOnlyList<PullRequestState> States { get; set; }
|
||||
public PullRequestState SelectedState { get; set; }
|
||||
|
@ -66,5 +66,10 @@ namespace GitHub.SampleData
|
|||
|
||||
public ObservableCollection<IAccount> Assignees { get; set; }
|
||||
public IAccount SelectedAssignee { get; set; }
|
||||
public IObservable<ViewWithData> Navigate { get; }
|
||||
public bool IsBusy { get; }
|
||||
|
||||
public ReactiveCommand<object> OpenPullRequest { get; }
|
||||
public ReactiveCommand<object> CreatePullRequest { get; }
|
||||
}
|
||||
}
|
|
@ -23,7 +23,7 @@ using System.Threading.Tasks;
|
|||
namespace GitHub.SampleData
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class RepositoryCreationViewModelDesigner : BaseViewModel, IRepositoryCreationViewModel
|
||||
public class RepositoryCreationViewModelDesigner : DialogViewModelBase, IRepositoryCreationViewModel
|
||||
{
|
||||
public RepositoryCreationViewModelDesigner()
|
||||
{
|
||||
|
@ -186,6 +186,8 @@ namespace GitHub.SampleData
|
|||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public override IObservable<Unit> Done { get; }
|
||||
}
|
||||
|
||||
[ExcludeFromCodeCoverage]
|
||||
|
@ -230,12 +232,6 @@ namespace GitHub.SampleData
|
|||
}
|
||||
}
|
||||
|
||||
public bool IsPublishing
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public IReactiveCommand<ProgressState> PublishRepository
|
||||
{
|
||||
get;
|
||||
|
@ -329,7 +325,7 @@ namespace GitHub.SampleData
|
|||
}
|
||||
}
|
||||
|
||||
public class RepositoryCloneViewModelDesigner : BaseViewModel, IRepositoryCloneViewModel
|
||||
public class RepositoryCloneViewModelDesigner : DialogViewModelBase, IRepositoryCloneViewModel
|
||||
{
|
||||
public RepositoryCloneViewModelDesigner()
|
||||
{
|
||||
|
@ -378,11 +374,6 @@ namespace GitHub.SampleData
|
|||
|
||||
public new string Title { get { return "Clone a GitHub Repository"; } }
|
||||
|
||||
public bool IsLoading
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public IReactiveCommand<IReadOnlyList<IRemoteRepositoryModel>> LoadRepositoriesCommand
|
||||
{
|
||||
get;
|
||||
|
@ -423,6 +414,8 @@ namespace GitHub.SampleData
|
|||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public override IObservable<Unit> Done { get; }
|
||||
}
|
||||
|
||||
public class GitHubHomeSectionDesigner : IGitHubHomeSection
|
||||
|
|
|
@ -8,12 +8,13 @@ using ReactiveUI;
|
|||
|
||||
namespace GitHub.SampleData
|
||||
{
|
||||
public class StartPageCloneViewModelDesigner : BaseViewModel, IBaseCloneViewModel
|
||||
public class StartPageCloneViewModelDesigner : DialogViewModelBase, IBaseCloneViewModel
|
||||
{
|
||||
public string BaseRepositoryPath { get; set; }
|
||||
public ReactivePropertyValidator<string> BaseRepositoryPathValidator { get; }
|
||||
public ICommand BrowseForDirectory { get; }
|
||||
public IReactiveCommand<object> CloneCommand { get; }
|
||||
public IRepositoryModel SelectedRepository { get; set; }
|
||||
public override IObservable<Unit> Done { get; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace GitHub.Services
|
|||
{
|
||||
var vm = x.View.ViewModel as IBaseCloneViewModel;
|
||||
|
||||
x.View.Done.Subscribe(_ =>
|
||||
vm.Done.Subscribe(_ =>
|
||||
{
|
||||
basePath = vm?.BaseRepositoryPath;
|
||||
repository = vm?.SelectedRepository;
|
||||
|
@ -58,7 +58,7 @@ namespace GitHub.Services
|
|||
vm.SelectedRepository = repository;
|
||||
}
|
||||
|
||||
x.View.Done.Subscribe(_ =>
|
||||
vm.Done.Subscribe(_ =>
|
||||
{
|
||||
basePath = vm?.BaseRepositoryPath;
|
||||
});
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
using System.Windows.Input;
|
||||
using ReactiveUI;
|
||||
using NullGuard;
|
||||
using GitHub.UI;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
public class BaseViewModel : ReactiveObject, IReactiveViewModel, IHasBusy
|
||||
{
|
||||
protected ObservableAsPropertyHelper<bool> isShowing;
|
||||
string title;
|
||||
bool isBusy;
|
||||
|
||||
public BaseViewModel()
|
||||
{
|
||||
CancelCommand = ReactiveCommand.Create();
|
||||
}
|
||||
|
||||
public IReactiveCommand<object> CancelCommand { get; protected set; }
|
||||
public ICommand Cancel { get { return CancelCommand; } }
|
||||
|
||||
public string Title
|
||||
{
|
||||
[return: AllowNull]
|
||||
get { return title; }
|
||||
protected set { this.RaiseAndSetIfChanged(ref title, value); }
|
||||
}
|
||||
|
||||
public bool IsShowing { get { return isShowing?.Value ?? true; } }
|
||||
public bool IsBusy
|
||||
{
|
||||
get { return isBusy; }
|
||||
set { this.RaiseAndSetIfChanged(ref isBusy, value); }
|
||||
}
|
||||
|
||||
public virtual void Initialize([AllowNull] ViewWithData data)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
using System;
|
||||
using System.Reactive;
|
||||
using GitHub.Extensions.Reactive;
|
||||
using NullGuard;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class for view models that can be dismissed, such as dialogs.
|
||||
/// </summary>
|
||||
public abstract class DialogViewModelBase : ViewModelBase, IDialogViewModel, IHasBusy
|
||||
{
|
||||
protected ObservableAsPropertyHelper<bool> isShowing;
|
||||
string title;
|
||||
bool isBusy;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DialogViewModelBase"/> class.
|
||||
/// </summary>
|
||||
protected DialogViewModelBase()
|
||||
{
|
||||
Cancel = ReactiveCommand.Create();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public abstract IObservable<Unit> Done { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ReactiveCommand<object> Cancel { get; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public string Title
|
||||
{
|
||||
[return: AllowNull]
|
||||
get { return title; }
|
||||
protected set { this.RaiseAndSetIfChanged(ref title, value); }
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool IsShowing { get { return isShowing?.Value ?? true; } }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool IsBusy
|
||||
{
|
||||
get { return isBusy; }
|
||||
protected set { this.RaiseAndSetIfChanged(ref isBusy, value); }
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
IObservable<Unit> IHasCancel.Cancel => Cancel.SelectUnit();
|
||||
}
|
||||
}
|
|
@ -1,11 +1,13 @@
|
|||
using System;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Reactive.Linq;
|
||||
using GitHub.Api;
|
||||
using GitHub.App;
|
||||
using GitHub.Exports;
|
||||
using GitHub.Extensions;
|
||||
using GitHub.Extensions.Reactive;
|
||||
using GitHub.Models;
|
||||
using GitHub.Services;
|
||||
using NLog;
|
||||
|
@ -17,7 +19,7 @@ namespace GitHub.ViewModels
|
|||
{
|
||||
[ExportViewModel(ViewType=UIViewType.Gist)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class GistCreationViewModel : BaseViewModel, IGistCreationViewModel
|
||||
public class GistCreationViewModel : DialogViewModelBase, IGistCreationViewModel
|
||||
{
|
||||
static readonly Logger log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
|
@ -132,5 +134,7 @@ namespace GitHub.ViewModels
|
|||
get { return fileName; }
|
||||
set { this.RaiseAndSetIfChanged(ref fileName, value); }
|
||||
}
|
||||
|
||||
public override IObservable<Unit> Done => CreateGist.Where(x => x != null).SelectUnit();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace GitHub.ViewModels
|
|||
/// </summary>
|
||||
[ExportViewModel(ViewType = UIViewType.LoggedOut)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class LoggedOutViewModel : BaseViewModel, ILoggedOutViewModel
|
||||
public class LoggedOutViewModel : PanePageViewModelBase, ILoggedOutViewModel
|
||||
{
|
||||
readonly IUIProvider uiProvider;
|
||||
readonly IVisualStudioBrowser browser;
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
using System;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Reactive;
|
||||
using System.Reactive.Linq;
|
||||
using GitHub.App;
|
||||
using GitHub.Authentication;
|
||||
using GitHub.Exports;
|
||||
using GitHub.Extensions.Reactive;
|
||||
using GitHub.Models;
|
||||
using ReactiveUI;
|
||||
|
||||
|
@ -11,7 +13,7 @@ namespace GitHub.ViewModels
|
|||
{
|
||||
[ExportViewModel(ViewType = UIViewType.Login)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class LoginControlViewModel : BaseViewModel, ILoginControlViewModel
|
||||
public class LoginControlViewModel : DialogViewModelBase, ILoginControlViewModel
|
||||
{
|
||||
[ImportingConstructor]
|
||||
public LoginControlViewModel(
|
||||
|
@ -78,6 +80,11 @@ namespace GitHub.ViewModels
|
|||
public bool IsLoginInProgress { get { return isLoginInProgress.Value; } }
|
||||
|
||||
public IObservable<AuthenticationResult> AuthenticationResults { get; private set; }
|
||||
|
||||
public override IObservable<Unit> Done
|
||||
{
|
||||
get { return AuthenticationResults.Where(x => x == AuthenticationResult.Success).SelectUnit(); }
|
||||
}
|
||||
}
|
||||
|
||||
public enum LoginTarget
|
||||
|
|
|
@ -14,12 +14,14 @@ using NullGuard;
|
|||
using ReactiveUI;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.Reactive;
|
||||
using GitHub.Extensions.Reactive;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
[ExportViewModel(ViewType = UIViewType.LogoutRequired)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class LogoutRequiredViewModel : BaseViewModel, ILogoutRequiredViewModel
|
||||
public class LogoutRequiredViewModel : DialogViewModelBase, ILogoutRequiredViewModel
|
||||
{
|
||||
static readonly Logger log = LogManager.GetCurrentClassLogger();
|
||||
readonly IRepositoryHosts repositoryHosts;
|
||||
|
@ -53,6 +55,11 @@ namespace GitHub.ViewModels
|
|||
|
||||
public IReactiveCommand<ProgressState> Logout { get; }
|
||||
|
||||
public override IObservable<Unit> Done
|
||||
{
|
||||
get { return Logout.Where(x => x == ProgressState.Success).SelectUnit(); }
|
||||
}
|
||||
|
||||
IObservable<ProgressState> OnLogout(object unused)
|
||||
{
|
||||
return DoLogout().ToObservable()
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace GitHub.ViewModels
|
|||
/// </summary>
|
||||
[ExportViewModel(ViewType = UIViewType.NotAGitHubRepository)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class NotAGitHubRepositoryViewModel : BaseViewModel, INotAGitHubRepositoryViewModel
|
||||
public class NotAGitHubRepositoryViewModel : PanePageViewModelBase, INotAGitHubRepositoryViewModel
|
||||
{
|
||||
ITeamExplorerServices teamExplorerServices;
|
||||
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
using System;
|
||||
using System.ComponentModel.Composition;
|
||||
using GitHub.Exports;
|
||||
using GitHub.Models;
|
||||
using GitHub.Services;
|
||||
using GitHub.UI;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
|
@ -13,7 +8,7 @@ namespace GitHub.ViewModels
|
|||
/// </summary>
|
||||
[ExportViewModel(ViewType = UIViewType.NotAGitRepository)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class NotAGitRepositoryViewModel : BaseViewModel, INotAGitRepositoryViewModel
|
||||
public class NotAGitRepositoryViewModel : PanePageViewModelBase, INotAGitRepositoryViewModel
|
||||
{
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
using ReactiveUI;
|
||||
using NullGuard;
|
||||
using GitHub.UI;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class for view models that appear as a page in a navigable pane, such as the GitHub pane.
|
||||
/// </summary>
|
||||
public class PanePageViewModelBase : ViewModelBase, IPanePageViewModel
|
||||
{
|
||||
string title;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PanePageViewModelBase"/> class.
|
||||
/// </summary>
|
||||
protected PanePageViewModelBase()
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public string Title
|
||||
{
|
||||
[return: AllowNull]
|
||||
get { return title; }
|
||||
protected set { this.RaiseAndSetIfChanged(ref title, value); }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -14,11 +14,10 @@ using GitHub.App;
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
using Octokit;
|
||||
using NLog;
|
||||
using LibGit2Sharp;
|
||||
using System.Globalization;
|
||||
using GitHub.Primitives;
|
||||
using GitHub.Extensions;
|
||||
using System.Reactive.Disposables;
|
||||
using System.Reactive;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
|
@ -26,7 +25,7 @@ namespace GitHub.ViewModels
|
|||
[ExportViewModel(ViewType = UIViewType.PRCreation)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
[SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable")]
|
||||
public class PullRequestCreationViewModel : BaseViewModel, IPullRequestCreationViewModel, IDisposable
|
||||
public class PullRequestCreationViewModel : DialogViewModelBase, IPullRequestCreationViewModel, IDisposable
|
||||
{
|
||||
static readonly Logger log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
|
@ -97,7 +96,7 @@ namespace GitHub.ViewModels
|
|||
.Where(x => !x.IsValid && x.DisplayValidationError)
|
||||
.Subscribe(x => notifications.ShowError(BranchValidator.ValidationResult.Message));
|
||||
|
||||
createPullRequest = ReactiveCommand.CreateAsyncObservable(whenAnyValidationResultChanges,
|
||||
CreatePullRequest = ReactiveCommand.CreateAsyncObservable(whenAnyValidationResultChanges,
|
||||
_ => service
|
||||
.CreatePullRequest(repositoryHost, activeRepo, TargetBranch.Repository, SourceBranch, TargetBranch, PRTitle, Description ?? String.Empty)
|
||||
.Catch<IPullRequestModel, Exception>(ex =>
|
||||
|
@ -219,8 +218,7 @@ namespace GitHub.ViewModels
|
|||
set { this.RaiseAndSetIfChanged(ref branches, value); }
|
||||
}
|
||||
|
||||
IReactiveCommand<IPullRequestModel> createPullRequest;
|
||||
public IReactiveCommand<IPullRequestModel> CreatePullRequest => createPullRequest;
|
||||
public IReactiveCommand<IPullRequestModel> CreatePullRequest { get; }
|
||||
|
||||
string title;
|
||||
public string PRTitle
|
||||
|
@ -249,5 +247,7 @@ namespace GitHub.ViewModels
|
|||
get { return branchValidator; }
|
||||
set { this.RaiseAndSetIfChanged(ref branchValidator, value); }
|
||||
}
|
||||
|
||||
public override IObservable<Unit> Done => CreatePullRequest.SelectUnit();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ using GitHub.Exports;
|
|||
using GitHub.Extensions;
|
||||
using GitHub.Models;
|
||||
using GitHub.Services;
|
||||
using GitHub.Settings;
|
||||
using GitHub.UI;
|
||||
using LibGit2Sharp;
|
||||
using NullGuard;
|
||||
|
@ -26,7 +25,7 @@ namespace GitHub.ViewModels
|
|||
[ExportViewModel(ViewType = UIViewType.PRDetail)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
[NullGuard(ValidationFlags.None)]
|
||||
public class PullRequestDetailViewModel : BaseViewModel, IPullRequestDetailViewModel
|
||||
public class PullRequestDetailViewModel : PanePageViewModelBase, IPullRequestDetailViewModel
|
||||
{
|
||||
readonly ILocalRepositoryModel repository;
|
||||
readonly IModelService modelService;
|
||||
|
@ -36,9 +35,12 @@ namespace GitHub.ViewModels
|
|||
string sourceBranchDisplayName;
|
||||
string targetBranchDisplayName;
|
||||
string body;
|
||||
IReadOnlyList<IPullRequestChangeNode> changedFilesTree;
|
||||
IPullRequestCheckoutState checkoutState;
|
||||
IPullRequestUpdateState updateState;
|
||||
string operationError;
|
||||
bool isBusy;
|
||||
bool isLoading;
|
||||
bool isCheckedOut;
|
||||
bool isFromFork;
|
||||
bool isInCheckout;
|
||||
|
@ -147,6 +149,14 @@ namespace GitHub.ViewModels
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the view model is updating.
|
||||
/// </summary>
|
||||
public bool IsBusy
|
||||
{
|
||||
get { return isBusy; }
|
||||
private set { this.RaiseAndSetIfChanged(ref isBusy, value); }
|
||||
}
|
||||
|
||||
/// Gets a value indicating whether the pull request branch is checked out.
|
||||
/// </summary>
|
||||
public bool IsCheckedOut
|
||||
|
@ -155,6 +165,15 @@ namespace GitHub.ViewModels
|
|||
private set { this.RaiseAndSetIfChanged(ref isCheckedOut, value); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the view model is loading.
|
||||
/// </summary>
|
||||
public bool IsLoading
|
||||
{
|
||||
get { return isLoading; }
|
||||
private set { this.RaiseAndSetIfChanged(ref isLoading, value); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the pull request comes from a fork.
|
||||
/// </summary>
|
||||
|
@ -204,7 +223,11 @@ namespace GitHub.ViewModels
|
|||
/// <summary>
|
||||
/// Gets the changed files as a tree.
|
||||
/// </summary>
|
||||
public IReactiveList<IPullRequestChangeNode> ChangedFilesTree { get; } = new ReactiveList<IPullRequestChangeNode>();
|
||||
public IReadOnlyList<IPullRequestChangeNode> ChangedFilesTree
|
||||
{
|
||||
get { return changedFilesTree; }
|
||||
private set { this.RaiseAndSetIfChanged(ref changedFilesTree, value); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a command that checks out the pull request locally.
|
||||
|
@ -244,7 +267,10 @@ namespace GitHub.ViewModels
|
|||
{
|
||||
var prNumber = data?.Data != null ? (int)data.Data : Model.Number;
|
||||
|
||||
IsBusy = true;
|
||||
if (Model == null)
|
||||
IsLoading = true;
|
||||
else
|
||||
IsBusy = true;
|
||||
|
||||
OperationError = null;
|
||||
modelService.GetPullRequest(repository, prNumber)
|
||||
|
@ -268,15 +294,8 @@ namespace GitHub.ViewModels
|
|||
TargetBranchDisplayName = GetBranchDisplayName(IsFromFork, pullRequest.Base.Label);
|
||||
Body = !string.IsNullOrWhiteSpace(pullRequest.Body) ? pullRequest.Body : Resources.NoDescriptionProvidedMarkdown;
|
||||
|
||||
ChangedFilesTree.Clear();
|
||||
|
||||
var treeChanges = await pullRequestsService.GetTreeChanges(repository, pullRequest);
|
||||
|
||||
// WPF doesn't support AddRange here so iterate through the changes.
|
||||
foreach (var change in CreateChangedFilesTree(pullRequest, treeChanges).Children)
|
||||
{
|
||||
ChangedFilesTree.Add(change);
|
||||
}
|
||||
var changes = await pullRequestsService.GetTreeChanges(repository, pullRequest);
|
||||
ChangedFilesTree = CreateChangedFilesTree(pullRequest, changes).Children.ToList();
|
||||
|
||||
var localBranches = await pullRequestsService.GetLocalBranches(repository, pullRequest).ToList();
|
||||
|
||||
|
@ -342,7 +361,7 @@ namespace GitHub.ViewModels
|
|||
UpdateState = null;
|
||||
}
|
||||
|
||||
IsBusy = false;
|
||||
IsLoading = IsBusy = false;
|
||||
|
||||
if (!isInCheckout)
|
||||
{
|
||||
|
|
|
@ -4,7 +4,7 @@ using System.Collections.ObjectModel;
|
|||
using System.ComponentModel.Composition;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows.Input;
|
||||
using System.Reactive.Subjects;
|
||||
using System.Windows.Media.Imaging;
|
||||
using GitHub.App;
|
||||
using GitHub.Collections;
|
||||
|
@ -21,17 +21,17 @@ namespace GitHub.ViewModels
|
|||
{
|
||||
[ExportViewModel(ViewType = UIViewType.PRList)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class PullRequestListViewModel : BaseViewModel, IPullRequestListViewModel, IDisposable
|
||||
public class PullRequestListViewModel : PanePageViewModelBase, IPullRequestListViewModel, IDisposable
|
||||
{
|
||||
static readonly Logger log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
readonly ReactiveCommand<object> openPullRequestCommand;
|
||||
readonly IRepositoryHost repositoryHost;
|
||||
readonly ILocalRepositoryModel repository;
|
||||
readonly TrackingCollection<IAccount> trackingAuthors;
|
||||
readonly TrackingCollection<IAccount> trackingAssignees;
|
||||
readonly IPackageSettings settings;
|
||||
readonly PullRequestListUIState listSettings;
|
||||
readonly bool constructing;
|
||||
|
||||
[ImportingConstructor]
|
||||
PullRequestListViewModel(
|
||||
|
@ -47,6 +47,7 @@ namespace GitHub.ViewModels
|
|||
ILocalRepositoryModel repository,
|
||||
IPackageSettings settings)
|
||||
{
|
||||
constructing = true;
|
||||
this.repositoryHost = repositoryHost;
|
||||
this.repository = repository;
|
||||
this.settings = settings;
|
||||
|
@ -57,8 +58,6 @@ namespace GitHub.ViewModels
|
|||
.GetOrCreateRepositoryState(repository.CloneUrl)
|
||||
.PullRequests;
|
||||
|
||||
openPullRequestCommand = ReactiveCommand.Create();
|
||||
|
||||
States = new List<PullRequestState> {
|
||||
new PullRequestState { IsOpen = true, Name = "Open" },
|
||||
new PullRequestState { IsOpen = false, Name = "Closed" },
|
||||
|
@ -84,21 +83,27 @@ namespace GitHub.ViewModels
|
|||
.Subscribe(s => UpdateFilter(s, SelectedAssignee, SelectedAuthor));
|
||||
|
||||
this.WhenAny(x => x.SelectedAssignee, x => x.Value)
|
||||
.Where(x => PullRequests != null && x != EmptyUser && IsLoaded)
|
||||
.Where(x => PullRequests != null && x != EmptyUser)
|
||||
.Subscribe(a => UpdateFilter(SelectedState, a, SelectedAuthor));
|
||||
|
||||
this.WhenAny(x => x.SelectedAuthor, x => x.Value)
|
||||
.Where(x => PullRequests != null && x != EmptyUser && IsLoaded)
|
||||
.Where(x => PullRequests != null && x != EmptyUser)
|
||||
.Subscribe(a => UpdateFilter(SelectedState, SelectedAssignee, a));
|
||||
|
||||
SelectedState = States.FirstOrDefault(x => x.Name == listSettings.SelectedState) ?? States[0];
|
||||
OpenPullRequest = ReactiveCommand.Create();
|
||||
OpenPullRequest.Subscribe(DoOpenPullRequest);
|
||||
CreatePullRequest = ReactiveCommand.Create();
|
||||
CreatePullRequest.Subscribe(_ => DoCreatePullRequest());
|
||||
|
||||
constructing = false;
|
||||
}
|
||||
|
||||
public override void Initialize([AllowNull] ViewWithData data)
|
||||
{
|
||||
base.Initialize(data);
|
||||
|
||||
IsLoaded = false;
|
||||
IsBusy = true;
|
||||
|
||||
PullRequests = repositoryHost.ModelService.GetPullRequests(repository, pullRequests);
|
||||
pullRequests.Subscribe(pr =>
|
||||
|
@ -132,7 +137,7 @@ namespace GitHub.ViewModels
|
|||
SelectedAssignee = Assignees.FirstOrDefault(x => x.Login == listSettings.SelectedAssignee);
|
||||
}
|
||||
|
||||
IsLoaded = true;
|
||||
IsBusy = false;
|
||||
UpdateFilter(SelectedState, SelectedAssignee, SelectedAuthor);
|
||||
});
|
||||
}
|
||||
|
@ -145,13 +150,14 @@ namespace GitHub.ViewModels
|
|||
(!state.IsOpen.HasValue || state.IsOpen == pr.IsOpen) &&
|
||||
(ass == null || ass.Equals(pr.Assignee)) &&
|
||||
(aut == null || aut.Equals(pr.Author));
|
||||
SaveSettings();
|
||||
}
|
||||
|
||||
bool isLoaded;
|
||||
public bool IsLoaded
|
||||
bool isBusy;
|
||||
public bool IsBusy
|
||||
{
|
||||
get { return isLoaded; }
|
||||
private set { this.RaiseAndSetIfChanged(ref isLoaded, value); }
|
||||
get { return isBusy; }
|
||||
private set { this.RaiseAndSetIfChanged(ref isBusy, value); }
|
||||
}
|
||||
|
||||
ITrackingCollection<IPullRequestModel> pullRequests;
|
||||
|
@ -171,11 +177,6 @@ namespace GitHub.ViewModels
|
|||
set { this.RaiseAndSetIfChanged(ref selectedPullRequest, value); }
|
||||
}
|
||||
|
||||
public ICommand OpenPullRequest
|
||||
{
|
||||
get { return openPullRequestCommand; }
|
||||
}
|
||||
|
||||
IReadOnlyList<PullRequestState> states;
|
||||
public IReadOnlyList<PullRequestState> States
|
||||
{
|
||||
|
@ -229,6 +230,12 @@ namespace GitHub.ViewModels
|
|||
get { return emptyUser; }
|
||||
}
|
||||
|
||||
readonly Subject<ViewWithData> navigate = new Subject<ViewWithData>();
|
||||
public IObservable<ViewWithData> Navigate => navigate;
|
||||
|
||||
public ReactiveCommand<object> OpenPullRequest { get; }
|
||||
public ReactiveCommand<object> CreatePullRequest { get; }
|
||||
|
||||
bool disposed;
|
||||
protected void Dispose(bool disposing)
|
||||
{
|
||||
|
@ -238,7 +245,6 @@ namespace GitHub.ViewModels
|
|||
pullRequests.Dispose();
|
||||
trackingAuthors.Dispose();
|
||||
trackingAssignees.Dispose();
|
||||
SaveSettings();
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
@ -251,10 +257,25 @@ namespace GitHub.ViewModels
|
|||
|
||||
void SaveSettings()
|
||||
{
|
||||
listSettings.SelectedState = SelectedState.Name;
|
||||
listSettings.SelectedAssignee = SelectedAssignee?.Login;
|
||||
listSettings.SelectedAuthor = SelectedAuthor?.Login;
|
||||
settings.Save();
|
||||
if (!constructing)
|
||||
{
|
||||
listSettings.SelectedState = SelectedState.Name;
|
||||
listSettings.SelectedAssignee = SelectedAssignee?.Login;
|
||||
listSettings.SelectedAuthor = SelectedAuthor?.Login;
|
||||
settings.Save();
|
||||
}
|
||||
}
|
||||
|
||||
void DoOpenPullRequest(object pullRequest)
|
||||
{
|
||||
var d = new ViewWithData(UIControllerFlow.PullRequestDetail) { Data = pullRequest };
|
||||
navigate.OnNext(d);
|
||||
}
|
||||
|
||||
void DoCreatePullRequest()
|
||||
{
|
||||
var d = new ViewWithData(UIControllerFlow.PullRequestCreation);
|
||||
navigate.OnNext(d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,14 +28,13 @@ namespace GitHub.ViewModels
|
|||
{
|
||||
[ExportViewModel(ViewType=UIViewType.Clone)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class RepositoryCloneViewModel : BaseViewModel, IRepositoryCloneViewModel
|
||||
public class RepositoryCloneViewModel : DialogViewModelBase, IRepositoryCloneViewModel
|
||||
{
|
||||
static readonly Logger log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
readonly IRepositoryHost repositoryHost;
|
||||
readonly IOperatingSystem operatingSystem;
|
||||
readonly ReactiveCommand<object> browseForDirectoryCommand = ReactiveCommand.Create();
|
||||
bool isLoading;
|
||||
bool noRepositoriesFound;
|
||||
readonly ObservableAsPropertyHelper<bool> canClone;
|
||||
string baseRepositoryPath;
|
||||
|
@ -66,13 +65,13 @@ namespace GitHub.ViewModels
|
|||
repositories.Filter = FilterRepository;
|
||||
repositories.NewerComparer = OrderedComparer<IRemoteRepositoryModel>.OrderByDescending(x => x.UpdatedAt).Compare;
|
||||
|
||||
filterTextIsEnabled = this.WhenAny(x => x.IsLoading,
|
||||
filterTextIsEnabled = this.WhenAny(x => x.IsBusy,
|
||||
loading => loading.Value || repositories.UnfilteredCount > 0 && !LoadingFailed)
|
||||
.ToProperty(this, x => x.FilterTextIsEnabled);
|
||||
|
||||
this.WhenAny(
|
||||
x => x.repositories.UnfilteredCount,
|
||||
x => x.IsLoading,
|
||||
x => x.IsBusy,
|
||||
x => x.LoadingFailed,
|
||||
(unfilteredCount, loading, failed) =>
|
||||
{
|
||||
|
@ -124,17 +123,17 @@ namespace GitHub.ViewModels
|
|||
{
|
||||
base.Initialize(data);
|
||||
|
||||
IsLoading = true;
|
||||
IsBusy = true;
|
||||
repositoryHost.ModelService.GetRepositories(repositories);
|
||||
repositories.OriginalCompleted.Subscribe(
|
||||
_ => { }
|
||||
, ex =>
|
||||
{
|
||||
LoadingFailed = true;
|
||||
IsLoading = false;
|
||||
IsBusy = false;
|
||||
log.Error("Error while loading repositories", ex);
|
||||
},
|
||||
() => IsLoading = false
|
||||
() => IsBusy = false
|
||||
);
|
||||
repositories.Subscribe();
|
||||
}
|
||||
|
@ -244,12 +243,6 @@ namespace GitHub.ViewModels
|
|||
set { this.RaiseAndSetIfChanged(ref filterText, value); }
|
||||
}
|
||||
|
||||
public bool IsLoading
|
||||
{
|
||||
get { return isLoading; }
|
||||
private set { this.RaiseAndSetIfChanged(ref isLoading, value); }
|
||||
}
|
||||
|
||||
public bool LoadingFailed
|
||||
{
|
||||
get { return loadingFailed; }
|
||||
|
@ -277,5 +270,7 @@ namespace GitHub.ViewModels
|
|||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public override IObservable<Unit> Done => CloneCommand.SelectUnit();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -197,6 +197,8 @@ namespace GitHub.ViewModels
|
|||
/// </summary>
|
||||
public IReactiveCommand<Unit> CreateRepository { get; private set; }
|
||||
|
||||
public override IObservable<Unit> Done => CreateRepository;
|
||||
|
||||
protected override NewRepository GatherRepositoryInfo()
|
||||
{
|
||||
var gitHubRepository = base.GatherRepositoryInfo();
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace GitHub.ViewModels
|
|||
/// <summary>
|
||||
/// Base class for the Repository publish/create dialogs. It represents the details about the repository itself.
|
||||
/// </summary>
|
||||
public abstract class RepositoryFormViewModel : BaseViewModel
|
||||
public abstract class RepositoryFormViewModel : DialogViewModelBase
|
||||
{
|
||||
readonly ObservableAsPropertyHelper<string> safeRepositoryName;
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ using System.Collections.ObjectModel;
|
|||
using System.ComponentModel.Composition;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Reactive.Linq;
|
||||
using GitHub.App;
|
||||
using GitHub.Exports;
|
||||
|
@ -31,7 +32,6 @@ namespace GitHub.ViewModels
|
|||
readonly ObservableAsPropertyHelper<IReadOnlyList<IAccount>> accounts;
|
||||
readonly ObservableAsPropertyHelper<bool> isHostComboBoxVisible;
|
||||
readonly ObservableAsPropertyHelper<bool> canKeepPrivate;
|
||||
readonly ObservableAsPropertyHelper<bool> isPublishing;
|
||||
readonly ObservableAsPropertyHelper<string> title;
|
||||
readonly IUsageTracker usageTracker;
|
||||
|
||||
|
@ -89,8 +89,7 @@ namespace GitHub.ViewModels
|
|||
(canKeep, publishing) => canKeep && !publishing)
|
||||
.ToProperty(this, x => x.CanKeepPrivate);
|
||||
|
||||
isPublishing = PublishRepository.IsExecuting
|
||||
.ToProperty(this, x => x.IsPublishing);
|
||||
PublishRepository.IsExecuting.Subscribe(x => IsBusy = x);
|
||||
|
||||
var defaultRepositoryName = repositoryPublishService.LocalRepositoryName;
|
||||
if (!string.IsNullOrEmpty(defaultRepositoryName))
|
||||
|
@ -111,7 +110,6 @@ namespace GitHub.ViewModels
|
|||
|
||||
public new string Title { get { return title.Value; } }
|
||||
public bool CanKeepPrivate { get { return canKeepPrivate.Value; } }
|
||||
public bool IsPublishing { get { return isPublishing.Value; } }
|
||||
|
||||
public IReactiveCommand<ProgressState> PublishRepository { get; private set; }
|
||||
public ObservableCollection<IConnection> Connections { get; private set; }
|
||||
|
@ -141,6 +139,11 @@ namespace GitHub.ViewModels
|
|||
get { return isHostComboBoxVisible.Value; }
|
||||
}
|
||||
|
||||
public override IObservable<Unit> Done
|
||||
{
|
||||
get { return PublishRepository.Select(x => x == ProgressState.Success).SelectUnit(); }
|
||||
}
|
||||
|
||||
ReactiveCommand<ProgressState> InitializePublishRepositoryCommand()
|
||||
{
|
||||
var canCreate = this.WhenAny(x => x.RepositoryNameValidator.ValidationResult.IsValid, x => x.Value);
|
||||
|
|
|
@ -8,6 +8,7 @@ using System.Reactive.Linq;
|
|||
using System.Windows.Input;
|
||||
using GitHub.App;
|
||||
using GitHub.Exports;
|
||||
using GitHub.Extensions.Reactive;
|
||||
using GitHub.Models;
|
||||
using GitHub.Services;
|
||||
using GitHub.Validation;
|
||||
|
@ -20,7 +21,7 @@ namespace GitHub.ViewModels
|
|||
{
|
||||
[ExportViewModel(ViewType=UIViewType.StartPageClone)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class StartPageCloneViewModel : BaseViewModel, IBaseCloneViewModel
|
||||
public class StartPageCloneViewModel : DialogViewModelBase, IBaseCloneViewModel
|
||||
{
|
||||
static readonly Logger log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
|
@ -156,5 +157,7 @@ namespace GitHub.ViewModels
|
|||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public override IObservable<Unit> Done => CloneCommand.SelectUnit();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using System.ComponentModel.Composition;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.Reactive;
|
||||
using System.Reactive.Linq;
|
||||
using GitHub.App;
|
||||
using GitHub.Authentication;
|
||||
|
@ -17,7 +18,7 @@ namespace GitHub.ViewModels
|
|||
{
|
||||
[ExportViewModel(ViewType = UIViewType.TwoFactor)]
|
||||
[PartCreationPolicy(CreationPolicy.NonShared)]
|
||||
public class TwoFactorDialogViewModel : BaseViewModel, ITwoFactorDialogViewModel
|
||||
public class TwoFactorDialogViewModel : DialogViewModelBase, ITwoFactorDialogViewModel
|
||||
{
|
||||
bool isAuthenticationCodeSent;
|
||||
bool invalidAuthenticationCode;
|
||||
|
@ -41,7 +42,7 @@ namespace GitHub.ViewModels
|
|||
(code, busy) => !string.IsNullOrEmpty(code.Value) && code.Value.Length == 6 && !busy.Value);
|
||||
|
||||
OkCommand = ReactiveCommand.Create(canVerify);
|
||||
CancelCommand.Subscribe(_ => TwoFactorType = TwoFactorType.None);
|
||||
Cancel.Subscribe(_ => TwoFactorType = TwoFactorType.None);
|
||||
NavigateLearnMore = ReactiveCommand.Create();
|
||||
NavigateLearnMore.Subscribe(x => browser.OpenUrl(GitHubUrls.TwoFactorLearnMore));
|
||||
//TODO: ShowHelpCommand.Subscribe(x => browser.OpenUrl(twoFactorHelpUri));
|
||||
|
@ -97,7 +98,7 @@ namespace GitHub.ViewModels
|
|||
var resend = ResendCodeCommand.Select(_ => RecoveryOptionResult.RetryOperation)
|
||||
.Select(_ => TwoFactorChallengeResult.RequestResendCode)
|
||||
.Do(_ => IsAuthenticationCodeSent = true);
|
||||
var cancel = CancelCommand.Select(_ => default(TwoFactorChallengeResult));
|
||||
var cancel = Cancel.Select(_ => default(TwoFactorChallengeResult));
|
||||
return Observable.Merge(ok, cancel, resend).Take(1);
|
||||
}
|
||||
|
||||
|
@ -144,5 +145,7 @@ namespace GitHub.ViewModels
|
|||
{
|
||||
get { return showErrorMessage.Value; }
|
||||
}
|
||||
|
||||
public override IObservable<Unit> Done => Observable.Never<Unit>();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using GitHub.UI;
|
||||
using NullGuard;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class for view models.
|
||||
/// </summary>
|
||||
public abstract class ViewModelBase : ReactiveObject, IViewModel
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public virtual void Initialize([AllowNull] ViewWithData data)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -99,6 +99,9 @@
|
|||
<Compile Include="Services\IPullRequestService.cs" />
|
||||
<Compile Include="ViewModels\IGistCreationViewModel.cs" />
|
||||
<Compile Include="Services\NotificationDispatcher.cs" />
|
||||
<Compile Include="ViewModels\IHasCancel.cs" />
|
||||
<Compile Include="ViewModels\IHasDone.cs" />
|
||||
<Compile Include="ViewModels\ILoginViewModel.cs" />
|
||||
<Compile Include="ViewModels\INotAGitRepositoryViewModel.cs" />
|
||||
<Compile Include="ViewModels\INotAGitHubRepositoryViewModel.cs" />
|
||||
<Compile Include="ViewModels\ILoggedOutViewModel.cs" />
|
||||
|
@ -119,7 +122,7 @@
|
|||
<Compile Include="ViewModels\IPullRequestDirectoryNode.cs" />
|
||||
<Compile Include="ViewModels\IPullRequestFileNode.cs" />
|
||||
<Compile Include="ViewModels\IPullRequestListViewModel.cs" />
|
||||
<Compile Include="ViewModels\IReactiveViewModel.cs" />
|
||||
<Compile Include="ViewModels\IDialogViewModel.cs" />
|
||||
<Compile Include="ViewModels\IBaseCloneViewModel.cs" />
|
||||
<Compile Include="ViewModels\IRepositoryCreationTarget.cs" />
|
||||
<Compile Include="ViewModels\IRepositoryForm.cs" />
|
||||
|
|
|
@ -54,18 +54,18 @@ namespace GitHub.Services
|
|||
handler?.ShowMessage(message);
|
||||
}
|
||||
|
||||
public void ShowMessage(string message, ICommand command)
|
||||
public void ShowMessage(string message, ICommand command, bool showToolTips = true, Guid guid = default(Guid))
|
||||
{
|
||||
notifications.OnNext(new Notification(message, Notification.NotificationType.Message, command));
|
||||
var handler = notificationHandlers.TryPeek();
|
||||
handler?.ShowMessage(message, command);
|
||||
handler?.ShowMessage(message, command, showToolTips, guid);
|
||||
}
|
||||
|
||||
public void ShowWarning(string message)
|
||||
{
|
||||
notifications.OnNext(new Notification(message, Notification.NotificationType.Warning));
|
||||
var handler = notificationHandlers.TryPeek();
|
||||
handler.ShowWarning(message);
|
||||
handler?.ShowWarning(message);
|
||||
}
|
||||
|
||||
public void ShowError(string message)
|
||||
|
@ -75,6 +75,18 @@ namespace GitHub.Services
|
|||
handler?.ShowError(message);
|
||||
}
|
||||
|
||||
public void HideNotification(Guid guid)
|
||||
{
|
||||
var handler = notificationHandlers.TryPeek();
|
||||
handler?.HideNotification(guid);
|
||||
}
|
||||
|
||||
public bool IsNotificationVisible(Guid guid)
|
||||
{
|
||||
var handler = notificationHandlers.TryPeek();
|
||||
return handler?.IsNotificationVisible(guid) ?? false;
|
||||
}
|
||||
|
||||
bool disposed; // To detect redundant calls
|
||||
void Dispose(bool disposing)
|
||||
{
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace GitHub.ViewModels
|
|||
/// <summary>
|
||||
/// ViewModel for the the Clone Repository dialog
|
||||
/// </summary>
|
||||
public interface IBaseCloneViewModel : IViewModel, IRepositoryCreationTarget
|
||||
public interface IBaseCloneViewModel : IDialogViewModel, IRepositoryCreationTarget
|
||||
{
|
||||
/// <summary>
|
||||
/// Signals that the user clicked the clone button.
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
using System;
|
||||
using System.Reactive;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// A <see cref="IDialogViewModel"/> which exposes its Cancel command as a reactive command.
|
||||
/// </summary>
|
||||
public interface IDialogViewModel : IViewModel, IHasDone, IHasCancel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets a title to display in the dialog titlebar.
|
||||
/// </summary>
|
||||
string Title { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the view model is busy.
|
||||
/// </summary>
|
||||
bool IsBusy { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the view model represents the page currently being shown.
|
||||
/// </summary>
|
||||
bool IsShowing { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a command that will dismiss the page.
|
||||
/// </summary>
|
||||
new ReactiveCommand<object> Cancel { get; }
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@ using ReactiveUI;
|
|||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
public interface IGistCreationViewModel : IViewModel
|
||||
public interface IGistCreationViewModel : IDialogViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the command to create a new gist.
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Reactive;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a view model that has a "Cancel" signal.
|
||||
/// </summary>
|
||||
public interface IHasCancel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets an observable which will emit a value when the view model is cancelled.
|
||||
/// </summary>
|
||||
IObservable<Unit> Cancel { get; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Reactive;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a view model that has a "Done" signal.
|
||||
/// </summary>
|
||||
public interface IHasDone
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets an observable which will emit a value when the view model is done.
|
||||
/// </summary>
|
||||
IObservable<Unit> Done { get; }
|
||||
}
|
||||
}
|
|
@ -7,7 +7,7 @@ namespace GitHub.ViewModels
|
|||
/// <summary>
|
||||
/// Defines the view model for the "Sign in to GitHub" view in the GitHub pane.
|
||||
/// </summary>
|
||||
public interface ILoggedOutViewModel : IViewModel
|
||||
public interface ILoggedOutViewModel : IPanePageViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the command executed when the user clicks the "Sign in" link.
|
||||
|
|
|
@ -3,7 +3,7 @@ using GitHub.Authentication;
|
|||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
public interface ILoginViewModel : IViewModel
|
||||
public interface ILoginViewModel : IDialogViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets an observable sequence which produces an authentication
|
|
@ -7,7 +7,7 @@ namespace GitHub.ViewModels
|
|||
/// <summary>
|
||||
/// Represents a view model for the "Log out Required" dialog..
|
||||
/// </summary>
|
||||
public interface ILogoutRequiredViewModel : IReactiveViewModel
|
||||
public interface ILogoutRequiredViewModel : IDialogViewModel
|
||||
{
|
||||
IReactiveCommand<ProgressState> Logout { get; }
|
||||
string LogoutRequiredMessage { get; set; }
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace GitHub.ViewModels
|
|||
/// <summary>
|
||||
/// Defines the view model for the "Sign in to GitHub" view in the GitHub pane.
|
||||
/// </summary>
|
||||
public interface INotAGitHubRepositoryViewModel : IViewModel
|
||||
public interface INotAGitHubRepositoryViewModel : IPanePageViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the command executed when the user clicks the "Publish to GitHub" link.
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/// Defines the view model for the "Not a git repository" view in the GitHub pane.
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1040:AvoidEmptyInterfaces")]
|
||||
public interface INotAGitRepositoryViewModel : IViewModel
|
||||
public interface INotAGitRepositoryViewModel : IPanePageViewModel
|
||||
{
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ using ReactiveUI;
|
|||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
public interface IPullRequestCreationViewModel : IReactiveViewModel
|
||||
public interface IPullRequestCreationViewModel : IDialogViewModel, IPanePageViewModel
|
||||
{
|
||||
IBranch SourceBranch { get; set; }
|
||||
IBranch TargetBranch { get; set; }
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using GitHub.Models;
|
||||
|
@ -62,7 +63,7 @@ namespace GitHub.ViewModels
|
|||
/// <summary>
|
||||
/// Represents a view model for displaying details of a pull request.
|
||||
/// </summary>
|
||||
public interface IPullRequestDetailViewModel : IViewModel, IHasBusy
|
||||
public interface IPullRequestDetailViewModel : IViewModel, IHasLoading, IHasBusy
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the underlying pull request model.
|
||||
|
@ -97,7 +98,7 @@ namespace GitHub.ViewModels
|
|||
/// <summary>
|
||||
/// Gets the changed files as a tree.
|
||||
/// </summary>
|
||||
IReactiveList<IPullRequestChangeNode> ChangedFilesTree { get; }
|
||||
IReadOnlyList<IPullRequestChangeNode> ChangedFilesTree { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the state associated with the <see cref="Checkout"/> command.
|
||||
|
|
|
@ -27,16 +27,17 @@ namespace GitHub.ViewModels
|
|||
}
|
||||
}
|
||||
|
||||
public interface IPullRequestListViewModel : IViewModel
|
||||
public interface IPullRequestListViewModel : IViewModel, ICanNavigate, IHasBusy
|
||||
{
|
||||
ITrackingCollection<IPullRequestModel> PullRequests { get; }
|
||||
IPullRequestModel SelectedPullRequest { get; }
|
||||
ICommand OpenPullRequest { get; }
|
||||
IReadOnlyList<PullRequestState> States { get; set; }
|
||||
PullRequestState SelectedState { get; set; }
|
||||
ObservableCollection<IAccount> Authors { get; }
|
||||
IAccount SelectedAuthor { get; set; }
|
||||
ObservableCollection<IAccount> Assignees { get; }
|
||||
IAccount SelectedAssignee { get; set; }
|
||||
ReactiveCommand<object> OpenPullRequest { get; }
|
||||
ReactiveCommand<object> CreatePullRequest { get; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
using ReactiveUI;
|
||||
|
||||
namespace GitHub.ViewModels
|
||||
{
|
||||
public interface IReactiveViewModel : IViewModel
|
||||
{
|
||||
IReactiveCommand<object> CancelCommand { get; }
|
||||
}
|
||||
}
|