2014-05-02 05:21:46 +04:00
// 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 (
2014-05-05 21:08:01 +04:00
"fmt"
2014-05-02 05:21:46 +04:00
"log"
"os"
"path"
2014-05-05 21:08:01 +04:00
"time"
2014-05-02 05:21:46 +04:00
"github.com/Unknwon/cae/zip"
"github.com/codegangsta/cli"
2014-05-05 08:55:17 +04:00
"github.com/gogits/gogs/models"
2014-05-02 05:21:46 +04:00
"github.com/gogits/gogs/modules/base"
)
var CmdDump = cli . Command {
Name : "dump" ,
2014-05-05 08:55:17 +04:00
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 ` ,
2014-05-02 05:21:46 +04:00
Action : runDump ,
Flags : [ ] cli . Flag { } ,
}
func runDump ( * cli . Context ) {
base . NewConfigContext ( )
2014-05-05 08:55:17 +04:00
models . LoadModelsConfig ( )
models . SetEngine ( )
2014-05-02 05:21:46 +04:00
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 )
}
2014-05-05 08:55:17 +04:00
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 )
}
2014-05-05 21:08:01 +04:00
fileName := fmt . Sprintf ( "gogs-dump-%d.zip" , time . Now ( ) . Unix ( ) )
2014-05-05 08:55:17 +04:00
log . Printf ( "Packing dump files..." )
2014-05-05 21:08:01 +04:00
z , err := zip . Create ( fileName )
2014-05-02 05:21:46 +04:00
if err != nil {
2014-05-05 21:08:01 +04:00
os . Remove ( fileName )
log . Fatalf ( "Fail to create %s: %v" , fileName , err )
2014-05-02 05:21:46 +04:00
}
execDir , _ := base . ExecDir ( )
z . AddFile ( "gogs-repo.zip" , path . Join ( execDir , "gogs-repo.zip" ) )
2014-05-05 08:55:17 +04:00
z . AddFile ( "gogs-db.sql" , path . Join ( execDir , "gogs-db.sql" ) )
2014-05-02 05:21:46 +04:00
z . AddFile ( "custom/conf/app.ini" , path . Join ( execDir , "custom/conf/app.ini" ) )
z . AddDir ( "log" , path . Join ( execDir , "log" ) )
2014-05-05 08:55:17 +04:00
if err = z . Close ( ) ; err != nil {
2014-05-05 21:08:01 +04:00
os . Remove ( fileName )
log . Fatalf ( "Fail to save %s: %v" , fileName , err )
2014-05-05 08:55:17 +04:00
}
2014-05-02 05:21:46 +04:00
log . Println ( "Finish dumping!" )
}