123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- package commands
- import (
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "os"
- "github.com/astaxie/beego"
- "github.com/lifei6671/godoc/conf"
- "github.com/astaxie/beego/orm"
- "strings"
- )
- //系统升级.
- func Update() {
- if len(os.Args) >= 2 && os.Args[1] == "update" {
- adapter := beego.AppConfig.String("db_adapter")
- if adapter == "mysql" {
- mysqlUpdate()
- }else if adapter == "sqlite3" {
- sqliteUpdate()
- }
- o := orm.NewOrm()
- b,err := ioutil.ReadFile("./data/data.sql")
- if err != nil {
- panic(err.Error())
- os.Exit(1)
- }
- sqls := string(b)
- if sqls != "" {
- items := strings.Split(sqls,"\r\n")
- for _,sql := range items {
- if sql != "" {
- _,err = o.Raw(sql).Exec()
- if err != nil && err != orm.ErrNoRows{
- panic("SITE_NAME => " + err.Error())
- os.Exit(1)
- }
- }
- }
- }
- fmt.Println("update successed.")
- os.Exit(0)
- }
- }
- //检查最新版本.
- func CheckUpdate() {
- if len(os.Args) >= 2 && os.Args[1] == "version" {
- resp, err := http.Get("https://api.github.com/repos/lifei6671/godoc/tags")
- if err != nil {
- beego.Error("CheckUpdate => ", err)
- os.Exit(1)
- }
- defer resp.Body.Close()
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- beego.Error("CheckUpdate => ", err)
- os.Exit(1)
- }
- var result []*struct {
- Name string `json:"name"`
- }
- err = json.Unmarshal(body, &result)
- if err != nil {
- beego.Error("CheckUpdate => ", err)
- os.Exit(1)
- }
- fmt.Println("MinDoc current version => ", conf.VERSION)
- fmt.Println("MinDoc last version => ", result[0].Name)
- os.Exit(0)
- }
- }
- //MySQL 数据库更新表结构.
- func mysqlUpdate() {
- db_name := beego.AppConfig.String("db_database")
- o := orm.NewOrm()
- var total_count int
- err := o.Raw("SELECT COUNT(*) AS total_count FROM information_schema.columns WHERE table_schema= ? AND table_name = 'md_members' AND column_name = 'auth_method'",db_name).QueryRow(&total_count)
- if err != nil {
- panic(fmt.Sprintf("error : 6001 => %s",err.Error()))
- os.Exit(1)
- }
- _,err = o.Raw("ALTER TABLE md_members ADD auth_method VARCHAR(50) DEFAULT 'local' NULL").Exec()
- }
- //sqlite 数据库更新表结构.
- func sqliteUpdate() {
- o := orm.NewOrm()
- var sqlite_master struct{
- Name string
- }
- err := o.Raw("select * from sqlite_master where name='md_members' and sql like '%auth_method%' limit 1").QueryRow(&sqlite_master)
- //查询是否已经存在 auth_method 列
- if err == orm.ErrNoRows{
- _,err = o.Raw("ALTER TABLE md_members ADD auth_method VARCHAR(50) DEFAULT 'local' NULL;").Exec()
- if err != nil {
- panic(fmt.Sprintf("error : 6001 => %s",err.Error()))
- os.Exit(1)
- }
- }
- }
|