Skip to content

Instantly share code, notes, and snippets.

@minitau
Created September 13, 2009 05:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save minitau/186094 to your computer and use it in GitHub Desktop.
Save minitau/186094 to your computer and use it in GitHub Desktop.
bzr for hiki. put on hiki/repos/bzr.rb, adust in initialize()
# Copyright (C) 2009, Koga Atsushi <kog{@}ceres.dti.ne.jp>
# You can distribute this under GPL.
require 'hiki/repos/default'
module Hiki
class HikifarmReposBzr < HikifarmReposBase
def initialize(root, data_root)
super
ENV['BZR_HOME'] = @data_root
# ENV['BZR_LOG'] = 'NUL'
# @bzr = 'c:/opt/bzr/bzr.exe'
ENV['BZR_LOG'] = '/dev/null'
@bzr = 'bzr'
end
def setup
Dir.chdir(@data_root) do
system("#{@bzr} init-repo -q .")
end
end
def imported?(wiki)
File.exists?("#{@data_root}/#{wiki}/text/.bzr")
end
def import(wiki)
Dir.chdir("#{@data_root}/#{wiki}/text") do
system("#{@bzr} init -q .")
system("#{@bzr} add -q .")
system("#{@bzr} commit -q -m \"Starting #{wiki} from #{ENV['REMOTE_ADDR']} - #{ENV['REMOTE_HOST']}\"".untaint)
end
end
def update(wiki)
Dir.chdir("#{@data_root}/#{wiki}/text") do
system("#{@bzr} -q up")
end
end
end
class ReposBzr < ReposBase
include Hiki::Util
def initialize(root, data_path)
super
ENV['BZR_HOME'] = @data_path
# ENV['BZR_LOG'] = 'NUL'
# @bzr = 'c:/opt/bzr/bzr.exe'
ENV['BZR_LOG'] = '/dev/null'
@bzr = 'bzr'
end
def commit(page, msg = default_msg)
Dir.chdir("#{@data_path}/text") do
system("#{@bzr} add -q #{escape(page)}".untaint)
system("#{@bzr} commit -q -m \"#{msg}\" #{escape(page)}".untaint)
end
end
def delete(page, msg = default_msg)
Dir.chdir("#{@data_path}/text") do
system("#{@bzr} rm -q #{escape(page)}".untaint)
system("#{@bzr} commit -q -m \"#{msg}\" #{escape(page)}".untaint)
end
end
def get_revision(page, revision)
r = ""
Dir.chdir("#{@data_path}/text") do
open("|#{@bzr} cat -r #{revision.to_i-1} #{escape(page)}".untaint) do |f|
r = f.read
end
end
r
end
def revisions(page)
require 'time'
all_logs = ''
revs = []
Dir.chdir("#{@data_path}/text") do
open("|#{@bzr} log #{escape(page).untaint}") do |f|
all_logs = f.read
end
end
all_logs.split(/------------------------------------------------------------\n/).each do |log|
next if log == ""
rev = log[/^revno:\s+(\d+)$/, 1].to_i+1
date = Time.parse(log[/^timestamp:\s+(.*)$/, 1]).localtime.strftime('%Y/%m/%d %H:%M:%S')
message = log[/^message:\s+(.*)$/, 1]
revs << [rev, date, "", message]
end
revs
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment