mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	IP: RC Code Review
This commit is contained in:
		| @@ -27,7 +27,7 @@ More importantly, Gogs only needs one binary to setup your own project hosting o | ||||
| ## Features | ||||
|  | ||||
| - Activity timeline | ||||
| - SSH/HTTPS protocol support. | ||||
| - SSH/HTTPS(Clone only) protocol support. | ||||
| - Register/delete account. | ||||
| - Create/delete/watch public repository. | ||||
| - User profile page. | ||||
|   | ||||
| @@ -23,7 +23,7 @@ Gogs 完全使用 Go 语言来实现对 Git 数据的操作,实现 **零** 依 | ||||
| ## 功能特性 | ||||
|  | ||||
| - 活动时间线 | ||||
| - SSH/HTTPS 协议支持 | ||||
| - SSH/HTTPS(仅限 Clone) 协议支持 | ||||
| - 注册/删除用户 | ||||
| - 创建/删除/关注公开仓库 | ||||
| - 用户个人信息页面 | ||||
|   | ||||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							| @@ -19,7 +19,7 @@ import ( | ||||
| // Test that go1.2 tag above is included in builds. main.go refers to this definition. | ||||
| const go12tag = true | ||||
|  | ||||
| const APP_VER = "0.1.8.0326 Alpha" | ||||
| const APP_VER = "0.1.8.0327 Alpha" | ||||
|  | ||||
| func init() { | ||||
| 	base.AppVer = APP_VER | ||||
|   | ||||
| @@ -15,7 +15,7 @@ const ( | ||||
| 	AU_WRITABLE | ||||
| ) | ||||
|  | ||||
| // Access represents the accessibility of user and repository. | ||||
| // Access represents the accessibility of user to repository. | ||||
| type Access struct { | ||||
| 	Id       int64 | ||||
| 	UserName string    `xorm:"unique(s)"` | ||||
| @@ -30,7 +30,7 @@ func AddAccess(access *Access) error { | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // HasAccess returns true if someone can read or write given repository. | ||||
| // HasAccess returns true if someone can read or write to given repository. | ||||
| func HasAccess(userName, repoName string, mode int) (bool, error) { | ||||
| 	return orm.Get(&Access{ | ||||
| 		Id:       0, | ||||
|   | ||||
| @@ -23,7 +23,8 @@ const ( | ||||
| 	OP_PULL_REQUEST | ||||
| ) | ||||
|  | ||||
| // Action represents user operation type and information to the repository. | ||||
| // Action represents user operation type and other information to repository., | ||||
| // it implemented interface base.Actioner so that can be used in template render. | ||||
| type Action struct { | ||||
| 	Id          int64 | ||||
| 	UserId      int64  // Receiver user id. | ||||
| @@ -57,7 +58,7 @@ func (a Action) GetContent() string { | ||||
| 	return a.Content | ||||
| } | ||||
|  | ||||
| // CommitRepoAction records action for commit repository. | ||||
| // CommitRepoAction adds new action for committing repository. | ||||
| func CommitRepoAction(userId int64, userName string, | ||||
| 	repoId int64, repoName string, refName string, commits *base.PushCommits) error { | ||||
| 	log.Trace("action.CommitRepoAction(start): %d/%s", userId, repoName) | ||||
| @@ -68,12 +69,13 @@ func CommitRepoAction(userId int64, userName string, | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	if err = NotifyWatchers(userId, repoId, OP_COMMIT_REPO, userName, repoName, refName, string(bs)); err != nil { | ||||
| 	if err = NotifyWatchers(&Action{ActUserId: userId, ActUserName: userName, OpType: OP_COMMIT_REPO, | ||||
| 		Content: string(bs), RepoId: repoId, RepoName: repoName, RefName: refName}); err != nil { | ||||
| 		log.Error("action.CommitRepoAction(notify watchers): %d/%s", userId, repoName) | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// Update repository last update time. | ||||
| 	// Change repository bare status and update last updated time. | ||||
| 	repo, err := GetRepositoryByName(userId, repoName) | ||||
| 	if err != nil { | ||||
| 		log.Error("action.CommitRepoAction(GetRepositoryByName): %d/%s", userId, repoName) | ||||
|   | ||||
| @@ -485,30 +485,21 @@ func GetWatches(repoId int64) ([]Watch, error) { | ||||
| } | ||||
|  | ||||
| // NotifyWatchers creates batch of actions for every watcher. | ||||
| func NotifyWatchers(userId, repoId int64, opType int, userName, repoName, refName, content string) error { | ||||
| func NotifyWatchers(act *Action) error { | ||||
| 	// Add feeds for user self and all watchers. | ||||
| 	watches, err := GetWatches(repoId) | ||||
| 	watches, err := GetWatches(act.RepoId) | ||||
| 	if err != nil { | ||||
| 		return errors.New("repo.NotifyWatchers(get watches): " + err.Error()) | ||||
| 	} | ||||
| 	watches = append(watches, Watch{UserId: userId}) | ||||
| 	watches = append(watches, Watch{UserId: act.ActUserId}) | ||||
|  | ||||
| 	for i := range watches { | ||||
| 		if userId == watches[i].UserId && i > 0 { | ||||
| 		if act.ActUserId == watches[i].UserId && i > 0 { | ||||
| 			continue // Do not add twice in case author watches his/her repository. | ||||
| 		} | ||||
|  | ||||
| 		_, err = orm.InsertOne(&Action{ | ||||
| 			UserId:      watches[i].UserId, | ||||
| 			ActUserId:   userId, | ||||
| 			ActUserName: userName, | ||||
| 			OpType:      opType, | ||||
| 			Content:     content, | ||||
| 			RepoId:      repoId, | ||||
| 			RepoName:    repoName, | ||||
| 			RefName:     refName, | ||||
| 		}) | ||||
| 		if err != nil { | ||||
| 		act.UserId = watches[i].UserId | ||||
| 		if _, err = orm.InsertOne(act); err != nil { | ||||
| 			return errors.New("repo.NotifyWatchers(create action): " + err.Error()) | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -78,8 +78,9 @@ func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.Creat | ||||
| 	} | ||||
|  | ||||
| 	// Notify watchers. | ||||
| 	if err = models.NotifyWatchers(ctx.User.Id, ctx.Repo.Repository.Id, models.OP_CREATE_ISSUE, | ||||
| 		ctx.User.Name, ctx.Repo.Repository.Name, "", fmt.Sprintf("%d|%s", issue.Index, issue.Name)); err != nil { | ||||
| 	if err = models.NotifyWatchers(&models.Action{ActUserId: ctx.User.Id, ActUserName: ctx.User.Name, | ||||
| 		OpType: models.OP_CREATE_ISSUE, Content: fmt.Sprintf("%d|%s", issue.Index, issue.Name), | ||||
| 		RepoId: ctx.Repo.Repository.Id, RepoName: ctx.Repo.Repository.Name, RefName: ""}); err != nil { | ||||
| 		ctx.Handle(200, "issue.CreateIssue", err) | ||||
| 		return | ||||
| 	} | ||||
| @@ -120,6 +121,7 @@ func ViewIssue(ctx *middleware.Context, params martini.Params) { | ||||
| 		return | ||||
| 	} | ||||
| 	issue.Poster = u | ||||
| 	issue.Content = string(base.RenderMarkdown([]byte(issue.Content), "")) | ||||
|  | ||||
| 	// Get comments. | ||||
| 	comments, err := models.GetIssueComments(issue.Id) | ||||
| @@ -136,6 +138,7 @@ func ViewIssue(ctx *middleware.Context, params martini.Params) { | ||||
| 			return | ||||
| 		} | ||||
| 		comments[i].Poster = u | ||||
| 		comments[i].Content = string(base.RenderMarkdown([]byte(comments[i].Content), "")) | ||||
| 	} | ||||
|  | ||||
| 	ctx.Data["Title"] = issue.Name | ||||
|   | ||||
| @@ -18,7 +18,7 @@ | ||||
|             <div class="issue-main"> | ||||
|                <div class="panel panel-default issue-content"> | ||||
|                    <div class="panel-body markdown"> | ||||
|                        <p>{{.Issue.Content}}</p> | ||||
|                       {{str2html .Issue.Content}} | ||||
|                    </div> | ||||
|                </div> | ||||
|                {{range .Comments}} | ||||
| @@ -29,7 +29,7 @@ | ||||
|                            <a href="/user/{{.Poster.Name}}" class="user">{{.Poster.Name}}</a> commented <span class="time">{{TimeSince .Created}}</span> | ||||
|                        </div> | ||||
|                        <div class="panel-body markdown"> | ||||
|                            <p>{{.Content}}</p> | ||||
|                           {{str2html .Content}} | ||||
|                        </div> | ||||
|                    </div> | ||||
|                 </div> | ||||
|   | ||||
							
								
								
									
										8
									
								
								web.go
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								web.go
									
									
									
									
									
								
							| @@ -138,6 +138,10 @@ func runWeb(*cli.Context) { | ||||
| 		r.Any("/:userid/delete", admin.DeleteUser) | ||||
| 	}, adminReq) | ||||
|  | ||||
| 	if martini.Env == martini.Dev { | ||||
| 		m.Get("/template/**", dev.TemplatePreview) | ||||
| 	} | ||||
|  | ||||
| 	m.Group("/:username/:reponame", func(r martini.Router) { | ||||
| 		r.Post("/settings", repo.SettingPost) | ||||
| 		r.Get("/settings", repo.Setting) | ||||
| @@ -168,10 +172,6 @@ func runWeb(*cli.Context) { | ||||
| 		r.Any("/:reponame/**", repo.Http) | ||||
| 	}, ignSignIn) | ||||
|  | ||||
| 	if martini.Env == martini.Dev { | ||||
| 		m.Get("/template/**", dev.TemplatePreview) | ||||
| 	} | ||||
|  | ||||
| 	// Not found handler. | ||||
| 	m.NotFound(routers.NotFound) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user