在 SVN 存储库中查找修改最多的文件扩展名
Find most modified file extensions in SVN repository
给定一个 SVN 存储库url如何找出最受感动的文件扩展名。
本质上我想比较一下 JS 代码和 C# 代码做了多少改动。
谢谢你的想法。
我想到了这个(扩展名是最后一个点之后的任何内容,忽略根本没有点的路径):
svn log $url -v | grep '^ M \|^ A \|^ D \|^ R ' | grep '\.' | awk -F . '{print $NF}' | sed 's/:.*$//' | sort | uniq -c | sort -bgr
示例输出(限制为 5 次签入):
svn log http://svn.code.sf.net/p/codeblocks/code/trunk/ -v --limit 5 | grep '^ M \|^ A \|^ D \|^ R ' | grep '\.' | awk -F . '{print $NF}' | sed 's/:.*$//' | sort | uniq -c | sort -bgr
20 xpm
20 bmp
19 h
19 cpp
16 cbp
7 am
4 xml
2 wxs
2 rc
2 in
1 xrc
1 workspace
1 m4
1 ac
我能够使用 node.js 脚本获取统计信息。
切换到工作副本文件夹并运行以下命令获取 svn 更改(在我的例子中是 2015 年)
svn log -v --xml -r {2015-01-01}:{2015-12-31} > svn.log
运行 脚本
var fs = require('fs'),
xml2js = require('xml2js'),
_ = require('lodash'),
path = require('path');
var parser = new xml2js.Parser();
fs.readFile(__dirname + '/svn.log', function(err, data) {
if (err) {
console.log('Error reading: ', err);
}
parser.parseString(data, function(err, result) {
if (err) {
console.log('Error parsing: ', err);
return;
}
var paths = _.reduce(result.log.logentry, function(result, n, key) {
var revisionPaths = _.map(n.paths[0].path, '_');
result = result.concat(revisionPaths);
return result;
}, []);
var statsByExtension = _.groupBy(paths, function(p) {
return path.extname(p);
});
statsByExtension = _.map(statsByExtension, function(value, index) {
return {
ext: index,
count: value.length
};
});
statsByExtension = _.sortByOrder(statsByExtension, ['count'], ['desc']);
_.forEach(statsByExtension, function(value, key) {
console.log(value.ext, ' : ', value.count);
});
console.log('Done');
});
});
给定一个 SVN 存储库url如何找出最受感动的文件扩展名。
本质上我想比较一下 JS 代码和 C# 代码做了多少改动。
谢谢你的想法。
我想到了这个(扩展名是最后一个点之后的任何内容,忽略根本没有点的路径):
svn log $url -v | grep '^ M \|^ A \|^ D \|^ R ' | grep '\.' | awk -F . '{print $NF}' | sed 's/:.*$//' | sort | uniq -c | sort -bgr
示例输出(限制为 5 次签入):
svn log http://svn.code.sf.net/p/codeblocks/code/trunk/ -v --limit 5 | grep '^ M \|^ A \|^ D \|^ R ' | grep '\.' | awk -F . '{print $NF}' | sed 's/:.*$//' | sort | uniq -c | sort -bgr
20 xpm
20 bmp
19 h
19 cpp
16 cbp
7 am
4 xml
2 wxs
2 rc
2 in
1 xrc
1 workspace
1 m4
1 ac
我能够使用 node.js 脚本获取统计信息。
切换到工作副本文件夹并运行以下命令获取 svn 更改(在我的例子中是 2015 年)
svn log -v --xml -r {2015-01-01}:{2015-12-31} > svn.log
运行 脚本
var fs = require('fs'),
xml2js = require('xml2js'),
_ = require('lodash'),
path = require('path');
var parser = new xml2js.Parser();
fs.readFile(__dirname + '/svn.log', function(err, data) {
if (err) {
console.log('Error reading: ', err);
}
parser.parseString(data, function(err, result) {
if (err) {
console.log('Error parsing: ', err);
return;
}
var paths = _.reduce(result.log.logentry, function(result, n, key) {
var revisionPaths = _.map(n.paths[0].path, '_');
result = result.concat(revisionPaths);
return result;
}, []);
var statsByExtension = _.groupBy(paths, function(p) {
return path.extname(p);
});
statsByExtension = _.map(statsByExtension, function(value, index) {
return {
ext: index,
count: value.length
};
});
statsByExtension = _.sortByOrder(statsByExtension, ['count'], ['desc']);
_.forEach(statsByExtension, function(value, key) {
console.log(value.ext, ' : ', value.count);
});
console.log('Done');
});
});