From e44d9ffd89be84ad0f2ddfe6fc986be8eb8fc032 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 18 Mar 2014 00:14:05 -0400 Subject: Delete commit and update getlastcommit --- models/repo.go | 39 ++++++--------------------------------- 1 file changed, 6 insertions(+), 33 deletions(-) (limited to 'models') diff --git a/models/repo.go b/models/repo.go index 6e3754ac..21d46aa2 100644 --- a/models/repo.go +++ b/models/repo.go @@ -400,15 +400,6 @@ func DeleteRepository(userId, repoId int64, userName string) (err error) { return nil } -// Commit represents a git commit. -type Commit struct { - Author string - Email string - Date time.Time - SHA string - Message string -} - var ( ErrRepoFileNotLoaded = fmt.Errorf("repo file not loaded") ) @@ -553,34 +544,16 @@ func GetReposFiles(userName, reposName, branchName, rpath string) ([]*RepoFile, } // GetLastestCommit returns the latest commit of given repository. -func GetLastestCommit(userName, repoName string) (*Commit, error) { - stdout, _, err := com.ExecCmd("git", "--git-dir="+RepoPath(userName, repoName), "log", "-1") +func GetLastCommit(userName, repoName, branchname string) (*git.Commit, error) { + repo, err := git.OpenRepository(RepoPath(userName, repoName)) if err != nil { return nil, err } - - commit := new(Commit) - for _, line := range strings.Split(stdout, "\n") { - if len(line) == 0 { - continue - } - switch { - case line[0] == 'c': - commit.SHA = line[7:] - case line[0] == 'A': - infos := strings.SplitN(line, " ", 3) - commit.Author = infos[1] - commit.Email = infos[2][1 : len(infos[2])-1] - case line[0] == 'D': - commit.Date, err = time.Parse("Mon Jan 02 15:04:05 2006 -0700", line[8:]) - if err != nil { - return nil, err - } - case line[:4] == " ": - commit.Message = line[4:] - } + r, err := repo.LookupReference(fmt.Sprintf("refs/heads/%s", branchname)) + if err != nil { + return nil, err } - return commit, nil + return r.LastCommit() } // GetCommits returns all commits of given branch of repository. -- cgit v1.2.3 From a3a93aef11f9ff6eca38e9147b022a0649b73bdf Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 18 Mar 2014 01:33:53 -0400 Subject: Add some config options --- conf/app.ini | 26 +++++++++++++++++++------- models/user.go | 2 +- modules/base/conf.go | 31 ++++++++++++++++++++++++++----- web.go | 13 +++++++++++++ 4 files changed, 59 insertions(+), 13 deletions(-) (limited to 'models') diff --git a/conf/app.ini b/conf/app.ini index 1c702107..9d4ee0b5 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -1,12 +1,14 @@ -# App name that shows on every page title +; App name that shows on every page title APP_NAME = Gogs: Go Git Service -# !!MUST CHANGE TO YOUR USER NAME!! +; !!MUST CHANGE TO YOUR USER NAME!! RUN_USER = lunny +; Either "dev", "prod" or "test", based on martini +RUN_MODE = dev [repository] ROOT = /Users/%(RUN_USER)s/git/gogs-repositories -LANG_IGNS=Google Go|C|Python|Ruby|C Sharp -LICENSES=Apache v2 License|GPL v2|MIT License|Affero GPL|BSD (3-Clause) License +LANG_IGNS = Google Go|C|Python|Ruby|C Sharp +LICENSES = Apache v2 License|GPL v2|MIT License|Affero GPL|BSD (3-Clause) License [server] DOMAIN = gogits.org @@ -14,15 +16,25 @@ HTTP_ADDR = HTTP_PORT = 3000 [database] -# Either "mysql" or "postgres", it's your choice +; Either "mysql" or "postgres", it's your choice DB_TYPE = mysql HOST = NAME = gogs USER = root PASSWD = -# For "postgres" only, either "disable" or "verify-full" +; For "postgres" only, either "disable", "require" or "verify-full" SSL_MODE = disable [security] -# !!CHANGE THIS TO KEEP YOUR USER DATA SAFE!! +; !!CHANGE THIS TO KEEP YOUR USER DATA SAFE!! USER_PASSWD_SALT = !#@FDEWREWR&*( + +[mailer] +ENABLED = true +; Name displayed in mail title +NAME = %(APP_NAME)s +; Mail server +HOST = +; Mailer user name and password +USER = +PASSWD = \ No newline at end of file diff --git a/models/user.go b/models/user.go index 87c644b2..80af9bd4 100644 --- a/models/user.go +++ b/models/user.go @@ -252,7 +252,7 @@ func LoginUserPlain(name, passwd string) (*User, error) { } else if !has { err = ErrUserNotExist } - return &user, nil + return &user, err } // FollowUser marks someone be another's follower. diff --git a/modules/base/conf.go b/modules/base/conf.go index 9ed5545e..83c7f887 100644 --- a/modules/base/conf.go +++ b/modules/base/conf.go @@ -13,13 +13,23 @@ import ( "github.com/Unknwon/com" "github.com/Unknwon/goconfig" + + "github.com/gogits/gogs/modules/log" ) +// Mailer represents a mail service. +type Mailer struct { + Name string + Host string + User, Passwd string +} + var ( - AppVer string - AppName string - Domain string - Cfg *goconfig.ConfigFile + AppVer string + AppName string + Domain string + Cfg *goconfig.ConfigFile + MailService *Mailer ) func exeDir() (string, error) { @@ -59,6 +69,17 @@ func init() { } Cfg.BlockMode = false - AppName = Cfg.MustValue("", "APP_NAME") + AppName = Cfg.MustValue("", "APP_NAME", "Gogs: Go Git Service") Domain = Cfg.MustValue("server", "DOMAIN") + + // Check mailer setting. + if Cfg.MustBool("mailer", "ENABLED") { + MailService = &Mailer{ + Name: Cfg.MustValue("mailer", "NAME", AppName), + Host: Cfg.MustValue("mailer", "HOST", "127.0.0.1:25"), + User: Cfg.MustValue("mailer", "USER", "example@example.com"), + Passwd: Cfg.MustValue("mailer", "PASSWD", "******"), + } + log.Info("Mail Service Enabled") + } } diff --git a/web.go b/web.go index ca504ea5..cc200979 100644 --- a/web.go +++ b/web.go @@ -8,6 +8,7 @@ import ( "fmt" "html/template" "net/http" + "strings" "github.com/codegangsta/cli" "github.com/codegangsta/martini" @@ -34,8 +35,20 @@ gogs web`, Flags: []cli.Flag{}, } +// Check run mode(Default of martini is Dev). +func checkRunMode() { + switch base.Cfg.MustValue("", "RUN_MODE") { + case "prod": + martini.Env = martini.Prod + case "test": + martini.Env = martini.Test + } + log.Info("Run Mode: %s", strings.Title(martini.Env)) +} + func runWeb(*cli.Context) { log.Info("%s %s", base.AppName, base.AppVer) + checkRunMode() m := martini.Classic() -- cgit v1.2.3 From ccd43b09b22f551070c2656dd2f4c7f347619a1c Mon Sep 17 00:00:00 2001 From: "shengxiang[skyblue]" Date: Tue, 18 Mar 2014 21:58:58 +0800 Subject: add some comment --- models/action.go | 4 ++-- routers/user/setting.go | 2 ++ update.go | 4 ++-- web.go | 58 ++++++++++++++++++++++++++----------------------- 4 files changed, 37 insertions(+), 31 deletions(-) (limited to 'models') diff --git a/models/action.go b/models/action.go index 7917929d..d388bca9 100644 --- a/models/action.go +++ b/models/action.go @@ -22,8 +22,8 @@ const ( // Action represents user operation type and information to the repository. type Action struct { Id int64 - UserId int64 // Receiver user id. - OpType int + UserId int64 // Receiver user id. + OpType int // Operations: CREATE DELETE STAR ... ActUserId int64 // Action user id. ActUserName string // Action user name. RepoId int64 diff --git a/routers/user/setting.go b/routers/user/setting.go index 91e992b1..ea42f70c 100644 --- a/routers/user/setting.go +++ b/routers/user/setting.go @@ -14,6 +14,7 @@ import ( "github.com/gogits/gogs/modules/middleware" ) +// render user setting page (email, website modify) func Setting(ctx *middleware.Context, form auth.UpdateProfileForm) { ctx.Data["Title"] = "Setting" ctx.Data["PageIsUserSetting"] = true @@ -26,6 +27,7 @@ func Setting(ctx *middleware.Context, form auth.UpdateProfileForm) { return } + // below is for POST requests if hasErr, ok := ctx.Data["HasError"]; ok && hasErr.(bool) { ctx.Render.HTML(200, "user/setting", ctx.Data) return diff --git a/update.go b/update.go index 23d8fb02..baa433d7 100644 --- a/update.go +++ b/update.go @@ -10,8 +10,7 @@ import ( "github.com/codegangsta/cli" - git "github.com/gogits/git" - + "github.com/gogits/git" "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/log" ) @@ -25,6 +24,7 @@ gogs serv provide access auth for repositories`, Flags: []cli.Flag{}, } +// for command: ./gogs update func runUpdate(*cli.Context) { userName := os.Getenv("userName") userId := os.Getenv("userId") diff --git a/web.go b/web.go index cc200979..a0e39711 100644 --- a/web.go +++ b/web.go @@ -61,48 +61,52 @@ func runWeb(*cli.Context) { m.Use(middleware.InitContext()) + ignSignIn := middleware.SignInRequire(false) + reqSignIn, reqSignOut := middleware.SignInRequire(true), middleware.SignOutRequire() // Routers. - m.Get("/", middleware.SignInRequire(false), routers.Home) - m.Get("/issues", middleware.SignInRequire(true), user.Issues) - m.Get("/pulls", middleware.SignInRequire(true), user.Pulls) - m.Get("/stars", middleware.SignInRequire(true), user.Stars) - m.Any("/user/login", middleware.SignOutRequire(), binding.BindIgnErr(auth.LogInForm{}), user.SignIn) - m.Any("/user/logout", middleware.SignInRequire(true), user.SignOut) - m.Any("/user/sign_up", middleware.SignOutRequire(), binding.BindIgnErr(auth.RegisterForm{}), user.SignUp) - m.Any("/user/delete", middleware.SignInRequire(true), user.Delete) + m.Get("/", ignSignIn, routers.Home) + m.Get("/issues", reqSignIn, user.Issues) + m.Get("/pulls", reqSignIn, user.Pulls) + m.Get("/stars", reqSignIn, user.Stars) + m.Any("/user/login", reqSignOut, binding.BindIgnErr(auth.LogInForm{}), user.SignIn) + m.Any("/user/logout", reqSignIn, user.SignOut) + m.Any("/user/sign_up", reqSignOut, binding.BindIgnErr(auth.RegisterForm{}), user.SignUp) + m.Any("/user/delete", reqSignIn, user.Delete) m.Get("/user/feeds", binding.Bind(auth.FeedsForm{}), user.Feeds) - m.Any("/user/setting", middleware.SignInRequire(true), binding.BindIgnErr(auth.UpdateProfileForm{}), user.Setting) - m.Any("/user/setting/password", middleware.SignInRequire(true), binding.BindIgnErr(auth.UpdatePasswdForm{}), user.SettingPassword) - m.Any("/user/setting/ssh", middleware.SignInRequire(true), binding.BindIgnErr(auth.AddSSHKeyForm{}), user.SettingSSHKeys) - m.Any("/user/setting/notification", middleware.SignInRequire(true), user.SettingNotification) - m.Any("/user/setting/security", middleware.SignInRequire(true), user.SettingSecurity) + m.Any("/user/setting", reqSignIn, binding.BindIgnErr(auth.UpdateProfileForm{}), user.Setting) + m.Any("/user/setting/password", reqSignIn, binding.BindIgnErr(auth.UpdatePasswdForm{}), user.SettingPassword) + m.Any("/user/setting/ssh", reqSignIn, binding.BindIgnErr(auth.AddSSHKeyForm{}), user.SettingSSHKeys) + m.Any("/user/setting/notification", reqSignIn, user.SettingNotification) + m.Any("/user/setting/security", reqSignIn, user.SettingSecurity) - m.Get("/user/:username", middleware.SignInRequire(false), user.Profile) + m.Get("/user/:username", ignSignIn, user.Profile) - m.Any("/repo/create", middleware.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) + m.Any("/repo/create", reqSignIn, binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) m.Get("/help", routers.Help) - m.Post("/:username/:reponame/settings", middleware.SignInRequire(true), middleware.RepoAssignment(true), repo.SettingPost) - m.Get("/:username/:reponame/settings", middleware.SignInRequire(true), middleware.RepoAssignment(true), repo.Setting) + m.Post("/:username/:reponame/settings", reqSignIn, middleware.RepoAssignment(true), repo.SettingPost) + m.Get("/:username/:reponame/settings", reqSignIn, middleware.RepoAssignment(true), repo.Setting) - m.Get("/:username/:reponame/commits/:branchname", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Commits) - m.Get("/:username/:reponame/issues", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Issues) - m.Get("/:username/:reponame/pulls", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Pulls) - m.Get("/:username/:reponame/branches", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Branches) + m.Get("/:username/:reponame/commits/:branchname", ignSignIn, middleware.RepoAssignment(true), repo.Commits) + m.Get("/:username/:reponame/issues", ignSignIn, middleware.RepoAssignment(true), repo.Issues) + m.Get("/:username/:reponame/pulls", ignSignIn, middleware.RepoAssignment(true), repo.Pulls) + m.Get("/:username/:reponame/branches", ignSignIn, middleware.RepoAssignment(true), repo.Branches) m.Get("/:username/:reponame/tree/:branchname/**", - middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) + ignSignIn, middleware.RepoAssignment(true), repo.Single) m.Get("/:username/:reponame/tree/:branchname", - middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) - m.Get("/:username/:reponame/commit/:commitid/**", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) - m.Get("/:username/:reponame/commit/:commitid", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) + ignSignIn, middleware.RepoAssignment(true), repo.Single) + m.Get("/:username/:reponame/commit/:commitid/**", ignSignIn, middleware.RepoAssignment(true), repo.Single) + m.Get("/:username/:reponame/commit/:commitid", ignSignIn, middleware.RepoAssignment(true), repo.Single) - m.Get("/:username/:reponame", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Single) + m.Get("/:username/:reponame", ignSignIn, middleware.RepoAssignment(true), repo.Single) listenAddr := fmt.Sprintf("%s:%s", base.Cfg.MustValue("server", "HTTP_ADDR"), base.Cfg.MustValue("server", "HTTP_PORT", "3000")) log.Info("Listen: %s", listenAddr) - http.ListenAndServe(listenAddr, m) + if err := http.ListenAndServe(listenAddr, m); err != nil { + log.Critical(err.Error()) + } } -- cgit v1.2.3