Sha256: e283d59f86a54f8393e54c02569d44e02029af74f2a869e30bb0585e4d480785

Contents?: true

Size: 1.21 KB

Versions: 18

Compression:

Stored size: 1.21 KB

Contents

module Mercurial
  
  class ChangedFileFactory
    
    FILE_COPY_SEPARATOR = '->'
    
    def self.new_from_hg(str)
      if str.include?(FILE_COPY_SEPARATOR)
        copied_file = str.split(FILE_COPY_SEPARATOR)
        initial_name = copied_file.first[2..-1]
        name = copied_file[1]
      else
        initial_name = nil
        name = str[2..-1]
      end

      Mercurial::ChangedFile.new(
        :initial_name => initial_name,
        :name         => name,
        :mode         => str[0..0]
      )
    end
    
    def self.delete_hg_artefacts(files)
      #
      # For unknown reason Mercurial post duplicated 
      # entries for moved and copied files. First as
      # a pair of A and D operations, then as C.
      #
      files.reverse.each do |file|
        if file.copied?
          add = files.find{|f| f.added? && f.name == file.name}
          delete = files.find{|f| f.deleted? && f.name == file.initial_name}

          if add && delete
            file.mode_letter = 'R'
            files.delete_at(files.index(add))
            files.delete_at(files.index(delete))

          elsif add
            files.delete_at(files.index(add))
          end
        end
      end
      files
    end
    
  end
  
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
mercurial-ruby-0.7.12 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.11 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.10 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.9 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.8 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.7 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.6 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.5 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.4 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.3 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.2 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.1 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.7.0 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.6.1 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.6.0 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.5.0 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.4.0 lib/mercurial-ruby/factories/changed_file_factory.rb
mercurial-ruby-0.3.0 lib/mercurial-ruby/factories/changed_file_factory.rb