class Git::Base

Public Class Methods

bare(git_dir, opts = {}) click to toggle source

opens a bare Git Repository - no working directory options

# File lib/arpm/vendor/ruby-git/git/base.rb, line 6
def self.bare(git_dir, opts = {})
  self.new({:repository => git_dir}.merge(opts))
end
clone(repository, name, opts = {}) click to toggle source

clones a git repository locally

repository - http://repo.or.cz/w/sinatra.git
name - sinatra

options:

:repository

 :bare
or 
 :working_directory
 :index_file
# File lib/arpm/vendor/ruby-git/git/base.rb, line 53
def self.clone(repository, name, opts = {})
  # run git-clone
  self.new(Git::Lib.new.clone(repository, name, opts))
end
init(working_dir, opts = {}) click to toggle source

initializes a git repository

options:

:bare
:index
:repository
# File lib/arpm/vendor/ruby-git/git/base.rb, line 23
def self.init(working_dir, opts = {})
  opts[:working_directory] = working_dir if !opts[:working_directory] 
  opts[:repository] = File.join(opts[:working_directory], '.git') if !opts[:repository]
  
  FileUtils.mkdir_p(opts[:working_directory]) if opts[:working_directory] && !File.directory?(opts[:working_directory])
  
  init_opts = {
    :bare => opts[:bare]
  }

  opts.delete(:working_directory) if opts[:bare]

  Git::Lib.new(opts).init(init_opts)
   
  self.new(opts)
end
new(options = {}) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 58
def initialize(options = {})
  if working_dir = options[:working_directory]
    options[:repository] ||= File.join(working_dir, '.git')
    options[:index] ||= File.join(working_dir, '.git', 'index')
  end
  if options[:log]
    @logger = options[:log]
    @logger.info("Starting Git")
  else
    @logger = nil
  end
 
  @working_directory = options[:working_directory] ? Git::WorkingDirectory.new(options[:working_directory]) : nil
  @repository = options[:repository] ? Git::Repository.new(options[:repository]) : nil 
  @index = options[:index] ? Git::Index.new(options[:index], false) : nil
end
open(working_dir, opts={}) click to toggle source

opens a new Git Project from a working directory you can specify non-standard git_dir and index file in the options

# File lib/arpm/vendor/ruby-git/git/base.rb, line 12
def self.open(working_dir, opts={})
  self.new({:working_directory => working_dir}.merge(opts))
end

Public Instance Methods

add(*args) click to toggle source

updates the repository index using the workig dorectory content

@git.add('path/to/file')
@git.add(['path/to/file1','path/to/file2'])
@git.add(:all => true)

options:

:all => true

@param [String,Array] paths files paths to be added (optional, default=‘.’) @param [Hash] options

# File lib/arpm/vendor/ruby-git/git/base.rb, line 259
def add(*args)
  if args[0].instance_of?(String) || args[0].instance_of?(Array)
    self.lib.add(args[0],args[1]||{})
  else
    self.lib.add('.', args[0]||{})
  end
end
add_remote(name, url, opts = {}) click to toggle source

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 => <branch_name>
# File lib/arpm/vendor/ruby-git/git/base.rb, line 388
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, *opts) click to toggle source

Creates a new git tag (Git::Tag) Usage:

repo.add_tag('tag_name', object_reference)
repo.add_tag('tag_name', object_reference, {:options => 'here'})
repo.add_tag('tag_name', {:options => 'here'})

Options:

:a | :annotate -> true
:d             -> true
:f             -> true
:m | :message  -> String
:s             -> true
# File lib/arpm/vendor/ruby-git/git/base.rb, line 424
def add_tag(name, *opts)
  self.lib.tag(name, *opts)
  tag(name)
end
apply(file) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 448
def apply(file)
  if File.exists?(file)
    self.lib.apply(file)
  end
end
apply_mail(file) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 454
def apply_mail(file)
  self.lib.apply_mail(file) if File.exists?(file)
end
archive(treeish, file = nil, opts = {}) click to toggle source

creates an archive file of the given tree-ish

# File lib/arpm/vendor/ruby-git/git/base.rb, line 435
def archive(treeish, file = nil, opts = {})
  self.object(treeish).archive(file, opts)
end
branch(branch_name = 'master') click to toggle source

returns a Git::Branch object for branch_name

