# encoding: utf-8 module Github class GitData::Trees < API VALID_TREE_PARAM_NAMES = %w[ base_tree tree path mode type sha content url ].freeze VALID_TREE_PARAM_VALUES = { 'mode' => %w[ 100644 100755 040000 160000 120000 ], 'type' => %w[ blob tree commit ] } # Creates new GitData::Trees API def initialize(options = {}) super(options) end # Get a tree # # = Examples # github = Github.new # github.git_data.trees.get 'user-name', 'repo-name', 'sha' # github.git_data.trees.get 'user-name', 'repo-name', 'sha' do |file| # file.path # end # # Get a tree recursively # # = Examples # github = Github.new # github.git_data.trees.get 'user-name', 'repo-name', 'sha', 'recursive' => true # def get(user_name, repo_name, sha, params={}) set :user => user_name, :repo => repo_name assert_presence_of user, repo, sha normalize! params response = if params['recursive'] params['recursive'] = 1 get_request("/repos/#{user}/#{repo}/git/trees/#{sha}", params) else get_request("/repos/#{user}/#{repo}/git/trees/#{sha.to_s}", params) end return response unless block_given? response.tree.each { |el| yield el } end alias :find :get # Create a tree # # The tree creation API will take nested entries as well. # If both a tree and a nested path modifying that tree are specified, # it will overwrite the contents of that tree with the new path contents # and write a new tree out. # # = Parameters # * :base_tree - optional string of the SHA1 of the tree you want to update with new data # * :tree - array of hash objects(of :path, :mode, :type and sha) # * tree.path:: String of the file referenced in the tree # * tree.mode:: String of the file mode - one of 100644 for file(blob), 100755 for executable (blob), 040000 for subdirectory (tree), 160000 for submodule (commit) or 120000 for a blob that specifies the path of a symlink # * tree.type:: String of blob, tree, commit # * tree.sha:: String of SHA1 checksum ID of the object in the tree # * tree.content:: String of content you want this file to have - GitHub will write this blob out and use the SHA for this entry. Use either this or tree.sha # # = Examples # github = Github.new # github.git_data.trees.create 'user-name', 'repo-name', # "tree" => [ # { # "path" => "file.rb", # "mode" => "100644", # "type" => "blob", # "sha" => "44b4fc6d56897b048c772eb4087f854f46256132" # }, # ... # ] # def create(user_name, repo_name, params={}) set :user => user_name, :repo => repo_name assert_presence_of user, repo normalize! params assert_required_keys(%w[ tree ], params) filter! VALID_TREE_PARAM_NAMES, params['tree'] assert_valid_values(VALID_TREE_PARAM_VALUES, params['tree']) post_request("/repos/#{user}/#{repo}/git/trees", params) end end # GitData::Trees end # Github