Changeset 317 for trunk


Ignore:
Timestamp:
May 17, 2007, 8:49:09 PM (14 years ago)
Author:
Peter Johansson
Message:

fixing truncation issue in log message. fixes #188

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Trac.cc

    r309 r317  
    3636  {}
    3737
     38  std::string Trac::anchor_text(std::string::const_iterator first,
     39                                std::string::const_iterator last,
     40                                std::string::const_iterator last_trunc)
     41  {
     42    if (last>last_trunc) { // truncate
     43      std::string str(first, last_trunc);
     44      str+="...";
     45      return str;
     46    }
     47    return std::string(first, last);
     48  }
     49
     50
    3851  bool Trac::changeset(std::string::const_iterator& first,
    39                        const std::string::const_iterator& last)
    40   {
    41     if (changeset1(first, last))
    42       return true;
    43     if (changeset2(first, last))
    44       return true;
    45     if (changeset3(first, last))
     52                       const std::string::const_iterator& last,
     53                       const std::string::const_iterator& last_trunc)
     54  {
     55    if (changeset1(first, last, last_trunc))
     56      return true;
     57    if (changeset2(first, last, last_trunc))
     58      return true;
     59    if (changeset3(first, last, last_trunc))
    4660      return true;
    4761    return false;
     
    5064
    5165  bool Trac::changeset1(std::string::const_iterator& first,
    52                         const std::string::const_iterator& last)
     66                        const std::string::const_iterator& last,
     67                        const std::string::const_iterator& last_trunc)
    5368  {
    5469    if (first==last)
     
    6479    }
    6580    std::string href(Configuration::instance().trac_root()+"changeset/"+rev);
    66     hs_.stream() << anchor(href, std::string(first_orig,first));
     81    hs_.stream() << anchor(href, anchor_text(first_orig, first, last_trunc));
    6782    return true;
    6883  }
     
    7085
    7186  bool Trac::changeset2(std::string::const_iterator& first,
    72                         const std::string::const_iterator& last)
     87                        const std::string::const_iterator& last,
     88                        const std::string::const_iterator& last_trunc)
    7389  {
    7490    if (first==last)
     
    85101    ++first;
    86102    std::string href(Configuration::instance().trac_root()+"changeset/"+rev);
    87     hs_.stream() << anchor(href, std::string(first_orig,first));
     103    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    88104    return true;
    89105  }
     
    91107
    92108  bool Trac::changeset3(std::string::const_iterator& first,
    93                         const std::string::const_iterator& last)
     109                        const std::string::const_iterator& last,
     110                        const std::string::const_iterator& last_trunc)
    94111  {
    95112    if (first==last)
     
    106123    }
    107124    std::string href(Configuration::instance().trac_root()+"changeset/"+rev);
    108     hs_.stream() << anchor(href, std::string(first_orig,first));
     125    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    109126    return true;
    110127  }
     
    112129
    113130  bool Trac::comment(std::string::const_iterator& first,
    114                      const std::string::const_iterator& last)
     131                     const std::string::const_iterator& last,
     132                     const std::string::const_iterator& last_trunc)
    115133  {
    116134    if (first==last)
     
    136154    std::string href(Configuration::instance().trac_root()+"ticket/"+ticket+
    137155                     "#comment:"+comment);
    138     std::string str(first_orig, first);
    139     hs_.stream() << anchor(href, str);
    140     return true;
    141 
    142 
    143     const Configuration& conf = Configuration::instance();
    144     hs_.stream() << anchor(conf.trac_root()+"ticket/"+ticket+
    145                            "#comment:"+comment,
    146                            std::string(first_orig, first));
    147     return true;
    148 
     156    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
     157    return true;
    149158  }
    150159
    151160
    152161  bool Trac::diff(std::string::const_iterator& first,
    153                   const std::string::const_iterator& last)
    154   {
    155     if (diff3(first, last))
    156       return true;
    157     if (diff1(first, last))
    158       return true;
    159     if (diff2(first, last))
     162                  const std::string::const_iterator& last,
     163                  const std::string::const_iterator& last_trunc)
     164  {
     165    if (diff3(first, last, last_trunc))
     166      return true;
     167    if (diff1(first, last, last_trunc))
     168      return true;
     169    if (diff2(first, last, last_trunc))
    160170      return true;
    161171    return false;
     
    164174
    165175  bool Trac::diff1(std::string::const_iterator& first,
    166                    const std::string::const_iterator& last)
     176                   const std::string::const_iterator& last,
     177                   const std::string::const_iterator& last_trunc)
    167178  {
    168179    if (first==last)
     
    199210                         "changeset?new="+new_rev+"&new_path="+node+"&old="+
    200211                         old_rev+"&old_path="+node);
    201     hs_.stream() << anchor(href, std::string(first_orig, first));
     212    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    202213    return true;
    203214  }
     
    205216
    206217  bool Trac::diff2(std::string::const_iterator& first,
    207                    const std::string::const_iterator& last)
     218                   const std::string::const_iterator& last,
     219                   const std::string::const_iterator& last_trunc)
    208220  {
    209221    if (first==last)
     
    229241    std::string href(Configuration::instance().trac_root()+
    230242                     "changeset?new_path="+new_path+"&old_path="+old_path);
    231     hs_.stream() << anchor(href, std::string(first_orig, first));
     243    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    232244    return true;
    233245  }
     
    235247
    236248  bool Trac::diff3(std::string::const_iterator& first,
    237                    const std::string::const_iterator& last)
     249                   const std::string::const_iterator& last,
     250                   const std::string::const_iterator& last_trunc)
    238251  {
    239252    if (first==last)
     
    271284                     "changeset?new="+new_rev+"&new_path="+new_path+
    272285                     "&old="+old_rev+"&old_path="+old_path);
    273     hs_.stream() << anchor(href, std::string(first_orig, first));
     286    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    274287    return true;
    275288  }
     
    277290
    278291  bool Trac::log(std::string::const_iterator& first,
    279                  const std::string::const_iterator& last)
    280   {
    281     if (log1(first, last))
    282       return true;
    283     if (log2(first, last))
    284       return true;
    285     if (log3(first, last))
     292                 const std::string::const_iterator& last,
     293                 const std::string::const_iterator& last_trunc)
     294  {
     295    if (log1(first, last, last_trunc))
     296      return true;
     297    if (log2(first, last, last_trunc))
     298      return true;
     299    if (log3(first, last, last_trunc))
    286300      return true;
    287301    return false;
     
    290304
    291305  bool Trac::log1(std::string::const_iterator& first,
    292                      const std::string::const_iterator& last)
     306                  const std::string::const_iterator& last,
     307                  const std::string::const_iterator& last_trunc)
    293308  {
    294309    if (first==last)
     
    313328    std::string href(Configuration::instance().trac_root()+"log/?rev="+
    314329                     rev+"&stop_rev="+stop_rev);
    315     hs_.stream() << anchor(href, std::string(first_orig, first));
     330    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    316331    return true;
    317332  }
     
    319334
    320335  bool Trac::log2(std::string::const_iterator& first,
    321                      const std::string::const_iterator& last)
     336                  const std::string::const_iterator& last,
     337                  const std::string::const_iterator& last_trunc)
    322338  {
    323339    if (first==last)
     
    343359    std::string href(Configuration::instance().trac_root()+"log/?rev="+
    344360                     rev+"&stop_rev="+stop_rev);
    345     hs_.stream() << anchor(href, std::string(first_orig, first));
     361    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    346362    return true;
    347363  }
     
    349365
    350366  bool Trac::log3(std::string::const_iterator& first,
    351                   const std::string::const_iterator& last)
     367                  const std::string::const_iterator& last,
     368                  const std::string::const_iterator& last_trunc)
    352369  {
    353370    if (first==last)
     
    383400                         "?rev="+rev+"&stop_rev="+stop_rev);
    384401     
    385     hs_.stream() << anchor(href, std::string(first_orig, first));
     402    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    386403    return true;
    387404  }
     
    389406
    390407  bool Trac::milestone(std::string::const_iterator& first,
    391                        const std::string::const_iterator& last)
     408                       const std::string::const_iterator& last,
     409                       const std::string::const_iterator& last_trunc)
    392410  {
    393411    if (first==last)
     
    415433
    416434    const Configuration& conf = Configuration::instance();
    417     hs_.stream() << anchor(conf.trac_root()+"milestone/"+milestone,
    418                            std::string(first_orig, first));
    419     return true;
    420   }
    421 
    422 
    423   void Trac::print(std::string str)
     435    std::string href(conf.trac_root()+"milestone/"+milestone);
     436    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
     437    return true;
     438  }
     439
     440
     441  void Trac::print(std::string str, size_t width)
    424442  {
    425443    std::string::const_iterator first(str.begin());
    426     while (first!=str.end()) {
    427       if (log(first, str.end()))
    428         continue;
    429       if (comment(first, str.end()))
    430         continue;
    431       if (ticket(first, str.end()))
    432         continue;
    433       if (changeset(first, str.end()))
    434         continue;
    435       if (diff(first, str.end()))
    436         continue;
    437       if (milestone(first, str.end()))
    438         continue;
    439       if (source(first, str.end()))
     444    std::string::const_iterator last_trunc(str.end());
     445    if (width<=str.size()) // truncate
     446      last_trunc = first+width;
     447    while (first<last_trunc) {
     448      if (log(first, str.end(), last_trunc))
     449        continue;
     450      if (comment(first, str.end(), last_trunc))
     451        continue;
     452      if (ticket(first, str.end(), last_trunc))
     453        continue;
     454      if (changeset(first, str.end(), last_trunc))
     455        continue;
     456      if (diff(first, str.end(), last_trunc))
     457        continue;
     458      if (milestone(first, str.end(), last_trunc))
     459        continue;
     460      if (source(first, str.end(), last_trunc))
    440461        continue;
    441462      hs_ << *first;
    442463      ++first;
    443464    }
     465    if (last_trunc!=str.end())
     466      hs_ << "...";
    444467  }
    445468
    446469
    447470  bool Trac::source(std::string::const_iterator& first,
    448                     const std::string::const_iterator& last)
     471                    const std::string::const_iterator& last,
     472                    const std::string::const_iterator& last_trunc)
    449473  {
    450474    if (first==last)
     
    483507        href += "#"+line;
    484508    }
    485     hs_.stream() << anchor(href, std::string(first_orig, first));
     509    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    486510    return true;
    487511  }
     
    489513
    490514  bool Trac::ticket(std::string::const_iterator& first,
    491                     const std::string::const_iterator& last)
    492   {
    493     if (ticket1(first, last))
    494       return true;
    495     if (ticket2(first, last))
     515                    const std::string::const_iterator& last,
     516                    const std::string::const_iterator& last_trunc)
     517  {
     518    if (ticket1(first, last, last_trunc))
     519      return true;
     520    if (ticket2(first, last, last_trunc))
    496521      return true;
    497522    return false;
     
    500525
    501526  bool Trac::ticket1(std::string::const_iterator& first,
    502                      const std::string::const_iterator& last)
     527                     const std::string::const_iterator& last,
     528                     const std::string::const_iterator& last_trunc)
    503529  {
    504530    if (first==last)
     
    518544    const Configuration& conf = Configuration::instance();
    519545    hs_.stream() << anchor(conf.trac_root()+"ticket/"+ticket,
    520                            std::string(first_orig, first));
     546                           anchor_text(first_orig,first, last_trunc));
    521547    return true;
    522548  }
     
    524550
    525551  bool Trac::ticket2(std::string::const_iterator& first,
    526                      const std::string::const_iterator& last)
     552                     const std::string::const_iterator& last,
     553                     const std::string::const_iterator& last_trunc)
    527554  {
    528555    if (first==last)
     
    538565
    539566    const Configuration& conf = Configuration::instance();
    540     hs_.stream() << anchor(conf.trac_root()+"ticket/"+ticket,
    541                            std::string(first_orig, first));
     567    std::string href(conf.trac_root()+"ticket/"+ticket);
     568    hs_.stream() << anchor(href, anchor_text(first_orig,first, last_trunc));
    542569    return true;
    543570  }
  • trunk/lib/Trac.h

    r309 r317  
    4747    ///
    4848    ///
    49     void print(std::string str);
     49    void print(std::string str, size_t width);
    5050
    5151  private:
     52    /**
     53     */
     54    std::string anchor_text(std::string::const_iterator first,
     55                            std::string::const_iterator last,
     56                            std::string::const_iterator last_trunc);
    5257    ///
    5358    /// @see changeset1 changeset2 changeset3
     
    5661    ///
    5762    bool changeset(std::string::const_iterator& first,
    58                    const std::string::const_iterator& last);
     63                   const std::string::const_iterator& last,
     64                   const std::string::const_iterator& last_trunc);
    5965
    6066    ///
     
    6975    ///
    7076    bool changeset1(std::string::const_iterator& first,
    71                    const std::string::const_iterator& last);
     77                    const std::string::const_iterator& last,
     78                    const std::string::const_iterator& last_trunc);
    7279
    7380    ///
     
    8289    ///
    8390    bool changeset2(std::string::const_iterator& first,
    84                    const std::string::const_iterator& last);
     91                    const std::string::const_iterator& last,
     92                    const std::string::const_iterator& last_trunc);
    8593
    8694    ///
     
    95103    ///
    96104    bool changeset3(std::string::const_iterator& first,
    97                    const std::string::const_iterator& last);
     105                    const std::string::const_iterator& last,
     106                    const std::string::const_iterator& last_trunc);
    98107
    99108    ///
     
    108117    ///
    109118    bool comment(std::string::const_iterator& first,
    110                  const std::string::const_iterator& last);
     119                 const std::string::const_iterator& last,
     120                 const std::string::const_iterator& last_trunc);
    111121
    112122    ///
     
    116126    ///
    117127    bool diff(std::string::const_iterator& first,
    118               const std::string::const_iterator& last);
     128              const std::string::const_iterator& last,
     129              const std::string::const_iterator& last_trunc);
    119130
    120131    ///
     
    133144    ///
    134145    bool diff1(std::string::const_iterator& first,
    135                const std::string::const_iterator& last);
     146               const std::string::const_iterator& last,
     147               const std::string::const_iterator& last_trunc);
    136148
    137149    ///
     
    151163    ///
    152164    bool diff2(std::string::const_iterator& first,
    153                const std::string::const_iterator& last);
     165               const std::string::const_iterator& last,
     166               const std::string::const_iterator& last_trunc);
    154167
    155168    ///
     
    167180    ///
    168181    bool diff3(std::string::const_iterator& first,
    169                const std::string::const_iterator& last);
     182               const std::string::const_iterator& last,
     183               const std::string::const_iterator& last_trunc);
    170184
    171185
     
    176190    ///
    177191    bool log(std::string::const_iterator& first,
    178              const std::string::const_iterator& last);
     192             const std::string::const_iterator& last,
     193             const std::string::const_iterator& last_trunc);
    179194
    180195    ///
     
    191206    ///
    192207    bool log1(std::string::const_iterator& first,
    193               const std::string::const_iterator& last);
     208              const std::string::const_iterator& last,
     209              const std::string::const_iterator& last_trunc);
    194210
    195211    ///
     
    206222    ///
    207223    bool log2(std::string::const_iterator& first,
    208               const std::string::const_iterator& last);
     224              const std::string::const_iterator& last,
     225              const std::string::const_iterator& last_trunc);
    209226
    210227    ///
     
    221238    ///
    222239    bool log3(std::string::const_iterator& first,
    223               const std::string::const_iterator& last);
     240              const std::string::const_iterator& last,
     241              const std::string::const_iterator& last_trunc);
    224242
    225243    ///
     
    236254    ///
    237255    bool milestone(std::string::const_iterator& first,
    238                    const std::string::const_iterator& last);
     256                   const std::string::const_iterator& last,
     257                   const std::string::const_iterator& last_trunc);
    239258
    240259    ///
     
    255274    ///
    256275    bool source(std::string::const_iterator& first,
    257                 const std::string::const_iterator& last);
     276                const std::string::const_iterator& last,
     277                const std::string::const_iterator& last_trunc);
    258278
    259279    ///
     
    263283    ///
    264284    bool ticket(std::string::const_iterator& first,
    265                 const std::string::const_iterator& last);
     285                const std::string::const_iterator& last,
     286                const std::string::const_iterator& last_trunc);
    266287
    267288    ///
     
    278299    ///
    279300    bool ticket1(std::string::const_iterator& first,
    280                  const std::string::const_iterator& last);
     301                 const std::string::const_iterator& last,
     302                 const std::string::const_iterator& last_trunc);
    281303
    282304    ///
     
    293315    ///
    294316    bool ticket2(std::string::const_iterator& first,
    295                  const std::string::const_iterator& last);
     317                 const std::string::const_iterator& last,
     318                 const std::string::const_iterator& last_trunc);
    296319
    297320
  • trunk/lib/first_page.cc

    r312 r317  
    182182      std::replace(mess.begin(), mess.end(), '\n', ' ');
    183183      mess = htrim(mess);
    184       // truncate message if too long
    185       if (mess.size()>maxlength)
    186         mess = mess.substr(0,maxlength-3) + "...";
    187 
    188       if (conf.trac_root().empty())
     184
     185      if (conf.trac_root().empty()) {
     186        // truncate message if too long
     187        if (mess.size()>maxlength)
     188          mess = mess.substr(0,maxlength-3) + "...";
    189189        hs << mess;
     190      }
    190191      else {// make anchors to trac
    191192        Trac trac(hs);
    192         trac.print(mess);
     193        trac.print(mess, maxlength);
    193194      }
    194195
  • trunk/test/trac.cc

    r309 r317  
    8888  HtmlStream html(ss);
    8989  Trac trac(html);
    90   trac.print(mess);
     90  trac.print(mess,80);
    9191  if (ss.str()==anchor(href, mess))
    9292    return true;
Note: See TracChangeset for help on using the changeset viewer.