diff --git a/cmd/dump.go b/cmd/dump.go new file mode 100644 index 000000000..c385d586f --- /dev/null +++ b/cmd/dump.go @@ -0,0 +1,52 @@ +// 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 cmd + +import ( + "log" + "os" + "path" + + "github.com/Unknwon/cae/zip" + "github.com/codegangsta/cli" + + "github.com/gogits/gogs/modules/base" +) + +var CmdDump = cli.Command{ + 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`, + Action: runDump, + Flags: []cli.Flag{}, +} + +func runDump(*cli.Context) { + base.NewConfigContext() + + log.Printf("Dumping local repositories...%s", base.RepoRootPath) + zip.Verbose = false + defer os.Remove("gogs-repo.zip") + if err := zip.PackTo(base.RepoRootPath, "gogs-repo.zip", true); err != nil { + log.Fatalf("Fail to dump local repositories: %v", err) + } + + z, err := zip.Create("gogs-dump.zip") + if err != nil { + os.Remove("gogs-dump.zip") + log.Fatalf("Fail to create gogs-dump.zip: %v", err) + } + + execDir, _ := base.ExecDir() + z.AddFile("gogs-repo.zip", path.Join(execDir, "gogs-repo.zip")) + z.AddFile("custom/conf/app.ini", path.Join(execDir, "custom/conf/app.ini")) + z.AddDir("log", path.Join(execDir, "log")) + z.Close() + + log.Println("Finish dumping!") +} diff --git a/fix.go b/cmd/fix.go similarity index 98% rename from fix.go rename to cmd/fix.go index afc1ea6eb..47134cd14 100644 --- a/fix.go +++ b/cmd/fix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package main +package cmd import ( "fmt" diff --git a/serve.go b/cmd/serve.go similarity index 97% rename from serve.go rename to cmd/serve.go index e3197a23d..73dea929e 100644 --- a/serve.go +++ b/cmd/serve.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package main +package cmd import ( //"container/list" @@ -36,9 +36,9 @@ var ( var CmdServ = cli.Command{ Name: "serv", - Usage: "This command just should be called by ssh shell", + Usage: "This command should only be called by SSH shell", Description: ` -gogs serv provide access auth for repositories`, +Serv provide access auth for repositories`, Action: runServ, Flags: []cli.Flag{}, } diff --git a/update.go b/cmd/update.go similarity index 93% rename from update.go rename to cmd/update.go index b8f595827..b2c73f93c 100644 --- a/update.go +++ b/cmd/update.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package main +package cmd import ( "os" @@ -18,9 +18,9 @@ import ( var CmdUpdate = cli.Command{ Name: "update", - Usage: "This command just should be called by ssh shell", + Usage: "This command should only be called by SSH shell", Description: ` -gogs update get pushed info and insert into database`, +Update get pushed info and insert into database`, Action: runUpdate, Flags: []cli.Flag{}, } diff --git a/web.go b/cmd/web.go similarity index 98% rename from web.go rename to cmd/web.go index 9fa43d163..af5d507ed 100644 --- a/web.go +++ b/cmd/web.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package main +package cmd import ( "fmt" @@ -29,9 +29,9 @@ import ( var CmdWeb = cli.Command{ Name: "web", - Usage: "Gogs web server", + Usage: "Start Gogs web server", Description: ` -gogs web server is the only thing you need to run, +Gogs web server is the only thing you need to run, and it takes care of all the other things for you`, Action: runWeb, Flags: []cli.Flag{}, diff --git a/gogs.go b/gogs.go index 5d4463277..a48d0a555 100644 --- a/gogs.go +++ b/gogs.go @@ -13,6 +13,7 @@ import ( "github.com/codegangsta/cli" + "github.com/gogits/gogs/cmd" "github.com/gogits/gogs/modules/base" ) @@ -32,10 +33,11 @@ func main() { app.Usage = "Go Git Service" app.Version = APP_VER app.Commands = []cli.Command{ - CmdWeb, - CmdServ, - CmdUpdate, - // CmdFix, + cmd.CmdWeb, + // cmd.CmdFix, + cmd.CmdDump, + cmd.CmdServ, + cmd.CmdUpdate, } app.Flags = append(app.Flags, []cli.Flag{}...) app.Run(os.Args) diff --git a/modules/base/conf.go b/modules/base/conf.go index 23c7276bf..eab83d20a 100644 --- a/modules/base/conf.go +++ b/modules/base/conf.go @@ -303,7 +303,6 @@ func newNotifyMailService() { } func NewConfigContext() { - //var err error workDir, err := ExecDir() if err != nil { qlog.Fatalf("Fail to get work directory: %s\n", err)