@fnndsc/brasa 0.56.2 → 0.56.3
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/buildinfo.json +1 -1
- package/dist/builtins/berth/berthCube.d.ts +3 -2
- package/dist/builtins/berth/berthCube.js +5 -10
- package/dist/builtins/berth/berthCube.js.map +1 -1
- package/dist/builtins/debug.d.ts +24 -3
- package/dist/builtins/debug.js +66 -13
- package/dist/builtins/debug.js.map +1 -1
- package/dist/builtins/fs/acl.args.d.ts +5 -38
- package/dist/builtins/fs/acl.args.js +6 -72
- package/dist/builtins/fs/acl.args.js.map +1 -1
- package/dist/builtins/fs/acl.d.ts +100 -10
- package/dist/builtins/fs/acl.js +222 -68
- package/dist/builtins/fs/acl.js.map +1 -1
- package/dist/builtins/fs/cat.args.d.ts +14 -15
- package/dist/builtins/fs/cat.args.js +13 -40
- package/dist/builtins/fs/cat.args.js.map +1 -1
- package/dist/builtins/fs/cat.d.ts +40 -3
- package/dist/builtins/fs/cat.js +89 -10
- package/dist/builtins/fs/cat.js.map +1 -1
- package/dist/builtins/fs/cd.d.ts +24 -6
- package/dist/builtins/fs/cd.js +71 -18
- package/dist/builtins/fs/cd.js.map +1 -1
- package/dist/builtins/fs/configWrite.d.ts +24 -8
- package/dist/builtins/fs/configWrite.js +77 -36
- package/dist/builtins/fs/configWrite.js.map +1 -1
- package/dist/builtins/fs/cp.d.ts +39 -4
- package/dist/builtins/fs/cp.js +120 -55
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/du.d.ts +59 -33
- package/dist/builtins/fs/du.js +111 -79
- package/dist/builtins/fs/du.js.map +1 -1
- package/dist/builtins/fs/edit.d.ts +19 -4
- package/dist/builtins/fs/edit.js +77 -16
- package/dist/builtins/fs/edit.js.map +1 -1
- package/dist/builtins/fs/find.d.ts +25 -0
- package/dist/builtins/fs/find.js +76 -5
- package/dist/builtins/fs/find.js.map +1 -1
- package/dist/builtins/fs/mkdir.d.ts +28 -18
- package/dist/builtins/fs/mkdir.js +95 -66
- package/dist/builtins/fs/mkdir.js.map +1 -1
- package/dist/builtins/fs/mv.d.ts +34 -4
- package/dist/builtins/fs/mv.js +129 -64
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/pull.args.d.ts +56 -17
- package/dist/builtins/fs/pull.args.js +16 -66
- package/dist/builtins/fs/pull.args.js.map +1 -1
- package/dist/builtins/fs/pull.d.ts +62 -0
- package/dist/builtins/fs/pull.js +86 -22
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/fs/pwd.d.ts +19 -5
- package/dist/builtins/fs/pwd.js +62 -8
- package/dist/builtins/fs/pwd.js.map +1 -1
- package/dist/builtins/fs/rm.d.ts +58 -21
- package/dist/builtins/fs/rm.js +99 -82
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/fs/rmdir.d.ts +29 -11
- package/dist/builtins/fs/rmdir.js +87 -36
- package/dist/builtins/fs/rmdir.js.map +1 -1
- package/dist/builtins/fs/touch.d.ts +44 -9
- package/dist/builtins/fs/touch.js +91 -27
- package/dist/builtins/fs/touch.js.map +1 -1
- package/dist/builtins/fs/tree.d.ts +36 -9
- package/dist/builtins/fs/tree.js +126 -36
- package/dist/builtins/fs/tree.js.map +1 -1
- package/dist/builtins/fs/upload.d.ts +22 -3
- package/dist/builtins/fs/upload.js +82 -14
- package/dist/builtins/fs/upload.js.map +1 -1
- package/dist/builtins/fs/xattr.args.d.ts +12 -33
- package/dist/builtins/fs/xattr.args.js +17 -95
- package/dist/builtins/fs/xattr.args.js.map +1 -1
- package/dist/builtins/fs/xattr.d.ts +98 -8
- package/dist/builtins/fs/xattr.js +163 -24
- package/dist/builtins/fs/xattr.js.map +1 -1
- package/dist/builtins/games/bytes.d.ts +201 -5
- package/dist/builtins/games/bytes.js +255 -54
- package/dist/builtins/games/bytes.js.map +1 -1
- package/dist/builtins/games/chimes.d.ts +180 -3
- package/dist/builtins/games/chimes.js +203 -26
- package/dist/builtins/games/chimes.js.map +1 -1
- package/dist/builtins/games/chrislab.d.ts +101 -3
- package/dist/builtins/games/chrislab.js +117 -17
- package/dist/builtins/games/chrislab.js.map +1 -1
- package/dist/builtins/games/cowsay.d.ts +93 -2
- package/dist/builtins/games/cowsay.js +90 -31
- package/dist/builtins/games/cowsay.js.map +1 -1
- package/dist/builtins/games/figlet.d.ts +70 -2
- package/dist/builtins/games/figlet.js +83 -6
- package/dist/builtins/games/figlet.js.map +1 -1
- package/dist/builtins/games/lab.d.ts +104 -5
- package/dist/builtins/games/lab.js +144 -6
- package/dist/builtins/games/lab.js.map +1 -1
- package/dist/builtins/games/lolcat.d.ts +61 -1
- package/dist/builtins/games/lolcat.js +59 -24
- package/dist/builtins/games/lolcat.js.map +1 -1
- package/dist/builtins/games/morse.d.ts +36 -1
- package/dist/builtins/games/morse.js +50 -2
- package/dist/builtins/games/morse.js.map +1 -1
- package/dist/builtins/games/numbers.d.ts +241 -5
- package/dist/builtins/games/numbers.js +298 -23
- package/dist/builtins/games/numbers.js.map +1 -1
- package/dist/builtins/games/play.d.ts +96 -6
- package/dist/builtins/games/play.js +137 -6
- package/dist/builtins/games/play.js.map +1 -1
- package/dist/builtins/games/qr.d.ts +40 -1
- package/dist/builtins/games/qr.js +51 -2
- package/dist/builtins/games/qr.js.map +1 -1
- package/dist/builtins/games/show.d.ts +131 -6
- package/dist/builtins/games/show.js +208 -20
- package/dist/builtins/games/show.js.map +1 -1
- package/dist/builtins/games/sky.d.ts +178 -4
- package/dist/builtins/games/sky.js +228 -12
- package/dist/builtins/games/sky.js.map +1 -1
- package/dist/builtins/games/text.d.ts +258 -7
- package/dist/builtins/games/text.js +310 -29
- package/dist/builtins/games/text.js.map +1 -1
- package/dist/builtins/games/trek.d.ts +67 -3
- package/dist/builtins/games/trek.js +63 -10
- package/dist/builtins/games/trek.js.map +1 -1
- package/dist/builtins/games/wtf.d.ts +58 -1
- package/dist/builtins/games/wtf.js +67 -6
- package/dist/builtins/games/wtf.js.map +1 -1
- package/dist/builtins/help.d.ts +38 -2
- package/dist/builtins/help.js +76 -769
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/net/connect.d.ts +36 -3
- package/dist/builtins/net/connect.js +84 -26
- package/dist/builtins/net/connect.js.map +1 -1
- package/dist/builtins/net/cubepath.d.ts +49 -5
- package/dist/builtins/net/cubepath.js +69 -27
- package/dist/builtins/net/cubepath.js.map +1 -1
- package/dist/builtins/net/logout.d.ts +13 -4
- package/dist/builtins/net/logout.js +49 -3
- package/dist/builtins/net/logout.js.map +1 -1
- package/dist/builtins/net/netstat.d.ts +29 -4
- package/dist/builtins/net/netstat.js +64 -23
- package/dist/builtins/net/netstat.js.map +1 -1
- package/dist/builtins/net/pacs.d.ts +169 -15
- package/dist/builtins/net/pacs.js +92 -33
- package/dist/builtins/net/pacs.js.map +1 -1
- package/dist/builtins/net/query.args.d.ts +95 -0
- package/dist/builtins/net/query.args.js +26 -0
- package/dist/builtins/net/query.args.js.map +1 -0
- package/dist/builtins/net/query.d.ts +98 -5
- package/dist/builtins/net/query.js +89 -83
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/net/status.d.ts +5 -3
- package/dist/builtins/net/status.js +5 -12
- package/dist/builtins/net/status.js.map +1 -1
- package/dist/builtins/parametersofplugin.d.ts +82 -3
- package/dist/builtins/parametersofplugin.js +79 -23
- package/dist/builtins/parametersofplugin.js.map +1 -1
- package/dist/builtins/proc.d.ts +210 -3
- package/dist/builtins/proc.js +210 -119
- package/dist/builtins/proc.js.map +1 -1
- package/dist/builtins/res/compute.d.ts +67 -3
- package/dist/builtins/res/compute.js +121 -35
- package/dist/builtins/res/compute.js.map +1 -1
- package/dist/builtins/res/dicom.d.ts +52 -3
- package/dist/builtins/res/dicom.js +82 -34
- package/dist/builtins/res/dicom.js.map +1 -1
- package/dist/builtins/res/expect.d.ts +52 -3
- package/dist/builtins/res/expect.js +92 -29
- package/dist/builtins/res/expect.js.map +1 -1
- package/dist/builtins/res/feed.d.ts +475 -3
- package/dist/builtins/res/feed.js +253 -158
- package/dist/builtins/res/feed.js.map +1 -1
- package/dist/builtins/res/files.d.ts +517 -3
- package/dist/builtins/res/files.js +124 -44
- package/dist/builtins/res/files.js.map +1 -1
- package/dist/builtins/res/gather.d.ts +113 -3
- package/dist/builtins/res/gather.js +153 -44
- package/dist/builtins/res/gather.js.map +1 -1
- package/dist/builtins/res/gather.process.d.ts +27 -19
- package/dist/builtins/res/gather.process.js +29 -59
- package/dist/builtins/res/gather.process.js.map +1 -1
- package/dist/builtins/res/group.d.ts +284 -3
- package/dist/builtins/res/group.js +147 -76
- package/dist/builtins/res/group.js.map +1 -1
- package/dist/builtins/res/image.d.ts +30 -2
- package/dist/builtins/res/image.js +62 -10
- package/dist/builtins/res/image.js.map +1 -1
- package/dist/builtins/res/play.d.ts +71 -9
- package/dist/builtins/res/play.js +124 -82
- package/dist/builtins/res/play.js.map +1 -1
- package/dist/builtins/res/plugininstance.d.ts +307 -2
- package/dist/builtins/res/plugininstance.js +122 -50
- package/dist/builtins/res/plugininstance.js.map +1 -1
- package/dist/builtins/res/pluginmeta.d.ts +244 -2
- package/dist/builtins/res/pluginmeta.js +98 -40
- package/dist/builtins/res/pluginmeta.js.map +1 -1
- package/dist/builtins/res/record.d.ts +37 -3
- package/dist/builtins/res/record.js +127 -57
- package/dist/builtins/res/record.js.map +1 -1
- package/dist/builtins/res/resourceList.d.ts +136 -0
- package/dist/builtins/res/resourceList.js +51 -0
- package/dist/builtins/res/resourceList.js.map +1 -0
- package/dist/builtins/res/tag.d.ts +244 -3
- package/dist/builtins/res/tag.js +97 -41
- package/dist/builtins/res/tag.js.map +1 -1
- package/dist/builtins/res/user.d.ts +122 -3
- package/dist/builtins/res/user.js +83 -21
- package/dist/builtins/res/user.js.map +1 -1
- package/dist/builtins/res/workflow.d.ts +244 -2
- package/dist/builtins/res/workflow.js +97 -40
- package/dist/builtins/res/workflow.js.map +1 -1
- package/dist/builtins/store.d.ts +85 -3
- package/dist/builtins/store.js +135 -68
- package/dist/builtins/store.js.map +1 -1
- package/dist/builtins/sys/apropos.d.ts +80 -5
- package/dist/builtins/sys/apropos.js +121 -15
- package/dist/builtins/sys/apropos.js.map +1 -1
- package/dist/builtins/sys/cal.d.ts +44 -5
- package/dist/builtins/sys/cal.js +57 -10
- package/dist/builtins/sys/cal.js.map +1 -1
- package/dist/builtins/sys/command.d.ts +20 -0
- package/dist/builtins/sys/command.js +31 -0
- package/dist/builtins/sys/command.js.map +1 -1
- package/dist/builtins/sys/context.d.ts +13 -3
- package/dist/builtins/sys/context.js +51 -4
- package/dist/builtins/sys/context.js.map +1 -1
- package/dist/builtins/sys/date.d.ts +56 -5
- package/dist/builtins/sys/date.js +63 -9
- package/dist/builtins/sys/date.js.map +1 -1
- package/dist/builtins/sys/echo.d.ts +63 -2
- package/dist/builtins/sys/echo.js +87 -8
- package/dist/builtins/sys/echo.js.map +1 -1
- package/dist/builtins/sys/fortune.d.ts +27 -2
- package/dist/builtins/sys/fortune.js +44 -2
- package/dist/builtins/sys/fortune.js.map +1 -1
- package/dist/builtins/sys/grep.d.ts +245 -11
- package/dist/builtins/sys/grep.js +418 -131
- package/dist/builtins/sys/grep.js.map +1 -1
- package/dist/builtins/sys/joblets.d.ts +66 -7
- package/dist/builtins/sys/joblets.js +101 -14
- package/dist/builtins/sys/joblets.js.map +1 -1
- package/dist/builtins/sys/motd.d.ts +37 -3
- package/dist/builtins/sys/motd.js +49 -8
- package/dist/builtins/sys/motd.js.map +1 -1
- package/dist/builtins/sys/notes.d.ts +75 -3
- package/dist/builtins/sys/notes.js +90 -29
- package/dist/builtins/sys/notes.js.map +1 -1
- package/dist/builtins/sys/physicalmode.d.ts +24 -3
- package/dist/builtins/sys/physicalmode.js +68 -14
- package/dist/builtins/sys/physicalmode.js.map +1 -1
- package/dist/builtins/sys/tasks.d.ts +74 -5
- package/dist/builtins/sys/tasks.js +102 -14
- package/dist/builtins/sys/tasks.js.map +1 -1
- package/dist/builtins/sys/textFilters.d.ts +673 -41
- package/dist/builtins/sys/textFilters.js +718 -263
- package/dist/builtins/sys/textFilters.js.map +1 -1
- package/dist/builtins/sys/timing.d.ts +24 -3
- package/dist/builtins/sys/timing.js +67 -14
- package/dist/builtins/sys/timing.js.map +1 -1
- package/dist/builtins/sys/variables.d.ts +70 -4
- package/dist/builtins/sys/variables.js +103 -31
- package/dist/builtins/sys/variables.js.map +1 -1
- package/dist/builtins/sys/version.d.ts +27 -2
- package/dist/builtins/sys/version.js +48 -3
- package/dist/builtins/sys/version.js.map +1 -1
- package/dist/builtins/sys/weather.d.ts +92 -15
- package/dist/builtins/sys/weather.js +71 -45
- package/dist/builtins/sys/weather.js.map +1 -1
- package/dist/builtins/sys/whoami.d.ts +38 -18
- package/dist/builtins/sys/whoami.js +112 -8
- package/dist/builtins/sys/whoami.js.map +1 -1
- package/dist/builtins/utils.d.ts +0 -37
- package/dist/builtins/utils.js +0 -86
- package/dist/builtins/utils.js.map +1 -1
- package/dist/chris/chrisCommands.js +58 -152
- package/dist/chris/chrisCommands.js.map +1 -1
- package/dist/chris/commandFallback.d.ts +12 -0
- package/dist/chris/commandFallback.js +47 -0
- package/dist/chris/commandFallback.js.map +1 -1
- package/dist/chris/filesystem.js +7 -5
- package/dist/chris/filesystem.js.map +1 -1
- package/dist/chris/help.js +0 -1018
- package/dist/chris/help.js.map +1 -1
- package/dist/chris/kinds.d.ts +21 -0
- package/dist/chris/kinds.js +114 -2
- package/dist/chris/kinds.js.map +1 -1
- package/dist/chris/mounts.d.ts +4 -4
- package/dist/chris/mounts.js +9 -16
- package/dist/chris/mounts.js.map +1 -1
- package/dist/chris/navigation.d.ts +2 -3
- package/dist/chris/navigation.js +6 -20
- package/dist/chris/navigation.js.map +1 -1
- package/dist/chris/pacsResources.d.ts +259 -0
- package/dist/chris/pacsResources.js +168 -0
- package/dist/chris/pacsResources.js.map +1 -0
- package/dist/core/commandDeclaration.d.ts +97 -7
- package/dist/core/commandDeclaration.js +21 -0
- package/dist/core/commandDeclaration.js.map +1 -1
- package/dist/core/commandParse.js +65 -17
- package/dist/core/commandParse.js.map +1 -1
- package/dist/core/commandRegistry.d.ts +4 -3
- package/dist/core/commandRegistry.js +36 -8
- package/dist/core/commandRegistry.js.map +1 -1
- package/dist/core/commandSchema.js +5 -2
- package/dist/core/commandSchema.js.map +1 -1
- package/dist/core/commandUsage.d.ts +15 -0
- package/dist/core/commandUsage.js +59 -7
- package/dist/core/commandUsage.js.map +1 -1
- package/dist/core/coreCommands.js +63 -212
- package/dist/core/coreCommands.js.map +1 -1
- package/dist/core/paths.d.ts +29 -1
- package/dist/core/paths.js +15 -2
- package/dist/core/paths.js.map +1 -1
- package/dist/core/preprocess.d.ts +3 -4
- package/dist/core/preprocess.js +4 -5
- package/dist/core/preprocess.js.map +1 -1
- package/dist/lib/completer/declared.js +7 -4
- package/dist/lib/completer/declared.js.map +1 -1
- package/dist/lib/completer/index.js +2 -7
- package/dist/lib/completer/index.js.map +1 -1
- package/dist/lib/parser.d.ts +0 -8
- package/dist/lib/parser.js +0 -11
- package/dist/lib/parser.js.map +1 -1
- package/dist/lib/vfs/vfs.d.ts +2 -1
- package/dist/lib/vfs/vfs.js +5 -4
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/dist/notes.json +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/builtins/fs/upload.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/builtins/fs/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +1,18 @@
|
|
|
1
1
|
/** The one attribute a feed carries. */
|
|
2
2
|
export declare const XATTR_TAG: string;
|
|
3
|
-
/**
|
|
4
|
-
export declare const
|
|
5
|
-
/** How `getfattr` is spelled. */
|
|
6
|
-
export declare const GETFATTR_USAGE: string;
|
|
7
|
-
/** A parsed `setfattr` invocation. */
|
|
8
|
-
export interface SetfattrArgs {
|
|
9
|
-
/** Set a value (`-n`), or remove (`-x`). */
|
|
10
|
-
mode: 'set' | 'remove';
|
|
11
|
-
/** The value to set or remove; null removes every value (`-x` alone). */
|
|
12
|
-
value: string | null;
|
|
13
|
-
paths: string[];
|
|
14
|
-
error: string | null;
|
|
15
|
-
}
|
|
16
|
-
/** A parsed `getfattr` invocation. */
|
|
17
|
-
export interface GetfattrArgs {
|
|
18
|
-
paths: string[];
|
|
19
|
-
error: string | null;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Reads a `setfattr` invocation. Unknown flags and attributes are refused by name.
|
|
23
|
-
*
|
|
24
|
-
* @param args - The tokens after the verb.
|
|
25
|
-
* @returns The parsed invocation, its error set when it is wrong.
|
|
26
|
-
*/
|
|
27
|
-
export declare function setfattrArgs_parse(args: ReadonlyArray<string>): SetfattrArgs;
|
|
28
|
-
/**
|
|
29
|
-
* Reads a `getfattr` invocation. `-n tag` is accepted (it is the only
|
|
30
|
-
* attribute); `-d` (dump all) reads the same.
|
|
31
|
-
*
|
|
32
|
-
* @param args - The tokens after the verb.
|
|
33
|
-
* @returns The parsed invocation, its error set when it is wrong.
|
|
34
|
-
*/
|
|
35
|
-
export declare function getfattrArgs_parse(args: ReadonlyArray<string>): GetfattrArgs;
|
|
3
|
+
/** The names that attribute answers to: `tag`, and `user.tag` as Linux namespaces it. */
|
|
4
|
+
export declare const XATTR_NAMES: readonly ['tag', 'user.tag'];
|
|
36
5
|
/**
|
|
37
6
|
* The feed a path names: an id, a `feed_N`, a path through `/feeds/` as
|
|
38
7
|
* setfacl reads it, or the projection `/proc/jobs/feed_N`.
|
|
39
8
|
*
|
|
40
9
|
* @param target - The path as typed.
|
|
41
10
|
* @returns The feed id, or null.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* xattrTarget_resolve('/proc/jobs/feed_12'); // 12
|
|
15
|
+
* ```
|
|
42
16
|
*/
|
|
43
17
|
export declare function xattrTarget_resolve(target: string): number | null;
|
|
44
18
|
/**
|
|
@@ -48,5 +22,10 @@ export declare function xattrTarget_resolve(target: string): number | null;
|
|
|
48
22
|
* @param path - The path as named.
|
|
49
23
|
* @param tags - The tag names.
|
|
50
24
|
* @returns The block.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* xattr_render('feed_12', ['urgent']); // '# file: feed_12\ntag="urgent"'
|
|
29
|
+
* ```
|
|
51
30
|
*/
|
|
52
31
|
export declare function xattr_render(path: string, tags: ReadonlyArray<string>): string;
|
|
@@ -1,117 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @file
|
|
2
|
+
* @file The words of a feed's tags: the one attribute, the targets a feed
|
|
3
|
+
* is named by, and `getfattr`'s dump.
|
|
3
4
|
*
|
|
4
5
|
* A feed's tags are, in POSIX terms, an extended attribute: `setfattr -n
|
|
5
6
|
* tag -v urgent feed_12` hangs one, `getfattr feed_12` reads them. One
|
|
6
7
|
* attribute exists, `tag` (also spelled `user.tag`), and it holds many
|
|
7
8
|
* values — CUBE's tags on the feed.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
10
|
+
* The line itself is parsed against each command's declaration
|
|
11
|
+
* (`xattr.ts`). Dependency-free, as `acl.args.ts` is, so these are tested
|
|
12
|
+
* without the engine.
|
|
11
13
|
*
|
|
12
14
|
* @module
|
|
13
15
|
*/
|
|
14
16
|
import { aclTarget_resolve } from './acl.args.js';
|
|
15
17
|
/** The one attribute a feed carries. */
|
|
16
18
|
export const XATTR_TAG = 'tag';
|
|
17
|
-
/**
|
|
18
|
-
export const
|
|
19
|
-
/** How `getfattr` is spelled. */
|
|
20
|
-
export const GETFATTR_USAGE = 'getfattr: usage: getfattr [-n tag] <path>...';
|
|
21
|
-
/**
|
|
22
|
-
* Whether an attribute name is the one a feed carries.
|
|
23
|
-
*
|
|
24
|
-
* @param name - The name as typed.
|
|
25
|
-
* @returns True for `tag` and `user.tag`.
|
|
26
|
-
*/
|
|
27
|
-
function name_isTag(name) {
|
|
28
|
-
return name === XATTR_TAG || name === `user.${XATTR_TAG}`;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Reads a `setfattr` invocation. Unknown flags and attributes are refused by name.
|
|
32
|
-
*
|
|
33
|
-
* @param args - The tokens after the verb.
|
|
34
|
-
* @returns The parsed invocation, its error set when it is wrong.
|
|
35
|
-
*/
|
|
36
|
-
export function setfattrArgs_parse(args) {
|
|
37
|
-
let mode = null;
|
|
38
|
-
let name = null;
|
|
39
|
-
let value = null;
|
|
40
|
-
const paths = [];
|
|
41
|
-
const fail = (error) => ({ mode: 'set', value: null, paths: [], error });
|
|
42
|
-
for (let i = 0; i < args.length; i += 1) {
|
|
43
|
-
const token = args[i] ?? '';
|
|
44
|
-
if (token === '-n' || token === '--name' || token === '-x' || token === '--remove') {
|
|
45
|
-
const given = args[i + 1];
|
|
46
|
-
if (given === undefined)
|
|
47
|
-
return fail(`setfattr: option '${token}' requires an argument\n${SETFATTR_USAGE}`);
|
|
48
|
-
mode = token === '-n' || token === '--name' ? 'set' : 'remove';
|
|
49
|
-
name = given;
|
|
50
|
-
i += 1;
|
|
51
|
-
}
|
|
52
|
-
else if (token === '-v' || token === '--value') {
|
|
53
|
-
const given = args[i + 1];
|
|
54
|
-
if (given === undefined)
|
|
55
|
-
return fail(`setfattr: option '${token}' requires an argument\n${SETFATTR_USAGE}`);
|
|
56
|
-
value = given;
|
|
57
|
-
i += 1;
|
|
58
|
-
}
|
|
59
|
-
else if (token.startsWith('-')) {
|
|
60
|
-
return fail(`setfattr: invalid option -- '${token.replace(/^-+/, '')}'\n${SETFATTR_USAGE}`);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
paths.push(token);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (mode === null || name === null)
|
|
67
|
-
return fail(SETFATTR_USAGE);
|
|
68
|
-
if (!name_isTag(name))
|
|
69
|
-
return fail(`setfattr: ${name}: Operation not supported (a feed carries one attribute, tag)`);
|
|
70
|
-
if (mode === 'set' && (value === null || value.trim() === ''))
|
|
71
|
-
return fail(`setfattr: -n ${name} needs -v <value>\n${SETFATTR_USAGE}`);
|
|
72
|
-
if (paths.length === 0)
|
|
73
|
-
return fail(SETFATTR_USAGE);
|
|
74
|
-
return { mode, value: value === null ? null : value.trim(), paths, error: null };
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Reads a `getfattr` invocation. `-n tag` is accepted (it is the only
|
|
78
|
-
* attribute); `-d` (dump all) reads the same.
|
|
79
|
-
*
|
|
80
|
-
* @param args - The tokens after the verb.
|
|
81
|
-
* @returns The parsed invocation, its error set when it is wrong.
|
|
82
|
-
*/
|
|
83
|
-
export function getfattrArgs_parse(args) {
|
|
84
|
-
const paths = [];
|
|
85
|
-
for (let i = 0; i < args.length; i += 1) {
|
|
86
|
-
const token = args[i] ?? '';
|
|
87
|
-
if (token === '-n' || token === '--name') {
|
|
88
|
-
const given = args[i + 1];
|
|
89
|
-
if (given === undefined)
|
|
90
|
-
return { paths: [], error: `getfattr: option '${token}' requires an argument\n${GETFATTR_USAGE}` };
|
|
91
|
-
if (!name_isTag(given))
|
|
92
|
-
return { paths: [], error: `getfattr: ${given}: No such attribute (a feed carries one attribute, tag)` };
|
|
93
|
-
i += 1;
|
|
94
|
-
}
|
|
95
|
-
else if (token === '-d' || token === '--dump') {
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
else if (token.startsWith('-')) {
|
|
99
|
-
return { paths: [], error: `getfattr: invalid option -- '${token.replace(/^-+/, '')}'\n${GETFATTR_USAGE}` };
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
paths.push(token);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (paths.length === 0)
|
|
106
|
-
return { paths: [], error: GETFATTR_USAGE };
|
|
107
|
-
return { paths, error: null };
|
|
108
|
-
}
|
|
19
|
+
/** The names that attribute answers to: `tag`, and `user.tag` as Linux namespaces it. */
|
|
20
|
+
export const XATTR_NAMES = ['tag', 'user.tag'];
|
|
109
21
|
/**
|
|
110
22
|
* The feed a path names: an id, a `feed_N`, a path through `/feeds/` as
|
|
111
23
|
* setfacl reads it, or the projection `/proc/jobs/feed_N`.
|
|
112
24
|
*
|
|
113
25
|
* @param target - The path as typed.
|
|
114
26
|
* @returns The feed id, or null.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* xattrTarget_resolve('/proc/jobs/feed_12'); // 12
|
|
31
|
+
* ```
|
|
115
32
|
*/
|
|
116
33
|
export function xattrTarget_resolve(target) {
|
|
117
34
|
const held = aclTarget_resolve(target);
|
|
@@ -127,6 +44,11 @@ export function xattrTarget_resolve(target) {
|
|
|
127
44
|
* @param path - The path as named.
|
|
128
45
|
* @param tags - The tag names.
|
|
129
46
|
* @returns The block.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* xattr_render('feed_12', ['urgent']); // '# file: feed_12\ntag="urgent"'
|
|
51
|
+
* ```
|
|
130
52
|
*/
|
|
131
53
|
export function xattr_render(path, tags) {
|
|
132
54
|
return [`# file: ${path}`, ...tags.map((tag) => `${XATTR_TAG}="${tag.replace(/"/g, '\\"')}"`)].join('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xattr.args.js","sourceRoot":"","sources":["../../../src/builtins/fs/xattr.args.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"xattr.args.js","sourceRoot":"","sources":["../../../src/builtins/fs/xattr.args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,wCAAwC;AACxC,MAAM,CAAC,MAAM,SAAS,GAAW,KAAK,CAAC;AAEvC,yFAAyF;AACzF,MAAM,CAAC,MAAM,WAAW,GAAiC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAE7E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,IAAI,GAAkB,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,SAAS,GAA4B,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtF,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAA2B;IACpE,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5H,CAAC"}
|
|
@@ -1,17 +1,107 @@
|
|
|
1
1
|
import { CommandEnvelope } from '@fnndsc/menu';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* `getfattr [-d] [-n tag] <path>…`: the declaration.
|
|
4
4
|
*
|
|
5
|
-
* @
|
|
6
|
-
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* commands_register({ declarations: [getfattrCommand] }, 'backend');
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export declare const getfattrCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
|
|
11
|
+
readonly operands: readonly [{
|
|
12
|
+
readonly name: "path";
|
|
13
|
+
readonly kind: "cfsPath";
|
|
14
|
+
readonly repeat: true;
|
|
15
|
+
readonly glob: true;
|
|
16
|
+
readonly summary: "The feeds: an id, feed_N, any path through /feeds/, or /proc/jobs/feed_N";
|
|
17
|
+
}];
|
|
18
|
+
readonly options: {
|
|
19
|
+
readonly name: {
|
|
20
|
+
readonly short: "n";
|
|
21
|
+
readonly long: "name";
|
|
22
|
+
readonly summary: "The attribute to read (only tag exists)";
|
|
23
|
+
readonly value: {
|
|
24
|
+
readonly name: "name";
|
|
25
|
+
readonly kind: "enum";
|
|
26
|
+
readonly values: readonly ["tag", "user.tag"];
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
readonly dump: {
|
|
30
|
+
readonly short: "d";
|
|
31
|
+
readonly long: "dump";
|
|
32
|
+
readonly summary: "Dump every attribute (the default)";
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* `getfattr` over words already split: the declaration's parse and handler.
|
|
38
|
+
*
|
|
39
|
+
* @param args - The words after `getfattr`.
|
|
40
|
+
* @returns The tags, or the refusal of a bad line.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* await builtin_getfattr(['feed_12']);
|
|
45
|
+
* ```
|
|
7
46
|
*/
|
|
8
47
|
export declare function builtin_getfattr(args: string[]): Promise<CommandEnvelope>;
|
|
9
48
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
49
|
+
* `setfattr -n tag -v <value> <path>… | -x tag [-v <value>] <path>…`: the declaration.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* commands_register({ declarations: [setfattrCommand] }, 'backend');
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare const setfattrCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
|
|
57
|
+
readonly operands: readonly [{
|
|
58
|
+
readonly name: "path";
|
|
59
|
+
readonly kind: "cfsPath";
|
|
60
|
+
readonly repeat: true;
|
|
61
|
+
readonly glob: true;
|
|
62
|
+
readonly summary: "The feeds: an id, feed_N, any path through /feeds/, or /proc/jobs/feed_N";
|
|
63
|
+
}];
|
|
64
|
+
readonly options: {
|
|
65
|
+
readonly name: {
|
|
66
|
+
readonly short: "n";
|
|
67
|
+
readonly long: "name";
|
|
68
|
+
readonly summary: "The attribute to set (only tag exists)";
|
|
69
|
+
readonly value: {
|
|
70
|
+
readonly name: "name";
|
|
71
|
+
readonly kind: "enum";
|
|
72
|
+
readonly values: readonly ["tag", "user.tag"];
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
readonly value: {
|
|
76
|
+
readonly short: "v";
|
|
77
|
+
readonly long: "value";
|
|
78
|
+
readonly summary: "The tag";
|
|
79
|
+
readonly value: {
|
|
80
|
+
readonly name: "value";
|
|
81
|
+
readonly kind: "word";
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
readonly remove: {
|
|
85
|
+
readonly short: "x";
|
|
86
|
+
readonly long: "remove";
|
|
87
|
+
readonly summary: "Remove the tag given by -v, or every tag without -v";
|
|
88
|
+
readonly value: {
|
|
89
|
+
readonly name: "name";
|
|
90
|
+
readonly kind: "enum";
|
|
91
|
+
readonly values: readonly ["tag", "user.tag"];
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
}>;
|
|
96
|
+
/**
|
|
97
|
+
* `setfattr` over words already split: the declaration's parse and handler.
|
|
98
|
+
*
|
|
99
|
+
* @param args - The words after `setfattr`.
|
|
100
|
+
* @returns An envelope, empty on success, or the refusal of a bad line.
|
|
13
101
|
*
|
|
14
|
-
* @
|
|
15
|
-
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```ts
|
|
104
|
+
* await builtin_setfattr(['-x', 'tag', 'feed_12']);
|
|
105
|
+
* ```
|
|
16
106
|
*/
|
|
17
107
|
export declare function builtin_setfattr(args: string[]): Promise<CommandEnvelope>;
|
|
@@ -2,16 +2,42 @@
|
|
|
2
2
|
* @file `setfattr` and `getfattr` — a feed's tags.
|
|
3
3
|
*
|
|
4
4
|
* CUBE's freeform tags on a feed are, in POSIX terms, the values of one
|
|
5
|
-
* extended attribute, `tag`.
|
|
6
|
-
*
|
|
5
|
+
* extended attribute, `tag`. Each command is declared in one record: the
|
|
6
|
+
* attribute's name is one of the words it answers to, the feeds are path
|
|
7
|
+
* operands that glob. The capability lives in the kernel (`feedTags_list`,
|
|
8
|
+
* `feedTag_add`, `feedTag_remove`); this is its shell face.
|
|
9
|
+
*
|
|
10
|
+
* Key components:
|
|
11
|
+
* - setfattrCommand, getfattrCommand: the declarations.
|
|
12
|
+
* - builtin_setfattr, builtin_getfattr: each declaration run over words already split.
|
|
13
|
+
*
|
|
14
|
+
* Typical usage:
|
|
15
|
+
* ```ts
|
|
16
|
+
* await builtin_setfattr(['-n', 'tag', '-v', 'urgent', 'feed_12']);
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Dependencies: cumin's tag calls; the target and dump words (`xattr.args.ts`).
|
|
7
20
|
*
|
|
8
21
|
* @module
|
|
9
22
|
*/
|
|
23
|
+
import chalk from 'chalk';
|
|
10
24
|
import { feedTags_list, feedTag_add, feedTag_remove } from '@fnndsc/cumin';
|
|
11
|
-
import {
|
|
25
|
+
import { xattrTarget_resolve, xattr_render } from './xattr.args.js';
|
|
12
26
|
import { error_stripDebugPrefix } from '../utils.js';
|
|
13
27
|
import { errorStack } from '@fnndsc/fond';
|
|
14
28
|
import { envelope_ok, envelope_error } from '@fnndsc/menu';
|
|
29
|
+
import { command_declare } from '../../core/commandDeclaration.js';
|
|
30
|
+
import { declaredCommand_run } from '../../core/commandParse.js';
|
|
31
|
+
import { commandUsage_render } from '../../core/commandUsage.js';
|
|
32
|
+
import { exitCode_set } from '../../core/handlerRun.js';
|
|
33
|
+
/** The feeds a line names, as both commands take them. */
|
|
34
|
+
const FEEDS_OPERAND = {
|
|
35
|
+
name: 'path',
|
|
36
|
+
kind: 'cfsPath',
|
|
37
|
+
repeat: true,
|
|
38
|
+
glob: true,
|
|
39
|
+
summary: 'The feeds: an id, feed_N, any path through /feeds/, or /proc/jobs/feed_N',
|
|
40
|
+
};
|
|
15
41
|
/**
|
|
16
42
|
* A refusal, on a line of its own.
|
|
17
43
|
*
|
|
@@ -31,19 +57,24 @@ function error_said(fallback) {
|
|
|
31
57
|
const error = errorStack.stack_pop();
|
|
32
58
|
return error?.message ?? fallback;
|
|
33
59
|
}
|
|
60
|
+
/** What a `getfattr` line may hold. */
|
|
61
|
+
const GETFATTR_GRAMMAR = {
|
|
62
|
+
operands: [FEEDS_OPERAND],
|
|
63
|
+
options: {
|
|
64
|
+
name: { short: 'n', long: 'name', summary: 'The attribute to read (only tag exists)', value: { name: 'name', kind: 'enum', values: ['tag', 'user.tag'] } },
|
|
65
|
+
dump: { short: 'd', long: 'dump', summary: 'Dump every attribute (the default)' },
|
|
66
|
+
},
|
|
67
|
+
};
|
|
34
68
|
/**
|
|
35
69
|
* Reads the tags a feed wears, in `getfattr`'s dump shape.
|
|
36
70
|
*
|
|
37
|
-
* @param args -
|
|
71
|
+
* @param args - The line, parsed.
|
|
38
72
|
* @returns An envelope carrying the rendered blocks and a model of them.
|
|
39
73
|
*/
|
|
40
|
-
|
|
41
|
-
const parsed = getfattrArgs_parse(args);
|
|
42
|
-
if (parsed.error !== null)
|
|
43
|
-
return refusal(parsed.error);
|
|
74
|
+
async function getfattr_run(args) {
|
|
44
75
|
const blocks = [];
|
|
45
76
|
const model = [];
|
|
46
|
-
for (const path of
|
|
77
|
+
for (const path of args.operands.path) {
|
|
47
78
|
const feedId = xattrTarget_resolve(path);
|
|
48
79
|
if (feedId === null)
|
|
49
80
|
return refusal(`getfattr: '${path}' does not name a feed`);
|
|
@@ -56,45 +87,153 @@ export async function builtin_getfattr(args) {
|
|
|
56
87
|
}
|
|
57
88
|
return envelope_ok(`${blocks.join('\n\n')}\n`, { kind: 'fs.xattr', data: model });
|
|
58
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* `getfattr [-d] [-n tag] <path>…`: the declaration.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* commands_register({ declarations: [getfattrCommand] }, 'backend');
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export const getfattrCommand = command_declare({
|
|
99
|
+
name: 'getfattr',
|
|
100
|
+
grammar: GETFATTR_GRAMMAR,
|
|
101
|
+
help: {
|
|
102
|
+
summary: 'Show the tags a feed wears',
|
|
103
|
+
description: 'Show a feed\'s tags in getfattr\'s dump shape: a # file: line, then one tag="…" line per tag.',
|
|
104
|
+
category: 'Sharing',
|
|
105
|
+
posix: { group: 'Files', differs: 'a feed\'s tags, as extended attributes' },
|
|
106
|
+
examples: [
|
|
107
|
+
'getfattr feed_12',
|
|
108
|
+
'getfattr -n tag /home/me/feeds/feed_12',
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
// Reading a feed's tags changes nothing of the session.
|
|
112
|
+
holds: [],
|
|
113
|
+
handler: getfattr_run,
|
|
114
|
+
});
|
|
115
|
+
/**
|
|
116
|
+
* `getfattr` over words already split: the declaration's parse and handler.
|
|
117
|
+
*
|
|
118
|
+
* @param args - The words after `getfattr`.
|
|
119
|
+
* @returns The tags, or the refusal of a bad line.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* await builtin_getfattr(['feed_12']);
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
export async function builtin_getfattr(args) {
|
|
127
|
+
return declaredCommand_run(getfattrCommand, args);
|
|
128
|
+
}
|
|
129
|
+
/** What a `setfattr` line may hold. */
|
|
130
|
+
const SETFATTR_GRAMMAR = {
|
|
131
|
+
operands: [FEEDS_OPERAND],
|
|
132
|
+
options: {
|
|
133
|
+
name: { short: 'n', long: 'name', summary: 'The attribute to set (only tag exists)', value: { name: 'name', kind: 'enum', values: ['tag', 'user.tag'] } },
|
|
134
|
+
value: { short: 'v', long: 'value', summary: 'The tag', value: { name: 'value', kind: 'word' } },
|
|
135
|
+
remove: { short: 'x', long: 'remove', summary: 'Remove the tag given by -v, or every tag without -v', value: { name: 'name', kind: 'enum', values: ['tag', 'user.tag'] } },
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* A refusal of a line that says neither what to set nor what to remove, or
|
|
140
|
+
* a set without its value, with the usage.
|
|
141
|
+
*
|
|
142
|
+
* @param reason - What is missing.
|
|
143
|
+
* @returns The error envelope.
|
|
144
|
+
*/
|
|
145
|
+
function setfattrLine_refuse(reason) {
|
|
146
|
+
exitCode_set(1);
|
|
147
|
+
return envelope_error('', undefined, `${chalk.red(`setfattr: ${reason}; usage: ${commandUsage_render(setfattrCommand)}`)}\n`);
|
|
148
|
+
}
|
|
59
149
|
/**
|
|
60
150
|
* Hangs a tag on feeds (`-n tag -v <value>`), or takes one off (`-x tag -v
|
|
61
151
|
* <value>`), or takes every tag off (`-x tag`, as setfattr removes the
|
|
62
152
|
* whole attribute). Silent on success, as setfattr is; a refusal is named.
|
|
63
153
|
*
|
|
64
|
-
* @param args -
|
|
154
|
+
* @param args - The line, parsed.
|
|
65
155
|
* @returns An envelope, empty on success.
|
|
66
156
|
*/
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
70
|
-
return
|
|
157
|
+
async function setfattr_run(args) {
|
|
158
|
+
const { name, remove } = args.options;
|
|
159
|
+
if (name !== undefined && remove !== undefined)
|
|
160
|
+
return setfattrLine_refuse('-n sets and -x removes; give one');
|
|
161
|
+
if (name === undefined && remove === undefined)
|
|
162
|
+
return setfattrLine_refuse('-n tag or -x tag is needed');
|
|
163
|
+
const mode = name !== undefined ? 'set' : 'remove';
|
|
164
|
+
const value = args.options.value === undefined ? null : args.options.value.trim();
|
|
165
|
+
if (mode === 'set' && (value === null || value === ''))
|
|
166
|
+
return setfattrLine_refuse(`-n ${name ?? 'tag'} needs -v <value>`);
|
|
71
167
|
const changed = [];
|
|
72
|
-
for (const path of
|
|
168
|
+
for (const path of args.operands.path) {
|
|
73
169
|
const feedId = xattrTarget_resolve(path);
|
|
74
170
|
if (feedId === null)
|
|
75
171
|
return refusal(`setfattr: '${path}' does not name a feed`);
|
|
76
172
|
let names;
|
|
77
|
-
if (
|
|
173
|
+
if (mode === 'remove' && value === null) {
|
|
78
174
|
const held = await feedTags_list(feedId);
|
|
79
175
|
if (!held.ok)
|
|
80
176
|
return refusal(error_said(`setfattr: could not read the tags of feed ${feedId}`));
|
|
81
177
|
names = held.value.map((tag) => tag.name);
|
|
82
178
|
}
|
|
83
179
|
else {
|
|
84
|
-
names = [
|
|
180
|
+
names = [value ?? ''];
|
|
85
181
|
}
|
|
86
|
-
for (const
|
|
87
|
-
const done =
|
|
182
|
+
for (const tagName of names) {
|
|
183
|
+
const done = mode === 'set' ? await feedTag_add(feedId, tagName) : await feedTag_remove(feedId, tagName);
|
|
88
184
|
if (!done.ok) {
|
|
89
|
-
const said = error_stripDebugPrefix(error_said(`could not ${
|
|
185
|
+
const said = error_stripDebugPrefix(error_said(`could not ${mode === 'set' ? 'add' : 'remove'} tag ${tagName}`));
|
|
90
186
|
return refusal(`setfattr: ${path}: ${said}`);
|
|
91
187
|
}
|
|
92
|
-
if (
|
|
93
|
-
return refusal(`setfattr: ${path}: tag="${
|
|
188
|
+
if (mode === 'remove' && value !== null && !done.value) {
|
|
189
|
+
return refusal(`setfattr: ${path}: tag="${tagName}": No such attribute value`);
|
|
94
190
|
}
|
|
95
|
-
changed.push({ feedId, tag:
|
|
191
|
+
changed.push({ feedId, tag: tagName, done: done.value });
|
|
96
192
|
}
|
|
97
193
|
}
|
|
98
|
-
return envelope_ok('', { kind: 'fs.xattr.changed', data: { mode
|
|
194
|
+
return envelope_ok('', { kind: 'fs.xattr.changed', data: { mode, changed } });
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* `setfattr -n tag -v <value> <path>… | -x tag [-v <value>] <path>…`: the declaration.
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```ts
|
|
201
|
+
* commands_register({ declarations: [setfattrCommand] }, 'backend');
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
export const setfattrCommand = command_declare({
|
|
205
|
+
name: 'setfattr',
|
|
206
|
+
grammar: SETFATTR_GRAMMAR,
|
|
207
|
+
help: {
|
|
208
|
+
summary: 'Hang a tag on a feed, or take it off',
|
|
209
|
+
description: 'A feed\'s tags are the values of one extended attribute, tag (also user.tag): CUBE\'s '
|
|
210
|
+
+ 'freeform labels. -n tag -v <value> hangs one of your tags (a folder under /proc/tags: '
|
|
211
|
+
+ 'mkdir /proc/tags/<name> makes a tag, and naming one that does not exist is an error); '
|
|
212
|
+
+ '-x tag -v <value> takes it off; -x tag alone takes every tag off, as '
|
|
213
|
+
+ 'setfattr removes the whole attribute. A feed is named by id, by feed_N, by any path '
|
|
214
|
+
+ 'through /feeds/, or by its projection /proc/jobs/feed_N. Silent on success.',
|
|
215
|
+
category: 'Sharing',
|
|
216
|
+
posix: { group: 'Files', differs: 'tags on a feed, as extended attributes' },
|
|
217
|
+
examples: [
|
|
218
|
+
'setfattr -n tag -v urgent feed_12',
|
|
219
|
+
'setfattr -n tag -v review feed_12 feed_13',
|
|
220
|
+
'setfattr -x tag -v urgent /proc/jobs/feed_12',
|
|
221
|
+
],
|
|
222
|
+
},
|
|
223
|
+
handler: setfattr_run,
|
|
224
|
+
});
|
|
225
|
+
/**
|
|
226
|
+
* `setfattr` over words already split: the declaration's parse and handler.
|
|
227
|
+
*
|
|
228
|
+
* @param args - The words after `setfattr`.
|
|
229
|
+
* @returns An envelope, empty on success, or the refusal of a bad line.
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* ```ts
|
|
233
|
+
* await builtin_setfattr(['-x', 'tag', 'feed_12']);
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
export async function builtin_setfattr(args) {
|
|
237
|
+
return declaredCommand_run(setfattrCommand, args);
|
|
99
238
|
}
|
|
100
239
|
//# sourceMappingURL=xattr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xattr.js","sourceRoot":"","sources":["../../../src/builtins/fs/xattr.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"xattr.js","sourceRoot":"","sources":["../../../src/builtins/fs/xattr.ts"],"names":[],"mappings":"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"}
|