Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

executable file 123 lines (99 sloc) 3.188 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
#!/usr/bin/env ruby

$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])

help = <<HELP
Gollum is a multi-format Wiki Engine/API/Frontend.

Basic Command Line Usage:
gollum [OPTIONS] [PATH]

PATH The path to the Gollum repository (default .).

Options:
HELP

require 'optparse'
require 'rubygems'
require 'gollum'

exec = {}
options = { 'port' => 4567, 'bind' => '0.0.0.0' }
wiki_options = {}

opts = OptionParser.new do |opts|
  opts.banner = help

  opts.on("--port [PORT]", "Bind port (default 4567).") do |port|
    options['port'] = port.to_i
  end

  opts.on("--host [HOST]", "Hostname or IP address to listen on (default 0.0.0.0).") do |host|
    options['bind'] = host
  end

  opts.on("--version", "Display current version.") do
    puts "Gollum " + Gollum::VERSION
    exit 0
  end

  opts.on("--config [CONFIG]", "Path to additional configuration file") do |config|
    options['config'] = config
  end

  opts.on("--irb", "Start an irb process with gollum loaded for the current wiki.") do
    options['irb'] = true
  end

  opts.on("--page-file-dir [PATH]", "Specify the sub directory for all page files (default: repository root).") do |path|
    wiki_options[:page_file_dir] = path
  end
end

# Read command line options into `options` hash
begin
  opts.parse!
rescue OptionParser::InvalidOption
  puts "gollum: #{$!.message}"
  puts "gollum: try 'gollum --help' for more information"
  exit
end

gollum_path = ARGV[0] || Dir.pwd

if options['irb']
  require 'irb'
  # http://jameskilton.com/2009/04/02/embedding-irb-into-your-ruby-application/
  module IRB # :nodoc:
    def self.start_session(binding)
      unless @__initialized
        args = ARGV
        ARGV.replace(ARGV.dup)
        IRB.setup(nil)
        ARGV.replace(args)
        @__initialized = true
      end

      ws = WorkSpace.new(binding)
      irb = Irb.new(ws)

      @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
      @CONF[:MAIN_CONTEXT] = irb.context

      catch(:IRB_EXIT) do
        irb.eval_input
      end
    end
  end

  begin
    wiki = Gollum::Wiki.new(gollum_path, wiki_options)
    if !wiki.exist? then raise Grit::InvalidGitRepositoryError end
    puts "Loaded Gollum wiki at #{File.expand_path(gollum_path).inspect}."
    puts
    puts %( page = wiki.page('page-name'))
    puts %( # => <Gollum::Page>)
    puts
    puts %( page.raw_data)
    puts %( # => "# My wiki page")
    puts
    puts %( page.formatted_data)
    puts %( # => "<h1>My wiki page</h1>")
    puts
    puts "Check out the Gollum README for more."
    IRB.start_session(binding)
  rescue Grit::InvalidGitRepositoryError, Grit::NoSuchPathError
    puts "Invalid Gollum wiki at #{File.expand_path(gollum_path).inspect}"
    exit 0
  end
else
  require 'gollum/frontend/app'
  Precious::App.set(:gollum_path, gollum_path)
  Precious::App.set(:wiki_options, wiki_options)

  if cfg = options['config']
    # If the path begins with a '/' it will be considered an absolute path,
    # otherwise it will be relative to the CWD
    cfg = File.join(Dir.getwd, cfg) unless cfg.slice(0) == File::SEPARATOR
    require cfg
  end

  Precious::App.run!(options)
end
Something went wrong with that request. Please try again.