forked from go-gitea/gitea
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
commithgraph / timeline (go-gitea#428)
* Add model and tests for graph * Add route and router for graph * Add assets for graph * Add template for graph
- Loading branch information
1 parent
35d9378
commit 22e1bd3
Showing
10 changed files
with
673 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
// Copyright 2016 The Gitea Authors. All rights reserved. | ||
// Use of this source code is governed by a MIT-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package models | ||
|
||
import ( | ||
"fmt" | ||
"strings" | ||
|
||
"code.gitea.io/git" | ||
) | ||
|
||
// GraphItem represent one commit, or one relation in timeline | ||
type GraphItem struct { | ||
GraphAcii string | ||
Relation string | ||
Branch string | ||
Rev string | ||
Date string | ||
Author string | ||
AuthorEmail string | ||
ShortRev string | ||
Subject string | ||
OnlyRelation bool | ||
} | ||
|
||
// GraphItems is a list of commits from all branches | ||
type GraphItems []GraphItem | ||
|
||
// GetCommitGraph return a list of commit (GraphItems) from all branches | ||
func GetCommitGraph(r *git.Repository) (GraphItems, error) { | ||
|
||
var Commitgraph []GraphItem | ||
|
||
format := "DATA:|%d|%H|%ad|%an|%ae|%h|%s" | ||
|
||
graphCmd := git.NewCommand("log") | ||
graphCmd.AddArguments("--graph", | ||
"--date-order", | ||
"--all", | ||
"-C", | ||
"-M", | ||
"-n 100", | ||
"--date=iso", | ||
fmt.Sprintf("--pretty=format:%s", format), | ||
) | ||
graph, err := graphCmd.RunInDir(r.Path) | ||
if err != nil { | ||
return Commitgraph, err | ||
} | ||
|
||
Commitgraph = make([]GraphItem, 0, 100) | ||
for _, s := range strings.Split(graph, "\n") { | ||
GraphItem, err := graphItemFromString(s, r) | ||
if err != nil { | ||
return Commitgraph, err | ||
} | ||
Commitgraph = append(Commitgraph, GraphItem) | ||
} | ||
|
||
return Commitgraph, nil | ||
} | ||
|
||
func graphItemFromString(s string, r *git.Repository) (GraphItem, error) { | ||
|
||
var ascii string | ||
var data = "|||||||" | ||
lines := strings.Split(s, "DATA:") | ||
|
||
switch len(lines) { | ||
case 1: | ||
ascii = lines[0] | ||
case 2: | ||
ascii = lines[0] | ||
data = lines[1] | ||
default: | ||
return GraphItem{}, fmt.Errorf("Failed parsing grap line:%s. Expect 1 or two fields", s) | ||
} | ||
|
||
rows := strings.Split(data, "|") | ||
if len(rows) != 8 { | ||
return GraphItem{}, fmt.Errorf("Failed parsing grap line:%s - Should containt 8 datafields", s) | ||
} | ||
|
||
/* // see format in getCommitGraph() | ||
0 Relation string | ||
1 Branch string | ||
2 Rev string | ||
3 Date string | ||
4 Author string | ||
5 AuthorEmail string | ||
6 ShortRev string | ||
7 Subject string | ||
*/ | ||
gi := GraphItem{ascii, | ||
rows[0], | ||
rows[1], | ||
rows[2], | ||
rows[3], | ||
rows[4], | ||
rows[5], | ||
rows[6], | ||
rows[7], | ||
len(rows[2]) == 0, // no commits refered to, only relation in current line. | ||
} | ||
return gi, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// Copyright 2016 The Gitea Authors. All rights reserved. | ||
// Use of this source code is governed by a MIT-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package models | ||
|
||
import ( | ||
"testing" | ||
|
||
"code.gitea.io/git" | ||
) | ||
|
||
func BenchmarkGetCommitGraph(b *testing.B) { | ||
|
||
currentRepo, err := git.OpenRepository(".") | ||
if err != nil { | ||
b.Error("Could not open repository") | ||
} | ||
|
||
graph, err := GetCommitGraph(currentRepo) | ||
if err != nil { | ||
b.Error("Could get commit graph") | ||
} | ||
|
||
if len(graph) < 100 { | ||
b.Error("Should get 100 log lines.") | ||
} | ||
} | ||
|
||
func BenchmarkParseCommitString(b *testing.B) { | ||
testString := "* DATA:||4e61bacab44e9b4730e44a6615d04098dd3a8eaf|2016-12-20 21:10:41 +0100|Kjell Kvinge|kjell@kvinge.biz|4e61bac|Add route for graph" | ||
|
||
graphItem, err := graphItemFromString(testString, nil) | ||
if err != nil { | ||
b.Error("could not parse teststring") | ||
} | ||
|
||
if graphItem.Author != "Kjell Kvinge" { | ||
b.Error("Did not get expected data") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
body {font:13.34px/1.4 helvetica,arial,freesans,clean,sans-serif;} | ||
em {font-style:normal;} | ||
|
||
#git-graph-container, #rel-container {float:left;} | ||
#git-graph-container {} | ||
#git-graph-container li {list-style-type:none;height:20px;line-height:20px;overflow:hidden;} | ||
#git-graph-container li .node-relation {font-family:'Bitstream Vera Sans Mono', 'Courier', monospace;} | ||
#git-graph-container li .author {color:#666666;} | ||
#git-graph-container li .time {color:#999999;font-size:80%} | ||
#git-graph-container li a {color:#000000;} | ||
#git-graph-container li a:hover {text-decoration:underline;} | ||
#git-graph-container li a em {color:#BB0000;border-bottom:1px dotted #BBBBBB;text-decoration:none;font-style:normal;} | ||
#rev-container {width:80%} | ||
#rev-list {margin:0;padding:0 5px 0 0;width:80%} | ||
#graph-raw-list {margin:0px;} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
$(document).ready(function () { | ||
var graphList = []; | ||
|
||
if (!document.getElementById('graph-canvas')) { | ||
return; | ||
} | ||
|
||
$("#graph-raw-list li span.node-relation").each(function () { | ||
graphList.push($(this).text()); | ||
}) | ||
|
||
gitGraph(document.getElementById('graph-canvas'), graphList); | ||
|
||
if ($("#rev-container")) { | ||
$("#rev-container").css("width", document.body.clientWidth - document.getElementById('graph-canvas').width); | ||
} | ||
}) |
Oops, something went wrong.