Class: Grit::Tag
- Extended by:
- Lazy
- Defined in:
- lib/grit/tag.rb,
lib/grit_ext/tag.rb
Instance Attribute Summary
Attributes inherited from Ref
Class Method Summary collapse
-
.create_tag_object(repo, hash, default_actor = nil) ⇒ Object
Writes a new tag object from a hash
repo
is a Grit repohash
is the hash of tag values. -
.parse_tag_data(data) ⇒ Object
Parses the results from ‘cat-file -p`.
Instance Method Summary collapse
Methods included from Lazy
Methods inherited from Ref
#commit, count_all, find_all, #initialize, #inspect
Constructor Details
This class inherits a constructor from Grit::Ref
Class Method Details
.create_tag_object(repo, hash, default_actor = nil) ⇒ Object
Writes a new tag object from a hash
+repo+ is a Grit repo
+hash+ is the hash of tag values
Returns a hash with sha
and size
of the created object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/grit/tag.rb', line 15 def self.create_tag_object(repo, hash, default_actor = nil) tagger = hash[:tagger] if !tagger tagger = default_actor ? default_actor : Actor.new("none", "none@none") tagger_date = Time.now else tagger_date = tagger[:date] ? Time.parse(tagger[:date]) : Time.now tagger = Actor.new(tagger[:name], tagger[:email]) end data = [] data << "object #{hash[:object]}" data << "type #{hash[:type]}" data << "tag #{hash[:tag]}" data << "tagger #{tagger.output(tagger_date)}" data << "" data << hash[:message] data = data.join("\n") sha = repo.git.put_raw_object(data, 'tag') { :sha => sha, :size => data.size } end |
.parse_tag_data(data) ⇒ Object
Parses the results from ‘cat-file -p`
data - String tag object data. Example:
object 7bcc0ee821cdd133d8a53e8e7173a334fef448aa
type commit
tag v0.7.0
tagger USER <EMAIL> DATE
v0.7.0
Returns parsed Hash. Example:
{:message => "...", :tagger => "bob", :tag_date => ...}
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/grit/tag.rb', line 48 def self.parse_tag_data(data) return unless data =~ /^object/ parsed = {} lines = data.split("\n") parsed[:object] = lines.shift.sub(/^object /, '') parsed[:type] = lines.shift.sub(/^type /, '') parsed[:tag] = lines.shift.sub(/^tag /, '') = lines.shift parsed[:tagger], parsed[:tag_date] = Commit.actor() if !parsed[:tagger] || !parsed[:tagger].name parsed[:tag_date] ||= Time.utc(1970) parsed[:tagger] = Actor.from_string(.sub(/^tagger /, '')) end lines.shift # blank line parsed[:message] = [] while lines.first && lines.first !~ /-----BEGIN PGP SIGNATURE-----/ parsed[:message] << lines.shift end parsed[:message] = parsed[:message] * "\n" parsed[:pgp] = [] while lines.first parsed[:pgp] << lines.shift end parsed[:pgp] = parsed[:pgp] * "\n" parsed end |
Instance Method Details
#get_commit ⇒ Object
90 91 92 93 94 |
# File 'lib/grit/tag.rb', line 90 def get_commit sha = @repo_ref.git.commit_from_sha(@commit_id) raise "Unknown object type." if sha == '' Commit.create(@repo_ref, :id => sha) end |
#lazy_source ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/grit/tag.rb', line 75 def lazy_source data = commit.repo.git.cat_ref({:p => true}, name) @message = commit. @tagger = commit. @tag_date = commit. return self if data.empty? if parsed = self.class.parse_tag_data(data) @message = parsed[:message] @tagger = parsed[:tagger] @tag_date = parsed[:tag_date] end self end |
#old_message ⇒ Object
4 |
# File 'lib/grit_ext/tag.rb', line 4 alias_method :old_message, :message |