@teambit/snapping 1.0.980 → 1.0.982
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/reset-component.js +7 -0
- package/dist/reset-component.js.map +1 -1
- package/dist/snapping.main.runtime.d.ts +25 -0
- package/dist/snapping.main.runtime.js +70 -1
- package/dist/snapping.main.runtime.js.map +1 -1
- package/dist/version-maker.js +73 -14
- package/dist/version-maker.js.map +1 -1
- package/package.json +34 -34
- /package/dist/{preview-1778583528331.js → preview-1778613913688.js} +0 -0
package/dist/reset-component.js
CHANGED
|
@@ -49,6 +49,10 @@ async function removeLocalVersion(consumer, id, lane, head, force = false) {
|
|
|
49
49
|
const component = await consumer.scope.getModelComponent(id);
|
|
50
50
|
const idStr = id.toString();
|
|
51
51
|
const fromBitmap = consumer.bitMap.getComponentIdIfExist(id);
|
|
52
|
+
// populate lane-aware heads so `getLocalHashes` diverges against the LANE remote head, not
|
|
53
|
+
// the empty main one — otherwise a hidden cascade entry (no bitmap row, no main-side state)
|
|
54
|
+
// would treat the entire local history as "local" and wipe the seeded base on reset.
|
|
55
|
+
if (lane) await component.populateLocalAndRemoteHeads(consumer.scope.objects, lane);
|
|
52
56
|
const localVersions = await component.getLocalHashes(consumer.scope.objects, fromBitmap);
|
|
53
57
|
if (!localVersions.length) throw new (_bitError().BitError)(`unable to untag ${idStr}, the component is not staged`);
|
|
54
58
|
const headRef = component.getHeadRegardlessOfLane();
|
|
@@ -134,6 +138,9 @@ async function removeLocalVersionsForMultipleComponents(consumer, componentsToUn
|
|
|
134
138
|
async function getComponentsWithOptionToUntag(workspace, remove) {
|
|
135
139
|
const componentList = new (_legacy().ComponentsList)(workspace);
|
|
136
140
|
const laneObj = await workspace.getCurrentLaneObject();
|
|
141
|
+
// The result includes hidden updateDependents — `bit reset` reverts cascade snaps end-to-end.
|
|
142
|
+
// The bitmap-update step in `snapping.reset` skips hidden entries explicitly so we don't try
|
|
143
|
+
// to write workspace state for components that don't live in the workspace.
|
|
137
144
|
const components = await componentList.listExportPendingComponents(laneObj);
|
|
138
145
|
const removedStagedIds = await remove.getRemovedStaged();
|
|
139
146
|
if (!removedStagedIds.length) return components;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","data","require","_bitError","_legacy","_legacy2","_legacy3","removeLocalVersion","consumer","id","lane","head","force","component","scope","getModelComponent","idStr","toString","fromBitmap","bitMap","getComponentIdIfExist","localVersions","getLocalHashes","objects","length","BitError","headRef","getHeadRegardlessOfLane","Error","find","v","isEqual","versionsToRemove","versionsToRemoveStr","switchHashesWithTagsIfExist","dependencyGraph","DependencyGraph","loadAllVersions","forEach","versionToRemove","idWithVersion","toComponentId","changeVersion","dependents","getImmediateDependentsPerId","join","batchIds","versionObjects","Promise","all","map","ver","loadVersion","loadedVersions","compact","Set","batchId","headBefore","getHead","sources","removeComponentVersions","headAfter","versionToSetInBitmap","divergeData","getDivergeData","snapBeforeDetached","commonSnapBeforeDiverge","getTagOfRefIfExists","versions","removeLocalVersionsForAllComponents","workspace","remove","componentsToUntag","getComponentsWithOptionToUntag","removeLocalVersionsForMultipleComponents","candidateComponentsIds","bitId","candidateComponentsIdsStr","dependentsNotCandidates","filter","dependent","includes","version","logger","debug","componentList","ComponentsList","laneObj","getCurrentLaneObject","components","listExportPendingComponents","removedStagedIds","getRemovedStaged","removedStagedBitIds","nonExistsInStaged","c","isEqualWithoutVersion","modelComps","push"],"sources":["reset-component.ts"],"sourcesContent":["import { compact } from 'lodash';\nimport { BitError } from '@teambit/bit-error';\nimport type { ComponentID } from '@teambit/component-id';\nimport type { Consumer } from '@teambit/legacy.consumer';\nimport { ComponentsList } from '@teambit/legacy.component-list';\nimport { logger } from '@teambit/legacy.logger';\nimport type { Lane, ModelComponent } from '@teambit/objects';\nimport type { RemoveMain } from '@teambit/remove';\nimport { DependencyGraph } from '@teambit/legacy.dependency-graph';\nimport type { Workspace } from '@teambit/workspace';\n\nexport type ResetResult = {\n id: ComponentID;\n versions: string[];\n component?: ModelComponent;\n /**\n * relevant when the component was detached head so the head didn't change.\n * we want .bitmap to have the version before the detachment. not as the head.\n */\n versionToSetInBitmap?: string;\n /** batchIds from the version objects being removed, used to clean up lane history entries */\n batchIds?: string[];\n};\n\n/**\n * If head is false, remove all local versions.\n */\nexport async function removeLocalVersion(\n consumer: Consumer,\n id: ComponentID,\n lane?: Lane,\n head?: boolean,\n force = false\n): Promise<ResetResult> {\n const component: ModelComponent = await consumer.scope.getModelComponent(id);\n const idStr = id.toString();\n const fromBitmap = consumer.bitMap.getComponentIdIfExist(id);\n const localVersions = await component.getLocalHashes(consumer.scope.objects, fromBitmap);\n if (!localVersions.length) throw new BitError(`unable to untag ${idStr}, the component is not staged`);\n const headRef = component.getHeadRegardlessOfLane();\n if (!headRef) {\n throw new Error(`unable to reset ${idStr}, it has not head`);\n }\n if (head && !localVersions.find((v) => v.isEqual(headRef))) {\n throw new Error(`unable to reset ${idStr}, the head ${headRef.toString()} is exported`);\n }\n const versionsToRemove = head ? [headRef] : localVersions;\n const versionsToRemoveStr = component.switchHashesWithTagsIfExist(versionsToRemove);\n\n if (!force) {\n const dependencyGraph = await DependencyGraph.loadAllVersions(consumer.scope);\n\n versionsToRemoveStr.forEach((versionToRemove) => {\n const idWithVersion = component.toComponentId().changeVersion(versionToRemove);\n const dependents = dependencyGraph.getImmediateDependentsPerId(idWithVersion);\n if (dependents.length) {\n throw new BitError(\n `unable to reset ${idStr}, the version ${versionToRemove} has the following dependent(s) ${dependents.join(\n ', '\n )}`\n );\n }\n });\n }\n\n // Load version objects to extract batchIds before they are removed.\n // These batchIds are used to clean up the corresponding lane history entries.\n // Only needed on lanes — on main there's no lane history to clean up.\n let batchIds: string[] | undefined;\n if (lane) {\n const versionObjects = await Promise.all(\n versionsToRemoveStr.map((ver) => component.loadVersion(ver, consumer.scope.objects, false))\n );\n const loadedVersions = compact(versionObjects);\n batchIds = [...new Set(compact(loadedVersions.map((v) => v.batchId)))];\n }\n\n const headBefore = component.getHead();\n await consumer.scope.sources.removeComponentVersions(component, versionsToRemove, versionsToRemoveStr, lane, head);\n const headAfter = component.getHead();\n let versionToSetInBitmap;\n if (headBefore && headAfter && headBefore.isEqual(headAfter) && !lane) {\n // if it's on main and the head didn't change, it means that it was in a detached-head state.\n const divergeData = component.getDivergeData();\n const snapBeforeDetached = divergeData.commonSnapBeforeDiverge;\n if (snapBeforeDetached) versionToSetInBitmap = component.getTagOfRefIfExists(snapBeforeDetached);\n }\n\n return { id, versions: versionsToRemoveStr, component, versionToSetInBitmap, batchIds };\n}\n\nexport async function removeLocalVersionsForAllComponents(\n workspace: Workspace,\n remove: RemoveMain,\n lane?: Lane,\n head?: boolean\n): Promise<ResetResult[]> {\n const componentsToUntag = await getComponentsWithOptionToUntag(workspace, remove);\n const force = true; // when removing local versions from all components, no need to check if the component is used as a dependency\n return removeLocalVersionsForMultipleComponents(workspace.consumer, componentsToUntag, lane, head, force);\n}\n\nexport async function removeLocalVersionsForMultipleComponents(\n consumer: Consumer,\n componentsToUntag: ModelComponent[],\n lane?: Lane,\n head?: boolean,\n force?: boolean\n) {\n if (!componentsToUntag.length) {\n throw new BitError(`no components found to reset on your workspace`);\n }\n // if only head is removed, there is risk of deleting dependencies version without their dependents.\n if (!force && head) {\n const dependencyGraph = await DependencyGraph.loadAllVersions(consumer.scope);\n const candidateComponentsIds = componentsToUntag.map((component) => {\n const bitId = component.toComponentId();\n const headRef = component.getHeadRegardlessOfLane();\n if (!headRef)\n throw new Error(`component ${bitId.toString()} does not have head. it should not be a candidate for reset`);\n\n return bitId.changeVersion(component.getTagOfRefIfExists(headRef) || headRef.toString());\n });\n const candidateComponentsIdsStr = candidateComponentsIds.map((id) => id.toString());\n candidateComponentsIds.forEach((bitId: ComponentID) => {\n const dependents = dependencyGraph.getImmediateDependentsPerId(bitId);\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n const dependentsNotCandidates = dependents.filter((dependent) => !candidateComponentsIdsStr.includes(dependent));\n if (dependentsNotCandidates.length) {\n throw new BitError( // $FlowFixMe\n `unable to untag ${bitId}, the version ${bitId.version} has the following dependent(s) ${dependents.join(\n ', '\n )}`\n );\n }\n });\n }\n logger.debug(`found ${componentsToUntag.length} components to untag`);\n return Promise.all(\n componentsToUntag.map((component) => removeLocalVersion(consumer, component.toComponentId(), lane, head, force))\n );\n}\n\nexport async function getComponentsWithOptionToUntag(\n workspace: Workspace,\n remove: RemoveMain\n): Promise<ModelComponent[]> {\n const componentList = new ComponentsList(workspace);\n const laneObj = await workspace.getCurrentLaneObject();\n const components: ModelComponent[] = await componentList.listExportPendingComponents(laneObj);\n const removedStagedIds = await remove.getRemovedStaged();\n if (!removedStagedIds.length) return components;\n const removedStagedBitIds = removedStagedIds.map((id) => id);\n const nonExistsInStaged = removedStagedBitIds.filter(\n (id) => !components.find((c) => c.toComponentId().isEqualWithoutVersion(id))\n );\n if (!nonExistsInStaged.length) return components;\n const modelComps = await Promise.all(nonExistsInStaged.map((id) => workspace.consumer.scope.getModelComponent(id)));\n components.push(...modelComps);\n\n return components;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_lodash","data","require","_bitError","_legacy","_legacy2","_legacy3","removeLocalVersion","consumer","id","lane","head","force","component","scope","getModelComponent","idStr","toString","fromBitmap","bitMap","getComponentIdIfExist","populateLocalAndRemoteHeads","objects","localVersions","getLocalHashes","length","BitError","headRef","getHeadRegardlessOfLane","Error","find","v","isEqual","versionsToRemove","versionsToRemoveStr","switchHashesWithTagsIfExist","dependencyGraph","DependencyGraph","loadAllVersions","forEach","versionToRemove","idWithVersion","toComponentId","changeVersion","dependents","getImmediateDependentsPerId","join","batchIds","versionObjects","Promise","all","map","ver","loadVersion","loadedVersions","compact","Set","batchId","headBefore","getHead","sources","removeComponentVersions","headAfter","versionToSetInBitmap","divergeData","getDivergeData","snapBeforeDetached","commonSnapBeforeDiverge","getTagOfRefIfExists","versions","removeLocalVersionsForAllComponents","workspace","remove","componentsToUntag","getComponentsWithOptionToUntag","removeLocalVersionsForMultipleComponents","candidateComponentsIds","bitId","candidateComponentsIdsStr","dependentsNotCandidates","filter","dependent","includes","version","logger","debug","componentList","ComponentsList","laneObj","getCurrentLaneObject","components","listExportPendingComponents","removedStagedIds","getRemovedStaged","removedStagedBitIds","nonExistsInStaged","c","isEqualWithoutVersion","modelComps","push"],"sources":["reset-component.ts"],"sourcesContent":["import { compact } from 'lodash';\nimport { BitError } from '@teambit/bit-error';\nimport type { ComponentID } from '@teambit/component-id';\nimport type { Consumer } from '@teambit/legacy.consumer';\nimport { ComponentsList } from '@teambit/legacy.component-list';\nimport { logger } from '@teambit/legacy.logger';\nimport type { Lane, ModelComponent } from '@teambit/objects';\nimport type { RemoveMain } from '@teambit/remove';\nimport { DependencyGraph } from '@teambit/legacy.dependency-graph';\nimport type { Workspace } from '@teambit/workspace';\n\nexport type ResetResult = {\n id: ComponentID;\n versions: string[];\n component?: ModelComponent;\n /**\n * relevant when the component was detached head so the head didn't change.\n * we want .bitmap to have the version before the detachment. not as the head.\n */\n versionToSetInBitmap?: string;\n /** batchIds from the version objects being removed, used to clean up lane history entries */\n batchIds?: string[];\n};\n\n/**\n * If head is false, remove all local versions.\n */\nexport async function removeLocalVersion(\n consumer: Consumer,\n id: ComponentID,\n lane?: Lane,\n head?: boolean,\n force = false\n): Promise<ResetResult> {\n const component: ModelComponent = await consumer.scope.getModelComponent(id);\n const idStr = id.toString();\n const fromBitmap = consumer.bitMap.getComponentIdIfExist(id);\n // populate lane-aware heads so `getLocalHashes` diverges against the LANE remote head, not\n // the empty main one — otherwise a hidden cascade entry (no bitmap row, no main-side state)\n // would treat the entire local history as \"local\" and wipe the seeded base on reset.\n if (lane) await component.populateLocalAndRemoteHeads(consumer.scope.objects, lane);\n const localVersions = await component.getLocalHashes(consumer.scope.objects, fromBitmap);\n if (!localVersions.length) throw new BitError(`unable to untag ${idStr}, the component is not staged`);\n const headRef = component.getHeadRegardlessOfLane();\n if (!headRef) {\n throw new Error(`unable to reset ${idStr}, it has not head`);\n }\n if (head && !localVersions.find((v) => v.isEqual(headRef))) {\n throw new Error(`unable to reset ${idStr}, the head ${headRef.toString()} is exported`);\n }\n const versionsToRemove = head ? [headRef] : localVersions;\n const versionsToRemoveStr = component.switchHashesWithTagsIfExist(versionsToRemove);\n\n if (!force) {\n const dependencyGraph = await DependencyGraph.loadAllVersions(consumer.scope);\n\n versionsToRemoveStr.forEach((versionToRemove) => {\n const idWithVersion = component.toComponentId().changeVersion(versionToRemove);\n const dependents = dependencyGraph.getImmediateDependentsPerId(idWithVersion);\n if (dependents.length) {\n throw new BitError(\n `unable to reset ${idStr}, the version ${versionToRemove} has the following dependent(s) ${dependents.join(\n ', '\n )}`\n );\n }\n });\n }\n\n // Load version objects to extract batchIds before they are removed.\n // These batchIds are used to clean up the corresponding lane history entries.\n // Only needed on lanes — on main there's no lane history to clean up.\n let batchIds: string[] | undefined;\n if (lane) {\n const versionObjects = await Promise.all(\n versionsToRemoveStr.map((ver) => component.loadVersion(ver, consumer.scope.objects, false))\n );\n const loadedVersions = compact(versionObjects);\n batchIds = [...new Set(compact(loadedVersions.map((v) => v.batchId)))];\n }\n\n const headBefore = component.getHead();\n await consumer.scope.sources.removeComponentVersions(component, versionsToRemove, versionsToRemoveStr, lane, head);\n const headAfter = component.getHead();\n let versionToSetInBitmap;\n if (headBefore && headAfter && headBefore.isEqual(headAfter) && !lane) {\n // if it's on main and the head didn't change, it means that it was in a detached-head state.\n const divergeData = component.getDivergeData();\n const snapBeforeDetached = divergeData.commonSnapBeforeDiverge;\n if (snapBeforeDetached) versionToSetInBitmap = component.getTagOfRefIfExists(snapBeforeDetached);\n }\n\n return { id, versions: versionsToRemoveStr, component, versionToSetInBitmap, batchIds };\n}\n\nexport async function removeLocalVersionsForAllComponents(\n workspace: Workspace,\n remove: RemoveMain,\n lane?: Lane,\n head?: boolean\n): Promise<ResetResult[]> {\n const componentsToUntag = await getComponentsWithOptionToUntag(workspace, remove);\n const force = true; // when removing local versions from all components, no need to check if the component is used as a dependency\n return removeLocalVersionsForMultipleComponents(workspace.consumer, componentsToUntag, lane, head, force);\n}\n\nexport async function removeLocalVersionsForMultipleComponents(\n consumer: Consumer,\n componentsToUntag: ModelComponent[],\n lane?: Lane,\n head?: boolean,\n force?: boolean\n) {\n if (!componentsToUntag.length) {\n throw new BitError(`no components found to reset on your workspace`);\n }\n // if only head is removed, there is risk of deleting dependencies version without their dependents.\n if (!force && head) {\n const dependencyGraph = await DependencyGraph.loadAllVersions(consumer.scope);\n const candidateComponentsIds = componentsToUntag.map((component) => {\n const bitId = component.toComponentId();\n const headRef = component.getHeadRegardlessOfLane();\n if (!headRef)\n throw new Error(`component ${bitId.toString()} does not have head. it should not be a candidate for reset`);\n\n return bitId.changeVersion(component.getTagOfRefIfExists(headRef) || headRef.toString());\n });\n const candidateComponentsIdsStr = candidateComponentsIds.map((id) => id.toString());\n candidateComponentsIds.forEach((bitId: ComponentID) => {\n const dependents = dependencyGraph.getImmediateDependentsPerId(bitId);\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n const dependentsNotCandidates = dependents.filter((dependent) => !candidateComponentsIdsStr.includes(dependent));\n if (dependentsNotCandidates.length) {\n throw new BitError( // $FlowFixMe\n `unable to untag ${bitId}, the version ${bitId.version} has the following dependent(s) ${dependents.join(\n ', '\n )}`\n );\n }\n });\n }\n logger.debug(`found ${componentsToUntag.length} components to untag`);\n return Promise.all(\n componentsToUntag.map((component) => removeLocalVersion(consumer, component.toComponentId(), lane, head, force))\n );\n}\n\nexport async function getComponentsWithOptionToUntag(\n workspace: Workspace,\n remove: RemoveMain\n): Promise<ModelComponent[]> {\n const componentList = new ComponentsList(workspace);\n const laneObj = await workspace.getCurrentLaneObject();\n // The result includes hidden updateDependents — `bit reset` reverts cascade snaps end-to-end.\n // The bitmap-update step in `snapping.reset` skips hidden entries explicitly so we don't try\n // to write workspace state for components that don't live in the workspace.\n const components: ModelComponent[] = await componentList.listExportPendingComponents(laneObj);\n const removedStagedIds = await remove.getRemovedStaged();\n if (!removedStagedIds.length) return components;\n const removedStagedBitIds = removedStagedIds.map((id) => id);\n const nonExistsInStaged = removedStagedBitIds.filter(\n (id) => !components.find((c) => c.toComponentId().isEqualWithoutVersion(id))\n );\n if (!nonExistsInStaged.length) return components;\n const modelComps = await Promise.all(nonExistsInStaged.map((id) => workspace.consumer.scope.getModelComponent(id)));\n components.push(...modelComps);\n\n return components;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -160,6 +160,31 @@ export declare class SnappingMain {
|
|
|
160
160
|
unmodified?: boolean;
|
|
161
161
|
exitOnFirstFailedTask?: boolean;
|
|
162
162
|
}): Promise<SnapResults | null>;
|
|
163
|
+
/**
|
|
164
|
+
* Workspace-side merge snap. Routes both visible workspace components AND hidden lane
|
|
165
|
+
* lane.updateDependents through the same `makeVersion` pipeline that
|
|
166
|
+
* `snap`/`snapFromScope` use, so cascade snaps get fresh log/buildStatus/flattenedDependencies/
|
|
167
|
+
* lane-history/stagedSnaps just like every other snap.
|
|
168
|
+
*
|
|
169
|
+
* Visible: workspace.getMany picks up files written to disk by `applyVersion`.
|
|
170
|
+
* Hidden: applyVersion's in-memory merged ConsumerComponents are passed in directly — they
|
|
171
|
+
* have no bitmap entry, so they can't go through `loadComponentsForTagOrSnap`.
|
|
172
|
+
*
|
|
173
|
+
* version-maker's `isHiddenLaneEntry` detection (workspace-flow: not-in-bitmap) routes the
|
|
174
|
+
* hidden ones to the right branches (no bitmap update, stagedSnaps tracking,
|
|
175
|
+
* `addToUpdateDependentsInLane`).
|
|
176
|
+
*/
|
|
177
|
+
snapForMerge({ visibleIds, hiddenLegacyComponents, message, build, loose, }: {
|
|
178
|
+
visibleIds: ComponentIdList;
|
|
179
|
+
hiddenLegacyComponents: ConsumerComponent[];
|
|
180
|
+
message?: string;
|
|
181
|
+
build?: boolean;
|
|
182
|
+
loose?: boolean;
|
|
183
|
+
}): Promise<{
|
|
184
|
+
snappedComponents: ConsumerComponent[];
|
|
185
|
+
autoSnappedResults: AutoTagResult[];
|
|
186
|
+
removedComponents?: ComponentIdList;
|
|
187
|
+
} | null>;
|
|
163
188
|
/**
|
|
164
189
|
* remove tags/snaps that exist locally, which were not exported yet.
|
|
165
190
|
* once a tag/snap is exported, it's impossible to delete it as other components may depend on it
|
|
@@ -638,11 +638,17 @@ class SnappingMain {
|
|
|
638
638
|
let exportedIds;
|
|
639
639
|
if (params.push) {
|
|
640
640
|
const updatedLane = lane ? await this.scope.legacyScope.loadLane(lane.toLaneId()) : undefined;
|
|
641
|
+
// include auto-tagged ids in the export set. For the bare-scope reverse cascade
|
|
642
|
+
// (`snapFromScope({ updateDependents: true })`), `getLaneAutoTagIdsFromScope` re-snaps
|
|
643
|
+
// lane.components that depend on the new hidden entry, and those new snaps must be pushed
|
|
644
|
+
// alongside the explicit target.
|
|
645
|
+
const autoTaggedIds = (results.autoTaggedResults || []).map(r => r.component.id);
|
|
646
|
+
const idsToExport = _componentId().ComponentIdList.uniqFromArray([...ids, ...autoTaggedIds]);
|
|
641
647
|
const {
|
|
642
648
|
exported
|
|
643
649
|
} = await this.exporter.pushToScopes({
|
|
644
650
|
scope: this.scope.legacyScope,
|
|
645
|
-
ids,
|
|
651
|
+
ids: idsToExport,
|
|
646
652
|
allVersions: false,
|
|
647
653
|
laneObject: updatedLane,
|
|
648
654
|
// no need other snaps. only the latest one. without this option, when snapping on lane from another-scope, it
|
|
@@ -769,6 +775,64 @@ in case you're unsure about the pattern syntax, use "bit pattern [--help]"`);
|
|
|
769
775
|
}
|
|
770
776
|
}
|
|
771
777
|
|
|
778
|
+
/**
|
|
779
|
+
* Workspace-side merge snap. Routes both visible workspace components AND hidden lane
|
|
780
|
+
* lane.updateDependents through the same `makeVersion` pipeline that
|
|
781
|
+
* `snap`/`snapFromScope` use, so cascade snaps get fresh log/buildStatus/flattenedDependencies/
|
|
782
|
+
* lane-history/stagedSnaps just like every other snap.
|
|
783
|
+
*
|
|
784
|
+
* Visible: workspace.getMany picks up files written to disk by `applyVersion`.
|
|
785
|
+
* Hidden: applyVersion's in-memory merged ConsumerComponents are passed in directly — they
|
|
786
|
+
* have no bitmap entry, so they can't go through `loadComponentsForTagOrSnap`.
|
|
787
|
+
*
|
|
788
|
+
* version-maker's `isHiddenLaneEntry` detection (workspace-flow: not-in-bitmap) routes the
|
|
789
|
+
* hidden ones to the right branches (no bitmap update, stagedSnaps tracking,
|
|
790
|
+
* `addToUpdateDependentsInLane`).
|
|
791
|
+
*/
|
|
792
|
+
async snapForMerge({
|
|
793
|
+
visibleIds,
|
|
794
|
+
hiddenLegacyComponents,
|
|
795
|
+
message,
|
|
796
|
+
build,
|
|
797
|
+
loose
|
|
798
|
+
}) {
|
|
799
|
+
if (!this.workspace) throw new (_workspace().OutsideWorkspaceError)();
|
|
800
|
+
if (!visibleIds.length && !hiddenLegacyComponents.length) return null;
|
|
801
|
+
this.logger.debug(`snapForMerge, visible: ${visibleIds.length}, hidden: ${hiddenLegacyComponents.length}`);
|
|
802
|
+
const visibleHarmony = visibleIds.length ? await this.loadComponentsForTagOrSnap(visibleIds) : [];
|
|
803
|
+
const hiddenHarmony = hiddenLegacyComponents.length ? await this.scope.getManyByLegacy(hiddenLegacyComponents) : [];
|
|
804
|
+
// issue checks are workspace-source-tree concerns — hidden entries are scope-only
|
|
805
|
+
if (visibleHarmony.length) await this.throwForVariousIssues(visibleHarmony);
|
|
806
|
+
const hiddenIds = _componentId().ComponentIdList.fromArray(hiddenLegacyComponents.map(c => c.componentId));
|
|
807
|
+
const allIds = _componentId().ComponentIdList.uniqFromArray([...visibleIds, ...hiddenIds]);
|
|
808
|
+
const allComponents = [...visibleHarmony, ...hiddenHarmony];
|
|
809
|
+
const makeVersionParams = {
|
|
810
|
+
ignoreNewestVersion: false,
|
|
811
|
+
message: message || '',
|
|
812
|
+
skipTests: false,
|
|
813
|
+
skipAutoTag: false,
|
|
814
|
+
persist: true,
|
|
815
|
+
soft: false,
|
|
816
|
+
build,
|
|
817
|
+
isSnap: true,
|
|
818
|
+
packageManagerConfigRootDir: this.workspace.path,
|
|
819
|
+
loose
|
|
820
|
+
};
|
|
821
|
+
const {
|
|
822
|
+
taggedComponents,
|
|
823
|
+
autoTaggedResults,
|
|
824
|
+
stagedConfig,
|
|
825
|
+
removedComponents
|
|
826
|
+
} = await this.makeVersion(allIds, allComponents, makeVersionParams);
|
|
827
|
+
await this.workspace.consumer.onDestroy(`merge-snap (message: ${message || 'N/A'})`);
|
|
828
|
+
await stagedConfig?.write();
|
|
829
|
+
return {
|
|
830
|
+
snappedComponents: taggedComponents,
|
|
831
|
+
autoSnappedResults: autoTaggedResults,
|
|
832
|
+
removedComponents
|
|
833
|
+
};
|
|
834
|
+
}
|
|
835
|
+
|
|
772
836
|
/**
|
|
773
837
|
* remove tags/snaps that exist locally, which were not exported yet.
|
|
774
838
|
* once a tag/snap is exported, it's impossible to delete it as other components may depend on it
|
|
@@ -828,6 +892,11 @@ in case you're unsure about the pattern syntax, use "bit pattern [--help]"`);
|
|
|
828
892
|
versionToSetInBitmap
|
|
829
893
|
}) => {
|
|
830
894
|
if (!component) return;
|
|
895
|
+
// hidden lane entries (lane.updateDependents) are not in the workspace bitmap, so skip
|
|
896
|
+
// bitmap updates for them. A soft-deleted (visible) entry is also absent from bitmap but
|
|
897
|
+
// `updateVersions` knows how to restore it from stagedConfig.
|
|
898
|
+
const compId = component.toComponentId();
|
|
899
|
+
if (currentLane?.findUpdateDependent(compId)) return;
|
|
831
900
|
await (0, _versionMaker().updateVersions)(this.workspace, stagedConfig, currentLaneId, component, versionToSetInBitmap, false);
|
|
832
901
|
});
|
|
833
902
|
await this.workspace.scope.legacyScope.stagedSnaps.write();
|