Module: Hub::Commands
Overview
The Commands module houses the git commands that hub lovingly wraps. If a method exists here, it is expected to have a corresponding git command which either gets run before or after the method executes.
The typical flow is as follows:
-
hub is invoked from the command line: $ hub clone rtomayko/tilt
-
The Hub class is initialized: >> hub = Hub.new(‘clone’, ‘rtomayko/tilt’)
-
The method representing the git subcommand is executed with the full args: >> Commands.clone(‘clone’, ‘rtomayko/tilt’)
-
That method rewrites the args as it sees fit: >> args = “git://github.com/” + args + “.git”
> “git://github.com/rtomayko/tilt.git”
-
The new args are used to run ‘git`: >> exec “git”, “clone”, “git://github.com/rtomayko/tilt.git”
An optional ‘after` callback can be set. If so, it is run after step 5 (which then performs a `system` call rather than an `exec`). See `Hub::Args` for more information on the `after` callback.
Constant Summary collapse
- NAME_RE =
/\w[\w.-]*/
- OWNER_RE =
/[a-zA-Z0-9-]+/
- NAME_WITH_OWNER_RE =
/^(?:#{NAME_RE}|#{OWNER_RE}\/#{NAME_RE})$/
- CUSTOM_COMMANDS =
%w[alias create browse compare fork pull-request]
Constants included from Context
Instance Method Summary collapse
- #alias(args) ⇒ Object
-
#am(args) ⇒ Object
(also: #apply)
$ hub am github.com/defunkt/hub/pull/55 > curl github.com/defunkt/hub/pull/55.patch -o /tmp/55.patch > git am /tmp/55.patch.
-
#browse(args) ⇒ Object
$ hub browse > open github.com/CURRENT_REPO.
-
#checkout(args) ⇒ Object
$ git checkout github.com/defunkt/hub/pull/73 > git remote add -f -t feature git://github:com/mislav/hub.git > git checkout –track -B mislav-feature mislav/feature.
-
#cherry_pick(args) ⇒ Object
$ git cherry-pick github.com/mislav/hub/commit/a319d88#comments > git remote add -f mislav git://github.com/mislav/hub.git > git cherry-pick a319d88.
-
#clone(args) ⇒ Object
$ hub clone rtomayko/tilt > git clone git://github.com/rtomayko/tilt.
-
#compare(args) ⇒ Object
$ hub compare 1.0..fix > open github.com/CURRENT_REPO/compare/1.0…fix $ hub compare refactor > open github.com/CURRENT_REPO/compare/refactor $ hub compare myfork feature > open github.com/myfork/REPO/compare/feature $ hub compare -u 1.0…2.0 “github.com/CURRENT_REPO/compare/1.0…2.0”.
-
#create(args) ⇒ Object
$ hub create …
-
#fetch(args) ⇒ Object
$ hub fetch mislav > git remote add mislav git://github.com/mislav/REPO.git > git fetch mislav.
-
#fork(args) ⇒ Object
$ hub fork …
-
#help(args) ⇒ Object
(also: #--help)
$ hub help (print improved help text).
-
#hub(args) ⇒ Object
$ hub hub standalone Prints the “standalone” version of hub for an easy, memorable installation sequence:.
-
#init(args) ⇒ Object
$ hub init -g > git init > git remote add origin [email protected]:USER/REPO.git.
-
#merge(args) ⇒ Object
$ git merge github.com/defunkt/hub/pull/73 > git fetch git://github.com/mislav/hub.git +refs/heads/feature:refs/remotes/mislav/feature > git merge mislav/feature –no-ff -m ‘Merge pull request #73 from mislav/feature…’.
-
#pull_request(args) ⇒ Object
$ hub pull-request $ hub pull-request “My humble contribution” $ hub pull-request -i 92 $ hub pull-request github.com/rtomayko/tilt/issues/92.
-
#push(args) ⇒ Object
$ hub push origin,staging cool-feature > git push origin cool-feature > git push staging cool-feature.
-
#remote(args) ⇒ Object
$ hub remote add pjhyett > git remote add pjhyett git://github.com/pjhyett/THIS_REPO.git.
- #run(args) ⇒ Object
-
#submodule(args) ⇒ Object
$ hub submodule add wycats/bundler vendor/bundler > git submodule add git://github.com/wycats/bundler.git vendor/bundler.
-
#version(args) ⇒ Object
(also: #--version)
$ hub version > git version (print hub version).
Methods included from Hub::Context::System
#browser_launcher, #command?, #osx?, #which, #windows?
Methods included from Hub::Context::GitReaderMethods
Instance Method Details
#alias(args) ⇒ Object
653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 |
# File 'lib/hub/commands.rb', line 653 def alias(args) shells = %w[bash zsh sh ksh csh fish] script = !!args.delete('-s') shell = args[1] || ENV['SHELL'] abort "hub alias: unknown shell" if shell.nil? or shell.empty? shell = File.basename shell unless shells.include? shell $stderr.puts "hub alias: unsupported shell" warn "supported shells: #{shells.join(' ')}" abort end if script puts "alias git=hub" if 'zsh' == shell puts "if type compdef >/dev/null; then" puts " compdef hub=git" puts "fi" end else profile = case shell when 'bash' then '~/.bash_profile' when 'zsh' then '~/.zshrc' when 'ksh' then '~/.profile' else 'your profile' end puts "# Wrap git automatically by adding the following to #{profile}:" puts puts 'eval "$(hub alias -s)"' end exit end |
#am(args) ⇒ Object Also known as: apply
$ hub am github.com/defunkt/hub/pull/55 > curl github.com/defunkt/hub/pull/55.patch -o /tmp/55.patch > git am /tmp/55.patch
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 |
# File 'lib/hub/commands.rb', line 427 def am(args) if url = args.find { |a| a =~ %r{^https?://(gist\.)?github\.com/} } idx = args.index(url) gist = $1 == 'gist.' # strip the fragment part of the url url = url.sub(/#.+/, '') # strip extra path from "pull/42/files", "pull/42/commits" url = url.sub(%r{(/pull/\d+)/\w*$}, '\1') unless gist ext = gist ? '.txt' : '.patch' url += ext unless File.extname(url) == ext patch_file = File.join(ENV['TMPDIR'] || '/tmp', "#{gist ? 'gist-' : ''}#{File.basename(url)}") args.before 'curl', ['-#LA', "hub #{Hub::Version}", url, '-o', patch_file] args[idx] = patch_file end end |
#browse(args) ⇒ Object
$ hub browse > open github.com/CURRENT_REPO
$ hub browse – issues > open github.com/CURRENT_REPO/issues
$ hub browse pjhyett/github-services > open github.com/pjhyett/github-services
$ hub browse github-services > open github.com/YOUR_LOGIN/github-services
$ hub browse github-services wiki > open github.com/YOUR_LOGIN/github-services/wiki
570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 |
# File 'lib/hub/commands.rb', line 570 def browse(args) args.shift browse_command(args) do dest = args.shift dest = nil if dest == '--' if dest # $ hub browse pjhyett/github-services # $ hub browse github-services project = github_project dest branch = master_branch else # $ hub browse project = current_project branch = current_branch && current_branch.upstream || master_branch end abort "Usage: hub browse [<USER>/]<REPOSITORY>" unless project # $ hub browse -- wiki path = case subpage = args.shift when 'commits' "/commits/#{branch.short_name}" when 'tree', NilClass "/tree/#{branch.short_name}" if branch and !branch.master? else "/#{subpage}" end project.web_url(path) end end |
#checkout(args) ⇒ Object
$ git checkout github.com/defunkt/hub/pull/73 > git remote add -f -t feature git://github:com/mislav/hub.git > git checkout –track -B mislav-feature mislav/feature
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 |
# File 'lib/hub/commands.rb', line 340 def checkout(args) _, url_arg, new_branch_name = args.words if url = resolve_github_url(url_arg) and url.project_path =~ /^pull\/(\d+)/ pull_id = $1 pull_data = api_client.pullrequest_info(url.project, pull_id) args.delete new_branch_name user, branch = pull_data['head']['label'].split(':', 2) abort "Error: #{user}'s fork is not available anymore" unless pull_data['head']['repo'] new_branch_name ||= "#{user}-#{branch}" if remotes.include? user args.before ['remote', 'set-branches', '--add', user, branch] args.before ['fetch', user, "+refs/heads/#{branch}:refs/remotes/#{user}/#{branch}"] else url = github_project(url.project_name, user).git_url(:private => pull_data['head']['repo']['private'], :https => https_protocol?) args.before ['remote', 'add', '-f', '-t', branch, user, url] end idx = args.index url_arg args.delete_at idx args.insert idx, '--track', '-B', new_branch_name, "#{user}/#{branch}" end end |
#cherry_pick(args) ⇒ Object
$ git cherry-pick github.com/mislav/hub/commit/a319d88#comments > git remote add -f mislav git://github.com/mislav/hub.git > git cherry-pick a319d88
$ git cherry-pick mislav@a319d88 > git remote add -f mislav git://github.com/mislav/hub.git > git cherry-pick a319d88
$ git cherry-pick mislav@SHA > git fetch mislav > git cherry-pick SHA
401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 |
# File 'lib/hub/commands.rb', line 401 def cherry_pick(args) unless args.include?('-m') or args.include?('--mainline') ref = args.words.last if url = resolve_github_url(ref) and url.project_path =~ /^commit\/([a-f0-9]{7,40})/ sha = $1 project = url.project elsif ref =~ /^(#{OWNER_RE})@([a-f0-9]{7,40})$/ owner, sha = $1, $2 project = local_repo.main_project.owned_by(owner) end if project args[args.index(ref)] = sha if remote = project.remote and remotes.include? remote args.before ['fetch', remote.to_s] else args.before ['remote', 'add', '-f', project.owner, project.git_url(:https => https_protocol?)] end end end end |
#clone(args) ⇒ Object
$ hub clone rtomayko/tilt > git clone git://github.com/rtomayko/tilt.
$ hub clone -p kneath/hemingway > git clone [email protected]:kneath/hemingway.git
$ hub clone tilt > git clone git://github.com/YOUR_LOGIN/tilt.
$ hub clone -p github > git clone [email protected]:YOUR_LOGIN/hemingway.git
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 |
# File 'lib/hub/commands.rb', line 203 def clone(args) ssh = args.delete('-p') has_values = /^(--(upload-pack|template|depth|origin|branch|reference)|-[ubo])$/ idx = 1 while idx < args.length arg = args[idx] if arg.index('-') == 0 idx += 1 if arg =~ has_values else # $ hub clone rtomayko/tilt # $ hub clone tilt if arg =~ NAME_WITH_OWNER_RE and !File.directory?(arg) name, owner = arg, nil owner, name = name.split('/', 2) if name.index('/') project = github_project(name, owner || github_user) ssh ||= args[0] != 'submodule' && project.owner == github_user(project.host) { } args[idx] = project.git_url(:private => ssh, :https => https_protocol?) end break end idx += 1 end end |
#compare(args) ⇒ Object
$ hub compare 1.0..fix > open github.com/CURRENT_REPO/compare/1.0…fix $ hub compare refactor > open github.com/CURRENT_REPO/compare/refactor $ hub compare myfork feature > open github.com/myfork/REPO/compare/feature $ hub compare -u 1.0…2.0 “github.com/CURRENT_REPO/compare/1.0…2.0”
611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 |
# File 'lib/hub/commands.rb', line 611 def compare(args) args.shift browse_command(args) do if args.empty? branch = current_branch.upstream if branch and not branch.master? range = branch.short_name project = current_project else abort "Usage: hub compare [USER] [<START>...]<END>" end else sha_or_tag = /(\w{1,2}|\w[\w.-]+\w)/ # replaces two dots with three: "sha1...sha2" range = args.pop.sub(/^#{sha_or_tag}\.\.#{sha_or_tag}$/, '\1...\2') project = if owner = args.pop then github_project(nil, owner) else current_project end end project.web_url "/compare/#{range}" end end |
#create(args) ⇒ Object
$ hub create … create repo on github … > git remote add -f origin [email protected]:YOUR_USER/CURRENT_REPO.git
490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 |
# File 'lib/hub/commands.rb', line 490 def create(args) if !is_repo? abort "'create' must be run from inside a git repository" else owner = github_user args.shift = {} [:private] = true if args.delete('-p') new_repo_name = nil until args.empty? case arg = args.shift when '-d' [:description] = args.shift when '-h' [:homepage] = args.shift else if arg =~ /^[^-]/ and new_repo_name.nil? new_repo_name = arg owner, new_repo_name = new_repo_name.split('/', 2) if new_repo_name.index('/') else abort "invalid argument: #{arg}" end end end new_repo_name ||= repo_name new_project = github_project(new_repo_name, owner) if api_client.repo_exists?(new_project) warn "#{new_project.name_with_owner} already exists on #{new_project.host}" action = "set remote origin" else action = "created repository" api_client.create_repo(new_project, ) unless args.noop? end url = new_project.git_url(:private => true, :https => https_protocol?) if remotes.first != 'origin' args.replace %W"remote add -f origin #{url}" else args.replace %W"remote -v" end args.after 'echo', ["#{action}:", new_project.name_with_owner] end rescue GitHubAPI::Exceptions display_api_exception("creating repository", $!.response) exit 1 end |
#fetch(args) ⇒ Object
$ hub fetch mislav > git remote add mislav git://github.com/mislav/REPO.git > git fetch mislav
$ hub fetch –multiple mislav xoebus > git remote add mislav … > git remote add xoebus … > git fetch –multiple mislav xoebus
299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 |
# File 'lib/hub/commands.rb', line 299 def fetch(args) # $ hub fetch --multiple <name1>, <name2>, ... if args.include?('--multiple') names = args.words[1..-1] # $ hub fetch <name> elsif remote_name = args.words[1] # $ hub fetch <name1>,<name2>,... if remote_name =~ /^\w+(,\w+)+$/ index = args.index(remote_name) args.delete(remote_name) names = remote_name.split(',') args.insert(index, *names) args.insert(index, '--multiple') else names = [remote_name] end else names = [] end projects = names.map { |name| unless name =~ /\W/ or remotes.include?(name) or remotes_group(name) project = github_project(nil, name) repo_info = api_client.repo_info(project) if repo_info.success? project.repo_data = repo_info.data project end end }.compact if projects.any? projects.each do |project| args.before ['remote', 'add', project.owner, project.git_url(:https => https_protocol?)] end end end |
#fork(args) ⇒ Object
$ hub fork … hardcore forking action … > git remote add -f YOUR_USER [email protected]:YOUR_USER/CURRENT_REPO.git
462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 |
# File 'lib/hub/commands.rb', line 462 def fork(args) unless project = local_repo.main_project abort "Error: repository under 'origin' remote is not a GitHub project" end forked_project = project.owned_by(github_user(project.host)) if api_client.repo_exists?(forked_project) abort "Error creating fork: %s already exists on %s" % [ forked_project.name_with_owner, forked_project.host ] else api_client.fork_repo(project) unless args.noop? end if args.include?('--no-remote') exit else url = forked_project.git_url(:private => true, :https => https_protocol?) args.replace %W"remote add -f #{forked_project.owner} #{url}" args.after 'echo', ['new remote:', forked_project.owner] end rescue GitHubAPI::Exceptions display_api_exception("creating fork", $!.response) exit 1 end |
#help(args) ⇒ Object Also known as: --help
$ hub help (print improved help text)
701 702 703 704 705 706 707 708 709 710 711 712 |
# File 'lib/hub/commands.rb', line 701 def help(args) command = args.words[1] if command == 'hub' puts hub_manpage exit elsif command.nil? && !args.has_flag?('-a', '--all') ENV['GIT_PAGER'] = '' unless args.has_flag?('-p', '--paginate') # Use `cat`. puts improved_help_text exit end end |
#hub(args) ⇒ Object
$ hub hub standalone Prints the “standalone” version of hub for an easy, memorable installation sequence:
$ gem install hub $ hub hub standalone > ~/bin/hub && chmod 755 ~/bin/hub $ gem uninstall hub
642 643 644 645 646 647 648 649 650 651 |
# File 'lib/hub/commands.rb', line 642 def hub(args) return help(args) unless args[1] == 'standalone' require 'hub/standalone' Hub::Standalone.build $stdout exit rescue LoadError abort "hub is already running in standalone mode." rescue Errno::EPIPE exit # ignore broken pipe end |
#init(args) ⇒ Object
$ hub init -g > git init > git remote add origin [email protected]:USER/REPO.git
451 452 453 454 455 456 457 |
# File 'lib/hub/commands.rb', line 451 def init(args) if args.delete('-g') project = github_project(File.basename(current_dir)) url = project.git_url(:private => true, :https => https_protocol?) args.after ['remote', 'add', 'origin', url] end end |
#merge(args) ⇒ Object
$ git merge github.com/defunkt/hub/pull/73 > git fetch git://github.com/mislav/hub.git +refs/heads/feature:refs/remotes/mislav/feature > git merge mislav/feature –no-ff -m ‘Merge pull request #73 from mislav/feature…’
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 |
# File 'lib/hub/commands.rb', line 368 def merge(args) _, url_arg = args.words if url = resolve_github_url(url_arg) and url.project_path =~ /^pull\/(\d+)/ pull_id = $1 pull_data = api_client.pullrequest_info(url.project, pull_id) user, branch = pull_data['head']['label'].split(':', 2) abort "Error: #{user}'s fork is not available anymore" unless pull_data['head']['repo'] url = github_project(url.project_name, user).git_url(:private => pull_data['head']['repo']['private'], :https => https_protocol?) merge_head = "#{user}/#{branch}" args.before ['fetch', url, "+refs/heads/#{branch}:refs/remotes/#{merge_head}"] idx = args.index url_arg args.delete_at idx args.insert idx, merge_head, '--no-ff', '-m', "Merge pull request ##{pull_id} from #{merge_head}\n\n#{pull_data['title']}" end end |
#pull_request(args) ⇒ Object
$ hub pull-request $ hub pull-request “My humble contribution” $ hub pull-request -i 92 $ hub pull-request github.com/rtomayko/tilt/issues/92
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 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 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/hub/commands.rb', line 77 def pull_request(args) args.shift = { } force = explicit_owner = false base_project = local_repo.main_project head_project = local_repo.current_project unless base_project abort "Aborted: the origin remote doesn't point to a GitHub repository." end from_github_ref = lambda do |ref, context_project| if ref.index(':') owner, ref = ref.split(':', 2) project = github_project(context_project.name, owner) end [project || context_project, ref] end while arg = args.shift case arg when '-f' force = true when '-b' base_project, [:base] = from_github_ref.call(args.shift, base_project) when '-h' head = args.shift explicit_owner = !!head.index(':') head_project, [:head] = from_github_ref.call(head, head_project) when '-i' [:issue] = args.shift else if url = resolve_github_url(arg) and url.project_path =~ /^issues\/(\d+)/ [:issue] = $1 base_project = url.project elsif ![:title] then [:title] = arg else abort "invalid argument: #{arg}" end end end [:project] = base_project [:base] ||= master_branch.short_name if tracked_branch = [:head].nil? && current_branch.upstream if !tracked_branch.remote? # The current branch is tracking another local branch. Pretend there is # no upstream configuration at all. tracked_branch = nil elsif base_project == head_project and tracked_branch.short_name == [:base] $stderr.puts "Aborted: head branch is the same as base (#{[:base].inspect})" warn "(use `-h <branch>` to specify an explicit pull request head)" abort end end [:head] ||= (tracked_branch || current_branch).short_name # when no tracking, assume remote branch is published under active user's fork user = github_user(head_project.host) if head_project.owner != user and !tracked_branch and !explicit_owner head_project = head_project.owned_by(user) end remote_branch = "#{head_project.remote}/#{[:head]}" [:head] = "#{head_project.owner}:#{[:head]}" if !force and tracked_branch and local_commits = rev_list(remote_branch, nil) $stderr.puts "Aborted: #{local_commits.split("\n").size} commits are not yet pushed to #{remote_branch}" warn "(use `-f` to force submit a pull request anyway)" abort end if args.noop? puts "Would request a pull to #{base_project.owner}:#{[:base]} from #{[:head]}" exit end unless [:title] or [:issue] base_branch = "#{base_project.remote}/#{[:base]}" commits = rev_list(base_branch, remote_branch).to_s.split("\n") case commits.size when 0 = commit_summary = nil when 1 format = '%w(78,0,0)%s%n%+b' = git_command "show -s --format='#{format}' #{commits.first}" commit_summary = nil else format = '%h (%aN, %ar)%n%w(78,3,3)%s%n%+b' = nil commit_summary = git_command "log --no-color --format='%s' --cherry %s...%s" % [format, base_branch, remote_branch] end [:title], [:body] = pullrequest_editmsg(commit_summary) { |msg| msg.puts if msg.puts "" msg.puts "# Requesting a pull to #{base_project.owner}:#{[:base]} from #{[:head]}" msg.puts "#" msg.puts "# Write a message for this pull request. The first block" msg.puts "# of text is the title and the rest is description." } end pull = api_client.create_pullrequest() args.executable = 'echo' args.replace [pull['html_url']] rescue GitHubAPI::Exceptions display_api_exception("creating pull request", $!.response) exit 1 end |
#push(args) ⇒ Object
$ hub push origin,staging cool-feature > git push origin cool-feature > git push staging cool-feature
544 545 546 547 548 549 550 551 552 553 554 |
# File 'lib/hub/commands.rb', line 544 def push(args) return if args[1].nil? || !args[1].index(',') branch = (args[2] ||= current_branch.short_name) remotes = args[1].split(',') args[1] = remotes.shift remotes.each do |name| args.after ['push', name, branch] end end |
#remote(args) ⇒ Object
$ hub remote add pjhyett > git remote add pjhyett git://github.com/pjhyett/THIS_REPO.git
$ hub remote add -p mojombo > git remote add mojombo [email protected]:mojombo/THIS_REPO.git
$ hub remote add origin > git remote add origin git://github.com/YOUR_LOGIN/THIS_REPO.git
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
# File 'lib/hub/commands.rb', line 262 def remote(args) if %w[add set-url].include?(args[1]) name = args.last if name =~ /^(#{OWNER_RE})$/ || name =~ /^(#{OWNER_RE})\/(#{NAME_RE})$/ user, repo = $1, $2 || repo_name end end return unless user # do not touch arguments ssh = args.delete('-p') if args.words[2] == 'origin' && args.words[3].nil? # Origin special case triggers default user/repo user, repo = github_user, repo_name elsif args.words[-2] == args.words[1] # rtomayko/tilt => rtomayko # Make sure you dance around flags. idx = args.index( args.words[-1] ) args[idx] = user else # They're specifying the remote name manually (e.g. # git remote add blah rtomayko/tilt), so just drop the last # argument. args.pop end args << git_url(user, repo, :private => ssh) end |
#run(args) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/hub/commands.rb', line 43 def run(args) slurp_global_flags(args) # Hack to emulate git-style args.unshift 'help' if args.empty? cmd = args[0] if = (cmd) cmd = [0] .concat args[1..-1] end respect_help_flags( || args) if custom_command? cmd # git commands can have dashes cmd = cmd.gsub(/(\w)-/, '\1_') if method_defined?(cmd) and cmd != 'run' args.replace if send(cmd, args) end rescue Errno::ENOENT if $!..include? "No such file or directory - git" abort "Error: `git` command not found" else raise end rescue Context::FatalError => err abort "fatal: #{err.}" end |
#submodule(args) ⇒ Object
$ hub submodule add wycats/bundler vendor/bundler > git submodule add git://github.com/wycats/bundler.git vendor/bundler
$ hub submodule add -p wycats/bundler vendor/bundler > git submodule add [email protected]:wycats/bundler.git vendor/bundler
$ hub submodule add -b ryppl ryppl/pip vendor/bundler > git submodule add -b ryppl git://github.com/ryppl/pip.git vendor/pip
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/hub/commands.rb', line 236 def submodule(args) return unless index = args.index('add') args.delete_at index branch = args.index('-b') || args.index('--branch') if branch args.delete_at branch branch_name = args.delete_at branch end clone(args) if branch_name args.insert branch, '-b', branch_name end args.insert index, 'add' end |
#version(args) ⇒ Object Also known as: --version
$ hub version > git version (print hub version)
694 695 696 |
# File 'lib/hub/commands.rb', line 694 def version(args) args.after 'echo', ['hub version', Version] end |