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.

The tagger identity is a nested AuthorInfo. Its date is a Time parsed from git's strict ISO 8601 output, not an ISO 8601 string.

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: Git::AuthorInfo.new(
    name: 'John Doe',
    email: '[email protected]',
    date: Time.iso8601('2024-01-15T10:30:00-08:00')
  ),
  message: 'Release version 1.0.0'
)
info.annotated?   #=> true
info.tagger.name  #=> 'John Doe'
info.tagger.date  #=> 2024-01-15 10:30:00 -0800

Lightweight tag

info = Git::TagInfo.new(
  name: 'v1.0.0',
  oid: nil,                   # no tag object exists
  target_oid: 'def456abc789', # commit ID
  objecttype: 'commit',
  tagger: 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



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/git/tag_info.rb', line 88

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger, :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
end

#nameString (readonly)

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

Returns:

  • (String)

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



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/git/tag_info.rb', line 88

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger, :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
end

#objecttypeString (readonly)

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

Returns:

  • (String)

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



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/git/tag_info.rb', line 88

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger, :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
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



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/git/tag_info.rb', line 88

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger, :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
end

#taggerGit::AuthorInfo? (readonly)

The identity of the person who created the tag object.

Lightweight tags have no tag object and therefore no tagger. The nested email has no angle brackets and the nested date is a Time.

Returns:



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/git/tag_info.rb', line 88

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger, :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
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



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/git/tag_info.rb', line 88

TagInfo = Data.define(:name, :oid, :target_oid, :objecttype, :tagger, :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
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)



90
91
92
# File 'lib/git/tag_info.rb', line 90

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)



95
96
97
# File 'lib/git/tag_info.rb', line 95

def lightweight?
  oid.nil?
end