Class: Git::TagInfo

Inherits:
Data
  • Object
show all
Defined in:
lib/git/tag_info.rb

Overview

Value object representing tag metadata from git tag output

This is a lightweight, immutable data structure returned by tag listing commands. It contains only the data parsed from git output without any repository context or operations.

Examples:

Annotated tag

info = Git::TagInfo.new(
  name: 'v1.0.0',
  oid: 'abc123def456',        # tag object's ID
  target_oid: 'def456abc789', # commit it points to
  objecttype: 'tag',
  tagger_name: 'John Doe',
  tagger_email: '<john@example.com>',
  tagger_date: '2024-01-15T10:30:00-08:00',
  message: 'Release version 1.0.0'
)
info.annotated?   #=> true
info.tagger.name  #=> 'John Doe'

Lightweight tag

info = Git::TagInfo.new(
  name: 'v1.0.0',
  oid: nil,                   # no tag object exists
  target_oid: 'def456abc789', # commit ID
  objecttype: 'commit',
  tagger_name: nil,
  tagger_email: nil,
  tagger_date: nil,
  message: nil
)
info.lightweight?  #=> true
info.tagger        #=> nil

See Also:

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#messageString? (readonly)

Returns the tag message, or nil for lightweight tags.

Returns:

  • (String, nil)

    the tag message, or nil for lightweight tags



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/git/tag_info.rb', line 80

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger_name, :tagger_email, :tagger_date, :message) do
  # @return [Boolean] true if this is an annotated tag (oid is present)
  def annotated?
    !oid.nil?
  end

  # @return [Boolean] true if this is a lightweight tag (oid is nil)
  def lightweight?
    oid.nil?
  end

  # Return the tagger as an Author object
  #
  # @return [Git::Author, nil] the tagger as an Author object, or nil for lightweight tags
  def tagger
    return nil unless annotated? && tagger_name && tagger_email

    # Git::Author expects format "Name <email> timestamp timezone"
    # We construct a minimal format that will parse correctly
    author = Git::Author.new('')
    author.name = tagger_name
    # Remove angle brackets if present
    author.email = tagger_email.gsub(/\A<|>\z/, '')
    author
  end
end

#nameString (readonly)

Returns the tag name (e.g., 'v1.0.0').

Returns:

  • (String)

    the tag name (e.g., 'v1.0.0')



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/git/tag_info.rb', line 80

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger_name, :tagger_email, :tagger_date, :message) do
  # @return [Boolean] true if this is an annotated tag (oid is present)
  def annotated?
    !oid.nil?
  end

  # @return [Boolean] true if this is a lightweight tag (oid is nil)
  def lightweight?
    oid.nil?
  end

  # Return the tagger as an Author object
  #
  # @return [Git::Author, nil] the tagger as an Author object, or nil for lightweight tags
  def tagger
    return nil unless annotated? && tagger_name && tagger_email

    # Git::Author expects format "Name <email> timestamp timezone"
    # We construct a minimal format that will parse correctly
    author = Git::Author.new('')
    author.name = tagger_name
    # Remove angle brackets if present
    author.email = tagger_email.gsub(/\A<|>\z/, '')
    author
  end
end

#objecttypeString (readonly)

Returns 'tag' for annotated tags, 'commit' for lightweight tags.

Returns:

  • (String)

    'tag' for annotated tags, 'commit' for lightweight tags



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/git/tag_info.rb', line 80

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger_name, :tagger_email, :tagger_date, :message) do
  # @return [Boolean] true if this is an annotated tag (oid is present)
  def annotated?
    !oid.nil?
  end

  # @return [Boolean] true if this is a lightweight tag (oid is nil)
  def lightweight?
    oid.nil?
  end

  # Return the tagger as an Author object
  #
  # @return [Git::Author, nil] the tagger as an Author object, or nil for lightweight tags
  def tagger
    return nil unless annotated? && tagger_name && tagger_email

    # Git::Author expects format "Name <email> timestamp timezone"
    # We construct a minimal format that will parse correctly
    author = Git::Author.new('')
    author.name = tagger_name
    # Remove angle brackets if present
    author.email = tagger_email.gsub(/\A<|>\z/, '')
    author
  end
end

#oidString? (readonly)

The object ID of the tag object itself.

For annotated tags, this is the tag object's ID. For lightweight tags, this is nil because lightweight tags are not objects in the git database.

Returns:

  • (String, nil)

    the tag object's ID, or nil for lightweight tags



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/git/tag_info.rb', line 80

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger_name, :tagger_email, :tagger_date, :message) do
  # @return [Boolean] true if this is an annotated tag (oid is present)
  def annotated?
    !oid.nil?
  end

  # @return [Boolean] true if this is a lightweight tag (oid is nil)
  def lightweight?
    oid.nil?
  end

  # Return the tagger as an Author object
  #
  # @return [Git::Author, nil] the tagger as an Author object, or nil for lightweight tags
  def tagger
    return nil unless annotated? && tagger_name && tagger_email

    # Git::Author expects format "Name <email> timestamp timezone"
    # We construct a minimal format that will parse correctly
    author = Git::Author.new('')
    author.name = tagger_name
    # Remove angle brackets if present
    author.email = tagger_email.gsub(/\A<|>\z/, '')
    author
  end
end

