class P4Marshal def initialize(*args) keys = args[0] @p4opts = "" @p4binary = "p4" @debug = false if keys != nil @p4opts << "-p #{keys['p4port']} " if keys["p4port"] != nil @p4opts << "-u #{keys['p4user']} " if keys["p4user"] != nil @p4opts << "-c #{keys['p4client']} " if keys["p4client"] != nil @p4binary = keys['p4binary'] if keys["p4binary"] != nil @debug = keys['debug'] if keys["debug"] != nil end @p4cmd = "#{@p4binary} -R #{@p4opts}" end def run(*args) newargs = args.flatten.join(" ") ret = Array.new str = "#{@p4cmd} #{newargs}" puts "debug: p4cmd = \"#{str}\"" if @debug fd = IO.popen(str, "r") loop do begin ret << Marshal.load(fd) rescue EOFError: break end end fd.close ret end end # # Example: # r = P4Marshal.new("p4port" => "public.perforce.com:1666") # records = r.run("files", "//guest/jeff_bowles/scripts/...") # records.each { |d| # puts d["depotFile"] + "#" + d["rev"] # }