| @@ -12,22 +12,23 @@ import ( | |||||
| "github.com/Unknwon/cae/zip" | "github.com/Unknwon/cae/zip" | ||||
| "github.com/codegangsta/cli" | "github.com/codegangsta/cli" | ||||
| "github.com/gogits/gogs/models" | |||||
| "github.com/gogits/gogs/modules/base" | "github.com/gogits/gogs/modules/base" | ||||
| ) | ) | ||||
| var CmdDump = cli.Command{ | var CmdDump = cli.Command{ | ||||
| Name: "dump", | Name: "dump", | ||||
| Usage: "Dump Gogs files except database", | |||||
| Description: ` | |||||
| Dump compresses all related files into zip file except database, | |||||
| it can be used for backup and capture Gogs server image to send | |||||
| to maintainer`, | |||||
| Usage: "Dump Gogs files and database", | |||||
| Description: `Dump compresses all related files and database into zip file. | |||||
| It can be used for backup and capture Gogs server image to send to maintainer`, | |||||
| Action: runDump, | Action: runDump, | ||||
| Flags: []cli.Flag{}, | Flags: []cli.Flag{}, | ||||
| } | } | ||||
| func runDump(*cli.Context) { | func runDump(*cli.Context) { | ||||
| base.NewConfigContext() | base.NewConfigContext() | ||||
| models.LoadModelsConfig() | |||||
| models.SetEngine() | |||||
| log.Printf("Dumping local repositories...%s", base.RepoRootPath) | log.Printf("Dumping local repositories...%s", base.RepoRootPath) | ||||
| zip.Verbose = false | zip.Verbose = false | ||||
| @@ -36,6 +37,13 @@ func runDump(*cli.Context) { | |||||
| log.Fatalf("Fail to dump local repositories: %v", err) | log.Fatalf("Fail to dump local repositories: %v", err) | ||||
| } | } | ||||
| log.Printf("Dumping database...") | |||||
| defer os.Remove("gogs-db.sql") | |||||
| if err := models.DumpDatabase("gogs-db.sql"); err != nil { | |||||
| log.Fatalf("Fail to dump database: %v", err) | |||||
| } | |||||
| log.Printf("Packing dump files...") | |||||
| z, err := zip.Create("gogs-dump.zip") | z, err := zip.Create("gogs-dump.zip") | ||||
| if err != nil { | if err != nil { | ||||
| os.Remove("gogs-dump.zip") | os.Remove("gogs-dump.zip") | ||||
| @@ -44,9 +52,13 @@ func runDump(*cli.Context) { | |||||
| execDir, _ := base.ExecDir() | execDir, _ := base.ExecDir() | ||||
| z.AddFile("gogs-repo.zip", path.Join(execDir, "gogs-repo.zip")) | z.AddFile("gogs-repo.zip", path.Join(execDir, "gogs-repo.zip")) | ||||
| z.AddFile("gogs-db.sql", path.Join(execDir, "gogs-db.sql")) | |||||
| z.AddFile("custom/conf/app.ini", path.Join(execDir, "custom/conf/app.ini")) | z.AddFile("custom/conf/app.ini", path.Join(execDir, "custom/conf/app.ini")) | ||||
| z.AddDir("log", path.Join(execDir, "log")) | z.AddDir("log", path.Join(execDir, "log")) | ||||
| z.Close() | |||||
| if err = z.Close(); err != nil { | |||||
| os.Remove("gogs-dump.zip") | |||||
| log.Fatalf("Fail to save gogs-dump.zip: %v", err) | |||||
| } | |||||
| log.Println("Finish dumping!") | log.Println("Finish dumping!") | ||||
| } | } | ||||
| @@ -14,12 +14,11 @@ import ( | |||||
| ) | ) | ||||
| var CmdFix = cli.Command{ | var CmdFix = cli.Command{ | ||||
| Name: "fix", | |||||
| Usage: "This command for upgrade from old version", | |||||
| Description: ` | |||||
| gogs fix provide upgrade from old version`, | |||||
| Action: runFix, | |||||
| Flags: []cli.Flag{}, | |||||
| Name: "fix", | |||||
| Usage: "This command for upgrade from old version", | |||||
| Description: `Fix provide upgrade from old version`, | |||||
| Action: runFix, | |||||
| Flags: []cli.Flag{}, | |||||
| } | } | ||||
| func runFix(k *cli.Context) { | func runFix(k *cli.Context) { | ||||
| @@ -35,12 +35,11 @@ var ( | |||||
| ) | ) | ||||
| var CmdServ = cli.Command{ | var CmdServ = cli.Command{ | ||||
| Name: "serv", | |||||
| Usage: "This command should only be called by SSH shell", | |||||
| Description: ` | |||||
| Serv provide access auth for repositories`, | |||||
| Action: runServ, | |||||
| Flags: []cli.Flag{}, | |||||
| Name: "serv", | |||||
| Usage: "This command should only be called by SSH shell", | |||||
| Description: `Serv provide access auth for repositories`, | |||||
| Action: runServ, | |||||
| Flags: []cli.Flag{}, | |||||
| } | } | ||||
| func newLogger(execDir string) { | func newLogger(execDir string) { | ||||
| @@ -17,12 +17,11 @@ import ( | |||||
| ) | ) | ||||
| var CmdUpdate = cli.Command{ | var CmdUpdate = cli.Command{ | ||||
| Name: "update", | |||||
| Usage: "This command should only be called by SSH shell", | |||||
| Description: ` | |||||
| Update get pushed info and insert into database`, | |||||
| Action: runUpdate, | |||||
| Flags: []cli.Flag{}, | |||||
| Name: "update", | |||||
| Usage: "This command should only be called by SSH shell", | |||||
| Description: `Update get pushed info and insert into database`, | |||||
| Action: runUpdate, | |||||
| Flags: []cli.Flag{}, | |||||
| } | } | ||||
| func newUpdateLogger(execDir string) { | func newUpdateLogger(execDir string) { | ||||
| @@ -30,8 +30,7 @@ import ( | |||||
| var CmdWeb = cli.Command{ | var CmdWeb = cli.Command{ | ||||
| Name: "web", | Name: "web", | ||||
| Usage: "Start Gogs web server", | Usage: "Start Gogs web server", | ||||
| Description: ` | |||||
| Gogs web server is the only thing you need to run, | |||||
| Description: `Gogs web server is the only thing you need to run, | |||||
| and it takes care of all the other things for you`, | and it takes care of all the other things for you`, | ||||
| Action: runWeb, | Action: runWeb, | ||||
| Flags: []cli.Flag{}, | Flags: []cli.Flag{}, | ||||
| @@ -153,7 +152,7 @@ func runWeb(*cli.Context) { | |||||
| r.Get("/settings/collaboration", repo.Collaboration) | r.Get("/settings/collaboration", repo.Collaboration) | ||||
| r.Post("/settings/collaboration", repo.CollaborationPost) | r.Post("/settings/collaboration", repo.CollaborationPost) | ||||
| r.Get("/settings/hooks", repo.WebHooks) | r.Get("/settings/hooks", repo.WebHooks) | ||||
| r.Get("/settings/hooks/add",repo.WebHooksAdd) | |||||
| r.Get("/settings/hooks/add", repo.WebHooksAdd) | |||||
| r.Get("/action/:action", repo.Action) | r.Get("/action/:action", repo.Action) | ||||
| r.Get("/issues/new", repo.CreateIssue) | r.Get("/issues/new", repo.CreateIssue) | ||||
| r.Post("/issues/new", bindIgnErr(auth.CreateIssueForm{}), repo.CreateIssuePost) | r.Post("/issues/new", bindIgnErr(auth.CreateIssueForm{}), repo.CreateIssuePost) | ||||
| @@ -160,3 +160,8 @@ func GetStatistic() (stats Statistic) { | |||||
| stats.Counter.Release, _ = orm.Count(new(Release)) | stats.Counter.Release, _ = orm.Count(new(Release)) | ||||
| return | return | ||||
| } | } | ||||
| // DumpDatabase dumps all data from database to file system. | |||||
| func DumpDatabase(filePath string) error { | |||||
| return orm.DumpAllToFile(filePath) | |||||
| } | |||||
| @@ -140,7 +140,9 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string | |||||
| // AvatarLink returns avatar link by given e-mail. | // AvatarLink returns avatar link by given e-mail. | ||||
| func AvatarLink(email string) string { | func AvatarLink(email string) string { | ||||
| if Service.EnableCacheAvatar { | |||||
| if DisableGravatar { | |||||
| return "/img/avatar_default.jpg" | |||||
| } else if Service.EnableCacheAvatar { | |||||
| return "/avatar/" + EncodeMd5(email) | return "/avatar/" + EncodeMd5(email) | ||||
| } | } | ||||
| return "//1.gravatar.com/avatar/" + EncodeMd5(email) | return "//1.gravatar.com/avatar/" + EncodeMd5(email) | ||||