class R10K::Git::ShellGit::WorkingRepository
Manage a non-bare Git repository
Attributes
path[R]
@attribute [r] path
@return [Pathname]
Public Class Methods
new(basedir, dirname)
click to toggle source
# File lib/r10k/git/shellgit/working_repository.rb, line 17 def initialize(basedir, dirname) @path = Pathname.new(File.join(basedir, dirname)) end
Public Instance Methods
alternates()
click to toggle source
# File lib/r10k/git/shellgit/working_repository.rb, line 80 def alternates R10K::Git::Alternates.new(git_dir) end
checkout(ref, opts = {})
click to toggle source
Check out the given Git ref
@param ref [String] The git reference to check out @param opts [Hash] Optional hash of additional options.
# File lib/r10k/git/shellgit/working_repository.rb, line 51 def checkout(ref, opts = {}) argv = ['checkout', ref] # :force defaults to true if !opts.has_key?(:force) || opts[:force] argv << '--force' end git argv, :path => @path.to_s end
clone(remote, opts = {})
click to toggle source
Clone this git repository
@param remote [String] The Git remote to clone @param opts [Hash]
@options opts [String] :ref The git ref to check out on clone @options opts [String] :reference A Git repository to use as an alternate object database
@return [void]
# File lib/r10k/git/shellgit/working_repository.rb, line 30 def clone(remote, opts = {}) argv = ['clone', remote, @path.to_s] if opts[:reference] argv += ['--reference', opts[:reference]] end proxy = R10K::Git.get_proxy_for_remote(remote) R10K::Git.with_proxy(proxy) do git argv end if opts[:ref] checkout(opts[:ref]) end end
dirty?(exclude_spec=true)
click to toggle source
does the working tree have local modifications to tracked files?
# File lib/r10k/git/shellgit/working_repository.rb, line 93 def dirty?(exclude_spec=true) result = git(['diff-index', '--exit-code', '--name-only', 'HEAD'], :path => @path.to_s, :raise_on_fail => false) if result.exit_code != 0 dirty_files = result.stdout.split("\n") dirty_files.delete_if { |f| f.start_with?('spec/') } if exclude_spec dirty_files.each do |file| logger.debug(_("Found local modifications in %{file_path}" % {file_path: File.join(@path, file)})) # Do this in a block so that the extra subprocess only gets invoked when needed. logger.debug1 { git(['diff-index', '-p', 'HEAD', '--', file], :path => @path.to_s, :raise_on_fail => false).stdout } end return dirty_files.size > 0 else return false end end
exist?()
click to toggle source
# File lib/r10k/git/shellgit/working_repository.rb, line 71 def exist? @path.exist? end
fetch(remote_name='origin')
click to toggle source
# File lib/r10k/git/shellgit/working_repository.rb, line 62 def fetch(remote_name='origin') remote = remotes[remote_name] proxy = R10K::Git.get_proxy_for_remote(remote) R10K::Git.with_proxy(proxy) do git ['fetch', remote_name, '--prune'], :path => @path.to_s end end
git_dir()
click to toggle source
@return [Pathname] The path to the Git directory inside of this repository
# File lib/r10k/git/shellgit/working_repository.rb, line 13 def git_dir @path + '.git' end
head()
click to toggle source
@return [String] The currently checked out ref
# File lib/r10k/git/shellgit/working_repository.rb, line 76 def head resolve('HEAD') end
origin()
click to toggle source
@return [String] The origin remote URL
# File lib/r10k/git/shellgit/working_repository.rb, line 85 def origin result = git(['config', '--get', 'remote.origin.url'], :path => @path.to_s, :raise_on_fail => false) if result.success? result.stdout end end