lib/inch/api/diff.rb in inch-0.7.0 vs lib/inch/api/diff.rb in inch-0.7.1

- old
+ new

@@ -5,10 +5,12 @@ # Returns a Compare::Codebases object for two revisions of the same # codebase class Diff include Utils::ShellHelper + GIT_SUBDIR = ".git" + attr_reader :codebase_old attr_reader :codebase_new attr_reader :comparer attr_reader :work_dir @@ -16,37 +18,45 @@ # @param before_rev [String] the 'before' revision # @param after_rev [String,nil] the 'after' revision that the 'before' # one is compared against def initialize(dir, config, before_rev, after_rev = nil) @work_dir = dir - @codebase_old = codebase_for(before_rev, config) - @codebase_new = if after_rev.nil? - Codebase.parse(work_dir, config) - else - codebase_for(after_rev, config) - end - @comparer = API::Compare::Codebases.new(@codebase_old, @codebase_new) + if @codebase_old = codebase_for(before_rev, config) + @codebase_new = if after_rev.nil? + Codebase.parse(work_dir, config) + else + codebase_for(after_rev, config) + end + @comparer = API::Compare::Codebases.new(@codebase_old, @codebase_new) + end end + def failed? + @comparer.nil? + end + private def codebase_for(revision, config) if (cached = codebase_from_cache(revision)) cached else - codebase = codebase_from_copy(work_dir, config, revision) - filename = Codebase::Serializer.filename(revision) - Codebase::Serializer.save(codebase, filename) - codebase + if codebase = codebase_from_copy(work_dir, config, revision) + filename = Codebase::Serializer.filename(revision) + Codebase::Serializer.save(codebase, filename) + codebase + end end end def codebase_from_cache(revision) filename = Codebase::Serializer.filename(revision) Codebase::Serializer.load(filename) if File.exist?(filename) end def codebase_from_copy(original_dir, config, revision) + return unless File.exist?( File.join(original_dir, GIT_SUBDIR) ) + codebase = nil Dir.mktmpdir do |tmp_dir| new_dir = copy_work_dir(original_dir, tmp_dir) git_reset(new_dir, revision) codebase = Codebase.parse(new_dir, config)