require "revision" class Mercurial def initialize(parser = MercurialLogParser.new) @parser = parser end def checkout(target_directory, revision = nil) end def latest_revision(project) Dir.chdir(project.local_checkout) do self.execute(self.pull_command) @parser.parse_log(execute(self.log_command("tip"))).first end end def revisions_since(project, revision_number) Dir.chdir(project.local_checkout) do self.execute(self.pull_command) revs = @parser.parse_log(self.execute(self.log_command(revision_number))) revs.delete_if do |rev| rev.number == revision_number end revs end end def update(project, revision) Dir.chdir(project.local_checkout) do self.execute(self.pull_command) self.execute(self.update_command(revision)) end end def pull_command "hg pull" end def update_command(revision=nil) command = "hg update" command << " #{revision.number}" unless revision.nil? command end def log_command(revision_number="tip") "hg log -v -r tip:#{revision_number}" end protected def execute(command) `#{command}` end end