Changeset 482


Ignore:
Timestamp:
Oct 13, 2007, 3:40:38 AM (14 years ago)
Author:
Peter Johansson
Message:

fixes #79 and #5. Only updating changed files.

Location:
trunk/lib
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Directory.cc

    r452 r482  
    161161    if (user=="all")
    162162      mkdir(imagedir);
    163 
    164163    std::string html_name = outdir+"/index.html";
    165164    std::ofstream os(html_name.c_str());
  • trunk/lib/File.cc

    r476 r482  
    194194      std::cout << "Parsing " << path_ << std::endl;
    195195    stats_.reset();
     196    std::string cache_dir = directory_name(path()) + std::string(".svndigest/");
     197    std::string cache_file = cache_dir + name()+std::string(".svndigest-cache");
     198    if (node_exist(cache_file)){
     199      std::ifstream is(cache_file.c_str());
     200      if (stats_.load_cache(is)){
     201        return stats_;
     202      }
     203      std::cout << "failed: " << path_ << std::endl;
     204    }
     205    stats_.reset();
    196206    stats_.parse(path_);
     207    if (!node_exist(cache_dir))
     208      mkdir(cache_dir);
     209    std::ofstream os(cache_file.c_str());
     210    stats_.print(os);
    197211    return stats_;
    198212  }
  • trunk/lib/Node.cc

    r463 r482  
    154154        log_ = new SVNlog(log_core());
    155155    return *log_;
     156  }
     157
     158
     159  std::string Node::name(void) const
     160  {
     161    std::string res = file_name(path_);
     162    return res;
    156163  }
    157164
  • trunk/lib/Node.h

    r453 r482  
    133133    /// @return name of node (not full path)
    134134    ///
    135     inline std::string name(void) const { return file_name(path_); }
     135    std::string name(void) const;
    136136
    137137    /**
     
    139139       exception when an empty string is returned.
    140140
    141        @return output dir for example 'lib' for this file
     141       @return output dir for example 'lib/' for this file
    142142     */
    143143    std::string output_dir(void) const;
  • trunk/lib/Stats.cc

    r468 r482  
    9292                  const Parser::line_type& lt)
    9393  {
     94    assert(user.size());
    9495    authors_.insert(user);
    9596
     
    145146
    146147
    147   void Stats::load(std::istream& is)
    148   {
    149     is >> last_changed_rev_;
     148  bool Stats::load_cache(std::istream& is)
     149  {
     150    svn_revnum_t rev;
     151    is >> rev;
     152    if (rev<last_changed_rev_){
     153      return false; // cache is not up to date
     154    }
    150155    size_t a_size=0;
    151156    authors_.clear();
     
    154159    while (authors_.size()<a_size){
    155160      getline(is, str);
     161      assert(str.size());
    156162      authors_.insert(str);
    157163    }
     164    getline(is, str);
     165    if (str!=code_cache()){
     166      return false;
     167    }
    158168    load(is, code_);
     169    getline(is, str);
     170    getline(is, str);
     171    if (str!=comments_cache()){
     172      return false;
     173    }
    159174    load(is, comments_);
     175    getline(is, str);
     176    getline(is, str);
     177    if (str!=empty_cache()){
     178      return false;
     179    }
    160180    load(is, empty_);
     181    getline(is, str);
     182    getline(is, str);
     183    if (str!=total_cache()){
     184      return false;
     185    }
    161186    load(is, total_);
     187    getline(is,str);
     188    getline(is,str);
     189    return str==end_of_cache();
    162190  }
    163191
     
    166194  {
    167195    m.clear();
    168     while (m.size() < authors_.size()) {
     196    while (m.size() < authors_.size() && is.good()) {
    169197      std::string name;
    170198      std::getline(is, name);
     199      assert(name.size());
    171200      std::vector<u_int>& vec=m[name];
    172201      size_t revs=0;
     
    319348  void Stats::print(std::ostream& os) const
    320349  {
    321     os << last_changed_rev_ << "\n";
    322     os << authors_.size() << "\n";
     350    os << last_changed_rev_ << " ";
     351    os << authors_.size() << " ";
     352
    323353    std::copy(authors_.begin(), authors_.end(),
    324354              std::ostream_iterator<std::string>(os, "\n"));
     355    os << code_cache() << "\n";
    325356    print(os, code_);
     357    os << "\n" << comments_cache() << "\n";
    326358    print(os, comments_);
     359    os << "\n" << empty_cache() << "\n";
    327360    print(os, empty_);
     361    os << "\n" << total_cache() << "\n";
    328362    print(os, total_);
     363    os << "\n" << end_of_cache() << "\n";
    329364  }
    330365
     
    334369    for (MapConstIter_ i(m.begin()); i!=m.end(); ++i){
    335370      os << i->first << "\n";
    336       os << i->second.size() << "\n";
     371      os << i->second.size() << " ";
    337372      std::copy(i->second.begin(), i->second.end(),
    338                 std::ostream_iterator<u_int>(os, "\n"));
     373                std::ostream_iterator<u_int>(os, " "));
    339374    }
    340375  }
  • trunk/lib/Stats.h

    r468 r482  
    3232
    3333#include <map>
     34#include <istream>
    3435#include <set>
    3536#include <string>
     
    104105    { return accumulated(total_, user).back(); }
    105106
     107    /**
     108       Load object from a stream.
     109       
     110       \return true if successful
     111     */
     112    bool load_cache(std::istream&);
     113
    106114    void parse(const std::string&);
    107115
     
    178186             const Parser::line_type&);
    179187
    180 
    181     /**
    182        Load object from a stream.
    183      */
    184     void load(std::istream&);
     188    // Change this string if cache format is changed in such a way
     189    // that all old cache files are obsolete.
     190    inline std::string end_of_cache(void) const {return "END OF OK CACHE FILE";}
     191    inline std::string code_cache(void) const {return "CACHE CODE";}
     192    inline std::string comments_cache(void) const {return "CACHE COMMENTS";}
     193    inline std::string empty_cache(void) const {return "CACHE EMPTY";}
     194    inline std::string total_cache(void) const {return "CACHE TOTAL";}
     195   
    185196
    186197    /**
  • trunk/lib/utility.cc

    r465 r482  
    2424#include "utility.h"
    2525
     26#include <cerrno>
    2627#include <cstdlib>
    2728#include <fstream>
     
    7980
    8081
     82  std::string directory_name(std::string path)
     83  {
     84    size_t pos = path.find_last_of("/");
     85    if (pos==path.size()-1)
     86      return directory_name(path.substr(0,path.size()-2));
     87    return path.substr(0,pos+1);
     88  }
     89
     90
    8191  std::string file_name(const std::string& full_path)
    8292  {
     
    140150  }
    141151
     152  void mkdir(const std::string& dir)
     153  {
     154    int code = ::mkdir(dir.c_str(),0777);
     155    if (code){
     156      std::stringstream ss;
     157      ss << "mkdir(" << dir << "): failed with error code: errno=" << errno;
     158      throw std::runtime_error(ss.str());
     159    }
     160  }
     161
     162
     163  bool node_exist(const std::string& path)
     164  {
     165    struct stat buf;
     166    return !stat(path.c_str(),&buf);
     167  }
     168
    142169
    143170  int percent(int a, int b)
     
    146173      return (100*a)/b;
    147174    return 0;
    148   }
    149 
    150 
    151   bool node_exist(const std::string& path)
    152   {
    153     struct stat buf;
    154     return !stat(path.c_str(),&buf);
    155175  }
    156176
  • trunk/lib/utility.h

    r465 r482  
    6161  void copy_file(const std::string& source, const std::string& target);
    6262
     63  /**
     64     Parsing out the directory of path that is everything prior the
     65     last '/' with the eception if \a path ends with '/' in which case
     66     everything prior the second last '/' is returned.
     67
     68     \return directory of path.
     69   */
     70  std::string directory_name(std::string path);
     71
    6372  ///
    6473  /// @return everything after last '/'
     
    113122  /// mkdir'.
    114123  ///
    115   inline int mkdir(const std::string& dir) { return ::mkdir(dir.c_str(),0777); }
     124  void mkdir(const std::string& dir);
    116125
    117126  ///
Note: See TracChangeset for help on using the changeset viewer.