Changeset 642


Ignore:
Timestamp:
Jun 1, 2008, 1:39:01 AM (13 years ago)
Author:
Peter Johansson
Message:

transponating internal representation in SVNlog - rather than storing four vectors, a vector<Commitment> is stored. Removed LogIterator? class since it is not needed anymore.

Location:
trunk
Files:
2 deleted
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/bin/svndigest.cc

    r579 r642  
    160160    if (option->verbose())
    161161      std::cout << "Generating output" << std::endl;
    162     if (!option->revisions())
    163       GnuplotFE::instance()->set_dates(SVNlog(repo).date());
     162    if (!option->revisions()) {
     163      SVNlog log(repo);
     164      std::vector<std::string> dates;
     165      dates.reserve(log.commits().size());
     166      for (size_t i=0; i<log.commits().size(); ++i) {
     167        assert(static_cast<svn_revnum_t>(i)==log.commits()[i].revision());
     168        dates.push_back(log.commits()[i].date());
     169      }
     170      GnuplotFE::instance()->set_dates(dates);
     171    }
    164172    chdir(option->targetdir().c_str());
    165173    mkdir(tree->name());
  • trunk/lib/AddStats.cc

    r552 r642  
    6060    typedef std::set<svn_revnum_t> RevSet;
    6161    RevSet revs;
    62     std::copy(log.revision().begin(), log.revision().end(),
    63               std::inserter(revs, revs.begin()));
     62    std::transform(log.commits().begin(), log.commits().end(),
     63                   std::inserter(revs, revs.begin()), GetRevision());
    6464    for (RevSet::iterator rev_iter=revs.begin();rev_iter!=revs.end();++rev_iter){
    6565      SVNblame svn_blame(path, *rev_iter);
  • trunk/lib/BlameStats.cc

    r589 r642  
    8282    typedef std::set<svn_revnum_t> RevSet;
    8383    RevSet revs;
    84     std::copy(log.revision().begin(), log.revision().end(),
    85               std::inserter(revs, revs.begin()));
     84    std::transform(log.commits().begin(), log.commits().end(),
     85                   std::inserter(revs, revs.begin()), GetRevision());
    8686    for (RevSet::iterator rev_iter=revs.begin();rev_iter!=revs.end();++rev_iter){
    8787      SVNblame svn_blame(path, *rev_iter);
  • trunk/lib/Commitment.cc

    r519 r642  
    3636
    3737  Commitment::Commitment(std::string author, std::string date,
    38                          std::string msg, size_t rev)
     38                         std::string msg, svn_revnum_t rev)
    3939    : author_(author), date_(date), msg_(msg), rev_(rev)
    4040  {
  • trunk/lib/Commitment.h

    r519 r642  
    2727#include <string>
    2828
     29#include <subversion-1/svn_types.h>
     30
    2931namespace theplu {
    3032namespace svndigest {
     
    4850    */
    4951    Commitment(std::string author, std::string date, std::string msg,
    50                size_t rev);
     52               svn_revnum_t rev);
    5153
    5254    /**
    5355       \return Author
    5456    */
    55     inline std::string author(void) const { return author_; }
     57    inline const std::string& author(void) const { return author_; }
    5658
    5759    /**
    5860       \return Date
    5961    */
    60     inline std::string date(void) const { return date_; }
     62    inline const std::string& date(void) const { return date_; }
    6163
    6264    /**
    6365       \return Message
    6466    */
    65     inline std::string message(void) const { return msg_; }
     67    inline const std::string& message(void) const { return msg_; }
    6668
    6769    /**
    6870       \return Revision
    6971    */
    70     inline size_t revision(void) const { return rev_; }
     72    inline svn_revnum_t revision(void) const { return rev_; }
    7173
    7274  private:
     
    8082    std::string date_;
    8183    std::string msg_;
    82     size_t rev_;
     84    svn_revnum_t rev_;
    8385
    8486  };
     
    9193  };
    9294
     95  struct GetAuthor
     96  {
     97    inline const std::string& operator()(const Commitment& commit) const
     98    { return commit.author(); }
     99  };
     100
     101  struct GetRevision
     102  {
     103    inline svn_revnum_t operator()(const Commitment& commit) const
     104    { return commit.revision(); }
     105  };
     106
    93107}} // end of namespace svndigest and namespace theplu
    94108
  • trunk/lib/File.cc

    r638 r642  
    6767    const Stats& stats = stats_["add"];
    6868   
    69 
    70     for (LogIterator i=log.begin(); i<log.end(); ++i){
     69    typedef std::vector<Commitment>::iterator LogIterator;
     70    for (LogIterator i=log.commits().begin(); i<log.commits().end(); ++i){
    7171      if (i->revision() &&
    7272          (stats(LineTypeParser::code, i->author(), i->revision()) >
     
    191191      is.close();
    192192    }
    193     else
     193    else {
    194194      stats_.parse(path_);
     195    }
    195196    if (!node_exist(cache_dir))
    196197      mkdir(cache_dir);
  • trunk/lib/Makefile.am

    r640 r642  
    3333  Date.h Directory.h File.h first_page.h Functor.h Gnuplot.h GnuplotFE.h \
    3434  HtmlBuf.h HtmlStream.h html_utility.h LineTypeParser.h \
    35   LogIterator.h Node.h Option.h rmdirhier.h \
     35  Node.h Option.h rmdirhier.h \
    3636  Stats.h StatsCollection.h subversion_info.h SVN.h SVNblame.h  \
    3737  SVNinfo.h SVNlog.h SVNproperty.h Trac.h utility.h
     
    4242  css.cc Date.cc Directory.cc File.cc first_page.cc\
    4343  Functor.cc Gnuplot.cc GnuplotFE.cc  HtmlBuf.cc HtmlStream.cc \
    44   html_utility.cc LineTypeParser.cc LogIterator.cc Node.cc \
     44  html_utility.cc LineTypeParser.cc Node.cc \
    4545  rmdirhier.cc Stats.cc StatsCollection.cc subversion_info.cc SVN.cc        \
    4646  SVNblame.cc SVNinfo.cc SVNlog.cc SVNproperty.cc Trac.cc utility.cc
  • trunk/lib/Node.cc

    r589 r642  
    7676    if (ignore())
    7777      return svninfo_.last_changed_author();
    78     assert(log().author().size());
    79     return log().author().back();
     78    assert(log().commits().size());
     79    return log().commits().back().author();
    8080  }
    8181
     
    143143    if (ignore())
    144144      return svninfo_.last_changed_rev();
    145     assert(log().revision().size());
    146     return log().revision().back();
     145    assert(log().commits().size());
     146    return log().commits().back().revision();
    147147  }
    148148
  • trunk/lib/SVN.cc

    r579 r642  
    3030#include <vector>
    3131
    32 #include <iostream>
     32#include <cassert>
    3333
    3434#include <apr_allocator.h>
  • trunk/lib/SVNlog.cc

    r519 r642  
    2525
    2626#include "Commitment.h"
    27 #include "LogIterator.h"
    2827#include "SVN.h"
    2928
     
    3938  SVNlog::SVNlog(void)
    4039  {
    41     assert(date().empty());
    42     assert(author().empty());
    43     assert(revision().empty());
    44     assert(message().empty());
    4540  }
    4641
     
    5045    SVN::instance()->client_log(path, log_message_receiver,
    5146                                static_cast<void*>(&lb_));
    52     assert(date().size()==author().size());
    53     assert(date().size()==revision().size());
    54     assert(date().size()==message().size());
    5547  }
    5648
     
    6153
    6254 
    63   LogIterator SVNlog::begin() const
     55  bool SVNlog::exist(std::string name) const
    6456  {
    65     return LogIterator(*this, 0);
     57   
     58    std::vector<Commitment>::const_reverse_iterator iter = commits().rbegin();
     59    for ( ; iter!= commits().rend(); ++iter)
     60      if (iter->author() == name)
     61        return true;
     62    return false;
    6663  }
    6764
    6865
    69   LogIterator SVNlog::end() const
     66  const Commitment& SVNlog::latest_commit(void) const
    7067  {
    71     return LogIterator(*this, revision().size());
     68    return commits().back();
    7269  }
    7370
    7471
    75   bool SVNlog::exist(std::string name) const
     72  const Commitment& SVNlog::latest_commit(std::string name) const
    7673  {
    77     std::vector<std::string>::const_reverse_iterator iter =
    78       find(author().rbegin(), author().rend(), name);
    79     return iter!=author().rend();
    80   }
    81 
    82 
    83   Commitment SVNlog::latest_commit(void) const
    84   {
    85     return Commitment(author().back(), date().back(),
    86                       message().back(), revision().back());
    87                                              
    88   }
    89 
    90 
    91   Commitment SVNlog::latest_commit(std::string name) const
    92   {
    93     std::vector<std::string>::const_reverse_iterator iter =
    94       find(author().rbegin(), author().rend(), name);
    95     size_t dist(std::distance(iter, author().rend()));
    96     if (!dist) {
    97       Commitment c;
    98       assert(false);
    99       return c;
    100     }
    101     return Commitment(author()[dist-1], date()[dist-1],
    102                       message()[dist-1], revision()[dist-1]);
    103                                              
    104   }
    105 
    106 
    107   void SVNlog::push_back(const Commitment& c)
    108   {
    109     lb_.authors.push_back(c.author());
    110     lb_.commit_dates.push_back(c.date());
    111     lb_.msg.push_back(c.message());
    112     lb_.rev.push_back(c.revision());
    113   }
    114 
    115 
    116   void SVNlog::reserve(size_t i)
    117   {
    118     lb_.authors.reserve(i);
    119     lb_.commit_dates.reserve(i);
    120     lb_.msg.reserve(i);
    121     lb_.rev.reserve(i);
     74    std::vector<Commitment>::const_reverse_iterator iter = commits().rbegin();
     75    for ( ; iter!= commits().rend(); ++iter)
     76      if (iter->author() == name)
     77        return *iter;
     78    assert(false);
    12279  }
    12380
     
    13087  {
    13188    struct log_receiver_baton *lb=static_cast<struct log_receiver_baton*>(baton);
    132     if (date && date[0])
    133       lb->commit_dates.push_back(date);
    134     else
     89    if (!date || !date[0])
    13590      throw SVNException("No date defined for revision: " + rev);
     91    std::string a;
    13692    if (author && author[0])
    137       lb->authors.push_back(author);
    138     else
    139       lb->authors.push_back("");
    140     lb->rev.push_back(rev);
     93      a=author;
     94    std::string message;
    14195    if (msg)
    142       lb->msg.push_back(std::string(msg));
    143     else
    144       lb->msg.push_back(std::string(""));
     96      message = msg;
     97    lb->commits.push_back(Commitment(a, date, message, rev));
    14598    return SVN_NO_ERROR;
    14699  }
     
    149102  void SVNlog::swap(SVNlog& rhs)
    150103  {
    151     lb_.authors.swap(rhs.lb_.authors);
    152     lb_.commit_dates.swap(rhs.lb_.commit_dates);
    153     lb_.msg.swap(rhs.lb_.msg);
    154     lb_.rev.swap(rhs.lb_.rev);
     104    lb_.commits.swap(rhs.lb_.commits);
    155105  }
    156106
     
    159109  {
    160110    SVNlog log;
    161     LogIterator lhs_iter(lhs.begin());
    162     LogIterator rhs_iter(rhs.begin());
    163     while(lhs_iter<lhs.end() && rhs_iter<rhs.end()) {
     111    std::vector<Commitment>::iterator lhs_iter=lhs.commits().begin();
     112    std::vector<Commitment>::const_iterator rhs_iter=rhs.commits().begin();
     113    while(lhs_iter<lhs.commits().end() && rhs_iter<rhs.commits().end()) {
    164114      if (lhs_iter->revision() < rhs_iter->revision()) {
    165115       
    166         log.push_back(*lhs_iter);
     116        log.commits().push_back(*lhs_iter);
    167117        ++lhs_iter;
    168118      }
    169119      else if (rhs_iter->revision()<lhs_iter->revision()) {
    170         log.push_back(*rhs_iter);
     120        log.commits().push_back(*rhs_iter);
    171121        ++rhs_iter;
    172122      }
    173123      else {
    174         log.push_back(*lhs_iter);
     124        log.commits().push_back(*lhs_iter);
    175125        ++lhs_iter;
    176126        ++rhs_iter;
    177127      }
    178128    }
    179     while(lhs_iter<lhs.end()) {
    180         log.push_back(*lhs_iter);
    181         ++lhs_iter;
     129    while(lhs_iter<lhs.commits().end()) {
     130      log.commits().push_back(*lhs_iter);
     131      ++lhs_iter;
    182132    }
    183     while(rhs_iter<rhs.end()) {
    184         log.push_back(*rhs_iter);
    185         ++rhs_iter;
     133    while(rhs_iter<rhs.commits().end()) {
     134      log.commits().push_back(*rhs_iter);
     135      ++rhs_iter;
    186136    }
    187137    lhs.swap(log);
  • trunk/lib/SVNlog.h

    r519 r642  
    2828
    2929#include "Commitment.h"
    30 #include "LogIterator.h"
    3130
    3231#include <string>
     
    4342     The SVNlog class is a utility class for taking care of 'svn
    4443     log' information. An 'svn log' is performed on an item, the
    45      log information for each revision is stored in vectors.
     44     log information for each revision is a vector<Commitment>.
    4645  */
    4746  class SVNlog {
    4847  public:
    49 
    5048    /**
    5149       Default constructor. Creates empty log.
     
    6765
    6866    /**
    69        \return Authors
     67       \return Commitments
    7068    */
    71     inline const std::vector<std::string>& author(void) const
    72     { return lb_.authors; }
     69    inline const std::vector<Commitment>& commits(void) const
     70    { return lb_.commits; }
    7371
    7472    /**
    75      */
    76     LogIterator begin(void) const;
    77 
    78     /**
    79        \return Dates
     73       \return Commitments
    8074    */
    81     inline const std::vector<std::string>& date(void) const
    82     { return lb_.commit_dates; }
    83 
    84     /**
    85      */
    86     LogIterator end(void) const;
     75    inline std::vector<Commitment>& commits(void)
     76    { return lb_.commits; }
    8777
    8878    /**
     
    9282
    9383    /**
    94        \return Messages
    95     */
    96     inline const std::vector<std::string>& message(void) const
    97     { return lb_.msg; }
    98 
    99     /**
    10084       \return Latest commit
    10185    */
    102     Commitment latest_commit(void) const;
     86    const Commitment& latest_commit(void) const;
    10387
    10488    /**
     
    10690       empty Commitment (default constructor) is returned.
    10791    */
    108     Commitment latest_commit(std::string author) const;
    109 
    110     /**
    111        \return Revisions
    112     */
    113     inline const std::vector<size_t>& revision(void) const
    114     { return lb_.rev; }
    115 
    116     /**
    117      */
    118     void push_back(const Commitment&);
    119 
    120     /**
    121      */
    122     void reserve(size_t i);
     92    const Commitment& latest_commit(std::string author) const;
    12393
    12494    /**
     
    142112    */
    143113    struct log_receiver_baton {
    144       std::vector<std::string> authors;
    145       std::vector<std::string> commit_dates;
    146       std::vector<std::string> msg;
    147       std::vector<size_t> rev;
     114      std::vector<Commitment> commits;
    148115    } lb_;
    149116
  • trunk/lib/Stats.cc

    r639 r642  
    529529
    530530 
    531   size_t Stats::operator()(int linetype, std::string author, size_t rev) const
     531  size_t Stats::operator()(int linetype, std::string author,
     532                           svn_revnum_t rev) const
    532533  {
    533534    assert(linetype<=LineTypeParser::total);
    534535    assert(static_cast<size_t>(linetype) < stats_.size());
     536    assert(rev>=0);
    535537    A2VConstIter i = stats_[linetype].find(author);
    536538    if (i==stats_[linetype].end()){
    537539      std::stringstream msg;
    538       msg << __FILE__ << " author: " << author << " does not exist"; 
     540      msg << __FILE__ << ": author: " << author << " does not exist"; 
    539541      throw std::runtime_error(msg.str());
    540542    }
  • trunk/lib/Stats.h

    r611 r642  
    142142       \throw if \a author does not exist
    143143     */
    144     size_t operator()(int linetype, std::string author, size_t rev) const;
     144    size_t operator()(int linetype, std::string author, svn_revnum_t rev) const;
    145145
    146146  protected:
  • trunk/lib/first_page.cc

    r556 r642  
    5959    using namespace std;
    6060    set<string> authors;
    61     authors.insert(log.author().begin(), log.author().end());
     61    std::transform(log.commits().begin(), log.commits().end(),
     62                   std::inserter(authors, authors.begin()), GetAuthor());
    6263    // erase invalid authors
    6364    authors.erase("");
     
    8283                                 size_t nof_authors, std::string url)
    8384  {
    84     assert(log.date().size());
    85     Date begin(log.date()[0]);
    86     Date end(log.date().back());
     85    assert(log.commits().size());
     86    Date begin(log.commits()[0].date());
     87    Date end(log.commits().back().date());
    8788    std::string timefmt("%a, %e %b %Y  %H:%M:%S");
    8889
     
    101102    os << end.difftime(begin);
    102103    os << "</td></tr>\n"
    103        << "<tr><td>Smallest Revision:</td><td>" << log.revision()[0]
    104        << "</td></tr>\n"
    105        << "<tr><td>Largest Revision:</td><td>" << log.revision().back()
    106        << "</td></tr>\n"
    107        << "<tr><td>Revision Count:</td><td>" << log.revision().size()
     104       << "<tr><td>Smallest Revision:</td><td>" << log.commits()[0].revision()
     105       << "</td></tr>\n"
     106       << "<tr><td>Largest Revision:</td><td>" <<log.commits().back().revision()
     107       << "</td></tr>\n"
     108       << "<tr><td>Revision Count:</td><td>" << log.commits().size()
    108109       << "</td></tr>\n"
    109110       << "<tr><td>Number of Authors:</td><td>" << nof_authors
     
    154155
    155156    os << "</table></div>\n";
    156    
    157157  }
    158158
     
    166166       << "</th></tr></thead>\n";
    167167
    168     std::vector<std::string>::const_reverse_iterator a=log.author().rbegin();
    169     std::vector<std::string>::const_reverse_iterator d=log.date().rbegin();
    170     std::vector<std::string>::const_reverse_iterator m=log.message().rbegin();
    171     std::vector<size_t>::const_reverse_iterator r=log.revision().rbegin();
    172     assert(log.author().size()==log.date().size());
    173     assert(log.author().size()==log.message().size());
    174     assert(log.author().size()==log.revision().size());
    175168    os << "<tr><td>Author</td><td>Date</td><td>Rev</td><td>Added</td>"
    176169       << "<td>Removed</td><td>Message</td></tr>\n";
     
    179172    const size_t maxlength = 80;
    180173    const Configuration& conf = Configuration::instance();
    181     for (size_t i=0; i<10 && a!=log.author().rend(); ++i) {
     174    typedef std::vector<Commitment>::const_reverse_iterator iter;
     175    for (iter i=log.commits().rbegin();
     176         i < std::min(i+10,log.commits().rend()); ++i) {
    182177      os << "<tr><td>"
    183          << anchor(std::string("classic/")+*a+"/total/index.html",*a)
     178         << anchor(std::string("classic/")+i->author()+"/total/index.html",
     179                   i->author())
    184180         << "</td>";
    185       Date date(*d);
     181      Date date(i->date());
    186182      os << "<td>" << date(timefmt) << "</td>";
    187183      os << "<td>";
    188       os << trac_revision(*r);
     184      os << trac_revision(i->revision());
    189185      os << "</td>";
    190186      os << "<td>";
    191       int added = stats["add"](LineTypeParser::total, "all", *r) -
    192         stats["add"](LineTypeParser::total, "all", *r - 1);
     187      int added = stats["add"](LineTypeParser::total, "all", i->revision()) -
     188        stats["add"](LineTypeParser::total, "all", i->revision() - 1);
    193189      os << added;
    194190      os << "</td>";
    195191      os << "<td>";
    196       os << added - (stats["blame"](LineTypeParser::total, "all", *r) -
    197                      stats["blame"](LineTypeParser::total, "all", *r - 1));
     192      os << added-(stats["blame"](LineTypeParser::total, "all", i->revision()) -
     193                   stats["blame"](LineTypeParser::total,"all",i->revision()-1));
    198194      os << "</td>";
    199195      os << "<td>";
    200       std::string mess = *m;
     196      std::string mess = i->message();
    201197      // replace newlines with space
    202198      std::replace(mess.begin(), mess.end(), '\n', ' ');
     
    215211
    216212      os << "</td></tr>\n";
    217       ++a;
    218       ++d;
    219       ++m;
    220       ++r;
    221213    }
    222214    os << "</table></div>\n";
Note: See TracChangeset for help on using the changeset viewer.