Skip to content

Commit 749c582

Browse files
authored
Merge pull request #874 from intersystems/doc-programmatic-settings
Programmatic configuration of settings as part of the public API
2 parents 1b6ae7d + 09422f5 commit 749c582

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111
- Option to lock/unlock namespace is now available on the settings page (#650)
1212
- Settings page now warns if Embedded Git is not the configured source control extension (#857)
1313
- Settings page now has option to switch namespace (#856)
14+
- SourceControl.Git.Settings is now documented as part of the public API to allow programmatic configuration of settings (#262)
1415

1516
### Fixed
1617
- When cloning a repo with Configure, that repo's embedded-git-config file will overwrite previous settings (#819)

cls/SourceControl/Git/Settings.cls

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@ Include %syPrompt
22

33
IncludeGenerator %syPrompt
44

5+
/// Public API for configuring Embedded Git settings. Settings may be configured:
6+
/// <ul>
7+
/// <li>Interactively in terminal by running do ##class(SourceControl.Git.API).Configure()</li>
8+
/// <li>In the Settings page accessed through the source control menu</li>
9+
/// <li>Through a configuration file embedded-git-config.json</li>
10+
/// <li>Programmatically by creating an instance of this object.</li>
11+
/// </ul>
12+
/// For an example of the last, see below:
13+
/// <pre>
14+
/// set settings = ##class(SourceControl.Git.Settings).%New()
15+
/// set settings.mappedItemsReadOnly = 1
16+
/// $$$ThrowOnError(settings.%Save())
17+
/// </pre>
518
Class SourceControl.Git.Settings Extends %RegisteredObject
619
{
720

@@ -68,8 +81,16 @@ Property lockBranch As %Boolean [ InitialExpression = {##class(SourceControl.Git
6881
/// (Optional) A namespace-specific string that may be included in mapping configurations as <token> to support multi-namespace repositories
6982
Property mappingsToken As %String(MAXLEN = "") [ InitialExpression = {##class(SourceControl.Git.Utils).MappingsToken()} ];
7083

84+
/// A multi-dimensional array that maps item types to directories in the source repository, structured as follows:
85+
/// settings.Mappings("<item type>","<filter>") = "<folder>"
86+
/// settings.Mappings("<item type>","<filter>","NoFolders") = 1
87+
/// - item type: file extension to use, e.g., CLS, MAC. As a special case for web application files, use "/CSP/".
88+
/// - filter: a filter on files of that type, e.g. * for all, or a package name or web application folder
89+
/// - folder: folder relative to the repo root that contains the item
90+
/// - NoFolders: if the value of this node is false, dots in the item name will be expanded to subdirectories. e.g. /cls/PackageName/ClassName.cls
7191
Property Mappings [ MultiDimensional ];
7292

93+
/// (user-level) List of namespaces on this instance to include Embedded Git links in the SMP favorites
7394
Property favoriteNamespaces As %DynamicArray;
7495

7596
Method %OnNew() As %Status
@@ -87,6 +108,7 @@ Method %OnNew() As %Status
87108
quit $$$OK
88109
}
89110

111+
/// Saves namespace settings to a configuration file and adds it to the source control repository.
90112
Method SaveWithSourceControl() As %Status
91113
{
92114
set sc = $$$OK
@@ -191,7 +213,7 @@ Method %Save() As %Status
191213
quit $$$OK
192214
}
193215

194-
Method ToDynamicObject() As %DynamicObject
216+
Method ToDynamicObject() As %DynamicObject [ Internal ]
195217
{
196218
// uses custom methods rather than %JSON.Adaptor because Mappings multidimensional
197219
// array is not supported
@@ -217,7 +239,7 @@ Method ToDynamicObject() As %DynamicObject
217239
return settingsJSON
218240
}
219241

220-
Method ImportDynamicObject(pSettingsDyn As %DynamicObject)
242+
Method ImportDynamicObject(pSettingsDyn As %DynamicObject) [ Internal ]
221243
{
222244
set ..pullEventClass = pSettingsDyn.%Get("pullEventClass")
223245
set ..percentClassReplace = pSettingsDyn.%Get("percentClassReplace")
@@ -238,7 +260,7 @@ Method ImportDynamicObject(pSettingsDyn As %DynamicObject)
238260
}
239261
}
240262

241-
ClassMethod CreateNamespaceTempFolder() As %Status
263+
ClassMethod CreateNamespaceTempFolder() As %Status [ Internal ]
242264
{
243265
set storage = ##class(SourceControl.Git.Utils).#Storage
244266
if ('##class(%File).DirectoryExists(@storage@("settings","namespaceTemp"))){
@@ -248,7 +270,7 @@ ClassMethod CreateNamespaceTempFolder() As %Status
248270
return $$$OK
249271
}
250272

251-
ClassMethod Configure() As %Boolean [ CodeMode = objectgenerator ]
273+
ClassMethod Configure() As %Boolean [ CodeMode = objectgenerator, Internal ]
252274
{
253275
do %code.WriteLine(" set inst = ..%New()")
254276
do %code.WriteLine(" do inst.RetrieveDefaults()")
@@ -321,7 +343,7 @@ ClassMethod Configure() As %Boolean [ CodeMode = objectgenerator ]
321343
do %code.WriteLine(" quit 1")
322344
}
323345

324-
Method ConfigureNamespaceWebApplication()
346+
Method ConfigureNamespaceWebApplication() [ Internal ]
325347
{
326348
Set root = ##class(%Library.File).NormalizeDirectory(##class(SourceControl.Git.Utils).TempFolder())
327349
Set deleteWebApp = ..HasNamespaceWebApp(.appDirectory) && '..namespaceLevelGitWebApp
@@ -381,7 +403,7 @@ Method WebAppOperation(name, create As %Boolean, delete As %Boolean, root As %St
381403
}
382404
}
383405

384-
ClassMethod HasNamespaceWebApp(Output webAppDirectory) As %Boolean
406+
ClassMethod HasNamespaceWebApp(Output webAppDirectory) As %Boolean [ Internal ]
385407
{
386408
Set webAppDirectory = $System.CSP.GetFileName("/git/"_$Namespace_"/")
387409
If (webAppDirectory '= "") {
@@ -390,7 +412,7 @@ ClassMethod HasNamespaceWebApp(Output webAppDirectory) As %Boolean
390412
Quit (webAppDirectory '= "")
391413
}
392414

393-
Method OnAfterConfigure() As %Boolean
415+
Method OnAfterConfigure() As %Boolean [ Internal ]
394416
{
395417
set defaultPromptFlag = $$$DisableBackupCharMask + $$$TrapCtrlCMask + $$$EnableQuitCharMask + $$$DisableHelpCharMask + $$$DisableHelpContextCharMask + $$$TrapErrorMask
396418
if (..privateKeyFile '= "") && '##class(%File).Exists(..privateKeyFile) {
@@ -474,7 +496,7 @@ Method OnAfterConfigure() As %Boolean
474496
}
475497
}
476498

477-
Method ConfigureBinPath(ByRef path As %String) As %Boolean
499+
Method ConfigureBinPath(ByRef path As %String) As %Boolean [ Internal ]
478500
{
479501
if (path = "") { return 1 }
480502
// Sometimes path is quoted
@@ -506,7 +528,7 @@ Method ConfigureBinPath(ByRef path As %String) As %Boolean
506528
return 1
507529
}
508530

509-
Method RetrieveDefaults() As %Boolean
531+
Method RetrieveDefaults() As %Boolean [ Internal ]
510532
{
511533
do ##class(%zpkg.isc.sc.git.Defaults).GetDefaultSettings(.settings)
512534
set iterator = settings.%GetIterator()
@@ -516,6 +538,7 @@ Method RetrieveDefaults() As %Boolean
516538
return $$$OK
517539
}
518540

541+
/// Saves certain settings as default settings for the instance. Instance defaults are overwritten by namespace-level settings.
519542
Method SaveDefaults() As %Boolean
520543
{
521544
set defaults = {}

0 commit comments

Comments
 (0)