Module: Machinery

Defined in:
lib/ui.rb,
lib/cli.rb,
lib/hint.rb,
lib/array.rb,
lib/scope.rb,
lib/config.rb,
lib/filter.rb,
lib/helper.rb,
lib/object.rb,
lib/version.rb,
lib/renderer.rb,
lib/constants.rb,
lib/exceptions.rb,
lib/diff_widget.rb,
lib/system_file.rb,
lib/machinery_logger.rb

Overview

Copyright © 2013-2016 SUSE LLC

This program is free software; you can redistribute it and/or modify it under the terms of version 3 of the GNU General Public License as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, contact SUSE LLC.

To contact SUSE about this file by physical or electronic mail, you may find current contact information at www.suse.com

Defined Under Namespace

Modules: Errors, Scope, ScopeFileAccessArchive, ScopeFileAccessFlat Classes: AnalyzeConfigFileDiffsTask, Array, Autoyast, BuildTask, Cli, CompareTask, Comparison, Config, ConfigBase, ConfigTask, ContainerizeTask, ContainerizedApp, CopyTask, CurrentUser, DeployTask, DockerSystem, DpkgDatabase, ElementFilter, ExportTask, Exporter, FileDiff, FileScope, FileValidator, Filter, FilterOptionParser, Html, InspectTask, Inspector, JsonValidationErrorCleaner, JsonValidator, KiwiConfig, ListTask, LocalSystem, LoggedCheetah, ManTask, ManagedFilesDatabase, Manifest, Migration, MountPoints, MoveTask, Object, RemoteSystem, RemoveTask, Rpm, RpmDatabase, ScopeFileStore, ServeHtmlTask, ShowTask, StaticHtml, System, SystemDescription, SystemDescriptionMemoryStore, SystemDescriptionStore, SystemFile, Tarball, Ui, UpgradeFormatTask, ValidateTask, WorkloadMapper, WorkloadMapperDSL, Zypper

Constant Summary collapse

VERSION =
"1.22.2"
ROOT =
File.expand_path("..", File.dirname(__FILE__))
DEFAULT_CONFIG_DIR =
File.join(ENV['HOME'], ".machinery")
DEFAULT_LOG_FILE =
File.join(DEFAULT_CONFIG_DIR, "machinery.log")
DEFAULT_CONFIG_FILE =
File.join(DEFAULT_CONFIG_DIR, "machinery.config")
IMAGE_META_DATA_FILE =
"machinery.meta"
HELPER_REMOTE_PATH =
"~".freeze
@@logger =
nil

Class Method Summary collapse

Class Method Details

.content_is_binary?(content) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
26
27
28
29
# File 'lib/helper.rb', line 23

def self.content_is_binary?(content)
  !Cheetah.run("file", "-b", "-", stdout: :capture, stdin: content).include?(" text")
# newer versions of file exit != 0 when some ELF files are sliced
# the file type is still provided besides the exit code
rescue Cheetah::ExecutionFailed => e
  !e.stdout.include?(" text")
end

.initialize_logger(log_file) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/machinery_logger.rb', line 21

def self.initialize_logger(log_file)
  # We rotate one old log file of 21 MB
  if File.exist?(log_file) && File.size(log_file) > 21 * 1024 * 1024
    rotated_file = log_file + ".0"
    FileUtils.rm(rotated_file) if File.exist?(rotated_file)
    FileUtils.mv(log_file, rotated_file)
  end

  unless File.exist?(log_file)
    dirname = File.dirname(log_file)
    unless Dir.exist?(dirname)
      FileUtils.mkdir_p(dirname)
      File.chmod(0700, dirname)
    end
    FileUtils.touch(log_file)
    FileUtils.chmod(0600, log_file)
  end

  @@logger = Logger.new(log_file)
end

.is_int?(string) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/helper.rb', line 19

def self.is_int?(string)
  (string =~ /^\d+$/) != nil
end

.loggerObject



42
43
44
45
46
# File 'lib/machinery_logger.rb', line 42

def self.logger
  initialize_logger(DEFAULT_LOG_FILE) unless @@logger

  @@logger
end

.pluralize(count, singular, plural = nil) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/helper.rb', line 43

def self.pluralize(count, singular, plural = nil)
  val = if count > 1 || count == 0
    if !plural
      singular + "s"
    else
      plural
    end
  else
    singular
  end

  val.gsub("%d", count.to_s)
end

.scrub(s) ⇒ Object

Implementation of String#scrub for Ruby < 2.1. Assumes the string is in UTF-8.



33
34
35
36
37
38
39
40
41
# File 'lib/helper.rb', line 33

def self.scrub(s)
  # We have a string in UTF-8 with possible invalid byte sequences. It turns
  # out that String#encode can remove these sequences when given appropriate
  # options, but just converting into UTF-8 would be a no-op. So let's convert
  # into UTF-16 (which has the same character set as UTF-8) and back.
  #
  # See also: http://stackoverflow.com/a/21315619
  s.dup.force_encoding("UTF-8").encode("UTF-16", invalid: :replace).encode("UTF-8")
end