/[CvsGraph]/cvsgraph/rcsy.y
ViewVC logotype

Diff of /cvsgraph/rcsy.y

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

revision 1.7, Thu Aug 5 09:48:32 2004 UTC revision 1.10, Thu Oct 21 21:40:35 2004 UTC
# Line 46  Line 46 
46  static revs_t *add_revs(revs_t *s, char *t);  static revs_t *add_revs(revs_t *s, char *t);
47  static dtext_t *new_dtext(char *n, char *l, char *t);  static dtext_t *new_dtext(char *n, char *l, char *t);
48  static dtexts_t *add_dtexts(dtexts_t *s, dtext_t *t);  static dtexts_t *add_dtexts(dtexts_t *s, dtext_t *t);
49  static delta_t *new_delta(char *rev, char *date, char *author, char *state, revs_t *branches, char *next);  static phrase_t *new_phrase(phrase_type_e pt, char *t);
50    static phrases_t *add_phrases(phrases_t *s, phrase_t *t);
51    static delta_t *new_delta(char *rev, char *date, char *author, char *state, revs_t *branches, char *next, phrases_t *phrases);
52  static deltas_t *add_deltas(deltas_t *s, delta_t *t);  static deltas_t *add_deltas(deltas_t *s, delta_t *t);
53  static rcsfile_t *new_rcsfile(char *head, char *branch, ids_t *access, tags_t *tags,  static rcsfile_t *new_rcsfile(char *head, char *branch, ids_t *access, tags_t *tags,
54                                  idrevs_t *locks, int strict, char *comment, char *expand);                                  idrevs_t *locks, int strict, char *comment, char *expand);
# Line 67  Line 69 
69          delta_t         *delta;          delta_t         *delta;
70          deltas_t        *deltas;          deltas_t        *deltas;
71          rcsfile_t       *rcsfile;          rcsfile_t       *rcsfile;
72            phrases_t       *phrases;
73            phrase_t        *phrase;
74  }  }
75    
76  %token tHEAD tBRANCH tACCESS tSYMBOLS tLOCKS tSTRICT tCOMMENT  %token tHEAD tBRANCH tACCESS tSYMBOLS tLOCKS tSTRICT tCOMMENT
77  %token tEXPAND tDATE tAUTHOR tSTATE tBRANCHES tNEXT  %token tEXPAND tDATE tAUTHOR tSTATE tBRANCHES tNEXT
78  %token tDESC tLOG tTEXT  %token tDESC tLOG tTEXT
79  %token tOWNER tGROUP tPERMISSIONS tSPECIAL tSYMLINK tHARDLINKS  %token tOWNER tGROUP tPERMISSIONS tSPECIAL tSYMLINK tHARDLINKS
80  %token tNAMESPACE tDEAD  %token tNAMESPACE tDEAD tMERGEPOINT
81    %token tDELTATYPE tCOMMITID tKOPT tFILENAME
82  %token <str> tNEWPHRASE  %token <str> tNEWPHRASE
83  %token <str> tSTRING tREV tID tSYM  %token <str> tSTRING tREV tID tSYM
84    
# Line 91  Line 96 
96  %type <delta>   delta  %type <delta>   delta
97  %type <deltas>  deltas  %type <deltas>  deltas
98  %type <rcsfile> admin  %type <rcsfile> admin
99    %type <phrases> ophrases
100    %type <phrase>  phrase
101    
102  %%  %%
103  rcsfile : admin deltas desc {  rcsfile : admin deltas desc {
# Line 168  Line 175 
175            tSTATE  { set_id(); } oid ';'            tSTATE  { set_id(); } oid ';'
176            tBRANCHES orevs ';'            tBRANCHES orevs ';'
177            tNEXT orev ';'            tNEXT orev ';'
178            ophrases                      { $$ = new_delta($1, $3, $7, $11, $14, $17); }            ophrases                      { $$ = new_delta($1, $3, $7, $11, $14, $17, $19); }
179          ;          ;
180    
181  idorstr : tID                           { $$ = $1; }  idorstr : tID                           { $$ = $1; }
# Line 188  Line 195 
195            tTEXT { set_skipstr(); } tSTRING { $$ = new_dtext($1, $3, $7); }            tTEXT { set_skipstr(); } tSTRING { $$ = new_dtext($1, $3, $7); }
196          ;          ;
197    
198  ophrases: /* Empty */  ophrases: /* Empty */           { $$ = NULL; }
199          | ophrases phrase          | ophrases phrase       { $$ = add_phrases($1, $2); }
200          ;          ;
201    
202  phrase  : tNEWPHRASE { set_skip(); } ';'        {  phrase  : tNEWPHRASE { set_skip(); } ';'        {
203                  yywarning("Unrecognised `newphrase´ keyword '%s' skipped", $1);                  yywarning("Unrecognised `newphrase´ keyword '%s' skipped", $1);
204                  xfree($1);                  xfree($1);
205                    $$ = NULL;
206                  }                  }
207          | cvskw { set_skip(); } ';'     { yywarning("CVS extended keyword skipped"); }          | cvskw { set_skip(); } ';'     { $$ = NULL; /* yywarning("CVS extended keyword skipped"); */ }
208          | otherkw { set_skip(); } ';'   { yywarning("Other extended keyword"); }          | otherkw { set_skip(); } ';'   { $$ = NULL; /* yywarning("Other extended keyword"); */ }
209            | tMERGEPOINT tSTRING ';'       { $$ = new_phrase(PT_MERGEPOINT, $2); }
210          ;          ;
211    
212  cvskw   : tOWNER  cvskw   : tOWNER
# Line 210  Line 219 
219    
220  otherkw : tNAMESPACE  otherkw : tNAMESPACE
221          | tDEAD          | tDEAD
222            | tDELTATYPE
223            | tCOMMITID
224            | tKOPT
225            | tFILENAME
226          ;          ;
227    
228  ostr    : /* Empty */                   { $$ = NULL; }  ostr    : /* Empty */                   { $$ = NULL; }
# Line 269  Line 282 
282          ;          ;
283    
284  %%  %%
285  static rev_t *make_rev(char *s)  static rev_t *make_rev(char *s, int isrev)
286  {  {
287          char *cptr;          char *cptr;
288          int dots = 0;          int dots = 0;
# Line 305  Line 318 
318                  assert(cptr != NULL);                  assert(cptr != NULL);
319                  *cptr = '\0';                  *cptr = '\0';
320                  t = strrchr(r->branch, '.');                  t = strrchr(r->branch, '.');
321                  if((t&& !strcmp(t+1, "0")) || (!t && !strcmp(r->branch, "0")))                  if(!isrev && ((t && !strcmp(t+1, "0")) || (!t && !strcmp(r->branch, "0"))))
322                  {                  {
323                          /* Magic branch numbers "x.x.0.x" */                          /* Magic branch numbers "x.x.0.x" */
324                          r->isbranch = 1;                          r->isbranch = 1;
# Line 331  Line 344 
344  {  {
345          tag_t *t = xmalloc(sizeof(*t));          tag_t *t = xmalloc(sizeof(*t));
346          t->tag = s;          t->tag = s;
347          t->rev = make_rev(r);          t->rev = make_rev(r, 0);
348          return t;          return t;
349  }  }
350    
# Line 358  Line 371 
371  {  {
372          idrev_t *t = xmalloc(sizeof(*t));          idrev_t *t = xmalloc(sizeof(*t));
373          t->id = s;          t->id = s;
374          t->rev = make_rev(r);          t->rev = make_rev(r, 1);
375          return t;          return t;
376  }  }
377    
# Line 403  Line 416 
416          revs_t *t = xmalloc(sizeof(*t));          revs_t *t = xmalloc(sizeof(*t));
417          t->nrevs = 1;          t->nrevs = 1;
418          t->revs = xmalloc(sizeof(t->revs[0]));          t->revs = xmalloc(sizeof(t->revs[0]));
419          t->revs[0] = make_rev(s);          t->revs[0] = make_rev(s, 1);
420          return t;          return t;
421  }  }
422    
423  static revs_t *add_revs(revs_t *s, char *t)  static revs_t *add_revs(revs_t *s, char *t)
424  {  {
425          s->revs = xrealloc(s->revs, (s->nrevs+1) * sizeof(s->revs[0]));          s->revs = xrealloc(s->revs, (s->nrevs+1) * sizeof(s->revs[0]));
426          s->revs[s->nrevs] = make_rev(t);          s->revs[s->nrevs] = make_rev(t, 1);
427          s->nrevs++;          s->nrevs++;
428          return s;          return s;
429  }  }
# Line 418  Line 431 
431  static dtext_t *new_dtext(char *n, char *l, char *t)  static dtext_t *new_dtext(char *n, char *l, char *t)
432  {  {
433          dtext_t *d = xmalloc(sizeof(*d));          dtext_t *d = xmalloc(sizeof(*d));
434          d->rev = make_rev(n);          d->rev = make_rev(n, 1);
435          d->log = l;          d->log = l;
436          d->text = t;          d->text = t;
437          return d;          return d;
# Line 434  Line 447 
447          return s;          return s;
448  }  }
449    
450  static delta_t *new_delta(char *rev, char *date, char *author, char *state, revs_t *branches, char *next)  static phrase_t *new_phrase(phrase_type_e pt, char *t)
451    {
452            phrase_t *d = xmalloc(sizeof(*d));
453            d->type = pt;
454            d->rev = make_rev(t, 1);
455            return d;
456    }
457    
458    static phrases_t *add_phrases(phrases_t *s, phrase_t *t)
459    {
460            if(!t)
461                    return s;
462            if(!s)
463                    s = xmalloc(sizeof(*s));
464            if(t)
465            {
466                    s->phrases = xrealloc(s->phrases, (s->nphrases + 1) * sizeof(s->phrases[0]));
467                    s->phrases[s->nphrases] = t;
468                    s->nphrases++;
469            }
470            return s;
471    }
472    
473    static phrase_t *find_mergepoint(phrases_t *p)
474    {
475            int i;
476    
477            if(!p)
478                    return NULL;
479    
480            for(i = 0; i < p->nphrases; i++)
481            {
482                    if(p->phrases[i]->type == PT_MERGEPOINT)
483                            return p->phrases[i];
484            }
485            return NULL;
486    }
487    
488    static delta_t *new_delta(char *rev, char *date, char *author, char *state, revs_t *branches, char *next, phrases_t *phrases)
489  {  {
490          delta_t *d = xmalloc(sizeof(*d));          delta_t *d = xmalloc(sizeof(*d));
491          d->rev = make_rev(rev);          d->rev = make_rev(rev, 1);
492          d->date = date;          d->date = date;
493          d->author = author;          d->author = author;
494          d->state = state;          d->state = state;
495          d->branches = branches;          d->branches = branches;
496          d->next = make_rev(next);          d->next = make_rev(next, 1);
497            d->phrases = phrases;
498            d->mergepoint = find_mergepoint(phrases);
499          return d;          return d;
500  }  }
501    
# Line 460  Line 513 
513                                  idrevs_t *locks, int strict, char *comment, char *expand)                                  idrevs_t *locks, int strict, char *comment, char *expand)
514  {  {
515          rcsfile_t *r = xmalloc(sizeof(*r));          rcsfile_t *r = xmalloc(sizeof(*r));
516          r->head = make_rev(head);          r->head = make_rev(head, 1);
517          r->branch = make_rev(branch);          r->branch = make_rev(branch, 0);
518          r->access = access;          r->access = access;
519          r->tags = tags;          r->tags = tags;
520          r->locks = locks;          r->locks = locks;

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.10

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0