lib/gitdocs/cli.rb in gitdocs-0.5.0 vs lib/gitdocs/cli.rb in gitdocs-0.6.0

- old
+ new

@@ -11,24 +11,32 @@ def self.source_root File.expand_path('../../', __FILE__) end desc 'start', 'Starts a daemonized gitdocs process' - method_option :debug, type: :boolean, aliases: '-D' - method_option :port, type: :string, aliases: '-p' - method_option :pid, type: :string, aliases: '-P' + method_option :foreground, type: :boolean, aliases: '-fg' + method_option :verbose, type: :boolean, aliases: '-v' + method_option :port, type: :string, aliases: '-p' + method_option :pid, type: :string, aliases: '-P' def start unless stopped? say 'Gitdocs is already running, please use restart', :red return end - if options[:debug] - say 'Starting in debug mode', :yellow - Gitdocs.start(debug: true, port: options[:port]) + Gitdocs::Initializer.verbose = options[:verbose] + + if options[:foreground] + say 'Run in the foreground', :yellow + Gitdocs::Initializer.foreground = true + Manager.start(web_port) else - runner.execute { Gitdocs.start(port: options[:port]) } + # Clear the arguments so that they will not be processed by the + # Dante execution. + ARGV.clear + runner.execute { Manager.start(web_port) } + if running? say 'Started gitdocs', :green else say 'Failed to start gitdocs', :red end @@ -55,57 +63,59 @@ end method_option :pid, type: :string, aliases: '-P' desc 'add PATH', 'Adds a path to gitdocs' def add(path) - config.add_path(path) + Share.create_by_path!(normalize_path(path)) say "Added path #{path} to doc list" restart if running? end method_option :pid, type: :string, aliases: '-P' desc 'rm PATH', 'Removes a path from gitdocs' def rm(path) - config.remove_path(path) + Share.remove_by_path(path) say "Removed path #{path} from doc list" restart if running? end + method_option :pid, type: :string, aliases: '-P' desc 'clear', 'Clears all paths from gitdocs' def clear - config.clear + Share.destroy_all say 'Cleared paths from gitdocs' + restart if running? end method_option :pid, type: :string, aliases: '-P' desc 'create PATH REMOTE', 'Creates a new gitdoc root based on an existing remote' def create(path, remote) - Gitdocs::Repository.clone(path, remote) + Repository.clone(path, remote) add(path) say "Created #{path} path for gitdoc" end method_option :pid, type: :string, aliases: '-P' desc 'status', 'Retrieve gitdocs status' def status say "GitDoc v#{VERSION}" say "Running: #{running?}" - say "File System Watch Method: #{file_system_watch_method}" + say "File System Watch Method: #{Gitdocs::Manager.listen_method}" say 'Watched repositories:' tp.set(:max_width, 100) status_display = lambda do |share| - repository = Gitdocs::Repository.new(share) + repository = Repository.new(share) status = '' status += '*' if repository.dirty? status += '!' if repository.need_sync? status = 'ok' if status.empty? status end tp( - config.shares, + Share.all, { sync: { display_method: :sync_type } }, { s: status_display }, :path ) say "\n(Legend: ok everything synced, * change to commit, ! needs sync)" @@ -117,12 +127,10 @@ unless running? say 'Gitdocs is not running, cannot open the UI', :red return end - web_port = options[:port] - web_port ||= config.web_frontend_port Launchy.open("http://localhost:#{web_port}/") end # TODO: make this work # desc 'config', 'Configuration options for gitdocs' @@ -135,45 +143,46 @@ task ? self.class.task_help(shell, task) : self.class.help(shell, subcommand) end # Helpers for thor no_tasks do + # @return [Dante::Runner] def runner Dante::Runner.new( 'gitdocs', debug: false, daemonize: true, - pid_path: pid_path + pid_path: pid_path, + log_path: Gitdocs.log_path ) end - def config - @config ||= Configuration.new - end - + # @return [Boolean] def running? runner.daemon_running? end + # @return [Boolean] def stopped? runner.daemon_stopped? end + # @return [String] def pid_path options[:pid] || '/tmp/gitdocs.pid' end - # @return [Symbol] to indicate how the file system is being watched - def file_system_watch_method # rubocop:disable CyclomaticComplexity - if Guard::Listener.mac? && Guard::Darwin.usable? - :notification - elsif Guard::Listener.linux? && Guard::Linux.usable? - :notification - elsif Guard::Listener.windows? && Guard::Windows.usable? - :notification - else - :polling - end + # @return [Integer] + def web_port + result = options[:port] + result ||= Configuration.web_frontend_port + result.to_i + end + + # @param [String] path + # @return [String] + def normalize_path(path) + File.expand_path(path, Dir.pwd) end end end end