# 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 # * :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.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