@@ -210,6 +210,7 @@ type CloudbrainsOptions struct { | |||
JobType string | |||
VersionName string | |||
IsLatestVersion string | |||
JobTypeNot bool | |||
} | |||
type TaskPod struct { | |||
@@ -894,9 +895,15 @@ func Cloudbrains(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) { | |||
} | |||
if (opts.JobType) != "" { | |||
cond = cond.And( | |||
builder.Eq{"cloudbrain.job_type": opts.JobType}, | |||
) | |||
if opts.JobTypeNot { | |||
cond = cond.And( | |||
builder.Neq{"cloudbrain.job_type": opts.JobType}, | |||
) | |||
} else { | |||
cond = cond.And( | |||
builder.Eq{"cloudbrain.job_type": opts.JobType}, | |||
) | |||
} | |||
} | |||
if (opts.IsLatestVersion) != "" { | |||
@@ -286,7 +286,9 @@ func NotifyWatchers(actions ...*Action) error { | |||
func producer(actions ...*Action) { | |||
for _, action := range actions { | |||
ActionChan <- action | |||
if !action.IsPrivate{ | |||
ActionChan <- action | |||
} | |||
} | |||
} | |||
@@ -6,13 +6,6 @@ package repo | |||
import ( | |||
"bytes" | |||
"container/list" | |||
"fmt" | |||
"html" | |||
gotemplate "html/template" | |||
"net/url" | |||
"strings" | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/base" | |||
"code.gitea.io/gitea/modules/context" | |||
@@ -22,6 +15,12 @@ import ( | |||
"code.gitea.io/gitea/modules/markup" | |||
"code.gitea.io/gitea/modules/setting" | |||
"code.gitea.io/gitea/modules/timeutil" | |||
"container/list" | |||
"fmt" | |||
"html" | |||
gotemplate "html/template" | |||
"net/url" | |||
"strings" | |||
) | |||
const ( | |||
@@ -35,7 +34,52 @@ func RefBlame(ctx *context.Context) { | |||
ctx.NotFound("Blame FileName", nil) | |||
return | |||
} | |||
//get repo contributors info | |||
contributors, err := git.GetContributors(ctx.Repo.Repository.RepoPath(), ctx.Repo.BranchName) | |||
if err == nil && contributors != nil { | |||
var contributorInfos []*ContributorInfo | |||
contributorInfoHash := make(map[string]*ContributorInfo) | |||
count := 0 | |||
for _, c := range contributors { | |||
if count >= 25 { | |||
continue | |||
} | |||
if strings.Compare(c.Email, "") == 0 { | |||
continue | |||
} | |||
// get user info from committer email | |||
user, err := models.GetUserByActivateEmail(c.Email) | |||
if err == nil { | |||
// committer is system user, get info through user's primary email | |||
if existedContributorInfo, ok := contributorInfoHash[user.Email]; ok { | |||
// existed: same primary email, different committer name | |||
existedContributorInfo.CommitCnt += c.CommitCnt | |||
} else { | |||
// new committer info | |||
var newContributor = &ContributorInfo{ | |||
user, user.RelAvatarLink(), user.Name, user.Email, c.CommitCnt, | |||
} | |||
count++ | |||
contributorInfos = append(contributorInfos, newContributor) | |||
contributorInfoHash[user.Email] = newContributor | |||
} | |||
} else { | |||
// committer is not system user | |||
if existedContributorInfo, ok := contributorInfoHash[c.Email]; ok { | |||
// existed: same primary email, different committer name | |||
existedContributorInfo.CommitCnt += c.CommitCnt | |||
} else { | |||
var newContributor = &ContributorInfo{ | |||
user, "", "", c.Email, c.CommitCnt, | |||
} | |||
count++ | |||
contributorInfos = append(contributorInfos, newContributor) | |||
contributorInfoHash[c.Email] = newContributor | |||
} | |||
} | |||
} | |||
ctx.Data["ContributorInfo"] = contributorInfos | |||
} | |||
userName := ctx.Repo.Owner.Name | |||
repoName := ctx.Repo.Repository.Name | |||
commitID := ctx.Repo.CommitID | |||
@@ -49,12 +49,9 @@ func DebugJobIndex(ctx *context.Context) { | |||
page = 1 | |||
} | |||
debugType := modelarts.DebugType | |||
jobType := string(models.JobTypeDebug) | |||
if debugListType == models.GPUResource { | |||
debugType = models.TypeCloudBrainOne | |||
jobType = "" | |||
} | |||
if debugListType == models.NPUResource { | |||
} else if debugListType == models.NPUResource { | |||
debugType = models.TypeCloudBrainTwo | |||
} | |||
@@ -63,9 +60,10 @@ func DebugJobIndex(ctx *context.Context) { | |||
Page: page, | |||
PageSize: setting.UI.IssuePagingNum, | |||
}, | |||
RepoID: repo.ID, | |||
Type: debugType, | |||
JobType: jobType, | |||
RepoID: repo.ID, | |||
Type: debugType, | |||
JobTypeNot: true, | |||
JobType: string(models.JobTypeTrain), | |||
}) | |||
if err != nil { | |||
ctx.ServerError("Get debugjob faild:", err) | |||
@@ -371,6 +369,7 @@ func TrainJobIndex(ctx *context.Context) { | |||
}, | |||
RepoID: repo.ID, | |||
Type: models.TypeCloudBrainTwo, | |||
JobTypeNot: false, | |||
JobType: string(models.JobTypeTrain), | |||
IsLatestVersion: modelarts.IsLatestVersion, | |||
}) | |||
@@ -969,13 +969,13 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
m.Group("/:jobid", func() { | |||
m.Get("", reqRepoCloudBrainReader, repo.CloudBrainShow) | |||
m.Get("/debug", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDebug) | |||
m.Post("/commit_image", cloudbrain.AdminOrOwnerOrJobCreaterRight, bindIgnErr(auth.CommitImageCloudBrainForm{}), repo.CloudBrainCommitImage) | |||
m.Post("/commit_image", cloudbrain.AdminOrJobCreaterRight, bindIgnErr(auth.CommitImageCloudBrainForm{}), repo.CloudBrainCommitImage) | |||
m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.CloudBrainStop) | |||
m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.CloudBrainDel) | |||
m.Post("/restart", reqRepoCloudBrainWriter, repo.CloudBrainRestart) | |||
m.Post("/restart", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainRestart) | |||
m.Get("/rate", reqRepoCloudBrainReader, repo.GetRate) | |||
m.Get("/models", reqRepoCloudBrainReader, repo.CloudBrainShowModels) | |||
m.Get("/download_model", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.CloudBrainDownloadModel) | |||
m.Get("/download_model", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDownloadModel) | |||
}) | |||
m.Get("/create", reqRepoCloudBrainWriter, repo.CloudBrainNew) | |||
m.Post("/create", reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainCreate) | |||
@@ -1021,7 +1021,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
m.Get("", reqRepoCloudBrainReader, repo.TrainJobShow) | |||
m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.TrainJobStop) | |||
m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.TrainJobDel) | |||
m.Get("/model_download", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.ModelDownload) | |||
m.Get("/model_download", cloudbrain.AdminOrJobCreaterRight, repo.ModelDownload) | |||
m.Get("/create_version", cloudbrain.AdminOrJobCreaterRight, repo.TrainJobNewVersion) | |||
m.Post("/create_version", cloudbrain.AdminOrJobCreaterRight, bindIgnErr(auth.CreateModelArtsTrainJobForm{}), repo.TrainJobCreateVersion) | |||
}) | |||
@@ -13,7 +13,8 @@ | |||
.header_card{ | |||
/* color:#003A8C !important; */ | |||
color:#0366D6 !important; | |||
margin: 10px 0; | |||
margin: 10px 0 0px 0; | |||
height: 25px; | |||
} | |||
.marg{ | |||
margin: 0 5px !important; | |||
@@ -28,6 +29,7 @@ | |||
} | |||
.descript_height{ | |||
color: #101010 !important; | |||
margin: 10px 0; | |||
height: 40px !important; | |||
word-break:break-all; | |||
line-height: 20px; | |||
@@ -44,9 +46,23 @@ | |||
.full_height{ | |||
height: 100%; | |||
} | |||
.omit{ | |||
overflow: hidden; white-space: nowrap; text-overflow: ellipsis; | |||
} | |||
/deep/ ui.checkbox input[type=checkbox]::after{ | |||
border: 1px solid #0366D6 !important; | |||
} | |||
.nowrap-2 { | |||
/* height: 2.837em; */ | |||
/* line-height: 1.4285em; */ | |||
overflow: hidden; | |||
overflow: hidden; | |||
display: -webkit-box; | |||
-webkit-line-clamp: 2; | |||
-webkit-box-orient: vertical; | |||
} | |||
</style> | |||
<div class="ui stackable grid"> | |||
<div style="width: 100%;margin:15px 0;"> | |||
@@ -69,25 +85,30 @@ | |||
{{ range .RepoList}} | |||
<div class="card" > | |||
<div class="extra full_height" > | |||
<div class=" header "> | |||
<a class="header_card" href="{{.Link}}"> {{.Name}}</a> | |||
<div class="extra full_height cor" > | |||
<div class=" header header_card omit" > | |||
<a class="header_card image poping up " href="{{.Link}}" data-content="{{.Name}}" data-position="top left" data-variation="tiny inverted"> {{.Name}}</a> | |||
</div> | |||
<div class='content descript_height'> | |||
<div class='content descript_height nowrap-2'> | |||
{{.Description}} | |||
</div> | |||
<div class="content tags_height" style="margin-top: 5px;"> | |||
{{if .Topics }} | |||
<div class=" ui tags "> | |||
<div class="content " > | |||
{{if .Topics }} | |||
<div class=" tags " style="position: relative;"> | |||
{{range .Topics}} | |||
{{if ne . "" }}<a href="{{AppSubUrl}}/explore/repos?q={{.}}&topic={{$.Topic}}"><div class="ui small label topic">{{.}}</div></a>{{end}} | |||
{{if ne . "" }}<a style="max-width:100%;margin: 5px 0;display:inline-flex;" href="{{AppSubUrl}}/explore/repos?q={{.}}&topic={{$.Topic}}" ><span class="ui small label topic omit" >{{.}}</span></a>{{end}} | |||
{{end}} | |||
</div> | |||
{{end}} | |||
</div> | |||
{{end}} | |||
</div> | |||
</div> | |||
<div class=" extra " style="color:#888888;border-top: none !important"> | |||
<div class="ui mini right compact marg" > | |||
<a class="item marg "> | |||
{{svg "octicon-eye" 16}} {{.NumWatches}} | |||
@@ -100,9 +121,6 @@ | |||
</a> | |||
</div> | |||
</div> | |||
</div> | |||
{{end}} | |||
@@ -133,7 +151,7 @@ | |||
</div> | |||
<p id='recommend'></p> | |||
<div class="inline field" style="margin-left: 30%;"> | |||
<div class="inline field" style="margin-left: 37%;"> | |||
<div class="actions"> | |||
<button id="submitId" type="button" class="ui create_train_job green deny button" onclick="saveSeletedPro(1)"> | |||
{{.i18n.Tr "explore.save"}} | |||
@@ -171,7 +189,7 @@ | |||
$.ajax({ | |||
type:"GET", | |||
url:"/org/{{.Org.DisplayName}}/org_tag/repo_list?tagId="+typeTag, | |||
url:"/org/{{.Org.Name}}/org_tag/repo_list?tagId="+typeTag, | |||
dataType:"json", | |||
async:false, | |||
success:function(json){ | |||
@@ -179,7 +197,7 @@ | |||
var n_length = data.length | |||
pro_html = getHTML(data) | |||
$("#org_list").append(pro_html) | |||
console.log('原始',data) | |||
// console.log('原始',data) | |||
checkedNum(0) | |||
} | |||
}); | |||
@@ -189,11 +207,11 @@ | |||
for (let i=0;i<data.length;i++){ | |||
if (data[i].Selected==true){ | |||
console.log("data[i]:",data[i]) | |||
pro_html += `<div class="ui checkbox" style="width: 33%;margin-bottom:10px" > <input type="checkbox" id = " ${i}" checked="" onclick="checkedNum(${i})" class="Relist" name ='select_pro_name' data-repoid="${data[i].RepoID}" data-reponame="${data[i].RepoName}" data-selected=${data[i].Selected} > <label> ${data[i].RepoName} </label></div>` | |||
pro_html += `<div class="ui checkbox" style="width: 33%;margin-bottom:10px" > <input type="checkbox" id = " ${i}" checked="" onclick="checkedNum(${i})" class="Relist" name ='select_pro_name' data-repoid="${data[i].RepoID}" data-reponame="${data[i].RepoName}" data-selected=${data[i].Selected} > <label class='omit image poping up' data-content=${data[i].RepoName} data-position="top left " data-variation="mini"> ${data[i].RepoName}</label></div>` | |||
pro_html += '</div>' | |||
} | |||
else{ | |||
pro_html += `<div class="ui checkbox" style="width: 33%;margin-bottom:10px" > <input type="checkbox" id = "${i}" onclick="checkedNum(${i})" class="Relist" name ='select_pro_name' data-repoid="${data[i].RepoID}" data-reponame="${data[i].RepoName}" data-selected= ${data[i].Selected}> <label> ${data[i].RepoName} </label></div>` | |||
pro_html += `<div class="ui checkbox" style="width: 33%;margin-bottom:10px" > <input type="checkbox" id = "${i}" onclick="checkedNum(${i})" class="Relist" name ='select_pro_name' data-repoid="${data[i].RepoID}" data-reponame="${data[i].RepoName}" data-selected= ${data[i].Selected}> <label class='omit image poping up' data-content=${data[i].RepoName} data-position="top left " data-variation="mini"> ${data[i].RepoName} </label></div>` | |||
pro_html += '</div>' | |||
} | |||
} | |||
@@ -214,7 +232,7 @@ | |||
// console.log("数据:",saveData) | |||
$.ajax({ | |||
type:"POST", | |||
url:"/org/{{.Org.DisplayName}}/org_tag/repo_submit?tagId="+typeTag, | |||
url:"/org/{{.Org.Name}}/org_tag/repo_submit?tagId="+typeTag, | |||
contentType:'application/json', | |||
dataType:"json", | |||
async:false, | |||
@@ -402,6 +402,13 @@ | |||
<a class="ui basic disabled button">{{$.i18n.Tr "repo.download"}}</a> | |||
{{end}} | |||
</div> | |||
{{if and (ne .JobType "DEBUG") (eq .Cloudbrain.Type 0)}} | |||
<div class="item" style="padding: 0 !important;"> | |||
<a class="ui basic blue button" href="{{$.RepoLink}}/cloudbrain/{{.JobID}}/rate" target="_blank"> | |||
评分 | |||
</a> | |||
</div> | |||
{{end}} | |||
</div> | |||
</div> | |||