Skip to content

Commit 92c5751

Browse files
authored
Merge pull request #368 from isc-pbarton/compile-on-import
Compile items after Import All
2 parents 61a58db + f7f2be6 commit 92c5751

File tree

5 files changed

+72
-40
lines changed

5 files changed

+72
-40
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1919
- Command-line utility to do a baseline export of items in a namespace
2020
- 'New Branch' menu option in basic now will create new branches from the configured default merge branch (#366)
2121
- Merging back with the default merge branch is now a part of the basic mode's Sync flow (#366)
22+
- Added a new option "compileOnImport". If true, Import options will compile files using the pull event handler. (#362)
2223

2324
### Fixed
2425
- Modifications to local repo files are now synced with IRIS (#153)

cls/SourceControl/Git/PullEventHandler/IncrementalLoad.cls

+26-7
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,36 @@ Method OnPull() As %Status
3838
quit $system.OBJ.CompileList(.compilelist, "cukb")
3939
}
4040

41-
Method DeleteFile(item As %String)
41+
Method DeleteFile(item As %String) As %Status
4242
{
43+
set sc = $$$OK
4344
set type = ##class(SourceControl.Git.Utils).Type(item)
44-
if (type = "cls") {
45-
quit $System.OBJ.Delete(item)
46-
} elseif (type = "csp") {
47-
quit $System.CSP.DeletePage(item)
45+
set name = ##class(SourceControl.Git.Utils).NameWithoutExtension(item)
46+
set deleted = 1
47+
if type = "prj" {
48+
set sc = $system.OBJ.DeleteProject(name)
49+
}elseif type = "cls" {
50+
set sc = $system.OBJ.Delete(item)
51+
}elseif $listfind($listbuild("mac","int","inc","bas","mvb","mvi"), type) > 0 {
52+
set sc = ##class(%Routine).Delete(item)
53+
}elseif type = "csp" {
54+
set sc = $System.CSP.DeletePage(item)
55+
}elseif ##class(SourceControl.Git.Utils).UserTypeCached(item) {
56+
set sc = ##class(%Library.RoutineMgr).Delete(item)
4857
} else {
49-
quit ##class(%Library.RoutineMgr).Delete(item)
58+
set deleted = 0
5059
}
60+
61+
if deleted && $$$ISOK(sc) {
62+
do ##class(SourceControl.Git.Utils).RemoveRoutineTSH(item)
63+
kill $$$TrackedItems(##class(SourceControl.Git.Utils).NormalizeExtension(item))
64+
} else {
65+
if +$system.Status.GetErrorCodes(sc) = $$$ClassDoesNotExist {
66+
// if something we wanted to delete is already deleted -- good!
67+
set sc = $$$OK
68+
}
69+
}
70+
return sc
5171
}
5272

5373
}
54-

cls/SourceControl/Git/Settings.cls

+4-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ Property systemBasicMode As %Boolean [ InitialExpression = {##class(SourceContro
4444
/// In Basic mode, Sync will merge changes from this remote branch
4545
Property defaultMergeBranch As %String [ InitialExpression = {##class(SourceControl.Git.Utils).DefaultMergeBranch()} ];
4646

47+
/// Import All options compile imported options using the configured pull event handler
48+
Property compileOnImport As %Boolean [ InitialExpression = {##class(SourceControl.Git.Utils).CompileOnImport()} ];
49+
4750
Property Mappings [ MultiDimensional ];
4851

4952
Method %OnNew() As %Status
@@ -97,6 +100,7 @@ Method %Save() As %Status
97100
set @storage@("settings","settingsUIReadOnly") = ..settingsUIReadOnly
98101
set @storage@("settings", "mappedItemsReadOnly") = ..mappedItemsReadOnly
99102
set @storage@("settings", "defaultMergeBranch") = ..defaultMergeBranch
103+
set @storage@("settings", "compileOnImport") = ..compileOnImport
100104
set @storage@("settings", "basicMode") = ..systemBasicMode
101105
if ..basicMode = "system" {
102106
kill @storage@("settings", "user", $username, "basicMode")
@@ -206,4 +210,3 @@ Method OnAfterConfigure() As %Boolean
206210
}
207211

208212
}
209-

cls/SourceControl/Git/Utils.cls

+29-32
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ ClassMethod PrivateKeyFile() As %String
153153
quit $get(@..#Storage@("settings","ssh","privateKeyFile"))
154154
}
155155

156+
ClassMethod CompileOnImport() As %Boolean
157+
{
158+
quit $get(@..#Storage@("settings","compileOnImport"),1)
159+
}
160+
156161
ClassMethod NeedSettings() As %Boolean [ CodeMode = expression ]
157162
{
158163
(..TempFolder() = "") || (..GitBinPath() = "") || (..GitBinPath() = """")
@@ -1294,13 +1299,17 @@ ClassMethod ImportRoutines(force As %Boolean = 0) As %Status
12941299

12951300
#dim ec as %Status = ..ListItemsInFiles(.itemList, .err)
12961301
quit:'ec ec
1302+
1303+
kill files
12971304

1305+
set settings = ##class(SourceControl.Git.Settings).%New()
12981306
#dim internalName as %String = ""
12991307
for {
13001308
set internalName = $order(itemList(internalName))
13011309
quit:internalName=""
13021310
set context = ##class(SourceControl.Git.PackageManagerContext).ForInternalName(internalName)
13031311
continue:context.Package'=refPackage
1312+
set doImport = ..IsRoutineOutdated(internalName) || force
13041313
if ..IsInSourceControl(internalName) {
13051314
set sc = ..ImportItem(internalName, force)
13061315
} else {
@@ -1309,7 +1318,15 @@ ClassMethod ImportRoutines(force As %Boolean = 0) As %Status
13091318
if $$$ISERR(sc) {
13101319
set ec = $$$ADDSC(ec, sc)
13111320
}
1321+
if doImport && settings.compileOnImport {
1322+
set modification = ##class(SourceControl.Git.Modification).%New()
1323+
set modification.changeType = "M"
1324+
set modification.internalName = internalName
1325+
set modification.externalName = ..FullExternalName(internalName)
1326+
set files($increment(files)) = modification
1327+
}
13121328
}
1329+
13131330

13141331
//let's delete all items for which corresponding files had been deleted
13151332
#dim item as %String = ""
@@ -1323,41 +1340,21 @@ ClassMethod ImportRoutines(force As %Boolean = 0) As %Status
13231340
set fullExternalName = ..FullExternalName(item)
13241341
if '##class(%File).Exists(fullExternalName) {
13251342
write !,fullExternalName," does not exist - deleting ",item
1326-
#dim type as %String = ..Type(item)
1327-
#dim name as %String = ..NameWithoutExtension(item)
1328-
#dim deleted as %Boolean = 1
1329-
if type = "prj" {
1330-
set ec = $$$ADDSC(ec, $system.OBJ.DeleteProject(name))
1331-
}elseif type = "cls" {
1332-
set ec = $$$ADDSC(ec, $system.OBJ.Delete(item))
1333-
}elseif $listfind($listbuild("mac","int","inc","bas","mvb","mvi"), type) > 0 {
1334-
set ec = $$$ADDSC(ec, ##class(%Routine).Delete(item))
1335-
}elseif type = "csp" {
1336-
#dim filename = $system.CSP.GetFileName(item)
1337-
if ##class(%File).Exists(filename) && '##class(%File).Delete(filename) {
1338-
set ec = $$$ADDSC(ec, ..MakeError("Error while removing "_item))
1339-
}
1340-
}elseif ..UserTypeCached(item) {
1341-
set ec = $$$ADDSC(ec, ##class(%Library.RoutineMgr).Delete(item))
1342-
} else {
1343-
set deleted = 0
1344-
}
1345-
1346-
if deleted && ec {
1347-
do ..RemoveRoutineTSH(item)
1348-
kill $$$TrackedItems(..NormalizeExtension(item))
1349-
write !, item, " was deleted"
1350-
} else {
1351-
if +$system.Status.GetErrorCodes(ec) '= $$$ClassDoesNotExist {
1352-
write !, "Error: could not delete ", item
1353-
} else {
1354-
// if something we wanted to delete is already deleted -- good!
1355-
set ec = $$$OK
1356-
}
1357-
}
1343+
set modification = ##class(SourceControl.Git.Modification).%New()
1344+
set modification.changeType = "D"
1345+
set modification.internalName = item
1346+
set modification.externalName = fullExternalName
1347+
set files($increment(files)) = modification
13581348
}
13591349
}
13601350

1351+
set eventHandler = $classmethod(..PullEventClass(),"%New")
1352+
set eventHandler.LocalRoot = ..TempFolder()
1353+
merge eventHandler.ModifiedFiles = files
1354+
set sc = eventHandler.OnPull()
1355+
if $$$ISERR(sc) {
1356+
set ec = $$$ADDSC(ec,sc)
1357+
}
13611358
write !, "==import done=="
13621359
quit ec
13631360
}

csp/gitprojectsettings.csp

+12
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ body {
9090
set settings.mappedItemsReadOnly = 0
9191
}
9292

93+
set settings.compileOnImport = ($Get(%request.Data("compileOnImport", 1)) = 1)
94+
9395
if ($Get(%request.Data("basicMode", 1)) = 1) {
9496
set settings.basicMode = 1
9597
} elseif ($Get(%request.Data("basicMode", 1)) = "system"){
@@ -336,6 +338,16 @@ body {
336338

337339

338340
</div>
341+
<div class="form-group row mb-3">
342+
<label for="compileOnImport" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="If true, the Import All options will compile imported options using the configured pull event handler">Compile Items on Import</label>
343+
<div class="col-sm-7">
344+
<div class="custom-control custom-switch custom-switch-no-border">
345+
<input class="custom-control-input" name="compileOnImport" type="checkbox"
346+
id="compileOnImport" #($select(settings.compileOnImport:"checked",1:""))# value="1">
347+
<label class="custom-control-label" for="compileOnImport"></label>
348+
</div>
349+
</div>
350+
</div>
339351

340352
<div class="form-group row mb-3 mapping-input-group">
341353
<div class="offset-sm-1 col-sm-3">

0 commit comments

Comments
 (0)