Skip to content

Commit 96d2ae2

Browse files
committed
[dashboard] show user that claimed a repo
1 parent c32f6e9 commit 96d2ae2

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

components/dashboard/src/projects/NewProject.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ export default function NewProject() {
226226
<button className="primary" onClick={() => setSelectedRepo(r.name)}>Select</button>
227227
) : (
228228
<p className="text-gray-500 font-medium">
229-
@username added<br/ >this in a team
229+
@{r.inUse.userName} already<br/ >added this repo
230230
</p>
231231
)}
232232
</div>

components/gitpod-protocol/src/gitpod-service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ export interface ProviderRepository {
253253
installationId?: number;
254254
installationUpdatedAt?: string;
255255

256-
inUse?: boolean;
256+
inUse?: { userId: string, userName: string };
257257
}
258258

259259
export const WorkspaceTimeoutValues = ["30m", "60m", "180m"] as const;

components/server/ee/src/workspace/gitpod-server-impl.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,8 +1453,34 @@ export class GitpodServerEEImpl extends GitpodServerImpl<GitpodClient, GitpodSer
14531453
const repositories = await this.githubAppSupport.getProviderRepositoriesForUser({ user, ...params });
14541454
const projects = await this.projectsService.getProjectsByCloneUrls(repositories.map(r => r.cloneUrl));
14551455

1456-
const cloneUrlsInUse = new Set(projects.map(p => p.cloneUrl));
1457-
repositories.forEach(r => { r.inUse = cloneUrlsInUse.has(r.cloneUrl) });
1456+
const cloneUrlToProject = new Map(projects.map(p => [p.cloneUrl, p]));
1457+
1458+
for (const repo of repositories) {
1459+
const p = cloneUrlToProject.get(repo.cloneUrl);
1460+
if (p) {
1461+
let ownerId = p.userId;
1462+
if (ownerId === user.id) {
1463+
break;
1464+
}
1465+
if (!ownerId && p.teamId) {
1466+
const members = await this.teamDB.findMembersByTeam(p.teamId);
1467+
if (members.find(m => m.userId === user.id)) {
1468+
break;
1469+
}
1470+
members.sort((a, b) => a.memberSince.localeCompare(b.memberSince));
1471+
ownerId = members[0]?.userId;
1472+
}
1473+
if (ownerId) {
1474+
const owner = await this.userDB.findUserById(ownerId);
1475+
if (owner) {
1476+
repo.inUse = {
1477+
userId : owner.id,
1478+
userName: owner?.name || owner?.fullName || 'somebody'
1479+
}
1480+
}
1481+
}
1482+
}
1483+
}
14581484

14591485
return repositories;
14601486
}

0 commit comments

Comments
 (0)