# File lib/arpm/vendor/ruby-git/git/base.rb, line 186
def branch(branch_name = 'master')
  Git::Branch.new(self, branch_name)
end
branches() click to toggle source

returns a Git::Branches object of all the Git::Branch objects for this repo

# File lib/arpm/vendor/ruby-git/git/base.rb, line 181
def branches
  Git::Branches.new(self)
end
cat_file(objectish) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 548
def cat_file(objectish)
  self.lib.object_contents(objectish)
end
chdir() { |the Path| ... } click to toggle source

changes current working directory for a block to the git working directory

example

@git.chdir do 
  # write files
  @git.add
  @git.commit('message')
end
# File lib/arpm/vendor/ruby-git/git/base.rb, line 114
def chdir # :yields: the Git::Path
  Dir.chdir(dir.path) do
    yield dir.path
  end
end
checkout(branch = 'master', opts = {}) click to toggle source

checks out a branch as the new git working directory

# File lib/arpm/vendor/ruby-git/git/base.rb, line 324
def checkout(branch = 'master', opts = {})
  self.lib.checkout(branch, opts)
end
checkout_file(version, file) click to toggle source

checks out an old version of a file

# File lib/arpm/vendor/ruby-git/git/base.rb, line 329
def checkout_file(version, file)
  self.lib.checkout_file(version,file)
end
checkout_index(opts = {}) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 483
def checkout_index(opts = {})
  self.lib.checkout_index(opts)
end
clean(opts = {}) click to toggle source

cleans the working directory

options:

:force
:d
# File lib/arpm/vendor/ruby-git/git/base.rb, line 289
def clean(opts = {})
  self.lib.clean(opts)
end
commit(message, opts = {}) click to toggle source

commits all pending changes in the index file to the git repository

options:

:all
:allow_empty
:amend
:author
# File lib/arpm/vendor/ruby-git/git/base.rb, line 311
def commit(message, opts = {})
  self.lib.commit(message, opts)
end
commit_all(message, opts = {}) click to toggle source

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.

# File lib/arpm/vendor/ruby-git/git/base.rb, line 318
def commit_all(message, opts = {})
  opts = {:add_all => true}.merge(opts)
  self.lib.commit(message, opts)
end
commit_tree(tree = nil, opts = {}) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 495
def commit_tree(tree = nil, opts = {})
  Git::Object::Commit.new(self, self.lib.commit_tree(tree, opts))
end
config(name = nil, value = nil) click to toggle source

g.config(‘user.name’, ‘Scott Chacon’) # sets value g.config(‘user.email’, ‘email@email.com’) # sets value g.config(‘user.name’) # returns ‘Scott Chacon’ g.config # returns whole config hash

# File lib/arpm/vendor/ruby-git/git/base.rb, line 131
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() click to toggle source

returns the name of the branch the working directory is currently on

# File lib/arpm/vendor/ruby-git/git/base.rb, line 553
def current_branch
  self.lib.branch_current
end
delete_tag(name) click to toggle source

deletes a tag

# File lib/arpm/vendor/ruby-git/git/base.rb, line 430
def delete_tag(name) 
  self.lib.tag(name, {:d => true})
end
diff(objectish = 'HEAD', obj2 = nil) click to toggle source

returns a Git::Diff object

# File lib/arpm/vendor/ruby-git/git/base.rb, line 244
def diff(objectish = 'HEAD', obj2 = nil)
  Git::Diff.new(self, objectish, obj2)
end
dir() click to toggle source

returns a reference to the working directory

@git.dir.path
@git.dir.writeable?
# File lib/arpm/vendor/ruby-git/git/base.rb, line 79
def dir
  @working_directory
end
each_conflict() { |file, your_version, their_version| ... } click to toggle source

iterates over the files which are unmerged

# File lib/arpm/vendor/ruby-git/git/base.rb, line 359
def each_conflict(&block) # :yields: file, your_version, their_version
  self.lib.conflicts(&block)
end
fetch(remote = 'origin', opts={}) click to toggle source

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

# File lib/arpm/vendor/ruby-git/git/base.rb, line 335
def fetch(remote = 'origin', opts={})
  self.lib.fetch(remote, opts)
end
gblob(objectish) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 166
def gblob(objectish)
  Git::Object.new(self, objectish, 'blob')
end
gc() click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 444
def gc
  self.lib.gc
end
gcommit(objectish) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 162
def gcommit(objectish)
  Git::Object.new(self, objectish, 'commit')
