############################################################################ # Copyright 2009 Benjamin Kellermann # # # # This file is part of dudle. # # # # Dudle is free software: you can redistribute it and/or modify it under # # the terms of the GNU Affero General Public License as published by # # the Free Software Foundation, either version 3 of the License, or # # (at your option) any later version. # # # # Dudle is distributed in the hope that it will be useful, but WITHOUT ANY # # WARRANTY; without even the implied warranty of MERCHANTABILITY or # # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public # # License for more details. # # # # You should have received a copy of the GNU Affero General Public License # # along with dudle. If not, see . # ############################################################################ require "time" require "log" class VCS BZRCMD="export LC_ALL=de_DE.UTF-8; bzr" def VCS.init `#{BZRCMD} init` end def VCS.add file `#{BZRCMD} add #{file}` end def VCS.revno `#{BZRCMD} revno`.to_i end def VCS.cat revision, file `#{BZRCMD} cat -r #{revision.to_i} #{file}` end def VCS.history log = `#{BZRCMD} log --forward`.split("-"*60) ret = Log.new log.shift log.each{|s| a = s.scan(/\nrevno:(.*)\ncommitter.*\n.*\ntimestamp: (.*)\nmessage:\n (.*)/).flatten ret.add(a[0].to_i, Time.parse(a[1]), a[2]) } ret end def VCS.longhistory dir log = `#{BZRCMD} log -r -10.. "#{dir}"`.split("-"*60) log.collect!{|s| s.scan(/\nrevno: (.*)\ncommitter.*\n.*\ntimestamp: (.*)\nmessage:\n (.*)/).flatten} log.shift log.collect!{|r,t,c| [r.to_i,Time.parse(t),c]} end def VCS.commit comment tmpfile = "/tmp/commitcomment.#{rand(10000)}" File.open(tmpfile,"w"){|f| f<