Skip to content

Commit b8bc46d

Browse files
authored
Merge pull request #529 from intersystems/issue-448
Add remote repository to settings
2 parents 92c80cb + a75d871 commit b8bc46d

File tree

4 files changed

+51
-0
lines changed

4 files changed

+51
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Added
1111
- Added 'git push --force' in expert mode (#527)
12+
- Add remote repository to settings page (#448)
1213

1314
### Fixed
1415
- Fixed display of other users' username in workspace view on Unix (#530)

cls/SourceControl/Git/Utils.cls

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2798,4 +2798,28 @@ ClassMethod BaselineExport(pCommitMessage = "", pPushToRemote = "") As %Status
27982798
return sc
27992799
}
28002800

2801+
/// Returns the url for the remote repository (censoring the username)
2802+
ClassMethod GetConfiguredRemote() As %String
2803+
{
2804+
d ..RunGitCommand("remote",.err,.out,"-v")
2805+
set line = out.ReadLine()
2806+
set url = $piece($piece(line,$char(9),2)," ",1)
2807+
return url
2808+
}
2809+
2810+
ClassMethod GetRedactedRemote() As %String
2811+
{
2812+
set url = ..GetConfiguredRemote()
2813+
set username= $piece($piece(url,":",3),"@",1)
2814+
set censoredUrl = $replace(url, username,"*******")
2815+
return censoredUrl
2816+
}
2817+
2818+
ClassMethod SetConfiguredRemote(url) As %String
2819+
{
2820+
do ##class(SourceControl.Git.Utils).RunGitCommandWithInput("remote",,.errStream,.outStream,"set-url","origin",url)
2821+
set output = outStream.ReadLine(outStream.Size)
2822+
quit output
2823+
}
2824+
28012825
}

cls/SourceControl/Git/WebUIDriver.cls

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ ClassMethod HandleRequest(pagePath As %String, InternalName As %String = "", Out
2626
set responseJSON = {
2727
"url": (..GetHomeURL())
2828
}
29+
} elseif $extract(pagePath,6,*) = "remote" {
30+
set responseJSON = ..GetRemote()
2931
} else {
3032
set %response.Status = ##class(%CSP.REST).#HTTP404NOTFOUND
3133
set responseJSON = {"error":("invalid URI: " _ pagePath)}
@@ -407,4 +409,10 @@ ClassMethod GetHomeURL() As %String
407409
quit prefix_"/csp/sys/UtilHome.csp"
408410
}
409411

412+
ClassMethod GetRemote() As %Library.DynamicObject
413+
{
414+
set remote = ##class(SourceControl.Git.Utils).GetRedactedRemote()
415+
quit {"remote": (remote)}
416+
}
417+
410418
}

csp/gitprojectsettings.csp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ body {
7979
set homeURL = ##class(SourceControl.Git.WebUIDriver).GetHomeURL()
8080

8181
set settings = ##class(SourceControl.Git.Settings).%New()
82+
set remote = ##class(SourceControl.Git.Utils).GetRedactedRemote()
83+
/// After Save
8284
if $Data(%request.Data("gitsettings",1)) {
8385
for param="gitUserName","gitUserEmail" {
8486
set $Property(settings,param) = $Get(%request.Data(param,1))
@@ -94,6 +96,12 @@ body {
9496
set settings.mappedItemsReadOnly = 0
9597
}
9698

99+
set newRemote = $Get(%request.Data("remoteRepo",1))
100+
// If entry was modified, set new remote repo
101+
if (newRemote '= ##class(SourceControl.Git.Utils).GetRedactedRemote()) {
102+
do ##class(SourceControl.Git.Utils).SetConfiguredRemote(newRemote)
103+
}
104+
97105
set settings.compileOnImport = ($Get(%request.Data("compileOnImport", 1)) = 1)
98106

99107
if ($Get(%request.Data("basicMode", 1)) = 1) {
@@ -326,6 +334,16 @@ body {
326334
<input type="text" class="form-control" id="defaultMergeBranch" name="defaultMergeBranch" value='#(..EscapeHTML(settings.defaultMergeBranch))#' placeholder="sample-remote-branch">
327335
</div>
328336
</div>
337+
338+
<div class="form-group row mb-3">
339+
<label for="remoteRepo" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Url to Remote repository">Remote Repository</label>
340+
<div class="col-sm-7">
341+
<input type="text" class="form-control" id="remoteRepo" name="remoteRepo" value='#(..EscapeHTML(remote))#' placeholder="ex. [email protected]:User/UserRepo.git"/>
342+
<div class = "neutral-feedback">
343+
(Username is redacted)
344+
</div>
345+
</div>
346+
</div>
329347

330348
<div class="form-group row mb-3">
331349
<label for="mappedItemsReadOnly" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Whether items mapped from a database other than this namespace's default routine database should be read-only. If enabled, mapped items won't be saved to source control or exported. NOTE: These are different from the mappings configured in this settings page"> Treat Mapped Items as Read-only</label>

0 commit comments

Comments
 (0)