Skip to content

Commit

Permalink
diffStatus - compare with last common snap, identify unrelated
Browse files Browse the repository at this point in the history
  • Loading branch information
luvkapur committed Feb 7, 2023
1 parent 07658b9 commit 7e61f27
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 9 deletions.
1 change: 1 addition & 0 deletions scopes/lanes/lanes/lanes.graphql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ export function lanesSchema(lanesMainRuntime: LanesMain): Schema {
changes: [String!]
upToDate: Boolean
snapsDistance: SnapDistance
unrelated: Boolean
}
type LaneDiffStatus {
Expand Down
38 changes: 29 additions & 9 deletions scopes/lanes/lanes/lanes.main.runtime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import ComponentWriterAspect, { ComponentWriterMain } from '@teambit/component-w
import { SnapsDistance } from '@teambit/legacy/dist/scope/component-ops/snaps-distance';
import { MergingMain, MergingAspect } from '@teambit/merging';
import { ChangeType } from '@teambit/lanes.entities.lane-diff';
import { NoCommonSnap } from '@teambit/legacy/dist/scope/exceptions/no-common-snap';
import { LanesAspect } from './lanes.aspect';
import {
LaneCmd,
Expand Down Expand Up @@ -89,11 +90,11 @@ export type LaneComponentDiffStatus = {
changes?: ChangeType[];
upToDate?: boolean;
snapsDistance?: SnapsDistanceObj;
unrelated?: boolean;
};

export type LaneDiffStatusOptions = {
skipChanges?: boolean;
skipUpToDate?: boolean;
};

export type LaneDiffStatus = {
Expand Down Expand Up @@ -423,7 +424,12 @@ export class LanesMain {
* @param targetHead head on the target lane. leave empty if the target is main
* @returns
*/
async getSnapsDistance(componentId: ComponentID, sourceHead?: string, targetHead?: string): Promise<SnapsDistance> {
async getSnapsDistance(
componentId: ComponentID,
sourceHead?: string,
targetHead?: string,
throws?: boolean
): Promise<SnapsDistance> {
if (!sourceHead && !targetHead)
throw new Error(`getDivergeData got sourceHead and targetHead empty. at least one of them should be populated`);
const modelComponent = await this.scope.legacyScope.getModelComponent(componentId._legacy);
Expand All @@ -432,6 +438,7 @@ export class LanesMain {
repo: this.scope.legacyScope.objects,
sourceHead: sourceHead ? Ref.from(sourceHead) : modelComponent.head || null,
targetHead: targetHead ? Ref.from(targetHead) : modelComponent.head || null,
throws,
});
}

Expand Down Expand Up @@ -666,16 +673,29 @@ export class LanesMain {
sourceHead: string,
targetHead?: string,
options?: LaneDiffStatusOptions
) {
const snapsDistance = !options?.skipUpToDate
? await this.getSnapsDistance(componentId, sourceHead, targetHead)
: undefined;
): Promise<LaneComponentDiffStatus> {
const snapsDistance = await this.getSnapsDistance(componentId, sourceHead, targetHead, false);

if (snapsDistance?.err) {
const noCommonSnap = snapsDistance.err instanceof NoCommonSnap;

return {
componentId,
sourceHead,
targetHead,
upToDate: snapsDistance?.isUpToDate(),
unrelated: noCommonSnap || undefined,
changes: [],
};
}

const commonSnap = snapsDistance?.commonSnapBeforeDiverge;

const getChanges = async (): Promise<ChangeType[]> => {
if (!targetHead) return [ChangeType.NEW];
if (!commonSnap) return [ChangeType.NEW];

const compare = await this.componentCompare.compare(
componentId.changeVersion(targetHead).toString(),
componentId.changeVersion(commonSnap.hash).toString(),
componentId.changeVersion(sourceHead).toString()
);

Expand Down Expand Up @@ -709,7 +729,7 @@ export class LanesMain {
changeType,
changes,
sourceHead,
targetHead,
targetHead: commonSnap?.hash,
upToDate: snapsDistance?.isUpToDate(),
snapsDistance: {
onSource: snapsDistance?.snapsOnSourceOnly.map((s) => s.hash) ?? [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export const QUERY_LANE_DIFF_STATUS = gql`
targetHead
changes
upToDate
unrelated
}
}
}
Expand Down Expand Up @@ -80,6 +81,7 @@ export const useLaneDiffStatus: UseLaneDiffStatus = ({ baseId, compareId, option
targetLane: LaneId.from(data.lanes.diffStatus.target.name, data.lanes.diffStatus.target.scope).toString(),
diff: data.lanes.diffStatus.componentsStatus.map((c) => ({
...c,
changes: c.changes || [],
componentId: ComponentID.fromObject(c.componentId).toString(),
})),
};
Expand Down

0 comments on commit 7e61f27

Please sign in to comment.