mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-22 12:54:53 -05:00
Add create repo feeds
This commit is contained in:
parent
9b845c1115
commit
6a75b1f7b3
8 changed files with 87 additions and 26 deletions
2
gogs.go
2
gogs.go
|
@ -20,7 +20,7 @@ import (
|
||||||
// Test that go1.1 tag above is included in builds. main.go refers to this definition.
|
// Test that go1.1 tag above is included in builds. main.go refers to this definition.
|
||||||
const go11tag = true
|
const go11tag = true
|
||||||
|
|
||||||
const APP_VER = "0.0.5.0311"
|
const APP_VER = "0.0.5.0313"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||||
|
|
56
models/action.go
Normal file
56
models/action.go
Normal file
|
@ -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
|
||||||
|
}
|
|
@ -92,7 +92,7 @@ func setEngine() {
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
setEngine()
|
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 {
|
if err != nil {
|
||||||
fmt.Printf("sync database struct error: %s\n", err)
|
fmt.Printf("sync database struct error: %s\n", err)
|
||||||
os.Exit(2)
|
os.Exit(2)
|
||||||
|
|
|
@ -137,7 +137,8 @@ func CreateRepository(user *User, repoName, desc, repoLang, license string, priv
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return repo, nil
|
|
||||||
|
return repo, NewRepoAction(user, repo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// InitRepository initializes README and .gitignore if needed.
|
// InitRepository initializes README and .gitignore if needed.
|
||||||
|
|
|
@ -61,26 +61,6 @@ type Follow struct {
|
||||||
Created time.Time `xorm:"created"`
|
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 (
|
var (
|
||||||
ErrUserOwnRepos = errors.New("User still have ownership of repositories")
|
ErrUserOwnRepos = errors.New("User still have ownership of repositories")
|
||||||
ErrUserAlreadyExist = errors.New("User already exist")
|
ErrUserAlreadyExist = errors.New("User already exist")
|
||||||
|
|
|
@ -90,6 +90,11 @@ func (f *LogInForm) Validate(errors *binding.Errors, req *http.Request, context
|
||||||
validate(errors, data, f)
|
validate(errors, data, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FeedsForm struct {
|
||||||
|
UserId int64 `form:"userid" binding:"Required"`
|
||||||
|
Offset int64 `form:"offset"`
|
||||||
|
}
|
||||||
|
|
||||||
func getMinMaxSize(field reflect.StructField) string {
|
func getMinMaxSize(field reflect.StructField) string {
|
||||||
for _, rule := range strings.Split(field.Tag.Get("binding"), ";") {
|
for _, rule := range strings.Split(field.Tag.Get("binding"), ";") {
|
||||||
if strings.HasPrefix(rule, "MinSize(") || strings.HasPrefix(rule, "MaxSize(") {
|
if strings.HasPrefix(rule, "MinSize(") || strings.HasPrefix(rule, "MaxSize(") {
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
package user
|
package user
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/codegangsta/martini"
|
"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")
|
r.Redirect("/user/login")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: unfinished
|
|
||||||
func Delete(data base.TmplData, req *http.Request, session sessions.Session, r render.Render) {
|
func Delete(data base.TmplData, req *http.Request, session sessions.Session, r render.Render) {
|
||||||
data["Title"] = "Delete Account"
|
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)
|
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()
|
||||||
|
}
|
||||||
|
|
5
web.go
5
web.go
|
@ -64,18 +64,19 @@ func runWeb(*cli.Context) {
|
||||||
m.Any("/user/logout", auth.SignInRequire(true), user.SignOut)
|
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/sign_up", auth.SignOutRequire(), binding.BindIgnErr(auth.RegisterForm{}), user.SignUp)
|
||||||
m.Any("/user/delete", auth.SignInRequire(true), user.Delete)
|
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", auth.SignInRequire(true), user.Setting)
|
||||||
m.Any("/user/setting/ssh", auth.SignInRequire(true), binding.BindIgnErr(auth.AddSSHKeyForm{}), user.SettingSSHKeys)
|
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("/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/create", auth.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create)
|
||||||
m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete)
|
m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete)
|
||||||
m.Any("/repo/list", auth.SignInRequire(false), repo.List)
|
m.Any("/repo/list", auth.SignInRequire(false), repo.List)
|
||||||
|
|
||||||
|
m.Get("/:username/:reponame", repo.Repo)
|
||||||
|
|
||||||
listenAddr := fmt.Sprintf("%s:%s",
|
listenAddr := fmt.Sprintf("%s:%s",
|
||||||
base.Cfg.MustValue("server", "HTTP_ADDR"),
|
base.Cfg.MustValue("server", "HTTP_ADDR"),
|
||||||
base.Cfg.MustValue("server", "HTTP_PORT", "3000"))
|
base.Cfg.MustValue("server", "HTTP_PORT", "3000"))
|
||||||
|
|
Loading…
Reference in a new issue