class Anamo::Pkgver::Thor

Public Instance Methods

exec() click to toggle source
# File lib/anamo/pkgver/thor.rb, line 17
def exec

  data = inspect false
  ::Anamo::Api.new.post_pkgver MultiJson.dump data

end
inspect(output = true) click to toggle source
# File lib/anamo/pkgver/thor.rb, line 28
def inspect output = true

          ##############################
          ### RPM
          ##############################
          
  rpm_packages = []
  status, stdout, stderr = systemu "rpm -qa --qf '%{NAME}abyz3_%{VERSION}abyz3_%{RELEASE}abyz3_%{ARCH}abyz3_%{VENDOR}abyz3_%{RPMTAG_INSTALLTIME}abyz3_%{SIZE}\n'" # See: http://ftp.rpm.org/max-rpm/ch-rpm-query.html
  if status.success?
    stdout.split("\n").each do |package|
      package = package.split('abyz3_')   # because vendor can have spaces, make the delimiter something unique abyz3_
      rpm_packages << {
        'n'  => package[0],  #name
        'v'  => package[1],  #version
        'r'  => package[2],  #release
        'a'  => package[3],  #architecture
        'v2' => package[4],  #vendor,
        'it' => package[5], #install time, or ${RPMTAG_INSTALLTIME}
        's'  => package[6], #size, or ${SIZE}
      }
    end
  else
    rpm_packages = nil
  end
  

          ##############################
          ### Debian
          ##############################
  deb_packages = []
  status, stdout, strerr = systemu "dpkg-query -W -f='${Package}abyz3_${Version}abyz3_${Architecture}abyz3_${Installed-Size}abyz3_${Homepage}\n'" #$options here under: http://manpages.ubuntu.com/manpages/trusty/man1/dpkg-query.1.html
  if status.success?
    stdout.split("\n").each do |package|
      package = package.split('abyz3_')
      deb_packages << {
        'n'       => package[0],       #package name, or ${Package}
        'v'       => package[1],       #package version
        'a'       => package[2],      #package architecture
        's'   => package[3],      #size, or ${Installed-Size}
        'hp'      => package[4],       #homepage, or ${Homepage}
      }
    end
  else
    deb_packages = nil
  end

          ##############################
          ### Gem
          ##############################
          
  gem_packages = []
  status, stdout, stderr = systemu "gem list -l"
  if status.success?
    stdout.split("\n").each do |package|
      if package.strip.length > 0 and package[0,1] != '*'
        if match = /(.*) \((?:default\: )?(.*)\)/.match(package)
          gem_packages << {
            'n' => match[1],
            'v' => match[2]
          }
        end
      end
    end
  else
    gem_packages = nil
  end

  npm_packages = nil
  status, stdout, strerr = systemu "npm list --global --json"
  if status.success?
    npm_packages = MultiJson.load(stdout)
  end

  pip_packages = []
  status, stdout, strerr = systemu "pip list"
  if status.success?
    stdout.split("\n").each do |l|
      match_data = /(.*) \((.*)\)/.match(l)
      pip_packages << {
        'n' => match_data[1],
        'v' => match_data[2]
      } if match_data
    end
  else
    pip_packages = nil
  end

  data = {
    'gem_packages' => gem_packages
  }

  data['rpm_packages'] = rpm_packages if rpm_packages
  data['deb_packages'] = deb_packages if deb_packages
  data['npm_packages'] = npm_packages if npm_packages
  data['pip_packages'] = pip_packages if pip_packages

  puts data if output

  data

end