/[CvsGraph]/cvsgraph/cvsgraph.c
ViewVC logotype

Diff of /cvsgraph/cvsgraph.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.44, Sun Aug 15 16:58:22 2004 UTC revision 1.52, Sat Oct 23 01:08:26 2004 UTC
# Line 2  Line 2 
2   * CvsGraph graphical representation generator of brances and revisions   * CvsGraph graphical representation generator of brances and revisions
3   * of a file in cvs/rcs.   * of a file in cvs/rcs.
4   *   *
5   * Copyright (C) 2001,2002,2003  B. Stultiens   * Copyright (C) 2001,2002,2003,2004  B. Stultiens
6   *   *
7   * This program is free software; you can redistribute it and/or modify   * This program is free software; you can redistribute it and/or modify
8   * it under the terms of the GNU General Public License as published by   * it under the terms of the GNU General Public License as published by
# Line 29  Line 29 
29  #include <assert.h>  #include <assert.h>
30  #include <sys/types.h>  #include <sys/types.h>
31  #include <sys/stat.h>  #include <sys/stat.h>
32  #include <sys/wait.h>  #ifdef HAVE_SYS_WAIT_H
33    # include <sys/wait.h>
34    #endif
35  #include <fcntl.h>  #include <fcntl.h>
36  #include <regex.h>  #include <regex.h>
37  #include <errno.h>  #include <errno.h>
# Line 490  Line 492 
492          return r;          return r;
493  }  }
494    
495    static int sort_branch_height(const void *b1, const void *b2)
496    {
497            return (*(branch_t **)b1)->nrevs - (*(branch_t **)b2)->nrevs;
498    }
499    
500  static void build_branch(branch_t ***bl, int *nbl, delta_t **sdl, int nsdl, dtext_t **sdt, int nsdt, delta_t *head)  static void build_branch(branch_t ***bl, int *nbl, delta_t **sdl, int nsdl, dtext_t **sdt, int nsdt, delta_t *head)
501  {  {
502          branch_t *b;          branch_t *b;
# Line 534  Line 541 
541                                  currev->branches[currev->nbranches] = (*bl)[btag];                                  currev->branches[currev->nbranches] = (*bl)[btag];
542                                  currev->nbranches++;                                  currev->nbranches++;
543                          }                          }
544                            if(conf.branch_resort)
545                                    qsort(currev->branches, currev->nbranches, sizeof(currev->branches[0]), sort_branch_height);
546                  }                  }
547    
548                  /* Walk through the next list */                  /* Walk through the next list */
# Line 731  Line 740 
740          return dup_string();          return dup_string();
741  }  }
742    
743    static void find_merges_cvsnt(rcsfile_t *rcs)
744    {
745            int i;
746    
747            if(!conf.merge_cvsnt)
748                    return;
749    
750            for(i = 0; i < rcs->nsrev; i++)
751            {
752                    revision_t **r;
753    
754                    if(!rcs->srev[i]->delta->mergepoint)
755                            continue;
756    
757                    r = bsearch(rcs->srev[i]->delta->mergepoint->rev, rcs->srev, rcs->nsrev, sizeof(rcs->srev[0]), search_revision);
758                    if(!r)
759                            continue;
760                    rcs->merges = xrealloc(rcs->merges, sizeof(rcs->merges[0]) * (rcs->nmerges+1));
761                    rcs->merges[rcs->nmerges].type = TR_REVISION;
762                    rcs->merges[rcs->nmerges].from.rev = *r;
763                    rcs->merges[rcs->nmerges].to.rev = rcs->srev[i];
764                    rcs->nmerges++;
765                    (*r)->stripped = -1;
766                    rcs->srev[i]->stripped = -1;
767            }
768    }
769    
770  static void find_merges(rcsfile_t *rcs)  static void find_merges(rcsfile_t *rcs)
771  {  {
772          int i;          int i;
# Line 804  Line 840 
840                                                          /* Tag matches */                                                          /* Tag matches */
841                                                          rcs->merges = xrealloc(rcs->merges,                                                          rcs->merges = xrealloc(rcs->merges,
842                                                                          sizeof(rcs->merges[0]) * (rcs->nmerges+1));                                                                          sizeof(rcs->merges[0]) * (rcs->nmerges+1));
843                                                          rcs->merges[rcs->nmerges].to = nt;                                                          rcs->merges[rcs->nmerges].type = TR_TAG;
844                                                          rcs->merges[rcs->nmerges].from = t;                                                          rcs->merges[rcs->nmerges].to.tag = nt;
845                                                            rcs->merges[rcs->nmerges].from.tag = t;
846                                                          rcs->nmerges++;                                                          rcs->nmerges++;
847                                                          /* Merges cannot be ignored tags */                                                          if(!conf.tag_ignore_merge)
848                                                          nt->ignore = 0;                                                          {
849                                                          t->ignore = 0;                                                                  nt->ignore = 0;
850                                                                    t->ignore = 0;
851                                                            }
852                                                          /* We cannot (should not) match multiple times */                                                          /* We cannot (should not) match multiple times */
853                                                          break;                                                          if(!conf.merge_findall)
854                                                                    break;
855                                                  }                                                  }
856                                          }                                          }
857                                          regfree(reto);                                          regfree(reto);
# Line 1037  Line 1077 
1077          time_t t;          time_t t;
1078          char *buf;          char *buf;
1079          int nbuf;          int nbuf;
1080            char *env;
1081    
1082          memset(&tm, 0, sizeof(tm));          memset(&tm, 0, sizeof(tm));
1083          n = sscanf(d, "%d.%d.%d.%d.%d.%d",          n = sscanf(d, "%d.%d.%d.%d.%d.%d",
# Line 1045  Line 1086 
1086          tm.tm_mon--;          tm.tm_mon--;
1087          if(tm.tm_year > 1900)          if(tm.tm_year > 1900)
1088                  tm.tm_year -= 1900;                  tm.tm_year -= 1900;
1089          t = mktime(&tm) - timezone;  
1090            env = getenv("TZ");
1091            putenv("TZ=UTC0");
1092            t = mktime(&tm);
1093            if(env)
1094                    setenv("TZ", env, 1);
1095            else
1096                    unsetenv("TZ");
1097    
1098          if(n != 6 || t == (time_t)(-1))          if(n != 6 || t == (time_t)(-1))
1099          {          {
1100                  add_string_str("<invalid date>");                  add_string_str("<invalid date>");
# Line 1053  Line 1102 
1102          }          }
1103    
1104          tmp = localtime(&t);          tmp = localtime(&t);
1105          nbuf = strlen(conf.date_format) * 16;   /* Should be enough to hold all types of expansions */          nbuf = (strlen(conf.date_format)+1) * 16;       /* Should be enough to hold all types of expansions */
1106          buf = xmalloc(nbuf);          buf = xmalloc(nbuf);
1107          strftime(buf, nbuf, conf.date_format, tmp);          strftime(buf, nbuf, conf.date_format, tmp);
1108          add_string_str(buf);          add_string_str(buf);
# Line 1464  Line 1513 
1513          }          }
1514          draw_rbox(im, lx, ty, rx, ty+r->h, 0, &conf.rev_color, &conf.rev_bgcolor);          draw_rbox(im, lx, ty, rx, ty+r->h, 0, &conf.rev_color, &conf.rev_bgcolor);
1515          ty += conf.rev_tspace;          ty += conf.rev_tspace;
1516          draw_string(im, r->rev->rev, &conf.rev_font, x2, ty, ALIGN_HC, &conf.rev_color);          if(!conf.rev_hidenumber)
1517          ty += get_sheight(r->rev->rev, &conf.rev_font);          {
1518                    draw_string(im, r->rev->rev, &conf.rev_font, x2, ty, ALIGN_HC, &conf.rev_color);
1519                    ty += get_sheight(r->rev->rev, &conf.rev_font);
1520            }
1521          draw_stringnl(im, r->revtext, &conf.rev_text_font, x2, ty, ALIGN_HC, &conf.rev_text_color);          draw_stringnl(im, r->revtext, &conf.rev_text_font, x2, ty, ALIGN_HC, &conf.rev_text_color);
1522          ty += get_sheight(r->revtext, &conf.rev_text_font);          ty += get_sheight(r->revtext, &conf.rev_text_font);
1523          for(i = 0; i < r->ntags; i++)          for(i = 0; i < r->ntags; i++)
# Line 1499  Line 1551 
1551          yy = conf.branch_tspace;          yy = conf.branch_tspace;
1552          if(!b->nfolds)          if(!b->nfolds)
1553          {          {
1554                  draw_string(im, b->branch->branch, &conf.branch_font, x2+xp, yp+yy, ALIGN_HC, &conf.branch_color);                  if(!conf.rev_hidenumber)
1555                  yy += get_sheight(b->branch->branch, &conf.branch_font);                  {
1556                            draw_string(im, b->branch->branch, &conf.branch_font, x2+xp, yp+yy, ALIGN_HC, &conf.branch_color);
1557                            yy += get_sheight(b->branch->branch, &conf.branch_font);
1558                    }
1559                  for(i = 0; i < b->ntags; i++)                  for(i = 0; i < b->ntags; i++)
1560                  {                  {
1561                          draw_string(im, b->tags[i]->tag, &conf.branch_tag_font, x2+xp, yp+yy, ALIGN_HC, &conf.branch_tag_color);                          draw_string(im, b->tags[i]->tag, &conf.branch_tag_font, x2+xp, yp+yy, ALIGN_HC, &conf.branch_tag_color);
# Line 1727  Line 1782 
1782          int i;          int i;
1783          for(i = 0; i < rcs->nmerges; i++)          for(i = 0; i < rcs->nmerges; i++)
1784          {          {
1785                  revision_t *fr = rcs->merges[i].from->logrev;                  revision_t *fr;
1786                  revision_t *tr = rcs->merges[i].to->logrev;                  revision_t *tr;
1787                    int colorid;
1788                  int x1, x2, y1, y2;                  int x1, x2, y1, y2;
1789                    switch(rcs->merges[i].type)
1790                    {
1791                    case TR_TAG:
1792                            fr = rcs->merges[i].from.tag->logrev;
1793                            tr = rcs->merges[i].to.tag->logrev;
1794                            colorid = conf.merge_color.id;
1795                            break;
1796                    case TR_REVISION:
1797                            fr = rcs->merges[i].from.rev;
1798                            tr = rcs->merges[i].to.rev;
1799                            colorid = conf.merge_cvsnt_color.id;
1800                            break;
1801                    default:
1802                            continue;
1803                    }
1804                  if(!fr || !tr || fr == tr)                  if(!fr || !tr || fr == tr)
1805                          continue;       /* This can happen with detached tags and self-references */                          continue;       /* This can happen with detached tags and self-references */
1806                  if(conf.left_right)                  if(conf.left_right)
# Line 1775  Line 1846 
1846                                          x2 = tr->cx + tr->w/2;                                          x2 = tr->cx + tr->w/2;
1847                                  }                                  }
1848                          }                          }
1849                          y1 = fr->y + rcs->merges[i].from->yofs;                          if(rcs->merges[i].type == TR_TAG)
1850                          y2 = tr->y + rcs->merges[i].to->yofs;                          {
1851                                    y1 = fr->y + rcs->merges[i].from.tag->yofs;
1852                                    y2 = tr->y + rcs->merges[i].to.tag->yofs;
1853                            }
1854                            else
1855                            {
1856                                    y1 = fr->y + fr->h/2;
1857                                    y2 = tr->y + tr->h/2;
1858                            }
1859                  }                  }
1860                  if(dot && !conf.merge_arrows)                  if(dot && !conf.merge_arrows)
1861                  {                  {
1862                          int o = conf.left_right ? 1 : 0;                          int o = conf.left_right ? 1 : 0;
1863                          gdImageArc(im, x2, y2+o, 8, 8, 0, 360, conf.merge_color.id);                          gdImageArc(im, x2, y2+o, 8, 8, 0, 360, colorid);
1864                          /* BUG: We clip manually because libgd segfaults on out of bound values */                          /* BUG: We clip manually because libgd segfaults on out of bound values */
1865                          if(x2+1 >= 0 && x2+1 < gdImageSX(im) && y2+o+1 >= 0 && y2+o+1 < gdImageSY(im))                          if(x2+1 >= 0 && x2+1 < gdImageSX(im) && y2+o+1 >= 0 && y2+o+1 < gdImageSY(im))
1866                                  gdImageFillToBorder(im, x2+1, y2+o+1, conf.merge_color.id, conf.merge_color.id);                                  gdImageFillToBorder(im, x2+1, y2+o+1, colorid, colorid);
1867                  }                  }
1868                  else if(dot && conf.merge_arrows)                  else if(dot && conf.merge_arrows)
1869                  {                  {
# Line 1866  Line 1945 
1945                          p[2].x = ROUND(ex + u1 + u2);                          p[2].x = ROUND(ex + u1 + u2);
1946                          p[2].y = ROUND(ey + v1 + v2);                          p[2].y = ROUND(ey + v1 + v2);
1947                          /* draw the polygon (triangle) */                          /* draw the polygon (triangle) */
1948                          gdImageFilledPolygon(im, p, 3, conf.merge_color.id);                          gdImageFilledPolygon(im, p, 3, colorid);
1949                  }                  }
1950                  else                  else
1951                  {                  {
# Line 1875  Line 1954 
1954                                  if(fr->branch == tr->branch)                                  if(fr->branch == tr->branch)
1955                                  {                                  {
1956                                          int yy = (y1 < y2 ? y1 : y2) - 5;                                          int yy = (y1 < y2 ? y1 : y2) - 5;
1957                                          gdImageLine(im, x1, y1, x1, yy, conf.merge_color.id);                                          gdImageLine(im, x1, y1, x1, yy, colorid);
1958                                          gdImageLine(im, x2, y2, x2, yy, conf.merge_color.id);                                          gdImageLine(im, x2, y2, x2, yy, colorid);
1959                                          gdImageLine(im, x1, yy, x2, yy, conf.merge_color.id);                                          gdImageLine(im, x1, yy, x2, yy, colorid);
1960                                  }                                  }
1961                                  else                                  else
1962                                  {                                  {
1963                                          if(y1 > y2)                                          if(y1 > y2)
1964                                          {                                          {
1965                                                  gdImageLine(im, x1, y1, x1, y1-3, conf.merge_color.id);                                                  gdImageLine(im, x1, y1, x1, y1-3, colorid);
1966                                                  gdImageLine(im, x2, y2+1, x2, y2+3+1, conf.merge_color.id);                                                  gdImageLine(im, x2, y2+1, x2, y2+3+1, colorid);
1967                                                  gdImageLine(im, x1, y1-3, x2, y2+3+1, conf.merge_color.id);                                                  gdImageLine(im, x1, y1-3, x2, y2+3+1, colorid);
1968                                          }                                          }
1969                                          else                                          else
1970                                          {                                          {
1971                                                  gdImageLine(im, x1, y1+1, x1, y1+3+1, conf.merge_color.id);                                                  gdImageLine(im, x1, y1+1, x1, y1+3+1, colorid);
1972                                                  gdImageLine(im, x2, y2, x2, y2-3, conf.merge_color.id);                                                  gdImageLine(im, x2, y2, x2, y2-3, colorid);
1973                                                  gdImageLine(im, x1, y1+3+1, x2, y2-3, conf.merge_color.id);                                                  gdImageLine(im, x1, y1+3+1, x2, y2-3, colorid);
1974                                          }                                          }
1975                                  }                                  }
1976                          }                          }
# Line 1900  Line 1979 
1979                                  if(fr->branch == tr->branch)                                  if(fr->branch == tr->branch)
1980                                  {                                  {
1981                                          int xx = (x1 < x2 ? x1 : x2) - 5;                                          int xx = (x1 < x2 ? x1 : x2) - 5;
1982                                          gdImageLine(im, xx, y1, x1, y1, conf.merge_color.id);                                          gdImageLine(im, xx, y1, x1, y1, colorid);
1983                                          gdImageLine(im, xx, y2, x2, y2, conf.merge_color.id);                                          gdImageLine(im, xx, y2, x2, y2, colorid);
1984                                          gdImageLine(im, xx, y1, xx, y2, conf.merge_color.id);                                          gdImageLine(im, xx, y1, xx, y2, colorid);
1985                                  }                                  }
1986                                  else                                  else
1987                                  {                                  {
1988                                          if(x1 > x2)                                          if(x1 > x2)
1989                                          {                                          {
1990                                                  gdImageLine(im, x1, y1, x1-3, y1, conf.merge_color.id);                                                  gdImageLine(im, x1, y1, x1-3, y1, colorid);
1991                                                  gdImageLine(im, x2, y2, x2+3, y2, conf.merge_color.id);                                                  gdImageLine(im, x2, y2, x2+3, y2, colorid);
1992                                                  gdImageLine(im, x1-3, y1, x2+3, y2, conf.merge_color.id);                                                  gdImageLine(im, x1-3, y1, x2+3, y2, colorid);
1993                                          }                                          }
1994                                          else                                          else
1995                                          {                                          {
1996                                                  gdImageLine(im, x1, y1, x1+3, y1, conf.merge_color.id);                                                  gdImageLine(im, x1, y1, x1+3, y1, colorid);
1997                                                  gdImageLine(im, x2, y2, x2-3, y2, conf.merge_color.id);                                                  gdImageLine(im, x2, y2, x2-3, y2, colorid);
1998                                                  gdImageLine(im, x1+3, y1, x2-3, y2, conf.merge_color.id);                                                  gdImageLine(im, x1+3, y1, x2-3, y2, colorid);
1999                                          }                                          }
2000                                  }                                  }
2001                          }                          }
# Line 2002  Line 2081 
2081          alloc_color(im, &conf.branch_bgcolor);          alloc_color(im, &conf.branch_bgcolor);
2082          alloc_color(im, &conf.title_color);          alloc_color(im, &conf.title_color);
2083          alloc_color(im, &conf.merge_color);          alloc_color(im, &conf.merge_color);
2084            alloc_color(im, &conf.merge_cvsnt_color);
2085          alloc_color(im, &conf.msg_color);          alloc_color(im, &conf.msg_color);
2086          alloc_color(im, &black_color);          alloc_color(im, &black_color);
2087          alloc_color(im, &white_color);          alloc_color(im, &white_color);
# Line 2732  Line 2812 
2812                          branch_t *bp = rcs->branches[i];                          branch_t *bp = rcs->branches[i];
2813                          for(j = fr; j < bp->nrevs-1; j++)                          for(j = fr; j < bp->nrevs-1; j++)
2814                          {                          {
2815                                  if(!bp->revs[j]->ntags && !bp->revs[j]->nbranches)                                  if(!bp->revs[j]->ntags && bp->revs[j]->stripped >= 0 && !bp->revs[j]->nbranches)
2816                                  {                                  {
2817                                          memmove(&bp->revs[j], &bp->revs[j+1], (bp->nrevs-j-1) * sizeof(bp->revs[0]));                                          memmove(&bp->revs[j], &bp->revs[j+1], (bp->nrevs-j-1) * sizeof(bp->revs[0]));
2818                                          bp->nrevs--;                                          bp->nrevs--;
# Line 2858  Line 2938 
2938                  j = get_swidth(rp->rev->rev, &conf.rev_font);                  j = get_swidth(rp->rev->rev, &conf.rev_font);
2939                  if(j > w)                  if(j > w)
2940                          w = j;                          w = j;
2941                  h = get_sheight(rp->revtext, &conf.rev_text_font) + get_sheight(rp->rev->rev, &conf.rev_font);                  h = get_sheight(rp->revtext, &conf.rev_text_font);
2942                    if(!conf.rev_hidenumber)
2943                            h += get_sheight(rp->rev->rev, &conf.rev_font);
2944                  for(j = 0; j < rp->ntags; j++)                  for(j = 0; j < rp->ntags; j++)
2945                  {                  {
2946                          int ww = get_swidth(rp->tags[j]->tag, &conf.tag_font);                          int ww = get_swidth(rp->tags[j]->tag, &conf.tag_font);
# Line 2881  Line 2963 
2963                  if(!bp->nfolds)                  if(!bp->nfolds)
2964                  {                  {
2965                          w = get_swidth(bp->branch->branch, &conf.branch_font);                          w = get_swidth(bp->branch->branch, &conf.branch_font);
2966                          h = get_sheight(bp->branch->branch, &conf.branch_font);                          if(conf.rev_hidenumber)
2967                                    h = 0;
2968                            else
2969                                    h = get_sheight(bp->branch->branch, &conf.branch_font);
2970                          for(j = 0; j < bp->ntags; j++)                          for(j = 0; j < bp->ntags; j++)
2971                          {                          {
2972                                  int ww = get_swidth(bp->tags[j]->tag, &conf.branch_tag_font);                                  int ww = get_swidth(bp->tags[j]->tag, &conf.branch_tag_font);
# Line 3122  Line 3207 
3207    
3208          for(i = 0; i < rcs->nmerges; i++)          for(i = 0; i < rcs->nmerges; i++)
3209          {          {
3210                  revision_t *fr = rcs->merges[i].from->logrev;                  revision_t *fr;
3211                  revision_t *tr = rcs->merges[i].to->logrev;                  revision_t *tr;
3212                  int x1, x2, y1, y2;                  int x1, x2, y1, y2;
3213                    switch(rcs->merges[i].type)
3214                    {
3215                    case TR_TAG:
3216                            fr = rcs->merges[i].from.tag->logrev;
3217                            tr = rcs->merges[i].to.tag->logrev;
3218                            break;
3219                    case TR_REVISION:
3220                            fr = rcs->merges[i].from.rev;
3221                            tr = rcs->merges[i].to.rev;
3222                            break;
3223                    default:
3224                            continue;
3225                    }
3226                  if(!fr || !tr || fr == tr)                  if(!fr || !tr || fr == tr)
3227                          continue;       /* This can happen with detached tags and self-references */                          continue;       /* This can happen with detached tags and self-references */
3228                  if(conf.left_right)                  if(conf.left_right)
# Line 3170  Line 3268 
3268                                          x2 = tr->cx + tr->w/2;                                          x2 = tr->cx + tr->w/2;
3269                                  }                                  }
3270                          }                          }
3271                          y1 = fr->y + rcs->merges[i].from->yofs;                          if(rcs->merges[i].type == TR_TAG)
3272                          y2 = tr->y + rcs->merges[i].to->yofs;                          {
3273                                    y1 = fr->y + rcs->merges[i].from.tag->yofs;
3274                                    y2 = tr->y + rcs->merges[i].to.tag->yofs;
3275                            }
3276                            else
3277                            {
3278                                    y1 = fr->y + fr->h/2;
3279                                    y2 = tr->y + tr->h/2;
3280                            }
3281                  }                  }
3282    
3283                  if(conf.left_right)                  if(conf.left_right)
# Line 3490  Line 3596 
3596          "  -[0-9] <txt> Use <txt> for expansion\n"          "  -[0-9] <txt> Use <txt> for expansion\n"
3597          ;          ;
3598    
3599  #define VERSION_STR     "1.5.0"  #define VERSION_STR     "1.5.1"
3600  #define NOTICE_STR      "Copyright (c) 2001,2002,2003,2004 B.Stultiens"  #define NOTICE_STR      "Copyright (c) 2001,2002,2003,2004 B.Stultiens"
3601    
3602  static void append_slash(char **path)  static void append_slash(char **path)
# Line 3667  Line 3773 
3773          conf.rev_color          = black_color;          conf.rev_color          = black_color;
3774          conf.rev_bgcolor        = white_color;          conf.rev_bgcolor        = white_color;
3775          conf.merge_color        = black_color;          conf.merge_color        = black_color;
3776            conf.merge_cvsnt_color  = black_color;
3777          conf.tag_color          = black_color;          conf.tag_color          = black_color;
3778          conf.title_color        = black_color;          conf.title_color        = black_color;
3779          conf.rev_text_color     = black_color;          conf.rev_text_color     = black_color;
3780          conf.msg_color          = black_color;          conf.msg_color          = black_color;
3781    
3782          conf.image_quality      = 100;          conf.image_quality      = 100;
3783            conf.image_compress     = -1;   /* Use default zlib setting */
3784          conf.rev_maxline        = -1;   /* Checked later to set to default */          conf.rev_maxline        = -1;   /* Checked later to set to default */
3785    
3786          read_config(confpath);          read_config(confpath);
# Line 3702  Line 3810 
3810          if(conf.thick_lines > 11)          if(conf.thick_lines > 11)
3811                  conf.thick_lines = 11;                  conf.thick_lines = 11;
3812    
3813            if(conf.image_quality < 0 || conf.image_quality > 100)
3814            {
3815                    stack_msg(MSG_WARN, "JPEG quality (image_quality) must be between 0 and 100");
3816                    conf.image_quality = 100;
3817            }
3818    
3819            if(conf.image_compress < -1 || conf.image_compress > 9)
3820            {
3821                    stack_msg(MSG_WARN, "PNG compression (image_compress) must be between -1 and 9");
3822                    conf.image_compress = -1;
3823            }
3824    
3825          append_slash(&conf.cvsroot);          append_slash(&conf.cvsroot);
3826          append_slash(&conf.cvsmodule);          append_slash(&conf.cvsmodule);
3827    
# Line 3732  Line 3852 
3852    
3853          assign_tags(rcs);          assign_tags(rcs);
3854          find_merges(rcs);          find_merges(rcs);
3855            find_merges_cvsnt(rcs);
3856    
3857          if(outfile)          if(outfile)
3858          {          {
# Line 3760  Line 3881 
3881          {          {
3882                  /* Create an image */                  /* Create an image */
3883                  im = make_image(rcs);                  im = make_image(rcs);
3884    
3885                    if(conf.image_interlace)
3886                            gdImageInterlace(im, 1);
3887    
3888  #ifdef DEBUG_IMAGEMAP  #ifdef DEBUG_IMAGEMAP
3889                  {                  {
3890                          FILE *nulfile = fopen("/dev/null", "w");                          FILE *nulfile = fopen("/dev/null", "w");
# Line 3780  Line 3905 
3905  #ifdef HAVE_IMAGE_PNG  #ifdef HAVE_IMAGE_PNG
3906                  default:                  default:
3907                  case IMAGE_PNG:                  case IMAGE_PNG:
3908    #ifdef HAVE_GDIMAGEPNGEX
3909                            gdImagePngEx(im, fp, conf.image_compress);
3910    #else
3911                          gdImagePng(im, fp);                          gdImagePng(im, fp);
3912    #endif
3913                          break;                          break;
3914  #endif  #endif
3915  #ifdef HAVE_IMAGE_JPEG  #ifdef HAVE_IMAGE_JPEG

Legend:
Removed from v.1.44  
changed lines
  Added in v.1.52

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0