end
grep(string, path_limiter = nil, opts = {}) click to toggle source

will run a grep for ‘string’ on the HEAD of the git repository

to be more surgical in your grep, you can call grep() off a specific git object. for example:

@git.object("v2.3").grep('TODO')

in any case, it returns a hash of arrays of the type:

hsh[tree-ish] = [[line_no, match], [line_no, match2]]
hsh[tree-ish] = [[line_no, match], [line_no, match2]]

so you might use it like this:

@git.grep("TODO").each do |sha, arr|
  puts "in blob #{sha}:"
  arr.each do |match|
    puts "\t line #{match[0]}: '#{match[1]}'"
  end
end
# File lib/arpm/vendor/ruby-git/git/base.rb, line 239
def grep(string, path_limiter = nil, opts = {})
  self.object('HEAD').grep(string, path_limiter, opts)
end
gtree(objectish) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 158
def gtree(objectish)
  Git::Object.new(self, objectish, 'tree')
end
index() click to toggle source

returns reference to the git index file

# File lib/arpm/vendor/ruby-git/git/base.rb, line 90
def index
  @index
end
is_branch?(branch) click to toggle source

returns true if the branch exists

# File lib/arpm/vendor/ruby-git/git/base.rb, line 203
def is_branch?(branch)
  branch_names = self.branches.map {|b| b.name}
  branch_names.include?(branch)
end
is_local_branch?(branch) click to toggle source

returns true if the branch exists locally

# File lib/arpm/vendor/ruby-git/git/base.rb, line 191
def is_local_branch?(branch)
  branch_names = self.branches.local.map {|b| b.name}
  branch_names.include?(branch)
end
is_remote_branch?(branch) click to toggle source

returns true if the branch exists remotely

# File lib/arpm/vendor/ruby-git/git/base.rb, line 197
def is_remote_branch?(branch)
  branch_names = self.branches.local.map {|b| b.name}
  branch_names.include?(branch)
end
lib() click to toggle source

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

# File lib/arpm/vendor/ruby-git/git/base.rb, line 216
def lib
  @lib ||= Git::Lib.new(self, @logger)
end
log(count = 30) click to toggle source

returns a Git::Log object with count commits

# File lib/arpm/vendor/ruby-git/git/base.rb, line 171
def log(count = 30)
  Git::Log.new(self, count)
end
ls_files(location=nil) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 509
def ls_files(location=nil)
  self.lib.ls_files(location)
end
ls_tree(objectish) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 544
def ls_tree(objectish)
  self.lib.ls_tree(objectish)
end
merge(branch, message = 'merge') click to toggle source

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

# File lib/arpm/vendor/ruby-git/git/base.rb, line 354
def merge(branch, message = 'merge')
  self.lib.merge(branch, message)
end
object(objectish) click to toggle source

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.

@git.object calls a factory 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

# File lib/arpm/vendor/ruby-git/git/base.rb, line 154
def object(objectish)
  Git::Object.new(self, objectish)
end
pull(remote='origin', branch='master') click to toggle source

pulls the given branch from the given remote into the current branch

@git.pull                          # pulls from origin/master
@git.pull('upstream')              # pulls from upstream/master
@git.pull('upstream', 'develope')  # pulls from upstream/develop
# File lib/arpm/vendor/ruby-git/git/base.rb, line 369
def pull(remote='origin', branch='master')
                    self.lib.pull(remote, branch)
end
push(remote = 'origin', branch = 'master', opts = {}) click to toggle source

pushes changes to a remote repository - easiest if this is a cloned repository, otherwise you may have to run something like this first to setup the push parameters:

@git.config('remote.remote-name.push', 'refs/heads/master:refs/heads/master')
# File lib/arpm/vendor/ruby-git/git/base.rb, line 344
def push(remote = 'origin', branch = 'master', opts = {})
  # Small hack to keep backwards compatibility with the 'push(remote, branch, tags)' method signature.
  opts = {:tags => opts} if [true, false].include?(opts)

  self.lib.push(remote, branch, opts)
end
read_tree(treeish, opts = {}) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 487
def read_tree(treeish, opts = {})
  self.lib.read_tree(treeish, opts)
end
remote(remote_name = 'origin') click to toggle source

returns a Git::Remote object

# File lib/arpm/vendor/ruby-git/git/base.rb, line 209
def remote(remote_name = 'origin')
  Git::Remote.new(self, remote_name)
