module SugarJar::Util
Some common methods needed by other classes
Public Instance Methods
hub(*args)
click to toggle source
# File lib/sugarjar/util.rb, line 81 def hub(*args) s = hub_nofail(*args) s.error! s end
hub_nofail(*args)
click to toggle source
# 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()
click to toggle source
# 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()
click to toggle source
# File lib/sugarjar/util.rb, line 92 def repo_root hub('rev-parse', '--show-toplevel').stdout.strip end
which(cmd)
click to toggle source
# 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)
click to toggle source
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.
# 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