Class | RSCM::Monotone |
In: |
lib/rscm/scm/monotone.rb
|
Parent: | Base |
branch | [RW] | |
db_file | [RW] | |
key | [RW] | |
keys_file | [RW] | |
passphrase | [RW] | |
server | [RW] |
# File lib/rscm/scm/monotone.rb, line 14 14: def initialize(branch=nil, key=nil, passphrase=nil, keys_file=nil, server=nil, central_checkout_dir=nil) 15: @branch = branch 16: @key = key 17: @passphrase = passphrase 18: @keys_file = keys_file 19: @server = server 20: @central_checkout_dir = File.expand_path(central_checkout_dir) unless central_checkout_dir.nil? 21: end
# File lib/rscm/scm/monotone.rb, line 23 23: def add(relative_filename) 24: db = db(@checkout_dir) 25: with_working_dir(@checkout_dir) do 26: monotone("add #{relative_filename}", db) 27: end 28: end
# File lib/rscm/scm/monotone.rb, line 37 37: def can_create_central? 38: @server == "localhost" && !@central_checkout_dir.nil? 39: end
# File lib/rscm/scm/monotone.rb, line 41 41: def central_exists? 42: @central_checkout_dir && @serve_pid 43: end
# File lib/rscm/scm/monotone.rb, line 108 108: def checked_out? 109: mt = File.expand_path("#{@checkout_dir}/MT") 110: File.exists?(mt) 111: end
# File lib/rscm/scm/monotone.rb, line 134 134: def commit(message) 135: commit_in_dir(message, @checkout_dir) 136: with_working_dir(@checkout_dir) do 137: monotone("push #{@server} #{@branch}") do |io| 138: io.puts(@passphrase) 139: io.close_write 140: io.read 141: end 142: end 143: end
# File lib/rscm/scm/monotone.rb, line 45 45: def create_central 46: init(@central_checkout_dir) 47: # create empty working copy 48: dir = PathConverter.filepath_to_nativepath(@central_checkout_dir, false) 49: # set up a working copy 50: monotone("setup #{dir}") 51: start_serve 52: end
# File lib/rscm/scm/monotone.rb, line 89 89: def destroy_central 90: stop_serve 91: FileUtils.rm_rf(@central_checkout_dir) if File.exist?(@central_checkout_dir) 92: FileUtils.rm(db(@central_checkout_dir)) if File.exist?(db(@central_checkout_dir)) 93: puts "Destroyed Monotone server" 94: end
# File lib/rscm/scm/monotone.rb, line 174 174: def diff(change, &block) 175: checkout(change.revision) 176: with_working_dir(@checkout_dir) do 177: monotone("diff --revision=#{change.previous_native_revision_identifier} #{change.path}") do |stdout| 178: yield stdout 179: end 180: end 181: end
# File lib/rscm/scm/monotone.rb, line 100 100: def import_central(dir, message) 101: FileUtils.cp_r(Dir["#{dir}/*"], @central_checkout_dir) 102: with_working_dir(@central_checkout_dir) do 103: monotone("add .") 104: commit_in_dir(message, @central_checkout_dir) 105: end 106: end
www.venge.net/monotone/monotone.html#Hook-Reference
# File lib/rscm/scm/monotone.rb, line 154 154: def install_trigger(trigger_command, install_dir) 155: stop_serve 156: if (WINDOWS) 157: install_win_trigger(trigger_comand, install_dir) 158: else 159: install_unix_trigger(trigger_command, install_dir) 160: end 161: start_serve 162: end
# File lib/rscm/scm/monotone.rb, line 30 30: def move(relative_src, relative_dest) 31: with_working_dir(@checkout_dir) do 32: monotone("rename #{relative_src} #{relative_dest}", db) 33: FileUtils.mv(relative_src, relative_dest) 34: end 35: end
# File lib/rscm/scm/monotone.rb, line 124 124: def revisions(from_identifier, to_identifier=Time.infinity) 125: checkout(to_identifier) 126: to_identifier = Time.infinity if to_identifier.nil? 127: with_working_dir(checkout_dir) do 128: monotone("log") do |stdout| 129: MonotoneLogParser.new.parse_revisions(stdout, from_identifier, to_identifier) 130: end 131: end 132: end
# File lib/rscm/scm/monotone.rb, line 54 54: def start_serve 55: mode = File::CREAT|File::WRONLY 56: if File.exist?(rcfile) 57: mode = File::APPEND|File::WRONLY 58: end 59: 60: begin 61: File.open(rcfile, mode) do |file| 62: file.puts("function get_netsync_anonymous_read_permitted(collection)") 63: file.puts(" return true") 64: file.puts("end") 65: end 66: rescue => e 67: puts e.message 68: puts e.backtrace.join("\n") 69: raise "Didn't have permission to write to #{rcfile}." 70: end 71: 72: @serve_pid = fork do 73: #Signal.trap("HUP") { puts "Monotone server shutting down..."; exit } 74: monotone("serve --rcfile=\"#{rcfile}\" #{@server} #{@branch}", db(@central_checkout_dir)) do |io| 75: puts "PASSPHRASE: #{@passphrase}" 76: io.puts(@passphrase) 77: io.close_write 78: end 79: end 80: Process.detach(@serve_pid) 81: end
# File lib/rscm/scm/monotone.rb, line 83 83: def stop_serve 84: Process.kill("HUP", @serve_pid) if @serve_pid 85: Process.waitpid2(@serve_pid) if @serve_pid 86: @serve_pid = nil 87: end
# File lib/rscm/scm/monotone.rb, line 164 164: def trigger_installed?(trigger_command, install_dir) 165: File.exist?(rcfile) 166: end
# File lib/rscm/scm/monotone.rb, line 168 168: def uninstall_trigger(trigger_command, install_dir) 169: stop_serve 170: File.delete(rcfile) 171: start_serve 172: end
# File lib/rscm/scm/monotone.rb, line 113 113: def uptodate?(identifier=nil) 114: if (!checked_out?) 115: false 116: else 117: pull 118: 119: rev = identifier ? identifier : head_revision 120: local_revision == rev 121: end 122: end
Checks out silently. Called by superclass’ checkout.
# File lib/rscm/scm/monotone.rb, line 186 186: def checkout_silent(to_identifier) 187: # raise "Monotone doesn't support checkout to time. Please use identifiers instead." if to_identifier.is_a?(Time) 188: db_file = db(@checkout_dir) 189: if(!File.exist?(db_file)) 190: init(@checkout_dir) 191: end 192: 193: pull 194: checked_out = checked_out? 195: 196: with_working_dir(@checkout_dir) do 197: monotone("checkout .", db_file, @branch) unless checked_out 198: 199: selector = expand_selector(to_identifier) 200: monotone("update #{selector}", db_file) 201: end 202: end