Changeset 198


Ignore:
Timestamp:
Sep 9, 2006, 12:04:27 PM (13 years ago)
Author:
Peter Johansson
Message:

refs #36 optionally a copyright information, based on Stats, can be displayed using --copyright flag. This will flag will be added to usage output when this feature is mature.

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/bin/Parameter.cc

    r180 r198  
    4242      if (myargv=="-f" || myargv=="--force"){
    4343          force_=true;
     44          ok=true;
     45      }
     46      if (myargv=="--copyright"){
     47          copyright_=true;
    4448          ok=true;
    4549      }
     
    122126  void Parameter::defaults(void)
    123127  {
     128    copyright_=false;
    124129    force_=false;
    125130    revisions_=false;
  • trunk/bin/Parameter.h

    r165 r198  
    3434  public:
    3535    Parameter(const int argc,const char *argv[]);
     36    inline bool copyright(void) const { return copyright_; }
    3637    inline bool force(void) const { return force_; }
    3738    inline bool revisions(void) const { return revisions_; }
     
    4849    void version(void) const;
    4950
     51    bool copyright_;
    5052    bool force_;
    5153    bool revisions_;
  • trunk/bin/svndigest.cc

    r196 r198  
    3030#include "SVN.h"
    3131#include "SVNinfo.h"
     32#include "utility.h"
    3233
    3334#include <iostream>
     
    143144    std::cerr << "svndigest: " << x.what() << std::endl;
    144145  }
     146 
     147  if (option->copyright()){
     148    try {
     149      tree.print_copyright(commit_dates);
     150    }
     151    catch (const std::runtime_error& x) {
     152      std::cerr << "svndigest: " << x.what() << std::endl;
     153    }
     154  }
     155
    145156  if (option->verbose())
    146157    std::cout << "Finalizing" << std::endl;
  • trunk/lib/Directory.cc

    r185 r198  
    179179  }
    180180
     181
     182  void Directory::print_copyright(const std::vector<std::string>& dates) const
     183  {
     184    if (!ignore()){
     185      // print daughter nodes, i.e, this function is recursive
     186      for (NodeConstIterator i = daughters_.begin(); i!=daughters_.end(); ++i)
     187        (*i)->print_copyright(dates);
     188    }
     189  }
     190
    181191}} // end of namespace svndigest and namespace theplu
  • trunk/lib/Directory.h

    r185 r198  
    7979    void print(const bool verbose=false) const;
    8080
     81    void print_copyright(const std::vector<std::string>& dates) const;
     82
    8183  private:
    8284    ///
  • trunk/lib/File.cc

    r185 r198  
    120120  }
    121121
     122
     123  void File::print_copyright(const std::vector<std::string>& dates) const
     124  {
     125    if (ignore())
     126      return;
     127    std::cout << "\nCOPYRIGHT " << output_name() << std::endl;
     128    // last rev and 4-chars string for each year
     129    std::vector<std::pair<size_t,std::string> > years;
     130    for (size_t i=1; i<dates.size(); ++i) // ignoring rev 0
     131      if (years.empty() || years.back().second != dates[i].substr(0,4)){
     132        years.push_back(std::pair<size_t,std::string>(i,dates[i].substr(0,4)));
     133      }
     134      else {
     135        years.back() = std::pair<size_t, std::string>(i, dates[i].substr(0,4));
     136      }
     137
     138    // copyrigt[i] is set of contributors for year 'i'
     139    std::vector<std::set<std::string> > copyright;
     140    copyright.resize(years.size());
     141    for (std::set<std::string>::const_iterator au=stats_.authors().begin();
     142         au!=stats_.authors().end(); ++au){
     143      std::vector<u_int> lines = stats_.total(*au);
     144      assert(!lines.empty());
     145      // insert author for 'year zero'
     146      if (lines[years[0].first]>0 ){
     147        copyright[0].insert(*au);
     148      }
     149      // insert authors for remaining years
     150      for (size_t y=1; y<years.size(); ++y)
     151        if (lines[years[y].first]!=lines[years[y-1].first] ){
     152          copyright[y].insert(*au);
     153        }
     154     
     155    }
     156    // looping over years
     157    for (size_t i = 0; i<copyright.size();++i){
     158      if (copyright[i].empty()){
     159        continue;
     160      }
     161
     162      std::cout << "Copyright (C) " << years[i].second;
     163      for (size_t j=i+1; j<copyright.size(); ++j){
     164        if (copyright[j].empty())
     165          continue;
     166        else if (copyright[j]==copyright[i]){
     167          std::cout << ", " << years[j].second;
     168          i=j;
     169        }
     170        else
     171          break;
     172      }
     173      std::cout << " ";
     174     
     175      for (std::set<std::string>::const_iterator iter=copyright[i].begin();
     176           iter!=copyright[i].end(); ++iter){
     177        if (iter!=copyright[i].begin())
     178          std::cout << ", ";
     179        std::cout << *iter;
     180       
     181      }
     182      std::cout << std::endl;
     183    }
     184  }
    122185}} // end of namespace svndigest and namespace theplu
  • trunk/lib/File.h

    r185 r198  
    6464    void print(const bool verbose=false) const;
    6565
     66    void print_copyright(const std::vector<std::string>&) const;
     67
    6668  private:
    6769
  • trunk/lib/Node.h

    r185 r198  
    131131    ///
    132132    virtual void print(const bool verbose=false) const=0;
     133
     134    virtual void print_copyright(const std::vector<std::string>& dates) const=0;
    133135
    134136    /**
  • trunk/lib/Stats.h

    r185 r198  
    110110    { return accumulated(total_, user).back(); }
    111111
     112    ///
     113    ///
     114    ///
     115    inline std::vector<u_int> total(const std::string& user) const
     116    { return accumulated(total_, user); }
     117
    112118    ///
    113119    /// @return resulting Stats
  • trunk/lib/utility.cc

    r177 r198  
    2424#include "utility.h"
    2525
     26#include <cstdlib>
    2627#include <fstream>
    27 #include <iostream> // remove this when 'blame' is removed
    2828#include <sstream>
    2929#include <stdexcept>
     
    6767
    6868
     69  std::string getenv(const std::string& var)
     70  {
     71    char* buffer=std::getenv(var.c_str());
     72    if (!buffer)
     73      throw std::runtime_error("Environment variable "+var+" is not set");
     74    return std::string(buffer);
     75  }
     76
     77
    6978  std::string pwd(void)
    7079  {
  • trunk/lib/utility.h

    r177 r198  
    5757  ///
    5858  std::string file_name(const std::string&);
     59
     60  ///
     61  /// @brief environment variable @a var
     62  ///
     63  std::string getenv(const std::string& var);
    5964
    6065  inline bool match_begin(std::string::iterator first,
Note: See TracChangeset for help on using the changeset viewer.