From fecafdca2ac5884a4dbcef2b937dfc3d2bf27ef2 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 13 Mar 2014 12:45:41 +0800 Subject: [PATCH 1/3] merge --- routers/repo/repo.go | 16 ---------------- routers/repo/single.go | 14 ++++++++++++-- templates/repo/repo.tmpl | 10 ---------- templates/repo/single.tmpl | 6 +++++- web.go | 2 -- 5 files changed, 17 insertions(+), 31 deletions(-) delete mode 100644 templates/repo/repo.tmpl diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 6444034525..5769aff7c3 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -6,8 +6,6 @@ package repo import ( "net/http" - - "github.com/codegangsta/martini" "github.com/martini-contrib/render" "github.com/martini-contrib/sessions" @@ -87,20 +85,6 @@ func Delete(req *http.Request, r render.Render, data base.TmplData, session sess } } -func Repo(params martini.Params, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) { - data["Title"] = "Repository" - files, err := models.GetReposFiles(params["username"], params["reponame"], "HEAD", "/") - if err != nil { - data["ErrorMsg"] = err - log.Error("repo.List: %v", err) - r.HTML(200, "base/error", data) - return - } - - data["Files"] = files - r.HTML(200, "repo/repo", data) -} - func List(req *http.Request, r render.Render, data base.TmplData, session sessions.Session) { u := auth.SignedInUser(session) if u != nil { diff --git a/routers/repo/single.go b/routers/repo/single.go index be27db8e05..811aed3993 100644 --- a/routers/repo/single.go +++ b/routers/repo/single.go @@ -1,16 +1,17 @@ package repo import ( + "net/http" + "github.com/codegangsta/martini" "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/base" "github.com/martini-contrib/render" "github.com/martini-contrib/sessions" - "net/http" + "github.com/qiniu/log" ) - func Single(params martini.Params, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) { var ( user *models.User @@ -52,5 +53,14 @@ func Single(params martini.Params, req *http.Request, r render.Render, data base data["RepositoryLink"] = data["Title"] data["IsRepoToolbarSource"] = true + files, err := models.GetReposFiles(params["username"], params["reponame"], "HEAD", "/") + if err != nil { + data["ErrorMsg"] = err + log.Error("repo.List: %v", err) + r.HTML(200, "base/error", data) + return + } + + data["Files"] = files r.HTML(200, "repo/single", data) } diff --git a/templates/repo/repo.tmpl b/templates/repo/repo.tmpl deleted file mode 100644 index 5ae3f25c16..0000000000 --- a/templates/repo/repo.tmpl +++ /dev/null @@ -1,10 +0,0 @@ -{{template "base/head" .}} -{{template "base/navbar" .}} -
- -
-{{template "base/footer" .}} \ No newline at end of file diff --git a/templates/repo/single.tmpl b/templates/repo/single.tmpl index ef812f8249..9d4a24f851 100644 --- a/templates/repo/single.tmpl +++ b/templates/repo/single.tmpl @@ -33,6 +33,10 @@ {{template "repo/toolbar" .}}
- repo single dashboard +
{{template "base/footer" .}} \ No newline at end of file diff --git a/web.go b/web.go index c8b7ed0d49..c204131662 100644 --- a/web.go +++ b/web.go @@ -70,8 +70,6 @@ func runWeb(*cli.Context) { m.Get("/user/:username", auth.SignInRequire(false), user.Profile) - m.Get("/:username/:reponame", repo.Repo) - m.Any("/repo/create", auth.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete) m.Any("/repo/list", auth.SignInRequire(false), repo.List) From 6a75b1f7b37dead013f271936c274ac9506d7d41 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 13 Mar 2014 01:01:22 -0400 Subject: [PATCH 2/3] Add create repo feeds --- gogs.go | 2 +- models/action.go | 56 ++++++++++++++++++++++++++++++++++++++++++++ models/models.go | 2 +- models/repo.go | 3 ++- models/user.go | 20 ---------------- modules/auth/auth.go | 5 ++++ routers/user/user.go | 20 +++++++++++++++- web.go | 5 ++-- 8 files changed, 87 insertions(+), 26 deletions(-) create mode 100644 models/action.go diff --git a/gogs.go b/gogs.go index cf097a3a0f..04db72a661 100644 --- a/gogs.go +++ b/gogs.go @@ -20,7 +20,7 @@ import ( // Test that go1.1 tag above is included in builds. main.go refers to this definition. const go11tag = true -const APP_VER = "0.0.5.0311" +const APP_VER = "0.0.5.0313" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/action.go b/models/action.go new file mode 100644 index 0000000000..cae093ecbe --- /dev/null +++ b/models/action.go @@ -0,0 +1,56 @@ +// Copyright 2014 The Gogs 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 ( + "encoding/json" + "time" +) + +// Operation types of user action. +const ( + OP_CREATE_REPO = iota + 1 + OP_DELETE_REPO + OP_STAR_REPO + OP_FOLLOW_REPO + OP_COMMIT_REPO + OP_PULL_REQUEST +) + +// An Action represents +type Action struct { + Id int64 + UserId int64 + OpType int + RepoId int64 + Content string + Created time.Time `xorm:"created"` +} + +type NewRepoContent struct { + UserName string + RepoName string +} + +// NewRepoAction inserts action for create repository. +func NewRepoAction(user *User, repo *Repository) error { + content, err := json.Marshal(&NewRepoContent{user.Name, repo.Name}) + if err != nil { + return err + } + _, err = orm.InsertOne(&Action{ + UserId: user.Id, + OpType: OP_CREATE_REPO, + RepoId: repo.Id, + Content: string(content), + }) + return err +} + +func GetFeeds(userid, offset int64) ([]Action, error) { + actions := make([]Action, 0, 20) + err := orm.Limit(20, int(offset)).Desc("id").Where("user_id=?", userid).Find(&actions) + return actions, err +} diff --git a/models/models.go b/models/models.go index 413775f58b..7c28dc5422 100644 --- a/models/models.go +++ b/models/models.go @@ -92,7 +92,7 @@ func setEngine() { func init() { setEngine() - err := orm.Sync(new(User), new(PublicKey), new(Repository), new(Access)) + err := orm.Sync(new(User), new(PublicKey), new(Repository), new(Access), new(Action)) if err != nil { fmt.Printf("sync database struct error: %s\n", err) os.Exit(2) diff --git a/models/repo.go b/models/repo.go index c790dc90a6..6387090ed0 100644 --- a/models/repo.go +++ b/models/repo.go @@ -137,7 +137,8 @@ func CreateRepository(user *User, repoName, desc, repoLang, license string, priv } return nil, err } - return repo, nil + + return repo, NewRepoAction(user, repo) } // InitRepository initializes README and .gitignore if needed. diff --git a/models/user.go b/models/user.go index 8fa2e44e00..c59e4ae152 100644 --- a/models/user.go +++ b/models/user.go @@ -61,26 +61,6 @@ type Follow struct { Created time.Time `xorm:"created"` } -// Operation types of repository. -const ( - OP_CREATE_REPO = iota + 1 - OP_DELETE_REPO - OP_STAR_REPO - OP_FOLLOW_REPO - OP_COMMIT_REPO - OP_PULL_REQUEST -) - -// An Action represents -type Action struct { - Id int64 - UserId int64 - OpType int - RepoId int64 - Content string - Created time.Time `xorm:"created"` -} - var ( ErrUserOwnRepos = errors.New("User still have ownership of repositories") ErrUserAlreadyExist = errors.New("User already exist") diff --git a/modules/auth/auth.go b/modules/auth/auth.go index b085527554..e4748650c2 100644 --- a/modules/auth/auth.go +++ b/modules/auth/auth.go @@ -90,6 +90,11 @@ func (f *LogInForm) Validate(errors *binding.Errors, req *http.Request, context validate(errors, data, f) } +type FeedsForm struct { + UserId int64 `form:"userid" binding:"Required"` + Offset int64 `form:"offset"` +} + func getMinMaxSize(field reflect.StructField) string { for _, rule := range strings.Split(field.Tag.Get("binding"), ";") { if strings.HasPrefix(rule, "MinSize(") || strings.HasPrefix(rule, "MaxSize(") { diff --git a/routers/user/user.go b/routers/user/user.go index 5017e878c6..ae9dd90290 100644 --- a/routers/user/user.go +++ b/routers/user/user.go @@ -5,6 +5,7 @@ package user import ( + "bytes" "net/http" "github.com/codegangsta/martini" @@ -140,7 +141,6 @@ func SignUp(form auth.RegisterForm, data base.TmplData, req *http.Request, r ren r.Redirect("/user/login") } -// TODO: unfinished func Delete(data base.TmplData, req *http.Request, session sessions.Session, r render.Render) { data["Title"] = "Delete Account" @@ -166,3 +166,21 @@ func Delete(data base.TmplData, req *http.Request, session sessions.Session, r r r.HTML(200, "user/delete", data) } + +func Feeds(form auth.FeedsForm, r render.Render) string { + actions, err := models.GetFeeds(form.UserId, form.Offset) + if err != nil { + return err.Error() + } + + length := len(actions) + buf := bytes.NewBuffer([]byte("[")) + for i, action := range actions { + buf.WriteString(action.Content) + if i < length-1 { + buf.WriteString(",") + } + } + buf.WriteString("]") + return buf.String() +} diff --git a/web.go b/web.go index 0b41a909d6..1f34891bc4 100644 --- a/web.go +++ b/web.go @@ -64,18 +64,19 @@ func runWeb(*cli.Context) { m.Any("/user/logout", auth.SignInRequire(true), user.SignOut) m.Any("/user/sign_up", auth.SignOutRequire(), binding.BindIgnErr(auth.RegisterForm{}), user.SignUp) m.Any("/user/delete", auth.SignInRequire(true), user.Delete) + m.Get("/user/feeds", binding.Bind(auth.FeedsForm{}), user.Feeds) m.Any("/user/setting", auth.SignInRequire(true), user.Setting) m.Any("/user/setting/ssh", auth.SignInRequire(true), binding.BindIgnErr(auth.AddSSHKeyForm{}), user.SettingSSHKeys) m.Get("/user/:username", auth.SignInRequire(false), user.Profile) - m.Get("/:username/:reponame", repo.Repo) - m.Any("/repo/create", auth.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete) m.Any("/repo/list", auth.SignInRequire(false), repo.List) + m.Get("/:username/:reponame", repo.Repo) + listenAddr := fmt.Sprintf("%s:%s", base.Cfg.MustValue("server", "HTTP_ADDR"), base.Cfg.MustValue("server", "HTTP_PORT", "3000")) From d093406634f2896459d5abf5c7f6d2fd98c0812b Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 13 Mar 2014 01:03:16 -0400 Subject: [PATCH 3/3] Fix import path --- routers/repo/single.go | 7 ++++--- web.go | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/routers/repo/single.go b/routers/repo/single.go index 811aed3993..476daaca77 100644 --- a/routers/repo/single.go +++ b/routers/repo/single.go @@ -4,12 +4,13 @@ import ( "net/http" "github.com/codegangsta/martini" + "github.com/martini-contrib/render" + "github.com/martini-contrib/sessions" + "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/base" - "github.com/martini-contrib/render" - "github.com/martini-contrib/sessions" - "github.com/qiniu/log" + "github.com/gogits/gogs/modules/log" ) func Single(params martini.Params, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) { diff --git a/web.go b/web.go index 775735adc6..f108b1cf72 100644 --- a/web.go +++ b/web.go @@ -76,7 +76,7 @@ func runWeb(*cli.Context) { m.Any("/repo/list", auth.SignInRequire(false), repo.List) m.Get("/:username/:reponame", auth.SignInRequire(false), repo.Single) - m.Get("/:username/:reponame", repo.Repo) + //m.Get("/:username/:reponame", repo.Repo) listenAddr := fmt.Sprintf("%s:%s", base.Cfg.MustValue("server", "HTTP_ADDR"),