@@ -17,25 +17,34 @@ Property ExternalFile As %Boolean [ Required ];
1717
1818Method RestoreToFileTree ()
1919{
20+ // Make sure directory for file exists
21+ set dir = ##class (%File ).GetDirectory (..FullExternalName )
22+ if ('##class (%File ).DirectoryExists (dir )) {
23+ do ##class (%File ).CreateDirectoryChain (dir )
24+ }
25+
26+ // Recreate File
2027 set fileStream = ##class (%Stream.FileCharacter ).%New ()
2128 set fileStream .Filename = ..FullExternalName
2229 $$$ThrowOnError(fileStream .CopyFrom (..Contents ))
2330 $$$ThrowOnError(fileStream .%Save ())
2431
32+ // Add file to source-control / IRIS
2533 if '..ExternalFile {
2634 do ##class (SourceControl.Git.Utils ).ImportItem (..Name , 1 , 1 )
2735 do ##class (SourceControl.Git.Utils ).AddToServerSideSourceControl (..Name )
2836 }
2937
38+ // Delete discard record
3039 $$$ThrowOnError(..%DeleteId (..%Id ()))
3140}
3241
3342ClassMethod SaveDiscardState (InternalName As %String , name As %String ) As %Status
3443{
3544 set discardState = ..%New ()
36-
37- // If not an IRIS file
45+
3846 if (InternalName = " " ) {
47+ // If not in IRIS
3948 set externalName = ##class (%File ).Construct ($Get (^SYS (" SourceControl" ," Git" ," settings" ," namespaceTemp" )),name )
4049 set discardState .FullExternalName = externalName
4150 set discardState .Name = name
@@ -45,13 +54,14 @@ ClassMethod SaveDiscardState(InternalName As %String, name As %String) As %Statu
4554 set discardState .Name = InternalName
4655 set discardState .ExternalFile = 0
4756 }
48-
57+ // Copy over file contents
4958 set fileStream = ##class (%Stream.FileCharacter ).%New ()
5059 set fileStream .Filename = discardState .FullExternalName
51-
5260 do fileStream .%Open ()
5361 do discardState .Contents .CopyFrom (fileStream )
5462 do fileStream .%Close ()
63+
64+ // Save extra information
5565 set discardState .Username = $USERNAME
5666 set discardState .Branch = ##class (SourceControl.Git.Utils ).GetCurrentBranch ()
5767 set discardState .Timestamp = $zdatetime ($horolog , 3 )
0 commit comments