Class: Git::Lib
- Inherits:
-
Object
- Object
- Git::Lib
- Defined in:
- lib/git/lib.rb
Instance Method Summary collapse
- #add(path = '.') ⇒ Object
- #apply(patch_file) ⇒ Object
- #apply_mail(patch_file) ⇒ Object
-
#archive(sha, file = nil, opts = {}) ⇒ Object
creates an archive file.
- #branch_current ⇒ Object
- #branch_delete(branch) ⇒ Object
- #branch_new(branch) ⇒ Object
- #branches_all ⇒ Object
- #change_head_branch(branch_name) ⇒ Object
- #checkout(branch, opts = {}) ⇒ Object
- #checkout_file(version, file) ⇒ Object
- #checkout_index(opts = {}) ⇒ Object
-
#clone(repository, name, opts = {}) ⇒ Object
tries to clone the given repo.
- #commit(message, opts = {}) ⇒ Object
-
#commit_data(sha) ⇒ Object
returns useful array of raw commit object data.
- #commit_tree(tree, opts = {}) ⇒ Object
- #config_get(name) ⇒ Object
- #config_list ⇒ Object
- #config_remote(name) ⇒ Object
-
#config_set(name, value) ⇒ Object
WRITE COMMANDS ##.
-
#conflicts ⇒ Object
:yields: file, your, their.
-
#diff_files ⇒ Object
compares the index and the working directory.
- #diff_full(obj1 = 'HEAD', obj2 = nil, opts = {}) ⇒ Object
-
#diff_index(treeish) ⇒ Object
compares the index and the repository.
- #diff_stats(obj1 = 'HEAD', obj2 = nil, opts = {}) ⇒ Object
- #fetch(remote) ⇒ Object
- #full_log_commits(opts = {}) ⇒ Object
- #full_tree(sha) ⇒ Object
- #gc ⇒ Object
-
#grep(string, opts = {}) ⇒ Object
returns hash [tree-ish] = [[line_no, match], [line_no, match2]] [tree-ish] = [[line_no, match], [line_no, match2]].
- #ignored_files ⇒ Object
- #init ⇒ Object
-
#initialize(base = nil, logger = nil) ⇒ Lib
constructor
A new instance of Lib.
- #list_files(ref_dir) ⇒ Object
- #log_commits(opts = {}) ⇒ Object
- #ls_files ⇒ Object
- #ls_tree(sha) ⇒ Object
- #merge(branch, message = nil) ⇒ Object
- #mv(file1, file2) ⇒ Object
- #namerev(string) ⇒ Object
- #object_contents(sha, &block) ⇒ Object
- #object_size(sha) ⇒ Object
- #object_type(sha) ⇒ Object
- #parse_config(file) ⇒ Object
- #process_commit_data(data, sha = nil, indent = 4) ⇒ Object
- #push(remote, branch = 'master', tags = false) ⇒ Object
-
#read_tree(treeish, opts = {}) ⇒ Object
reads a tree into the current index file.
- #remote_add(name, url, opts = {}) ⇒ Object
-
#remote_remove(name) ⇒ Object
this is documented as such, but seems broken for some reason i’ll try to get around it some other way later.
- #remotes ⇒ Object
- #remove(path = '.', opts = {}) ⇒ Object
- #repack ⇒ Object
- #reset(commit, opts = {}) ⇒ Object
- #revparse(string) ⇒ Object
- #stash_apply(id = nil) ⇒ Object
- #stash_clear ⇒ Object
- #stash_list ⇒ Object
- #stash_save(message) ⇒ Object
- #stashes_all ⇒ Object
- #submodule_add(repository, opts = {}) ⇒ Object
- #submodule_init(path, opts = {}) ⇒ Object
- #submodule_status(path = nil, opts = {}) ⇒ Object
- #submodule_update(path, opts = {}) ⇒ Object
- #tag(tag) ⇒ Object
- #tag_sha(tag_name) ⇒ Object
- #tags ⇒ Object
- #tree_depth(sha) ⇒ Object
- #unmerged ⇒ Object
- #update_ref(branch, commit) ⇒ Object
- #write_tree ⇒ Object
Constructor Details
#initialize(base = nil, logger = nil) ⇒ Lib
Returns a new instance of Lib.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/git/lib.rb', line 10 def initialize(base = nil, logger = nil) @git_dir = nil @git_index_file = nil @git_work_dir = nil @path = nil if base.is_a?(Git::Base) @git_dir = base.repo.path @git_index_file = base.index.path if base.index @git_work_dir = base.dir.path if base.dir elsif base.is_a?(Hash) @git_dir = base[:repository] @git_index_file = base[:index] @git_work_dir = base[:working_directory] end @logger = logger end |
Instance Method Details
#add(path = '.') ⇒ Object
366 367 368 369 370 371 372 373 374 |
# File 'lib/git/lib.rb', line 366 def add(path = '.') arr_opts = ['--'] if path.is_a?(Array) arr_opts += path else arr_opts << path end command('add', arr_opts) end |
#apply(patch_file) ⇒ Object
404 405 406 407 408 |
# File 'lib/git/lib.rb', line 404 def apply(patch_file) arr_opts = [] arr_opts << '--' << patch_file if patch_file command('apply', arr_opts) end |
#apply_mail(patch_file) ⇒ Object
410 411 412 413 414 |
# File 'lib/git/lib.rb', line 410 def apply_mail(patch_file) arr_opts = [] arr_opts << '--' << patch_file if patch_file command('am', arr_opts) end |
#archive(sha, file = nil, opts = {}) ⇒ Object
creates an archive file
options
:format (zip, tar)
:prefix
:remote
:path
598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 |
# File 'lib/git/lib.rb', line 598 def archive(sha, file = nil, opts = {}) opts[:format] ||= 'zip' if opts[:format] == 'tgz' opts[:format] = 'tar' opts[:add_gzip] = true end file ||= Tempfile.new('archive').path arr_opts = [] arr_opts << "--format=#{opts[:format]}" if opts[:format] arr_opts << "--prefix=#{opts[:prefix]}" if opts[:prefix] arr_opts << "--remote=#{opts[:remote]}" if opts[:remote] arr_opts << sha arr_opts << '--' << opts[:path] if opts[:path] command('archive', arr_opts, true, (opts[:add_gzip] ? '| gzip' : '') + " > #{escape file}") return file end |
#branch_current ⇒ Object
215 216 217 |
# File 'lib/git/lib.rb', line 215 def branch_current branches_all.select { |b| b[1] }.first[0] rescue nil end |
#branch_delete(branch) ⇒ Object
453 454 455 |
# File 'lib/git/lib.rb', line 453 def branch_delete(branch) command('branch', ['-D', branch]) end |
#branch_new(branch) ⇒ Object
449 450 451 |
# File 'lib/git/lib.rb', line 449 def branch_new(branch) command('branch', branch) end |
#branches_all ⇒ Object
199 200 201 202 203 204 205 206 |
# File 'lib/git/lib.rb', line 199 def branches_all arr = [] command_lines('branch', '-a').each do |b| current = (b[0, 2] == '* ') arr << [b.gsub('* ', '').strip, current] end arr end |
#change_head_branch(branch_name) ⇒ Object
195 196 197 |
# File 'lib/git/lib.rb', line 195 def change_head_branch(branch_name) command('symbolic-ref', ['HEAD', "refs/heads/#{branch_name}"]) end |
#checkout(branch, opts = {}) ⇒ Object
457 458 459 460 461 462 463 464 |
# File 'lib/git/lib.rb', line 457 def checkout(branch, opts = {}) arr_opts = [] arr_opts << '-f' if opts[:force] arr_opts << '-b' << opts[:new_branch] if opts[:new_branch] arr_opts << branch command('checkout', arr_opts) end |
#checkout_file(version, file) ⇒ Object
466 467 468 469 470 471 |
# File 'lib/git/lib.rb', line 466 def checkout_file(version, file) arr_opts = [] arr_opts << version arr_opts << file command('checkout', arr_opts) end |
#checkout_index(opts = {}) ⇒ Object
581 582 583 584 585 586 587 588 589 |
# File 'lib/git/lib.rb', line 581 def checkout_index(opts = {}) arr_opts = [] arr_opts << "--prefix=#{opts[:prefix]}" if opts[:prefix] arr_opts << "--force" if opts[:force] arr_opts << "--all" if opts[:all] arr_opts << '--' << opts[:path_limiter] if opts[:path_limiter].is_a? String command('checkout-index', arr_opts) end |
#clone(repository, name, opts = {}) ⇒ Object
tries to clone the given repo
returns :repository (if bare)
{:working_directory} otherwise
accepts options:
:remote:: name of remote (rather than 'origin')
:bare:: no working directory
:depth:: the number of commits back to pull
TODO - make this work with SSH password or auth_key
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/git/lib.rb', line 44 def clone(repository, name, opts = {}) @path = opts[:path] || '.' clone_dir = opts[:path] ? File.join(@path, name) : name @logger = opts[:log] arr_opts = [] arr_opts << "--bare" if opts[:bare] arr_opts << "-o" << opts[:remote] if opts[:remote] arr_opts << "--depth" << opts[:depth].to_i if opts[:depth] && opts[:depth].to_i > 0 arr_opts << '--' arr_opts << repository arr_opts << clone_dir command('clone', arr_opts) opts[:bare] ? {:repository => clone_dir, :log => opts[:log]} : {:working_directory => clone_dir, :log => opts[:log]} end |
#commit(message, opts = {}) ⇒ Object
389 390 391 392 393 394 395 |
# File 'lib/git/lib.rb', line 389 def commit(, opts = {}) arr_opts = ['-m', ] arr_opts << '-a' if opts[:add_all] arr_opts << '--allow-empty' if opts[:allow_empty] arr_opts << "--author" << opts[:author] if opts[:author] command('commit', arr_opts) end |
#commit_data(sha) ⇒ Object
returns useful array of raw commit object data
121 122 123 124 125 |
# File 'lib/git/lib.rb', line 121 def commit_data(sha) sha = sha.to_s cdata = command_lines('cat-file', ['commit', sha]) process_commit_data(cdata, sha, 0) end |
#commit_tree(tree, opts = {}) ⇒ Object
564 565 566 567 568 569 570 571 572 573 574 575 |
# File 'lib/git/lib.rb', line 564 def commit_tree(tree, opts = {}) opts[:message] ||= "commit tree #{tree}" t = Tempfile.new('commit-message') t.write(opts[:message]) t.close arr_opts = [] arr_opts << tree arr_opts << '-p' << opts[:parent] if opts[:parent] arr_opts += [opts[:parents]].map { |p| ['-p', p] }.flatten if opts[:parents] command('commit-tree', arr_opts, true, "< #{escape t.path}") end |
#config_get(name) ⇒ Object
324 325 326 327 |
# File 'lib/git/lib.rb', line 324 def config_get(name) config_list[name] #command('config', ['--get', name]) end |
#config_list ⇒ Object
329 330 331 332 333 334 335 336 337 338 339 |
# File 'lib/git/lib.rb', line 329 def config_list config = {} config.merge!(parse_config('~/.gitconfig')) config.merge!(parse_config(File.join(@git_dir, 'config'))) #hsh = {} #command_lines('config', ['--list']).each do |line| # (key, value) = line.split('=') # hsh[key] = value #end #hsh end |
#config_remote(name) ⇒ Object
314 315 316 317 318 319 320 321 322 |
# File 'lib/git/lib.rb', line 314 def config_remote(name) hsh = {} config_list.each do |key, value| if /remote.#{name}/.match(key) hsh[key.gsub("remote.#{name}.", '')] = value end end hsh end |
#config_set(name, value) ⇒ Object
WRITE COMMANDS ##
362 363 364 |
# File 'lib/git/lib.rb', line 362 def config_set(name, value) command('config', [name, value]) end |
#conflicts ⇒ Object
:yields: file, your, their
488 489 490 491 492 493 494 495 496 497 |
# File 'lib/git/lib.rb', line 488 def conflicts # :yields: file, your, their self.unmerged.each do |f| your = Tempfile.new("YOUR-#{File.basename(f)}").path command('show', ":2:#{f}", true, "> #{escape your}") their = Tempfile.new("THEIR-#{File.basename(f)}").path command('show', ":3:#{f}", true, "> #{escape their}") yield(f, your, their) end end |
#diff_files ⇒ Object
compares the index and the working directory
274 275 276 277 278 279 280 281 282 283 |
# File 'lib/git/lib.rb', line 274 def diff_files hsh = {} command_lines('diff-files').each do |line| (info, file) = line.split("\t") (mode_src, mode_dest, sha_src, sha_dest, type) = info.split hsh[file] = {:path => file, :mode_file => mode_src.to_s[1, 7], :mode_index => mode_dest, :sha_file => sha_src, :sha_index => sha_dest, :type => type} end hsh end |
#diff_full(obj1 = 'HEAD', obj2 = nil, opts = {}) ⇒ Object
244 245 246 247 248 249 250 251 |
# File 'lib/git/lib.rb', line 244 def diff_full(obj1 = 'HEAD', obj2 = nil, opts = {}) diff_opts = ['-p'] diff_opts << obj1 diff_opts << obj2 if obj2.is_a?(String) diff_opts << '--' << opts[:path_limiter] if opts[:path_limiter].is_a? String command('diff', diff_opts) end |
#diff_index(treeish) ⇒ Object
compares the index and the repository
286 287 288 289 290 291 292 293 294 295 |
# File 'lib/git/lib.rb', line 286 def diff_index(treeish) hsh = {} command_lines('diff-index', treeish).each do |line| (info, file) = line.split("\t") (mode_src, mode_dest, sha_src, sha_dest, type) = info.split hsh[file] = {:path => file, :mode_repo => mode_src.to_s[1, 7], :mode_index => mode_dest, :sha_repo => sha_src, :sha_index => sha_dest, :type => type} end hsh end |
#diff_stats(obj1 = 'HEAD', obj2 = nil, opts = {}) ⇒ Object
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 |
# File 'lib/git/lib.rb', line 253 def diff_stats(obj1 = 'HEAD', obj2 = nil, opts = {}) diff_opts = ['--numstat'] diff_opts << obj1 diff_opts << obj2 if obj2.is_a?(String) diff_opts << '--' << opts[:path_limiter] if opts[:path_limiter].is_a? String hsh = {:total => {:insertions => 0, :deletions => 0, :lines => 0, :files => 0}, :files => {}} command_lines('diff', diff_opts).each do |file| (insertions, deletions, filename) = file.split("\t") hsh[:total][:insertions] += insertions.to_i hsh[:total][:deletions] += deletions.to_i hsh[:total][:lines] = (hsh[:total][:deletions] + hsh[:total][:insertions]) hsh[:total][:files] += 1 hsh[:files][filename] = {:insertions => insertions.to_i, :deletions => deletions.to_i} end hsh end |
#fetch(remote) ⇒ Object
528 529 530 |
# File 'lib/git/lib.rb', line 528 def fetch(remote) command('fetch', remote) end |
#full_log_commits(opts = {}) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/git/lib.rb', line 81 def full_log_commits(opts = {}) arr_opts = ['--pretty=raw'] arr_opts << "-#{opts[:count]}" if opts[:count] arr_opts << "--skip=#{opts[:skip]}" if opts[:skip] arr_opts << "--since=#{opts[:since]}" if opts[:since].is_a? String arr_opts << "--until=#{opts[:until]}" if opts[:until].is_a? String arr_opts << "--grep=#{opts[:grep]}" if opts[:grep].is_a? String arr_opts << "--author=#{opts[:author]}" if opts[:author].is_a? String arr_opts << "#{opts[:between][0].to_s}..#{opts[:between][1].to_s}" if (opts[:between] && opts[:between].size == 2) arr_opts << opts[:object] if opts[:object].is_a? String arr_opts << '--' << opts[:path_limiter] if opts[:path_limiter].is_a? String full_log = command_lines('log', arr_opts, true) process_commit_data(full_log) end |
#full_tree(sha) ⇒ Object
187 188 189 |
# File 'lib/git/lib.rb', line 187 def full_tree(sha) command_lines('ls-tree', ['-r', sha]) end |
#gc ⇒ Object
548 549 550 |
# File 'lib/git/lib.rb', line 548 def gc command('gc', ['--prune', '--aggressive', '--auto']) end |
#grep(string, opts = {}) ⇒ Object
returns hash
- tree-ish
-
[[line_no, match], [line_no, match2]]
- tree-ish
-
[[line_no, match], [line_no, match2]]
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
# File 'lib/git/lib.rb', line 223 def grep(string, opts = {}) opts[:object] ||= 'HEAD' grep_opts = ['-n'] grep_opts << '-i' if opts[:ignore_case] grep_opts << '-v' if opts[:invert_match] grep_opts << '-e' grep_opts << string grep_opts << opts[:object] if opts[:object].is_a?(String) grep_opts << '--' << opts[:path_limiter] if opts[:path_limiter].is_a? String hsh = {} command_lines('grep', grep_opts).each do |line| if m = /(.*)\:(\d+)\:(.*)/.match(line) hsh[m[1]] ||= [] hsh[m[1]] << [m[2].to_i, m[3]] end end hsh end |
#ignored_files ⇒ Object
309 310 311 |
# File 'lib/git/lib.rb', line 309 def ignored_files command_lines('ls-files', ['--others', '-i', '--exclude-standard']) end |
#init ⇒ Object
28 29 30 |
# File 'lib/git/lib.rb', line 28 def init command('init') end |
#list_files(ref_dir) ⇒ Object
208 209 210 211 212 213 |
# File 'lib/git/lib.rb', line 208 def list_files(ref_dir) dir = File.join(@git_dir, 'refs', ref_dir) files = [] Dir.chdir(dir) { files = Dir.glob('**/*').select { |f| File.file?(f) } } rescue nil files end |
#log_commits(opts = {}) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/git/lib.rb', line 67 def log_commits(opts = {}) arr_opts = ['--pretty=oneline'] arr_opts << "-#{opts[:count]}" if opts[:count] arr_opts << "--since=#{opts[:since]}" if opts[:since].is_a? String arr_opts << "--until=#{opts[:until]}" if opts[:until].is_a? String arr_opts << "--grep=#{opts[:grep]}" if opts[:grep].is_a? String arr_opts << "--author=#{opts[:author]}" if opts[:author].is_a? String arr_opts << "#{opts[:between][0].to_s}..#{opts[:between][1].to_s}" if (opts[:between] && opts[:between].size == 2) arr_opts << opts[:object] if opts[:object].is_a? String arr_opts << '--' << opts[:path_limiter] if opts[:path_limiter].is_a? String command_lines('log', arr_opts, true).map { |l| l.split.first } end |
#ls_files ⇒ Object
297 298 299 300 301 302 303 304 305 306 |
# File 'lib/git/lib.rb', line 297 def ls_files hsh = {} command_lines('ls-files', '--stage').each do |line| (info, file) = line.split("\t") (mode, sha, stage) = info.split file = eval(file) if file =~ /^\".*\"$/ # This takes care of quoted strings returned from git hsh[file] = {:path => file, :mode_index => mode, :sha_index => sha, :stage => stage} end hsh end |
#ls_tree(sha) ⇒ Object
171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/git/lib.rb', line 171 def ls_tree(sha) data = {'blob' => {}, 'tree' => {}} command_lines('ls-tree', sha).each do |line| (info, filenm) = line.split("\t") (mode, type, sha) = info.split data[type][filenm] = {:mode => mode, :sha => sha} end data end |
#merge(branch, message = nil) ⇒ Object
473 474 475 476 477 478 |
# File 'lib/git/lib.rb', line 473 def merge(branch, = nil) arr_opts = [] arr_opts << '-m' << if arr_opts += [branch] command('merge', arr_opts) end |
#mv(file1, file2) ⇒ Object
183 184 185 |
# File 'lib/git/lib.rb', line 183 def mv(file1, file2) command_lines('mv', ['--', file1, file2]) end |
#namerev(string) ⇒ Object
108 109 110 |
# File 'lib/git/lib.rb', line 108 def namerev(string) command('name-rev', string).split[1] end |
#object_contents(sha, &block) ⇒ Object
167 168 169 |
# File 'lib/git/lib.rb', line 167 def object_contents(sha, &block) command('cat-file', ['-p', sha], &block) end |
#object_size(sha) ⇒ Object
116 117 118 |
# File 'lib/git/lib.rb', line 116 def object_size(sha) command('cat-file', ['-s', sha]).to_i end |
#object_type(sha) ⇒ Object
112 113 114 |
# File 'lib/git/lib.rb', line 112 def object_type(sha) command('cat-file', ['-t', sha]) end |
#parse_config(file) ⇒ Object
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 |
# File 'lib/git/lib.rb', line 341 def parse_config(file) hsh = {} file = File.(file) if File.file?(file) current_section = nil File.readlines(file).each do |line| if m = /\[(\w+)\]/.match(line) current_section = m[1] elsif m = /\[(\w+?) "(.*?)"\]/.match(line) current_section = "#{m[1]}.#{m[2]}" elsif m = /(\w+?) = (.*)/.match(line) key = "#{current_section}.#{m[1]}" hsh[key] = m[2] end end end hsh end |
#process_commit_data(data, sha = nil, indent = 4) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/git/lib.rb', line 127 def process_commit_data(data, sha = nil, indent = 4) = false if sha hsh = {'sha' => sha, 'message' => '', 'parent' => []} else hsh_array = [] end data.each do |line| line = line.chomp if line == '' = ! elsif hsh['message'] << line[indent..-1] << "\n" else data = line.split key = data.shift value = data.join(' ') if key == 'commit' sha = value hsh_array << hsh if hsh hsh = {'sha' => sha, 'message' => '', 'parent' => []} end if key == 'parent' hsh[key] << value else hsh[key] = value end end end if hsh_array hsh_array << hsh if hsh hsh_array else hsh end end |
#push(remote, branch = 'master', tags = false) ⇒ Object
532 533 534 535 |
# File 'lib/git/lib.rb', line 532 def push(remote, branch = 'master', = false) command('push', [remote, branch]) command('push', ['--tags', remote]) if end |
#read_tree(treeish, opts = {}) ⇒ Object
reads a tree into the current index file
553 554 555 556 557 558 |
# File 'lib/git/lib.rb', line 553 def read_tree(treeish, opts = {}) arr_opts = [] arr_opts << "--prefix=#{opts[:prefix]}" if opts[:prefix] arr_opts += [treeish] command('read-tree', arr_opts) end |
#remote_add(name, url, opts = {}) ⇒ Object
499 500 501 502 503 504 505 506 507 |
# File 'lib/git/lib.rb', line 499 def remote_add(name, url, opts = {}) arr_opts = ['add'] arr_opts << '-f' if opts[:with_fetch] arr_opts << '--' arr_opts << name arr_opts << url command('remote', arr_opts) end |
#remote_remove(name) ⇒ Object
this is documented as such, but seems broken for some reason i’ll try to get around it some other way later
511 512 513 |
# File 'lib/git/lib.rb', line 511 def remote_remove(name) command('remote', ['rm', '--', name]) end |
#remotes ⇒ Object
515 516 517 |
# File 'lib/git/lib.rb', line 515 def remotes command_lines('remote') end |
#remove(path = '.', opts = {}) ⇒ Object
376 377 378 379 380 381 382 383 384 385 386 387 |
# File 'lib/git/lib.rb', line 376 def remove(path = '.', opts = {}) arr_opts = ['-f'] # overrides the up-to-date check by default arr_opts << ['-r'] if opts[:recursive] arr_opts << '--' if path.is_a?(Array) arr_opts += path else arr_opts << path end command('rm', arr_opts) end |
#repack ⇒ Object
544 545 546 |
# File 'lib/git/lib.rb', line 544 def repack command('repack', ['-a', '-d']) end |
#reset(commit, opts = {}) ⇒ Object
397 398 399 400 401 402 |
# File 'lib/git/lib.rb', line 397 def reset(commit, opts = {}) arr_opts = [] arr_opts << '--hard' if opts[:hard] arr_opts << commit if commit command('reset', arr_opts) end |
#revparse(string) ⇒ Object
97 98 99 100 101 102 103 104 105 106 |
# File 'lib/git/lib.rb', line 97 def revparse(string) return string if string =~ /[A-Fa-f0-9]{40}/ # passing in a sha - just no-op it rev = ['head', 'remotes', 'tags'].map do |d| File.join(@git_dir, 'refs', d, string) end.find do |path| File.file?(path) end return File.read(rev).chomp if rev command('rev-parse', string) end |
#stash_apply(id = nil) ⇒ Object
433 434 435 436 437 438 439 |
# File 'lib/git/lib.rb', line 433 def stash_apply(id = nil) if id command('stash apply', [id]) else command('stash apply') end end |
#stash_clear ⇒ Object
441 442 443 |
# File 'lib/git/lib.rb', line 441 def stash_clear command('stash clear') end |
#stash_list ⇒ Object
445 446 447 |
# File 'lib/git/lib.rb', line 445 def stash_list command('stash list') end |
#stash_save(message) ⇒ Object
428 429 430 431 |
# File 'lib/git/lib.rb', line 428 def stash_save() output = command('stash save', ['--', ]) output =~ /HEAD is now at/ end |
#stashes_all ⇒ Object
416 417 418 419 420 421 422 423 424 425 426 |
# File 'lib/git/lib.rb', line 416 def stashes_all arr = [] filename = File.join(@git_dir, 'logs/refs/stash') if File.exist?(filename) File.open(filename).each_with_index { |line, i| m = line.match(/:(.*)$/) arr << [i, m[1].strip] } end arr end |
#submodule_add(repository, opts = {}) ⇒ Object
627 628 629 630 631 632 633 634 635 |
# File 'lib/git/lib.rb', line 627 def submodule_add(repository, opts = {}) arr_opts = [] arr_opts << '--quiet' if opts[:quiet] arr_opts << "-b #{opts[:branch]}" if opts[:branch] arr_opts << '--' arr_opts << repository arr_opts << opts[:path] if opts[:path] submodule_command('add', arr_opts) end |
#submodule_init(path, opts = {}) ⇒ Object
637 638 639 640 641 642 643 |
# File 'lib/git/lib.rb', line 637 def submodule_init(path, opts = {}) arr_opts = [] arr_opts << '--quiet' if opts[:quiet] arr_opts << '--' arr_opts << path submodule_command('init', arr_opts) end |
#submodule_status(path = nil, opts = {}) ⇒ Object
619 620 621 622 623 624 625 |
# File 'lib/git/lib.rb', line 619 def submodule_status(path = nil, opts = {}) arr_opts = [] arr_opts << '--quiet' if opts[:quiet] arr_opts << '--cached' if opts[:cached] arr_opts << path if path submodule_command('status', arr_opts) end |
#submodule_update(path, opts = {}) ⇒ Object
645 646 647 648 649 650 651 |
# File 'lib/git/lib.rb', line 645 def submodule_update(path, opts = {}) arr_opts = [] arr_opts << '--quiet' if opts[:quiet] arr_opts << '--' arr_opts << path submodule_command('update', arr_opts) end |
#tag(tag) ⇒ Object
523 524 525 |
# File 'lib/git/lib.rb', line 523 def tag(tag) command('tag', tag) end |
#tag_sha(tag_name) ⇒ Object
537 538 539 540 541 542 |
# File 'lib/git/lib.rb', line 537 def tag_sha(tag_name) head = File.join(@git_dir, 'refs', 'tags', tag_name) return File.read(head).chomp if File.exists?(head) command('show-ref', ['--tags', '-s', tag_name]) end |
#tags ⇒ Object
519 520 521 |
# File 'lib/git/lib.rb', line 519 def command_lines('tag') end |
#tree_depth(sha) ⇒ Object
191 192 193 |
# File 'lib/git/lib.rb', line 191 def tree_depth(sha) full_tree(sha).size end |
#unmerged ⇒ Object
480 481 482 483 484 485 486 |
# File 'lib/git/lib.rb', line 480 def unmerged unmerged = [] command_lines('diff', ["--cached"]).each do |line| unmerged << $1 if line =~ /^\* Unmerged path (.*)/ end unmerged end |
#update_ref(branch, commit) ⇒ Object
577 578 579 |
# File 'lib/git/lib.rb', line 577 def update_ref(branch, commit) command('update-ref', [branch, commit]) end |
#write_tree ⇒ Object
560 561 562 |
# File 'lib/git/lib.rb', line 560 def write_tree command('write-tree') end |