@abapify/adt-flow
v0.4.10
Published
Incremental transport source-tree materialization for ADT
Readme
@abapify/adt-flow
Incremental transport source-tree materialization for ADT. The service checks out either the exact source boundary immediately before a transport scope or the newest exact source in that scope.
Register the command and configure the active format in adt.config.ts:
import { defineConfig } from '@abapify/adt-config';
export default defineConfig({
commands: ['@abapify/adt-flow/commands/flow'],
flow: {
format: { id: 'abapgit', options: { folderLogic: 'prefix' } },
include: { objectTypes: ['CLAS', 'INTF'] },
concurrency: { metadata: 4, sources: 4 },
},
});Then reconcile the current directory to either side of the transport boundary:
adt flow checkout tr DEVK900001 --base
adt flow checkout tr DEVK900001
adt flow checkout tr DEVK900001,DEVK900002 --baseimport {
createAdtFlowService,
createAdtFlowDependencies,
} from '@abapify/adt-flow';
import { getFormatPlugin } from '@abapify/adt-plugin';
// Use the format plugin already registered by @abapify/adt-plugin-abapgit
const registeredFormatPlugin = getFormatPlugin('abapgit');
if (!registeredFormatPlugin) {
throw new Error('abapGit format plugin is not registered.');
}
const flow = createAdtFlowService(
createAdtFlowDependencies(client, registeredFormatPlugin),
);
await flow.checkout({
root: process.cwd(),
transports: ['DEVK900001'],
mode: 'base',
config: {
format: { id: 'abapgit', options: { folderLogic: 'prefix' } },
include: { objectTypes: ['CLAS', 'INTF'] },
},
});The service invokes no Git command. It reconciles format-owned files and
deterministic descriptors under .adt, rejects unowned collisions or modified
indexed files before mutation, and rolls back a failed multi-file apply.
Branches, commits, routing, and merge requests remain the caller's concern.
.adt/tr/<transport>.json is emitted for every request/task discovered during
head checkout. Each transport descriptor retains the complete CTS object
inventory, including unsupported or currently filtered types. Object descriptors
under .adt/objects/ are written for both base and head. Object
descriptors use .adt/objects/<TYPE>/<unique-name>.<type>.adt.json. The index
stores hashes and immutable version identities, never source bodies or
credentials. In an explicit partial checkout, an object that cannot be
materialized still receives an omitted descriptor with its identity and
component diagnostic, but no owned files or source selection. Removing .adt
only removes the optimization; source selection continues to come from the
supplied SAP manifest operation.
Exactness applies to versioned source components. Metadata files describe the object metadata available at checkout time; flow does not reconstruct historical metadata or replicate repository history.
