#!/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