// 发生错误,锁定程序并退出执行,哦,还要发邮件通知管理员 func (s *GitEncoder) Fatal(msg interface{}) { // 创建锁定文件 if ok, _ := util.IsExist(s.Pwd + util.LOCKFILE); !ok { os.Create(s.Pwd + util.LOCKFILE) } // 发送邮件 mailConfig := &util.MailT{ Addr: s.Config["mailHost"], User: s.Config["mailUser"], Pass: s.Config["mailPass"], From: s.Config["mailFrom"], To: s.Config["mailTo"], Title: s.Config["mailTitle"], Type: "", } if mailConfig.Title == "" { mailConfig.Title = "9466代码机器人" } mailConfig.Body = "autoencode is locked, please check! " + time.Now().Format("2006-01-02 15:04:05") + "\r\n\r\n" + msg.(string) err := util.SendMail(mailConfig) if err != nil { s.Logger.Println(mailConfig.Body) s.Logger.Println("autoencode warning send error: ", err.Error()) } // 关闭程序 s.Shutdown(msg.(string)) }
// 标记跳过的处理 func (s *GitEncoder) markBlank(rev int) (err error) { file := s.Config["commitDir"] + util.MARK_FILE if ok, _ := util.IsExist(file); !ok { // 创建 _, err = os.Create(file) if err != nil { return err } // 添加到svn // err = s.command.Add(s.Config["commitDir"], util.MARK_FILE) // if err != nil { // err = errors.New(util.MARK_FILE + " " + err.Error()) // return // } } // 更新 err = ioutil.WriteFile(file, []byte(strconv.Itoa(rev)+"\n"), 0644) return err }
// 发生错误,锁定程序并退出执行,哦,还要发邮件通知管理员 func (s *SvnEncoder) Fatal(msg interface{}) { // 创建锁定文件 if ok, _ := util.IsExist(s.Pwd + util.LOCKFILE); !ok { os.Create(s.Pwd + util.LOCKFILE) } }
func main() { var err error // 先设定工作目录 var dir string dir, err = util.GetDir() if err != nil { log.Fatalln("My God, GetDir Fatal!") } dir = path.Dir(dir) // 检测是否存在错误锁定 if ok, _ := util.IsExist(dir + util.LOCKFILE); ok { log.Fatalln("Sorry, encoder had locked, please check error!") } // 启动daemon模式 var isDaemon bool if len(os.Args) > 1 && os.Args[1] == "-d" { _, err = daemon.Daemon(1, 0) if err != nil { log.Fatalln(err) } isDaemon = true } // 加载配置文件 config := parseConfig(dir+CONFIG_FILE, dir) // 加载过滤列表 excludeList := parseExcludeList(dir + EXCLUDE_FILE) // 初始化日志 var logFileHandle *os.File if isDaemon { logFileHandle, err = os.OpenFile(config["logFile"], os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) defer logFileHandle.Close() if err != nil { log.Fatalln(err.Error()) } } else { logFileHandle = os.Stderr } logger := log.New(logFileHandle, "", log.Ldate|log.Ltime) var encoder client.Encoder if config["versionType"] == "git" { // GIT git := new(client.GitEncoder) git.Config = config git.ExcludeList = excludeList git.Pwd = dir git.Logger = logger encoder = git } else { // SVN svn := new(client.SvnEncoder) svn.Config = config svn.ExcludeList = excludeList svn.Pwd = dir svn.Logger = logger encoder = svn } // 开始工作啦 sign := make(chan bool) encoder.Info("autoencode starting...") go encoder.Run(sign) // 启动信号监听,等待所有Process都运行结束 trapSignal(encoder) <-sign // 停止工作 encoder.Info("autoencode stopped.") }