Class: Git::Base
- Inherits:
-
Object
- Object
- Git::Base
- Defined in:
- lib/git/base.rb
Overview
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 = self.current_branch) ⇒ Git::Branch
An object for branch_name.
-
#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(*args, **options)
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.
-
#dir
returns a reference to the working directory @git.dir.path @git.dir.writeable?.
-
#each_conflict(&block)
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.
-
#index
returns reference to the git index file.
-
#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
returns +true+ if the branch exists.
-
#is_local_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists locally.
-
#is_remote_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists remotely.
-
#lib
this is a convenience method for accessing the class that wraps all the actual 'git' forked system calls.
-
#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(*args) ⇒ 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.
-
#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 = true)
-
#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 = true)
-
#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(&blk)
- #with_temp_working(&blk)
-
#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.
125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/git/base.rb', line 125 def initialize( = {}) if working_dir = [:working_directory] [:repository] ||= File.join(working_dir, '.git') [:index] ||= File.join([:repository], 'index') end @logger = ([:log] || Logger.new(nil)) @logger.info("Starting Git") @working_directory = [:working_directory] ? Git::WorkingDirectory.new([:working_directory]) : nil @repository = [:repository] ? Git::Repository.new([:repository]) : nil @index = [:index] ? Git::Index.new([:index], false) : nil 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.
15 16 17 18 |
# File 'lib/git/base.rb', line 15 def self.(git_dir, = {}) normalize_paths(, default_repository: git_dir, bare: true) self.new() end |
.binary_version(binary_path)
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/git/base.rb', line 39 def self.binary_version(binary_path) git_cmd = "#{binary_path} -c core.quotePath=true -c color.ui=false version 2>&1" result, status = Open3.capture2(git_cmd) result = result.chomp if status.success? version = result[/\d+(\.\d+)+/] version_parts = version.split('.').collect { |i| i.to_i } version_parts.fill(0, version_parts.length...3) else raise RuntimeError, "Failed to get git version: #{status}\n#{result}" end end |
.clone(repository_url, directory, options = {}) ⇒ Git::Base
Clone a repository into an empty or newly created directory
21 22 23 24 25 |
# File 'lib/git/base.rb', line 21 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
35 36 37 |
# File 'lib/git/base.rb', line 35 def self.config @@config ||= Config.new end |
.init(directory = '.', options = {}) ⇒ Git::Base
Create an empty Git repository or reinitialize an existing Git repository
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/git/base.rb', line 54 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) unless File.exist?(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() self.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
).
93 94 95 96 97 98 99 100 101 |
# File 'lib/git/base.rb', line 93 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) self.new() end |
.repository_default_branch(repository, options = {}) ⇒ String
Returns the name of the default branch of the given repository
28 29 30 |
# File 'lib/git/base.rb', line 28 def self.repository_default_branch(repository, = {}) Git::Lib.new(nil, [:log]).repository_default_branch(repository) end |
.root_of_worktree(working_dir)
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/git/base.rb', line 80 def self.root_of_worktree(working_dir) result = working_dir status = nil git_cmd = "#{Git::Base.config.binary_path} -c core.quotePath=true -c color.ui=false rev-parse --show-toplevel 2>&1" result, status = Open3.capture2(git_cmd, chdir: File.(working_dir)) result = result.chomp raise ArgumentError, "'#{working_dir}' is not in a git working tree" unless status.success? result end |
Instance Method Details
#add(paths = '.', **options)
Update the index from the current worktree to prepare the for the next commit
151 152 153 |
# File 'lib/git/base.rb', line 151 def add(paths = '.', **) self.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 =>
165 166 167 168 169 |
# File 'lib/git/base.rb', line 165 def add_remote(name, url, opts = {}) url = url.repo.path if url.is_a?(Git::Base) self.lib.remote_add(name, url, opts) Git::Remote.new(self, name) end |
#add_tag(name, *options)
Create a new git tag
189 190 191 192 |
# File 'lib/git/base.rb', line 189 def add_tag(name, *) self.lib.tag(name, *) self.tag(name) end |
#apply(file)
558 559 560 561 562 |
# File 'lib/git/base.rb', line 558 def apply(file) if File.exist?(file) self.lib.apply(file) end end |
#apply_mail(file)
564 565 566 |
# File 'lib/git/base.rb', line 564 def apply_mail(file) self.lib.apply_mail(file) if File.exist?(file) end |
#archive(treeish, file = nil, opts = {})
creates an archive file of the given tree-ish
545 546 547 |
# File 'lib/git/base.rb', line 545 def archive(treeish, file = nil, opts = {}) self.object(treeish).archive(file, opts) end |
#branch(branch_name = self.current_branch) ⇒ Git::Branch
Returns an object for branch_name.
683 684 685 |
# File 'lib/git/base.rb', line 683 def branch(branch_name = self.current_branch) Git::Branch.new(self, branch_name) end |
#branches ⇒ Git::Branches
Returns a collection of all the branches in the repository. Each branch is represented as a Git::Branch.
689 690 691 |
# File 'lib/git/base.rb', line 689 def branches Git::Branches.new(self) end |
#cat_file(objectish)
666 667 668 |
# File 'lib/git/base.rb', line 666 def cat_file(objectish) self.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
203 204 205 206 207 |
# File 'lib/git/base.rb', line 203 def chdir # :yields: the Git::Path Dir.chdir(dir.path) do yield dir.path end end |
#checkout(*args, **options)
checks out a branch as the new git working directory
412 413 414 |
# File 'lib/git/base.rb', line 412 def checkout(*args, **) self.lib.checkout(*args, **) end |
#checkout_file(version, file)
checks out an old version of a file
417 418 419 |
# File 'lib/git/base.rb', line 417 def checkout_file(version, file) self.lib.checkout_file(version,file) end |
#checkout_index(opts = {})
602 603 604 |
# File 'lib/git/base.rb', line 602 def checkout_index(opts = {}) self.lib.checkout_index(opts) end |
#clean(opts = {})
cleans the working directory
options: :force :d :ff
358 359 360 |
# File 'lib/git/base.rb', line 358 def clean(opts = {}) self.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
399 400 401 |
# File 'lib/git/base.rb', line 399 def commit(, opts = {}) self.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.
406 407 408 409 |
# File 'lib/git/base.rb', line 406 def commit_all(, opts = {}) opts = {:add_all => true}.merge(opts) self.lib.commit(, opts) end |
#commit_tree(tree = nil, opts = {}) ⇒ Git::Object::Commit
Returns a commit object.
705 706 707 |
# File 'lib/git/base.rb', line 705 def commit_tree(tree = nil, opts = {}) Git::Object::Commit.new(self, 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
214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/git/base.rb', line 214 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
678 679 680 |
# File 'lib/git/base.rb', line 678 def current_branch self.lib.branch_current end |
#delete_tag(name)
deletes a tag
540 541 542 |
# File 'lib/git/base.rb', line 540 def delete_tag(name) self.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
377 378 379 |
# File 'lib/git/base.rb', line 377 def describe(committish=nil, opts={}) self.lib.describe(committish, opts) end |
#diff(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff
Returns a Git::Diff object.
710 711 712 |
# File 'lib/git/base.rb', line 710 def diff(objectish = 'HEAD', obj2 = nil) Git::Diff.new(self, objectish, obj2) end |
#dir
returns a reference to the working directory @git.dir.path @git.dir.writeable?
230 231 232 |
# File 'lib/git/base.rb', line 230 def dir @working_directory end |
#each_conflict(&block)
iterates over the files which are unmerged
461 462 463 |
# File 'lib/git/base.rb', line 461 def each_conflict(&block) # :yields: file, your_version, their_version self.lib.conflicts(&block) 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
423 424 425 426 427 428 429 |
# File 'lib/git/base.rb', line 423 def fetch(remote = 'origin', opts = {}) if remote.is_a?(Hash) opts = remote remote = nil end self.lib.fetch(remote, opts) end |
#gblob(objectish) ⇒ Git::Object
Returns a Git object.
715 716 717 |
# File 'lib/git/base.rb', line 715 def gblob(objectish) Git::Object.new(self, objectish, 'blob') end |
#gc
554 555 556 |
# File 'lib/git/base.rb', line 554 def gc self.lib.gc end |
#gcommit(objectish) ⇒ Git::Object
Returns a Git object.
720 721 722 |
# File 'lib/git/base.rb', line 720 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
322 323 324 |
# File 'lib/git/base.rb', line 322 def grep(string, path_limiter = nil, opts = {}) self.object('HEAD').grep(string, path_limiter, opts) end |
#gtree(objectish) ⇒ Git::Object
Returns a Git object.
725 726 727 |
# File 'lib/git/base.rb', line 725 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
329 330 331 |
# File 'lib/git/base.rb', line 329 def ignored_files self.lib.ignored_files end |
#index
returns reference to the git index file
235 236 237 |
# File 'lib/git/base.rb', line 235 def index @index end |
#is_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists
279 280 281 282 |
# File 'lib/git/base.rb', line 279 def is_branch?(branch) branch_names = self.branches.map {|b| b.name} branch_names.include?(branch) end |
#is_local_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists locally
267 268 269 270 |
# File 'lib/git/base.rb', line 267 def is_local_branch?(branch) branch_names = self.branches.local.map {|b| b.name} branch_names.include?(branch) end |
#is_remote_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists remotely
273 274 275 276 |
# File 'lib/git/base.rb', line 273 def is_remote_branch?(branch) branch_names = self.branches.remote.map {|b| b.name} branch_names.include?(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
287 288 289 |
# File 'lib/git/base.rb', line 287 def lib @lib ||= Git::Lib.new(self, @logger) end |
#log(count = 30) ⇒ Git::Log
Returns a log with the specified number of commits.
730 731 732 |
# File 'lib/git/base.rb', line 730 def log(count = 30) Git::Log.new(self, count) end |
#ls_files(location = nil)
624 625 626 |
# File 'lib/git/base.rb', line 624 def ls_files(location=nil) self.lib.ls_files(location) end |
#ls_tree(objectish, opts = {})
662 663 664 |
# File 'lib/git/base.rb', line 662 def ls_tree(objectish, opts = {}) self.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
456 457 458 |
# File 'lib/git/base.rb', line 456 def merge(branch, = 'merge', opts = {}) self.lib.merge(branch, , opts) end |
#merge_base(*args) ⇒ 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)
767 768 769 770 |
# File 'lib/git/base.rb', line 767 def merge_base(*args) shas = self.lib.merge_base(*args) 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
744 745 746 |
# File 'lib/git/base.rb', line 744 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
484 485 486 |
# File 'lib/git/base.rb', line 484 def pull(remote = nil, branch = nil, opts = {}) self.lib.pull(remote, branch, opts) end |
#push(remote = nil, branch = nil, options = {}) ⇒ Void
Push changes to a remote repository
449 450 451 |
# File 'lib/git/base.rb', line 449 def push(*args, **) self.lib.push(*args, **) end |
#read_tree(treeish, opts = {})
606 607 608 |
# File 'lib/git/base.rb', line 606 def read_tree(treeish, opts = {}) self.lib.read_tree(treeish, opts) end |
#remote(remote_name = 'origin') ⇒ Git::Remote
Returns a remote of the specified name.
749 750 751 |
# File 'lib/git/base.rb', line 749 def remote(remote_name = 'origin') Git::Remote.new(self, remote_name) end |
#remotes
returns an array of Git:Remote objects
489 490 491 |
# File 'lib/git/base.rb', line 489 def remotes self.lib.remotes.map { |r| Git::Remote.new(self, r) } end |
#remove_remote(name)
removes a remote from this repository
@git.remove_remote('scott_git')
507 508 509 |
# File 'lib/git/base.rb', line 507 def remove_remote(name) self.lib.remote_remove(name) end |
#repack
repacks the repository
550 551 552 |
# File 'lib/git/base.rb', line 550 def repack self.lib.repack end |
#repo
returns reference to the git repository directory @git.dir.path
241 242 243 |
# File 'lib/git/base.rb', line 241 def repo @repository end |
#repo_size
returns the repository size in bytes
246 247 248 249 250 251 252 253 254 |
# File 'lib/git/base.rb', line 246 def repo_size Dir.glob(File.join(repo.path, '**', '*'), File::FNM_DOTMATCH).reject do |f| f.include?('..') end.map do |f| File.(f) end.uniq.map do |f| File.stat(f).size.to_i end.reduce(:+) end |
#reset(commitish = nil, opts = {})
resets the working directory to the provided commitish
341 342 343 |
# File 'lib/git/base.rb', line 341 def reset(commitish = nil, opts = {}) self.lib.reset(commitish, opts) end |
#reset_hard(commitish = nil, opts = {})
resets the working directory to the commitish with '--hard'
346 347 348 349 |
# File 'lib/git/base.rb', line 346 def reset_hard(commitish = nil, opts = {}) opts = {:hard => true}.merge(opts) self.lib.reset(commitish, opts) end |
#rev_parse(objectish) Also known as: revparse
runs git rev-parse to convert the objectish to a full sha
655 656 657 |
# File 'lib/git/base.rb', line 655 def rev_parse(objectish) self.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
387 388 389 |
# File 'lib/git/base.rb', line 387 def revert(commitish = nil, opts = {}) self.lib.revert(commitish, opts) end |
#rm(path = '.', opts = {}) Also known as: remove
removes file(s) from the git repository
334 335 336 |
# File 'lib/git/base.rb', line 334 def rm(path = '.', opts = {}) self.lib.rm(path, opts) end |
#set_index(index_file, check = true)
256 257 258 259 |
# File 'lib/git/base.rb', line 256 def set_index(index_file, check = true) @lib = nil @index = Git::Index.new(index_file.to_s, check) 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')
498 499 500 501 502 |
# File 'lib/git/base.rb', line 498 def set_remote_url(name, url) url = url.repo.path if url.is_a?(Git::Base) self.lib.remote_set_url(name, url) Git::Remote.new(self, name) end |
#set_working(work_dir, check = true)
261 262 263 264 |
# File 'lib/git/base.rb', line 261 def set_working(work_dir, check = true) @lib = nil @working_directory = Git::WorkingDirectory.new(work_dir.to_s, check) end |
#show(objectish = nil, path = nil) ⇒ String
Shows objects
573 574 575 |
# File 'lib/git/base.rb', line 573 def show(objectish=nil, path=nil) self.lib.show(objectish, path) end |
#status ⇒ Git::Status
Returns a status object.
754 755 756 |
# File 'lib/git/base.rb', line 754 def status Git::Status.new(self) end |
#tag(tag_name) ⇒ Git::Object::Tag
Returns a tag object.
759 760 761 |
# File 'lib/git/base.rb', line 759 def tag(tag_name) Git::Object.new(self, tag_name, 'tag', true) end |
#tags
returns an array of all Git::Tag objects for this repository
512 513 514 |
# File 'lib/git/base.rb', line 512 def self.lib..map { |r| tag(r) } end |
#update_ref(branch, commit)
619 620 621 |
# File 'lib/git/base.rb', line 619 def update_ref(branch, commit) branch(branch).update_ref(commit) end |
#with_index(new_index)
LOWER LEVEL INDEX OPERATIONS ##
579 580 581 582 583 584 585 |
# File 'lib/git/base.rb', line 579 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(&blk)
587 588 589 590 591 592 593 594 595 596 597 598 599 600 |
# File 'lib/git/base.rb', line 587 def with_temp_index &blk # 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, &blk) end |
#with_temp_working(&blk)
639 640 641 642 643 644 645 646 |
# File 'lib/git/base.rb', line 639 def with_temp_working &blk tempfile = Tempfile.new("temp-workdir") temp_dir = tempfile.path tempfile.close tempfile.unlink Dir.mkdir(temp_dir, 0700) with_working(temp_dir, &blk) end |
#with_working(work_dir)
:yields: the Git::WorkingDirectory
628 629 630 631 632 633 634 635 636 637 |
# File 'lib/git/base.rb', line 628 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
694 695 696 |
# File 'lib/git/base.rb', line 694 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
700 701 702 |
# File 'lib/git/base.rb', line 700 def worktrees Git::Worktrees.new(self) end |
#write_and_commit_tree(opts = {})
614 615 616 617 |
# File 'lib/git/base.rb', line 614 def write_and_commit_tree(opts = {}) tree = write_tree commit_tree(tree, opts) end |
#write_tree
610 611 612 |
# File 'lib/git/base.rb', line 610 def write_tree self.lib.write_tree end |