Module: SugarJar::Util
- Included in:
- Commands, RepoConfig
- Defined in:
- lib/sugarjar/util.rb
Overview
Some common methods needed by other classes
Instance Method Summary collapse
- #hub(*args) ⇒ Object
- #hub_nofail(*args) ⇒ Object
- #in_repo ⇒ Object
- #repo_root ⇒ Object
- #which(cmd) ⇒ Object
-
#which_nofail(cmd) ⇒ Object
Finds the first entry in the path for a binary and checks to make sure it’s not us (i.e. we may be linked to as ‘git’ or ‘hub’, but when we are calling that, we don’t want ourselves..
Instance Method Details
#hub(*args) ⇒ Object
81 82 83 84 85 |
# File 'lib/sugarjar/util.rb', line 81 def hub(*args) s = hub_nofail(*args) s.error! s end |
#hub_nofail(*args) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 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 72 73 74 75 76 77 78 79 |
# File 'lib/sugarjar/util.rb', line 29 def hub_nofail(*args) if %w{diff log grep branch}.include?(args[0]) && args.none? { |x| x.include?('color') } args << (@color ? '--color' : '--no-color') end SugarJar::Log.trace("Running: hub #{args.join(' ')}") s = Mixlib::ShellOut.new([which('hub')] + args).run_command if s.error? # depending on hub version and possibly other things, STDERR # is either "Requires authentication" or "Must authenticate" case s.stderr when /^(Must|Requires) authenticat/ SugarJar::Log.info( 'Hub was run but no github token exists. Will run "hub api user" ' + "to force\nhub to authenticate...", ) unless system(which('hub'), 'api', 'user') SugarJar::Log.fatal( 'That failed, I will bail out. Hub needs to get a github ' + 'token. Try running "hub api user" (will list info about ' + 'your account) and try this again when that works.', ) exit(1) end SugarJar::Log.info('Re-running original hub command...') s = Mixlib::ShellOut.new([which('hub')] + args).run_command when /^fatal: could not read Username/, /Anonymous access denied/ # On http(s) URLs, git may prompt for username/passwd SugarJar::Log.info( 'Hub was run but git prompted for authentication. This probably ' + "means you have\nused an http repo URL instead of an ssh one. It " + "is recommended you reclone\nusing 'sj sclone' to setup your " + "remotes properly. However, in the meantime,\nwe'll go ahead " + "and re-run the command in a shell so you can type in the\n" + 'credentials.', ) unless system(which('hub'), *args) SugarJar::Log.fatal( 'That failed, I will bail out. You can either manually change ' + 'your remotes, or simply create a fresh clone with ' + '"sj smartclone".', ) exit(1) end SugarJar::Log.info('Re-running original hub command...') s = Mixlib::ShellOut.new([which('hub')] + args).run_command end end s end |
#in_repo ⇒ Object
87 88 89 90 |
# File 'lib/sugarjar/util.rb', line 87 def in_repo s = hub_nofail('rev-parse', '--is-inside-work-tree') !s.error? && s.stdout.strip == 'true' end |
#repo_root ⇒ Object
92 93 94 |
# File 'lib/sugarjar/util.rb', line 92 def repo_root hub('rev-parse', '--show-toplevel').stdout.strip end |
#which(cmd) ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/sugarjar/util.rb', line 21 def which(cmd) path = which_nofail(cmd) return path if path SugarJar::Log.fatal("Could not find #{cmd} in your path") exit(1) end |
#which_nofail(cmd) ⇒ Object
Finds the first entry in the path for a binary and checks to make sure it’s not us (i.e. we may be linked to as ‘git’ or ‘hub’, but when we are calling that, we don’t want ourselves.
9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/sugarjar/util.rb', line 9 def which_nofail(cmd) ENV['PATH'].split(File::PATH_SEPARATOR).each do |dir| p = File.join(dir, cmd) # if it exists, and it is executable and is not us... if File.exist?(p) && File.executable?(p) && File.basename(File.realpath(p)) != 'sj' return p end end false end |