Changeset 303 for trunk/lib/File.cc


Ignore:
Timestamp:
May 11, 2007, 10:13:00 PM (14 years ago)
Author:
Peter Johansson
Message:

Sorting authors in copyright statement in same order as stated in config file. fixes #172

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/File.cc

    r258 r303  
    2424
    2525#include "File.h"
     26
     27#include "Alias.h"
    2628#include "html_utility.h"
    2729#include "Stats.h"
     
    101103
    102104
    103   void File::print_copyright (std::map<std::string,std::string>& alias) const{
     105  void File::print_copyright(std::map<std::string, Alias>& alias) const
     106  {
    104107    if (ignore())
    105108      return;
     
    108111    SVNlog log(path());
    109112
    110     typedef map<int, set<string> > Container;
    111     Container copyright;
    112 
    113    
     113    map<int, set<Alias> > year_authors;
     114
    114115    assert(log.author().size()==log.date().size());
    115116    vector<string>::const_iterator author=log.author().begin();
     
    120121
    121122      // find username in map of aliases
    122       map<string, string>::iterator name = alias.lower_bound(*author);
     123      std::map<string,Alias>::iterator name(alias.lower_bound(*author));
     124
    123125      // if alias exist insert alias
    124126      if (name != alias.end() && name->first==*author)
    125         copyright[timeinfo->tm_year].insert(name->second);
     127        year_authors[timeinfo->tm_year].insert(name->second);
    126128      else {
    127129        // else insert user name
    128         copyright[timeinfo->tm_year].insert(*author);
     130        Alias a(*author,alias.size());
     131        year_authors[timeinfo->tm_year].insert(a);
    129132        std::cerr << "svndigest: warning: no copyright alias found for `"
    130133                  << *author << "`\n";
    131134        // insert alias to avoid multiple warnings.
    132         alias.insert(name, std::make_pair(*author, *author));
     135        alias.insert(name, std::make_pair(*author, a));
    133136      }
    134137    }
     
    176179          found_copyright = true;
    177180          // Printing copyright statement
    178           for (Container::const_iterator i=copyright.begin();
    179                i!=copyright.end();) {
    180             tmp << prefix << "Copyright (C) "
    181                 << 1900+i->first;
    182             Container::const_iterator j = i;
    183             assert(i!=copyright.end());
    184             while (++j!=copyright.end() && i->second == j->second){
    185               tmp << ", " << 1900+(j->first);
    186             }
    187             // printing authors
    188             for (set<string>::iterator a=i->second.begin();
    189                  a!=i->second.end(); ++a){
    190               if (a!=i->second.begin())
    191                 tmp << ",";
    192               tmp << " " << *a;
    193             }
    194             tmp << "\n";
    195             i = j;
     181          for (map<int, set<Alias> >::const_iterator i(year_authors.begin());
     182               i!=year_authors.end();) {
     183          tmp << prefix << "Copyright (C) "
     184              << 1900+i->first;
     185          map<int, set<Alias> >::const_iterator j = i;
     186          assert(i!=year_authors.end());
     187          while (++j!=year_authors.end() &&
     188                 i->second == j->second){
     189            tmp << ", " << 1900+(j->first);
     190          }
     191          // printing authors
     192          std::vector<Alias> vec_alias;
     193          back_insert_iterator<std::vector<Alias> > ii(vec_alias);
     194          std::copy(i->second.begin(), i->second.end(), ii);
     195          // sort with respect to id
     196          std::sort(vec_alias.begin(), vec_alias.end(), IdCompare());
     197          for (std::vector<Alias>::iterator a=vec_alias.begin();
     198               a!=vec_alias.end(); ++a){
     199            if (a!=vec_alias.begin())
     200              tmp << ",";
     201            tmp << " " << a->name();
     202          }
     203          tmp << "\n";
     204          i = j;
    196205          }
    197206        }
     
    203212    // finally move printed temporary file to original file
    204213    rename(tmpname, path().c_str());
     214   
    205215  }
    206216}} // end of namespace svndigest and namespace theplu
Note: See TracChangeset for help on using the changeset viewer.