Skip to content

Commit a115333

Browse files
committed
[ADD] get patch form local git
1 parent e46074b commit a115333

File tree

4 files changed

+186
-34
lines changed

4 files changed

+186
-34
lines changed

Diff for: sc.code.cls renamed to cls/sc/code.cls

+22-10
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,26 @@ ClassMethod import(filemask = "*.xml;*.cls;*.mac;*.int;*.inc;*.dfi", qspec = "ck
157157
Q sc
158158
}
159159

160-
ClassMethod patch(filename = "", CommitFrom = "", CommitTo = "") As %Status
160+
ClassMethod patch(filename = "", commitFrom = "", commitTo = "") As %Status
161161
{
162162
s gln = ..gln()
163-
164-
set owner = @gln@("owner")
165-
set repository = @gln@("repository")
166-
set user = @gln@("user")
167-
set password = @gln@("password")
168-
169-
set sc = ##class(sc.GitHub).Get(.items, owner, repository, user, password, CommitFrom, CommitTo)
170-
return:$$$ISERR(sc) sc
163+
s git = @gln@("git")
164+
165+
set:commitTo="" commitTo=1
166+
if (git = 0) {
167+
set:(commitFrom="")||(commitFrom=1) commitFrom=0
168+
set sc = ##class(sc.diff.gitLocal).buildDiff(..workdir(), "HEAD~"_commitTo, "HEAD~"_commitFrom, .items)
169+
return:$$$ISERR(sc) sc
170+
}elseif(git = 1) {
171+
set owner = @gln@("owner")
172+
set repository = @gln@("repository")
173+
set user = @gln@("user")
174+
set password = @gln@("password")
175+
set:commitFrom="" commitFrom=1
176+
177+
set sc = ##class(sc.diff.gitHub).Get(.items, owner, repository, user, password, commitFrom, commitTo)
178+
return:$$$ISERR(sc) sc
179+
}
171180

172181
if (filename="") {
173182
set filename=$G(@gln@("projectName"),"patch")
@@ -244,14 +253,16 @@ ClassMethod init(confile = "isc.json")
244253
s @gln@("repository")=conf.repository
245254
s @gln@("user")=conf.user
246255
s @gln@("password")=conf.password
256+
s @gln@("git")=conf.git
247257

248258
w "compileList="_conf.compileList,!
249259
w "projectName="_conf.projectName,!
250260
w "owner="_conf.owner,!
251261
w "repository="_conf.repository,!
252262
w "user="_conf.user,!
253263
w "password="_conf.password,!
254-
264+
w "git="_conf.git,!
265+
255266
quit $$$OK
256267
}
257268

@@ -418,3 +429,4 @@ ClassMethod fixDashIntoName()
418429
}
419430

420431
}
432+

Diff for: sc.GitHub.cls renamed to cls/sc/diff/gitHub.cls

+5-24
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
Class sc.GitHub
1+
Class sc.diff.gitHub
22
{
33

4-
ClassMethod Get(Output Items, Owner As %String = "", Repository As %String = "", Username As %String = "clminstaller", Password As %String = "clminstaller2016", CommitFrom As %Integer = "", CommitTo As %Integer = "") As %Status
4+
ClassMethod Get(Output items, Owner As %String = "", Repository As %String = "", Username As %String = "clminstaller", Password As %String = "clminstaller2016", CommitFrom As %Integer = "", CommitTo As %Integer = "") As %Status
55
{
66
#dim req As %Net.HttpRequest
77
set req = ..CreateRequest(Username, Password)
88
set req.Location = "repos/" _ Owner _ "/" _ Repository _ "/commits" // as described in https://developer.github.com/v3/repos/
99

1010
set links = ##class(%ListOfDataTypes).%New()
11-
set sc = ..GetSHAs(.req, CommitFrom, CommitTo,.Items)
11+
set sc = ..GetSHAs(.req, CommitFrom, CommitTo, .items)
1212

1313
return sc
1414
}
@@ -24,13 +24,6 @@ ClassMethod GetSHAs(Request As %Net.HttpRequest, CommitFrom As %Integer, CommitT
2424

2525
#dim objects As List of %ZEN.proxyObject
2626
set st = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(Request.HttpResponse.Data,,.objects,1)
27-
28-
set:CommitFrom="" CommitFrom=1
29-
set:CommitTo="" CommitTo=1
30-
if (CommitFrom > CommitTo) {
31-
w "CommitFrom can't be more than CommitTo",!
32-
return $$$NO
33-
}
3427

3528
if ((CommitFrom >= 1) && (CommitTo <= objects.Size)) {
3629
set list = ""
@@ -73,7 +66,8 @@ ClassMethod GetFileNameForReleaseBySHAs(Request As %Net.HttpRequest, SHAsList, O
7366
set fileName = files.GetAt(j).%data("filename")
7467
set:$L(fileName,".xml")'=1 fileName = $extract(fileName,1,*-4)
7568
continue:..IsCacheFile(fileName)=0
76-
set filesForRelease(..ToCacheName(fileName)) = ""
69+
do ##class(sc.diff.utils).ToCacheName(.fileName)
70+
set filesForRelease(fileName) = ""
7771
}
7872
}
7973
}
@@ -110,18 +104,5 @@ ClassMethod IsCacheFile(FileName As %String) As %Boolean
110104
return $F(extensions,","_$ZCVT(fileExtension,"l")_",")
111105
}
112106

