Class: Git::Base
- Inherits:
-
Object
- Object
- Git::Base
- Defined in:
- lib/git/base.rb
Overview
Instance Attribute Summary collapse
-
#index
readonly
returns reference to the git index file.
Class Method Summary collapse
-
.bare(git_dir, options = {}) ⇒ Git::Base
Open a bare repository.
- .binary_version(binary_path)
-
.clone(repository_url, directory, options = {}) ⇒ Git::Base
Clone a repository into an empty or newly created directory.
-
.config ⇒ Git::Config
Returns (and initialize if needed) a Git::Config instance.
-
.init(directory = '.', options = {}) ⇒ Git::Base
Create an empty Git repository or reinitialize an existing Git repository.
-
.open(working_dir, options = {}) ⇒ Git::Base
Open a an existing Git working directory.
-
.repository_default_branch(repository, options = {}) ⇒ String
Returns the name of the default branch of the given repository.
- .root_of_worktree(working_dir)
Instance Method Summary collapse
-
#add(paths = '.', **options)
Update the index from the current worktree to prepare the for the next commit.
-
#add_remote(name, url, opts = {})
adds a new remote to this repository url can be a git url or a Git::Base object if it's a local reference.
-
#add_tag(name, *options)
Create a new git tag.
- #apply(file)
- #apply_mail(file)
-
#archive(treeish, file = nil, opts = {})
creates an archive file of the given tree-ish.
-
#branch(branch_name = current_branch) ⇒ Git::Branch
An object for branch_name.
-
#branch?(branch) ⇒ Boolean
returns +true+ if the branch exists.
-
#branches ⇒ Git::Branches
A collection of all the branches in the repository.
- #cat_file(objectish)
-
#chdir
changes current working directory for a block to the git working directory.
-
#checkout
checks out a branch as the new git working directory.
-
#checkout_file(version, file)
checks out an old version of a file.
- #checkout_index(opts = {})
-
#clean(opts = {})
cleans the working directory.
-
#commit(message, opts = {})
commits all pending changes in the index file to the git repository.
-
#commit_all(message, opts = {})
commits all pending changes in the index file to the git repository, but automatically adds all modified files without having to explicitly calling @git.add() on them.
-
#commit_tree(tree = nil, opts = {}) ⇒ Git::Object::Commit
A commit object.
-
#config(name = nil, value = nil, options = {})
g.config('user.name', 'Scott Chacon') # sets value g.config('user.email', '[email protected]') # sets value g.config('user.email', '[email protected]', file: 'path/to/custom/config) # sets value in file g.config('user.name') # returns 'Scott Chacon' g.config # returns whole config hash.
-
#current_branch ⇒ String
The name of the branch HEAD refers to or 'HEAD' if detached.
-
#delete_tag(name)
deletes a tag.
-
#describe(committish = nil, opts = {})
returns the most recent tag that is reachable from a commit.
-
#diff(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff
A Git::Diff object.
-
#diff_path_status(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff::PathStatus
(also: #diff_name_status)
Returns a Git::Diff::PathStatus object for accessing the name-status report.
-
#diff_stats(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff::Stats
Returns a Git::Diff::Stats object for accessing diff statistics.
-
#dir
returns a reference to the working directory @git.dir.path @git.dir.writeable?.
-
#each_conflict
iterates over the files which are unmerged.
-
#fetch(remote = 'origin', opts = {})
fetches changes from a remote branch - this does not modify the working directory, it just gets the changes from the remote if there are any.
-
#gblob(objectish) ⇒ Git::Object
A Git object.
- #gc
-
#gcommit(objectish) ⇒ Git::Object
A Git object.
-
#grep(string, path_limiter = nil, opts = {}) ⇒ Hash<String, Array>
Run a grep for 'string' on the HEAD of the git repository.
-
#gtree(objectish) ⇒ Git::Object
A Git object.
-
#ignored_files ⇒ Array<String>
List the files in the worktree that are ignored by git.
-
#initialize(options = {}) ⇒ Git::Base
constructor
Create an object that executes Git commands in the context of a working copy or a bare repository.
-
#is_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix.
-
#is_local_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix.
-
#is_remote_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix.
-
#lib
this is a convenience method for accessing the class that wraps all the actual 'git' forked system calls.
-
#local_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists locally.
-
#log(count = 30) ⇒ Git::Log
A log with the specified number of commits.
- #ls_files(location = nil)
- #ls_tree(objectish, opts = {})
-
#merge(branch, message = 'merge', opts = {})
merges one or more branches into the current working branch.
-
#merge_base ⇒ Array<Git::Object::Commit>
Find as good common ancestors as possible for a merge example: g.merge_base('master', 'some_branch', 'some_sha', octopus: true).
-
#object(objectish) ⇒ Git::Object
returns a Git::Object of the appropriate type you can also call @git.gtree('tree'), but that's just for readability.
-
#pull(remote = nil, branch = nil, opts = {}) ⇒ Void
Pulls the given branch from the given remote into the current branch.
-
#push(remote = nil, branch = nil, options = {}) ⇒ Void
Push changes to a remote repository.
- #read_tree(treeish, opts = {})
-
#remote(remote_name = 'origin') ⇒ Git::Remote
A remote of the specified name.
-
#remote_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists remotely.
-
#remotes
returns an array of Git:Remote objects.
-
#remove_remote(name)
removes a remote from this repository.
-
#repack
repacks the repository.
-
#repo
returns reference to the git repository directory @git.dir.path.
-
#repo_size
returns the repository size in bytes.
-
#reset(commitish = nil, opts = {})
resets the working directory to the provided commitish.
-
#reset_hard(commitish = nil, opts = {})
resets the working directory to the commitish with '--hard'.
-
#rev_parse(objectish)
(also: #revparse)
runs git rev-parse to convert the objectish to a full sha.
-
#revert(commitish = nil, opts = {})
reverts the working directory to the provided commitish.
-
#rm(path = '.', opts = {})
(also: #remove)
removes file(s) from the git repository.
- #set_index(index_file, check = nil, must_exist: nil)
-
#set_remote_url(name, url)
sets the url for a remote url can be a git url or a Git::Base object if it's a local reference.
- #set_working(work_dir, check = nil, must_exist: nil)
-
#show(objectish = nil, path = nil) ⇒ String
Shows objects.
-
#status ⇒ Git::Status
A status object.
-
#tag(tag_name) ⇒ Git::Object::Tag
A tag object.
-
#tags
returns an array of all Git::Tag objects for this repository.
- #update_ref(branch, commit)
-
#with_index(new_index)
LOWER LEVEL INDEX OPERATIONS ##.
- #with_temp_index
- #with_temp_working
-
#with_working(work_dir)
:yields: the Git::WorkingDirectory.
-
#worktree(dir, commitish = nil)
returns a Git::Worktree object for dir, commitish.
-
#worktrees
returns a Git::worktrees object of all the Git::Worktrees objects for this repo.
- #write_and_commit_tree(opts = {})
- #write_tree
Constructor Details
#initialize(options = {}) ⇒ Git::Base
Create an object that executes Git commands in the context of a working copy or a bare repository.
154 155 156 157 158 |
# File 'lib/git/base.rb', line 154 def initialize( = {}) = default_paths() setup_logger([:log]) initialize_components() end |
Instance Attribute Details
#index (readonly)
returns reference to the git index file
234 235 236 |
# File 'lib/git/base.rb', line 234 def index @index end |
Class Method Details
.bare(git_dir, options = {}) ⇒ Git::Base
Open a bare repository
Opens a bare repository located in the git_dir
directory.
Since there is no working copy, you can not checkout or commit
but you can do most read operations.
17 18 19 20 |
# File 'lib/git/base.rb', line 17 def self.(git_dir, = {}) normalize_paths(, default_repository: git_dir, bare: true) new() end |
.binary_version(binary_path)
41 42 43 44 45 46 47 |
# File 'lib/git/base.rb', line 41 def self.binary_version(binary_path) result, status = execute_git_version(binary_path) raise "Failed to get git version: #{status}\n#{result}" unless status.success? parse_version_string(result) end |
.clone(repository_url, directory, options = {}) ⇒ Git::Base
Clone a repository into an empty or newly created directory
23 24 25 26 27 |
# File 'lib/git/base.rb', line 23 def self.clone(repository_url, directory, = {}) = Git::Lib.new(nil, [:log]).clone(repository_url, directory, ) normalize_paths(, bare: [:bare] || [:mirror]) new() end |
.config ⇒ Git::Config
Returns (and initialize if needed) a Git::Config instance
37 38 39 |
# File 'lib/git/base.rb', line 37 def self.config @config ||= Config.new end |
.init(directory = '.', options = {}) ⇒ Git::Base
Create an empty Git repository or reinitialize an existing Git repository
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/git/base.rb', line 69 def self.init(directory = '.', = {}) normalize_paths(, default_working_directory: directory, default_repository: directory, bare: [:bare]) = { bare: [:bare], initial_branch: [:initial_branch] } directory = [:bare] ? [:repository] : [:working_directory] FileUtils.mkdir_p(directory) # TODO: this dance seems awkward: this creates a Git::Lib so we can call # init so we can create a new Git::Base which in turn (ultimately) # creates another/different Git::Lib. # # TODO: maybe refactor so this Git::Bare.init does this: # self.new(opts).init(init_opts) and move all/some of this code into # Git::Bare#init. This way the init method can be called on any # repository you have a Git::Base instance for. This would not # change the existing interface (other than adding to it). # Git::Lib.new().init() new() end |
.open(working_dir, options = {}) ⇒ Git::Base
Open a an existing Git working directory
Git.open will most likely be the most common way to create a git reference, referring to an existing working directory.
If not provided in the options, the library will assume
the repository and index are in the default places (.git/
, .git/index
).
122 123 124 125 126 127 128 129 130 |
# File 'lib/git/base.rb', line 122 def self.open(working_dir, = {}) raise ArgumentError, "'#{working_dir}' is not a directory" unless Dir.exist?(working_dir) working_dir = root_of_worktree(working_dir) unless [:repository] normalize_paths(, default_working_directory: working_dir) new() end |
.repository_default_branch(repository, options = {}) ⇒ String
Returns the name of the default branch of the given repository
30 31 32 |
# File 'lib/git/base.rb', line 30 def self.repository_default_branch(repository, = {}) Git::Lib.new(nil, [:log]).repository_default_branch(repository) end |
.root_of_worktree(working_dir)
96 97 98 99 100 101 |
# File 'lib/git/base.rb', line 96 def self.root_of_worktree(working_dir) raise ArgumentError, "'#{working_dir}' does not exist" unless Dir.exist?(working_dir) result, status = execute_rev_parse_toplevel(working_dir) process_rev_parse_result(result, status, working_dir) end |
Instance Method Details
#add(paths = '.', **options)
Update the index from the current worktree to prepare the for the next commit
173 174 175 |
# File 'lib/git/base.rb', line 173 def add(paths = '.', **) lib.add(paths, ) end |
#add_remote(name, url, opts = {})
adds a new remote to this repository url can be a git url or a Git::Base object if it's a local reference
@git.add_remote('scotts_git', 'git://repo.or.cz/rubygit.git') @git.fetch('scotts_git') @git.merge('scotts_git/master')
Options:
:fetch => true
:track =>
187 188 189 190 191 |
# File 'lib/git/base.rb', line 187 def add_remote(name, url, opts = {}) url = url.repo.path if url.is_a?(Git::Base) lib.remote_add(name, url, opts) Git::Remote.new(self, name) end |
#add_tag(name, *options)
Create a new git tag
565 566 567 568 |
# File 'lib/git/base.rb', line 565 def add_tag(name, *) lib.tag(name, *) tag(name) end |
#apply(file)
589 590 591 592 593 |
# File 'lib/git/base.rb', line 589 def apply(file) return unless File.exist?(file) lib.apply(file) end |
#apply_mail(file)
595 596 597 |
# File 'lib/git/base.rb', line 595 def apply_mail(file) lib.apply_mail(file) if File.exist?(file) end |
#archive(treeish, file = nil, opts = {})
creates an archive file of the given tree-ish
576 577 578 |
# File 'lib/git/base.rb', line 576 def archive(treeish, file = nil, opts = {}) object(treeish).archive(file, opts) end |
#branch(branch_name = current_branch) ⇒ Git::Branch
Returns an object for branch_name.
713 714 715 |
# File 'lib/git/base.rb', line 713 def branch(branch_name = current_branch) Git::Branch.new(self, branch_name) end |
#branch?(branch) ⇒ Boolean
returns +true+ if the branch exists
305 306 307 308 |
# File 'lib/git/base.rb', line 305 def branch?(branch) branch_names = branches.map(&:name) branch_names.include?(branch) end |
#branches ⇒ Git::Branches
Returns a collection of all the branches in the repository. Each branch is represented as a Git::Branch.
719 720 721 |
# File 'lib/git/base.rb', line 719 def branches Git::Branches.new(self) end |
#cat_file(objectish)
696 697 698 |
# File 'lib/git/base.rb', line 696 def cat_file(objectish) lib.cat_file(objectish) end |
#chdir
changes current working directory for a block to the git working directory
example @git.chdir do # write files @git.add @git.commit('message') end
202 203 204 205 206 |
# File 'lib/git/base.rb', line 202 def chdir # :yields: the Git::Path Dir.chdir(dir.path) do yield dir.path end end |
#checkout
checks out a branch as the new git working directory
443 444 445 |
# File 'lib/git/base.rb', line 443 def checkout(*, **) lib.checkout(*, **) end |
#checkout_file(version, file)
checks out an old version of a file
448 449 450 |
# File 'lib/git/base.rb', line 448 def checkout_file(version, file) lib.checkout_file(version, file) end |
#checkout_index(opts = {})
633 634 635 |
# File 'lib/git/base.rb', line 633 def checkout_index(opts = {}) lib.checkout_index(opts) end |
#clean(opts = {})
cleans the working directory
options: :force :d :ff
389 390 391 |
# File 'lib/git/base.rb', line 389 def clean(opts = {}) lib.clean(opts) end |
#commit(message, opts = {})
commits all pending changes in the index file to the git repository
options: :all :allow_empty :amend :author
430 431 432 |
# File 'lib/git/base.rb', line 430 def commit(, opts = {}) lib.commit(, opts) end |
#commit_all(message, opts = {})
commits all pending changes in the index file to the git repository, but automatically adds all modified files without having to explicitly calling @git.add() on them.
437 438 439 440 |
# File 'lib/git/base.rb', line 437 def commit_all(, opts = {}) opts = { add_all: true }.merge(opts) lib.commit(, opts) end |
#commit_tree(tree = nil, opts = {}) ⇒ Git::Object::Commit
Returns a commit object.
735 736 737 |
# File 'lib/git/base.rb', line 735 def commit_tree(tree = nil, opts = {}) Git::Object::Commit.new(self, lib.commit_tree(tree, opts)) end |
#config(name = nil, value = nil, options = {})
g.config('user.name', 'Scott Chacon') # sets value g.config('user.email', '[email protected]') # sets value g.config('user.email', '[email protected]', file: 'path/to/custom/config) # sets value in file g.config('user.name') # returns 'Scott Chacon' g.config # returns whole config hash
213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/git/base.rb', line 213 def config(name = nil, value = nil, = {}) if name && value # set value lib.config_set(name, value, ) elsif name # return value lib.config_get(name) else # return hash lib.config_list end end |
#current_branch ⇒ String
The name of the branch HEAD refers to or 'HEAD' if detached
Returns one of the following:
- The branch name that HEAD refers to (even if it is an unborn branch)
- 'HEAD' if in a detached HEAD state
708 709 710 |
# File 'lib/git/base.rb', line 708 def current_branch lib.branch_current end |
#delete_tag(name)
deletes a tag
571 572 573 |
# File 'lib/git/base.rb', line 571 def delete_tag(name) lib.tag(name, { d: true }) end |
#describe(committish = nil, opts = {})
returns the most recent tag that is reachable from a commit
options: :all :tags :contains :debug :exact_match :dirty :abbrev :candidates :long :always :match
408 409 410 |
# File 'lib/git/base.rb', line 408 def describe(committish = nil, opts = {}) lib.describe(committish, opts) end |
#diff(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff
Returns a Git::Diff object.
740 741 742 |
# File 'lib/git/base.rb', line 740 def diff(objectish = 'HEAD', obj2 = nil) Git::Diff.new(self, objectish, obj2) end |
#diff_path_status(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff::PathStatus Also known as: diff_name_status
Returns a Git::Diff::PathStatus object for accessing the name-status report.
816 817 818 |
# File 'lib/git/base.rb', line 816 def diff_path_status(objectish = 'HEAD', obj2 = nil) Git::DiffPathStatus.new(self, objectish, obj2) end |
#diff_stats(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff::Stats
Returns a Git::Diff::Stats object for accessing diff statistics.
807 808 809 |
# File 'lib/git/base.rb', line 807 def diff_stats(objectish = 'HEAD', obj2 = nil) Git::DiffStats.new(self, objectish, obj2) end |
#dir
returns a reference to the working directory @git.dir.path @git.dir.writeable?
229 230 231 |
# File 'lib/git/base.rb', line 229 def dir @working_directory end |
#each_conflict
iterates over the files which are unmerged
492 493 494 |
# File 'lib/git/base.rb', line 492 def each_conflict(&) # :yields: file, your_version, their_version lib.conflicts(&) end |
#fetch(remote = 'origin', opts = {})
fetches changes from a remote branch - this does not modify the working directory, it just gets the changes from the remote if there are any
454 455 456 457 458 459 460 |
# File 'lib/git/base.rb', line 454 def fetch(remote = 'origin', opts = {}) if remote.is_a?(Hash) opts = remote remote = nil end lib.fetch(remote, opts) end |
#gblob(objectish) ⇒ Git::Object
Returns a Git object.
745 746 747 |
# File 'lib/git/base.rb', line 745 def gblob(objectish) Git::Object.new(self, objectish, 'blob') end |
#gc
585 586 587 |
# File 'lib/git/base.rb', line 585 def gc lib.gc end |
#gcommit(objectish) ⇒ Git::Object
Returns a Git object.
750 751 752 |
# File 'lib/git/base.rb', line 750 def gcommit(objectish) Git::Object.new(self, objectish, 'commit') end |
#grep(string, path_limiter = nil, opts = {}) ⇒ Hash<String, Array>
Run a grep for 'string' on the HEAD of the git repository
353 354 355 |
# File 'lib/git/base.rb', line 353 def grep(string, path_limiter = nil, opts = {}) object('HEAD').grep(string, path_limiter, opts) end |
#gtree(objectish) ⇒ Git::Object
Returns a Git object.
755 756 757 |
# File 'lib/git/base.rb', line 755 def gtree(objectish) Git::Object.new(self, objectish, 'tree') end |
#ignored_files ⇒ Array<String>
List the files in the worktree that are ignored by git
360 361 362 |
# File 'lib/git/base.rb', line 360 def ignored_files lib.ignored_files end |
#is_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
310 311 312 313 |
# File 'lib/git/base.rb', line 310 def is_branch?(branch) # rubocop:disable Naming/PredicatePrefix Git.deprecated('Git::Base#is_branch? is deprecated. Use Git::Base#branch? instead.') branch?(branch) end |
#is_local_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
288 289 290 291 |
# File 'lib/git/base.rb', line 288 def is_local_branch?(branch) # rubocop:disable Naming/PredicatePrefix Git.deprecation('Git::Base#is_local_branch? is deprecated. Use Git::Base#local_branch? instead.') local_branch?(branch) end |
#is_remote_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
299 300 301 302 |
# File 'lib/git/base.rb', line 299 def is_remote_branch?(branch) # rubocop:disable Naming/PredicatePrefix Git.deprecated('Git::Base#is_remote_branch? is deprecated. Use Git::Base#remote_branch? instead.') remote_branch?(branch) end |
#lib
this is a convenience method for accessing the class that wraps all the actual 'git' forked system calls. At some point I hope to replace the Git::Lib class with one that uses native methods or libgit C bindings
318 319 320 |
# File 'lib/git/base.rb', line 318 def lib @lib ||= Git::Lib.new(self, @logger) end |
#local_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists locally
283 284 285 286 |
# File 'lib/git/base.rb', line 283 def local_branch?(branch) branch_names = branches.local.map(&:name) branch_names.include?(branch) end |
#log(count = 30) ⇒ Git::Log
Returns a log with the specified number of commits.
760 761 762 |
# File 'lib/git/base.rb', line 760 def log(count = 30) Git::Log.new(self, count) end |
#ls_files(location = nil)
654 655 656 |
# File 'lib/git/base.rb', line 654 def ls_files(location = nil) lib.ls_files(location) end |
#ls_tree(objectish, opts = {})
692 693 694 |
# File 'lib/git/base.rb', line 692 def ls_tree(objectish, opts = {}) lib.ls_tree(objectish, opts) end |
#merge(branch, message = 'merge', opts = {})
merges one or more branches into the current working branch
you can specify more than one branch to merge by passing an array of branches
487 488 489 |
# File 'lib/git/base.rb', line 487 def merge(branch, = 'merge', opts = {}) lib.merge(branch, , opts) end |
#merge_base ⇒ Array<Git::Object::Commit>
Find as good common ancestors as possible for a merge example: g.merge_base('master', 'some_branch', 'some_sha', octopus: true)
797 798 799 800 |
# File 'lib/git/base.rb', line 797 def merge_base(*) shas = lib.merge_base(*) shas.map { |sha| gcommit(sha) } end |
#object(objectish) ⇒ Git::Object
returns a Git::Object of the appropriate type you can also call @git.gtree('tree'), but that's just for readability. If you call @git.gtree('HEAD') it will still return a Git::Object::Commit object.
object calls a method that will run a rev-parse on the objectish and determine the type of the object and return an appropriate object for that type
774 775 776 |
# File 'lib/git/base.rb', line 774 def object(objectish) Git::Object.new(self, objectish) end |
#pull(remote = nil, branch = nil, opts = {}) ⇒ Void
Pulls the given branch from the given remote into the current branch
515 516 517 |
# File 'lib/git/base.rb', line 515 def pull(remote = nil, branch = nil, opts = {}) lib.pull(remote, branch, opts) end |
#push(remote = nil, branch = nil, options = {}) ⇒ Void
Push changes to a remote repository
480 481 482 |
# File 'lib/git/base.rb', line 480 def push(*, **) lib.push(*, **) end |
#read_tree(treeish, opts = {})
637 638 639 |
# File 'lib/git/base.rb', line 637 def read_tree(treeish, opts = {}) lib.read_tree(treeish, opts) end |
#remote(remote_name = 'origin') ⇒ Git::Remote
Returns a remote of the specified name.
779 780 781 |
# File 'lib/git/base.rb', line 779 def remote(remote_name = 'origin') Git::Remote.new(self, remote_name) end |
#remote_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists remotely
294 295 296 297 |
# File 'lib/git/base.rb', line 294 def remote_branch?(branch) branch_names = branches.remote.map(&:name) branch_names.include?(branch) end |
#remotes
returns an array of Git:Remote objects
520 521 522 |
# File 'lib/git/base.rb', line 520 def remotes lib.remotes.map { |r| Git::Remote.new(self, r) } end |
#remove_remote(name)
removes a remote from this repository
@git.remove_remote('scott_git')
538 539 540 |
# File 'lib/git/base.rb', line 538 def remove_remote(name) lib.remote_remove(name) end |
#repack
repacks the repository
581 582 583 |
# File 'lib/git/base.rb', line 581 def repack lib.repack end |
#repo
returns reference to the git repository directory @git.dir.path
238 239 240 |
# File 'lib/git/base.rb', line 238 def repo @repository end |
#repo_size
returns the repository size in bytes
243 244 245 246 247 248 249 250 |
# File 'lib/git/base.rb', line 243 def repo_size all_files = Dir.glob(File.join(repo.path, '**', '*'), File::FNM_DOTMATCH) all_files.reject { |file| file.include?('..') } .map { |file| File.(file) } .uniq .sum { |file| File.stat(file).size.to_i } end |
#reset(commitish = nil, opts = {})
resets the working directory to the provided commitish
372 373 374 |
# File 'lib/git/base.rb', line 372 def reset(commitish = nil, opts = {}) lib.reset(commitish, opts) end |
#reset_hard(commitish = nil, opts = {})
resets the working directory to the commitish with '--hard'
377 378 379 380 |
# File 'lib/git/base.rb', line 377 def reset_hard(commitish = nil, opts = {}) opts = { hard: true }.merge(opts) lib.reset(commitish, opts) end |
#rev_parse(objectish) Also known as: revparse
runs git rev-parse to convert the objectish to a full sha
685 686 687 |
# File 'lib/git/base.rb', line 685 def rev_parse(objectish) lib.rev_parse(objectish) end |
#revert(commitish = nil, opts = {})
reverts the working directory to the provided commitish. Accepts a range, such as comittish..HEAD
options: :no_edit
418 419 420 |
# File 'lib/git/base.rb', line 418 def revert(commitish = nil, opts = {}) lib.revert(commitish, opts) end |
#rm(path = '.', opts = {}) Also known as: remove
removes file(s) from the git repository
365 366 367 |
# File 'lib/git/base.rb', line 365 def rm(path = '.', opts = {}) lib.rm(path, opts) end |
#set_index(index_file, check = nil, must_exist: nil)
252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/git/base.rb', line 252 def set_index(index_file, check = nil, must_exist: nil) unless check.nil? Git::Deprecation.warn( 'The "check" argument is deprecated and will be removed in a future version. ' \ 'Use "must_exist:" instead.' ) end # default is true must_exist = must_exist.nil? && check.nil? ? true : must_exist | check @lib = nil @index = Git::Index.new(index_file.to_s, must_exist:) end |
#set_remote_url(name, url)
sets the url for a remote url can be a git url or a Git::Base object if it's a local reference
@git.set_remote_url('scotts_git', 'git://repo.or.cz/rubygit.git')
529 530 531 532 533 |
# File 'lib/git/base.rb', line 529 def set_remote_url(name, url) url = url.repo.path if url.is_a?(Git::Base) lib.remote_set_url(name, url) Git::Remote.new(self, name) end |
#set_working(work_dir, check = nil, must_exist: nil)
267 268 269 270 271 272 273 274 275 276 277 278 279 280 |
# File 'lib/git/base.rb', line 267 def set_working(work_dir, check = nil, must_exist: nil) unless check.nil? Git::Deprecation.warn( 'The "check" argument is deprecated and will be removed in a future version. ' \ 'Use "must_exist:" instead.' ) end # default is true must_exist = must_exist.nil? && check.nil? ? true : must_exist | check @lib = nil @working_directory = Git::WorkingDirectory.new(work_dir.to_s, must_exist:) end |
#show(objectish = nil, path = nil) ⇒ String
Shows objects
604 605 606 |
# File 'lib/git/base.rb', line 604 def show(objectish = nil, path = nil) lib.show(objectish, path) end |
#status ⇒ Git::Status
Returns a status object.
784 785 786 |
# File 'lib/git/base.rb', line 784 def status Git::Status.new(self) end |
#tag(tag_name) ⇒ Git::Object::Tag
Returns a tag object.
789 790 791 |
# File 'lib/git/base.rb', line 789 def tag(tag_name) Git::Object::Tag.new(self, tag_name) end |
#tags
returns an array of all Git::Tag objects for this repository
543 544 545 |
# File 'lib/git/base.rb', line 543 def lib..map { |r| tag(r) } end |
#update_ref(branch, commit)
650 651 652 |
# File 'lib/git/base.rb', line 650 def update_ref(branch, commit) branch(branch).update_ref(commit) end |
#with_index(new_index)
LOWER LEVEL INDEX OPERATIONS ##
610 611 612 613 614 615 616 |
# File 'lib/git/base.rb', line 610 def with_index(new_index) # :yields: new_index old_index = @index set_index(new_index, false) return_value = yield @index set_index(old_index) return_value end |
#with_temp_index
618 619 620 621 622 623 624 625 626 627 628 629 630 631 |
# File 'lib/git/base.rb', line 618 def with_temp_index(&) # Workaround for JRUBY, since they handle the TempFile path different. # MUST be improved to be safer and OS independent. if RUBY_PLATFORM == 'java' temp_path = "/tmp/temp-index-#{(0...15).map { ('a'..'z').to_a[rand(26)] }.join}" else tempfile = Tempfile.new('temp-index') temp_path = tempfile.path tempfile.close tempfile.unlink end with_index(temp_path, &) end |
#with_temp_working
669 670 671 672 673 674 675 676 |
# File 'lib/git/base.rb', line 669 def with_temp_working(&) tempfile = Tempfile.new('temp-workdir') temp_dir = tempfile.path tempfile.close tempfile.unlink Dir.mkdir(temp_dir, 0o700) with_working(temp_dir, &) end |
#with_working(work_dir)
:yields: the Git::WorkingDirectory
658 659 660 661 662 663 664 665 666 667 |
# File 'lib/git/base.rb', line 658 def with_working(work_dir) # :yields: the Git::WorkingDirectory return_value = false old_working = @working_directory set_working(work_dir) Dir.chdir work_dir do return_value = yield @working_directory end set_working(old_working) return_value end |
#worktree(dir, commitish = nil)
returns a Git::Worktree object for dir, commitish
724 725 726 |
# File 'lib/git/base.rb', line 724 def worktree(dir, commitish = nil) Git::Worktree.new(self, dir, commitish) end |
#worktrees
returns a Git::worktrees object of all the Git::Worktrees objects for this repo
730 731 732 |
# File 'lib/git/base.rb', line 730 def worktrees Git::Worktrees.new(self) end |
#write_and_commit_tree(opts = {})
645 646 647 648 |
# File 'lib/git/base.rb', line 645 def write_and_commit_tree(opts = {}) tree = write_tree commit_tree(tree, opts) end |
#write_tree
641 642 643 |
# File 'lib/git/base.rb', line 641 def write_tree lib.write_tree end |