Skip to content

Commit d41e57e

Browse files
authored
Merge pull request #22 from intersystems/rework-menus
Fix issues found in demo recording process
2 parents 50b8151 + 88de775 commit d41e57e

File tree

10 files changed

+170
-141
lines changed

10 files changed

+170
-141
lines changed

cls/SourceControl/Git/API.cls

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ ClassMethod Configure()
3333
}
3434
}
3535

36+
/// API for git pull - just wraps Utils
37+
ClassMethod Pull()
38+
{
39+
quit ##class(SourceControl.Git.Utils).Pull()
40+
}
41+
3642
/// Locks the environment to prevent changes to code other than through git pull.
3743
/// Returns 1 if the environment was already locked, 0 if it was previously unlocked.
3844
ClassMethod Lock()

cls/SourceControl/Git/Change.cls

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
Class SourceControl.Git.Change Extends %Studio.SourceControl.Change
22
{
33

4+
/// Returns the name of the backup file for this Item in the file system
5+
/// Unused in this class, so override to avoid errors.
6+
Property BackupName As %String [ Calculated, SqlComputeCode = {s {*} = ""}, SqlComputed ];
7+
8+
/// Returns the name of this Item in the file system
9+
Property ExternalName As %String [ Calculated, SqlComputeCode = {S {*} = "" }, SqlComputed ];
10+
411
Storage Default
512
{
613
<Type>%Storage.Persistent</Type>

cls/SourceControl/Git/Extension.cls

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,29 @@ XData Menu
99
<MenuBase>
1010
<Menu Name="%SourceMenu" Type="0">
1111
<MenuItem Name="%Settings" />
12-
<MenuItem Name="%Init" Save = "001"/>
12+
<MenuItem Name="%Init" />
1313
<MenuItem Separator="true"/>
14-
<MenuItem Name="%GitWebUI" Save = "111" />
14+
<MenuItem Name="%GitWebUI" />
1515
<MenuItem Separator="true"/>
16-
<MenuItem Name="%Export" Save = "001" />
17-
<MenuItem Name="%ExportForce" Save = "001" />
18-
<MenuItem Name="%Import" Save = "001" />
19-
<MenuItem Name="%ImportForce" Save = "001" />
20-
<MenuItem Name="%Revert" Save = "001" />
16+
<MenuItem Name="%Export" />
17+
<MenuItem Name="%ExportForce" />
18+
<MenuItem Name="%Import" />
19+
<MenuItem Name="%ImportForce" />
2120
<MenuItem Separator="true"/>
22-
<MenuItem Name="%Commit" Save = "001" />
23-
<MenuItem Name="%Push" Save = "001"/>
24-
<MenuItem Name="%Fetch" Save = "001"/>
25-
<MenuItem Name="%Pull" Save = "001"/>
21+
<MenuItem Name="%AddToSC" />
22+
<MenuItem Name="%RemoveFromSC"/>
23+
<MenuItem Name="%Revert" />
24+
<MenuItem Name="%Commit" />
25+
<MenuItem Separator="true"/>
26+
<MenuItem Name="%Push" />
27+
<MenuItem Name="%Fetch" />
28+
<MenuItem Name="%Pull" />
2629
</Menu>
2730
<Menu Name="%SourceContext" Type="1">
28-
<MenuItem Name="%AddToSC" Save = "001" />
31+
<MenuItem Name="%AddToSC" />
2932
<MenuItem Name="%RemoveFromSC"/>
30-
<MenuItem Name="%Revert" Save = "001" />
31-
<MenuItem Name="%Commit" Save = "001" />
33+
<MenuItem Name="%Revert" />
34+
<MenuItem Name="%Commit" />
3235
</Menu>
3336
</MenuBase>
3437
}
@@ -81,20 +84,8 @@ Method OnSourceMenuItem(name As %String, ByRef Enabled As %String, ByRef Display
8184
set DisplayName = "Import All"
8285
} elseif name = "%ImportForce" {
8386
set DisplayName = "Import All Force"
84-
} elseif name = "%RepoStatus" && ##class(Utils).GitBinExists() {
85-
set DisplayName = "Check for modifications"
86-
} elseif name = "%Revert" {
87-
set DisplayName = "Revert Changes"
88-
do ..GetStatus(InternalName, .isInSourceControl, .isEditable,.isCheckedOut,.userCheckedOut)
89-
if '(##class(Change).IsUncommitted(##class(Utils).FullExternalName(InternalName))) || ($username '= userCheckedOut) {
90-
set Enabled = 0
91-
}
92-
} elseif name = "%Commit" {
93-
set DisplayName = "Commit Changes"
94-
do ..GetStatus(InternalName, .isInSourceControl, .isEditable,.isCheckedOut,.userCheckedOut)
95-
if '(##class(Change).IsUncommitted(##class(Utils).FullExternalName(InternalName))) || ($username '= userCheckedOut) {
96-
set Enabled = 0
97-
}
87+
} elseif $ListFind($ListBuild("%AddToSC","%RemoveFromSC","%Revert","%Commit"),name) {
88+
quit ..OnSourceMenuContextItem(InternalName,name,.Enabled,.DisplayName)
9889
} elseif name = "%Push" {
9990
// TODO: Only display if there are no files checked out by other users
10091
set Enabled = 1
@@ -135,6 +126,18 @@ Method OnSourceMenuContextItem(itemName As %String, menuItemName As %String, ByR
135126
set Enabled = -1
136127
} elseif $F(itemName,",") > 0 { //if more than one item is selected, we can only add/remove, no diff or blame
137128
set Enabled = $case(menuItemName,"%AddToSC":1,"%RemoveFromSC":1,:-1)
129+
} elseif menuItemName = "%Revert" {
130+
set Enabled = 1
131+
do ..GetStatus(itemName, .isInSourceControl, .isEditable,.isCheckedOut,.userCheckedOut)
132+
if '(##class(Change).IsUncommitted(##class(Utils).FullExternalName(itemName))) || ($username '= userCheckedOut) {
133+
set Enabled = 0
134+
}
135+
} elseif menuItemName = "%Commit" {
136+
set Enabled = 1
137+
do ..GetStatus(itemName, .isInSourceControl, .isEditable,.isCheckedOut,.userCheckedOut)
138+
if '(##class(Change).IsUncommitted(##class(Utils).FullExternalName(itemName))) || ($username '= userCheckedOut) {
139+
set Enabled = 0
140+
}
138141
} elseif ##class(Utils).IsInSourceControl(itemName) {
139142
set Enabled = $Case(menuItemName, "%AddToSC":-1,:1)
140143
} else {
@@ -287,3 +290,4 @@ Method GetStatus(InternalName As %String, ByRef IsInSourceControl As %Boolean, B
287290
}
288291

289292
}
293+

