Skip to content

Commit

Permalink
more functionality to y2base
Browse files Browse the repository at this point in the history
  • Loading branch information
jreidinger committed Feb 21, 2017
1 parent 4b73441 commit d5f7bcd
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 2 deletions.
1 change: 1 addition & 0 deletions package/yast2-ruby-bindings.spec
Expand Up @@ -99,6 +99,7 @@ cd -

%files
%defattr (-, root, root)
%{yast_ybindir}/y2base
%{_libdir}/YaST2/plugin/libpy2lang_ruby.so
%{_libdir}/ruby/vendor_ruby/%{rb_ver}/*.rb
%{_libdir}/ruby/vendor_ruby/%{rb_ver}/yast
Expand Down
4 changes: 4 additions & 0 deletions src/CMakeLists.txt
@@ -1,2 +1,6 @@
add_subdirectory(ruby)
add_subdirectory(binary)



install(PROGRAMS y2base/y2base DESTINATION lib/YaST2/bin)
64 changes: 64 additions & 0 deletions src/ruby/yast/y2base.rb
@@ -0,0 +1,64 @@
module Yast
module Y2Base

# Parses ARGV of y2base. it returns map with keys:
#
# - :generic_options [Hash]
# - :client_name [String, nil]
# - :client_options [Hash]
# - :server_name [String, nil]
# - :server_options [Array] ( of unparsed options as server parse it on its own)
# @raise RuntimeError when unknown option appear or used wrongly
def self.parse_arguments(args)
ret = {}

ret[:generic_options] = parse_generic_options(args)
ret[:client_name] = args.shift
ret[:client_options] = parse_client_options(args)
ret[:server_name] = args.shift
ret[:server_options] = args

ret
end

private_class_method def self.parse_generic_options(args)
res = {}
loop do
return res unless option?(args.first)

raise "Unknown option #{args.first}"
end
end

private_class_method def self.parse_client_options(args)
res = {}
string_param = false
params = []
loop do
return res unless option?(args.first)

arg = args.shift
case arg
when "-S"
string_param = true
when /^\(/
raise "Only string client parameters supported" unless string_param

params << arg[1..-1]
else
raise "Unknown option #{arg}"
end
end
res[:params] = params

res
end

private_class_method def self.option?(arg)
return true if arg[0] == "-"
return true if arg[0] == "(" && arg[-1] == ")"

return false
end
end
end
19 changes: 17 additions & 2 deletions src/y2base/y2base
Expand Up @@ -2,12 +2,27 @@

# TODO: signal handling
# TODO: option parsing
# TODO: help text
# TODO: user friendly output if client do not exist
# TODO: umask
# TODO: pathsearch initialization

# set env as first part, otherwise dummy UI will be created.
# for insts-sys it will be overwritten later
ENV["YAST_IS_RUNNING"] = "yes"

require "yast"
require "yast/y2base"

args = Yast::Y2Base.parse_arguments(ARGV.dup)

if (args[:client_name] == "installation" &&
args[:client_options][:params].include?("initial"))
ENV["YAST_IS_RUNNING"] = "instsys"
end


Yast.create_ui(ARGV[0],[])
Yast::WFM.CallFunction(ARGV[1])
Yast.ui_create(args[:server_name], args[:server_options])
Yast::WFM.CallFunction(args[:client_name], args[:client_options][:params])

0

0 comments on commit d5f7bcd

Please sign in to comment.