Changeset 60 for trunk/lib/Stats.cc


Ignore:
Timestamp:
Jan 16, 2006, 11:03:04 AM (16 years ago)
Author:
Peter Johansson
Message:

plotting vs date rather than revision

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Stats.cc

    r44 r60  
    66
    77#include <algorithm>
     8#include <iostream>
    89#include <map>
    910#include <numeric>
     
    2223  std::vector<double> Stats::accumulated(void) const
    2324  {
    24     if (map_.empty())
    25       return std::vector<double>();
    26 
    2725    // sum of all users
    28     std::vector<u_int> sum(latest_revision_+1,0);
     26    std::vector<u_int> sum(latest_revision_+1, 0);
    2927    sum=std::accumulate(map_.begin(), map_.end(), sum,
    3028                        PairValuePlus<std::string,u_int>());
     
    3230    // calculate accumulated sum
    3331    std::vector<double> accum(sum.size());
    34     std::partial_sum(sum.begin(),sum.end(),accum.begin());   
     32    std::partial_sum(sum.begin(),sum.end(),accum.begin());
    3533    return accum;
    3634  }
     
    6361  }
    6462
     63
     64  bool Stats::parse(const std::string& path, const bool binary)
     65  {
     66    if (binary){
     67      std::map<std::string,std::string> svn_info = info(path);
     68      std::stringstream ss(svn_info["Last Changed Rev"]);
     69      u_int revision;
     70      ss >> revision;
     71      add(svn_info["Last Changed Author"],revision);
     72      return true;
     73    }
     74
     75    // Calling svn blame
     76    if (blame(path))
     77      return true;
     78
     79    // Check if file is binary
     80    std::ifstream is("svnstat.tmp");
     81    std::string line;
     82    getline(is,line,' ');
     83    if (line==std::string("Skipping")){
     84      getline(is,line,' ');
     85      if (line==std::string("binary")){
     86        is.close();
     87        return parse(path,true);
     88      }
     89    }
     90    is.close();
     91
     92    is.open("svnstat.tmp");
     93    while (getline(is,line, '\n')){
     94      if (!line.size()) // skip empty line
     95        continue;
     96      std::stringstream ss(line);
     97      u_int revision;
     98      std::string user;
     99      ss >> revision;
     100      ss >> user;
     101      add(user, revision);
     102    }
     103    is.close();
     104    return false;
     105  }
     106
     107
    65108  std::string Stats::plot(void) const
    66109  {
    67110    char name[]="svnstat_XXXXXX.png";
    68     if (mkstemps(name,4)==-1)
     111    if (mkstemps(name,4)==-1){
    69112      throw std::runtime_error(std::string("Failed to get unique filename: ") +
    70                                name);
     113                             name);
     114    }
    71115    std::string cmd=std::string("set term png; set output '")+name+"'";
    72116    gnuplot_pipe_.command(cmd);
    73117    gnuplot_pipe_.command("set key left Left reverse");
    74     std::vector<double> x=accumulated();
     118    std::vector<double> x=accumulated();   
    75119    std::stringstream sa;
    76120    sa << x.back() << " total";
    77121    gnuplot_pipe_.linetitle(sa.str());
    78     gnuplot_pipe_.plot(x);
     122    gnuplot_pipe_.date_plot(x);
    79123    for (MapConstIter_ i= map_.begin(); i != map_.end(); i++) {
    80124      x=accumulated(i->first);
     
    82126      s << x.back() << " " << i->first;
    83127      gnuplot_pipe_.linetitle(s.str());
    84       gnuplot_pipe_.replot(x);
     128      gnuplot_pipe_.date_replot(x);
    85129    }
    86130
Note: See TracChangeset for help on using the changeset viewer.