lib/github_api/git_data/trees.rb
# encoding: utf-8 module Github class GitData module Trees VALID_TREE_PARAM_NAMES = %w[ base_tree tree path mode type sha content ].freeze VALID_TREE_PARAM_VALUES = { 'mode' => %w[ 100644 100755 040000 160000 120000 ], 'type' => %w[ blob tree commit ] } # Get a tree # # = Examples # @github = Github.new # @github.git_data.tree 'user-name', 'repo-name', 'sha' # @github.git_data.tree 'user-name', 'repo-name', 'sha' do |file| # file.path # end # def tree(user_name, repo_name, sha, params={}) _update_user_repo_params(user_name, repo_name) _validate_user_repo_params(user, repo) unless user? && repo? _validate_presence_of sha _normalize_params_keys(params) response = if params['recursive'] params['recursive'] = 1 get("/repos/#{user}/#{repo}/git/trees/#{sha}", params) else get("/repos/#{user}/#{repo}/git/trees/#{sha.to_s}", params) end return response unless block_given? response.tree.each { |el| yield el } end # 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 # * <tt>:base_tree</tt> - optional string of the SHA1 of the tree you want to update with new data # * <tt>:tree</tt> - array of hash objects(of <tt>:path</tt>, <tt>:mode</tt>, <tt>:type</tt> and <tt>sha</tt>) # * tree.path:: String of the file referenced in the tree # * tree.mode:: String of the file mode - one of <tt>100644</tt> for file(blob), <tt>100755</tt> for executable (blob), <tt>040000</tt> for subdirectory (tree), <tt>160000</tt> for submodule (commit) or <tt>120000</tt> for a blob that specifies the path of a symlink # * tree.type:: String of <tt>blob</tt>, <tt>tree</tt>, <tt>commit</tt> # * 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 <tt>tree.sha</tt> # # = Examples # @github = Github.new # @github.git_data.create_tree 'user-name', 'repo-name', # "tree" => [ # { # "path" => "file.rb", # "mode" => "100644", # "type" => "blob", # "sha" => "44b4fc6d56897b048c772eb4087f854f46256132" # }, # ... # ] # def create_tree(user_name=nil, repo_name=nil, params={}) _update_user_repo_params(user_name, repo_name) _validate_user_repo_params(user, repo) unless user? && repo? _normalize_params_keys(params) _filter_params_keys(VALID_TREE_PARAM_NAMES, params['tree']) _validate_params_values(VALID_TREE_PARAM_VALUES, params['tree']) post("/repos/#{user}/#{repo}/git/trees", params) end end # Trees end # GitData end # Github