Fossil SCM
Print a warning during "fossil rebuild" for each Manifest which has F-cards but no R-card. This violates the documentation!
Commit
2549a3a51b1c61734cc4e78a1dd0353b62ab31bd
Parent
d39401004746995…
1 file changed
+6
+6
| --- src/manifest.c | ||
| +++ src/manifest.c | ||
| @@ -99,10 +99,11 @@ | ||
| 99 | 99 | char *zUuid; /* UUID that the tag is applied to */ |
| 100 | 100 | char *zValue; /* Value if the tag is really a property */ |
| 101 | 101 | } *aTag; /* One for each T card */ |
| 102 | 102 | int nField; /* Number of J cards */ |
| 103 | 103 | int nFieldAlloc; /* Slots allocated in aField[] */ |
| 104 | + int noR; | |
| 104 | 105 | struct { |
| 105 | 106 | char *zName; /* Key or field name */ |
| 106 | 107 | char *zValue; /* Value of the field */ |
| 107 | 108 | } *aField; /* One for each J card */ |
| 108 | 109 | }; |
| @@ -900,10 +901,11 @@ | ||
| 900 | 901 | if( p->zTicketUuid ) SYNTAX("K-card in check-in"); |
| 901 | 902 | if( p->zWiki ) SYNTAX("W-card in check-in"); |
| 902 | 903 | if( p->zWikiTitle ) SYNTAX("L-card in check-in"); |
| 903 | 904 | if( p->zTicketUuid ) SYNTAX("K-card in check-in"); |
| 904 | 905 | if( p->zAttachName ) SYNTAX("A-card in check-in"); |
| 906 | + if( !p->zRepoCksum ) p->noR=1; | |
| 905 | 907 | p->type = CFTYPE_MANIFEST; |
| 906 | 908 | }else if( p->nField>0 || p->zTicketUuid!=0 ){ |
| 907 | 909 | if( p->rDate<=0.0 ) SYNTAX("missing date on ticket"); |
| 908 | 910 | if( p->zWiki ) SYNTAX("W-card in ticket"); |
| 909 | 911 | if( p->zWikiTitle ) SYNTAX("L-card in ticket"); |
| @@ -934,10 +936,14 @@ | ||
| 934 | 936 | if( p->zMimetype ) SYNTAX("N-card in tag"); |
| 935 | 937 | if( !seenZ ) SYNTAX("missing Z-card on tag"); |
| 936 | 938 | p->type = CFTYPE_CONTROL; |
| 937 | 939 | } |
| 938 | 940 | md5sum_init(); |
| 941 | + if (p->noR && p->nFile>0) { | |
| 942 | + const char *x = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); | |
| 943 | + fossil_warning("Manifest lacking R-card: %s by %s\n", x, p->zUser); | |
| 944 | + } | |
| 939 | 945 | if( !isRepeat ) g.parseCnt[p->type]++; |
| 940 | 946 | return p; |
| 941 | 947 | |
| 942 | 948 | manifest_syntax_error: |
| 943 | 949 | if( zErr ){ |
| 944 | 950 |
| --- src/manifest.c | |
| +++ src/manifest.c | |
| @@ -99,10 +99,11 @@ | |
| 99 | char *zUuid; /* UUID that the tag is applied to */ |
| 100 | char *zValue; /* Value if the tag is really a property */ |
| 101 | } *aTag; /* One for each T card */ |
| 102 | int nField; /* Number of J cards */ |
| 103 | int nFieldAlloc; /* Slots allocated in aField[] */ |
| 104 | struct { |
| 105 | char *zName; /* Key or field name */ |
| 106 | char *zValue; /* Value of the field */ |
| 107 | } *aField; /* One for each J card */ |
| 108 | }; |
| @@ -900,10 +901,11 @@ | |
| 900 | if( p->zTicketUuid ) SYNTAX("K-card in check-in"); |
| 901 | if( p->zWiki ) SYNTAX("W-card in check-in"); |
| 902 | if( p->zWikiTitle ) SYNTAX("L-card in check-in"); |
| 903 | if( p->zTicketUuid ) SYNTAX("K-card in check-in"); |
| 904 | if( p->zAttachName ) SYNTAX("A-card in check-in"); |
| 905 | p->type = CFTYPE_MANIFEST; |
| 906 | }else if( p->nField>0 || p->zTicketUuid!=0 ){ |
| 907 | if( p->rDate<=0.0 ) SYNTAX("missing date on ticket"); |
| 908 | if( p->zWiki ) SYNTAX("W-card in ticket"); |
| 909 | if( p->zWikiTitle ) SYNTAX("L-card in ticket"); |
| @@ -934,10 +936,14 @@ | |
| 934 | if( p->zMimetype ) SYNTAX("N-card in tag"); |
| 935 | if( !seenZ ) SYNTAX("missing Z-card on tag"); |
| 936 | p->type = CFTYPE_CONTROL; |
| 937 | } |
| 938 | md5sum_init(); |
| 939 | if( !isRepeat ) g.parseCnt[p->type]++; |
| 940 | return p; |
| 941 | |
| 942 | manifest_syntax_error: |
| 943 | if( zErr ){ |
| 944 |
| --- src/manifest.c | |
| +++ src/manifest.c | |
| @@ -99,10 +99,11 @@ | |
| 99 | char *zUuid; /* UUID that the tag is applied to */ |
| 100 | char *zValue; /* Value if the tag is really a property */ |
| 101 | } *aTag; /* One for each T card */ |
| 102 | int nField; /* Number of J cards */ |
| 103 | int nFieldAlloc; /* Slots allocated in aField[] */ |
| 104 | int noR; |
| 105 | struct { |
| 106 | char *zName; /* Key or field name */ |
| 107 | char *zValue; /* Value of the field */ |
| 108 | } *aField; /* One for each J card */ |
| 109 | }; |
| @@ -900,10 +901,11 @@ | |
| 901 | if( p->zTicketUuid ) SYNTAX("K-card in check-in"); |
| 902 | if( p->zWiki ) SYNTAX("W-card in check-in"); |
| 903 | if( p->zWikiTitle ) SYNTAX("L-card in check-in"); |
| 904 | if( p->zTicketUuid ) SYNTAX("K-card in check-in"); |
| 905 | if( p->zAttachName ) SYNTAX("A-card in check-in"); |
| 906 | if( !p->zRepoCksum ) p->noR=1; |
| 907 | p->type = CFTYPE_MANIFEST; |
| 908 | }else if( p->nField>0 || p->zTicketUuid!=0 ){ |
| 909 | if( p->rDate<=0.0 ) SYNTAX("missing date on ticket"); |
| 910 | if( p->zWiki ) SYNTAX("W-card in ticket"); |
| 911 | if( p->zWikiTitle ) SYNTAX("L-card in ticket"); |
| @@ -934,10 +936,14 @@ | |
| 936 | if( p->zMimetype ) SYNTAX("N-card in tag"); |
| 937 | if( !seenZ ) SYNTAX("missing Z-card on tag"); |
| 938 | p->type = CFTYPE_CONTROL; |
| 939 | } |
| 940 | md5sum_init(); |
| 941 | if (p->noR && p->nFile>0) { |
| 942 | const char *x = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 943 | fossil_warning("Manifest lacking R-card: %s by %s\n", x, p->zUser); |
| 944 | } |
| 945 | if( !isRepeat ) g.parseCnt[p->type]++; |
| 946 | return p; |
| 947 | |
| 948 | manifest_syntax_error: |
| 949 | if( zErr ){ |
| 950 |