From 220ac7a71cb4528536e709cbcb910519084fed45 Mon Sep 17 00:00:00 2001 From: Michael Bayles Date: Sun, 3 Mar 2019 01:18:15 -0600 Subject: [PATCH 1/4] Using commit.Committer.Name --- .../Services/PullRequestSessionService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/GitHub.InlineReviews/Services/PullRequestSessionService.cs b/src/GitHub.InlineReviews/Services/PullRequestSessionService.cs index e470647330..27b413eda2 100644 --- a/src/GitHub.InlineReviews/Services/PullRequestSessionService.cs +++ b/src/GitHub.InlineReviews/Services/PullRequestSessionService.cs @@ -365,11 +365,11 @@ public virtual async Task ReadPullRequestDetail(HostAddr when.Commit(commit => new CommitModel { AbbreviatedOid = commit.AbbreviatedOid, - // TODO: commit.Author.User can be null + Author = new ActorModel { - Login = commit.Author.User.Login, - AvatarUrl = commit.Author.User.AvatarUrl(null), + Login = commit.Author.User == null ? commit.Committer.Name : commit.Author.User.Login, + AvatarUrl = commit.Author.User == null ? "" : commit.Author.User.AvatarUrl(null), }, MessageHeadline = commit.MessageHeadline, Oid = commit.Oid, From 1b4d2c861f1454f69efb818b54b304a36516014e Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Fri, 8 Mar 2019 11:44:18 -0500 Subject: [PATCH 2/4] Handling support of a null commit author --- .../PullRequestPageViewModelDesigner.cs | 4 ++-- .../ViewModels/CommitActorViewModel.cs | 21 +++++++++++++++++ .../Documents/CommitListViewModel.cs | 13 +++++++++-- .../Documents/CommitSummaryViewModel.cs | 4 ++-- .../Documents/ICommitListViewModel.cs | 4 +++- .../Documents/ICommitSummaryViewModel.cs | 2 +- .../ViewModels/ICommitActorViewModel.cs | 9 ++++++++ src/GitHub.Exports/Models/CommitActorModel.cs | 23 +++++++++++++++++++ src/GitHub.Exports/Models/CommitModel.cs | 2 +- .../Services/PullRequestSessionService.cs | 13 +++++++---- .../Views/Documents/CommitListView.xaml | 2 +- 11 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 src/GitHub.App/ViewModels/CommitActorViewModel.cs create mode 100644 src/GitHub.Exports.Reactive/ViewModels/ICommitActorViewModel.cs create mode 100644 src/GitHub.Exports/Models/CommitActorModel.cs diff --git a/src/GitHub.App/SampleData/Documents/PullRequestPageViewModelDesigner.cs b/src/GitHub.App/SampleData/Documents/PullRequestPageViewModelDesigner.cs index c334e08489..82ecf90d70 100644 --- a/src/GitHub.App/SampleData/Documents/PullRequestPageViewModelDesigner.cs +++ b/src/GitHub.App/SampleData/Documents/PullRequestPageViewModelDesigner.cs @@ -59,13 +59,13 @@ Depends on #1993 new CommitListViewModel( new CommitSummaryViewModel(new CommitModel { - Author = new ActorModel { Login = "grokys" }, + Author = new CommitActorModel { User = new ActorModel{ Login = "grokys" }}, AbbreviatedOid = "c7c7d25", MessageHeadline = "Refactor comment view models." }), new CommitSummaryViewModel(new CommitModel { - Author = new ActorModel { Login = "shana" }, + Author = new CommitActorModel { User = new ActorModel{ Login = "shana" }}, AbbreviatedOid = "04e6a90", MessageHeadline = "Refactor comment view models.", })), diff --git a/src/GitHub.App/ViewModels/CommitActorViewModel.cs b/src/GitHub.App/ViewModels/CommitActorViewModel.cs new file mode 100644 index 0000000000..46d2944bc0 --- /dev/null +++ b/src/GitHub.App/ViewModels/CommitActorViewModel.cs @@ -0,0 +1,21 @@ +using GitHub.Models; + +namespace GitHub.ViewModels +{ + public class CommitActorViewModel: ActorViewModel, ICommitActorViewModel + { + public CommitActorViewModel(CommitActorModel model) + :base(model.User) + { +// Initialize(model.User); + + Name = model.Name; + Email = model.Email; + HasLogin = model.User != null; + } + + public string Email { get; } + public string Name { get; } + public bool HasLogin { get; } + } +} \ No newline at end of file diff --git a/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs b/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs index a72006ffd3..c9acf0cb3e 100644 --- a/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs +++ b/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs @@ -25,6 +25,7 @@ public CommitListViewModel(params ICommitSummaryViewModel[] commits) Commits = commits; Author = Commits[0].Author; + AuthorName = GetAuthorDisplayName(Commits[0].Author); AuthorCaption = BuildAuthorCaption(); } @@ -42,12 +43,15 @@ public CommitListViewModel(IEnumerable commits) } Author = Commits[0].Author; + AuthorName = GetAuthorDisplayName(Commits[0].Author); AuthorCaption = BuildAuthorCaption(); } /// - public IActorViewModel Author { get; } + public ICommitActorViewModel Author { get; } + public string AuthorName { get; } + /// public string AuthorCaption { get; } @@ -58,7 +62,7 @@ string BuildAuthorCaption() { var result = new StringBuilder(); - if (Commits.Any(x => x.Author.Login != Author.Login)) + if (Commits.Any(x => GetAuthorDisplayName(x.Author) != GetAuthorDisplayName(Author))) { result.Append(Resources.AndOthers); result.Append(' '); @@ -67,5 +71,10 @@ string BuildAuthorCaption() result.Append(Resources.AddedSomeCommits); return result.ToString(); } + + string GetAuthorDisplayName(ICommitActorViewModel commitActorViewModel) + { + return commitActorViewModel.HasLogin ? commitActorViewModel.Login : commitActorViewModel.Name; + } } } diff --git a/src/GitHub.App/ViewModels/Documents/CommitSummaryViewModel.cs b/src/GitHub.App/ViewModels/Documents/CommitSummaryViewModel.cs index dc105488ed..7cb9b10e0b 100644 --- a/src/GitHub.App/ViewModels/Documents/CommitSummaryViewModel.cs +++ b/src/GitHub.App/ViewModels/Documents/CommitSummaryViewModel.cs @@ -14,7 +14,7 @@ public class CommitSummaryViewModel : ViewModelBase, ICommitSummaryViewModel public CommitSummaryViewModel(CommitModel commit) { AbbreviatedOid = commit.AbbreviatedOid; - Author = new ActorViewModel(commit.Author); + Author = new CommitActorViewModel(commit.Author); Header = commit.MessageHeadline; Oid = commit.Oid; } @@ -23,7 +23,7 @@ public CommitSummaryViewModel(CommitModel commit) public string AbbreviatedOid { get; private set; } /// - public IActorViewModel Author { get; private set; } + public ICommitActorViewModel Author { get; private set; } /// public string Header { get; private set; } diff --git a/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitListViewModel.cs b/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitListViewModel.cs index 83dbdf4def..07aafc0236 100644 --- a/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitListViewModel.cs +++ b/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitListViewModel.cs @@ -11,7 +11,7 @@ public interface ICommitListViewModel : IViewModel /// /// Gets the first author of the commits in the list. /// - IActorViewModel Author { get; } + ICommitActorViewModel Author { get; } /// /// Gets a string to display next to the author in the view. @@ -22,5 +22,7 @@ public interface ICommitListViewModel : IViewModel /// Gets the commits. /// IReadOnlyList Commits { get; } + + string AuthorName { get; } } } \ No newline at end of file diff --git a/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitSummaryViewModel.cs b/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitSummaryViewModel.cs index b6a645e558..49d046b503 100644 --- a/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitSummaryViewModel.cs +++ b/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitSummaryViewModel.cs @@ -13,7 +13,7 @@ public interface ICommitSummaryViewModel : IViewModel /// /// Gets the commit author. /// - IActorViewModel Author { get; } + ICommitActorViewModel Author { get; } /// /// Gets the commit message header. diff --git a/src/GitHub.Exports.Reactive/ViewModels/ICommitActorViewModel.cs b/src/GitHub.Exports.Reactive/ViewModels/ICommitActorViewModel.cs new file mode 100644 index 0000000000..a736aac349 --- /dev/null +++ b/src/GitHub.Exports.Reactive/ViewModels/ICommitActorViewModel.cs @@ -0,0 +1,9 @@ +namespace GitHub.ViewModels +{ + public interface ICommitActorViewModel : IActorViewModel + { + string Email { get; } + string Name { get; } + bool HasLogin { get; } + } +} \ No newline at end of file diff --git a/src/GitHub.Exports/Models/CommitActorModel.cs b/src/GitHub.Exports/Models/CommitActorModel.cs new file mode 100644 index 0000000000..02280bfbd1 --- /dev/null +++ b/src/GitHub.Exports/Models/CommitActorModel.cs @@ -0,0 +1,23 @@ +namespace GitHub.Models +{ + /// + /// Represents a commit actor (which may or may not have an associated User or Bot). + /// + public class CommitActorModel + { + /// + /// Gets or sets the actor user + /// + public ActorModel User { get; set; } + + /// + /// Gets or sets the actor name + /// + public string Name { get; set; } + + /// + /// Gets or sets the actor email + /// + public string Email { get; set; } + } +} \ No newline at end of file diff --git a/src/GitHub.Exports/Models/CommitModel.cs b/src/GitHub.Exports/Models/CommitModel.cs index 370c38cb1f..a0aaad8a83 100644 --- a/src/GitHub.Exports/Models/CommitModel.cs +++ b/src/GitHub.Exports/Models/CommitModel.cs @@ -10,7 +10,7 @@ public class CommitModel /// /// Gets or sets the author of the commit. /// - public ActorModel Author { get; set; } + public CommitActorModel Author { get; set; } /// /// Gets or sets the abbreviated git object ID for the commit. diff --git a/src/GitHub.InlineReviews/Services/PullRequestSessionService.cs b/src/GitHub.InlineReviews/Services/PullRequestSessionService.cs index f0fe79da82..44b0126e36 100644 --- a/src/GitHub.InlineReviews/Services/PullRequestSessionService.cs +++ b/src/GitHub.InlineReviews/Services/PullRequestSessionService.cs @@ -365,11 +365,14 @@ public virtual async Task ReadPullRequestDetail(HostAddr when.Commit(commit => new CommitModel { AbbreviatedOid = commit.AbbreviatedOid, - - Author = new ActorModel - { - Login = commit.Author.User == null ? commit.Committer.Name : commit.Author.User.Login, - AvatarUrl = commit.Author.User == null ? "" : commit.Author.User.AvatarUrl(null), + Author = new CommitActorModel { + Name = commit.Author.Name, + Email = commit.Author.Email, + User = commit.Author.User != null ? new ActorModel + { + Login = commit.Author.User.Login, + AvatarUrl = commit.Author.User.AvatarUrl(null), + } : null }, MessageHeadline = commit.MessageHeadline, Oid = commit.Oid, diff --git a/src/GitHub.VisualStudio.UI/Views/Documents/CommitListView.xaml b/src/GitHub.VisualStudio.UI/Views/Documents/CommitListView.xaml index 3929fd36ef..f3491ca6e4 100644 --- a/src/GitHub.VisualStudio.UI/Views/Documents/CommitListView.xaml +++ b/src/GitHub.VisualStudio.UI/Views/Documents/CommitListView.xaml @@ -49,7 +49,7 @@ ViewModel="{Binding Author}"/> - + From fb09c600a19ef04d6f629b74ba90be7b188dd600 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Fri, 8 Mar 2019 11:51:56 -0500 Subject: [PATCH 3/4] Adding doc comments --- src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs | 1 + .../ViewModels/Documents/ICommitListViewModel.cs | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs b/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs index c9acf0cb3e..6211e09537 100644 --- a/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs +++ b/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs @@ -50,6 +50,7 @@ public CommitListViewModel(IEnumerable commits) /// public ICommitActorViewModel Author { get; } + /// public string AuthorName { get; } /// diff --git a/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitListViewModel.cs b/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitListViewModel.cs index 07aafc0236..46ad9c13c6 100644 --- a/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitListViewModel.cs +++ b/src/GitHub.Exports.Reactive/ViewModels/Documents/ICommitListViewModel.cs @@ -13,6 +13,11 @@ public interface ICommitListViewModel : IViewModel /// ICommitActorViewModel Author { get; } + /// + /// Gets a string to display the author login or the author name. + /// + string AuthorName { get; } + /// /// Gets a string to display next to the author in the view. /// @@ -22,7 +27,5 @@ public interface ICommitListViewModel : IViewModel /// Gets the commits. /// IReadOnlyList Commits { get; } - - string AuthorName { get; } } } \ No newline at end of file From 548757c2af19c2727c9d484e31a7f3ebe169c7ea Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Fri, 8 Mar 2019 12:07:16 -0500 Subject: [PATCH 4/4] Cleanup --- src/GitHub.App/ViewModels/CommitActorViewModel.cs | 2 -- src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/GitHub.App/ViewModels/CommitActorViewModel.cs b/src/GitHub.App/ViewModels/CommitActorViewModel.cs index 46d2944bc0..3f40c05089 100644 --- a/src/GitHub.App/ViewModels/CommitActorViewModel.cs +++ b/src/GitHub.App/ViewModels/CommitActorViewModel.cs @@ -7,8 +7,6 @@ public class CommitActorViewModel: ActorViewModel, ICommitActorViewModel public CommitActorViewModel(CommitActorModel model) :base(model.User) { -// Initialize(model.User); - Name = model.Name; Email = model.Email; HasLogin = model.User != null; diff --git a/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs b/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs index 6211e09537..982661a556 100644 --- a/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs +++ b/src/GitHub.App/ViewModels/Documents/CommitListViewModel.cs @@ -63,7 +63,7 @@ string BuildAuthorCaption() { var result = new StringBuilder(); - if (Commits.Any(x => GetAuthorDisplayName(x.Author) != GetAuthorDisplayName(Author))) + if (Commits.Any(x => GetAuthorDisplayName(x.Author) != AuthorName)) { result.Append(Resources.AndOthers); result.Append(' ');