コード例 #1
0
ファイル: main.go プロジェクト: safeie/autoencode-git
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.")
}