added Typo 4+ conversion module and docs
This commit is contained in:
parent
e7b2df1156
commit
e0e7bf10d1
|
@ -379,6 +379,25 @@ You may need to adjust the SQL query used to retrieve MT entries. Left alone,
|
||||||
it will attempt to pull all entries across all blogs regardless of status.
|
it will attempt to pull all entries across all blogs regardless of status.
|
||||||
Please check the results and verify the posts before publishing.
|
Please check the results and verify the posts before publishing.
|
||||||
|
|
||||||
|
h3. Typo 4+
|
||||||
|
|
||||||
|
To migrate your Typo blog into Jekyll, you'll need read access to the MySQL
|
||||||
|
database. The lib/jekyll/converters/typo.rb module provides a simple convert
|
||||||
|
to create .html, .textile, or .markdown files in a _posts directory based on
|
||||||
|
the entries contained therein.
|
||||||
|
|
||||||
|
$ export DB=my_typo_db
|
||||||
|
$ export USER=dbuser
|
||||||
|
$ export PASS=dbpass
|
||||||
|
$ ruby -r './lib/jekyll/converters/typo' -e 'Jekyll::Typo.process( \
|
||||||
|
"#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")'
|
||||||
|
|
||||||
|
You may need to adjust the code used to filter Typo entries. Left alone,
|
||||||
|
it will attempt to pull all entries across all blogs that were published.
|
||||||
|
This code also has only been tested with Typo version 4+. Previous versions
|
||||||
|
of Typo may not convert correctly. Please check the results and verify the
|
||||||
|
posts before publishing.
|
||||||
|
|
||||||
h2. License
|
h2. License
|
||||||
|
|
||||||
(The MIT License)
|
(The MIT License)
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
# Author: Toby DiPasquale <toby@cbcg.net>
|
||||||
|
require 'fileutils'
|
||||||
|
require 'rubygems'
|
||||||
|
require 'sequel'
|
||||||
|
|
||||||
|
module Jekyll
|
||||||
|
module Typo
|
||||||
|
# this SQL *should* work for both MySQL and PostgreSQL, but I haven't
|
||||||
|
# tested PostgreSQL yet (as of 2008-12-16)
|
||||||
|
SQL = <<-EOS
|
||||||
|
SELECT c.id id,
|
||||||
|
c.title title,
|
||||||
|
c.permalink slug,
|
||||||
|
c.body body,
|
||||||
|
c.published_at date,
|
||||||
|
c.state state,
|
||||||
|
COALESCE(tf.name, 'html') filter
|
||||||
|
FROM contents c
|
||||||
|
LEFT OUTER JOIN text_filters tf
|
||||||
|
ON c.text_filter_id = tf.id
|
||||||
|
EOS
|
||||||
|
|
||||||
|
def self.process dbname, user, pass, host='localhost'
|
||||||
|
FileUtils.mkdir_p '_posts'
|
||||||
|
db = Sequel.mysql dbname, :user => user, :password => pass, :host => host
|
||||||
|
db[SQL].each do |post|
|
||||||
|
next unless post[:state] =~ /Published/
|
||||||
|
|
||||||
|
name = [ sprintf("%.04d", post[:date].year),
|
||||||
|
sprintf("%.02d", post[:date].month),
|
||||||
|
sprintf("%.02d", post[:date].day),
|
||||||
|
post[:slug].strip ].join('-')
|
||||||
|
# Can have more than one text filter in this field, but we just want
|
||||||
|
# the first one for this
|
||||||
|
name += '.' + post[:filter].split(' ')[0]
|
||||||
|
|
||||||
|
File.open("_posts/#{name}", 'w') do |f|
|
||||||
|
f.puts({ 'layout' => 'post',
|
||||||
|
'title' => post[:title].to_s,
|
||||||
|
'typo_id' => post[:id]
|
||||||
|
}.delete_if { |k, v| v.nil? || v == '' }.to_yaml)
|
||||||
|
f.puts '---'
|
||||||
|
f.puts post[:body].delete("\r")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end # module Typo
|
||||||
|
end # module Jekyll
|
Loading…
Reference in New Issue