Skip to content

Commit

Permalink
export in xml added
Browse files Browse the repository at this point in the history
  • Loading branch information
gevorg95 committed Jan 23, 2018
1 parent 4c0fc8b commit 097fe96
Showing 1 changed file with 59 additions and 143 deletions.
202 changes: 59 additions & 143 deletions sc.code.cls
Original file line number Diff line number Diff line change
Expand Up @@ -4,47 +4,56 @@
Class sc.code [ Abstract ]
{

/// do ##class(sc.code).export()
/// export all available code
ClassMethod export(generated = 0, system = 0, percent = 0, mapped = 0, mask = "")
ClassMethod export(generated = 0, system = 0, percent = 0, mapped = 0, dfi = 0)
{


#define export(%code, %file) s sc = $system.OBJ.ExportUDL(%code, %file,"/diffexport") ##continue
w:sc "Ok" d:'sc $system.OBJ.DisplayError(sc)
#define export(%code, %file) ##continue
s sc = $system.OBJ.ExportUDL(%code, %file,"/diffexport") ##continue
w +sc ##continue
if 'sc d $system.OBJ.DisplayError(sc)

#define isGenerated(%code) ##class(%RoutineMgr).IsGenerated( %code )
#define isPercented(%code) ("%" = $e(%code))
#define isMapped(%code) ##class(%RoutineMgr).IsMapped( %code )
#define log w !, code, " -> ", $piece(filename,..workdir(),2), " "
#define log w !, code, " -> ", filename, " "

#define mkdir(%filename) ##continue
s path = ##class(%File).GetDirectory( %filename ) ##continue
if '##class(%File).DirectoryExists( path ) { ##continue
s sc = ##class(%File).CreateDirectoryChain( path ) ##continue
w !, "mkdir ", path, " ", sc ##continue
}

w "#; Exporting to ", ..workdir(),!



#; classes
s rs = ##class(%ResultSet).%New("%Dictionary.ClassDefinition:Summary")
if rs.Execute() {

while rs.%Next(){

s code = rs.Name _ ".cls", isSystem = rs.System
if ( 'system && isSystem ) continue
if ( 'generated && $$$isGenerated( code ) ) continue
if ( 'percent && $$$isPercented( code ) ) continue
if ( 'mapped && $$$isMapped( code ) ) continue
if ( '$find( code, mask ) ) continue

s filename = ..filename( code )
$$$mkdir( filename )
$$$log
$$$export( code, filename )
if dfi{
$$$log
$$$export( code, filename )
}
else{
do $system.OBJ.Export(code,filename_".xml")
}



} s rs=""
}

#; routines
s rs = ##class(%ResultSet).%New("%Routine:RoutineList")
if rs.Execute() {
Expand All @@ -55,48 +64,51 @@ ClassMethod export(generated = 0, system = 0, percent = 0, mapped = 0, mask = ""
if ( 'generated && $$$isGenerated( code ) ) continue
if ( 'percent && $$$isPercented( code ) ) continue
if ( 'mapped && $$$isMapped( code ) ) continue
if ( '$find( code, mask ) ) continue


s filename = ..filename( code )
$$$mkdir( filename )
$$$log
$$$export( code, filename )
if dfi{
$$$log
$$$export( code, filename )
}
else{
do $system.OBJ.Export(code,filename_".xml")
}

} s rs=""
}


#; dfi
#define export(%code,%file) s sc = ##class(%DeepSee.UserLibrary.Utils).%Export( %code, %file, 0 )

#define export(%code,%file) w ##class(%DeepSee.UserLibrary.Utils).%Export( %code, %file, 0 )
s sql = "Select fullName as Name From %DeepSee_UserLibrary.FolderItem"
s rs = ##class(%SQL.Statement).%ExecDirect( .stm, sql )
while rs.%Next() {
s code = rs.Name, filename = ..filename( code_".dfi" )
if ( '$find( code, mask ) ) continue
if ($L(code,"$TRASH")>1) continue
$$$mkdir( filename )
$$$log
$$$export(code,filename)
if dfi{
$$$log
$$$export( code, filename )
}
else{
do $system.OBJ.Export(code,filename_".xml")
}

} s rs=""

w !,!, "#; Exported to ", ..workdir()


Q 1
}

/// import all from workdir
ClassMethod import(filemask = "*.xml;*.cls;*.mac;*.int;*.inc;*.dfi", qspec = "cku-d", ByRef err = "", recurse = 1, ByRef loaded = "", verbose = 1) As %Status
ClassMethod import(filemask = "*.*", qspec = "cku-d", ByRef err = "", recurse = 1, ByRef loaded = "", verbose = 1) As %Status
{
#define push(%dir) s dirs( $i( dirs ) ) = %dir
#define next(%i,%dir) s %i=$o( dirs( "" ), 1, %dir ) k:%i'="" dirs(%i)
#define isDirectory(%type) ( %type = "D" )
#define log w !, $piece(filename,..workdir(),2), " " w:sc "Ok" d:'sc $system.OBJ.DisplayError(sc)
#define log w !, filename, " ", +sc, $S(sc=1:"",1: " "_$system.Status.GetOneErrorText(sc))

s sc = 1, dirs = "", dir = ..workdir() $$$push(dir)
if verbose w "#; Importing from ", dir,!
d ..setIgnore(.fm)

for { $$$next(i,dir) Q:i="" Q:dir=""

s rs = ##class(%File).FileSetFunc( dir, filemask, , 1 )
Expand All @@ -108,78 +120,23 @@ ClassMethod import(filemask = "*.xml;*.cls;*.mac;*.int;*.inc;*.dfi", qspec = "ck
if recurse $$$push(filename)
continue
}
// check file filter
if ..inFilter(.fm,filename) continue

s ext = $p( filename, ".", * )

if $zcvt( ext, "l" ) = "dfi" {
s sc = ##class(%DeepSee.UserLibrary.Utils).%Import( filename, 1, 0, 0, "", .dsloaded )
s sc = ##class(%DeepSee.UserLibrary.Utils).%Import( filename, 1, 0, 0, "", .loaded )
} else {
// load classes only
s sc = $system.OBJ.Load( filename, "k-d", .err, .loaded)
s sc = $system.OBJ.Load( filename, qspec, .err, .loaded)
}

if verbose $$$log

}
// compile all the loaded classes to obey dependencies
s sc=$system.OBJ.CompileList( .loaded, "cukbr-d/multicompile",.err )

}

if verbose {

if $D(err) {
s i=$Order(err(""))
while i'="" {
w !,err(i)
s i=$O(err(i))
}
}

w !,!,"#; Imported from ", ..workdir()
}
Q sc
}

ClassMethod inFilter(ByRef filtermask,filename) as %Boolean
{
s result=0
for
{
if '$d(filtermask($I(i))) quit
set filter=$piece(filtermask(i),"*")
if $length(filename,filter)>1 set result=1
}

quit result
}

/// get the filtermask for the repository.
/// looks for .gitignore file and applies all the lines to filters
ClassMethod setIgnore(ByRef filtermask)
{

// working with .gitignore file
// gitignore consists of masks of filtering files
s filename=..workdir()_"/.gitignore"
if '##class(%File).Exists(filename) quit
s file=##class(%File).%New(filename)
s sc=file.Open("R")
if 'sc
{
if verbose d $System.OBJ.DisplayError(sc) return
}
}

While 'file.AtEnd
{
s filtermask($I(filtermask))=file.ReadLine()
}
quit
Q sc
}


/// get or set working directory for export/import source
ClassMethod workdir(workdir)
{
Expand All @@ -195,40 +152,6 @@ ClassMethod gln() [ CodeMode = expression, Private ]
"^"_$classname()
}



ClassMethod init()
{
#define confile "/cos.json"
set stream=##class(%Stream.FileCharacter).%New()
set sc=stream.LinkToFile(..workdir()_$$$confile)
s conf={}.%FromJSON(stream.Read($$$MaxCacheInt))
s gln=..gln()
s @gln@("compileList")=conf.compileList
s @gln@("projectName")=conf.projectName
w "compileList="_conf.compileList,!
w "projectName="_conf.projectName
}

/// export release file for list and project settings
ClassMethod release() {
s gln=..gln()
s list=$G(@gln@("compileList"))
if list="" w "Nothing to release. Run init method first" quit

s release=$G(@gln@("projectName"),"release")
s release=release_$p($zdt($h,8)," ")_$tr($p($p($zdt($h)," ",2),":",1,2),":")_".xml"
D $System.OBJ.Export(list,release)
w "All objects with mask "_list_" has been exported to "_release
}

ClassMethod compile() {
s gln=..gln()
s list=$G(@gln@("compileList"))
if list="" w "Nothing to compile. Run init method first" quit
d $System.OBJ.compile(list)
}

/// test.dfi -> /dfi/test.dfi
/// test.cls -> /cls/test.cls
/// testpkg.test.cls -> /cls/testpkg/test.cls
Expand Down Expand Up @@ -256,15 +179,14 @@ ClassMethod filename(code)
}

s filename = ##class(%File).NormalizeFilename( code, wd )
#; lowercase file extension
s $p(filename,".",*)=ext
//B:code="DPRep.Rest.JSON.cls" "L"
#; for *.cls Package.Subpackage.ClassName.cls -> Folder/Subfolder/ClassName.cls
if ext ="cls" {
s dirs = $piece( code, ".",1, *-2 ), dirs = $translate( dirs, ".", "/" )
s relpath = dirs _ "/" _ $piece( code, ".", *-1, * ) ;
s filename = ##class(%File).NormalizeFilename( relpath, wd )
}
set filename = $extract(filename,1,*-4)
Q filename
}

Expand All @@ -274,11 +196,8 @@ ClassMethod importUpdated(filemask = "*.*", qspec = "cku-d", ByRef err = "", rec
#define push(%dir) s dirs( $i( dirs ) ) = %dir
#define next(%i,%dir) s %i=$o( dirs( "" ), 1, %dir ) k:%i'="" dirs(%i)
#define isDirectory(%type) ( %type = "D" )
#define log w !, $piece(filename,..workdir(),2)," " w:sc "Ok" d:'sc $system.OBJ.DisplayError( sc )

#define log w !, filename, " ->1 ", codename, " ", +sc
s sc = 1, dirs = "", dir = ..workdir() $$$push(dir)
if verbose w "#; Importing updated from ", dir,!
d ..setIgnore(.fm)
for { $$$next(i,dir) Q:i="" Q:dir=""

s rs = ##class(%File).FileSetFunc( dir, filemask, , 1 )
Expand All @@ -291,34 +210,33 @@ ClassMethod importUpdated(filemask = "*.*", qspec = "cku-d", ByRef err = "", rec
continue
}

// check file filter
if ..inFilter(.fm,filename) continue

s filets = rs.DateModified
s codename = ..codename( filename, .ext )
s codets = ..codets( codename, ext )

#; w !, filename, $c(9), "(", filets, ")"
#; w !, codename, $c(9), "(", codets, ")"

if ( filets '] codets ) continue

//w codename,! B "L"

/*
w !, " ************* import ************** "
w !, "file: ", filets
w !, "code: ", codets
*/

if ext = "dfi" {

s sc = ##class(%DeepSee.UserLibrary.Utils).%Import( filename, 1, 0, 0, "", .loaded )

} else {

#; drop existing code before import ( purge DateModified )
#; s:codets'="" sc = ##class(%RoutineMgr).Delete( codename )
k err s sc = $system.OBJ.Load( filename, qspec, .err, .loaded)
s:codets'="" sc = ##class(%RoutineMgr).Delete( codename )
s sc = $system.OBJ.Load( filename, qspec, .err, .loaded)

}

if verbose $$$log
}
}
w:verbose !,"#; Imported updated from ", ..workdir()
Q sc
}

Expand All @@ -332,7 +250,7 @@ ClassMethod codename(filename, ByRef ext = "")
s fullname = $tr( codename, "\", "/" ) ; return fullname for dfi in $$$IsWINDOWS
Q $p( fullname, ".", 1, *-1 ) ;remove extension
}
if (ext ="cls")!(ext="int")!(ext="inc")!(ext="mac") s codename=$tr(codename,"\/","..")
if (ext ="cls")!(ext="int")!(ext="inc")!(ext="mac") s codename=$tr(codename,"/",".")
Q codename
}

Expand All @@ -354,6 +272,4 @@ ClassMethod codets(codename, ext)
Q $p( ts, "." ) ;remove ms
}


}

0 comments on commit 097fe96

Please sign in to comment.