cls/SourceControl/Git/PullEventHandler/Default.cls

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,18 @@
11
Include SourceControl.Git
22

3-
Class SourceControl.Git.PullEventHandler.Default Extends SourceControl.Git.PullEventHandler
3+
Class SourceControl.Git.PullEventHandler.Default Extends (SourceControl.Git.PullEventHandler.IncrementalLoad, SourceControl.Git.PullEventHandler.PackageManager)
44
{
55

66
Parameter NAME = "Default";
77

8-
Parameter DESCRIPTION = "Performs an incremental load and compile of all changes pulled.";
8+
Parameter DESCRIPTION = "Does a zpm ""load <repo root>"" for PackageManager-enabled repos and an incremental load otherwise.";
99

1010
Method OnPull() As %Status
1111
{
12-
set loadSC = $$$OK
13-
set nFiles = 0
14-
for i=1:1:$Get(..ModifiedFiles) {
15-
if $Data(files(i))#2 {
16-
set internalName = ##class(SourceControl.Git.Utils).NameToInternalName(..ModifiedFiles(i))
17-
if (internalName = "") {
18-
write files(i), " was not imported into the database and will not be compiled. ", !
19-
} else {
20-
set compilelist(internalName) = ""
21-
set nFiles = nFiles + 1
22-
set loadSC = $$$ADDSC(loadSC,##class(SourceControl.Git.Utils).ImportItem(internalName, 1))
23-
}
24-
}
12+
If ##class(%Library.File).Exists(##class(%Library.File).NormalizeFilename("module.xml",..LocalRoot)) {
13+
Quit ##class(SourceControl.Git.PullEventHandler.PackageManager)$This.OnPull()
2514
}
26-
27-
if (nFiles = 0) {
28-
write "Nothing to compile.",!
29-
quit $$$OK
30-
}
31-
32-
Quit $System.OBJ.CompileList(.compilelist, "cukb")
15+
Quit ##class(SourceControl.Git.PullEventHandler.IncrementalLoad)$This.OnPull()
3316
}
3417

3518
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
Include SourceControl.Git
2+
3+
Class SourceControl.Git.PullEventHandler.IncrementalLoad Extends SourceControl.Git.PullEventHandler
4+
{
5+
6+
Parameter NAME = "Incremental Load";
7+
8+
Parameter DESCRIPTION = "Performs an incremental load and compile of all changes pulled.";
9+
10+
Method OnPull() As %Status
11+
{
12+
set loadSC = $$$OK
13+
set nFiles = 0
14+
for i=1:1:$Get(..ModifiedFiles) {
15+
if $Data(..ModifiedFiles(i))#2 {
16+
set internalName = ##class(SourceControl.Git.Utils).NameToInternalName(..ModifiedFiles(i),,0)
17+
if (internalName = "") {
18+
write ..ModifiedFiles(i), " was not imported into the database and will not be compiled. ", !
19+
} else {
20+
set compilelist(internalName) = ""
21+
set nFiles = nFiles + 1
22+
set loadSC = $$$ADDSC(loadSC,##class(SourceControl.Git.Utils).ImportItem(internalName, 1))
23+
}
24+
}
25+
}
26+
27+
if (nFiles = 0) {
28+
write "Nothing to compile.",!
29+
quit $$$OK
30+
}
31+
32+
Quit $System.OBJ.CompileList(.compilelist, "cukb")
33+
}
34+
35+
}
36+

cls/SourceControl/Git/Utils.cls

Lines changed: 69 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -140,94 +140,70 @@ ClassMethod UserAction(InternalName As %String, MenuName As %String, ByRef Targe
140140
($system.Version.GetOS()="Windows") {
141141
write !!,"===Path to git.exe not found: "_..GitBinPath()_"!===",!
142142
}
143+
144+
if (..Type(InternalName) = "csp") && ($Extract(InternalName,1) '= "/") {
145+
set InternalName = "/" _ InternalName
146+
}
143147

144-
if (menuName = "%SourceMenu") {
145-
if (menuItemName = "%Settings") {
146-
set Action = 2
147-
set Target = "/isc/studio/usertemplates/gitsourcecontrol/gitprojectsettings.csp?NSpace="_$namespace_"&Username="_$username
148-
} elseif (menuItemName = "%Init") {
149-
if ##class(%File).CreateDirectoryChain(..TempFolder()) {
150-
// cleanup items info
151-
kill @..#Storage@("items")
152-
kill @..#Storage@("TSH")
153-
set Action = 3
154-
set Target = ..RunGitCommand("init",.errStream,.outStream)
155-
} else {
156-
set ec = ..MakeError("Unable to create folder "_..TempFolder())
157-
}
158-
} elseif (menuItemName = "%GitWebUI") {
159-
set Action = 2
160-
set Target = "/isc/studio/usertemplates/gitsourcecontrol/webuidriver.csp/"_$namespace_"/"_$ZConvert(InternalName,"O","URL")
161-
} elseif (menuItemName = "%Export") || (menuItemName = "%ExportForce") {
162-
write "==export start==",!
163-
set ec = ..ExportAll($case(menuItemName="%ExportForce",1:$$$Force,:0))
164-
if ec {
165-
write !,"==export done==",!
166-
}
167-
} elseif (menuItemName = "%Import") {
168-
set ec = ..ImportAll()
169-
set Reload = 1
170-
} elseif (menuItemName = "%ImportForce") {
171-
set ec = ..ImportAll($$$Force)
172-
set Reload = 1
173-
} elseif (menuItemName = "%OpenRepoFolder") {
174-
set Action = 3
175-
set Target = ..TempFolder()
176-
} elseif (menuItemName = "%Revert") {
177-
set Reload = 1
178-
quit ..Revert(InternalName)
179-
} elseif (menuItemName = "%Commit") {
180-
set Target = "Please enter a commit message"
181-
set Action = 7
182-
quit $$$OK
183-
} elseif (menuItemName = "%Push") {
184-
quit ..Push()
185-
} elseif (menuItemName = "%Fetch") {
186-
$$$QuitOnError(..Fetch(.diffFiles))
187-
set pointer = 0
188-
while $ListNext(diffFiles, pointer, item){
189-
write !,item
190-
}
191-
write !
192-
} elseif (menuItemName = "%Pull") {
193-
quit ..Pull()
194-
} elseif ..IsMenuGitCommand(menuItemName) {
195-
set Action = 3
196-
#dim command As %String = $ZConvert($Extract(menuItemName, 2, *), "L")
197-
set ec = $$$OK
198-
if $Data(@..#Storage@("settings","hook"),hook)=1 {
199-
set $ListBuild(class,method) = hook
200-
set ec = $classmethod(class, method, command, InternalName)
201-
}
202-
if $$$ISOK(ec) {
203-
set Target = ..GitCommand(command)
204-
}
148+
if (menuItemName = "%Settings") {
149+
set Action = 2
150+
set Target = "/isc/studio/usertemplates/gitsourcecontrol/gitprojectsettings.csp?NSpace="_$namespace_"&Username="_$username
151+
} elseif (menuItemName = "%Init") {
152+
if ##class(%File).CreateDirectoryChain(..TempFolder()) {
153+
// cleanup items info
154+
kill @..#Storage@("items")
155+
kill @..#Storage@("TSH")
156+
do ..RunGitCommand("init",.errStream,.outStream)
157+
do errStream.OutputToDevice()
158+
do outStream.OutputToDevice()
159+
} else {
160+
set ec = ..MakeError("Unable to create folder "_..TempFolder())
205161
}
206-
} elseif (menuName = "%SourceContext") {
207-
208-
if (..Type(InternalName) = "csp") && ($Extract(InternalName,1) '= "/") {
209-
set InternalName = "/" _ InternalName
162+
} elseif (menuItemName = "%GitWebUI") {
163+
set Action = 2
164+
set Target = "/isc/studio/usertemplates/gitsourcecontrol/webuidriver.csp/"_$namespace_"/"_$ZConvert(InternalName,"O","URL")
165+
} elseif (menuItemName = "%Export") || (menuItemName = "%ExportForce") {
166+
write "==export start==",!
167+
set ec = ..ExportAll($case(menuItemName="%ExportForce",1:$$$Force,:0))
168+
if ec {
169+
write !,"==export done==",!
210170
}
211-
212-
if (menuItemName = "%AddToSC") {
213-
set ec = ..AddToSourceControl(InternalName)
214-
} elseif (menuItemName = "%RemoveFromSC") {
215-
set ec = ..RemoveFromSourceControl(InternalName)
216-
} elseif (menuItemName = "%Commit") {
217-
set Target = "Please enter a commit message"
218-
set Action = 7
219-
quit $$$OK
220-
}
221-
if ..IsContextMenuGitCommand(menuItemName) {
222-
set Action = 3
223-
set command = $ZConvert($Extract(menuItemName, 2, *), "L")
224-
set Target = ..GitCommand(command, InternalName)
171+
} elseif (menuItemName = "%Import") {
172+
set ec = ..ImportAll()
173+
set Reload = 1
174+
} elseif (menuItemName = "%ImportForce") {
175+
set ec = ..ImportAll($$$Force)
176+
set Reload = 1
177+
} elseif (menuItemName = "%OpenRepoFolder") {
178+
set Action = 3
179+
set Target = ..TempFolder()
180+
} elseif (menuItemName = "%Revert") {
181+
set Reload = 1
182+
quit ..Revert(InternalName)
183+
} elseif (menuItemName = "%Commit") {
184+
set Target = "Please enter a commit message"
185+
set Action = 7
186+
quit $$$OK
187+
} elseif (menuItemName = "%Push") {
188+
quit ..Push()
189+
} elseif (menuItemName = "%Fetch") {
190+
$$$QuitOnError(..Fetch(.diffFiles))
191+
set pointer = 0
192+
while $ListNext(diffFiles, pointer, item){
193+
write !,item
225194
}
195+
write !
196+
} elseif (menuItemName = "%Pull") {
197+
quit ..Pull()
198+
} elseif (menuItemName = "%AddToSC") {
199+
set ec = ..AddToSourceControl(InternalName)
200+
} elseif (menuItemName = "%RemoveFromSC") {
201+
set ec = ..RemoveFromSourceControl(InternalName)
202+
} elseif (menuItemName = "%Commit") {
203+
set Target = "Please enter a commit message"
204+
set Action = 7
205+
quit $$$OK
226206
}
227-
if ..IsImportAfter(menuItemName) && (Action = 3) {
228-
write "Choose Import All menu after work with Git!", !
229-
}
230-
//w Target,!
231207
quit ec
232208
}
233209

@@ -334,7 +310,7 @@ ClassMethod Pull(remote As %String = "origin") As %Status
334310
merge event.ModifiedFiles = files
335311
for i=1:1:$Get(files) {
336312
if $Data(files(i))#2 {
337-
set internalName = ##class(SourceControl.Git.Utils).NameToInternalName(..ModifiedFiles(i))
313+
set internalName = ##class(SourceControl.Git.Utils).NameToInternalName(event.ModifiedFiles(i),,0)
338314
if (internalName '= "") {
339315
set event.ModifiedItems(internalName) = ""
340316
}
@@ -376,6 +352,10 @@ ClassMethod AddToSourceControl(InternalName As %String) As %Status
376352
if 'sc {
377353
set ec = $$$ADDSC(ec, sc)
378354
}
355+
// Necessary for items in new folders
356+
do ..RunGitCommand("add",.errStream,.outStream,..ExternalName(InternalName))
357+
do outStream.OutputToDevice()
358+
do errStream.OutputToDevice()
379359
}
380360
set ec = $$$ADDSC(ec, ..ExportSCList())
381361
quit ec
@@ -954,11 +934,13 @@ ClassMethod ExportItem(InternalName As %String, expand As %Boolean = 1, force As
954934
$$$QuitOnError(..ExportRoutinesAux(InternalName , "/", 0, force))
955935
}else {
956936
if ..IsTempFileOutdated(InternalName) || force {
957-
958937
#dim filename As %String = ..FullExternalName(InternalName)
959938
write "exporting new version of ", InternalName, " to ", filename,!
960939
$$$QuitOnError($system.OBJ.ExportUDL(InternalName, filename,"-d/diff"))
961940
$$$QuitOnError(..UpdateRoutineTSH(InternalName, $Horolog))
941+
if '##class(SourceControl.Git.Change).IsUncommitted(filename) {
942+
$$$ThrowOnError(##class(SourceControl.Git.Change).SetUncommitted(filename, "add", InternalName, $Username, "", 1, "", "", 0))
943+
}
962944
}
963945
}
964946
quit $$$OK
@@ -1328,7 +1310,7 @@ ClassMethod NameToInternalName(Name, IgnorePercent = 1, IgnoreNonexistent = 1) A
13281310
}
13291311
If ((IgnorePercent)&&($extract(InternalName)="%")) { Set InternalName = "" } ; don't return a result for % items if instructed to ignore them
13301312
If ((IgnoreNonexistent)&&('##class(%RoutineMgr).Exists(InternalName))) { Set InternalName = "" } ; only return item names which exist in the DB
1331-
Quit ..NormalizeInternalName(InternalName)
1313+
Quit ..NormalizeInternalName(InternalName)
13321314
}
13331315

13341316
ClassMethod OutputConfigureMessage()
@@ -1340,3 +1322,4 @@ ClassMethod OutputConfigureMessage()
13401322
}
13411323

13421324
}
1325+

0 commit comments

Comments
 (0)