mirror of
https://github.com/hcengineering/platform.git
synced 2025-05-09 17:05:01 +00:00
UBERF-10494: Allow to reintegrate same project again
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
8c87420495
commit
ceb0d57fdf
@ -13,12 +13,18 @@
|
||||
showPopup
|
||||
} from '@hcengineering/ui'
|
||||
import DropdownLabelsPopup from '@hcengineering/ui/src/components/DropdownLabelsPopup.svelte'
|
||||
import { GithubIntegration, GithubIntegrationRepository, githubPullRequestStates } from '@hcengineering/github'
|
||||
import {
|
||||
GithubIntegration,
|
||||
GithubIntegrationRepository,
|
||||
githubPullRequestStates,
|
||||
type GithubProject
|
||||
} from '@hcengineering/github'
|
||||
import github from '../plugin'
|
||||
|
||||
export let integration: WithLookup<GithubIntegration>
|
||||
export let repository: GithubIntegrationRepository
|
||||
export let projects: Project[] = []
|
||||
export let orphanProjects: GithubProject[] = []
|
||||
|
||||
/**
|
||||
* @public
|
||||
@ -112,16 +118,23 @@
|
||||
|
||||
const githubProject = client.getHierarchy().as(projectInst, github.mixin.GithubProject)
|
||||
|
||||
void getClient().update(githubProject, {
|
||||
if (githubProject.integration !== integration._id) {
|
||||
await getClient().update(githubProject, {
|
||||
integration: integration._id
|
||||
})
|
||||
}
|
||||
await getClient().update(githubProject, {
|
||||
$push: { repositories: repository._id }
|
||||
})
|
||||
void getClient().update(repository, { githubProject: githubProject._id, enabled: true })
|
||||
await getClient().update(repository, { githubProject: githubProject._id, enabled: true })
|
||||
}
|
||||
|
||||
$: allowedProjects = projects.filter(
|
||||
(it) =>
|
||||
(client.getHierarchy().asIf(it, github.mixin.GithubProject)?.integration ?? integration._id) === integration._id
|
||||
)
|
||||
$: allowedProjects = projects
|
||||
.filter(
|
||||
(it) =>
|
||||
(client.getHierarchy().asIf(it, github.mixin.GithubProject)?.integration ?? integration._id) === integration._id
|
||||
)
|
||||
.concat(orphanProjects)
|
||||
async function selectProject (event: MouseEvent): Promise<void> {
|
||||
showPopup(
|
||||
DropdownLabelsPopup,
|
||||
|
@ -1,11 +1,11 @@
|
||||
<script lang="ts">
|
||||
import GithubRepositories from './GithubRepositories.svelte'
|
||||
|
||||
import { WithLookup } from '@hcengineering/core'
|
||||
import { toIdMap, WithLookup } from '@hcengineering/core'
|
||||
import { GithubIntegration } from '@hcengineering/github'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import { Project } from '@hcengineering/tracker'
|
||||
import { Scroller } from '@hcengineering/ui'
|
||||
import { GithubIntegration } from '@hcengineering/github'
|
||||
import github from '../plugin'
|
||||
|
||||
export let integrations: WithLookup<GithubIntegration>[] = []
|
||||
@ -14,6 +14,10 @@
|
||||
const client = getClient()
|
||||
|
||||
$: githubProjects = client.getHierarchy().asIfArray(projects, github.mixin.GithubProject)
|
||||
|
||||
$: integerationsMap = toIdMap(integrations)
|
||||
|
||||
$: orphanProjects = githubProjects.filter((it) => !integerationsMap.has(it.integration))
|
||||
</script>
|
||||
|
||||
{#if integrations.length > 0}
|
||||
@ -23,7 +27,7 @@
|
||||
{@const giprj = githubProjects.filter((it) => it.integration === gi._id)}
|
||||
<div class="flex flex-col mb-4">
|
||||
<!-- svelte-ignore a11y-missing-attribute -->
|
||||
<GithubRepositories integration={gi} giProjects={giprj} {projects} />
|
||||
<GithubRepositories integration={gi} giProjects={giprj} {projects} {orphanProjects} />
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
|
@ -26,11 +26,11 @@
|
||||
import ConnectProject from './ConnectProject.svelte'
|
||||
import { githubLanguageColors } from './languageColors'
|
||||
import { sendGHServiceRequest } from './utils'
|
||||
import { BackgroundColor } from '@hcengineering/text'
|
||||
|
||||
export let integration: WithLookup<GithubIntegration>
|
||||
export let projects: Project[] = []
|
||||
export let giProjects: GithubProject[] = []
|
||||
export let orphanProjects: GithubProject[] = []
|
||||
|
||||
const client = getClient()
|
||||
|
||||
@ -235,7 +235,7 @@
|
||||
/>
|
||||
</div>
|
||||
{:else}
|
||||
<ConnectProject {integration} {repository} {projects} />
|
||||
<ConnectProject {integration} {repository} {projects} {orphanProjects} />
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -531,7 +531,7 @@ export class CommentSyncManager implements DocSyncManager {
|
||||
}
|
||||
const syncInfo = await this.client.findAll<DocSyncInfo>(github.class.DocSyncInfo, {
|
||||
space: repo.githubProject,
|
||||
repository: repo._id,
|
||||
// repository: repo._id, // If we skip repository, we will find orphaned comments, so we could connect them on.
|
||||
objectClass: chunter.class.ChatMessage,
|
||||
url: { $in: comments.map((it) => (it.url ?? '').toLowerCase()) }
|
||||
})
|
||||
@ -553,14 +553,19 @@ export class CommentSyncManager implements DocSyncManager {
|
||||
lastModified
|
||||
})
|
||||
} else {
|
||||
if (!deepEqual(existing.external, comment) || existing.externalVersion !== githubExternalSyncVersion) {
|
||||
if (
|
||||
!deepEqual(existing.external, comment) ||
|
||||
existing.externalVersion !== githubExternalSyncVersion ||
|
||||
existing.repository !== repo._id
|
||||
) {
|
||||
await derivedClient.diffUpdate(
|
||||
existing,
|
||||
{
|
||||
needSync: '',
|
||||
external: comment,
|
||||
externalVersion: githubExternalSyncVersion,
|
||||
lastModified
|
||||
lastModified,
|
||||
repository: repo._id
|
||||
},
|
||||
lastModified
|
||||
)
|
||||
|
@ -1112,14 +1112,7 @@ export abstract class IssueSyncManagerBase {
|
||||
update.assignee = assignees?.[0]?.person ?? null
|
||||
}
|
||||
if (Object.keys(update).length > 0) {
|
||||
await this.handleUpdate(
|
||||
issueExternal,
|
||||
derivedClient,
|
||||
update,
|
||||
account,
|
||||
container.project,
|
||||
false
|
||||
)
|
||||
await this.handleUpdate(issueExternal, derivedClient, update, account, container.project, false)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1137,7 +1130,7 @@ export abstract class IssueSyncManagerBase {
|
||||
syncDocs ??
|
||||
(await this.client.findAll<DocSyncInfo>(github.class.DocSyncInfo, {
|
||||
space: repo.githubProject,
|
||||
repository: repo._id,
|
||||
// repository: repo._id, // If we skip repository, we will find orphaned issues, so we could connect them on.
|
||||
objectClass: _class,
|
||||
url: { $in: issues.map((it) => (it.url ?? '').toLowerCase()) }
|
||||
}))
|
||||
@ -1171,15 +1164,15 @@ export abstract class IssueSyncManagerBase {
|
||||
if (syncDocs !== undefined) {
|
||||
syncDocs = syncDocs.filter((it) => it._id !== existing._id)
|
||||
}
|
||||
const externalEqual = deepEqual(existing.external, issue)
|
||||
const externalEqual = deepEqual(existing.external, issue) && existing.repository === repo._id
|
||||
if (!externalEqual || existing.externalVersion !== githubExternalSyncVersion) {
|
||||
this.ctx.info('Update sync doc(extarnal changes)', {
|
||||
url: issue.url,
|
||||
workspace: this.provider.getWorkspaceId().name
|
||||
})
|
||||
|
||||
if (existing.needSync === githubSyncVersion) {
|
||||
// Sync external if and only if no changes from platform.
|
||||
if (existing.needSync === githubSyncVersion || existing.repository !== repo._id) {
|
||||
// Sync external if and only if no changes from platform or we do resync from github.
|
||||
// We need to apply changes from Github, while service was offline.
|
||||
await this.performDocumentExternalSync(this.ctx, existing, existing.external, issue, derivedClient)
|
||||
}
|
||||
@ -1192,6 +1185,7 @@ export abstract class IssueSyncManagerBase {
|
||||
externalVersion: githubExternalSyncVersion,
|
||||
derivedVersion: '', // Clear derived state to recalculate it.
|
||||
externalVersionSince: '',
|
||||
repository: repo._id,
|
||||
lastModified: new Date(issue.updatedAt).getTime()
|
||||
},
|
||||
Date.now()
|
||||
|
@ -370,12 +370,13 @@ export async function syncDerivedDocuments<T extends { url: string }> (
|
||||
})
|
||||
} else {
|
||||
processed.add(existing._id)
|
||||
if (!deepEqual(existing.external, r)) {
|
||||
if (!deepEqual(existing.external, r) || existing.repository !== repo._id) {
|
||||
// Only update if had changes.
|
||||
await derivedClient.update(existing, {
|
||||
external: r,
|
||||
needSync: '', // We need to check if we had any changes.
|
||||
derivedVersion: '',
|
||||
repository: repo._id,
|
||||
externalVersion: githubExternalSyncVersion,
|
||||
lastModified: new Date(r.updatedAt ?? r.createdAt).getTime(),
|
||||
...extra
|
||||
|
Loading…
Reference in New Issue
Block a user