@@ -20,19 +20,19 @@ 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()) | ||||
} | } | ||||
func checkRunUser() bool { | func checkRunUser() bool { | ||||
user, err := user.Current() | |||||
u, err := user.Current() | |||||
if err != nil { | if err != nil { | ||||
// TODO: log | // TODO: log | ||||
return false | return false | ||||
} | } | ||||
return user.Username == base.Cfg.MustValue("", "RUN_USER") | |||||
return u.Username == base.Cfg.MustValue("", "RUN_USER") | |||||
} | } | ||||
func main() { | func main() { | ||||
@@ -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(") { | ||||
@@ -2,10 +2,11 @@ package repo | |||||
import ( | import ( | ||||
"github.com/codegangsta/martini" | "github.com/codegangsta/martini" | ||||
"github.com/martini-contrib/render" | |||||
"github.com/gogits/gogs/models" | "github.com/gogits/gogs/models" | ||||
"github.com/gogits/gogs/modules/base" | "github.com/gogits/gogs/modules/base" | ||||
"github.com/gogits/gogs/modules/log" | "github.com/gogits/gogs/modules/log" | ||||
"github.com/martini-contrib/render" | |||||
) | ) | ||||
func Single(params martini.Params, r render.Render, data base.TmplData) { | func Single(params martini.Params, r render.Render, data base.TmplData) { | ||||
@@ -20,7 +21,10 @@ func Single(params martini.Params, r render.Render, data base.TmplData) { | |||||
r.HTML(200, "base/error", data) | r.HTML(200, "base/error", data) | ||||
return | return | ||||
} | } | ||||
data["Files"] = files | |||||
data["IsRepoToolbarSource"] = true | data["IsRepoToolbarSource"] = true | ||||
data["Files"] = files | |||||
r.HTML(200, "repo/single", data) | r.HTML(200, "repo/single", data) | ||||
} | } |
@@ -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() | |||||
} |
@@ -64,19 +64,20 @@ 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", auth.SignInRequire(false), auth.RepoAssignment(true), repo.Single) | m.Get("/:username/:reponame", auth.SignInRequire(false), auth.RepoAssignment(true), repo.Single) | ||||
//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")) | ||||