grunt-svninfo
Version:
Subversion working copy metadata (svn info) grunt plugin
59 lines (51 loc) • 2.07 kB
text/coffeescript
#
# * grunt-svninfo
# * https://github.com/liqweed/grunt-svninfo
# *
# * Copyright (c) 2013 liqweed
# * Licensed under the MIT license.
#
#
# require("child_process").spawn("svn",["info"],{cwd:"./test/fixtures/svninfo"}).stdout.on('data',function(data){ console.log(data.toString()); });
"use strict"
module.exports = (grunt) ->
# Please see the Grunt documentation for more information regarding task
# creation: http://gruntjs.com/creating-tasks
grunt.registerTask 'svninfo','Get Subversion info from a working copy and populate grunt.config with the data', (output, argsKey) ->
done = @async()
options = @options
cwd: '.'
output: 'svninfo'
options.output = output if output
args = options[argsKey or 'args']
grunt.verbose.writeln("svninfo start: output - ", options.output, ", args - ", args)
grunt.util.spawn
cmd: 'svn'
args: if args then ['info', '--xml'].concat(args) else ['info', '--xml']
opts: options
, (err, result) ->
if err
grunt.log.warn err
return done()
info = {}
# Extract xml info with RegExp
revRE = /<entry[^>]+revision="([^"]*)"/
urlRE = /<url>([^<]*)<\/url>/
lastRevRE = /<commit[^>]+revision="([^"]*)"/
lastAuthorRE = /<author>([^<]*)<\/author>/
lastDateRE = /<date>([^<]*)<\/date>/
repoRootRE = /<root>([^<]*)<\/root>/
repoIdRE = /<uuid>([^<]*)<\/uuid>/
# Populate grunt.config with nicely parsed object:
grunt.config.set options.output,
rev: revRE.exec(result.stdout)[1]
url: urlRE.exec(result.stdout)[1]
last:
rev: lastRevRE.exec(result.stdout)[1]
author: lastAuthorRE.exec(result.stdout)[1]
date: lastDateRE.exec(result.stdout)[1]
repository:
root: repoRootRE.exec(result.stdout)[1]
id: repoIdRE.exec(result.stdout)[1]
grunt.log.writeln "SVN info fetched (rev: #{grunt.config.get(options.output + '.rev')})"
done()