Class: Gitlab::Diff::PositionTracer::FileStrategy
- Inherits:
-
BaseStrategy
- Object
- BaseStrategy
- Gitlab::Diff::PositionTracer::FileStrategy
- Defined in:
- lib/gitlab/diff/position_tracer/file_strategy.rb
Direct Known Subclasses
Instance Attribute Summary
Attributes inherited from BaseStrategy
Instance Method Summary collapse
Methods inherited from BaseStrategy
Constructor Details
This class inherits a constructor from Gitlab::Diff::PositionTracer::BaseStrategy
Instance Method Details
#trace(position) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/gitlab/diff/position_tracer/file_strategy.rb', line 7 def trace(position) a_path = position.old_path b_path = position.new_path # If file exists in B->D (e.g. updated, renamed, removed), let the # note become outdated. bd_diff = bd_diffs.diff_file_with_old_path(b_path) return { position: new_position(position, bd_diff), outdated: true } if bd_diff # If file still exists in the new diff, update the position. cd_diff = cd_diffs.diff_file_with_new_path(b_path) return { position: new_position(position, cd_diff), outdated: false } if cd_diff # If file exists in A->C (e.g. rebased and same changes were present # in target branch), let the note become outdated. ac_diff = ac_diffs.diff_file_with_old_path(a_path) return { position: new_position(position, ac_diff), outdated: true } if ac_diff # If ever there's a case that the file no longer exists in any diff, # don't set a change position and let the note become outdated. # # This should never happen given the file should exist in one of the # diffs above. { outdated: true } end |