Skip to content

Commit 92cdc6a

Browse files
authored
Make Add recurse into unscripted namespaces (#725)
1 parent dd67bfc commit 92cdc6a

File tree

4 files changed

+59
-36
lines changed

4 files changed

+59
-36
lines changed

StartupSession/Link/Add.aplf

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
msg←Add items;added;item;name;ns;unfound;unlinked;⎕IO;⎕ML;setconfig;opts;lines;z;type;⎕TRAP
1+
msg←{api}Add items;added;item;name;ns;unfound;unlinked;⎕IO;⎕ML;setconfig;opts;lines;z;type;⎕TRAP;unnamed
22
⎕IO ⎕ML←1 1
33
preProcessOpts ⍝ Make sure opts is a namespace
44
(msg setconfig)←Config.GetConfig opts
@@ -16,29 +16,43 @@
1616
:EndIf
1717
items←' '(≠⊆⊢)⍣(1=≡,items)⊢items
1818
items←{⊃⌽⍵}¨⎕RSI ⎕XSI∘U.ContainerNs¨items ⍝ fully qualified name
19-
added←unlinked←unfound←0⍴⊂''
19+
added←unlinked←unfound←unnamed←0⍴⊂''
2020
:For item :In items
2121
:If ~(# U.NameClass item)∊0 ¯1
2222
(ns name)←U.SplitNs item
2323
:If (⎕NC item)∊3 4
2424
z←Stop item(⎕STOP item)
2525
z←Trace item(⎕TRACE item)
2626
:EndIf
27-
28-
:If ~0∊⍴ns name Fix'' ⍝ was linked and fixed
27+
:If ~U.IsNamedRef ns⍎'⎕THIS'
28+
unnamed,←⊂ns
29+
:ElseIf ~0∊⍴ns name Fix'' ⍝ was linked and fixed
2930
added,←⊂item
31+
:If 9(0⍴⊂'')≡40 62 ⎕ATX item ⍝ unscripted namespace
32+
:If U.IsNamedNs item
33+
(added unlinked unfound unnamed),←1 Add(item,'.')∘,¨(⍎item).⎕NL-⍳9
34+
:Else
35+
unnamed,←⊂item
36+
:EndIf
37+
:EndIf
3038
:Else
3139
unlinked,←⊂item
3240
:EndIf
3341
:Else
3442
unfound,←⊂item
3543
:EndIf
3644
:EndFor
37-
msg←0⍴⊂''
38-
:If ×≢added ⋄ msg,←⊂'Added:',∊' ',¨added ⋄ :EndIf
39-
:If ×≢unlinked ⋄ msg,←⊂'Not in a linked namespace:',∊' ',¨unlinked ⋄ :EndIf
40-
:If ×≢unfound ⋄ msg,←⊂'Not found:',∊' ',¨unfound ⋄ :EndIf
41-
msg←1↓U.FmtLines msg
45+
:If 900⌶⍬
46+
:OrIf 1≢api ⍝ can be an opts ns
47+
msg←0⍴⊂''
48+
:If ×≢added ⋄ msg,←⊂'Added:',∊' ',¨added ⋄ :EndIf
49+
:If ×≢unlinked ⋄ msg,←⊂'Not in a linked namespace:',∊' ',¨unlinked ⋄ :EndIf
50+
:If ×≢unfound ⋄ msg,←⊂'Not found:',∊' ',¨unfound ⋄ :EndIf
51+
:If ×≢unnamed ⋄ msg,←⊂'Not properly named:',∊' ',¨unnamed ⋄ :EndIf
52+
msg←1↓U.FmtLines msg
53+
:Else
54+
msg←added unlinked unfound unnamed
55+
:EndIf
4256
:Else
4357
U.Resignal 1
4458
:EndTrap

StartupSession/Link/Utils.apln

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -779,12 +779,12 @@
779779
:EndSelect
780780
:CaseList 3.1 3.2 4.1 4.2 ⍝ tradfn/dfn/tradop/dop - v18.0 cannot get source of functions "as typed"
781781
src←⎕NULL
782-
:If IS181
782+
:If IS181
783783
:Select a←##.ALWAYSREFORMAT
784784
:CaseList 0 1
785-
:Trap 11
786-
src←(SRC_BEST SRC_NORMALIZED)[1+a] ns.⎕ATX name
787-
:EndTrap
785+
:Trap 11
786+
src←(SRC_BEST SRC_NORMALIZED)[1+a]ns.⎕ATX name
787+
:EndTrap
788788
:Case 2
789789
src←ns.⎕NR name
790790
:EndSelect
@@ -1218,7 +1218,7 @@
12181218
:If file
12191219
files←,⊂dest ⋄ oldfiles←,⊂'' ⍝ file name explicitly provided
12201220
:Else
1221-
(files oldfiles)←2↑opts(1 DetermineFileName)(count/⊂ns)names names(count/⊂'') ⍬ ⍝ names are known to exist so don't provide source
1221+
(files oldfiles)←2↑opts(1 DetermineFileName)(count/⊂ns)names names(count/⊂'')⍬ ⍝ names are known to exist so don't provide source
12221222
:If opts.(singlefile∧caseCode)
12231223
opts.dir←⊃files ⍝ replace with case coded name
12241224
:EndIf
@@ -2097,18 +2097,20 @@
20972097
opts←⊢
20982098
:Case 2 ⍝ ambivalent or dyadic
20992099
'opts'⎕NS ⍬
2100-
names←'all' 'arrays' 'beforeRead' 'beforeWrite' 'caseCode' 'codeExtensions' 'extended' 'fastLoad' 'flatten' 'forceExtensions' 'forceFilenames' 'getFilename' 'overwrite' 'proceed' 'recursive' 'source' 'sysVars' 'typeExtensions' 'watch' 'create' 'ignoreconfig' 'text'
2101-
:For name :In names
2102-
lc←0 CaseText name
2103-
:If ×args.⎕NC lc
2104-
:AndIf 0≢val←args⍎lc ⍝ UCMD interface defaults unset modifiers to 0 - so don't execute them
2105-
:Select name
2106-
:CaseList 'codeExtensions' 'customExtensions' 'typeExtensions' ⋄ val←this⍎val
2107-
:Case 'arrays' ⋄ :If val≡,'1' ⋄ val←1 ⋄ :EndIf ⍝ link issue #192 - ]link.create -arrays=1 doesn't work
2108-
:EndSelect
2109-
name opts.{⍎⍺,'←⍵'}val
2110-
:EndIf
2111-
:EndFor
2100+
:If 9=40 ⎕ATX'args' ⍝ args has been parsed
2101+
names←'all' 'arrays' 'beforeRead' 'beforeWrite' 'caseCode' 'codeExtensions' 'extended' 'fastLoad' 'flatten' 'forceExtensions' 'forceFilenames' 'getFilename' 'overwrite' 'proceed' 'recursive' 'source' 'sysVars' 'typeExtensions' 'watch' 'create' 'ignoreconfig' 'text'
2102+
:For name :In names
2103+
lc←0 CaseText name
2104+
:If ×args.⎕NC lc
2105+
:AndIf 0≢val←args⍎lc ⍝ UCMD interface defaults unset modifiers to 0 - so don't execute them
2106+
:Select name
2107+
:CaseList 'codeExtensions' 'customExtensions' 'typeExtensions' ⋄ val←this⍎val
2108+
:Case 'arrays' ⋄ :If val≡,'1' ⋄ val←1 ⋄ :EndIf ⍝ link issue #192 - ]link.create -arrays=1 doesn't work
2109+
:EndSelect
2110+
name opts.{⍎⍺,'←⍵'}val
2111+
:EndIf
2112+
:EndFor
2113+
:EndIf
21122114
:EndSelect
21132115
:Trap debug↓0 ⍝ link issue #217
21142116
⍝ must not use :With because of link issue #163

Test/test_add.aplf

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
⍝ Add multiple variables while simultaneously defining them
3737
⎕CS name
3838
a←1
39-
z←⎕SE.Link.Add 'a' ⍝ Test scalar name - issue #688
39+
z←⎕SE.Link.Add'a' ⍝ Test scalar name - issue #688
4040
z←⎕SE.Link.Add'b c←2 3'
4141
⎕CS here
4242
assert'''123''≡∊{⊃⎕NGET(''',folder,'/'',⍵,''.apla'')1}¨''abc''' ⍝ result is actually a vector of vectors of vectors
@@ -47,5 +47,11 @@
4747
⎕CS here
4848
assert'''121 2''≡∊{⊃⎕NGET(''',folder,'/'',⍵,''.apla'')1}¨''abc''' ⍝ 1 2 (1 2)
4949

50+
⍝ Add children
51+
'sub1.sub2'ns.⎕NS ⍬
52+
2 ns.sub1.sub2.⎕FIX src←,⊂'foo←{ five }'
53+
z←⎕SE.Link.Add name,'.sub1'
54+
assert'src≡⊃⎕NGET''',folder,'/sub1/sub2/foo.aplf'' 1'
55+
5056
CleanUp folder name
5157
ok←1

Test/test_bugs.aplf

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
ok←test_bugs(folder name);engine;foo;newbody;nr;opts;props;ref;root;search;server;src;src2;sub;todelete;unlikelyclass;unlikelyfile;unlikelyname;var;warn;z;f;b
22
⍝ Github issues
33
name ⎕NS''
4-
QMKDIR Retry⊢folder ⍝ folder must be non-existent
4+
3 ⎕NDELETE folder ⍝ folder must be non-existent
5+
QMKDIR Retry⊢folder
56

67
⍝ link issue #335
78
z←name'abc'⎕SE.Link.Fix,⊂'[1⋄2⋄3]'
@@ -71,18 +72,18 @@
7172
z←LinkCreate'#.unlikelyname.sub'folder
7273
assert'3=CountLinks'
7374
props←'Namespace' '' 'Source' 'Files'
74-
z←{(~⍵[;1]∊IGNORE_LINKS)⌿⍵}⎕SE.Link.Status ''
75+
z←{(~⍵[;1]∊IGNORE_LINKS)⌿⍵}⎕SE.Link.Status''
7576
'link issue #142'assert'(props⍪ ''⎕SE.unlikelyname'' ''#.unlikelyname'' ''#.unlikelyname.sub'',3 3⍴''←→'' folder 1)≡z'
7677
z←{(~⍵[;1]∊IGNORE_LINKS)⌿⍵}⎕SE.Link.Status ⎕SE
7778
'link issue #142'assert'(props,[.5] ''⎕SE.unlikelyname'' ''←→'' folder 1 )≡z'
7879

7980
{}'(all:1)'⎕SE.Link.Break ⍬
8081
'link issue #284'assert'{6::1 ⋄ (⎕SE.Link.Links.ns~IGNORE_LINKS)≡,⊂''⎕SE.unlikelyname''}⍬'
8182
:If ~TESTS_LINKED
82-
{}'(all:''⎕SE'')'⎕SE.Link.Break ⍬
83-
'link issue #284'assert'{6::1 ⋄ 0=CountLinks}⍬'
83+
{}'(all:''⎕SE'')'⎕SE.Link.Break ⍬
84+
'link issue #284'assert'{6::1 ⋄ 0=CountLinks}⍬'
8485
:Else
85-
Log 'Not testing "]link.break -all=⎕SE" because ',(⍕⎕THIS),' is linked'
86+
Log'Not testing "]link.break -all=⎕SE" because ',(⍕⎕THIS),' is linked'
8687
:EndIf
8788

8889
⎕EX'⎕SE.unlikelyname' '#.unlikelyname'
@@ -212,8 +213,8 @@
212213
z←⎕SE.Link.GetItemName f←1 NTREE folder
213214
'link issue #128'assert'({⍵[⍋⍵]}z)≡({⍵[⍋⍵]} 1 NSTREE name)'
214215
:If ⎕SE.Link.U.ISWIN
215-
b←('/' ⎕R '\\')f ⍝ file names with backslashes
216-
'link issue #482' assert 'z≡⎕SE.Link.GetItemName b'
216+
b←('/'⎕R'\\')f ⍝ file names with backslashes
217+
'link issue #482'assert'z≡⎕SE.Link.GetItemName b'
217218
:EndIf
218219
z←⎕SE.Link.GetFileName'⎕SE.nope' '⎕SE.nope.nope',name∘,¨'.nope' '.sub.nope' '.nope.nope'
219220
z,←⎕SE.Link.GetItemName'/nope.aplf' '/nope/nope.aplf',folder∘,¨'/nope.nope' '/sub/nope.nope' '/nope/nope.nope'
@@ -267,7 +268,7 @@
267268
(⍎name).{⎕THIS.jsondict←⎕SE.Dyalog.Array.Deserialise ⍵}'(var:42 ⋄ list:1 2 3)' ⍝ ⎕JSON'{"var":42,"list":[1,2,3]}' hits Mantis 18652
268269
⍝'link issue #177'assertError'z←(⍎name).{⎕SE.UCMD''z←]Link.Add jsondict.list''}⍬'('Not a properly named namespace')0 ⍝ UCMD may trigger any error number
269270
z←(⍎name).{⎕SE.UCMD']Link.Add jsondict.list'}⍬
270-
'link issue #177'assert'∨/''⎕SE.Link.Add: Not a properly named namespace:''⍷z' ⍝ link issue #217 - UCMD must not error
271+
'link issue #177'assert'∨/''properly named''⍷z' ⍝ link issue #217 - UCMD must not error
271272

272273
⎕EX name,'.jsondict'
273274
{}⎕SE.Link.Break name
@@ -294,7 +295,7 @@
294295
#.jsondict←#.⎕JSON'{"var":42,"list":[1,2,3]}'
295296
⍝'link issue #177'assertError'#.{⎕SE.UCMD''z←]Link.Add jsondict.list''}⍬' 'Not a properly named namespace' 0 ⍝ UCMD may trigger any error number
296297
z←#.{⎕SE.UCMD']Link.Add jsondict.list'}⍬
297-
'link issue #177'assert'∨/''⎕SE.Link.Add: Not a properly named namespace:''⍷z' ⍝ link issue #217 - UCMD must not error
298+
'link issue #177'assert'∨/''properly named''⍷z' ⍝ link issue #217 - UCMD must not error
298299
⎕EX'#.jsondict' ⋄ '#.jsondict'⎕NS'' ⋄ #.jsondict.(var list)←42(1 2 3)
299300
z←#.{⎕SE.UCMD']Link.Add jsondict.list'}⍬
300301
'link issue #177'assert'⎕NEXISTS ''',folder,'/jsondict-0/list-0.apla'''

0 commit comments

Comments
 (0)