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

Instance Method Details

#hub(*args) ⇒ Object



53
54
55
56
57
# File 'lib/sugarjar/util.rb', line 53

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
# File 'lib/sugarjar/util.rb', line 29

def hub_nofail(*args)
  SugarJar::Log.trace("Running: hub #{args.join(' ')}")
  s = Mixlib::ShellOut.new([which('hub')] + args).run_command
  # depending on hub version and possibly other things, STDERR
  # is either "Requires authentication" or "Must authenticate"
  if s.error? && s.stderr =~ /^(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
  end
  s
end

#in_repoObject



59
60
61
62
# File 'lib/sugarjar/util.rb', line 59

def in_repo
  s = hub_nofail('rev-parse', '--is-inside-work-tree')
  !s.error? && s.stdout.strip == 'true'
end

#repo_rootObject



64
65
66
# File 'lib/sugarjar/util.rb', line 64

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