@ibgib/vcs-gib 0.0.33 → 0.0.36
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/README.md +14 -7
- package/dist/AUTO-GENERATED-version.d.mts +1 -1
- package/dist/AUTO-GENERATED-version.mjs +1 -1
- package/dist/bootstrap/node-bootstrap.d.mts +5 -0
- package/dist/bootstrap/node-bootstrap.d.mts.map +1 -1
- package/dist/bootstrap/node-bootstrap.mjs +4 -0
- package/dist/bootstrap/node-bootstrap.mjs.map +1 -1
- package/dist/cli/commands/cli-init-cmd.d.mts.map +1 -1
- package/dist/cli/commands/cli-init-cmd.mjs +16 -1
- package/dist/cli/commands/cli-init-cmd.mjs.map +1 -1
- package/dist/cli/vcs-cli-main.d.mts.map +1 -1
- package/dist/cli/vcs-cli-main.mjs +22 -1
- package/dist/cli/vcs-cli-main.mjs.map +1 -1
- package/dist/cli/vcs-repo-helper.d.mts.map +1 -1
- package/dist/cli/vcs-repo-helper.mjs +16 -2
- package/dist/cli/vcs-repo-helper.mjs.map +1 -1
- package/package.json +6 -6
- package/src/AUTO-GENERATED-version.mts +1 -1
- package/src/bootstrap/node-bootstrap.mts +10 -0
- package/src/cli/cli-e2e.respec.mts +127 -6
- package/src/cli/commands/branch-checkout-cmd.respec.mts +403 -403
- package/src/cli/commands/cli-init-cmd.mts +17 -1
- package/src/cli/commands/commit-log-cmd.respec.mts +5 -8
- package/src/cli/commands/status-add-cmd.respec.mts +7 -7
- package/src/cli/vcs-cli-main.mts +19 -1
- package/src/cli/vcs-repo-helper.mts +22 -3
- package/tsconfig.test.tsbuildinfo +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/vcs-gib_test_output.md +43 -24
package/README.md
CHANGED
|
@@ -3,17 +3,24 @@
|
|
|
3
3
|
> **Decentralized Version Control System (`ibgib` VCS)**
|
|
4
4
|
> Built on content-addressed, cryptographic Merkle DAG hypergraphs (`ib^gib`).
|
|
5
5
|
|
|
6
|
-
`vcs-gib` provides
|
|
6
|
+
`vcs-gib` provides the concrete Node.js command-line interface (CLI) and runtime host for the isomorphic `@ibgib/core-gib` VCS engine. It bridges the pure Merkle hypergraph version control system with physical operating system filesystems, POSIX shells, and autonomous agent toolchains.
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
## 🏛️ Architecture
|
|
10
|
+
## 🏛️ Node.js Concretization & CLI Architecture
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
12
|
+
`@ibgib/vcs-gib` concretizes the abstract `@ibgib/core-gib` VCS engine by supplying:
|
|
13
|
+
|
|
14
|
+
1. **Concrete Node Filesystem Spaces**:
|
|
15
|
+
- `NodeFilesystemSpace_V1`: Houses `.vcsgib/ibgib/` storage (`localSpace` and branch spaces `b2s_<branchName>`).
|
|
16
|
+
- `NodeWorkspaceProjectionSpace_V1`: Manages physical working tree directories, scanning files on disk, and projecting Merkle item snapshots to the physical filesystem.
|
|
17
|
+
2. **Upward `.vcsgib` Discovery (`openVcsRepository`)**:
|
|
18
|
+
- Walks upward from `process.cwd()` to discover `.vcsgib`, dynamically resolving `repoRoot`, contextual branches, and worktree projections (`b/<branchName>/`).
|
|
19
|
+
3. **Command Dispatch & Terminal Reporting**:
|
|
20
|
+
- CLI command handlers (`cli-status-cmd`, `cli-commit-cmd`, `cli-log-cmd`, etc.) map terminal arguments to `repo.<cmd>()` calls and render human- and agent-friendly colored console outputs.
|
|
21
|
+
|
|
22
|
+
For the core isomorphic Merkle graph specifications, in-band index structure, multi-space branching model, and comment system mechanics, see:
|
|
23
|
+
👉 **[`@ibgib/core-gib` VCS Core Engine README](../../libs/core-gib/src/vcs/README.md)**
|
|
17
24
|
|
|
18
25
|
---
|
|
19
26
|
|
|
@@ -19,12 +19,17 @@ export interface BootstrapVcsMetaspaceOpts {
|
|
|
19
19
|
* Default space name for non-interactive headless testing. Defaults to 'vcs_space'
|
|
20
20
|
*/
|
|
21
21
|
defaultSpaceName?: string;
|
|
22
|
+
/**
|
|
23
|
+
* If true, throws if .vcsgib is not found during upward discovery without initializing spaces.
|
|
24
|
+
*/
|
|
25
|
+
mustExist?: boolean;
|
|
22
26
|
}
|
|
23
27
|
export interface BootstrapVcsMetaspaceResult {
|
|
24
28
|
metaspace: Metaspace_Nodespace;
|
|
25
29
|
localSpace: IbGibSpaceAny;
|
|
26
30
|
vcsPath: string;
|
|
27
31
|
repoRoot: string;
|
|
32
|
+
foundVcsPath?: string;
|
|
28
33
|
}
|
|
29
34
|
/**
|
|
30
35
|
* Bootstraps Metaspace_Nodespace and initializes the local repository space.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-bootstrap.d.mts","sourceRoot":"","sources":["../../src/bootstrap/node-bootstrap.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,sDAAsD,CAAC;AAGrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0FAA0F,CAAC;AAW/H,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"node-bootstrap.d.mts","sourceRoot":"","sources":["../../src/bootstrap/node-bootstrap.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,sDAAsD,CAAC;AAGrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0FAA0F,CAAC;AAW/H,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IACxC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACvC,IAAI,GAAE,yBAA8B,GACrC,OAAO,CAAC,2BAA2B,CAAC,CA4ItC"}
|
|
@@ -57,6 +57,9 @@ export async function bootstrapVcsMetaspace(opts = {}) {
|
|
|
57
57
|
}
|
|
58
58
|
currentDir = parentDir;
|
|
59
59
|
}
|
|
60
|
+
if (opts.mustExist && !foundVcsPath) {
|
|
61
|
+
throw new Error(`fatal: not an ibgib repository (or any of the parent directories): ${vcsFolderName}`);
|
|
62
|
+
}
|
|
60
63
|
const vcsPath = foundVcsPath || path.resolve(repoPath, vcsFolderName);
|
|
61
64
|
if (!foundVcsPath) {
|
|
62
65
|
repoRoot = path.resolve(repoPath);
|
|
@@ -145,6 +148,7 @@ export async function bootstrapVcsMetaspace(opts = {}) {
|
|
|
145
148
|
localSpace,
|
|
146
149
|
vcsPath,
|
|
147
150
|
repoRoot,
|
|
151
|
+
foundVcsPath,
|
|
148
152
|
};
|
|
149
153
|
}
|
|
150
154
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-bootstrap.mjs","sourceRoot":"","sources":["../../src/bootstrap/node-bootstrap.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,iDAAiD,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,uDAAuD,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,iEAAiE,CAAC;AACvG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0FAA0F,CAAC;AAC/H,OAAO,EAAE,sBAAsB,EAAE,MAAM,uFAAuF,CAAC;AAC/H,OAAO,EAAE,qCAAqC,EAAE,MAAM,0FAA0F,CAAC;AACjJ,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,iGAAiG,CAAC;AAErK,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AAEtG,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"node-bootstrap.mjs","sourceRoot":"","sources":["../../src/bootstrap/node-bootstrap.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-init-cmd.d.mts","sourceRoot":"","sources":["../../../src/cli/commands/cli-init-cmd.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"cli-init-cmd.d.mts","sourceRoot":"","sources":["../../../src/cli/commands/cli-init-cmd.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,MAAM,WAAW,WAAW;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,cAAc,CAAC,EACjC,SAAyB,EACzB,aAAyB,EACzB,iBAA6C,EAC7C,KAAa,GAChB,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAoD3C"}
|
|
@@ -10,6 +10,7 @@ import { VcsRepository } from '@ibgib/core-gib/dist/vcs/vcs-repository.mjs';
|
|
|
10
10
|
import { B2TFS_BRANCH_DEFAULT_NAME } from '@ibgib/core-gib/dist/vcs/branch/branch-constants.mjs';
|
|
11
11
|
import { GLOBAL_LOG_A_LOT } from '../../vcs-gib-constants.mjs';
|
|
12
12
|
import { bootstrapVcsMetaspace } from '../../bootstrap/node-bootstrap.mjs';
|
|
13
|
+
import { getB2tFSIndexIbGib } from '@ibgib/core-gib/dist/vcs/index/index-helper.mjs';
|
|
13
14
|
const lcFile = `[init-cmd]`;
|
|
14
15
|
const logalot = GLOBAL_LOG_A_LOT;
|
|
15
16
|
export async function executeInitCmd({ targetDir = process.cwd(), vcsFolderName = '.vcsgib', defaultBranchName = B2TFS_BRANCH_DEFAULT_NAME, quiet = false, } = {}) {
|
|
@@ -18,11 +19,25 @@ export async function executeInitCmd({ targetDir = process.cwd(), vcsFolderName
|
|
|
18
19
|
// 1. Ensure target directory exists
|
|
19
20
|
await fs.mkdir(absTargetDir, { recursive: true });
|
|
20
21
|
// 2. Bootstrap Metaspace and localSpace (creates .vcsgib on disk)
|
|
21
|
-
const { metaspace, localSpace } = await bootstrapVcsMetaspace({
|
|
22
|
+
const { metaspace, localSpace, foundVcsPath } = await bootstrapVcsMetaspace({
|
|
22
23
|
repoPath: absTargetDir,
|
|
23
24
|
vcsFolderName,
|
|
24
25
|
defaultSpaceName: `vcs_${path.basename(absTargetDir).replace(/[^a-zA-Z0-9_\-]/g, '_')}`,
|
|
25
26
|
});
|
|
27
|
+
if (foundVcsPath) {
|
|
28
|
+
const existingIndex = await getB2tFSIndexIbGib({ space: localSpace, metaspace });
|
|
29
|
+
if (existingIndex) {
|
|
30
|
+
if (!quiet) {
|
|
31
|
+
console.log(`Reinitialized existing ibgib repository in ${vcsPath}`);
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
vcsPath,
|
|
35
|
+
spaceId: existingIndex.data.activeSpaceId,
|
|
36
|
+
branchName: existingIndex.data.activeBranchName || defaultBranchName,
|
|
37
|
+
rootItemIb: '',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
26
41
|
// 3. Facade instantiation and domain init
|
|
27
42
|
const repo = new VcsRepository({
|
|
28
43
|
metaspace,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-init-cmd.mjs","sourceRoot":"","sources":["../../../src/cli/commands/cli-init-cmd.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlC,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAC;AAEjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-init-cmd.mjs","sourceRoot":"","sources":["../../../src/cli/commands/cli-init-cmd.mts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlC,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAC;AAEjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAGrF,MAAM,MAAM,GAAG,YAAY,CAAC;AAC5B,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAgBjC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACjC,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,EACzB,aAAa,GAAG,SAAS,EACzB,iBAAiB,GAAG,yBAAyB,EAC7C,KAAK,GAAG,KAAK,GAChB,GAAgB,EAAE;IACf,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAEvD,oCAAoC;IACpC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,kEAAkE;IAClE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,qBAAqB,CAAC;QACxE,QAAQ,EAAE,YAAY;QACtB,aAAa;QACb,gBAAgB,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE;KAC1F,CAAC,CAAC;IAEH,IAAI,YAAY,EAAE,CAAC;QACf,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACjF,IAAI,aAAa,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,8CAA8C,OAAO,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,OAAO;gBACH,OAAO;gBACP,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa;gBACzC,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,gBAAgB,IAAI,iBAAiB;gBACpE,UAAU,EAAE,EAAE;aACjB,CAAC;QACN,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,MAAM,IAAI,GAAG,IAAI,aAAa,CAAC;QAC3B,SAAS;QACT,UAAU;QACV,QAAQ,EAAE,YAAY;QACtB,aAAa;KAChB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;QAC5B,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM;QACrD,UAAU,EAAE,iBAAiB;KAChC,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,aAAa,iBAAiB,GAAG,CAAC,CAAC;IACnG,CAAC;IAED,OAAO;QACH,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;KAClC,CAAC;AACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vcs-cli-main.d.mts","sourceRoot":"","sources":["../../src/cli/vcs-cli-main.mts"],"names":[],"mappings":";AACA;;;;;GAKG;AAuBH,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAiC/B;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,wBAAsB,IAAI,CAAC,EACvB,IAA4B,GAC/B,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"vcs-cli-main.d.mts","sourceRoot":"","sources":["../../src/cli/vcs-cli-main.mts"],"names":[],"mappings":";AACA;;;;;GAKG;AAuBH,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAiC/B;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,wBAAsB,IAAI,CAAC,EACvB,IAA4B,GAC/B,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwIpC"}
|
|
@@ -168,7 +168,28 @@ export async function main({ argv = process.argv.slice(2), } = {}) {
|
|
|
168
168
|
return 0;
|
|
169
169
|
}
|
|
170
170
|
catch (error) {
|
|
171
|
-
|
|
171
|
+
let rawMsg = extractErrorMsg(error);
|
|
172
|
+
// Strip trailing internal UUID / error markers like (E: ...)
|
|
173
|
+
const cleanMsg = rawMsg.replace(/\s*\(E:\s*[a-f0-9-]+\)\s*$/i, '').trim();
|
|
174
|
+
if (cleanMsg.startsWith('fatal:') || cleanMsg.startsWith('error:')) {
|
|
175
|
+
console.error(cleanMsg);
|
|
176
|
+
}
|
|
177
|
+
else if (cleanMsg.toLowerCase().includes('nothing to commit')) {
|
|
178
|
+
console.error('nothing to commit, working tree clean');
|
|
179
|
+
}
|
|
180
|
+
else if (cleanMsg.toLowerCase().includes('already exists')) {
|
|
181
|
+
const branchMatch = cleanMsg.match(/["']([^"']+)["']/);
|
|
182
|
+
const name = branchMatch ? branchMatch[1] : '';
|
|
183
|
+
console.error(name ? `fatal: a branch named '${name}' already exists.` : `fatal: ${cleanMsg}`);
|
|
184
|
+
}
|
|
185
|
+
else if (cleanMsg.toLowerCase().includes('not found in indexibgib') || cleanMsg.toLowerCase().includes('not found on branch')) {
|
|
186
|
+
const branchMatch = cleanMsg.match(/\(([^)]+)\)/) || cleanMsg.match(/['"]([^'"]+)['"]/);
|
|
187
|
+
const name = branchMatch ? branchMatch[1] : '';
|
|
188
|
+
console.error(name ? `error: pathspec '${name}' did not match any file(s) known to ibgib` : `error: ${cleanMsg}`);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
console.error(`fatal: ${cleanMsg}`);
|
|
192
|
+
}
|
|
172
193
|
return 1;
|
|
173
194
|
}
|
|
174
195
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vcs-cli-main.mjs","sourceRoot":"","sources":["../../src/cli/vcs-cli-main.mts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"vcs-cli-main.mjs","sourceRoot":"","sources":["../../src/cli/vcs-cli-main.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vcs-repo-helper.d.mts","sourceRoot":"","sources":["../../src/cli/vcs-repo-helper.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"vcs-repo-helper.d.mts","sourceRoot":"","sources":["../../src/cli/vcs-repo-helper.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,aAAa,EAAmC,MAAM,6CAA6C,CAAC;AAY7G,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAsB,iBAAiB,CAAC,EACpC,SAAyB,EACzB,aAAyB,EACzB,UAAU,GACb,GAAE,qBAA0B,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA8E/D"}
|
|
@@ -22,14 +22,18 @@ export async function openVcsRepository({ targetDir = process.cwd(), vcsFolderNa
|
|
|
22
22
|
}
|
|
23
23
|
const absTargetDir = path.resolve(targetDir);
|
|
24
24
|
// 1. Locate repository root and bootstrap Node localSpace
|
|
25
|
-
const { metaspace, localSpace, vcsPath, repoRoot } = await bootstrapVcsMetaspace({
|
|
25
|
+
const { metaspace, localSpace, vcsPath, repoRoot, foundVcsPath } = await bootstrapVcsMetaspace({
|
|
26
26
|
repoPath: absTargetDir,
|
|
27
27
|
vcsFolderName,
|
|
28
|
+
mustExist: true,
|
|
28
29
|
});
|
|
30
|
+
if (!foundVcsPath) {
|
|
31
|
+
throw new Error(`fatal: not an ibgib repository (or any of the parent directories): ${vcsFolderName}`);
|
|
32
|
+
}
|
|
29
33
|
// 2. Fetch authoritative in-band index from localSpace
|
|
30
34
|
const indexIbGib = await getB2tFSIndexIbGib({ space: localSpace, metaspace });
|
|
31
35
|
if (!indexIbGib) {
|
|
32
|
-
throw new Error(`
|
|
36
|
+
throw new Error(`fatal: not an ibgib repository (index not found in ${vcsPath})`);
|
|
33
37
|
}
|
|
34
38
|
// 3. Determine active branch and worktree directory
|
|
35
39
|
const activeBranchName = branchName || resolveContextualBranchName({
|
|
@@ -51,11 +55,21 @@ export async function openVcsRepository({ targetDir = process.cwd(), vcsFolderNa
|
|
|
51
55
|
vcsFolderName,
|
|
52
56
|
backingSpace: activeSpace,
|
|
53
57
|
});
|
|
58
|
+
const fnGetWorkspaceProjectionSpace = async ({ worktreeDir, backingSpace, }) => {
|
|
59
|
+
const { space } = await getOrCreateWorkspaceProjectionSpace({
|
|
60
|
+
metaspace,
|
|
61
|
+
workspaceRoot: worktreeDir,
|
|
62
|
+
vcsFolderName,
|
|
63
|
+
backingSpace,
|
|
64
|
+
});
|
|
65
|
+
return space;
|
|
66
|
+
};
|
|
54
67
|
// 5. Construct domain facade
|
|
55
68
|
const repo = new VcsRepository({
|
|
56
69
|
metaspace,
|
|
57
70
|
localSpace,
|
|
58
71
|
workspaceSpace,
|
|
72
|
+
fnGetWorkspaceProjectionSpace,
|
|
59
73
|
repoRoot,
|
|
60
74
|
vcsFolderName,
|
|
61
75
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vcs-repo-helper.mjs","sourceRoot":"","sources":["../../src/cli/vcs-repo-helper.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAClF,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"vcs-repo-helper.mjs","sourceRoot":"","sources":["../../src/cli/vcs-repo-helper.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAClF,OAAO,EAAE,aAAa,EAAmC,MAAM,6CAA6C,CAAC;AAC7G,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAC3F,OAAO,EAAE,mCAAmC,EAAE,MAAM,qDAAqD,CAAC;AAE1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAC;AAEjG,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAejC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACpC,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,EACzB,aAAa,GAAG,SAAS,EACzB,UAAU,GACb,GAA0B,EAAE;IACzB,MAAM,EAAE,GAAG,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC;IACzC,IAAI,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;QAAC,CAAC;QAExF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE7C,0DAA0D;QAC1D,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,qBAAqB,CAAC;YAC3F,QAAQ,EAAE,YAAY;YACtB,aAAa;YACb,SAAS,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,sEAAsE,aAAa,EAAE,CAAC,CAAC;QAC3G,CAAC;QAED,uDAAuD;QACvD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,sDAAsD,OAAO,GAAG,CAAC,CAAC;QACtF,CAAC;QAED,oDAAoD;QACpD,MAAM,gBAAgB,GAAG,UAAU,IAAI,2BAA2B,CAAC;YAC/D,SAAS,EAAE,YAAY;YACvB,QAAQ;YACR,UAAU;SACb,CAAC,CAAC;QAEH,MAAM,iBAAiB,GAAG,gBAAgB,KAAK,yBAAyB;YACpE,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAEjD,mEAAmE;QACnE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,sBAAsB,CAAC;YACxD,SAAS;YACT,UAAU,EAAE,gBAAgB;SAC/B,CAAC,CAAC;QAEH,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,mCAAmC,CAAC;YACxE,SAAS;YACT,aAAa,EAAE,iBAAiB;YAChC,aAAa;YACb,YAAY,EAAE,WAAW;SAC5B,CAAC,CAAC;QAEH,MAAM,6BAA6B,GAAoC,KAAK,EAAE,EAC1E,WAAW,EACX,YAAY,GACf,EAAE,EAAE;YACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,mCAAmC,CAAC;gBACxD,SAAS;gBACT,aAAa,EAAE,WAAW;gBAC1B,aAAa;gBACb,YAAY;aACf,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QAEF,6BAA6B;QAC7B,MAAM,IAAI,GAAG,IAAI,aAAa,CAAC;YAC3B,SAAS;YACT,UAAU;YACV,cAAc;YACd,6BAA6B;YAC7B,QAAQ;YACR,aAAa;SAChB,CAAC,CAAC;QAEH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;IAChB,CAAC;YAAS,CAAC;QACP,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ibgib/vcs-gib",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.36",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.mjs",
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
"prepare:publish": "npm version patch && node ../../build/dist/concrete-build/build-vcs-gib.mjs --prod && npm run pack"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@ibgib/helper-gib": "^0.0.
|
|
23
|
-
"@ibgib/ts-gib": "^0.5.
|
|
24
|
-
"@ibgib/encrypt-gib": "^0.3.
|
|
25
|
-
"@ibgib/core-gib": "^0.1.
|
|
26
|
-
"@ibgib/node-gib": "^0.0.
|
|
22
|
+
"@ibgib/helper-gib": "^0.0.39",
|
|
23
|
+
"@ibgib/ts-gib": "^0.5.36",
|
|
24
|
+
"@ibgib/encrypt-gib": "^0.3.3",
|
|
25
|
+
"@ibgib/core-gib": "^0.1.81",
|
|
26
|
+
"@ibgib/node-gib": "^0.0.26"
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -37,6 +37,10 @@ export interface BootstrapVcsMetaspaceOpts {
|
|
|
37
37
|
* Default space name for non-interactive headless testing. Defaults to 'vcs_space'
|
|
38
38
|
*/
|
|
39
39
|
defaultSpaceName?: string;
|
|
40
|
+
/**
|
|
41
|
+
* If true, throws if .vcsgib is not found during upward discovery without initializing spaces.
|
|
42
|
+
*/
|
|
43
|
+
mustExist?: boolean;
|
|
40
44
|
}
|
|
41
45
|
|
|
42
46
|
export interface BootstrapVcsMetaspaceResult {
|
|
@@ -44,6 +48,7 @@ export interface BootstrapVcsMetaspaceResult {
|
|
|
44
48
|
localSpace: IbGibSpaceAny;
|
|
45
49
|
vcsPath: string;
|
|
46
50
|
repoRoot: string;
|
|
51
|
+
foundVcsPath?: string;
|
|
47
52
|
}
|
|
48
53
|
|
|
49
54
|
/**
|
|
@@ -94,6 +99,10 @@ export async function bootstrapVcsMetaspace(
|
|
|
94
99
|
currentDir = parentDir;
|
|
95
100
|
}
|
|
96
101
|
|
|
102
|
+
if (opts.mustExist && !foundVcsPath) {
|
|
103
|
+
throw new Error(`fatal: not an ibgib repository (or any of the parent directories): ${vcsFolderName}`);
|
|
104
|
+
}
|
|
105
|
+
|
|
97
106
|
const vcsPath = foundVcsPath || path.resolve(repoPath, vcsFolderName);
|
|
98
107
|
if (!foundVcsPath) {
|
|
99
108
|
repoRoot = path.resolve(repoPath);
|
|
@@ -181,6 +190,7 @@ export async function bootstrapVcsMetaspace(
|
|
|
181
190
|
localSpace,
|
|
182
191
|
vcsPath,
|
|
183
192
|
repoRoot,
|
|
193
|
+
foundVcsPath,
|
|
184
194
|
};
|
|
185
195
|
} catch (error: any) {
|
|
186
196
|
console.error(`${lc} ${error?.message || error} (E: genuuid)`);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* @module cli-e2e.respec
|
|
3
3
|
*
|
|
4
4
|
* End-to-End CLI Integration Spec for @ibgib/vcs-gib.
|
|
5
|
+
*
|
|
5
6
|
* Executes full lifecycle: vcs init -> vcs status -> vcs add -> vcs commit -> vcs log -> vcs branch -> vcs checkout.
|
|
6
7
|
*/
|
|
7
8
|
|
|
@@ -9,7 +10,7 @@ import path from 'node:path';
|
|
|
9
10
|
import fs from 'node:fs/promises';
|
|
10
11
|
|
|
11
12
|
import {
|
|
12
|
-
respecfully, ifWe, ifWeMight, iReckon
|
|
13
|
+
respecfully, ifWe, ifWeMight, iReckon, // don't remove ifWe/ifWeMight even if unused
|
|
13
14
|
} from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
|
|
14
15
|
|
|
15
16
|
import { main } from './vcs-cli-main.mjs';
|
|
@@ -21,7 +22,7 @@ import { executeLogCmd } from './commands/cli-log-cmd.mjs';
|
|
|
21
22
|
import { executeBranchCmd } from './commands/cli-branch-cmd.mjs';
|
|
22
23
|
import { executeCheckoutCmd } from './commands/cli-checkout-cmd.mjs';
|
|
23
24
|
import { bootstrapVcsMetaspace } from '../bootstrap/node-bootstrap.mjs';
|
|
24
|
-
import {
|
|
25
|
+
import { getB2tFSIndexIbGib } from '@ibgib/core-gib/dist/vcs/index/index-helper.mjs';
|
|
25
26
|
|
|
26
27
|
const lc = `[apps/vcs-gib/src/cli/cli-e2e.respec.mts]`;
|
|
27
28
|
|
|
@@ -107,11 +108,11 @@ await respecfully(lc, `Full E2E CLI Integration Spec`, async () => {
|
|
|
107
108
|
|
|
108
109
|
iReckon(lc, addRes.stagedCount >= 2).isGonnaBeTrue();
|
|
109
110
|
|
|
110
|
-
const { localSpace: e2eSpaceAdd,
|
|
111
|
+
const { localSpace: e2eSpaceAdd, metaspace: e2eMetaspaceAdd } = await bootstrapVcsMetaspace({
|
|
111
112
|
repoPath: testDir,
|
|
112
113
|
vcsFolderName,
|
|
113
114
|
});
|
|
114
|
-
const e2eIndexAdd = await
|
|
115
|
+
const e2eIndexAdd = await getB2tFSIndexIbGib({ space: e2eSpaceAdd, metaspace: e2eMetaspaceAdd });
|
|
115
116
|
iReckon(lc, Boolean(e2eIndexAdd?.data?.staged_item && e2eIndexAdd.data.staged_item.length >= 2)).isGonnaBeTrue();
|
|
116
117
|
iReckon(lc, e2eIndexAdd?.rel8ns?.staged_item).isGonnaBeFalsy();
|
|
117
118
|
|
|
@@ -130,11 +131,11 @@ await respecfully(lc, `Full E2E CLI Integration Spec`, async () => {
|
|
|
130
131
|
quiet: true,
|
|
131
132
|
});
|
|
132
133
|
|
|
133
|
-
const { localSpace: e2eSpaceCommit,
|
|
134
|
+
const { localSpace: e2eSpaceCommit, metaspace: e2eMetaspaceCommit } = await bootstrapVcsMetaspace({
|
|
134
135
|
repoPath: testDir,
|
|
135
136
|
vcsFolderName,
|
|
136
137
|
});
|
|
137
|
-
const e2eIndexCommit = await
|
|
138
|
+
const e2eIndexCommit = await getB2tFSIndexIbGib({ space: e2eSpaceCommit, metaspace: e2eMetaspaceCommit });
|
|
138
139
|
iReckon(lc, e2eIndexCommit?.data?.staged_item).willEqual([]);
|
|
139
140
|
iReckon(lc, e2eIndexCommit?.rel8ns?.staged_item).isGonnaBeFalsy();
|
|
140
141
|
|
|
@@ -315,4 +316,124 @@ await respecfully(lc, `Full E2E CLI Integration Spec`, async () => {
|
|
|
315
316
|
}
|
|
316
317
|
});
|
|
317
318
|
|
|
319
|
+
await ifWe(lc, `fails gracefully with fatal error message on uninitialized repository`, async () => {
|
|
320
|
+
const uninitDir = path.join(process.cwd(), `.test_cli_e2e_uninit_${Date.now()}`);
|
|
321
|
+
await fs.mkdir(uninitDir, { recursive: true });
|
|
322
|
+
|
|
323
|
+
const origCwd = process.cwd();
|
|
324
|
+
const origError = console.error;
|
|
325
|
+
let capturedErrors: string[] = [];
|
|
326
|
+
|
|
327
|
+
console.error = (...args: any[]) => {
|
|
328
|
+
capturedErrors.push(args.join(' '));
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
try {
|
|
332
|
+
process.chdir(uninitDir);
|
|
333
|
+
|
|
334
|
+
// Execute status, commit, log, branch, checkout in uninitialized directory
|
|
335
|
+
const statusExitCode = await main({ argv: ['status'] });
|
|
336
|
+
iReckon(lc, statusExitCode).willEqual(1);
|
|
337
|
+
|
|
338
|
+
const commitExitCode = await main({ argv: ['commit', '-m', 'test'] });
|
|
339
|
+
iReckon(lc, commitExitCode).willEqual(1);
|
|
340
|
+
|
|
341
|
+
const logExitCode = await main({ argv: ['log'] });
|
|
342
|
+
iReckon(lc, logExitCode).willEqual(1);
|
|
343
|
+
|
|
344
|
+
const branchExitCode = await main({ argv: ['branch'] });
|
|
345
|
+
iReckon(lc, branchExitCode).willEqual(1);
|
|
346
|
+
|
|
347
|
+
const checkoutExitCode = await main({ argv: ['checkout', 'main'] });
|
|
348
|
+
iReckon(lc, checkoutExitCode).willEqual(1);
|
|
349
|
+
|
|
350
|
+
// Verify clean error messages without storage stack traces
|
|
351
|
+
const hasFatalMsg = capturedErrors.some(e => e.includes('fatal: not an ibgib repository'));
|
|
352
|
+
iReckon(lc, hasFatalMsg).isGonnaBeTrue();
|
|
353
|
+
|
|
354
|
+
const hasStorageError = capturedErrors.some(e => e.includes('couldn\'t get special'));
|
|
355
|
+
iReckon(lc, hasStorageError).isGonnaBeFalse();
|
|
356
|
+
} finally {
|
|
357
|
+
process.chdir(origCwd);
|
|
358
|
+
console.error = origError;
|
|
359
|
+
await fs.rm(uninitDir, { recursive: true, force: true });
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
await ifWe(lc, `preserves worktree state when checkout is executed from within secondary worktree`, async () => {
|
|
364
|
+
const testDir = path.join(process.cwd(), `.test_cli_e2e_worktree_${Date.now()}`);
|
|
365
|
+
const vcsFolderName = '.vcsgib';
|
|
366
|
+
|
|
367
|
+
const origCwd = process.cwd();
|
|
368
|
+
|
|
369
|
+
try {
|
|
370
|
+
process.chdir(testDir);
|
|
371
|
+
} catch {
|
|
372
|
+
await fs.mkdir(testDir, { recursive: true });
|
|
373
|
+
process.chdir(testDir);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
try {
|
|
377
|
+
// 1. Init main repo
|
|
378
|
+
await executeInitCmd({
|
|
379
|
+
targetDir: testDir,
|
|
380
|
+
vcsFolderName,
|
|
381
|
+
quiet: true,
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
await fs.writeFile(path.join(testDir, 'main.txt'), 'content on main\n', 'utf8');
|
|
385
|
+
await executeAddCmd({ targetDir: testDir, vcsFolderName, all: true, quiet: true });
|
|
386
|
+
await executeCommitCmd({ targetDir: testDir, vcsFolderName, message: 'Commit on main', quiet: true });
|
|
387
|
+
|
|
388
|
+
// 2. Create feature branch
|
|
389
|
+
await executeBranchCmd({
|
|
390
|
+
targetDir: testDir,
|
|
391
|
+
vcsFolderName,
|
|
392
|
+
branchName: 'feature-strings',
|
|
393
|
+
quiet: true,
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
const worktreeDir = path.join(testDir, 'b', 'feature-strings');
|
|
397
|
+
await fs.mkdir(worktreeDir, { recursive: true });
|
|
398
|
+
const worktreeFile = path.join(worktreeDir, 'feature.txt');
|
|
399
|
+
await fs.writeFile(worktreeFile, 'content on feature branch\n', 'utf8');
|
|
400
|
+
|
|
401
|
+
// 3. Commit within secondary worktree
|
|
402
|
+
await executeAddCmd({ targetDir: worktreeDir, vcsFolderName, all: true, quiet: true });
|
|
403
|
+
await executeCommitCmd({ targetDir: worktreeDir, vcsFolderName, message: 'Commit on feature', quiet: true });
|
|
404
|
+
|
|
405
|
+
// 4. Run checkout main from within the secondary worktree directory
|
|
406
|
+
process.chdir(worktreeDir);
|
|
407
|
+
const checkoutRes = await executeCheckoutCmd({
|
|
408
|
+
targetDir: worktreeDir,
|
|
409
|
+
vcsFolderName,
|
|
410
|
+
branchName: 'main',
|
|
411
|
+
quiet: true,
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
iReckon(lc, checkoutRes.currentBranch).willEqual('main');
|
|
415
|
+
|
|
416
|
+
// 5. Verify feature.txt still exists untouched in b/feature-strings
|
|
417
|
+
const featureFileExists = await fs.stat(worktreeFile).then(s => s.isFile()).catch(() => false);
|
|
418
|
+
iReckon(lc, featureFileExists).isGonnaBeTrue();
|
|
419
|
+
|
|
420
|
+
const featureContent = await fs.readFile(worktreeFile, 'utf8');
|
|
421
|
+
iReckon(lc, featureContent).willEqual('content on feature branch\n');
|
|
422
|
+
|
|
423
|
+
// 6. Verify log from inside worktree succeeds and reflects feature branch history
|
|
424
|
+
const logRes = await executeLogCmd({
|
|
425
|
+
targetDir: worktreeDir,
|
|
426
|
+
vcsFolderName,
|
|
427
|
+
quiet: true,
|
|
428
|
+
});
|
|
429
|
+
iReckon(lc, logRes.branchName).willEqual('feature-strings');
|
|
430
|
+
iReckon(lc, logRes.commits.length).willEqual(2);
|
|
431
|
+
iReckon(lc, logRes.commits[0].message).willEqual('Commit on feature');
|
|
432
|
+
iReckon(lc, logRes.commits[1].message).willEqual('Commit on main');
|
|
433
|
+
} finally {
|
|
434
|
+
process.chdir(origCwd);
|
|
435
|
+
await fs.rm(testDir, { recursive: true, force: true });
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
|
|
318
439
|
});
|