113-
ClassMethod ToCacheName(FileName) As %String
114-
{
115-
set:$L(FileName,".xml")'=1 FileName = $extract(FileName,1,*-4)
116-
set str = $Select($L(FileName,"cls/")>1:$Replace($P(FileName,"cls/",2),"/","."),
117-
$L(FileName,"csp/")>1:$Replace($P(FileName,"csp/",2),"/","."),
118-
$L(FileName,"dfi/")>1:$Replace($P(FileName,"dfi/",2),"/","-"),
119-
$L(FileName,"inc/")>1:$Replace($P(FileName,"inc/",2),"/","."),
120-
$L(FileName,"web/")>1:$Replace($P(FileName,"web/",2),"/","."),
121-
1:$Replace(FileName,"/",".")
122-
)
123-
set str = $P(str,".",1,*-1)_"."_ $ZCVT($P(str,".",*),"U")
124-
quit str
125107
}
126108

127-
}

Diff for: cls/sc/diff/gitLocal.cls

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
Class sc.diff.gitLocal
2+
{
3+
4+
/// Get diff between two points in repository
5+
/// repo - repository root directory
6+
/// sha1, sha2 - poins of history in repository
7+
///
8+
/// Internal diff statuses:
9+
/// M modified - File has been modified
10+
/// C copy-edit - File has been copied and modified //3
11+
/// R rename-edit - File has been renamed and modified //3
12+
/// A added - File has been added
13+
/// D deleted - File has been deleted
14+
/// U unmerged - File has conflicts after a merge
15+
///
16+
/// do ##class(isc.diff.gitLocal).buildDiff("C:\\temp\cache-udl\", "HEAD~10", "HEAD", release)
17+
ClassMethod buildDiff(repo As %String, sha1 As %String, sha2 As %String, Output items) As %Status
18+
{
19+
$$$TOE(sc, ..createFile(.tempFile))
20+
do $system.Process.CurrentDirectory(repo)
21+
$$$TOE(sc, ..execute($$$FormatText("git diff --name-status %1 %2 > %3 2>&3", sha1, sha2, tempFile)))
22+
$$$TOE(sc, ..fileToString(tempFile, .diffRaw))
23+
24+
for i=1:1:$length(diffRaw, $c(10))
25+
{
26+
set element = $piece(diffRaw, $c(10), i)
27+
set status = $e($piece(element, $c(9)))
28+
set file = $piece(element, $c(9), 2)
29+
30+
if ($l(file,"src/") '= 2) continue
31+
32+
set isRelevantFile = ##class(sc.diff.utils).isRelevantFile(file)
33+
if ((element="") || ('isRelevantFile)) continue
34+
35+
if $length(element, $c(9))=2
36+
{
37+
if ((status="M") || (status="U")) || (status="A")
38+
{
39+
do ##class(sc.diff.utils).ToCacheName(.file)
40+
set items(file) = ""
41+
}
42+
}elseif $length(element, $c(9))=3
43+
{
44+
set file = $piece(element, $c(9), 3)
45+
if ($l(file,"src/") '= 2) continue
46+
if ((status="C") || (status="R"))
47+
{
48+
do ##class(sc.diff.utils).ToCacheName(.newFile)
49+
set items(file) = ""
50+
}
51+
}
52+
}
53+
return sc
54+
}
55+
56+
/// Create file name.
57+
/// Если name не задан, то возвращается имя созданного файла (в папке Temp).
58+
/// Если name - расширение, то возвращается имя созданного файла (в папке Temp) с заданным расширением.
59+
/// stream - стрим файла
60+
/// content - строка или stream который записывается в файл
61+
ClassMethod createFile(ByRef name As %String = "", Output stream As %Stream.FileBinary, content As %String) As %Status
62+
{
63+
#dim sc As %Status = $$$OK
64+
65+
if name="" {
66+
set name = ##class(%File).TempFilename()
67+
} elseif $length(name, ".")=1 {
68+
set name = ##class(%File).TempFilename(name)
69+
}
70+
71+
set stream = ##class(%Stream.FileBinary).%New()
72+
set sc = stream.LinkToFile(name)
73+
74+
if $data(content) {
75+
if $isObject(content) {
76+
set sc = stream.CopyFrom(content)
77+
} else {
78+
set sc = stream.Write(content)
79+
}
80+
quit:$$$ISERR(sc) sc
81+
set sc = stream.%Save()
82+
do stream.Rewind()
83+
}
84+
85+
quit sc
86+
}
87+
88+
/// Прочитать файл в строку
89+
ClassMethod fileToString(name As %String, Output content As %String, delete As %Boolean = {$$$YES}) As %Status
90+
{
91+
#dim sc As %Status = $$$OK
92+
set stream = ##class(%Stream.FileBinary).%New()
93+
set sc = stream.LinkToFile(name)
94+
95+
set content = stream.Read($$$MaxStringLength)
96+
97+
if delete {
98+
kill stream
99+
set sc = ..deleteFile(name)
100+
}
101+
102+
quit sc
103+
}
104+
105+
/// Удалить файл
106+
ClassMethod deleteFile(name As %String) As %Status
107+
{
108+
#dim sc As %Status = $$$OK
109+
set success = ##class(%File).Delete(name, .code)
110+
set:success'=$$$YES sc = $$$ERROR($$$GeneralError, $$$FormatText("Error deleting file %1 with code %2", name, code))
111+
quit sc
112+
}
113+
114+
/// Выполнить команду ОС
115+
ClassMethod execute(cmd, debug As %Boolean = {$$$NO}) As %Status
116+
{
117+
#dim sc As %Status = $$$OK
118+
set code = ""
119+
//set out = ""
120+
write:debug !, "cmd: ", cmd
121+
//set sc = ##class(%Net.Remote.Utility).RunCommandViaZF(cmd, , .out, timeout, $$$YES, .code)
122+
set code = $zf(-1, cmd)
123+
write:debug !,"code: ", code
124+
125+
if code'=0 {
126+
set sc1 = $$$ERROR($$$GeneralError, $$$FormatText("Комманда ОС: `%1` завершилась с кодом: `%2`", cmd, code))
127+
set sc = $$$ADDSC(sc, sc1)
128+
}
129+
return sc
130+
}
131+
132+
}
133+

Diff for: cls/sc/diff/utils.cls

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
Class sc.diff.utils
2+
{
3+
4+
Parameter TRACKEDEXT As List = {$lb("xml", "cls", "csp", "csr", "mac", "int", "bas", "inc", "gbl", "prj", "obj", "pkg", "gof", "dfi", "pivot", "dashboard")};
5+
6+
ClassMethod ToCacheName(ByRef FileName)
7+
{
8+
set:$L(FileName,".xml")'=1 FileName = $extract(FileName,1,*-4)
9+
set str = $Select($L(FileName,"cls/")>1:$Replace($P(FileName,"cls/",2),"/","."),
10+
$L(FileName,"csp/")>1:$Replace($P(FileName,"csp/",2),"/","."),
11+
$L(FileName,"dfi/")>1:$Replace($P(FileName,"dfi/",2),"/","-"),
12+
$L(FileName,"inc/")>1:$Replace($P(FileName,"inc/",2),"/","."),
13+
$L(FileName,"web/")>1:$Replace($P(FileName,"web/",2),"/","."),
14+
1:$Replace(FileName,"/",".")
15+
)
16+
set FileName = $P(str,".",1,*-1)_"."_ $ZCVT($P(str,".",*),"U")
17+
}
18+
19+
ClassMethod isRelevantFile(file As %String) As %Boolean
20+
{
21+
set ext = $select($length(file, ".")=1:"", 1:$piece(file, ".", *))
22+
quit $lf(..#TRACKEDEXT, ext)>0
23+
}
24+
25+
}
26+

0 commit comments

Comments
 (0)