Skip to content

Commit 390bfd3

Browse files
authored
Merge pull request #576 from intersystems/524-deleting-deleted-files-on-import-all-fails
Catch errors on deleting items with nonexistent files
2 parents a520cda + 40258d4 commit 390bfd3

File tree

2 files changed

+39
-25
lines changed

2 files changed

+39
-25
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3939
- Initialize repo in settings page now uses entered repo (#486)
4040
- Report error more clearly if you try to create a branch with an invalid name (#534)
4141
- Don't default to WINDOWS style paths (#357)
42+
- Fix errors when deleting non-existent files on import (#524)
4243

4344
## [2.6.0] - 2024-10-07
4445

cls/SourceControl/Git/PullEventHandler/IncrementalLoad.cls

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -44,32 +44,45 @@ Method OnPull() As %Status
4444
}
4545

4646
Method DeleteFile(item As %String) As %Status
47-
{
48-
set sc = $$$OK
49-
set type = ##class(SourceControl.Git.Utils).Type(item)
50-
set name = ##class(SourceControl.Git.Utils).NameWithoutExtension(item)
51-
set deleted = 1
52-
if type = "prj" {
53-
set sc = $system.OBJ.DeleteProject(name)
54-
}elseif type = "cls" {
55-
set sc = $system.OBJ.Delete(item)
56-
}elseif $listfind($listbuild("mac","int","inc","bas","mvb","mvi"), type) > 0 {
57-
set sc = ##class(%Routine).Delete(item)
58-
}elseif type = "csp" {
59-
set sc = $System.CSP.DeletePage(item)
60-
}elseif ##class(SourceControl.Git.Utils).UserTypeCached(item) {
61-
set sc = ##class(%Library.RoutineMgr).Delete(item)
62-
} else {
63-
set deleted = 0
64-
}
65-
66-
if deleted && $$$ISOK(sc) {
67-
do ##class(SourceControl.Git.Utils).RemoveRoutineTSH(item)
68-
kill $$$TrackedItems(##class(SourceControl.Git.Utils).NormalizeExtension(item))
69-
} else {
70-
if +$system.Status.GetErrorCodes(sc) = $$$ClassDoesNotExist {
71-
// if something we wanted to delete is already deleted -- good!
47+
{
48+
try {
49+
set sc = $$$OK
50+
set type = ##class(SourceControl.Git.Utils).Type(item)
51+
set name = ##class(SourceControl.Git.Utils).NameWithoutExtension(item)
52+
set deleted = 1
53+
if type = "prj" {
54+
set sc = $system.OBJ.DeleteProject(name)
55+
}elseif type = "cls" {
56+
set sc = $system.OBJ.Delete(item)
57+
}elseif $listfind($listbuild("mac","int","inc","bas","mvb","mvi"), type) > 0 {
58+
set sc = ##class(%Routine).Delete(item)
59+
}elseif type = "csp" {
60+
set sc = $System.CSP.DeletePage(item)
61+
}elseif ##class(SourceControl.Git.Utils).UserTypeCached(item) {
62+
set sc = ##class(%Library.RoutineMgr).Delete(item)
63+
} else {
64+
set deleted = 0
65+
}
66+
67+
if deleted && $$$ISOK(sc) {
68+
do ##class(SourceControl.Git.Utils).RemoveRoutineTSH(item)
69+
kill $$$TrackedItems(##class(SourceControl.Git.Utils).NormalizeExtension(item))
70+
} else {
71+
if +$system.Status.GetErrorCodes(sc) = $$$ClassDoesNotExist {
72+
// if something we wanted to delete is already deleted -- good!
73+
set sc = $$$OK
74+
}
75+
}
76+
} catch e {
77+
set filename = ##class(SourceControl.Git.Utils).FullExternalName(item)
78+
if '##class(%File).Exists(filename) {
79+
do ##class(SourceControl.Git.Utils).RemoveRoutineTSH(item)
80+
// file doesn't exist anymore despite error -- should be ok
7281
set sc = $$$OK
82+
} else {
83+
// Item still exists and was not deleted -- bad
84+
set sc = e.AsStatus()
85+
do e.Log()
7386
}
7487
}
7588
return sc

0 commit comments

Comments
 (0)