Skip to content

Mappings expand <namespace> parameter #762

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 19, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added
- Expanded Baseline Export to include custom HL7, X12, ASTM schemas and Lookup Tables (#693)
- Mapping configuration expands \<namespace\> and \<token\> parameters to better support multi-namespace solutions (#710)
- Settings page includes a test of the connection to the remote (#746)

### Fixed
5 changes: 5 additions & 0 deletions cls/SourceControl/Git/Settings.cls
Original file line number Diff line number Diff line change
@@ -65,6 +65,9 @@ Property environmentName As %String(MAXLEN = "") [ InitialExpression = {##class(
/// Whether the branch should or should not be locked down from changing namespaces
Property lockBranch As %Boolean [ InitialExpression = {##class(SourceControl.Git.Utils).LockBranch()} ];

/// (Optional) A namespace-specific string that may be included in mapping configurations as <token> to support multi-namespace repositories
Property mappingsToken As %String(MAXLEN = "") [ InitialExpression = {##class(SourceControl.Git.Utils).MappingsToken()} ];

Property Mappings [ MultiDimensional ];

Property favoriteNamespaces As %DynamicArray;
@@ -157,6 +160,7 @@ Method %Save() As %Status
set @storage@("settings", "basicMode") = ..systemBasicMode
set @storage@("settings", "environmentName") = ..environmentName
set @storage@("settings", "lockBranch") = ..lockBranch
set @storage@("settings", "mappingsToken") = ..mappingsToken
if ..basicMode = "system" {
kill @storage@("settings", "user", $username, "basicMode")
} else {
@@ -519,3 +523,4 @@ Method SaveDefaults() As %Boolean
}

}

11 changes: 10 additions & 1 deletion cls/SourceControl/Git/Utils.cls
Original file line number Diff line number Diff line change
@@ -190,6 +190,11 @@ ClassMethod LockBranch() As %Boolean
quit $get(@..#Storage@("settings","lockBranch"),0)
}

ClassMethod MappingsToken() As %String
{
quit $get(@..#Storage@("settings","mappingsToken"),"")
}

ClassMethod IsLIVE() As %Boolean
{
quit ..EnvironmentName()="LIVE"
@@ -2425,10 +2430,13 @@ ClassMethod Name(InternalName As %String, ByRef MappingExists As %Boolean) As %S

ClassMethod ExpandMappingParameters(MapDirectory, Settings As SourceControl.Git.Settings = {##class(SourceControl.Git.Settings).%New()})
{
return $replace(MapDirectory,"<env>", $zconvert($select(
set expandedDir = $replace(MapDirectory,"<env>", $zconvert($select(
Settings.environmentName = "": "DEVELOPMENT",
1: Settings.environmentName)
,"l"))
set expandedDir = $replace(expandedDir,"<namespace>", $zconvert($namespace,"l"))
set expandedDir = $replace(expandedDir,"<token>", Settings.mappingsToken)
return expandedDir
}

/// Implementation copied from %Library.RoutineMgr, but with results cached in a PPG.
@@ -3217,3 +3225,4 @@ ClassMethod IsSchemaStandard(pName As %String = "") As %Boolean [ Internal ]
}

}

10 changes: 8 additions & 2 deletions csp/gitprojectsettings.csp
Original file line number Diff line number Diff line change
@@ -109,7 +109,7 @@ body {
set $Property(settings,param) = $Get(%request.Data(param,1))
}
if ('settings.settingsUIReadOnly) {
for param="gitBinPath","namespaceTemp","privateKeyFile","pullEventClass","percentClassReplace", "defaultMergeBranch","environmentName" {
for param="gitBinPath","namespaceTemp","privateKeyFile","pullEventClass","percentClassReplace", "defaultMergeBranch","environmentName","mappingsToken" {
set $Property(settings,param) = $Get(%request.Data(param,1))
}

@@ -274,7 +274,7 @@ body {
</div>

<div class="form-group row mb-3">
<label for="namespaceTemp" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Absolute path to you project">Git Repo Root Directory<br/></label>
<label for="namespaceTemp" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Absolute path to your project">Git Repo Root Directory<br/></label>
<server>
set dir = ##class(%File).NormalizeDirectory(settings.namespaceTemp)
if (settings.namespaceTemp '= "") && ##class(%File).DirectoryExists(dir_".git") {
@@ -506,6 +506,12 @@ body {
</div>
</div>
</div>
<div class="form-group row mb-3">
<label for="mappingsToken" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="(Optional) A namespace-specific string that may be included in mapping configurations as <token> to support multi-namespace repositories">Mappings Token</label>
<div class="col-sm-7">
<input type="text" class="form-control" id="mappingsToken" name="mappingsToken" value='#(..EscapeHTML(settings.mappingsToken))#'>
</div>
</div>

<div class="form-group row mb-3 mapping-input-group">
<div class="offset-sm-1 col-sm-3">
7 changes: 6 additions & 1 deletion test/UnitTest/SourceControl/Git/NameTest.cls
Original file line number Diff line number Diff line change
@@ -64,16 +64,21 @@ Method TestMixedFoldering()
do $$$AssertEquals(##class(Utils).Name("TestPackage.Hello.World.mac"),"rtn/TestPackage/Hello/World.mac")
}

Method TestEnvExpansion()
Method TestParamExpansion()
{
try {
set $$$SourceMapping("ESD","*") = "config/<env>/"
set $$$SourceMapping("ESD","*","NoFolders") = 1
set $$$SourceMapping("CLS","*") = "<namespace>/cls/"
set $$$SourceMapping("INC","*") = "<token>/inc/"
set settings = ##class(SourceControl.Git.Settings).%New()
set oldEnvName = settings.environmentName
set settings.environmentName = "TEST"
set settings.mappingsToken = "mdi"
$$$ThrowOnError(settings.%Save())
do $$$AssertEquals(##class(SourceControl.Git.Utils).Name("Ens.Config.DefaultSettings.esd"),"config/test/Ens.Config.DefaultSettings.esd")
do $$$AssertEquals(##class(SourceControl.Git.Utils).Name("test.class.cls"),$zconvert($namespace,"l")_"/cls/test/class.cls")
do $$$AssertEquals(##class(SourceControl.Git.Utils).Name("test.routine.inc"),"mdi/inc/test/routine.inc")
} catch err {
do $$$AssertStatusOK(err.AsStatus())
}
Loading