From 1f746515741956de5804f32853e1a660db4fec4b Mon Sep 17 00:00:00 2001 From: isc-hwojnick Date: Wed, 7 Aug 2024 09:33:26 -0400 Subject: [PATCH 01/18] mostly done with changes --- cls/SourceControl/Git/DiscardState.cls | 96 +++++++++++++++++ cls/SourceControl/Git/WebUIDriver.cls | 22 +++- .../share/git-webui/webui/css/git-webui.css | 3 + .../share/git-webui/webui/img/discarded.svg | 1 + .../share/git-webui/webui/js/git-webui.js | 100 +++++++++++++++++- .../share/git-webui/webui/css/git-webui.less | 4 + .../share/git-webui/webui/img/discarded.svg | 1 + .../src/share/git-webui/webui/js/git-webui.js | 100 +++++++++++++++++- 8 files changed, 316 insertions(+), 11 deletions(-) create mode 100644 cls/SourceControl/Git/DiscardState.cls create mode 100644 git-webui/release/share/git-webui/webui/img/discarded.svg create mode 100644 git-webui/src/share/git-webui/webui/img/discarded.svg diff --git a/cls/SourceControl/Git/DiscardState.cls b/cls/SourceControl/Git/DiscardState.cls new file mode 100644 index 00000000..8728f7d9 --- /dev/null +++ b/cls/SourceControl/Git/DiscardState.cls @@ -0,0 +1,96 @@ +Class SourceControl.Git.DiscardState Extends (%Persistent, %JSON.Adaptor) +{ + +Property FullExternalName As %String(MAXLEN = "") [ Required ]; + +Property InternalName As %String [ Required ]; + +Property Contents As %Stream.GlobalCharacter(LOCATION = "^DiscardStateContents"); + +Property Username As %String [ Required ]; + +Property Branch As %String [ Required ]; + +Property Timestamp As %TimeStamp [ Required ]; + +Method RestoreToFileTree() +{ + set fileStream = ##class(%Stream.FileCharacter).%OpenId(..FullExternalName,,.sc) + $$$ThrowOnError(sc) + do fileStream.CopyFrom(..Contents) + $$$ThrowOnError(fileStream.%Save()) + do ##class(SourceControl.Git.Utils).ImportItem(..InternalName, 1, 1) + $$$ThrowOnError(..%DeleteId(..%Id())) +} + +ClassMethod SaveDiscardState(InternalName As %String) As %Status +{ + set discardState = ..%New() + set discardState.FullExternalName = ##class(SourceControl.Git.Utils).FullExternalName(InternalName) + set discardState.InternalName = InternalName + + set fileStream = ##class(%Stream.FileCharacter).%New() + set fileStream.Filename = discardState.FullExternalName + do fileStream.%Open() + do discardState.Contents.CopyFrom(fileStream) + do fileStream.%Close() + set discardState.Username = $USERNAME + set discardState.Branch = ##class(SourceControl.Git.Utils).GetCurrentBranch() + set discardState.Timestamp = $zdatetime($horolog, 3) + + set st = discardState.%Save() + + quit st +} + +ClassMethod DiscardStatesInBranch() As %DynamicArray +{ + set currentBranch = ##class(SourceControl.Git.Utils).GetCurrentBranch() + set statement = "SELECT ID FROM SourceControl_Git.DiscardState WHERE branch = ?" + set resultSet = ##class(%SQL.Statement).%ExecDirect(, statement, currentBranch) + set discardStates = [] + while resultSet.%Next() { + set discardState = ..%OpenId(resultSet.ID) + do discardState.%JSONExportToString(.JSONStr) + set discardStateObject = ##class(%DynamicAbstractObject).%FromJSON(JSONStr) + do discardStates.%Push(discardStateObject) + } + + quit discardStates +} + +Storage Default +{ + + +%%CLASSNAME + + +FullExternalName + + +InternalName + + +Contents + + +Username + + +Branch + + +Timestamp + + +^SourceControl22B9.DiscardStateD +DiscardStateDefaultData +^SourceControl22B9.DiscardStateD +^SourceControl22B9.DiscardStateI +^SourceControl22B9.DiscardStateS +%Storage.Persistent +} + +} + diff --git a/cls/SourceControl/Git/WebUIDriver.cls b/cls/SourceControl/Git/WebUIDriver.cls index f6c29214..203d9d0a 100644 --- a/cls/SourceControl/Git/WebUIDriver.cls +++ b/cls/SourceControl/Git/WebUIDriver.cls @@ -27,7 +27,7 @@ ClassMethod HandleRequest(pagePath As %String, InternalName As %String = "", Out if $isobject($get(responseJSON)) { do responseJSON.%ToJSON(%data) } - } elseif $match(pathStart,"git-command|git|dirname|hostname|viewonly") { + } elseif $match(pathStart,"git-command|git|dirname|hostname|viewonly|discarded-states") { if (%request.Method = "GET") { set %data = ##class(%Stream.TmpCharacter).%New() // Things not handled from Python backend: @@ -76,6 +76,10 @@ ClassMethod HandleRequest(pagePath As %String, InternalName As %String = "", Out } elseif (pathStart = "dirname") { do %data.Write(##class(SourceControl.Git.Utils).TempFolder()) set handled = 1 + } elseif (pathStart = "discarded-states") { + set discardsInBranch = ##class(SourceControl.Git.DiscardState).DiscardStatesInBranch() + do %data.Write(discardsInBranch.%ToJSON()) + set handled = 1 } } elseif (%request.Method = "POST") { // Things not handled from Python backend: @@ -163,6 +167,22 @@ ClassMethod HandleRequest(pagePath As %String, InternalName As %String = "", Out set requestBody = ##class(%Library.DynamicObject).%FromJSON(%request.Content) set command = requestBody.command + set gitCmd = command.%Get(0) + + if gitCmd = "restore" { + set iter = command.%GetIterator() + set isFile = 0 + while iter.%GetNext(,.value) { + if isFile { + set internalName = ##class(SourceControl.Git.Utils).NameToInternalName(value) + do ##class(SourceControl.Git.DiscardState).SaveDiscardState(internalName) + } + if value = "--"{ + set isFile = 1 + } + } + } + set argsArr = "" set argsArr($increment(argsArr)) = "color.ui=true" set iterator = command.%GetIterator() diff --git a/git-webui/release/share/git-webui/webui/css/git-webui.css b/git-webui/release/share/git-webui/webui/css/git-webui.css index aeb3a5b0..75763cfc 100644 --- a/git-webui/release/share/git-webui/webui/css/git-webui.css +++ b/git-webui/release/share/git-webui/webui/css/git-webui.css @@ -205,6 +205,9 @@ body { #sidebar #sidebar-content #sidebar-stash h4:before { content: url(../img/inboxes.svg); } +#sidebar #sidebar-content #sidebarDiscarded h4:before { + content: url(../img/discarded.svg); +} #sidebar #sidebar-content #sidebar-remote h4:before { content: url(../img/daemon.svg); } diff --git a/git-webui/release/share/git-webui/webui/img/discarded.svg b/git-webui/release/share/git-webui/webui/img/discarded.svg new file mode 100644 index 00000000..8c927a6b --- /dev/null +++ b/git-webui/release/share/git-webui/webui/img/discarded.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/git-webui/release/share/git-webui/webui/js/git-webui.js b/git-webui/release/share/git-webui/webui/js/git-webui.js index e3a0ad90..b22c2d65 100644 --- a/git-webui/release/share/git-webui/webui/js/git-webui.js +++ b/git-webui/release/share/git-webui/webui/js/git-webui.js @@ -866,6 +866,9 @@ webui.SideBarView = function(mainView, noEventHandlers) { '' + + '
' + + '

Discarded Files

' + + '
' + '