74 lines
1.6 KiB
Ruby
74 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Git
|
|
class WikiPushService
|
|
class Change
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
# @param [Wiki] wiki
|
|
# @param [Hash] change - must have keys `:oldrev` and `:newrev`
|
|
# @param [Gitlab::Git::RawDiffChange] raw_change
|
|
def initialize(wiki, change, raw_change)
|
|
@wiki = wiki
|
|
@raw_change = raw_change
|
|
@change = change
|
|
end
|
|
|
|
def page
|
|
strong_memoize(:page) { wiki.find_page(slug, revision) }
|
|
end
|
|
|
|
# See [Gitlab::Git::RawDiffChange#extract_operation] for the
|
|
# definition of the full range of operation values.
|
|
def event_action
|
|
case raw_change.operation
|
|
when :added
|
|
:created
|
|
when :deleted
|
|
:destroyed
|
|
else
|
|
:updated
|
|
end
|
|
end
|
|
|
|
def last_known_slug
|
|
strip_extension(raw_change.old_path || raw_change.new_path)
|
|
end
|
|
|
|
def sha
|
|
change[:newrev]
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :raw_change, :change, :wiki
|
|
|
|
def filename
|
|
return raw_change.old_path if deleted?
|
|
|
|
raw_change.new_path
|
|
end
|
|
|
|
def slug
|
|
strip_extension(filename)
|
|
end
|
|
|
|
def revision
|
|
return change[:oldrev] if deleted?
|
|
|
|
change[:newrev]
|
|
end
|
|
|
|
def deleted?
|
|
raw_change.operation == :deleted
|
|
end
|
|
|
|
def strip_extension(filename)
|
|
return unless filename
|
|
|
|
encoded_filename = Gitlab::EncodingHelper.encode_utf8(filename.dup)
|
|
File.basename(encoded_filename, File.extname(encoded_filename))
|
|
end
|
|
end
|
|
end
|
|
end
|