Changeset 664 for trunk


Ignore:
Timestamp:
Jun 13, 2008, 3:23:51 AM (13 years ago)
Author:
Peter Johansson
Message:

fixes #292

Location:
trunk/lib
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/AddStats.cc

    r657 r664  
    5555
    5656
    57   void AddStats::do_parse(const std::string& path)
     57  void AddStats::do_parse(const std::string& path, svn_revnum_t rev)
    5858  {
    5959    SVNlog log(path);
    60     typedef std::set<svn_revnum_t> RevSet;
     60    typedef std::set<svn_revnum_t, std::greater<svn_revnum_t> > RevSet;
    6161    RevSet revs;
    6262    std::transform(log.commits().begin(), log.commits().end(),
    6363                   std::inserter(revs, revs.begin()),
    6464                   std::mem_fun_ref(&Commitment::revision));
    65     for (RevSet::iterator rev_iter=revs.begin();rev_iter!=revs.end();++rev_iter){
     65    for (RevSet::iterator rev_iter=revs.begin();
     66         rev_iter!=revs.end() && *rev_iter>rev; ++rev_iter){
    6667      SVNblame svn_blame(path, *rev_iter);
    6768      LineTypeParser parser(path);
     
    7677    }
    7778   
    78     accumulate_stats();
     79    accumulate_stats(rev);
    7980  }
    8081
  • trunk/lib/AddStats.h

    r543 r664  
    4444
    4545  private:
    46     void do_parse(const std::string&);
     46    void do_parse(const std::string&, svn_revnum_t);
    4747
    4848  };
  • trunk/lib/BlameStats.cc

    r657 r664  
    7676
    7777
    78   void BlameStats::do_parse(const std::string& path)
     78  void BlameStats::do_parse(const std::string& path, svn_revnum_t first_rev)
    7979  {
    8080    SVNlog log(path);
    81     typedef std::set<svn_revnum_t> RevSet;
     81    typedef std::set<svn_revnum_t, std::greater<svn_revnum_t> > RevSet;
    8282    RevSet revs;
    8383    std::transform(log.commits().begin(), log.commits().end(),
    8484                   std::inserter(revs, revs.begin()),
    8585                   std::mem_fun_ref(&Commitment::revision));
    86     for (RevSet::iterator rev_iter=revs.begin();rev_iter!=revs.end();++rev_iter){
     86    for (RevSet::iterator rev_iter=revs.begin();
     87         rev_iter!=revs.end() && *rev_iter>first_rev; ++rev_iter){
    8788      SVNblame svn_blame(path, *rev_iter);
    8889      LineTypeParser parser(path);
     
    9798    // filling in pristine revisions
    9899    RevSet::iterator rev_iter=revs.begin();
    99     for (svn_revnum_t rev = 1; rev<=revision(); ++rev){
     100    for (svn_revnum_t rev = first_rev+1; rev<=revision(); ++rev){
    100101      if (rev==*rev_iter)
    101102        ++rev_iter;
  • trunk/lib/BlameStats.h

    r537 r664  
    4646
    4747  private:
    48     void do_parse(const std::string&);
     48    void do_parse(const std::string&, svn_revnum_t);
    4949    void fill_in(Author2Vector&, svn_revnum_t rev);
    5050
  • trunk/lib/ClassicStats.cc

    r656 r664  
    6161
    6262
    63   void ClassicStats::do_parse(const std::string& path)
     63  void ClassicStats::do_parse(const std::string& path, svn_revnum_t rev)
    6464  {
     65    // we only call blame once so we can ignore rev here
    6566    LineTypeParser parser(path);
    6667    SVNblame svn_blame(path);
  • trunk/lib/ClassicStats.h

    r531 r664  
    4646
    4747  private:
    48     void do_parse(const std::string&);
     48    void do_parse(const std::string&, svn_revnum_t);
    4949
    5050  };
  • trunk/lib/File.cc

    r663 r664  
    196196    if (!ignore && node_exist(cache_file)){
    197197      std::ifstream is(cache_file.c_str());
    198       if (stats_.load_cache(is)){
     198      if (stats_.load_cache(is)) {
     199        is.close();
    199200        return stats_;
    200201      }
  • trunk/lib/Stats.cc

    r649 r664  
    6666
    6767
    68   void Stats::accumulate(std::vector<unsigned int>& vec) const
     68  void Stats::accumulate(std::vector<unsigned int>& vec,
     69                         svn_revnum_t rev) const
    6970  {
    7071    if (vec.empty()){
     
    7273      vec.resize(1,0);
    7374    }
    74     else
    75       std::partial_sum(vec.begin(),vec.end(),vec.begin());
     75    else if (vec.begin()+rev < vec.end())
     76      std::partial_sum(vec.begin()+rev,vec.end(),vec.begin()+rev);
    7677    // static_cast to remove annoying compiler warning
    7778    if (vec.size() < static_cast<size_t>(revision()+1))
     
    8081
    8182
    82   void Stats::accumulate_stats(void)
     83  void Stats::accumulate_stats(svn_revnum_t rev)
    8384  {
    8485    for (std::set<std::string>::const_iterator iter(authors().begin());
    8586         iter!=authors().end(); ++iter) {
    8687      std::vector<unsigned int>& code = code_stats()[*iter];
    87       accumulate(code);
     88      accumulate(code, rev);
    8889      std::vector<unsigned int>& comments = comment_stats()[*iter];
    89       accumulate(comments);
     90      accumulate(comments, rev);
    9091      std::vector<unsigned int>& other = other_stats()[*iter];
    91       accumulate(other);
     92      accumulate(other, rev);
    9293      std::vector<unsigned int>& copyright = copyright_stats()[*iter];
    93       accumulate(copyright);
     94      accumulate(copyright, rev);
    9495    }
    9596  }
     
    277278
    278279
    279   bool Stats::load_cache(std::istream& is)
     280  svn_revnum_t Stats::load_cache(std::istream& is)
    280281  {
    281282    std::string str;
    282283    getline(is, str);
    283284    if (str!=cache_check_str())
    284       return false;
     285      return 0;
    285286    svn_revnum_t rev;
    286287    is >> rev;
    287     if (rev<last_changed_rev()){
    288       return false; // cache is not up to date
    289     }
    290288    reset();
    291289    size_t a_size=0;
     
    298296    getline(is, str);
    299297    if (str!=cache_check_str()) {
    300       return false;
     298      return 0;
    301299    }
    302300    for (size_t i=0; i<stats_.size(); ++i){
     
    304302      getline(is, str);
    305303      if (str!=cache_check_str()) {
    306         return false;
    307       }
    308     }
    309     return true;
     304        return 0;
     305      }
     306    }
     307    return rev;
    310308  }
    311309
     
    337335
    338336
    339   void Stats::parse(const std::string& path)
    340   {
    341     do_parse(path);
     337  void Stats::parse(const std::string& path, svn_revnum_t rev)
     338  {
     339    do_parse(path, rev);
    342340    calc_comment_or_copy();
    343341    calc_total();
  • trunk/lib/Stats.h

    r650 r664  
    9696       Load object from a stream.
    9797       
    98        \return true if successful
    99      */
    100     bool load_cache(std::istream&);
    101 
    102     /**
    103        Do the parsing
     98       \return revision the cache represents - 0 if failed
     99     */
     100    svn_revnum_t load_cache(std::istream&);
     101
     102    /**
     103       Do the parsing from revision \a rev
    104104    */
    105     void parse(const std::string&);
     105    void parse(const std::string&, svn_revnum_t rev=0);
    106106
    107107    ///
     
    149149    typedef Author2Vector::const_iterator A2VConstIter;
    150150
    151     void accumulate_stats(void);
     151    void accumulate_stats(svn_revnum_t rev=0);
    152152    void add_author(std::string);
    153153    void add_authors(std::set<std::string>::const_iterator,
     
    199199                                         std::string user) const;
    200200  private:
    201     void accumulate(std::vector<unsigned int>& vec) const;
     201    void accumulate(std::vector<unsigned int>& vec,
     202                    svn_revnum_t rev=0) const;
    202203    void add(std::vector<unsigned int>& vec, unsigned int rev, bool x,
    203204             unsigned int n);
    204205
    205     virtual void do_parse(const std::string&)=0;
     206    virtual void do_parse(const std::string&, svn_revnum_t)=0;
    206207   
    207208    // Change this string if cache format is changed in such a way
  • trunk/lib/StatsCollection.cc

    r543 r664  
    6363    bool result = true;
    6464    for (map::const_iterator i(stats_.begin()); i!=stats_.end(); ++i) {
    65       if(!i->second->load_cache(is)){
     65      svn_revnum_t cache_rev = i->second->load_cache(is);
     66      if (cache_rev < i->second->revision()) {
    6667        result = false;
    67         i->second->reset();
    68         i->second->parse(path_);
     68        // reset if load cache failed
     69        if (!cache_rev)
     70          i->second->reset();
     71        i->second->parse(path_, cache_rev);
    6972      }
    7073    }
Note: See TracChangeset for help on using the changeset viewer.