49 lines
1.3 KiB
Ruby
49 lines
1.3 KiB
Ruby
module Gitlab
|
|
module Git
|
|
class Ref
|
|
include Gitlab::EncodingHelper
|
|
|
|
# Branch or tag name
|
|
# without "refs/tags|heads" prefix
|
|
attr_reader :name
|
|
|
|
# Target sha.
|
|
# Usually it is commit sha but in case
|
|
# when tag reference on other tag it can be tag sha
|
|
attr_reader :target
|
|
|
|
# Dereferenced target
|
|
# Commit object to which the Ref points to
|
|
attr_reader :dereferenced_target
|
|
|
|
# Extract branch name from full ref path
|
|
#
|
|
# Ex.
|
|
# Ref.extract_branch_name('refs/heads/master') #=> 'master'
|
|
def self.extract_branch_name(str)
|
|
str.gsub(/\Arefs\/heads\//, '')
|
|
end
|
|
|
|
def self.dereference_object(object)
|
|
object = object.target while object.is_a?(Rugged::Tag::Annotation)
|
|
|
|
object
|
|
end
|
|
|
|
def initialize(repository, name, target)
|
|
encode! name
|
|
@name = name.gsub(/\Arefs\/(tags|heads)\//, '')
|
|
@dereferenced_target = Gitlab::Git::Commit.find(repository, target)
|
|
@target = if target.respond_to?(:oid)
|
|
target.oid
|
|
elsif target.respond_to?(:name)
|
|
target.name
|
|
elsif target.is_a? String
|
|
target
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|