29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/noms/command.rb', line 29
def run
parser = Trollop::Parser.new do
version NOMS::Command::VERSION
banner " Usage:\n noms [noms-options] { bookmark | url } [options] [arguments]\n noms-options:\n USAGE\n opt :identity, \"Identity file\", :type => :string, :multi => true\n opt :verbose, \"Enable verbose output\"\n opt :list, \"List bookmarks\"\n opt :bookmarks, \"Bookmark file location (can be specified multiple times)\",\n :type => :string,\n :multi => true\n opt :nodefault_bookmarks, \"Don't consult default bookmarks files\",\n :short => '-X',\n :long => '--nodefault-bookmarks'\n opt :debug, \"Enable debug output\"\n stop_on_unknown\n end\n\n @opt = Trollop::with_standard_exception_handling parser do\n parser.parse(@argv)\n end\n\n Trollop::with_standard_exception_handling parser do\n raise Trollop::HelpNeeded if @argv.empty? and ! @opt[:list]\n end\n\n @opt[:debug] = true if ENV['NOMS_DEBUG'] and ! ENV['NOMS_DEBUG'].empty?\n\n default_bookmarks =\n [ File.join(ENV['HOME'], '.noms/bookmarks.json'),\n '/usr/local/etc/noms/bookmarks.json',\n '/etc/noms/bookmarks.json'].select { |f| File.exist? f }\n\n @opt[:bookmarks].concat default_bookmarks unless @opt[:nodefault_bookmarks]\n\n @log.level = Logger::WARN\n @log.level = Logger::INFO if @opt[:verbose]\n @log.level = Logger::DEBUG if @opt[:debug]\n\n @bookmark = @opt[:bookmarks].map do |file|\n begin\n File.open(file, 'r') { |fh| JSON.load fh }\n rescue JSON::ParserError => j\n @log.warn \"Couldn't load bookmarks from invalid JSON file \#{file.inspect}\"\n @log.debug \"JSON error: \#{file.inspect}:\#{j.message}\"\n nil\n rescue StandardError => e\n @log.warn \"Couldn't open \#{file.inspect} (\#{e.class}): \#{e.message}\"\n @log.debug \"Error opening \#{file.inspect}: \#{e.backtrace.join(\"\\n\")}\"\n nil\n end\n end.compact.reverse.inject({}) { |h1, h2| h1.merge h2 }\n\n if @opt[:list]\n puts @bookmark.map { |pair| '%-15s -> %s' % pair }\n return 0\n end\n\n begin\n origin = @bookmark[@argv[0].split('/').first] || @argv[0]\n app = NOMS::Command::Application.new(origin, @argv, :logger => @log,\n :specified_identities => @opt[:identity])\n app.fetch! # Retrieve page\n app.render! # Run scripts\n out = app.display\n puts out unless out.empty?\n app.exitcode # Return exitcode\n rescue NOMS::Command::Error => e\n @log.error \"noms error: \#{e.message}\"\n 255\n end\nend\n".gsub(/^\s{16}/,'')
|