Skip to content

Commit

Permalink
Merge pull request #12 from intersystems-ru/master
Browse files Browse the repository at this point in the history
Introduced .gitignore filter support, $TRASH export filter, Compile after loading in import
  • Loading branch information
doublefint authored May 21, 2017
2 parents a50f634 + 4fff793 commit 5f15436
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 6 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
.DS*

dev.md

10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
# cache-udl
Export/Import sources in UDL format for [ISC Caché 2016.2](http://www.intersystems.com/our-products/cache/cache-overview/)

# Installation
Download code and run
```
do $System.OBJ.ImportDir("/dir/cache-udl","*.xml;*.cls;*.mac;*.int;*.inc;*.dfi","ck",,1)
```
or
import the [release](https://github.com/intersystems-ru/cache-udl/releases) to the namespace.

Map sc package to %All namespace to make it visible in any namespace.

## Setup working directory ( optional )
```
NS> w ##class(sc.code).workdir("/path/to/your/working/directory/")
Expand Down
Empty file removed dev.md
Empty file.
64 changes: 58 additions & 6 deletions sc.code.cls
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ ClassMethod export(generated = 0, system = 0, percent = 0, mapped = 0, mask = ""
#define isGenerated(%code) ##class(%RoutineMgr).IsGenerated( %code )
#define isPercented(%code) ("%" = $e(%code))
#define isMapped(%code) ##class(%RoutineMgr).IsMapped( %code )
#define log w !, code, " -> ", ##class(%File).GetFilename(filename), " "
#define log w !, code, " -> ", $piece(filename,..workdir(),2), " "

#define mkdir(%filename) ##continue
s path = ##class(%File).GetDirectory( %filename ) ##continue
Expand Down Expand Up @@ -74,6 +74,7 @@ ClassMethod export(generated = 0, system = 0, percent = 0, mapped = 0, mask = ""
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)
Expand All @@ -91,10 +92,11 @@ ClassMethod import(filemask = "*.*", qspec = "cku-d", ByRef err = "", recurse =
#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 !, ##class(%File).GetFilename(filename), " " w:sc "Ok" d:'sc $system.OBJ.DisplayError(sc)
#define log w !, $piece(filename,..workdir(),2), " " w:sc "Ok" d:'sc $system.OBJ.DisplayError(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 @@ -106,23 +108,69 @@ ClassMethod import(filemask = "*.*", qspec = "cku-d", ByRef err = "", recurse =
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, "", .loaded )
s sc = ##class(%DeepSee.UserLibrary.Utils).%Import( filename, 1, 0, 0, "", .dsloaded )
} else {
s sc = $system.OBJ.Load( filename, qspec, .err, .loaded)
// load classes only
s sc = $system.OBJ.Load( filename, "k-d", .err, .loaded)
}

if verbose $$$log

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

}
w:verbose !,!,"#; Imported from ", ..workdir()
if verbose {
if $D(err) zw err
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
}


/// get or set working directory for export/import source
ClassMethod workdir(workdir)
{
Expand Down Expand Up @@ -181,10 +229,11 @@ 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 !, ##class(%File).GetFilename(filename)," " w:sc "Ok" d:'sc $system.OBJ.DisplayError( sc )
#define log w !, $piece(filename,..workdir(),2)," " w:sc "Ok" d:'sc $system.OBJ.DisplayError( 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 @@ -197,6 +246,9 @@ 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 )
Expand Down

0 comments on commit 5f15436

Please sign in to comment.