func main() { // Config config := parseConfig() isDaemon, err := config.GetBool("log", "daemon") logfile, err := config.GetString("log", "logfile") // Daemon if isDaemon { _, err := daemon.Daemon(1, 0) if err != nil { fmt.Println(err) os.Exit(1) } } // Log var logFileHandle *os.File if isDaemon { if logfile != "" { logFileHandle, err = os.OpenFile(logfile, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) } else { logFileHandle, err = os.OpenFile("/dev/null", 0, 0) } } else { logFileHandle = os.Stderr } defer logFileHandle.Close() if err != nil { log.Fatalln(err.Error()) } mon.logger = log.New(logFileHandle, "", log.Ldate|log.Ltime) // Watch initWatcher() }
func main() { var err error // 先设定工作目录 var dir string dir, err = util.GetDir() if err != nil { log.Fatalln("My God, GetDir Fatal!") } acs := new(ACST) acs.Pwd = dir // 检测是否存在错误锁定 if ok, _ := util.IsExist(acs.Pwd + util.ACS_LOCKFILE); ok { log.Fatalln("Sorry, acs had locked, please check error!") } // 启动daemon模式 if len(os.Args) > 1 && os.Args[1] == "-d" { _, err = daemon.Daemon(1, 0) if err != nil { log.Fatalln(err) } } // 加载配置文件 var conFile string conFile = "/conf/acs.conf" acs.parseConfig(acs.Pwd + conFile) // 加载过滤列表 conFile = "/conf/exclude.conf" acs.parseExcludeList(acs.Pwd + conFile) // 初始化日志 logFileHandle, err := os.OpenFile(acs.Config["logFile"], os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) defer logFileHandle.Close() if err != nil { log.Fatalln(err.Error()) } acs.Logger = log.New(logFileHandle, "", log.Ldate|log.Ltime) // 判断工作目录是否存在,如果不存在则创建 if ok, err := util.IsExist(acs.Config["checkoutDir"]); !ok { err = os.Mkdir(acs.Config["checkoutDir"], 0777) if err != nil { log.Fatalln("checkoutDir create error: " + err.Error()) } } if ok, err := util.IsExist(acs.Config["commitDir"]); !ok { err = os.Mkdir(acs.Config["commitDir"], 0777) if err != nil { log.Fatalln("commitDir create error: " + err.Error()) } } // 初始化SVN结构 acs.svn = new(util.SVNT) acs.svn.Bin = acs.Config["svnBin"] // 初始化SVN目录 if ok, err := util.IsExist(acs.Config["checkoutDir"] + ".svn"); !ok { err = acs.svn.Checkout(acs.Config["checkoutDir"], acs.Config["svnReposCheckout"], 0) if err != nil { log.Fatalln("checkoutDir init svn error: " + err.Error()) } } if ok, err := util.IsExist(acs.Config["commitDir"] + ".svn"); !ok { err = acs.svn.Checkout(acs.Config["commitDir"], acs.Config["svnReposCommit"], 0) if err != nil { log.Fatalln("commitDir init svn error: " + err.Error()) } } // 检查错误是否已经被修正 if ok, err := acs.svn.Status(acs.Config["commitDir"]); ok { log.Fatalln("oh! there's some error need you check, to be use [svn status] error: " + err.Error()) } // 获取当前的工作的SVN版本 var svnInfo = new(util.SvnInfo) svnInfo, err = acs.svn.Info(acs.Config["checkoutDir"]) if err != nil { log.Fatalln("checkoutDir init svn info error: " + err.Error()) } acs.CheckoutRev = svnInfo.Rev svnInfo, err = acs.svn.Info(acs.Config["commitDir"]) if err != nil { log.Fatalln("commitDir init svn info error: " + err.Error()) } acs.CommitRev = svnInfo.Rev // 开始工作啦 for { time.Sleep(time.Second) acs.run() } }
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.") }