Class: Git::Base
- Inherits:
-
Object
- Object
- Git::Base
- Defined in:
- lib/git/base.rb
Overview
Instance Attribute Summary collapse
-
#binary_path ⇒ String, Symbol
readonly
private
Returns the per-instance git binary path configuration value.
-
#git_ssh ⇒ String, ...
readonly
private
Returns the per-instance git_ssh configuration value.
-
#index ⇒ Pathname
readonly
Returns a reference to the git index file.
Class Method Summary collapse
-
.bare(git_dir, options = {}) ⇒ Git::Base
Open a bare repository.
-
.binary_version(binary_path)
deprecated
Deprecated.
Use git_version instead, which returns a Version (not an Array). For the legacy array shape, call:
Git.git_version.to_a -
.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.
-
.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) ⇒ String
Find the root of the working tree that contains
working_dir.
Instance Method Summary collapse
-
#add(paths = '.', **options) ⇒ String
Update the index from the current worktree to prepare 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)
rubocop:enable Style/ArgumentsForwarding.
- #apply_mail(file)
-
#archive(treeish, file = nil, opts = {}) ⇒ String
Creates an archive of the given tree-ish and writes it to a file.
-
#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@email.com') # sets value g.config('user.email', 'email@email.com', 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_files ⇒ Hash{String => Hash}
Compares the index and the working directory.
-
#diff_full(obj1 = 'HEAD', obj2 = nil, opts = {}) ⇒ String
Returns the full unified diff patch text between two commits.
-
#diff_path_status(objectish = 'HEAD', obj2 = nil, opts = {}) ⇒ Git::DiffPathStatus
(also: #diff_name_status)
Returns the file path status between two commits.
-
#diff_stats(objectish = 'HEAD', obj2 = nil, opts = {}) ⇒ Git::DiffStats
Returns a lazy DiffStats object for accessing diff statistics.
-
#dir ⇒ Pathname
Returns a reference to the working directory.
-
#each_conflict
iterates over the files which are unmerged.
-
#facade_repository ⇒ Git::Repository
private
Returns the Repository facade for this repository.
-
#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.
-
#fsck(objects = [], options = {}) ⇒ Git::FsckResult
Verifies the connectivity and validity of objects in the database.
-
#full_log_commits(opts = {}) ⇒ Array<Hash>
Return commits that are within the given revision range.
-
#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 = {}) ⇒ Hash<String, Hash<String, Hash>>
Lists the objects in a git tree object.
-
#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 = {}) ⇒ String
Pulls the given branch from the given remote into the current branch.
-
#push(remote = nil, branch = nil, options = {}) ⇒ String
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.
-
#remote_set_branches(name, *branches, add: false) ⇒ nil
Configures which branches are fetched for a remote.
-
#remotes
returns an array of Git:Remote objects.
-
#remove_remote(name)
removes a remote from this repository.
-
#repack
repacks the repository.
-
#repo ⇒ Pathname
Returns a reference to the git repository directory.
-
#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 = {})
deprecated
Deprecated.
Use #reset with
hard: trueinstead. -
#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::Object::Tag objects for this repository.
-
#tree_depth(objectish) ⇒ Integer
Returns the number of entries in a git tree object.
- #update_ref(branch, commit)
-
#with_index(new_index)
LOWER LEVEL INDEX OPERATIONS ##.
- #with_temp_index
- #with_temp_working
-
#with_working(work_dir)
:yields: the working directory Pathname.
-
#worktree(dir, commitish = nil) ⇒ Git::Worktree
Returns a Worktree object for the given path and optional commitish.
-
#worktrees ⇒ Git::Worktrees
Returns a Worktrees collection of all worktrees in the repository.
- #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.
144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/git/base.rb', line 144 def initialize( = {}) setup_logger([:log]) @git_ssh = .key?(:git_ssh) ? [:git_ssh] : :use_global_config if .key?(:binary_path) raise ArgumentError, 'binary_path must not be nil' if [:binary_path].nil? @binary_path = [:binary_path] else @binary_path = :use_global_config end initialize_components() end |
Instance Attribute Details
#binary_path ⇒ String, Symbol (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the per-instance git binary path configuration value
This may be:
- a [String] path when an explicit binary path has been configured
- the Symbol
:use_global_configwhen this instance is using the global config
381 382 383 |
# File 'lib/git/base.rb', line 381 def binary_path @binary_path end |
#git_ssh ⇒ String, ... (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the per-instance git_ssh configuration value
This may be:
- a [String] path when an explicit git_ssh command has been configured
- the Symbol
:use_global_configwhen this instance is using the global config nilwhen SSH has been explicitly disabled for this instance
371 372 373 |
# File 'lib/git/base.rb', line 371 def git_ssh @git_ssh end |
#index ⇒ Pathname (readonly)
Returns a reference to the git index file
248 249 250 |
# File 'lib/git/base.rb', line 248 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.
18 19 20 21 |
# File 'lib/git/base.rb', line 18 def self.(git_dir, = {}) paths = Git::Repository::PathResolver.resolve_paths(repository: git_dir, bare: true) new(.merge(paths)) end |
.binary_version(binary_path)
Use Git.git_version instead, which returns a Version (not an Array).
For the legacy array shape, call: Git.git_version.to_a
52 53 54 55 56 57 58 59 |
# File 'lib/git/base.rb', line 52 def self.binary_version(binary_path) Git::Deprecation.warn( 'Git::Base.binary_version is deprecated and will be removed in 6.0. ' \ 'Use Git.git_version instead, which returns a Git::Version ' \ '(not an Array). For the legacy array shape, call: Git.git_version.to_a' ) Git.git_version(binary_path).to_a end |
.clone(repository_url, directory, options = {}) ⇒ Git::Base
Clone a repository into an empty or newly created directory
24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/git/base.rb', line 24 def self.clone(repository_url, directory, = {}) = {} [:git_ssh] = [:git_ssh] if .key?(:git_ssh) clone_result = Git::Lib.new(, [:log]).clone(repository_url, directory, ) = [:bare] || [:mirror] paths = Git::Repository::PathResolver.resolve_paths( working_directory: clone_result[:working_directory], repository: clone_result[:repository], bare: ) new(.merge(paths)) end |
.config ⇒ Git::Config
Returns (and initialize if needed) a Git::Config instance
45 46 47 |
# File 'lib/git/base.rb', line 45 def self.config @config ||= Config.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).
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/git/base.rb', line 78 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] paths = Git::Repository::PathResolver.resolve_paths( working_directory: working_dir, repository: [:repository], index: [:index] ) new(.merge(paths)) end |
.repository_default_branch(repository, options = {}) ⇒ String
Returns the name of the default branch of the given repository
38 39 40 |
# File 'lib/git/base.rb', line 38 def self.repository_default_branch(repository, = {}) Git::Lib.new(nil, [:log]).repository_default_branch(repository) end |
.root_of_worktree(working_dir) ⇒ String
Find the root of the working tree that contains working_dir
Delegates to Repository::PathResolver.root_of_worktree, using the
global config for binary_path and git_ssh.
73 74 75 |
# File 'lib/git/base.rb', line 73 def self.root_of_worktree(working_dir) Git::Repository::PathResolver.root_of_worktree(working_dir) end |
Instance Method Details
#add(paths = '.', **options) ⇒ String
Update the index from the current worktree to prepare for the next commit
190 191 192 |
# File 'lib/git/base.rb', line 190 def add(paths = '.', **) facade_repository.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 =>
204 205 206 |
# File 'lib/git/base.rb', line 204 def add_remote(name, url, opts = {}) facade_repository.add_remote(name, url, opts) end |
#add_tag(name, *options)
Create a new git tag
670 671 672 |
# File 'lib/git/base.rb', line 670 def add_tag(name, *) facade_repository.add_tag(name, *) end |
#apply(file)
rubocop:enable Style/ArgumentsForwarding
766 767 768 769 770 |
# File 'lib/git/base.rb', line 766 def apply(file) return unless File.exist?(file) lib.apply(file) end |
#apply_mail(file)
772 773 774 |
# File 'lib/git/base.rb', line 772 def apply_mail(file) lib.apply_mail(file) if File.exist?(file) end |
#archive(treeish, file = nil, opts = {}) ⇒ String
Creates an archive of the given tree-ish and writes it to a file
702 703 704 |
# File 'lib/git/base.rb', line 702 def archive(treeish, file = nil, opts = {}) facade_repository.archive(treeish, file, opts) end |
#branch(branch_name = current_branch) ⇒ Git::Branch
Returns an object for branch_name.
929 930 931 |
# File 'lib/git/base.rb', line 929 def branch(branch_name = current_branch) facade_repository.branch(branch_name) end |
#branch?(branch) ⇒ Boolean
returns +true+ if the branch exists
333 334 335 |
# File 'lib/git/base.rb', line 333 def branch?(branch) facade_repository.branch?(branch) end |
#branches ⇒ Git::Branches
Returns a collection of all the branches in the repository. Each branch is represented as a Git::Branch.
935 936 937 |
# File 'lib/git/base.rb', line 935 def branches facade_repository.branches end |
#cat_file(objectish)
912 913 914 |
# File 'lib/git/base.rb', line 912 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
217 218 219 220 221 |
# File 'lib/git/base.rb', line 217 def chdir # :yields: the working directory Pathname Dir.chdir(dir.to_s) do yield dir end end |
#checkout
checks out a branch as the new git working directory
512 513 514 |
# File 'lib/git/base.rb', line 512 def checkout(*, **) facade_repository.checkout(*, **) end |
#checkout_file(version, file)
checks out an old version of a file
517 518 519 |
# File 'lib/git/base.rb', line 517 def checkout_file(version, file) facade_repository.checkout_file(version, file) end |
#checkout_index(opts = {})
810 811 812 |
# File 'lib/git/base.rb', line 810 def checkout_index(opts = {}) facade_repository.checkout_index(opts) end |
#clean(opts = {})
cleans the working directory
options: :force :d :ff
459 460 461 |
# File 'lib/git/base.rb', line 459 def clean(opts = {}) facade_repository.clean(opts) end |
#commit(message, opts = {})
commits all pending changes in the index file to the git repository
options: :all :allow_empty :amend :author
500 501 502 |
# File 'lib/git/base.rb', line 500 def commit(, opts = {}) facade_repository.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.
507 508 509 |
# File 'lib/git/base.rb', line 507 def commit_all(, opts = {}) facade_repository.commit_all(, **opts) end |
#commit_tree(tree = nil, opts = {}) ⇒ Git::Object::Commit
Returns a commit object.
968 969 970 |
# File 'lib/git/base.rb', line 968 def commit_tree(tree = nil, opts = {}) Git::Object::Commit.new(self, facade_repository.commit_tree(tree, **opts)) end |
#config(name = nil, value = nil, options = {})
g.config('user.name', 'Scott Chacon') # sets value g.config('user.email', 'email@email.com') # sets value g.config('user.email', 'email@email.com', file: 'path/to/custom/config') # sets value in file g.config('user.name') # returns 'Scott Chacon' g.config # returns whole config hash
228 229 230 |
# File 'lib/git/base.rb', line 228 def config(name = nil, value = nil, = {}) facade_repository.config(name, value, ) 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
924 925 926 |
# File 'lib/git/base.rb', line 924 def current_branch facade_repository.current_branch end |
#delete_tag(name)
deletes a tag
675 676 677 |
# File 'lib/git/base.rb', line 675 def delete_tag(name) facade_repository.delete_tag(name) 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
478 479 480 |
# File 'lib/git/base.rb', line 478 def describe(committish = nil, opts = {}) lib.describe(committish, opts) end |
#diff(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff
Returns a Git::Diff object.
973 974 975 |
# File 'lib/git/base.rb', line 973 def diff(objectish = 'HEAD', obj2 = nil) facade_repository.diff(objectish, obj2) end |
#diff_files ⇒ Hash{String => Hash}
Compares the index and the working directory
1174 1175 1176 |
# File 'lib/git/base.rb', line 1174 def diff_files facade_repository.diff_files end |
#diff_full(obj1 = 'HEAD', obj2 = nil, opts = {}) ⇒ String
Unknown option keys are silently ignored for backward compatibility;
only :path_limiter is forwarded to the underlying command.
Returns the full unified diff patch text between two commits
1068 1069 1070 |
# File 'lib/git/base.rb', line 1068 def diff_full(obj1 = 'HEAD', obj2 = nil, opts = {}) facade_repository.diff_full(obj1, obj2, opts.slice(:path_limiter)) end |
#diff_path_status(objectish = 'HEAD', obj2 = nil, opts = {}) ⇒ Git::DiffPathStatus Also known as: diff_name_status
Returns the file path status between two commits
1158 1159 1160 |
# File 'lib/git/base.rb', line 1158 def diff_path_status(objectish = 'HEAD', obj2 = nil, opts = {}) facade_repository.diff_path_status(objectish, obj2, opts.slice(:path_limiter, :path)) end |
#diff_stats(objectish = 'HEAD', obj2 = nil, opts = {}) ⇒ Git::DiffStats
Unknown option keys are silently ignored for backward compatibility;
only :path_limiter is forwarded to the underlying command.
Returns a lazy DiffStats object for accessing diff statistics
Compares (1) two commits, (2) a commit against the working tree, or (3) the index against the working tree and constructs a lazy DiffStats that computes per-file insertion and deletion counts on demand when its accessor methods are called.
Comparing two commits
When both objectish and obj2 are provided, the comparison is between those two refs (commits, tags, branches, etc.).
Comparing a commit against the working tree
When only objectish is provided (and isn't nil), the comparison is between objectish and the working tree; the stats reflect all changes since objectish.
Comparing the index against the working tree
When objectish is explicitly nil then obj2 must be omitted or nil. In this
case, the comparison is between the index and the working tree; the stats reflect
unstaged changes.
1128 1129 1130 |
# File 'lib/git/base.rb', line 1128 def diff_stats(objectish = 'HEAD', obj2 = nil, opts = {}) facade_repository.diff_stats(objectish, obj2, opts.slice(:path_limiter)) end |
#dir ⇒ Pathname
Returns a reference to the working directory
240 241 242 |
# File 'lib/git/base.rb', line 240 def dir @working_directory end |
#each_conflict
iterates over the files which are unmerged
564 565 566 |
# File 'lib/git/base.rb', line 564 def each_conflict(&) facade_repository.each_conflict(&) end |
#facade_repository ⇒ Git::Repository
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the Repository facade for this repository
356 357 358 359 360 |
# File 'lib/git/base.rb', line 356 def facade_repository @facade_repository ||= Git::Repository.new( execution_context: Git::ExecutionContext::Repository.from_base(self, logger: @logger) ) 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
523 524 525 |
# File 'lib/git/base.rb', line 523 def fetch(remote = 'origin', opts = {}) facade_repository.fetch(remote, opts) end |
#fsck(objects = [], options = {}) ⇒ Git::FsckResult
Verifies the connectivity and validity of objects in the database
Runs git fsck to check repository integrity and identify dangling,
missing, or unreachable objects.
rubocop:disable Style/ArgumentsForwarding
761 762 763 |
# File 'lib/git/base.rb', line 761 def fsck(*objects, **opts) facade_repository.fsck(*objects, **opts) end |
#full_log_commits(opts = {}) ⇒ Array<Hash>
Return commits that are within the given revision range
1001 1002 1003 |
# File 'lib/git/base.rb', line 1001 def full_log_commits(opts = {}) facade_repository.full_log_commits(opts) end |
#gblob(objectish) ⇒ Git::Object
Returns a Git object.
978 979 980 |
# File 'lib/git/base.rb', line 978 def gblob(objectish) facade_repository.gblob(objectish) end |
#gc
711 712 713 |
# File 'lib/git/base.rb', line 711 def gc lib.gc end |
#gcommit(objectish) ⇒ Git::Object
Returns a Git object.
983 984 985 |
# File 'lib/git/base.rb', line 983 def gcommit(objectish) facade_repository.gcommit(objectish) end |
#grep(string, path_limiter = nil, opts = {}) ⇒ Hash<String, Array>
Run a grep for 'string' on the HEAD of the git repository
415 416 417 418 |
# File 'lib/git/base.rb', line 415 def grep(string, path_limiter = nil, opts = {}) opts = opts.merge(object: facade_repository.rev_parse('HEAD')) unless opts.key?(:object) facade_repository.grep(string, path_limiter, opts) end |
#gtree(objectish) ⇒ Git::Object
Returns a Git object.
988 989 990 |
# File 'lib/git/base.rb', line 988 def gtree(objectish) facade_repository.gtree(objectish) end |
#ignored_files ⇒ Array<String>
List the files in the worktree that are ignored by git
423 424 425 |
# File 'lib/git/base.rb', line 423 def ignored_files facade_repository.ignored_files end |
#is_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
337 338 339 340 341 342 343 |
# File 'lib/git/base.rb', line 337 def is_branch?(branch) # rubocop:disable Naming/PredicatePrefix Git::Deprecation.warn( 'Git::Base#is_branch? is deprecated and will be removed in a future version. ' \ 'Use Git::Base#branch? instead.' ) branch?(branch) end |
#is_local_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
311 312 313 314 315 316 317 |
# File 'lib/git/base.rb', line 311 def is_local_branch?(branch) # rubocop:disable Naming/PredicatePrefix Git::Deprecation.warn( 'Git::Base#is_local_branch? is deprecated and will be removed in a future version. ' \ 'Use Git::Base#local_branch? instead.' ) local_branch?(branch) end |
#is_remote_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
324 325 326 327 328 329 330 |
# File 'lib/git/base.rb', line 324 def is_remote_branch?(branch) # rubocop:disable Naming/PredicatePrefix Git::Deprecation.warn( 'Git::Base#is_remote_branch? is deprecated and will be removed in a future version. ' \ '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
348 349 350 |
# File 'lib/git/base.rb', line 348 def lib @lib ||= Git::Lib.new(self, @logger) end |
#local_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists locally
307 308 309 |
# File 'lib/git/base.rb', line 307 def local_branch?(branch) facade_repository.local_branch?(branch) end |
#log(count = 30) ⇒ Git::Log
Returns a log with the specified number of commits.
993 994 995 |
# File 'lib/git/base.rb', line 993 def log(count = 30) facade_repository.log(count) end |
#ls_files(location = nil)
830 831 832 |
# File 'lib/git/base.rb', line 830 def ls_files(location = nil) facade_repository.ls_files(location) end |
#ls_tree(objectish, opts = {}) ⇒ Hash<String, Hash<String, Hash>>
Lists the objects in a git tree object
908 909 910 |
# File 'lib/git/base.rb', line 908 def ls_tree(objectish, opts = {}) facade_repository.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
559 560 561 |
# File 'lib/git/base.rb', line 559 def merge(branch, = 'merge', opts = {}) facade_repository.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)
1038 1039 1040 |
# File 'lib/git/base.rb', line 1038 def merge_base(*) facade_repository.merge_base(*).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
1015 1016 1017 |
# File 'lib/git/base.rb', line 1015 def object(objectish) facade_repository.object(objectish) end |
#pull(remote = nil, branch = nil, opts = {}) ⇒ String
Pulls the given branch from the given remote into the current branch
587 588 589 |
# File 'lib/git/base.rb', line 587 def pull(remote = nil, branch = nil, opts = {}) facade_repository.pull(remote, branch, opts) end |
#push(remote = nil, branch = nil, options = {}) ⇒ String
Push changes to a remote repository
552 553 554 |
# File 'lib/git/base.rb', line 552 def push(*, **) facade_repository.push(*, **) end |
#read_tree(treeish, opts = {})
814 815 816 |
# File 'lib/git/base.rb', line 814 def read_tree(treeish, opts = {}) lib.read_tree(treeish, opts) end |
#remote(remote_name = 'origin') ⇒ Git::Remote
Returns a remote of the specified name.
1020 1021 1022 |
# File 'lib/git/base.rb', line 1020 def remote(remote_name = 'origin') facade_repository.remote(remote_name) end |
#remote_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists remotely
320 321 322 |
# File 'lib/git/base.rb', line 320 def remote_branch?(branch) facade_repository.remote_branch?(branch) end |
#remote_set_branches(name, *branches, add: false) ⇒ nil
Configures which branches are fetched for a remote
Uses git remote set-branches to set or append fetch refspecs. When the add:
option is not given, the --add option is not passed to the git command
the underlying git command fails
633 634 635 |
# File 'lib/git/base.rb', line 633 def remote_set_branches(name, *branches, add: false) facade_repository.remote_set_branches(name, *branches, add: add) end |
#remotes
returns an array of Git:Remote objects
592 593 594 |
# File 'lib/git/base.rb', line 592 def remotes facade_repository.remotes end |
#remove_remote(name)
removes a remote from this repository
@git.remove_remote('scott_git')
640 641 642 |
# File 'lib/git/base.rb', line 640 def remove_remote(name) facade_repository.remove_remote(name) end |
#repack
repacks the repository
707 708 709 |
# File 'lib/git/base.rb', line 707 def repack lib.repack end |
#repo ⇒ Pathname
Returns a reference to the git repository directory
257 258 259 |
# File 'lib/git/base.rb', line 257 def repo @repository end |
#repo_size
returns the repository size in bytes
262 263 264 265 266 267 268 269 |
# File 'lib/git/base.rb', line 262 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
435 436 437 |
# File 'lib/git/base.rb', line 435 def reset(commitish = nil, opts = {}) facade_repository.reset(commitish, **opts) end |
#reset_hard(commitish = nil, opts = {})
Use #reset with hard: true instead.
resets the working directory to the commitish with '--hard'
443 444 445 446 447 448 449 450 |
# File 'lib/git/base.rb', line 443 def reset_hard(commitish = nil, opts = {}) Git::Deprecation.warn( 'Git::Base#reset_hard is deprecated and will be removed in a future version. ' \ 'Use Git::Base#reset(commitish, hard: true) instead.' ) 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
861 862 863 |
# File 'lib/git/base.rb', line 861 def rev_parse(objectish) facade_repository.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
488 489 490 |
# File 'lib/git/base.rb', line 488 def revert(commitish = nil, opts = {}) facade_repository.revert(commitish, **opts) end |
#rm(path = '.', opts = {}) Also known as: remove
removes file(s) from the git repository
428 429 430 |
# File 'lib/git/base.rb', line 428 def rm(path = '.', opts = {}) facade_repository.rm(path, opts) end |
#set_index(index_file, check = nil, must_exist: nil)
292 293 294 295 296 297 |
# File 'lib/git/base.rb', line 292 def set_index(index_file, check = nil, must_exist: nil) must_exist = deprecate_check_argument(check, must_exist) @lib = nil @facade_repository = nil @index = validate_path(index_file, 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')
601 602 603 |
# File 'lib/git/base.rb', line 601 def set_remote_url(name, url) facade_repository.set_remote_url(name, url) end |
#set_working(work_dir, check = nil, must_exist: nil)
299 300 301 302 303 304 |
# File 'lib/git/base.rb', line 299 def set_working(work_dir, check = nil, must_exist: nil) must_exist = deprecate_check_argument(check, must_exist) @lib = nil @facade_repository = nil @working_directory = validate_path(work_dir, must_exist) end |
#show(objectish = nil, path = nil) ⇒ String
Shows objects
781 782 783 |
# File 'lib/git/base.rb', line 781 def show(objectish = nil, path = nil) facade_repository.show(objectish, path) end |
#status ⇒ Git::Status
Returns a status object.
1025 1026 1027 |
# File 'lib/git/base.rb', line 1025 def status facade_repository.status end |
#tag(tag_name) ⇒ Git::Object::Tag
Returns a tag object.
1030 1031 1032 |
# File 'lib/git/base.rb', line 1030 def tag(tag_name) facade_repository.tag(tag_name) end |
#tags
returns an array of all Git::Object::Tag objects for this repository
645 646 647 |
# File 'lib/git/base.rb', line 645 def facade_repository. end |
#tree_depth(objectish) ⇒ Integer
Returns the number of entries in a git tree object
881 882 883 |
# File 'lib/git/base.rb', line 881 def tree_depth(objectish) facade_repository.tree_depth(objectish) end |
#update_ref(branch, commit)
826 827 828 |
# File 'lib/git/base.rb', line 826 def update_ref(branch, commit) facade_repository.update_ref(branch, commit) end |
#with_index(new_index)
LOWER LEVEL INDEX OPERATIONS ##
787 788 789 790 791 792 793 |
# File 'lib/git/base.rb', line 787 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
795 796 797 798 799 800 801 802 803 804 805 806 807 808 |
# File 'lib/git/base.rb', line 795 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
845 846 847 848 849 850 851 852 |
# File 'lib/git/base.rb', line 845 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 working directory Pathname
834 835 836 837 838 839 840 841 842 843 |
# File 'lib/git/base.rb', line 834 def with_working(work_dir) # :yields: the working directory Pathname 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) ⇒ Git::Worktree
Returns a Worktree object for the given path and optional commitish
950 951 952 |
# File 'lib/git/base.rb', line 950 def worktree(dir, commitish = nil) facade_repository.worktree(dir, commitish) end |
#worktrees ⇒ Git::Worktrees
Returns a Worktrees collection of all worktrees in the repository
963 964 965 |
# File 'lib/git/base.rb', line 963 def worktrees facade_repository.worktrees end |
#write_and_commit_tree(opts = {})
822 823 824 |
# File 'lib/git/base.rb', line 822 def write_and_commit_tree(opts = {}) Git::Object::Commit.new(self, facade_repository.write_and_commit_tree(**opts)) end |
#write_tree
818 819 820 |
# File 'lib/git/base.rb', line 818 def write_tree facade_repository.write_tree end |