forked from gitea/gitea
1
0
Fork 0

Handle multiple merges in gitgraph.js (#11996) (#12000)

Backport #11996

There is a bug in web_src/js/vendor/gitgraph.js whereby it fails to
handle multiple merges in a single commit correctly. This PR adds
changes to make this work.

Fix #11981

Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
zeripath 2020-06-21 16:08:25 +01:00 committed by GitHub
parent dcbbf37082
commit 82b843a5ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 40 deletions

View File

@ -2,39 +2,37 @@
<div class="repository commits"> <div class="repository commits">
{{template "repo/header" .}} {{template "repo/header" .}}
<div class="ui container"> <div class="ui container">
<div id="git-graph-container" class="ui segment"> <div id="git-graph-container" class="ui segment">
<h1>{{.i18n.Tr "repo.commit_graph"}}</h1> <h1>{{.i18n.Tr "repo.commit_graph"}}</h1>
<div id="rel-container"> <div id="rel-container">
<canvas id="graph-canvas"> <canvas id="graph-canvas">
<ul id="graph-raw-list"> <ul id="graph-raw-list">
{{ range .Graph }} {{ range .Graph }}
<li><span class="node-relation">{{ .GraphAcii -}}</span></li> <li><span class="node-relation">{{ .GraphAcii -}}</span></li>
{{ end }} {{ end }}
</ul> </ul>
</canvas> </canvas>
</div> </div>
<div id="rev-container"> <div id="rev-container">
<ul id="rev-list"> <ul id="rev-list">
{{ range .Graph }} {{ range .Graph }}
<li> <li>
{{ if .OnlyRelation }} {{ if .OnlyRelation }}
<span /> <span />
{{ else }} {{ else }}
<code id="{{.ShortRev}}"> <code id="{{.ShortRev}}">
<a href="{{AppSubUrl}}/{{$.Username}}/{{$.Reponame}}/commit/{{.Rev}}">{{ .ShortRev}}</a> <a href="{{AppSubUrl}}/{{$.Username}}/{{$.Reponame}}/commit/{{.Rev}}">{{ .ShortRev}}</a>
</code> </code>
<strong> {{.Branch}}</strong> <strong> {{.Branch}}</strong>
<span>{{RenderCommitMessage .Subject $.RepoLink $.Repository.ComposeMetas}}</span> by <span>{{RenderCommitMessage .Subject $.RepoLink $.Repository.ComposeMetas}}</span> by
<span class="author"> <span class="author">{{.Author}}</span>
{{.Author}} <span class="time">{{.Date}}</span>
</span> {{ end }}
<span class="time">{{.Date}}</span> </li>
{{ end }} {{ end }}
</li> </ul>
{{ end }} </div>
</ul> </div>
</div>
</div>
</div> </div>
</div> </div>
{{template "base/paginate" .}} {{template "base/paginate" .}}

View File

@ -65,7 +65,7 @@ export default function gitGraph(canvas, rawGraphList, config) {
for (i = 0; i < l; i++) { for (i = 0; i < l; i++) {
midStr = rawGraphList[i].replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, ''); midStr = rawGraphList[i].replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '');
midStr = midStr.replace(/(--)|(-\.)/g,'-')
maxWidth = Math.max(midStr.replace(/(_|\s)/g, '').length, maxWidth); maxWidth = Math.max(midStr.replace(/(_|\s)/g, '').length, maxWidth);
row = midStr.split(''); row = midStr.split('');
@ -343,11 +343,6 @@ export default function gitGraph(canvas, rawGraphList, config) {
return (val !== ' ' && val !== '_'); return (val !== ' ' && val !== '_');
}).length; }).length;
// do some clean up
if (flows.length > condenseCurrentLength) {
flows.splice(condenseCurrentLength, flows.length - condenseCurrentLength);
}
colomnIndex = 0; colomnIndex = 0;
// a little inline analysis and draw process // a little inline analysis and draw process
@ -362,7 +357,7 @@ export default function gitGraph(canvas, rawGraphList, config) {
continue; continue;
} }
// inline interset // inline intersect
if ((colomn === '_' || colomn === '/') if ((colomn === '_' || colomn === '/')
&& currentRow[colomnIndex - 1] === '|' && currentRow[colomnIndex - 1] === '|'
&& currentRow[colomnIndex - 2] === '_') { && currentRow[colomnIndex - 2] === '_') {
@ -380,6 +375,7 @@ export default function gitGraph(canvas, rawGraphList, config) {
color = flows[colomnIndex].color; color = flows[colomnIndex].color;
switch (colomn) { switch (colomn) {
case '-':
case '_': case '_':
drawLineRight(x, y, color); drawLineRight(x, y, color);
@ -416,6 +412,11 @@ export default function gitGraph(canvas, rawGraphList, config) {
y -= config.unitSize; y -= config.unitSize;
} }
// do some clean up
if (flows.length > condenseCurrentLength) {
flows.splice(condenseCurrentLength, flows.length - condenseCurrentLength);
}
}; };
init(); init();