Changeset 138 for trunk/lib/Stats.cc


Ignore:
Timestamp:
Aug 3, 2006, 11:40:15 PM (15 years ago)
Author:
Jari Häkkinen
Message:

Fixes #23. No system calls to svn are done anymore.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Stats.cc

    r131 r138  
    2626
    2727#include "GnuplotFE.h"
     28#include "SVNblame.h"
    2829#include "SVNinfo.h"
    2930#include "utility.h"
     
    3233#include <cassert>
    3334#include <cstdlib>
    34 #include <fstream>
    3535#include <iostream>
    3636#include <map>
    3737#include <numeric>
    3838#include <string>
     39#include <sstream>
    3940#include <unistd.h>
    4041#include <utility>
     
    8687
    8788  void Stats::add(const std::string& user, const u_int& rev,
    88                   const Parser::line_type lt)
     89                  const Parser::line_type& lt)
    8990  {
    9091    authors_.insert(user);
     
    127128  bool Stats::parse(const std::string& path)
    128129  {
    129     // Calling svn blame
    130     if (blame(path))
    131       return true;
    132 
    133     // Check if file is binary
    134     std::ifstream is("/tmp/svnstat.tmp");
    135     std::string line;
    136     getline(is,line,' ');
    137     if (line==std::string("Skipping")){
    138       getline(is,line,' ');
    139       if (line==std::string("binary")){
    140         is.close();
    141         return true;
    142       }
    143     }
    144     is.close();
     130    SVNblame svn_blame(path);
     131    if (svn_blame.binary())
     132      return true;
    145133
    146134    Parser parser(path);
    147135    std::vector<Parser::line_type>::const_iterator count=parser.type().begin();
    148136
    149     is.open("/tmp/svnstat.tmp");
    150     while (getline(is,line, '\n')){
    151       if (!line.size()) // skip empty line
     137    while (const SVNblame::blame_information * bi=svn_blame.next()) {
     138      if (!bi->line.size()) { // skip empty line
     139        ++count; // keep Parser information in sync with Stats parsing
    152140        continue;
    153       std::stringstream ss(line);
    154       u_int revision;
    155       std::string user;
    156       ss >> revision;
    157       ss >> user;
     141      }
    158142      // to handle symbolic links
    159143      if (count==parser.type().end())
    160         add(user, revision, Parser::empty);
     144        add(bi->author, bi->revision, Parser::empty);
    161145      else
    162         add(user, revision, *count);
     146        add(bi->author, bi->revision, *count);
    163147      count++;
    164     }
    165     is.close();
     148    }
    166149   
    167150    return false;
Note: See TracChangeset for help on using the changeset viewer.