#!/usr/bin/env ruby # Erik Kastner - git-r-up.rb # daemon to watch for changes in a directory and sync them to a directory under source control (like rails + git) # also adds and commits files to git (just git init in the FETCH_ROOT) require 'rubygems' require 'simple-daemon' require 'git' require 'syslog' PUBLIC_ROOT = "/u/apps/app/current/public" FETCH_ROOT = "/home/app/website" def log(msg); Syslog.open($0, Syslog::LOG_PID | Syslog::LOG_CONS) { |s| s.debug msg }; end class Watcher < SimpleDaemon::Base SimpleDaemon::WORKING_DIRECTORY = "/tmp/git-watcher" def self.start log "Starting Watcher" g = Git.open(FETCH_ROOT) loop do unless g.status.untracked.empty? && g.status.changed.empty? log "changed files" begin %x{cp -r #{FETCH_ROOT}/* #{PUBLIC_ROOT}} g.add g.commit("auto from watcher") rescue => e log e.inspect end sleep(7) # give git time to do it's thing end sleep(2) end end def self.end puts "Stopping Watcher" end end Watcher.daemonize