end
remotes() click to toggle source

returns an array of Git:Remote objects

# File lib/arpm/vendor/ruby-git/git/base.rb, line 374
def remotes
  self.lib.remotes.map { |r| Git::Remote.new(self, r) }
end
remove(path = '.', opts = {}) click to toggle source

removes file(s) from the git repository

# File lib/arpm/vendor/ruby-git/git/base.rb, line 268
def remove(path = '.', opts = {})
  self.lib.remove(path, opts)
end
remove_remote(name) click to toggle source

removes a remote from this repository

@git.remove_remote(‘scott_git’)

# File lib/arpm/vendor/ruby-git/git/base.rb, line 397
def remove_remote(name)
  self.lib.remote_remove(name)
end
repack() click to toggle source

repacks the repository

# File lib/arpm/vendor/ruby-git/git/base.rb, line 440
def repack
  self.lib.repack
end
repo() click to toggle source

returns reference to the git repository directory

@git.dir.path
# File lib/arpm/vendor/ruby-git/git/base.rb, line 85
def repo
  @repository
end
repo_size() click to toggle source

returns the repository size in bytes

# File lib/arpm/vendor/ruby-git/git/base.rb, line 121
def repo_size
  Dir.chdir(repo.path) do
    return `du -s`.chomp.split.first.to_i
  end
end
reset(commitish = nil, opts = {}) click to toggle source

resets the working directory to the provided commitish

# File lib/arpm/vendor/ruby-git/git/base.rb, line 273
def reset(commitish = nil, opts = {})
  self.lib.reset(commitish, opts)
end
reset_hard(commitish = nil, opts = {}) click to toggle source

resets the working directory to the commitish with ‘–hard’

# File lib/arpm/vendor/ruby-git/git/base.rb, line 278
def reset_hard(commitish = nil, opts = {})
  opts = {:hard => true}.merge(opts)
  self.lib.reset(commitish, opts)
end
revert(commitish = nil, opts = {}) click to toggle source

reverts the working directory to the provided commitish. Accepts a range, such as comittish..HEAD

options:

:no_edit
# File lib/arpm/vendor/ruby-git/git/base.rb, line 299
def revert(commitish = nil, opts = {})
  self.lib.revert(commitish, opts)
end
revparse(objectish) click to toggle source

runs git rev-parse to convert the objectish to a full sha

@git.revparse("HEAD^^")
@git.revparse('v2.4^{tree}')
@git.revparse('v2.4:/doc/index.html')
# File lib/arpm/vendor/ruby-git/git/base.rb, line 540
def revparse(objectish)
  self.lib.revparse(objectish)
end
set_index(index_file, check = true) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 100
def set_index(index_file, check = true)
  @lib = nil
  @index = Git::Index.new(index_file.to_s, check)
end
set_working(work_dir, check = true) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 95
def set_working(work_dir, check = true)
  @lib = nil
  @working_directory = Git::WorkingDirectory.new(work_dir.to_s, check)
end
status() click to toggle source

returns a Git::Status object

# File lib/arpm/vendor/ruby-git/git/base.rb, line 176
def status
  Git::Status.new(self)
end
tag(tag_name) click to toggle source

returns a Git::Tag object

# File lib/arpm/vendor/ruby-git/git/base.rb, line 407
def tag(tag_name)
  Git::Object.new(self, tag_name, 'tag', true)
end
tags() click to toggle source

returns an array of all Git::Tag objects for this repository

# File lib/arpm/vendor/ruby-git/git/base.rb, line 402
def tags
  self.lib.tags.map { |r| tag(r) }
end
update_ref(branch, commit) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 504
def update_ref(branch, commit)
  branch(branch).update_ref(commit)
end
with_index(new_index) { |new_index| ... } click to toggle source

LOWER LEVEL INDEX OPERATIONS ##

# File lib/arpm/vendor/ruby-git/git/base.rb, line 460
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) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 468
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) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 524
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) { |the WorkingDirectory| ... } click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 513
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
write_and_commit_tree(opts = {}) click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 499
def write_and_commit_tree(opts = {})
  tree = write_tree
  commit_tree(tree, opts)
end
write_tree() click to toggle source
# File lib/arpm/vendor/ruby-git/git/base.rb, line 491
def write_tree
  self.lib.write_tree
end