在SVN存储库中查找最多修改的文件扩展名

时间:2015-12-08 17:00:47

标签: svn version-control statistics changelog

给定一个SVN存储库url如何找出最感动的文件扩展名。

基本上我想比较JS和C#代码中做了多少更改。

感谢您的想法。

2 个答案:

答案 0 :(得分:1)

我提出了这个问题(扩展名是最后一个点之后的任何内容,忽略没有点的路径):

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

答案 1 :(得分:0)

我能够使用node.js脚本获取统计信息。

  1. 切换到工作副本文件夹并运行以下命令以获取svn更改(在我的情况下为2015年)

    svn log -v --xml -r {2015-01-01}:{2015-12-31}> svn.log

  2. 运行脚本

  3. 
    
    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');
      });
    });