Changeset 532


Ignore:
Timestamp:
Dec 26, 2007, 2:47:03 AM (14 years ago)
Author:
Peter Johansson
Message:

Node holds a StatsCollection? rather than a Stats object.

Location:
trunk
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/bin/svndigest.cc

    r522 r532  
    2424#include "Parameter.h"
    2525
    26 #include "ClassicStats.h"
    2726#include "Configuration.h"
    2827#include "css.h"
     
    3231#include "html_utility.h"
    3332#include "rmdirhier.h"
     33#include "Stats.h"
     34#include "StatsCollection.h"
    3435#include "SVN.h"
    3536#include "SVNinfo.h"
     
    150151  if (option->verbose())
    151152    std::cout << "Parsing directory tree" << std::endl;
    152   ClassicStats stats(tree->parse(option->verbose()));
     153  StatsCollection stats(tree->parse(option->verbose()));
    153154
    154155  if (option->report()) {
     
    170171                                   +tree->name()+"'");
    171172    print_css("svndigest.css");
    172     print_main_page(tree->name(), tree->log(), stats, tree->url());
     173    const Stats& classic = stats["classic"];
     174    print_main_page(tree->name(), tree->log(), classic, tree->url());
    173175    // create structure StatsType/Author/LineType
    174     create_file_struct("classic/", stats);
     176    create_file_struct("classic/", classic);
    175177    try {
    176178      tree->print(option->verbose());
  • trunk/lib/Directory.cc

    r519 r532  
    129129  }
    130130
    131   const ClassicStats& Directory::parse(const bool verbose)
     131  const StatsCollection& Directory::parse(const bool verbose)
    132132  {
    133133    stats_.reset();
     
    154154  {
    155155
     156    const Stats& stats = stats_[stats_type];
    156157    std::string outdir = stats_type+"/"+user+"/"+line_type+"/"+local_path_;
    157158    if (local_path_=="")
     
    176177    os << "../../../";
    177178    if (user=="all")
    178       os << stats_.plot(imagedir+"/index.png", line_type);
     179      os << stats.plot(imagedir+"/index.png", line_type);
    179180    else
    180181      os << imagedir << "/index.png";
     
    208209    // print html links to daughter nodes
    209210    for (NodeConstIterator d = daughters_.begin(); d!=daughters_.end(); ++d) {
    210       (*d)->html_tablerow(os,color, user);
     211      (*d)->html_tablerow(os,stats_type, color, user);
    211212      if (color=="dark")
    212213        color = "light";
     
    217218    os << "<td>Total</td>\n";
    218219    if (user=="all"){
    219       os << "<td>" << stats_.lines() << "</td>\n";
    220       os << "<td>" << stats_.code() << "</td>\n";
    221       os << "<td>" << stats_.comments() << "</td>\n";
    222       os << "<td>" << stats_.empty() << "</td>\n";
     220      os << "<td>" << stats.lines() << "</td>\n";
     221      os << "<td>" << stats.code() << "</td>\n";
     222      os << "<td>" << stats.comments() << "</td>\n";
     223      os << "<td>" << stats.empty() << "</td>\n";
    223224    }
    224225    else {
    225       os << "<td>" << stats_.lines(user);
    226       if (stats_.lines(user))
    227         os << " (" << percent(stats_.lines(user),stats_.lines()) << "%)";
    228       os << "</td>\n";
    229       os << "<td>" << stats_.code(user);
    230       if (stats_.code(user))
    231         os << " (" << percent(stats_.code(user),stats_.code()) << "%)";
    232       os << "</td>\n";
    233       os << "<td>" << stats_.comments(user);
    234       if (stats_.comments(user))
    235         os << " (" << percent(stats_.comments(user),stats_.comments()) << "%)";
    236       os << "</td>\n";
    237       os << "<td>" << stats_.empty(user);
    238       if (stats_.empty(user))
    239         os << " (" << percent(stats_.empty(user),stats_.empty()) << "%)";
    240       os << "</td>\n";
    241     }
    242     os << "<td>" << trac_revision(stats_.last_changed_rev()) << "</td>\n";
     226      os << "<td>" << stats.lines(user);
     227      if (stats.lines(user))
     228        os << " (" << percent(stats.lines(user),stats.lines()) << "%)";
     229      os << "</td>\n";
     230      os << "<td>" << stats.code(user);
     231      if (stats.code(user))
     232        os << " (" << percent(stats.code(user),stats.code()) << "%)";
     233      os << "</td>\n";
     234      os << "<td>" << stats.comments(user);
     235      if (stats.comments(user))
     236        os << " (" << percent(stats.comments(user),stats.comments()) << "%)";
     237      os << "</td>\n";
     238      os << "<td>" << stats.empty(user);
     239      if (stats.empty(user))
     240        os << " (" << percent(stats.empty(user),stats.empty()) << "%)";
     241      os << "</td>\n";
     242    }
     243    os << "<td>" << trac_revision(stats.last_changed_rev()) << "</td>\n";
    243244    os << "<td>" << author() << "</td>\n";
    244245    os << "</tr>\n";
    245246    os << "</tbody>\n";
    246247    os << "</table>\n";
    247     print_author_summary(os, line_type, log);
     248    print_author_summary(os, stats, line_type, log);
    248249    os << "\n";
    249250    print_footer(os);
  • trunk/lib/Directory.h

    r519 r532  
    8181    std::string output_path(void) const;
    8282
    83     const ClassicStats& parse(const bool verbose=false);
     83    const StatsCollection& parse(const bool verbose=false);
    8484
    8585    void print_copyright(std::map<std::string, Alias>&, bool verbose) const;
  • trunk/lib/File.cc

    r528 r532  
    189189
    190190
    191   const ClassicStats& File::parse(const bool verbose)
     191  const StatsCollection& File::parse(const bool verbose)
    192192  {
    193193    if (verbose)
     
    202202      }
    203203    }
    204     stats_.reset();
    205     stats_.parse(path_);
    206204    if (!node_exist(cache_dir))
    207205      mkdir(cache_dir);
     
    235233    if (GnuplotFE::instance()->dates().empty()){
    236234      using_dates=false;
    237       last = stats_.revision();
     235      last = stats_["classic"].revision();
    238236    }
    239237    else {
     
    329327    os << "../../../";
    330328    if (user=="all")
    331       os << stats_.plot(imagefile,line_type);
     329      os << stats_[stats_type].plot(imagefile,line_type);
    332330    else
    333331      os << imagefile;
    334332    os << "' alt='[plot]' />\n</p>";
    335333
    336     print_author_summary(os, line_type, log);
     334    print_author_summary(os, stats_[stats_type], line_type, log);
    337335    os << "\n";
    338336
  • trunk/lib/File.h

    r519 r532  
    6464    /// @return Stats object of the file
    6565    ///
    66     const ClassicStats& parse(const bool verbose=false);
     66    const StatsCollection& parse(const bool verbose=false);
    6767
    6868    /**
  • trunk/lib/Makefile.am

    r531 r532  
    3030  Date.h Directory.h File.h first_page.h Functor.h Gnuplot.h GnuplotFE.h \
    3131  HtmlStream.h html_utility.h LogIterator.h Node.h Parser.h rmdirhier.h \
    32   Stats.h SVN.h SVNblame.h  \
     32  Stats.h StatsCollection.h SVN.h SVNblame.h  \
    3333  SVNinfo.h SVNlog.h SVNproperty.h Trac.h utility.h
    3434
     
    3939  Functor.cc Gnuplot.cc GnuplotFE.cc  HtmlStream.cc \
    4040  html_utility.cc LogIterator.cc Node.cc Parser.cc \
    41   rmdirhier.cc Stats.cc SVN.cc        \
     41  rmdirhier.cc Stats.cc StatsCollection.cc SVN.cc       \
    4242  SVNblame.cc SVNinfo.cc SVNlog.cc SVNproperty.cc Trac.cc utility.cc
    4343
  • trunk/lib/Node.cc

    r519 r532  
    8888
    8989  void Node::html_tablerow(std::ostream& os,
     90                           const std::string& stats_type,
    9091                           const std::string& css_class,
    9192                           const std::string& user) const
    9293  {
     94    const Stats& stats = stats_[stats_type];
    9395    os << "<tr class=\"" << css_class << "\">\n"
    9496       << "<td class=\"" << node_type() << "\">";
     
    100102      os << name() << " (<i>link</i>)";
    101103    // there is no output for nodes when user has zero contribution
    102     else if (user!="all" && !stats_.lines(user))
     104    else if (user!="all" && !stats.lines(user))
    103105      os << name();
    104106    else
     
    106108    os << "</td>\n";
    107109    if (user=="all") {
    108       os << "<td>" << stats_.lines() << "</td>\n"
    109          << "<td>" << stats_.code() << "</td>\n"
    110          << "<td>" << stats_.comments() << "</td>\n"
    111          << "<td>" << stats_.empty() << "</td>\n";
     110      os << "<td>" << stats.lines() << "</td>\n"
     111         << "<td>" << stats.code() << "</td>\n"
     112         << "<td>" << stats.comments() << "</td>\n"
     113         << "<td>" << stats.empty() << "</td>\n";
    112114    }
    113115    else {
    114       os << "<td>" << stats_.lines(user);
    115       if (stats_.lines(user))
    116         os << " (" << percent(stats_.lines(user),stats_.lines()) << "%)";
     116      os << "<td>" << stats.lines(user);
     117      if (stats.lines(user))
     118        os << " (" << percent(stats.lines(user),stats.lines()) << "%)";
    117119      os << "</td>\n";
    118       os << "<td>" << stats_.code(user);
    119       if (stats_.code(user))
    120         os << " (" << percent(stats_.code(user),stats_.code()) << "%)";
     120      os << "<td>" << stats.code(user);
     121      if (stats.code(user))
     122        os << " (" << percent(stats.code(user),stats.code()) << "%)";
    121123      os << "</td>\n";
    122       os << "<td>" << stats_.comments(user);
    123       if (stats_.comments(user))
    124         os << " (" << percent(stats_.comments(user),stats_.comments()) << "%)";
     124      os << "<td>" << stats.comments(user);
     125      if (stats.comments(user))
     126        os << " (" << percent(stats.comments(user),stats.comments()) << "%)";
    125127      os << "</td>\n";
    126       os << "<td>" << stats_.empty(user);
    127       if (stats_.empty(user))
    128         os << " (" << percent(stats_.empty(user),stats_.empty()) << "%)";
     128      os << "<td>" << stats.empty(user);
     129      if (stats.empty(user))
     130        os << " (" << percent(stats.empty(user),stats.empty()) << "%)";
    129131      os << "</td>\n";
    130132
     
    202204      std::cout << "Printing output for " << path_ << std::endl;
    203205    SVNlog log(path_);
    204     print_core("classic", "all", "total", log);
    205     print_core("classic", "all", "code", log);
    206     print_core("classic", "all", "comments", log);
    207     print_core("classic", "all", "empty", log);
    208 
    209     for (std::set<std::string>::const_iterator i = stats_.authors().begin();
    210          i!=stats_.authors().end(); ++i) {
    211       print_core("classic", *i, "total", log);
    212       print_core("classic", *i, "code", log);
    213       print_core("classic", *i, "comments", log);
    214       print_core("classic", *i, "empty", log);
    215     }
    216    
    217     print_core(verbose);
    218   }
    219 
    220 
    221   void Node::print_author_summary(std::ostream& os, std::string line_type,
     206    typedef std::map<std::string, Stats*>::const_iterator iter;
     207
     208    const iter end(stats_.stats().end());
     209    for (iter i=stats_.stats().begin();i!=end; ++i){
     210      print_core(i->first, "all", "total", log);
     211      print_core(i->first, "all", "code", log);
     212      print_core(i->first, "all", "comments", log);
     213      print_core(i->first, "all", "empty", log);
     214      for (std::set<std::string>::const_iterator j=i->second->authors().begin();
     215         j!=i->second->authors().end(); ++j) {
     216        print_core(i->first, *j, "total", log);
     217        print_core(i->first, *j, "code", log);
     218        print_core(i->first, *j, "comments", log);
     219        print_core(i->first, *j, "empty", log);
     220      }
     221    }
     222      print_core(verbose);
     223  }
     224
     225
     226  void Node::print_author_summary(std::ostream& os,
     227                                  const Stats& stats,
     228                                  const std::string& line_type,
    222229                                  const SVNlog& log) const
    223230  {
     
    246253    // print authors
    247254    const std::string timefmt("%e/%m/%y %H:%M:%S");
    248     for (std::set<std::string>::const_iterator i=stats_.authors().begin();
    249          i!=stats_.authors().end(); ++i){
     255    for (std::set<std::string>::const_iterator i=stats.authors().begin();
     256         i!=stats.authors().end(); ++i){
    250257      if (color=="dark")
    251258        color="light";
     
    255262      os << anchor(*i+"/"+line_type+"/"+output_path()
    256263                   ,*i, level_+2, "View statistics for "+*i);
    257       os << "</td><td>" << stats_.lines(*i)
    258          << "</td><td>" << stats_.code(*i)
    259          << "</td><td>" << stats_.comments(*i)
    260          << "</td><td>" << stats_.empty(*i);
     264      os << "</td><td>" << stats.lines(*i)
     265         << "</td><td>" << stats.code(*i)
     266         << "</td><td>" << stats.comments(*i)
     267         << "</td><td>" << stats.empty(*i);
    261268      if (log.exist(*i)) {
    262269        Commitment lc(log.latest_commit(*i));
     
    284291                   ,"Total", level_+2, "View statistics for all");
    285292    os << "</td>\n";
    286     os << "<td>" << stats_.lines() << "</td>\n";
    287     os << "<td>" << stats_.code() << "</td>\n";
    288     os << "<td>" << stats_.comments() << "</td>\n";
    289     os << "<td>" << stats_.empty() << "</td>\n";
     293    os << "<td>" << stats.lines() << "</td>\n";
     294    os << "<td>" << stats.code() << "</td>\n";
     295    os << "<td>" << stats.comments() << "</td>\n";
     296    os << "<td>" << stats.empty() << "</td>\n";
    290297    Commitment lc(log.latest_commit());
    291298    os << "<td>" << trac_revision(lc.revision()) << "</td>\n";
  • trunk/lib/Node.h

    r519 r532  
    2626
    2727#include "html_utility.h"
    28 #include "ClassicStats.h"
     28#include "StatsCollection.h"
    2929#include "SVNinfo.h"
    3030#include "SVNlog.h"
     
    8989
    9090    void html_tablerow(std::ostream&, const std::string&,
     91                       const std::string& css,
    9192                       const std::string& user) const;
    9293
     
    151152    /// @brief parsing file using svn blame.
    152153    ///
    153     virtual const ClassicStats& parse(const bool verbose=false)=0;
     154    virtual const StatsCollection& parse(const bool verbose=false)=0;
    154155
    155156    ///
     
    163164    void print(const bool verbose=false) const;
    164165
    165     void print_author_summary(std::ostream&, std::string, const SVNlog&) const;
     166    void print_author_summary(std::ostream&,
     167                              const Stats& stats,
     168                              const std::string& line_type,
     169                              const SVNlog&) const;
    166170
    167171    virtual void print_copyright(std::map<std::string,Alias>&, bool) const=0;
     
    198202    std::string path_; // absolute path
    199203    static std::string project_;
    200     ClassicStats stats_;
     204    StatsCollection stats_;
    201205
    202206  private:
  • trunk/lib/Stats.cc

    r531 r532  
    8282         iter!=authors().end(); ++iter) {
    8383      std::vector<u_int>& code = code_[*iter];
     84      assert(code.size()<60);
    8485      accumulate(code);
    8586      std::vector<u_int>& comments = comments_[*iter];
     87      assert(comments.size()<60);
    8688      accumulate(comments);
    8789      std::vector<u_int>& other = other_[*iter];
     90      assert(other.size()<60);
    8891      accumulate(other);
    8992
     
    120123    std::vector<u_int>& code = code_[user];
    121124    if (code.size() < rev+1){
    122       code.reserve(revision() + 1);
    123       code.insert(code.end(), rev - code.size(), 0);
     125      code.reserve(rev+1);
     126      code.resize(rev);
    124127      if (lt == Parser::code)
    125128        code.push_back(n);
     
    135138      comments.insert(comments.end(), rev - comments.size(), 0);
    136139      if (lt == Parser::comment)
    137         code.push_back(n);
     140        comments.push_back(n);
    138141      else
    139142        comments.push_back(0);
     
    237240        is >> count;
    238241        if ( rev+1 > static_cast<svn_revnum_t>(vec.size()) )
    239         vec.resize(rev+1);
     242          vec.resize(rev+1);
    240243        vec[rev] = count;
    241244        is >> rev;
     
    286289    getline(is,str);
    287290    getline(is,str);
     291    if (total_.size()>static_cast<size_t>(rev+1))
     292      return false;
     293    accumulate_stats();
     294    return false;
    288295    return str==end_of_cache();
    289296  }
  • trunk/lib/Stats.h

    r531 r532  
    175175    // that all old cache files are obsolete.
    176176    inline std::string end_of_cache(void) const
    177     {return "END OF OK CACHE FILE VERSION 3";}
     177    {return "END OF OK CACHE FILE VERSION 300";}
    178178    inline std::string code_cache(void) const {return "CACHE CODE";}
    179179    inline std::string comments_cache(void) const {return "CACHE COMMENTS";}
Note: See TracChangeset for help on using the changeset viewer.