#tagger_dateString? (readonly)

Returns the tag date in ISO 8601 format, or nil for lightweight tags.

Returns:

  • (String, nil)

    the tag date in ISO 8601 format, or nil for lightweight tags



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/git/tag_info.rb', line 80

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger_name, :tagger_email, :tagger_date, :message) do
  # @return [Boolean] true if this is an annotated tag (oid is present)
  def annotated?
    !oid.nil?
  end

  # @return [Boolean] true if this is a lightweight tag (oid is nil)
  def lightweight?
    oid.nil?
  end

  # Return the tagger as an Author object
  #
  # @return [Git::Author, nil] the tagger as an Author object, or nil for lightweight tags
  def tagger
    return nil unless annotated? && tagger_name && tagger_email

    # Git::Author expects format "Name <email> timestamp timezone"
    # We construct a minimal format that will parse correctly
    author = Git::Author.new('')
    author.name = tagger_name
    # Remove angle brackets if present
    author.email = tagger_email.gsub(/\A<|>\z/, '')
    author
  end
end

#tagger_emailString? (readonly)

Returns the tagger's email, or nil for lightweight tags.

Returns:

  • (String, nil)

    the tagger's email, or nil for lightweight tags



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/git/tag_info.rb', line 80

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger_name, :tagger_email, :tagger_date, :message) do
  # @return [Boolean] true if this is an annotated tag (oid is present)
  def annotated?
    !oid.nil?
  end

  # @return [Boolean] true if this is a lightweight tag (oid is nil)
  def lightweight?
    oid.nil?
  end

  # Return the tagger as an Author object
  #
  # @return [Git::Author, nil] the tagger as an Author object, or nil for lightweight tags
  def tagger
    return nil unless annotated? && tagger_name && tagger_email

    # Git::Author expects format "Name <email> timestamp timezone"
    # We construct a minimal format that will parse correctly
    author = Git::Author.new('')
    author.name = tagger_name
    # Remove angle brackets if present
    author.email = tagger_email.gsub(/\A<|>\z/, '')
    author
  end
end

#tagger_nameString? (readonly)

Returns the tagger's name, or nil for lightweight tags.

Returns:

  • (String, nil)

    the tagger's name, or nil for lightweight tags



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/git/tag_info.rb', line 80

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger_name, :tagger_email, :tagger_date, :message) do
  # @return [Boolean] true if this is an annotated tag (oid is present)
  def annotated?
    !oid.nil?
  end

  # @return [Boolean] true if this is a lightweight tag (oid is nil)
  def lightweight?
    oid.nil?
  end

  # Return the tagger as an Author object
  #
  # @return [Git::Author, nil] the tagger as an Author object, or nil for lightweight tags
  def tagger
    return nil unless annotated? && tagger_name && tagger_email

    # Git::Author expects format "Name <email> timestamp timezone"
    # We construct a minimal format that will parse correctly
    author = Git::Author.new('')
    author.name = tagger_name
    # Remove angle brackets if present
    author.email = tagger_email.gsub(/\A<|>\z/, '')
    author
  end
end

#target_oidString (readonly)

The object ID of the commit this tag ultimately points to.

For both annotated and lightweight tags, this is the commit ID that the tag resolves to (i.e., the dereferenced target).

Returns:

  • (String)

    the commit ID this tag points to



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/git/tag_info.rb', line 80

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger_name, :tagger_email, :tagger_date, :message) do
  # @return [Boolean] true if this is an annotated tag (oid is present)
  def annotated?
    !oid.nil?
  end

  # @return [Boolean] true if this is a lightweight tag (oid is nil)
  def lightweight?
    oid.nil?
  end

  # Return the tagger as an Author object
  #
  # @return [Git::Author, nil] the tagger as an Author object, or nil for lightweight tags
  def tagger
    return nil unless annotated? && tagger_name && tagger_email

    # Git::Author expects format "Name <email> timestamp timezone"
    # We construct a minimal format that will parse correctly
    author = Git::Author.new('')
    author.name = tagger_name
    # Remove angle brackets if present
    author.email = tagger_email.gsub(/\A<|>\z/, '')
    author
  end
end

Instance Method Details

#annotated?Boolean

Returns true if this is an annotated tag (oid is present).

Returns:

  • (Boolean)

    true if this is an annotated tag (oid is present)



82
83
84
# File 'lib/git/tag_info.rb', line 82

def annotated?
  !oid.nil?
end

#lightweight?Boolean

Returns true if this is a lightweight tag (oid is nil).

Returns:

  • (Boolean)

    true if this is a lightweight tag (oid is nil)



87
88
89
# File 'lib/git/tag_info.rb', line 87

def lightweight?
  oid.nil?
end

#taggerGit::Author?

Return the tagger as an Author object

Returns:

  • (Git::Author, nil)

    the tagger as an Author object, or nil for lightweight tags



94
95
96
97
98
99
100
101
102
103
104
# File 'lib/git/tag_info.rb', line 94

def tagger
  return nil unless annotated? && tagger_name && tagger_email

  # Git::Author expects format "Name <email> timestamp timezone"
  # We construct a minimal format that will parse correctly
  author = Git::Author.new('')
  author.name = tagger_name
  # Remove angle brackets if present
  author.email = tagger_email.gsub(/\A<|>\z/, '')
  author
end