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

Commit 645db55

Browse files
authored
Merge pull request #2148 from github/fixes/2143-show-100-recently-pushed
Be smarter about the repository list we download
2 parents aeb025e + 2ba32b8 commit 645db55

File tree

5 files changed

+42
-7
lines changed

5 files changed

+42
-7
lines changed

src/GitHub.App/Services/RepositoryCloneService.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.IO;
55
using System.Linq;
66
using System.Reactive.Linq;
7+
using System.Threading;
78
using System.Threading.Tasks;
89
using GitHub.Api;
910
using GitHub.Extensions;
@@ -69,8 +70,8 @@ public async Task<ViewerRepositoriesModel> ReadViewerRepositories(HostAddress ad
6970
{
7071
var order = new RepositoryOrder
7172
{
72-
Field = RepositoryOrderField.Name,
73-
Direction = OrderDirection.Asc
73+
Field = RepositoryOrderField.PushedAt,
74+
Direction = OrderDirection.Desc
7475
};
7576

7677
var affiliation = new RepositoryAffiliation?[]
@@ -94,14 +95,17 @@ public async Task<ViewerRepositoriesModel> ReadViewerRepositories(HostAddress ad
9495
.Select(viewer => new ViewerRepositoriesModel
9596
{
9697
Owner = viewer.Login,
97-
Repositories = viewer.Repositories(null, null, null, null, null, null, null, order, affiliation, null)
98+
Repositories = viewer.Repositories(null, null, null, null, affiliation, null, null, order, affiliation, null)
9899
.AllPages()
99100
.Select(repositorySelection).ToList(),
101+
ContributedToRepositories = viewer.RepositoriesContributedTo(100, null, null, null, null, null, null, order, null)
102+
.Nodes
103+
.Select(repositorySelection).ToList(),
100104
Organizations = viewer.Organizations(null, null, null, null).AllPages().Select(org => new
101105
{
102106
org.Login,
103-
Repositories = org.Repositories(null, null, null, null, null, null, null, order, null, null)
104-
.AllPages()
107+
Repositories = org.Repositories(100, null, null, null, null, null, null, order, null, null)
108+
.Nodes
105109
.Select(repositorySelection).ToList()
106110
}).ToDictionary(x => x.Login, x => (IReadOnlyList<RepositoryListItemModel>)x.Repositories),
107111
}).Compile();

src/GitHub.App/ViewModels/Dialog/Clone/RepositorySelectViewModel.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.ComponentModel;
44
using System.ComponentModel.Composition;
5+
using System.Globalization;
56
using System.Linq;
67
using System.Reactive.Linq;
78
using System.Threading.Tasks;
@@ -118,10 +119,16 @@ public async Task Activate()
118119
.Where(r => r.Owner != results.Owner)
119120
.OrderBy(r => r.Owner)
120121
.Select(x => new RepositoryItemViewModel(x, "Collaborator repositories"));
122+
var repositoriesContributedTo = results.ContributedToRepositories
123+
.Select(x => new RepositoryItemViewModel(x, "Contributed to repositories"));
121124
var orgRepositories = results.Organizations
122125
.OrderBy(x => x.Key)
123-
.SelectMany(x => x.Value.Select(y => new RepositoryItemViewModel(y, x.Key)));
124-
Items = yourRepositories.Concat(collaboratorRepositories).Concat(orgRepositories).ToList();
126+
.SelectMany(x => x.Value.Select(y => new RepositoryItemViewModel(y, GroupName(x, 100))));
127+
Items = yourRepositories
128+
.Concat(collaboratorRepositories)
129+
.Concat(repositoriesContributedTo)
130+
.Concat(orgRepositories)
131+
.ToList();
125132
log.Information("Read {Total} viewer repositories", Items.Count);
126133
ItemsView = CollectionViewSource.GetDefaultView(Items);
127134
ItemsView.GroupDescriptions.Add(new PropertyGroupDescription(nameof(RepositoryItemViewModel.Group)));
@@ -144,6 +151,17 @@ public async Task Activate()
144151
}
145152
}
146153

154+
static string GroupName(KeyValuePair<string, IReadOnlyList<RepositoryListItemModel>> group, int max)
155+
{
156+
var name = group.Key;
157+
if (group.Value.Count == max)
158+
{
159+
name += $" ({string.Format(CultureInfo.InvariantCulture, Resources.MostRecentlyPushed, max)})";
160+
}
161+
162+
return name;
163+
}
164+
147165
bool FilterItem(object obj)
148166
{
149167
if (obj is IRepositoryItemViewModel item && !string.IsNullOrWhiteSpace(Filter))

src/GitHub.Exports/Models/ViewerRepositoriesModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public class ViewerRepositoriesModel
77
{
88
public string Owner { get; set; }
99
public IReadOnlyList<RepositoryListItemModel> Repositories { get; set; }
10+
public IReadOnlyList<RepositoryListItemModel> ContributedToRepositories { get; set; }
1011
public IDictionary<string, IReadOnlyList<RepositoryListItemModel>> Organizations { get; set; }
1112
}
1213
}

src/GitHub.Resources/Resources.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/GitHub.Resources/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -845,4 +845,7 @@ https://git-scm.com/download/win</value>
845845
<data name="CouldntFindCorrespondingFile" xml:space="preserve">
846846
<value>Couldn't find file corresponding to '{0}' in the repository. Please do a 'git fetch' or checkout the target pull request.</value>
847847
</data>
848+
<data name="MostRecentlyPushed" xml:space="preserve">
849+
<value>{0} most recently pushed</value>
850+
</data>
848851
</root>

0 commit comments

Comments
 (0)