module Octokit class Client module Objects # Get a single tree, fetching information about its root-level objects # # Pass :recursive => true in options to fetch information about all of the tree's objects, including those in subdirectories. # # @param repo [String, Hash, Repository] A GitHub repository # @param tree_sha [String] The SHA of the tree to fetch # @return [Hashie::Mash] A hash representing the fetched tree # @see http://developer.github.com/v3/git/trees/ # @example Fetch a tree and inspect the path of one of its files # tree = Octokit.tree("octocat/Hello-World", "9fb037999f264ba9a7fc6274d15fa3ae2ab98312") # tree.tree.first.path # => "file.rb" # @example Fetch a tree recursively # tree = Octokit.tree("octocat/Hello-World", "fc6274d15fa3ae2ab983129fb037999f264ba9a7") # tree.tree.first.path # => "subdir/file.txt" def tree(repo, tree_sha, options={}) get("repos/#{Repository.new(repo)}/git/trees/#{tree_sha}", options) end # Create a tree # # Pass :base_tree => "827efc6..." in options to update an existing tree with new data. # # @param repo [String, Hash, Repository] A GitHub repository # @param tree [Array] An array of hashes representing a tree structure # @return [Hashie::Mash] A hash representing the new tree # @see http://developer.github.com/v3/git/trees/ # @example Create a tree containing one file # tree = Octokit.create_tree("octocat/Hello-World", [ { :path => "file.rb", :mode => "100644", :type => "blob", :sha => "44b4fc6d56897b048c772eb4087f854f46256132" } ]) # tree.sha # => "cd8274d15fa3ae2ab983129fb037999f264ba9a7" # tree.tree.first.path # => "file.rb" def create_tree(repo, tree, options={}) parameters = { :tree => tree } post("repos/#{Repository.new(repo)}/git/trees", options.merge(parameters), 3) end # Get a single blob, fetching its content and encoding # # @param repo [String, Hash, Repository] A GitHub repository # @param blob_sha [String] The SHA of the blob to fetch # @return [Hashie::Mash] A hash representing the fetched blob # @see http://developer.github.com/v3/git/blobs/ # @example Fetch a blob and inspect its contents # blob = Octokit.blob("octocat/Hello-World", "827efc6d56897b048c772eb4087f854f46256132") # blob.encoding # => "utf-8" # blob.content # => "Foo bar baz" # @example Fetch a base64-encoded blob and inspect its contents # require "base64" # blob = Octokit.blob("octocat/Hello-World", "827efc6d56897b048c772eb4087f854f46256132") # blob.encoding # => "base64" # blob.content # => "Rm9vIGJhciBiYXo=" # Base64.decode64(blob.content) # => "Foo bar baz" def blob(repo, blob_sha, options={}) get("repos/#{Repository.new(repo)}/git/blobs/#{blob_sha}", options) end # Create a blob # # @param repo [String, Hash, Repository] A GitHub repository # @param content [String] Content of the blob # @param encoding [String] The content's encoding. utf-8 and base64 are accepted. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it # @return [String] The new blob's SHA, e.g. 827efc6d56897b048c772eb4087f854f46256132 # @see http://developer.github.com/v3/git/blobs/ # @example Create a blob containing foo bar baz # Octokit.create_blob("octocat/Hello-World", "foo bar baz") # @example Create a blob containing foo bar baz, encoded using base64 # require "base64" # Octokit.create_blob("octocat/Hello-World", Base64.encode64("foo bar baz"), "base64") def create_blob(repo, content, encoding="utf-8", options={}) parameters = { :content => content, :encoding => encoding } post("repos/#{Repository.new(repo)}/git/blobs", options.merge(parameters), 3).sha end # Get a tag # # @param repo [String, Hash, Repository] A GitHub repository. # @param tag_sha [String] The SHA of the tag to fetch. # @return [Hashie::Mash] Hash representing the tag. # @see http://developer.github.com/v3/git/tags/#get-a-tag # @example Fetch a tag # Octokit.tag('pengwynn/octokit', '23aad20633f4d2981b1c7209a800db3014774e96') def tag(repo, tag_sha, options={}) get("repos/#{Repository.new repo}/git/tags/#{tag_sha}", options, 3) end # Create a tag # # Requires authenticated client. # # @param repo [String, Hash, Repository] A GitHub repository. # @param tag [String] Tag string. # @param message [String] Tag message. # @param object_sha [String] SHA of the git object this is tagging. # @param type [String] Type of the object we're tagging. Normally this is # a `commit` but it can also be a `tree` or a `blob`. # @param tagger_name [String] Name of the author of the tag. # @param tagger_email [String] Email of the author of the tag. # @param tagger_date [string] Timestamp of when this object was tagged. # @return [Hashie::Mash] Hash representing new tag. # @see Octokit::Client # @see http://developer.github.com/v3/git/tags/#create-a-tag-object # @example # @client.create_tag( # "pengwynn/octokit", # "v9000.0.0", # "Version 9000\n", # "f4cdf6eb734f32343ce3f27670c17b35f54fd82e", # "commit", # "Wynn Netherland", # "wynn.netherland@gmail.com", # "2012-06-03T17:03:11-07:00" # ) def create_tag(repo, tag, message, object_sha, type, tagger_name, tagger_email, tagger_date, options={}) options.merge!( :tag => tag, :message => message, :object => object_sha, :type => type, :tagger => { :name => tagger_name, :email => tagger_email, :date => tagger_date } ) post("repos/#{Repository.new repo}/git/tags", options, 3) end end end end