예제 #1
0
// 发生错误,锁定程序并退出执行,哦,还要发邮件通知管理员
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))
}
예제 #2
0
// 标记跳过的处理
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
}
예제 #3
0
// 发生错误,锁定程序并退出执行,哦,还要发邮件通知管理员
func (s *SvnEncoder) Fatal(msg interface{}) {
	// 创建锁定文件
	if ok, _ := util.IsExist(s.Pwd + util.LOCKFILE); !ok {
		os.Create(s.Pwd + util.LOCKFILE)
	}
}
예제 #4
0
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.")
}