Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Highlight checked out PR in list.#1106

Merged
jcansdale merged 11 commits intomasterfrom
feature/highlight-current-pr
Mar 5, 2018
Merged

Highlight checked out PR in list.#1106
jcansdale merged 11 commits intomasterfrom
feature/highlight-current-pr

Conversation

@grokys
Copy link
Copy Markdown
Contributor

@grokys grokys commented Aug 3, 2017

This PR highlights the currently checked out PR in the PR list.

Blue:

devenv_2018-02-21_16-00-37

Dark:

2018-02-21_16-01-05

Light:

2018-02-21_16-01-29

Not yet implemented

To link a branch to a PR we use a property set in the git .config file - currently this is only set when a branch is a) checked out in the PR details view b) the PR details are opened for the current branch's PR.

We can actually do better here: when we load the PR list we have enough information to mark all PR branches with their related PR but there are a couple of things preventing us from doing this:

  1. TrackingCollection.OriginalCompleted is fired in the PR list when the list starts loading for the first time, not when the load completes. This works correctly on subsequent refreshes - appears to be a bug in TrackingCollection - now fixed
  2. TrackingCollection.original would need to be exposed so we can get an unfiltered list of all PRs
  3. Navigating to the PR list causes a reload of all PRs (Navigating to the PR list causes a reload of all PRs #1105) which means we'd be doing this way more often than we should; as the operation involves opening the repository and reading/writing config values this may not be a good idea. This appears to be caused by the fact that in the navigation controller there is no distinction between loading a page for the first time and moving to an already loaded page. - now fixed

I think this should probably be implemented in another PR, so bear in mind that the current PR may not be highlighted until you open its details.

@grokys grokys requested review from donokuda, jcansdale and shana August 3, 2017 10:17
@donokuda
Copy link
Copy Markdown
Contributor

donokuda commented Aug 8, 2017

The GitHub pane is throwing this error when I try to test this branch out:

An exception was encountered while constructing the content of this frame.  This information is also logged in "C:\Users\donokuda\AppData\Roaming\Microsoft\VisualStudio\15.0_f08b9986Exp\ActivityLog.xml".

Exception details:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.VisualStudio.Composition.CompositionFailedException: An exception was thrown while initializing part "GitHub.VisualStudio.UI.Views.GitHubPaneView". ---> System.Windows.Markup.XamlParseException: 'Set property 'System.Windows.ResourceDictionary.DeferrableContent' threw an exception.' Line number '3' and line position '21'. ---> System.Xaml.XamlObjectWriterException: 'Provide value on 'MS.Internal.Markup.StaticExtension' threw an exception.' Line number '4' and line position '45'. ---> System.Xaml.XamlParseException: Type reference cannot find type named '{clr-namespace:Markdig.Wpf;assembly=Markdig.Wpf}Styles'.
   at MS.Internal.Xaml.Context.ObjectWriterContext.ServiceProvider_Resolve(String qName)
   at MS.Internal.Xaml.ServiceProviderContext.System.Windows.Markup.IXamlTypeResolver.Resolve(String qName)
   at MS.Internal.Markup.StaticExtension.ProvideValue(IServiceProvider serviceProvider)
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
   --- End of inner exception stack trace ---
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
   at System.Xaml.XamlObjectWriter.Logic_ProvideValue(ObjectWriterContext ctx)
   at System.Xaml.XamlObjectWriter.Logic_AssignProvidedValue(ObjectWriterContext ctx)
   at System.Xaml.XamlObjectWriter.WriteEndObject()
   at System.Xaml.XamlWriter.WriteNode(XamlReader reader)
   at System.Xaml.XamlServices.Transform(XamlReader xamlReader, XamlWriter xamlWriter, Boolean closeWriter)
   at System.Windows.ResourceDictionary.EvaluateMarkupExtensionNodeList(XamlReader reader, IServiceProvider serviceProvider)
   at System.Windows.ResourceDictionary.GetKeyValue(KeyRecord key, IServiceProvider serviceProvider)
   at System.Windows.ResourceDictionary.SetKeys(IList`1 keyCollection, IServiceProvider serviceProvider)
   at System.Windows.ResourceDictionary.SetDeferrableContent(DeferrableContent deferrableContent)
   at System.Windows.Baml2006.WpfSharedBamlSchemaContext.<>c.<Create_BamlProperty_ResourceDictionary_DeferrableContent>b__297_0(Object target, Object value)
   at System.Windows.Baml2006.WpfKnownMemberInvoker.SetValue(Object instance, Object value)
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(XamlMember member, Object obj, Object value)
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value)
   --- End of inner exception stack trace ---
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at GitHub.VisualStudio.UI.Views.GitHubPaneView.InitializeComponent() in C:\Users\donokuda\Source\Repos\VisualStudio\src\GitHub.VisualStudio\UI\Views\GitHubPaneView.xaml:line 1
   at GitHub.VisualStudio.UI.Views.GitHubPaneView..ctor(INotificationDispatcher notifications) in C:\Users\donokuda\Source\Repos\VisualStudio\src\GitHub.VisualStudio\UI\Views\GitHubPaneView.xaml.cs:line 26
   --- End of inner exception stack trace ---
   at Microsoft.VisualStudio.Composition.RuntimeExportProviderFactory.RuntimeExportProvider.RuntimePartLifecycleTracker.CreateValue()
   at Microsoft.VisualStudio.Composition.ExportProvider.PartLifecycleTracker.Create()
   at Microsoft.VisualStudio.Composition.ExportProvider.PartLifecycleTracker.MoveNext(PartLifecycleState nextState)
   at Microsoft.VisualStudio.Composition.ExportProvider.PartLifecycleTracker.GetValueReadyToExpose()
   at Microsoft.VisualStudio.Composition.RuntimeExportProviderFactory.RuntimeExportProvider.<>c__DisplayClass13_0.<CreateExportFactory>b__0()
   at Microsoft.VisualStudio.Composition.ExportProvider.<>c__DisplayClass54_0.<CreateExportFactory>b__0()
   at Microsoft.VisualStudio.Composition.DelegateServices.<>c__DisplayClass2_0`1.<As>b__0()
   at System.ComponentModel.Composition.ExportFactory`1.CreateExport()
   at GitHub.Services.ExportFactoryProvider.GetView(UIViewType viewType) in C:\Users\donokuda\Source\Repos\VisualStudio\src\GitHub.Exports\Services\ExportFactoryProvider.cs:line 55
   at GitHub.App.Factories.UIFactory.CreateViewAndViewModel(UIViewType viewType) in C:\Users\donokuda\Source\Repos\VisualStudio\src\GitHub.App\Factories\UIFactory.cs:line 36
   at GitHub.VisualStudio.UI.UIProvider.GetView(UIViewType which, ViewWithData data) in C:\Users\donokuda\Source\Repos\VisualStudio\src\GitHub.VisualStudio\Services\UIProvider.cs:line 66
   at GitHub.VisualStudio.UI.GitHubPane..ctor() in C:\Users\donokuda\Source\Repos\VisualStudio\src\GitHub.VisualStudio\UI\GitHubPane.cs:line 55
   --- End of inner exception stack trace ---
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   at Microsoft.VisualStudio.Shell.Package.InstantiateToolWindow(Type toolWindowType)
   at Microsoft.VisualStudio.Shell.Package.CreateToolWindow(Type toolWindowType, Int32 id, UInt32 flags)
   at Microsoft.VisualStudio.Shell.Package.CreateToolWindow(Type toolWindowType, Int32 id, ProvideToolWindowAttribute tool)
   at Microsoft.VisualStudio.Shell.Package.FindToolWindow(Type toolWindowType, Int32 id, Boolean create, ProvideToolWindowAttribute tool)
   at Microsoft.VisualStudio.Shell.Package.CreateToolWindow(Guid& toolWindowType, Int32 id)
   at Microsoft.VisualStudio.Shell.Package.Microsoft.VisualStudio.Shell.Interop.IVsToolWindowFactory.CreateToolWindow(Guid& toolWindowType, UInt32 id)
   at Microsoft.VisualStudio.Platform.WindowManagement.WindowFrame.ConstructContent()

@grokys grokys changed the title Highlight checked out PR in list. [WIP] Highlight checked out PR in list. Aug 8, 2017
@grokys
Copy link
Copy Markdown
Contributor Author

grokys commented Aug 8, 2017

@donokuda I think this is one of those things that needs to be fixed by cleaning the solution and resetting the experimental instance. However, we can do that later - we've punted this PR to the next release due to the caveats listed.

 Conflicts:
	src/GitHub.App/ViewModels/GitHubPane/PullRequestListViewModel.cs
	src/GitHub.VisualStudio.UI/Styles/ThemeBlue.xaml
	src/GitHub.VisualStudio.UI/Styles/ThemeDark.xaml
	src/GitHub.VisualStudio.UI/Styles/ThemeLight.xaml
	src/GitHub.VisualStudio/Views/GitHubPane/PullRequestListItem.xaml
	test/UnitTests/GitHub.App/ViewModels/GitHubPane/PullRequestListViewModelTests.cs
@grokys
Copy link
Copy Markdown
Contributor Author

grokys commented Feb 14, 2018

@jcansdale @donokuda this should be ready for review again now, bearing in mind the gotcha in the "Not yet implemented" section of the PR description.

@grokys grokys changed the title [WIP] Highlight checked out PR in list. Highlight checked out PR in list. Feb 14, 2018
@shana
Copy link
Copy Markdown
Contributor

shana commented Feb 21, 2018

@grokys @donokuda Do you have updated screenshots on how this is looking now that you can post here?

@grokys
Copy link
Copy Markdown
Contributor Author

grokys commented Feb 21, 2018

Good point @shana - updated.

@StanleyGoldman StanleyGoldman self-requested a review February 21, 2018 20:25
Copy link
Copy Markdown
Contributor

@StanleyGoldman StanleyGoldman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested this and it works well from what I see.

the current PR may not be highlighted until you open its details

I didn't find that comment to be true. The pull request list view updates the highlighted value automatically.

(s, r) => new { Session = s, Repository = r })
.Subscribe(x =>
{
CheckedOutPullRequest = x.Session?.RepositoryOwner == x.Repository?.Owner ?
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are you only checking the repository owner here?

Copy link
Copy Markdown
Collaborator

@jcansdale jcansdale left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've just merged the latest commits and checked that this is working. I haven't noticed the current PR not being highlighted until its details are opened. It was highlighted fine when I first viewed the PR list.

@jcansdale jcansdale merged commit 797d1b8 into master Mar 5, 2018
@jcansdale jcansdale deleted the feature/highlight-current-pr branch March 5, 2018 12:02
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants