require 'SVG/Graph/BarHorizontal'
require 'digest/sha1'
-class ChangesetNotFound < Exception
-end
+class ChangesetNotFound < Exception; end
+class InvalidRevisionParam < Exception; end
class RepositoriesController < ApplicationController
layout 'base'
end
def diff
- @rev_to = params[:rev_to]
@diff_type = params[:type] || User.current.pref[:diff_type] || 'inline'
@diff_type = 'inline' unless %w(inline sbs).include?(@diff_type)
render_404
end
+ REV_PARAM_RE = %r{^[a-f0-9]*$}
+
def find_repository
@project = Project.find(params[:id])
@repository = @project.repository
@path = params[:path].join('/') unless params[:path].nil?
@path ||= ''
@rev = params[:rev]
+ @rev_to = params[:rev_to]
+ raise InvalidRevisionParam unless @rev.to_s.match(REV_PARAM_RE) && @rev.to_s.match(REV_PARAM_RE)
rescue ActiveRecord::RecordNotFound
render_404
+ rescue InvalidRevisionParam
+ show_error_not_found
end
def show_error_not_found
# or nil if the given path doesn't exist in the repository\r
def entries(path=nil, identifier=nil)\r
path ||= ''\r
- identifier = 'HEAD' unless identifier and identifier > 0\r
+ identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"\r
entries = Entries.new\r
cmd = "#{SVN_BIN} list --xml #{target(path)}@#{identifier}"\r
cmd << credentials_string\r
\r
def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})\r
path ||= ''\r
- identifier_from = 'HEAD' unless identifier_from and identifier_from.to_i > 0\r
- identifier_to = 1 unless identifier_to and identifier_to.to_i > 0\r
+ identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : "HEAD"\r
+ identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : 1\r
revisions = Revisions.new\r
cmd = "#{SVN_BIN} log --xml -r #{identifier_from}:#{identifier_to}"\r
cmd << credentials_string\r
\r
def diff(path, identifier_from, identifier_to=nil, type="inline")\r
path ||= ''\r
- if identifier_to and identifier_to.to_i > 0\r
- identifier_to = identifier_to.to_i \r
- else\r
- identifier_to = identifier_from.to_i - 1\r
- end\r
+ identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : ''\r
+ identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : (identifier_from.to_i - 1)\r
+ \r
cmd = "#{SVN_BIN} diff -r "\r
cmd << "#{identifier_to}:"\r
cmd << "#{identifier_from}"\r