#!/usr/bin/env ruby # vclog # # SYNOPSIS # # VCLog provides cross-vcs ChangeLogs. It works by # parsing the native changelog a VCS system produces # into a common model, which then can be used to # produce Changelogs in a variety of formats. # # VCLog currently support SVN and Git. CVS, Darcs and # Mercurial/Hg are in the works. # # EXAMPLES # # To produce a GNU-like changelog: # # $ vclog # # For XML format: # # $ vclog --xml # # Or for a micorformat-ish HTML: # # $ vclog --html # #To use the library programmatically, please see the API documentation. # # LICENSE # # VCLog Copyright (c) 2008 Tiger Ops # VCLog is distributed under the terms of the GPLv3. require 'vclog/vcs' require 'getoptlong' # TODO: rev option. # def vclog opts = GetoptLong.new( [ '--help' , '-h', GetoptLong::NO_ARGUMENT ], [ '--debug', GetoptLong::NO_ARGUMENT ], [ '--typed', GetoptLong::NO_ARGUMENT ], [ '--rev' , GetoptLong::NO_ARGUMENT ], [ '--gnu' , GetoptLong::NO_ARGUMENT ], [ '--xml' , GetoptLong::NO_ARGUMENT ], [ '--html' , GetoptLong::NO_ARGUMENT ], [ '--rel' , GetoptLong::REQUIRED_ARGUMENT ], [ '--style', GetoptLong::REQUIRED_ARGUMENT ], [ '--output', '-o', GetoptLong::REQUIRED_ARGUMENT ] ) format = :gnu typed = false rev = false vers = nil style = nil output = nil opts.each do |opt, arg| case opt when '--help' puts "vclog [--gnu|--html|--xml|--rel] [--typed]" exit when '--debug' $DEBUG = true when '--typed' typed = true when '--rev' rev = true when '--xml' format = :xml when '--html' format = :html when '--rel' format = :rel vers = arg when '--style' style = arg when '--output' output = arg end end vcs = VCLog::VCS.new changelog = vcs.changelog if typed changelog = changelog.typed end case format when :xml log = changelog.format_xml(style) # xsl stylesheet url when :html log = changelog.format_html(style) # css stylesheet url when :rel if output && File.file?(output) file = output else file = Dir.glob('change{s,log}{,.txt}', File::FNM_CASEFOLD).first end log = changelog.format_rel(file, vers) else #:gnu log = changelog.to_s end if output File.open(output, 'w') do |f| f << log end else puts log end end begin vclog rescue => err if $DEBUG raise err else puts err.message exit -1 end end