@@ -513,6 +513,7 @@ ClassMethod AddToServerSideSourceControl(InternalName As %String) As %Status
513
513
514
514
ClassMethod AddToSourceControl (InternalName As %String ) As %Status
515
515
{
516
+ do ##class (SourceControl.Git.PackageManagerContext ).ForInternalName (InternalName )
516
517
set settings = ##class (SourceControl.Git.Settings ).%New ()
517
518
#dim i as %Integer
518
519
#dim ec as %Status = $$$OK
@@ -2062,5 +2063,74 @@ ClassMethod ResetSourceControlClass()
2062
2063
do ##class (%Studio.SourceControl.Interface ).SourceControlClassSet (" " )
2063
2064
}
2064
2065
2066
+ ClassMethod BaselineExport (pCommitMessage = " " , pPushToRemote = " " ) As %Status
2067
+ {
2068
+ set sc = $$$OK
2069
+ try {
2070
+ write !, " Exporting classes..."
2071
+ set sql = " SELECT ID FROM %Dictionary.ClassDefinition"
2072
+ _ " WHERE GeneratedBy IS Null AND Deployed = 0"
2073
+ _ " AND NOT ("
2074
+ _ " ID %STARTSWITH 'csr.csp.' OR ID %STARTSWITH '%' OR ID %STARTSWITH 'CSPX.' OR ID %STARTSWITH 'Ens.'"
2075
+ _ " OR ID %STARTSWITH 'EnsLib.' OR ID %STARTSWITH 'EnsPortal.'"
2076
+ _ " )"
2077
+ set rs = ##class (%SQL.Statement ).%ExecDirect (,sql )
2078
+ throw :rs .%SQLCODE <0 ##class (%Exception.SQL ).CreateFromSQLCODE (rs .%SQLCODE ,rs .%Message )
2079
+ while rs .%Next () {
2080
+ set internalName = rs .ID _ " .CLS"
2081
+ // exclude items in a non-default IPM package
2082
+ set context = ##class (SourceControl.Git.PackageManagerContext ).ForInternalName (internalName )
2083
+ continue :($isobject (context .Package ) && 'context .IsInDefaultPackage )
2084
+ $$$ThrowOnError(..AddToSourceControl (internalName ))
2085
+ }
2086
+ write !, " Exporting mac routines..."
2087
+ do ..BaselineExportRoutines (" *.MAC" )
2088
+ write !, " Exporting inc routines..."
2089
+ do ..BaselineExportRoutines (" *.INC" )
2090
+ /*
2091
+ Other items may be supported in the future:
2092
+ - DeepSee folder items
2093
+ - Ensemble lookup tables
2094
+ - Ensemble schema documents
2095
+ - CSP applications
2096
+ */
2097
+ if pCommitMessage '= " " {
2098
+ // switch to default context
2099
+ do ##class (SourceControl.Git.PackageManagerContext ).ForInternalName (" " )
2100
+ do ..RunGitWithArgs (.errStream , .outStream , " add" , " --all" )
2101
+ do ..PrintStreams (errStream , outStream )
2102
+ set username = ..GitUserName ()
2103
+ set email = ..GitUserEmail ()
2104
+ set author = username _" <" _email _" >"
2105
+ do ..RunGitWithArgs (.errStream , .outStream , " commit" , " --author" , author , " -m" , pCommitMessage )
2106
+ do ..PrintStreams (errStream , outStream )
2107
+ $$$ThrowOnError(##class (SourceControl.Git.Change ).RefreshUncommitted (,,,1 ))
2108
+ if (pPushToRemote '= " " ) {
2109
+ $$$ThrowOnError(..Push (pPushToRemote ))
2110
+ }
2111
+ }
2112
+ } catch err {
2113
+ set sc = err .AsStatus ()
2114
+ }
2115
+ return sc
2065
2116
}
2066
2117
2118
+ ClassMethod BaselineExportRoutines (pFilter ) [ Private ]
2119
+ {
2120
+ set rs = ##class (%Library.Routine ).RoutineListFunc (pFilter )
2121
+ throw :rs .%SQLCODE <0 ##class (%Exception.SQL ).CreateFromSQLCODE (rs .%SQLCODE ,rs .%Message )
2122
+ while rs .%Next () {
2123
+ continue :rs .Size =0
2124
+ set item = rs .Name
2125
+ // exclude items in a non-default IPM package
2126
+ set context = ##class (SourceControl.Git.PackageManagerContext ).ForInternalName (item )
2127
+ continue :($isobject (context .Package ) && 'context .IsInDefaultPackage )
2128
+ // exclude generated routines from classes, SQL, etc.
2129
+ continue :##class (%Library.RoutineMgr ).IsGenerated (item )
2130
+ // exclude Ens* routines
2131
+ continue :($extract (item ,1 ,3 )=" Ens" )
2132
+ $$$ThrowOnError(..AddToSourceControl (item ))
2133
+ }
2134
+ }
2135
+
2136
+ }
0 commit comments