|
- require 'nokogiri'
- require 'open3'
-
- module KGrader::Backend
- class SVN
-
- def initialize(filesystem, course, config)
- @fs = filesystem
- @course = course
- @config = config
- end
-
- def revision(repo)
- xml = Nokogiri::XML run('log', '--xml', '-l', '1', repo).first
- xml.css('logentry').attr('revision').value.to_i
- end
-
- def clone(repo, semester, assignment, student)
- url = get_url semester, assignment, student
- run 'checkout', '--ignore-externals', url, repo
- end
-
- def update(repo, revision = nil)
- args = 'update', '--ignore-externals', '--accept', 'tf'
- args.push "-r#{revision}" unless revision.nil?
- run *args, repo
- end
-
- def log(repo)
- xml = Nokogiri::XML run('log', '--xml', repo).first
- xml.css('logentry').map do |elem|
- { :rev => elem.attr('revision').to_i,
- :date => Time.parse(elem.css('date').text) }
- end
- end
-
- def commit(repo, message, paths = nil)
- # TODO
- end
-
- private
- def run(*cmd)
- Open3.capture2e('svn', *cmd)
- end
-
- def get_url(semester, assignment, student)
- @config['url'] % {
- :semester => semester,
- :assignment => assignment,
- :student => student
- }
- end
- end
- end
|