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.") }