@ibgib/vcs-gib 0.0.23 → 0.0.26
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/CHANGELOG.md +19 -0
- package/VCS_CLI_USER_GUIDE.md +94 -89
- package/dist/AUTO-GENERATED-version.d.mts +1 -1
- package/dist/AUTO-GENERATED-version.mjs +1 -1
- package/dist/cli/cli-arg-parser.d.mts +1 -0
- package/dist/cli/cli-arg-parser.d.mts.map +1 -1
- package/dist/cli/cli-arg-parser.mjs +5 -1
- package/dist/cli/cli-arg-parser.mjs.map +1 -1
- package/dist/cli/cli-constants.d.mts +6 -0
- package/dist/cli/cli-constants.d.mts.map +1 -1
- package/dist/cli/cli-constants.mjs +12 -0
- package/dist/cli/cli-constants.mjs.map +1 -1
- package/dist/cli/commands/add-cmd.d.mts.map +1 -1
- package/dist/cli/commands/add-cmd.mjs +5 -2
- package/dist/cli/commands/add-cmd.mjs.map +1 -1
- package/dist/cli/commands/commit-cmd.d.mts +5 -4
- package/dist/cli/commands/commit-cmd.d.mts.map +1 -1
- package/dist/cli/commands/commit-cmd.mjs +149 -33
- package/dist/cli/commands/commit-cmd.mjs.map +1 -1
- package/dist/cli/commands/generate-comment-cmd.d.mts +19 -0
- package/dist/cli/commands/generate-comment-cmd.d.mts.map +1 -0
- package/dist/cli/commands/generate-comment-cmd.mjs +140 -0
- package/dist/cli/commands/generate-comment-cmd.mjs.map +1 -0
- package/dist/cli/commands/log-cmd.d.mts +12 -3
- package/dist/cli/commands/log-cmd.d.mts.map +1 -1
- package/dist/cli/commands/log-cmd.mjs +236 -38
- package/dist/cli/commands/log-cmd.mjs.map +1 -1
- package/dist/cli/commands/status-cmd.d.mts +5 -6
- package/dist/cli/commands/status-cmd.d.mts.map +1 -1
- package/dist/cli/commands/status-cmd.mjs +50 -205
- package/dist/cli/commands/status-cmd.mjs.map +1 -1
- package/dist/cli/vcs-cli-main.d.mts.map +1 -1
- package/dist/cli/vcs-cli-main.mjs +25 -4
- package/dist/cli/vcs-cli-main.mjs.map +1 -1
- package/dist/engine/index/index-helper.d.mts.map +1 -1
- package/dist/engine/index/index-helper.mjs +3 -0
- package/dist/engine/index/index-helper.mjs.map +1 -1
- package/dist/engine/item/item-helper.d.mts.map +1 -1
- package/dist/engine/item/item-helper.mjs +5 -2
- package/dist/engine/item/item-helper.mjs.map +1 -1
- package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts +28 -0
- package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts.map +1 -1
- package/dist/engine/merge/b2tfs-3way-graft-strategy.mjs +84 -12
- package/dist/engine/merge/b2tfs-3way-graft-strategy.mjs.map +1 -1
- package/dist/engine/status/status-helper.d.mts +89 -0
- package/dist/engine/status/status-helper.d.mts.map +1 -0
- package/dist/engine/status/status-helper.mjs +285 -0
- package/dist/engine/status/status-helper.mjs.map +1 -0
- package/package.json +3 -3
- package/src/AUTO-GENERATED-version.mts +1 -1
- package/src/cli/cli-arg-parser.mts +5 -0
- package/src/cli/cli-constants.mts +13 -0
- package/src/cli/commands/add-cmd.mts +5 -2
- package/src/cli/commands/commit-cmd.mts +165 -42
- package/src/cli/commands/commit-log-cmd.respec.mts +216 -3
- package/src/cli/commands/generate-comment-cmd.mts +171 -0
- package/src/cli/commands/log-cmd.mts +288 -41
- package/src/cli/commands/status-cmd.mts +57 -256
- package/src/cli/vcs-cli-main.mts +25 -4
- package/src/engine/index/index-helper.mts +3 -0
- package/src/engine/item/item-helper.mts +5 -2
- package/src/engine/merge/b2tfs-3way-graft-strategy.mts +89 -10
- package/src/engine/merge/b2tfs-sync-comments.respec.mts +399 -0
- package/src/engine/status/status-helper.mts +380 -0
- package/tsconfig.test.tsbuildinfo +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module status-helper
|
|
3
|
+
*
|
|
4
|
+
* Pure status inspection helpers and pending `.ib.*.md` comment metadata detection.
|
|
5
|
+
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import fs from 'node:fs/promises';
|
|
8
|
+
import crypto from 'node:crypto';
|
|
9
|
+
import { B2TFS_CHILD_ITEM_REL8N_NAME } from '../item/item-types.mjs';
|
|
10
|
+
import { getIbGibWithMetaspaceFallback } from '../item/item-helper.mjs';
|
|
11
|
+
import { isPathFiltered, parseFilterFileContent } from '../filter/glob-helper.mjs';
|
|
12
|
+
import { getB2tFSIndexIbGib } from '../index/index-helper.mjs';
|
|
13
|
+
import { getOrCreateBranchSpace } from '../branch/branch-space-helper.mjs';
|
|
14
|
+
/**
|
|
15
|
+
* Returns true if filename is a `.ib.*.md` comment metadata file.
|
|
16
|
+
*/
|
|
17
|
+
export function isCommentMetadataFilename(filename) {
|
|
18
|
+
return filename.startsWith('.ib.') && filename.endsWith('.md') && filename.length > '.ib..md'.length;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extracts the inner topic / filename from `.ib.<topic>.md`.
|
|
22
|
+
*/
|
|
23
|
+
export function extractCommentTopicName(filename) {
|
|
24
|
+
if (!isCommentMetadataFilename(filename)) {
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
return filename.slice(4, -3); // strips leading '.ib.' and trailing '.md'
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Pure helper to walk the branch graph items.
|
|
31
|
+
*/
|
|
32
|
+
export async function walkBranchGraph({ item, space, metaspace, currentRelPath, outMap, }) {
|
|
33
|
+
if (!item || !item.data) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const { fsType, fileHash } = item.data;
|
|
37
|
+
if (currentRelPath) {
|
|
38
|
+
outMap.set(currentRelPath, { relPath: currentRelPath, fileHash, fsType });
|
|
39
|
+
}
|
|
40
|
+
if (fsType === 'folder') {
|
|
41
|
+
const childAddrs = item.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME] || [];
|
|
42
|
+
for (const childAddr of childAddrs) {
|
|
43
|
+
const childItem = await getIbGibWithMetaspaceFallback({
|
|
44
|
+
addr: childAddr,
|
|
45
|
+
space,
|
|
46
|
+
metaspace,
|
|
47
|
+
});
|
|
48
|
+
if (childItem && childItem.data) {
|
|
49
|
+
const childRelPath = currentRelPath
|
|
50
|
+
? `${currentRelPath}/${childItem.data.name}`
|
|
51
|
+
: childItem.data.name;
|
|
52
|
+
await walkBranchGraph({
|
|
53
|
+
item: childItem,
|
|
54
|
+
space,
|
|
55
|
+
metaspace,
|
|
56
|
+
currentRelPath: childRelPath,
|
|
57
|
+
outMap,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Pure helper to scan physical workspace, separating source files from `.ib.*.md` comment files.
|
|
65
|
+
*/
|
|
66
|
+
export async function scanPhysicalWorkspace({ dirPath, baseDir, vcsFolderName, filterPatterns, outSourceMap, outCommentFiles, }) {
|
|
67
|
+
let entries = [];
|
|
68
|
+
try {
|
|
69
|
+
entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
for (const entry of entries) {
|
|
75
|
+
const fullEntryPath = path.join(dirPath, entry.name);
|
|
76
|
+
const relPath = path.relative(baseDir, fullEntryPath).replace(/\\/g, '/');
|
|
77
|
+
// Ignore vcs storage folder, .git, and worktrees folder b
|
|
78
|
+
if (relPath === vcsFolderName || relPath.startsWith(vcsFolderName + '/') ||
|
|
79
|
+
relPath === '.git' || relPath.startsWith('.git/') ||
|
|
80
|
+
relPath === 'b' || relPath.startsWith('b/')) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (isPathFiltered({ relativePath: relPath, isDirectory: entry.isDirectory(), filterPatterns })) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (entry.isDirectory()) {
|
|
87
|
+
outSourceMap.set(relPath, { relPath, fullPath: fullEntryPath, isDirectory: true });
|
|
88
|
+
await scanPhysicalWorkspace({
|
|
89
|
+
dirPath: fullEntryPath,
|
|
90
|
+
baseDir,
|
|
91
|
+
vcsFolderName,
|
|
92
|
+
filterPatterns,
|
|
93
|
+
outSourceMap,
|
|
94
|
+
outCommentFiles,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
else if (entry.isFile()) {
|
|
98
|
+
if (isCommentMetadataFilename(entry.name)) {
|
|
99
|
+
const parentRelPath = path.relative(baseDir, dirPath).replace(/\\/g, '/');
|
|
100
|
+
outCommentFiles.push({
|
|
101
|
+
relPath,
|
|
102
|
+
fullPath: fullEntryPath,
|
|
103
|
+
parentRelPath: parentRelPath === '.' ? '' : parentRelPath,
|
|
104
|
+
filename: entry.name,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
let fileHash;
|
|
109
|
+
try {
|
|
110
|
+
const fileData = await fs.readFile(fullEntryPath);
|
|
111
|
+
fileHash = crypto.createHash('sha256').update(fileData).digest('hex');
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// File unreadable
|
|
115
|
+
}
|
|
116
|
+
outSourceMap.set(relPath, { relPath, fullPath: fullEntryPath, isDirectory: false, fileHash });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Computes complete repository status, including staged, modified, deleted, untracked,
|
|
123
|
+
* and mapped pending `.ib.*.md` comment files.
|
|
124
|
+
*/
|
|
125
|
+
export async function getRepoStatus({ metaspace, localSpace, vcsPath, repoRoot, vcsFolderName = '.vcsgib', }) {
|
|
126
|
+
const indexIbGib = await getB2tFSIndexIbGib({ space: localSpace, vcsPath });
|
|
127
|
+
const branchName = indexIbGib?.data?.activeBranch || 'main';
|
|
128
|
+
const activeWorktreeDir = branchName === 'main' ? repoRoot : path.join(repoRoot, 'b', branchName);
|
|
129
|
+
const { space: activeBranchSpace } = await getOrCreateBranchSpace({
|
|
130
|
+
metaspace,
|
|
131
|
+
vcsPath,
|
|
132
|
+
branchName,
|
|
133
|
+
});
|
|
134
|
+
const stagedMap = new Map();
|
|
135
|
+
const indexStagedPaths = indexIbGib?.data?.stagedPaths || {};
|
|
136
|
+
for (const [relPath, itemRec] of Object.entries(indexStagedPaths)) {
|
|
137
|
+
stagedMap.set(relPath, itemRec);
|
|
138
|
+
}
|
|
139
|
+
let rootItemAddr;
|
|
140
|
+
const branchAddrs = [
|
|
141
|
+
...(indexIbGib?.rel8ns?.branch || []),
|
|
142
|
+
...(indexIbGib?.rel8ns?.branch_tjp || []),
|
|
143
|
+
];
|
|
144
|
+
if (branchAddrs.length > 0) {
|
|
145
|
+
let branchIbGibs = [];
|
|
146
|
+
for (const bAddr of branchAddrs) {
|
|
147
|
+
const bIbGib = await getIbGibWithMetaspaceFallback({
|
|
148
|
+
addr: bAddr,
|
|
149
|
+
space: activeBranchSpace,
|
|
150
|
+
metaspace,
|
|
151
|
+
});
|
|
152
|
+
if (bIbGib) {
|
|
153
|
+
branchIbGibs.push(bIbGib);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const activeBranchIbGib = branchIbGibs.find((b) => b?.data?.name === branchName) || branchIbGibs.at(0);
|
|
157
|
+
rootItemAddr = activeBranchIbGib?.rel8ns?.b2tFS_item?.at(0) || activeBranchIbGib?.rel8ns?.b2tfs_item?.at(0);
|
|
158
|
+
}
|
|
159
|
+
let filterPatterns = [];
|
|
160
|
+
const ignorePath = path.join(activeWorktreeDir, '.ibgibignore');
|
|
161
|
+
try {
|
|
162
|
+
const ignoreContent = await fs.readFile(ignorePath, 'utf8');
|
|
163
|
+
filterPatterns = parseFilterFileContent(ignoreContent);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Ignore file missing is fine
|
|
167
|
+
}
|
|
168
|
+
const branchItemsMap = new Map();
|
|
169
|
+
if (rootItemAddr) {
|
|
170
|
+
const rootItem = await getIbGibWithMetaspaceFallback({
|
|
171
|
+
addr: rootItemAddr,
|
|
172
|
+
space: activeBranchSpace,
|
|
173
|
+
metaspace,
|
|
174
|
+
});
|
|
175
|
+
if (rootItem) {
|
|
176
|
+
await walkBranchGraph({
|
|
177
|
+
item: rootItem,
|
|
178
|
+
space: activeBranchSpace,
|
|
179
|
+
metaspace,
|
|
180
|
+
currentRelPath: '',
|
|
181
|
+
outMap: branchItemsMap,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const physicalItemsMap = new Map();
|
|
186
|
+
const rawCommentFiles = [];
|
|
187
|
+
await scanPhysicalWorkspace({
|
|
188
|
+
dirPath: activeWorktreeDir,
|
|
189
|
+
baseDir: activeWorktreeDir,
|
|
190
|
+
vcsFolderName,
|
|
191
|
+
filterPatterns,
|
|
192
|
+
outSourceMap: physicalItemsMap,
|
|
193
|
+
outCommentFiles: rawCommentFiles,
|
|
194
|
+
});
|
|
195
|
+
const staged = [];
|
|
196
|
+
const modified = [];
|
|
197
|
+
const deleted = [];
|
|
198
|
+
const untracked = [];
|
|
199
|
+
for (const [relPath, stagedRec] of stagedMap.entries()) {
|
|
200
|
+
staged.push({
|
|
201
|
+
path: relPath,
|
|
202
|
+
fsType: stagedRec.fsType || 'file',
|
|
203
|
+
status: 'staged',
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
for (const [relPath, physItem] of physicalItemsMap.entries()) {
|
|
207
|
+
if (stagedMap.has(relPath)) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
const branchItem = branchItemsMap.get(relPath);
|
|
211
|
+
if (!branchItem) {
|
|
212
|
+
untracked.push({
|
|
213
|
+
path: relPath,
|
|
214
|
+
fsType: physItem.isDirectory ? 'folder' : 'file',
|
|
215
|
+
status: 'untracked',
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
if (!physItem.isDirectory && physItem.fileHash && branchItem.fileHash && physItem.fileHash !== branchItem.fileHash) {
|
|
220
|
+
modified.push({
|
|
221
|
+
path: relPath,
|
|
222
|
+
fsType: 'file',
|
|
223
|
+
status: 'modified',
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
for (const [relPath, branchItem] of branchItemsMap.entries()) {
|
|
229
|
+
if (!relPath || relPath === '.' || relPath === '') {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
if (!physicalItemsMap.has(relPath) && !stagedMap.has(relPath)) {
|
|
233
|
+
deleted.push({
|
|
234
|
+
path: relPath,
|
|
235
|
+
fsType: branchItem.fsType,
|
|
236
|
+
status: 'deleted',
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Map raw comment files to targets (file or folder)
|
|
241
|
+
const pendingComments = [];
|
|
242
|
+
for (const raw of rawCommentFiles) {
|
|
243
|
+
const topicName = extractCommentTopicName(raw.filename);
|
|
244
|
+
const candidateFileRelPath = raw.parentRelPath ? `${raw.parentRelPath}/${topicName}` : topicName;
|
|
245
|
+
let targetType = 'folder';
|
|
246
|
+
let targetRelPath = raw.parentRelPath;
|
|
247
|
+
if (physicalItemsMap.has(candidateFileRelPath) && !physicalItemsMap.get(candidateFileRelPath)?.isDirectory) {
|
|
248
|
+
targetType = 'file';
|
|
249
|
+
targetRelPath = candidateFileRelPath;
|
|
250
|
+
}
|
|
251
|
+
else if (branchItemsMap.has(candidateFileRelPath) && branchItemsMap.get(candidateFileRelPath)?.fsType === 'file') {
|
|
252
|
+
targetType = 'file';
|
|
253
|
+
targetRelPath = candidateFileRelPath;
|
|
254
|
+
}
|
|
255
|
+
else if (stagedMap.has(candidateFileRelPath)) {
|
|
256
|
+
targetType = 'file';
|
|
257
|
+
targetRelPath = candidateFileRelPath;
|
|
258
|
+
}
|
|
259
|
+
let content = '';
|
|
260
|
+
try {
|
|
261
|
+
content = await fs.readFile(raw.fullPath, 'utf8');
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// Unreadable comment file
|
|
265
|
+
}
|
|
266
|
+
pendingComments.push({
|
|
267
|
+
commentRelPath: raw.relPath,
|
|
268
|
+
commentFullPath: raw.fullPath,
|
|
269
|
+
targetRelPath,
|
|
270
|
+
targetType,
|
|
271
|
+
topicName,
|
|
272
|
+
content,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
branchName,
|
|
277
|
+
activeWorktreeDir,
|
|
278
|
+
staged,
|
|
279
|
+
modified,
|
|
280
|
+
deleted,
|
|
281
|
+
untracked,
|
|
282
|
+
pendingComments,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=status-helper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-helper.mjs","sourceRoot":"","sources":["../../../src/engine/status/status-helper.mts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ibgib/vcs-gib",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.26",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.mjs",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@ibgib/helper-gib": "^0.0.37",
|
|
23
23
|
"@ibgib/ts-gib": "^0.5.34",
|
|
24
24
|
"@ibgib/encrypt-gib": "^0.3.1",
|
|
25
|
-
"@ibgib/core-gib": "^0.1.
|
|
26
|
-
"@ibgib/node-gib": "^0.0.
|
|
25
|
+
"@ibgib/core-gib": "^0.1.75",
|
|
26
|
+
"@ibgib/node-gib": "^0.0.20"
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
VCS_PARAM_YES,
|
|
19
19
|
VCS_PARAM_STAGED,
|
|
20
20
|
VCS_PARAM_WORKTREE,
|
|
21
|
+
VCS_PARAM_COMMENTS,
|
|
21
22
|
} from './cli-constants.mjs';
|
|
22
23
|
|
|
23
24
|
export type VcsSubcommand = typeof VCS_SUBCOMMANDS[keyof typeof VCS_SUBCOMMANDS];
|
|
@@ -36,6 +37,7 @@ export interface ParsedVcsArgs {
|
|
|
36
37
|
yes?: boolean;
|
|
37
38
|
staged?: boolean;
|
|
38
39
|
worktree?: boolean;
|
|
40
|
+
comments?: boolean;
|
|
39
41
|
};
|
|
40
42
|
rawArgs: string[];
|
|
41
43
|
}
|
|
@@ -104,6 +106,9 @@ export function parseVcsArgs(argv: string[]): ParsedVcsArgs {
|
|
|
104
106
|
} else if (matchesParam(arg, VCS_PARAM_WORKTREE)) {
|
|
105
107
|
flags.worktree = true;
|
|
106
108
|
i++;
|
|
109
|
+
} else if (matchesParam(arg, VCS_PARAM_COMMENTS)) {
|
|
110
|
+
flags.comments = true;
|
|
111
|
+
i++;
|
|
107
112
|
} else if (!arg.startsWith('-')) {
|
|
108
113
|
if (command === VCS_SUBCOMMANDS.HELP) {
|
|
109
114
|
const normalized = arg.toLowerCase();
|
|
@@ -19,10 +19,23 @@ export const VCS_SUBCOMMANDS = {
|
|
|
19
19
|
MERGE: 'merge',
|
|
20
20
|
RESET: 'reset',
|
|
21
21
|
RESTORE: 'restore',
|
|
22
|
+
GENERATE_COMMENT: 'generate-comment',
|
|
23
|
+
GEN_COMMENT: 'gen-comment',
|
|
24
|
+
GEN_MSG: 'gen-msg',
|
|
25
|
+
GCOMM: 'gcomm',
|
|
26
|
+
GMSG: 'gmsg',
|
|
22
27
|
HELP: 'help',
|
|
23
28
|
VERSION: 'version',
|
|
24
29
|
} as const;
|
|
25
30
|
|
|
31
|
+
export const VCS_PARAM_COMMENTS: RCLIParamInfo = {
|
|
32
|
+
name: 'comments',
|
|
33
|
+
synonyms: ['c'],
|
|
34
|
+
description: 'Show full pending comment texts in status',
|
|
35
|
+
isFlag: true,
|
|
36
|
+
argTypeName: 'boolean',
|
|
37
|
+
};
|
|
38
|
+
|
|
26
39
|
export const VCS_PARAM_MESSAGE: RCLIParamInfo = {
|
|
27
40
|
name: 'message',
|
|
28
41
|
synonyms: ['m'],
|
|
@@ -20,6 +20,7 @@ import { putInSpace, persistTransformResult } from '@ibgib/core-gib/dist/witness
|
|
|
20
20
|
|
|
21
21
|
import { bootstrapVcsMetaspace } from '../../bootstrap/node-bootstrap.mjs';
|
|
22
22
|
import { getOrCreateBranchSpace } from '../../engine/branch/branch-space-helper.mjs';
|
|
23
|
+
import { isCommentMetadataFilename } from '../../engine/status/status-helper.mjs';
|
|
23
24
|
import { getB2tFSItemIb } from '../../engine/item/item-atom-helper.mjs';
|
|
24
25
|
import { B2tFSItemIbGib_V1, B2TFS_CHILD_ITEM_REL8N_NAME } from '../../engine/item/item-types.mjs';
|
|
25
26
|
import { getIbGibWithMetaspaceFallback, createB2tFSItemIbGib, evolveB2tFSItemIbGib } from '../../engine/item/item-helper.mjs';
|
|
@@ -186,7 +187,7 @@ export async function executeAddCmd({
|
|
|
186
187
|
throw new Error(`No files matched glob pattern: ${relOrAbs} (E: e23d4c5f6a7b8c9d0e1f2a3b4c5d6e7f)`);
|
|
187
188
|
}
|
|
188
189
|
} else {
|
|
189
|
-
const fullPath = path.resolve(
|
|
190
|
+
const fullPath = path.isAbsolute(relOrAbs) ? relOrAbs : path.resolve(absTargetDir, relOrAbs);
|
|
190
191
|
let stat;
|
|
191
192
|
try {
|
|
192
193
|
stat = await fs.stat(fullPath);
|
|
@@ -420,7 +421,9 @@ async function addCmd_collectFilesRecursively({
|
|
|
420
421
|
outFiles,
|
|
421
422
|
});
|
|
422
423
|
} else if (entry.isFile()) {
|
|
423
|
-
|
|
424
|
+
if (!isCommentMetadataFilename(entry.name)) {
|
|
425
|
+
outFiles.push(fullPath);
|
|
426
|
+
}
|
|
424
427
|
}
|
|
425
428
|
}
|
|
426
429
|
}
|