diff --git a/APLSource/Client/DefineRegistry.aplc b/APLSource/Client/DefineRegistry.aplc index ca308b0b4..0a6858e1e 100644 --- a/APLSource/Client/DefineRegistry.aplc +++ b/APLSource/Client/DefineRegistry.aplc @@ -35,6 +35,12 @@ :Else ns.uri←y :EndIf + '"uri": invalid data type'Assert' '=1↑0⍴∊ns.uri + :If {1=≢'^http[s]?://'⎕S 0⊣⎕C ⍵}ns.uri + :AndIf 1<+/∊ns.uri=':' + ns.(uri port)←{((1⊃⍵),':',(2⊃⍵))(3⊃⍵)}':'(≠⊆⊢)ns.uri + ns.port←⊃⊃(//)⎕VFI ns.port + :EndIf 'Invalid variables'Assert∧/(' '~¨⍨↓ns.⎕NL 2)∊varsList ⍎¨ns.{'_',⍵,'←','ns.',⍵}¨'id' 'uri' 'priority' ⍝ use private fields for reserved properties ⍎¨ns.{⍵,'←','ns.',⍵}¨varsList~'id' 'uri' 'priority' ⍝ use property setters for validation on rest @@ -145,6 +151,11 @@ ∇ r←get r←_id ∇ + ∇ set value + '"id": invalid depth'Assert 1=≡value.NewValue + '"id": invalid data type'Assert' '=1↑0⍴value.NewValue + _id←value.NewValue + ∇ :EndProperty :Property proxy diff --git a/APLSource/Client/EstablishRumbaClients.aplf b/APLSource/Client/EstablishRumbaClients.aplf index ed26e3f4c..0f5ace3fc 100644 --- a/APLSource/Client/EstablishRumbaClients.aplf +++ b/APLSource/Client/EstablishRumbaClients.aplf @@ -16,11 +16,11 @@ ∆PermanentConnections←⎕NS'' :EndIf regs←ListRegistries'' - regs←(00)⌿registries ⍝ All Registries with a priority greater than 0 - target←target[;1] + target←(registries[;RegistryIndices.priority]>0)⌿registries + target←target[;RegistryIndices.url] :ElseIf '[]'≡¯2↑⌽¯1⌽target target←ReplaceRegistryAlias target :EndIf diff --git a/APLSource/Client/GetRegistriesForBuildList.aplf b/APLSource/Client/GetRegistriesForBuildList.aplf index 053249904..23b018ad4 100644 --- a/APLSource/Client/GetRegistriesForBuildList.aplf +++ b/APLSource/Client/GetRegistriesForBuildList.aplf @@ -2,8 +2,8 @@ ⍝ Returns the URLs for all registries with a priority of greater than 0 (because we do not scan priority=0), ordered by priority. ⍝ The Registries are then pinged in order to find out whether they are up and running. Those which are not are remembered on ∆TREE.ignore buff←ListRegistries'' - buff←(buff[;4]>0)⌿buff - r←⊃¨{⍵∊0 80 443:⍺ ⋄ ({⍵↓⍨-'/'=¯1↑⍵}⍺),':',(⍕⍵),'/'}/¨↓buff[;1 3] + buff←(buff[;RegistryIndices.priority]>0)⌿buff + r←⊃¨{⍵∊0 80 443:⍺ ⋄ ({⍵↓⍨-'/'=¯1↑⍵}⍺),':',(⍕⍵),'/'}/¨↓buff[;RegistryIndices.(url port)] r~←∆TREE.ignore r←∪r ⍝Done diff --git a/APLSource/Client/ListRegistries.aplf b/APLSource/Client/ListRegistries.aplf index 112ebaf06..bc427e846 100644 --- a/APLSource/Client/ListRegistries.aplf +++ b/APLSource/Client/ListRegistries.aplf @@ -1,28 +1,27 @@ - r←{appendPort}ListRegistries type;data + r←{appendPort}ListRegistries type;data;RI ⍝ List all registries defined in the Client's config file.\\ ⍝ Returns a matrix with these columns: -⍝ * [;1] URL -⍝ * [;2] Alias -⍝ * [;3] Priority\\ -⍝ * [;4] API-key (optionally) +⍝ * [;1] Alias +⍝ * [;2] URL +⍝ * [;3] ID +⍝ * [;4] Port +⍝ * [;5] Priority +⍝ * [;6] NoCaching +⍝ * [;7] Proxy +⍝ * [;8] API-key (optionally)\\ ⍝ "type" must be either 0 or 1 or empty:\\ ⍝ * 1 means all data is listed -⍝ * Everything else means just the alias, the uri and the priority are listed\\ +⍝ * Everything else means the API key is not listed\\ ⍝ If ⍺ is 1 (default is 0) then the second column carries the uri plus the port ⍝ in case the port is neither 80 nor 443. appendPort←{0<⎕NC ⍵:⍎⍵ ⋄ 0}'appendPort' - r←(0,(2+3×1≡type))⍴'' + RI←RegistryIndices + r←(0,((-1≢type)+≢RI.AllIndices))⍴'' '"type" (⍵) must be a Boolean or empty'Assert(⊂type)∊0 1 ''⍬ :If 0<≢data←MyUserSettings.registries - :If 1≡type - r←↑data.(alias uri port priority api_key) - r←r[⍒r[;4];] - :Else - r←↑data.(uri alias port priority) - r←r[⍒r[;4];] - :EndIf + r←(-1≢type)↓⍤1↑data.(alias uri id port priority noCaching proxy api_key) + r←r[⍒r[;RI.priority];] :EndIf - :If 0<≢r - :AndIf appendPort - r[;1]←BindProtocolWithPort¨↓r[;1 3] + :If appendPort∧0<≢r + r[;RI.url]←BindProtocolWithPort¨↓r[;RI.(url port)] :EndIf diff --git a/APLSource/Client/ListVersions.aplf b/APLSource/Client/ListVersions.aplf index 7b1869365..216c30e84 100644 --- a/APLSource/Client/ListVersions.aplf +++ b/APLSource/Client/ListVersions.aplf @@ -1,4 +1,4 @@ - mat←{dateFlag}ListVersions url;client;request;res;url_;registries;registry;buff;flag;port;packageID + mat←{dateFlag}ListVersions url;client;request;res;url_;registries;registry;buff;flag;port;packageID;RI ⍝ Lists all versions of a package. ⍝ `url` is one of: ⍝ * An (optional) registry followed by "group" and "name" of a package @@ -16,14 +16,15 @@ ⍝ By default the publishing date is not included, but you my change this by passing a 1 as ⍺. ⍝ In that case an additional column is added to the result. dateFlag←{0<⎕NC ⍵:⍎⍵ ⋄ 0}'dateFlag' + RI←RegistryIndices :If flag←'[*]'≡3⍴url ⍝ Special syntax! :OrIf (~IsHTTP url)∧('['≠1⍴url)∧({1≥+/⍵∊'/\'}url)∧(~':'∊url)∧('.'≠1⍴url) packageID←(flag×3)↓url mat←(0,(2+dateFlag))⍴⍬ registries←ListRegistries 0 - :If 0<≢registries←(0registry.⎕NC⊂'id' ⍝ Old stuff might lack ID (introduced with 0.74.0) ind←_registries.id⍳⊂registry.id :Else ind←_registries.uri⍳⊂registry.uri diff --git a/APLSource/Registry/Base64_Encode.aplf b/APLSource/Registry/Base64_Encode.aplf new file mode 100644 index 000000000..13cbe181c --- /dev/null +++ b/APLSource/Registry/Base64_Encode.aplf @@ -0,0 +1,15 @@ + r←{loop}Base64_Encode data +⍝ Base64-encodes "data". Tries to do it in one go but falls back to a loop if that causes a WS FULL +⍝ `loop` defaults to 0, meaning that we first try to encode the data in one go but fall back to a loop in case of a WS FULL. +⍝ You may specify a 1 as left argument in order to enforce the loop + loop←{0<⎕NC ⍵:⍎⍵ ⋄ 0}'loop' + :If 0=loop + :Trap 1 ⍝ WS FULL + r←1 Base64_ data + :Else + →∆Loop + :EndTrap + :Return + :EndIf +⍝ ------------------------------- +∆Loop: diff --git a/APLSource/Registry/History.apla b/APLSource/Registry/History.apla index 644fdca56..d2871634b 100644 --- a/APLSource/Registry/History.apla +++ b/APLSource/Registry/History.apla @@ -1,7 +1,13 @@ ( - '* 0.103.3 ⋄ 2024-01-18' - ' * In the user command script the function `IsScripted` traps 16 rather than 0.' - ' * Bug fix: UpdateClient had a problem with `Run.aplf` ' + '* 0.104.0 ⋄ 2024-01-22' + ' * The results of both `]ListRegistries` and its API counterpart have changed. ' + ' * `TatinVars.HOME` is now much more flexible now, addressing Dyalog stand-alone applications' + ' * Bug fixes' + ' * `UpdateClient` had a problem with `Run.aplf`' + ' * `UserSettings.ReplaceRegistry` did not correcly identify an `id`' + ' * `DefineRegistry` did not allow changing the `id`' + ' * `DefineRegistry`''s constructor did not handle a port number as in `''https://localhost:9090''`' + ' * `Client.ListRegistries` did not return the `id` - delivers now a changed and complete result' '* 0.103.2 ⋄ 2024-01-16' ' * New version of FilesAndDirs integrated' ' * ]UserSettings now accepts a flag -home that prints the folder hosting the user settings file' diff --git a/APLSource/Registry/Version.aplf b/APLSource/Registry/Version.aplf index a80854dcf..a7060dbcd 100644 --- a/APLSource/Registry/Version.aplf +++ b/APLSource/Registry/Version.aplf @@ -1,3 +1,3 @@ r←Version ⍝ See also `History` - r←'Tatin' '0.103.3+1740' '2024-01-17' + r←'Tatin' '0.104.0+1754' '2024-01-22' diff --git a/APLSource/Server/Handle_PUT_And_POST.aplf b/APLSource/Server/Handle_PUT_And_POST.aplf index c0ae18d6f..18b98c0fd 100644 --- a/APLSource/Server/Handle_PUT_And_POST.aplf +++ b/APLSource/Server/Handle_PUT_And_POST.aplf @@ -11,8 +11,9 @@ :EndIf :If G.Credentials AcceptCredential apiKey groupName :If 0=≢'email'Reg.GetGroupData G.RegistryPath groupName - :AndIf 0 G.INI.Get 'CONFIG:EnforceEmailAddress' - response←request RespondWithHTML 400 'No email address defined' 'You cannot publish without defining an email address for your group.' + :AndIf 0 G.INI.Get'CONFIG:EnforceEmailAddress' + response←request Respond 400 + response.Content←'You cannot publish without defining an email address for your group.' :Else :If Reg.IsValidPackageID_Complete request.RequestTarget response←SavePackage request diff --git a/APLSource/Tatin.dyalog b/APLSource/Tatin.dyalog index 71395dfa5..c8717cdbd 100644 --- a/APLSource/Tatin.dyalog +++ b/APLSource/Tatin.dyalog @@ -1,6 +1,6 @@ :Namespace Tatin ⍝ The ]Tatin user commands for managing packages.\\ -⍝ * 0.77.0 - 2024-01-16 +⍝ * 0.77.1 - 2024-01-21 ⎕IO←1 ⋄ ⎕ML←1 @@ -1039,17 +1039,26 @@ qdmx.EM ⎕SIGNAL ErrNo :EndSelect :Else - :If firstFlag - :AndIf 'Server: The package has already been published'{⍺≡(≢⍺)↑⍵}qdmx.EM - :AndIf 'Any'≡⎕SE.Tatin.GetDeletePolicy url_ - packageID←2⊃⎕NPARTS source - :AndIf TC.C.YesOrNo packageID,' already published on ',url_,'; overwrite?' - firstFlag←0 - (rc msg)←⎕SE.Tatin.DeletePackage url,packageID - :If 200=rc - →∆Again + :If 'Server: The package has already been published'{⍺≡(≢⍺)↑⍵}qdmx.EM + :If 'Any'≡⎕SE.Tatin.GetDeletePolicy url_ + :If firstFlag + packageID←2⊃⎕NPARTS source + :If TC.C.YesOrNo packageID,' already published on ',url_,'; overwrite?' + firstFlag←0 + (rc msg)←⎕SE.Tatin.DeletePackage url,packageID + :If 200=rc + →∆Again + :Else + ⎕←'Delete attempt failed with status ',(⍕rc),'; publishing therefore not possible' + :Return + :EndIf + :EndIf + :Else + ⎕←'Deleting already published package failed with status ',(⍕rc),'; publishing therefore not possible' + :Return + :EndIf :Else - ⎕←'Delete attempt failed with status ',(⍕rc),'; publishing therefore not possible' + ⎕←'Server does not allow overwriting an already published package; publishing therefore not possible' :Return :EndIf :EndIf @@ -1126,13 +1135,14 @@ :EndIf ∇ - ∇ r←ListRegistries Arg;type + ∇ r←ListRegistries Arg;type;captions type←0 :If 0≢Arg.Switch'full' type←Arg.Switch'full' :EndIf r←TC.ListRegistries type - r←((,[0.5]'URI' 'Alias' 'Port' 'Priority',(1≡type)/⊂'API-key'),[1]' ')⍪r + captions←TC.RegistryIndices.AllNames + r←((,[0.5](-1≢type)↓captions),[1]' ')⍪r r[2;]←(⌈⌿≢¨r)⍴¨'-' ∇ @@ -1184,7 +1194,7 @@ :Trap ErrNo :If '[?]'{⍺≡(≢⍺)↑⍵}arg 'No package specified'Assert 0<≢{⍵↓⍨⌈/⍵⍳'?]'}arg - buff←{⍵[;1 2]}TC.ListRegistries 0 + buff←{⍵[;,2]}1 TC.ListRegistries 0 ind←'Please select a Registry:'TC.C.Select↓⎕FMT buff :If 0=≢ind r←'Cancelled by user' @@ -1603,10 +1613,10 @@ :If 0≡registry ⍝ No argument specified? We ping all we know about! r←0 2⍴⍬ :If 0<≢registries←GetListOfRegistriesForSelection 0 - :AndIf 0<≢registries←(TC.Reg.IsHTTP¨registries[;1])⌿registries - :AndIf 0<≢registries←registries[∪{⍵⍳⍵}registries[;1];] ⍝ Because the same URL might turn up multiple times with different credentials/alias + :AndIf 0<≢registries←(TC.Reg.IsHTTP¨registries[;2])⌿registries + :AndIf 0<≢registries←registries[∪{⍵⍳⍵}registries[;2];] ⍝ Because the same URL might turn up multiple times with different credentials/alias ⎕←'Questioning ',(⍕≢registries),' Tatin Registr',((1+1=≢registries)⊃'ies' 'y'),'...' - r←{⍵,[1.5]⎕TSYNC{TC.Ping ⍵}¨&⍵}registries[;1] + r←{⍵,[1.5]⎕TSYNC{TC.Ping ⍵}¨&⍵}registries[;2] :EndIf :ElseIf (,'?')≡,registry :If 0=≢registries←1 SelectRegistry 0 @@ -1759,7 +1769,7 @@ r,←⊂'Returns information regarding the licenses tolerated by a managed Tatin Registry' r,←'' ' ]Tatin.ListLicenses -verbose' :Case ⎕C'ListRegistries' - r,←⊂'List URL, alias, priority and port of all Registries as defined in the user settings.' + r,←⊂'List Alias, URL, ID, port and priority all Registries as defined in the user settings.' r,←'' ' ]Tatin.ListRegistries -full' :Case ⎕C'ListDeprecated' r,←⊂'List all deprecated major versions' @@ -1923,17 +1933,17 @@ r,←⊂'' r,←⊂'-verbose If specified not only the names of the licenses are returned but also their URLs.' :Case ⎕C'ListRegistries' - r,←⊂'Lists URL, alias, priority, port and the no-caching flag of all Registries as defined' + r,←⊂'Lists alias, URL, ID, port, priority and the no-caching flag of all Registries as defined' r,←⊂'in the user settings.' r,←⊂'The result is ordered by priority: the one with the highest priority is listed first etc.' r,←⊂'' r,←⊂'Notes:' r,←⊂' * Registries with a priority of 0 will not participate in a scan of Registries' r,←⊂' * In case a Registry does not respond when questioned by ]ListRegistries the user is' - r,←⊂' given three options: Retry, skip and cancel operation' + r,←⊂' given three options: Retry, skip and cancel the whole operation' r,←⊂'' - r,←⊂'-full By default all data but the API keys are listed. Specify -full if you want the' - r,←⊂' API keys to be listed as well.' + r,←⊂'-full By default all data but the API keys are listed. Specify -full if you want the' + r,←⊂' API keys to be listed as well.' :Case ⎕C'ListDeprecated' r,←⊂'Lists all deprecated major versions' r,←⊂'' @@ -2499,8 +2509,8 @@ ∇ r←GetListOfRegistriesForSelection type :If 0<≢r←TC.ListRegistries type - r[;2]←{0=≢⍵:'' ⋄ '[',⍵,']'}¨r[;2] - r[;1]←r[;1]{⍵∊0 80 443:⍺ ⋄ (¯1↓⍺),':',(⍕⍵),'/'}¨r[;3] + r[;1]←{0=≢⍵:'' ⋄ '[',⍵,']'}¨r[;1] + r[;2]←r[;2]{⍵∊0 80 443:⍺ ⋄ (¯1↓⍺),':',(⍕⍵),'/'}¨r[;4] :EndIf ∇ @@ -2509,7 +2519,7 @@ :If 1=≢list←GetListOfRegistriesForSelection type registry←1⊃list[1;] :Else - :If ⍬≡row←'Select Tatin Registry'all TC.C.Select↓⎕FMT list[;2 1] + :If ⍬≡row←'Select Tatin Registry'all TC.C.Select↓⎕FMT list[;1 2] registry←⍬ :Else :If all diff --git a/APLSource/TestCases/Cleanup.aplf b/APLSource/TestCases/Cleanup.aplf index 0f2fd1e1f..a42351646 100644 --- a/APLSource/TestCases/Cleanup.aplf +++ b/APLSource/TestCases/Cleanup.aplf @@ -1,6 +1,6 @@ Cleanup;F;folder;configFolder;rc;msg;res ##.Client.⎕EX'∆PrintToSession' - ##.Admin.⎕EX¨'∆DIRS' '∆FILES' + ##.Admin.⎕EX¨'∆DIRS' '∆FILES' 'RI' ⎕SE._Tatin.Client.⎕EX'∆PrintToSession' F←##.FilesAndDirs folder←(739⌶0),'/TatinTests/' diff --git a/APLSource/TestCases/Initial.aplf b/APLSource/TestCases/Initial.aplf index 9ecbd92a5..be6bacdfb 100644 --- a/APLSource/TestCases/Initial.aplf +++ b/APLSource/TestCases/Initial.aplf @@ -2,6 +2,7 @@ #.⎕EX'_tatin' r←1 + RI←##.Client.RegistryIndices ⍝ Managed Registry: ∆TEMP_SERVER_FOLDER←F.GetTempSubDir'Tatin-Test-Server' (∆TEMP_SERVER_FOLDER,'/')⎕NCOPY⍠1⊣#.Tatin.CiderConfig.HOME,'/TestServer/*' diff --git a/APLSource/TestCases/Test_API_001.aplf b/APLSource/TestCases/Test_API_001.aplf index 8f5a489e7..710c7b90e 100644 --- a/APLSource/TestCases/Test_API_001.aplf +++ b/APLSource/TestCases/Test_API_001.aplf @@ -5,15 +5,15 @@ res1←⎕SE.Tatin.ListRegistries'' →T.PassesIf 2<≢res1 - →T.PassesIf 4=2⊃⍴res1 + →T.PassesIf (¯1+≢RI.AllIndices)=2⊃⍴res1 res1←⎕SE.Tatin.ListRegistries 0 →T.PassesIf 2<≢res1 - →T.PassesIf 4=2⊃⍴res1 + →T.PassesIf (¯1+≢RI.AllIndices)=2⊃⍴res1 res1←⎕SE.Tatin.ListRegistries 1 →T.PassesIf 2<≢res1 - →T.PassesIf 5=2⊃⍴res1 + →T.PassesIf (≢RI.AllIndices)=2⊃⍴res1 :Trap ##.Registry.ErrorNo res1←⎕SE.Tatin.ListRegistries 10 →T.FailsIf 1 diff --git a/APLSource/TestCases/Test_BuildPackage_050.aplf b/APLSource/TestCases/Test_BuildPackage_050.aplf index aba8b923f..0ebf39220 100644 --- a/APLSource/TestCases/Test_BuildPackage_050.aplf +++ b/APLSource/TestCases/Test_BuildPackage_050.aplf @@ -1,17 +1,20 @@ - r←Test_BuildPackage_050(stopFlag batchFlag);⎕TRAP;path;zipFileName;list;cfg;cfg2;oldBuildNo;newBuildNo;oldVersion;newVersion;parms + r←Test_BuildPackage_050(stopFlag batchFlag);⎕TRAP;zipFileName;list;cfg;cfg2;oldBuildNo;newBuildNo;oldVersion;newVersion;parms;tempPath;path ⍝ Build a package that has dependencies in a non-default folder and is a Cider project ⎕TRAP←(999 'C' '. ⍝ Deliberate error')(0 'N') r←T._Failed + tempPath←∆GetTempDir'/' path←∆GetProjectPath,'/TestData/Build/CiderProject/' - cfg←TC.ReadPackageConfigFile path,'apl-package.json' - parms←TC.CreateBuildParms path - parms.targetPath←path + tempPath ⎕NCOPY path + tempPath,←'CiderProject/' + cfg←TC.ReadPackageConfigFile tempPath,'apl-package.json' + parms←TC.CreateBuildParms tempPath + parms.targetPath←tempPath parms.version←'+0.0.1' zipFileName←TC.BuildPackage parms list←TC.ZipArchive.ListZipContents zipFileName →T.GoToTidyUp~(⊂F.EnforceSlash'apl-dependencies.txt')∊F.EnforceSlash¨list - cfg2←TC.ReadPackageConfigFile path,'apl-package.json' + cfg2←TC.ReadPackageConfigFile tempPath,'apl-package.json' oldBuildNo←A.ToNum{⍵↓⍨⍵⍳'+'}cfg.version newBuildNo←A.ToNum{⍵↓⍨⍵⍳'+'}cfg2.version →T.GoToTidyUp newBuildNo≠1+oldBuildNo @@ -23,4 +26,5 @@ ∆TidyUp: F.DeleteFile zipFileName + F.RmDir tempPath ⍝Don diff --git a/APLSource/TestCases/Test_UserCommands_013.aplf b/APLSource/TestCases/Test_UserCommands_013.aplf index fd172296c..eafddc034 100644 --- a/APLSource/TestCases/Test_UserCommands_013.aplf +++ b/APLSource/TestCases/Test_UserCommands_013.aplf @@ -6,7 +6,7 @@ stop←0 (rc msg res)←stop ∆UCMD'Ping' Assert 0=rc - →T.PassesIf 1 1 1≡res[;2] ⍝ If this fails try again: for reasons yet unknwon the test server is sometimes - but rarely - unresponsive + →T.PassesIf 1 1 1≡res[;2] r←T._OK ⍝Done diff --git a/APLSource/TestCases/Test_UserCommands_513.aplf b/APLSource/TestCases/Test_UserCommands_513.aplf index c97de5996..9901bc039 100644 --- a/APLSource/TestCases/Test_UserCommands_513.aplf +++ b/APLSource/TestCases/Test_UserCommands_513.aplf @@ -8,7 +8,7 @@ →T.PassesIf rc=0 →T.PassesIf 2=⍴⍴res regList←TC.ListRegistries'' - regList←(regList[;4]>0)⌿regList + regList←(regList[;RI.priority]>0)⌿regList →T.PassesIf(≢regList)=+/0<≢¨res[;1] r←T._OK diff --git a/APLSource/TestCases/Test_UserCommands_514.aplf b/APLSource/TestCases/Test_UserCommands_514.aplf index 9d4300db0..33f0c202f 100644 --- a/APLSource/TestCases/Test_UserCommands_514.aplf +++ b/APLSource/TestCases/Test_UserCommands_514.aplf @@ -9,7 +9,7 @@ →T.PassesIf 2=⍴⍴res →T.PassesIf 0=+/≢¨res[;2] ⍝ No hits regList←TC.ListRegistries'' - regList←(regList[;4]>0)⌿regList + regList←(regList[;RI.priority]>0)⌿regList →T.PassesIf(≢regList)=+/0<≢¨res[;1] r←T._OK diff --git a/Assets/docs/FirstStepsWithTatin.html b/Assets/docs/FirstStepsWithTatin.html index e637b8a3e..9053be173 100644 --- a/Assets/docs/FirstStepsWithTatin.html +++ b/Assets/docs/FirstStepsWithTatin.html @@ -77,10 +77,10 @@

2. What Registries are available

After a fresh installation you might wonder what Registries are available to you.

      ]tatin.ListRegistries
- URL                     Alias         Port    Priority
- ----                    ----------    ----    --------
- https://tatin.dev/      tatin            0         100
- https://test.tatin.dev/ test-tatin       0           0
+Alias URL Port Priority No caching Proxy API-key +---------- ----------------------- ---- -------- ---------- ----- ------- +tatin https://tatin.dev/ 0 100 0 *** +test-tatin https://test.tatin.dev/ 0 0 0 ***

At this point Tatin only knows about the principal Tatin Registry and the Tatin test Registry. If you wish to access other Registries on the Internet or your company's Intranet, or you want to host and publish packages locally (in all likelihood your own ones), then you must change the user settings.

All these topics — and related ones — are discussed in a separate document: “TatinUserSettings.html”. Here we try to keep things simple.

diff --git a/Assets/docs/ReleaseNotes.html b/Assets/docs/ReleaseNotes.html index d63bc2d63..fdff35487 100644 --- a/Assets/docs/ReleaseNotes.html +++ b/Assets/docs/ReleaseNotes.html @@ -24,7 +24,7 @@

Table of contents