Class: MetaCommit::Message::Commands::DiffIndexExaminer
- Inherits:
-
Object
- Object
- MetaCommit::Message::Commands::DiffIndexExaminer
- Defined in:
- lib/meta_commit/message/commands/diff_index_examiner.rb
Instance Method Summary collapse
-
#index_meta(repo) ⇒ Array<MetaCommit::Contracts::Diff>
Creates diff objects with meta information of changes in index staged files.
-
#initialize(parse_command, ast_path_factory, diff_factory) ⇒ DiffIndexExaminer
constructor
A new instance of DiffIndexExaminer.
Constructor Details
#initialize(parse_command, ast_path_factory, diff_factory) ⇒ DiffIndexExaminer
Returns a new instance of DiffIndexExaminer.
7 8 9 10 11 |
# File 'lib/meta_commit/message/commands/diff_index_examiner.rb', line 7 def initialize(parse_command, ast_path_factory, diff_factory) @parse_command = parse_command @ast_path_factory = ast_path_factory @diff_factory = diff_factory end |
Instance Method Details
#index_meta(repo) ⇒ Array<MetaCommit::Contracts::Diff>
Creates diff objects with meta information of changes in index staged files
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/meta_commit/message/commands/diff_index_examiner.rb', line 16 def (repo) diffs = MetaCommit::Models::Changes::Commit.new(repo.last_commit_oid, 'staged') repo.index_diff_with_optimized_lines do |old_file_path, new_file_path, patch, line| commit_id_old = repo.last_commit_oid commit_id_new = 'staged' old_file_content = repo.get_blob_at(commit_id_old, old_file_path, '') new_file_content = repo.get_content_of(new_file_path, '') old_file_ast = @parse_command.execute(old_file_path, old_file_content) next if old_file_ast.nil? new_file_ast = @parse_command.execute(new_file_path, new_file_content) next if new_file_ast.nil? column_where_changes_start = line.compute_column(old_file_content, new_file_content) old_file_deleted = (patch.delta.new_file[:oid] == MetaCommit::Git::Repo::FILE_NOT_EXISTS_OID) old_line_number = (old_file_deleted) ? (MetaCommit::Factories::ContextualAstNodeFactory::WHOLE_FILE) : (line.old_lineno) old_contextual_ast = @ast_path_factory.create_contextual_node(old_file_ast, old_line_number) new_file_created = (patch.delta.old_file[:oid] == MetaCommit::Git::Repo::FILE_NOT_EXISTS_OID) new_line_number = (new_file_created) ? (MetaCommit::Factories::ContextualAstNodeFactory::WHOLE_FILE) : (line.new_lineno) new_contextual_ast = @ast_path_factory.create_contextual_node(new_file_ast, new_line_number) created_diff = @diff_factory.create_diff({ :line => line, :column => column_where_changes_start, :commit_id_old => commit_id_old, :commit_id_new => commit_id_new, :old_contextual_ast => old_contextual_ast, :new_contextual_ast => new_contextual_ast, :old_file_path => old_file_path, :new_file_path => new_file_path, }) diffs.push(created_diff) unless created_diff.nil? end diffs end |