1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/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'

PUBLIC_ROOT = "/path/to/rails/project/current/public"
FETCH_ROOT = "/home/myuser/website"

class Watcher < SimpleDaemon::Base
  SimpleDaemon::WORKING_DIRECTORY = "/tmp/git-watcher"
  def self.start
    puts "Starting Watcher"
    g = Git.open(FETCH_ROOT)
    loop do
      unless g.status.untracked.empty? && g.status.changed.empty?
        %x{cp -r #{FETCH_ROOT}/* #{PUBLIC_ROOT}}
        g.add
        g.commit_all("auto from watcher")
      end
    end
  end
  
  def self.end
    puts "Stopping Watcher"
  end
end

Watcher.daemonize