Changeset 198 for trunk/lib/File.cc


Ignore:
Timestamp:
Sep 9, 2006, 12:04:27 PM (15 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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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
Note: See TracChangeset for help on using the changeset viewer.