Fossil SCM

Changes to the root-tag processing to provide better error messages.

drh 2012-07-14 11:40 UTC root-tag
Commit 36134ce27581a8b7847a24150cc68e4db7dbdc1e
3 files changed +1 -1 +9 -4 +26 -26
+1 -1
--- src/diffcmd.c
+++ src/diffcmd.c
@@ -515,11 +515,11 @@
515515
516516
if( zBranch ){
517517
if( zTo || zFrom ){
518518
fossil_fatal("cannot use --from or --to with --branch");
519519
}
520
- zTo = mprintf("tag:%s", zBranch);
520
+ zTo = zBranch;
521521
zFrom = mprintf("root:%s", zBranch);
522522
}
523523
if( zTo==0 ){
524524
db_must_be_within_tree();
525525
verify_all_options();
526526
--- src/diffcmd.c
+++ src/diffcmd.c
@@ -515,11 +515,11 @@
515
516 if( zBranch ){
517 if( zTo || zFrom ){
518 fossil_fatal("cannot use --from or --to with --branch");
519 }
520 zTo = mprintf("tag:%s", zBranch);
521 zFrom = mprintf("root:%s", zBranch);
522 }
523 if( zTo==0 ){
524 db_must_be_within_tree();
525 verify_all_options();
526
--- src/diffcmd.c
+++ src/diffcmd.c
@@ -515,11 +515,11 @@
515
516 if( zBranch ){
517 if( zTo || zFrom ){
518 fossil_fatal("cannot use --from or --to with --branch");
519 }
520 zTo = zBranch;
521 zFrom = mprintf("root:%s", zBranch);
522 }
523 if( zTo==0 ){
524 db_must_be_within_tree();
525 verify_all_options();
526
+9 -4
--- src/info.c
+++ src/info.c
@@ -754,11 +754,16 @@
754754
static Manifest *vdiff_parse_manifest(const char *zParam, int *pRid){
755755
int rid;
756756
757757
*pRid = rid = name_to_rid_www(zParam);
758758
if( rid==0 ){
759
- webpage_error("Missing \"%s\" query parameter.", zParam);
759
+ const char *z = P(zParam);
760
+ if( z==0 || z[0]==0 ){
761
+ webpage_error("Missing \"%s\" query parameter.", zParam);
762
+ }else{
763
+ webpage_error("No such artifact: \"%s\"", z);
764
+ }
760765
return 0;
761766
}
762767
if( !is_a_version(rid) ){
763768
webpage_error("Artifact %s is not a checkin.", P(zParam));
764769
return 0;
@@ -814,16 +819,16 @@
814819
login_anonymous_available();
815820
816821
zBranch = P("branch");
817822
if( zBranch && zBranch[0] ){
818823
cgi_replace_parameter("from", mprintf("root:%s", zBranch));
819
- cgi_replace_parameter("to", mprintf("tag:%s", zBranch));
824
+ cgi_replace_parameter("to", zBranch);
820825
}
826
+ pTo = vdiff_parse_manifest("to", &ridTo);
827
+ if( pTo==0 ) return;
821828
pFrom = vdiff_parse_manifest("from", &ridFrom);
822829
if( pFrom==0 ) return;
823
- pTo = vdiff_parse_manifest("to", &ridTo);
824
- if( pTo==0 ) return;
825830
sideBySide = atoi(PD("sbs","1"));
826831
showDetail = atoi(PD("detail","0"));
827832
if( !showDetail && sideBySide ) showDetail = 1;
828833
if( !sideBySide ){
829834
style_submenu_element("Side-by-side Diff", "sbsdiff",
830835
--- src/info.c
+++ src/info.c
@@ -754,11 +754,16 @@
754 static Manifest *vdiff_parse_manifest(const char *zParam, int *pRid){
755 int rid;
756
757 *pRid = rid = name_to_rid_www(zParam);
758 if( rid==0 ){
759 webpage_error("Missing \"%s\" query parameter.", zParam);
 
 
 
 
 
760 return 0;
761 }
762 if( !is_a_version(rid) ){
763 webpage_error("Artifact %s is not a checkin.", P(zParam));
764 return 0;
@@ -814,16 +819,16 @@
814 login_anonymous_available();
815
816 zBranch = P("branch");
817 if( zBranch && zBranch[0] ){
818 cgi_replace_parameter("from", mprintf("root:%s", zBranch));
819 cgi_replace_parameter("to", mprintf("tag:%s", zBranch));
820 }
 
 
821 pFrom = vdiff_parse_manifest("from", &ridFrom);
822 if( pFrom==0 ) return;
823 pTo = vdiff_parse_manifest("to", &ridTo);
824 if( pTo==0 ) return;
825 sideBySide = atoi(PD("sbs","1"));
826 showDetail = atoi(PD("detail","0"));
827 if( !showDetail && sideBySide ) showDetail = 1;
828 if( !sideBySide ){
829 style_submenu_element("Side-by-side Diff", "sbsdiff",
830
--- src/info.c
+++ src/info.c
@@ -754,11 +754,16 @@
754 static Manifest *vdiff_parse_manifest(const char *zParam, int *pRid){
755 int rid;
756
757 *pRid = rid = name_to_rid_www(zParam);
758 if( rid==0 ){
759 const char *z = P(zParam);
760 if( z==0 || z[0]==0 ){
761 webpage_error("Missing \"%s\" query parameter.", zParam);
762 }else{
763 webpage_error("No such artifact: \"%s\"", z);
764 }
765 return 0;
766 }
767 if( !is_a_version(rid) ){
768 webpage_error("Artifact %s is not a checkin.", P(zParam));
769 return 0;
@@ -814,16 +819,16 @@
819 login_anonymous_available();
820
821 zBranch = P("branch");
822 if( zBranch && zBranch[0] ){
823 cgi_replace_parameter("from", mprintf("root:%s", zBranch));
824 cgi_replace_parameter("to", zBranch);
825 }
826 pTo = vdiff_parse_manifest("to", &ridTo);
827 if( pTo==0 ) return;
828 pFrom = vdiff_parse_manifest("from", &ridFrom);
829 if( pFrom==0 ) return;
 
 
830 sideBySide = atoi(PD("sbs","1"));
831 showDetail = atoi(PD("detail","0"));
832 if( !showDetail && sideBySide ) showDetail = 1;
833 if( !sideBySide ){
834 style_submenu_element("Side-by-side Diff", "sbsdiff",
835
+26 -26
--- src/name.c
+++ src/name.c
@@ -141,44 +141,44 @@
141141
&zTag[4], zType);
142142
return rid;
143143
}
144144
145145
/* "tag:" + symbolic-name */
146
- if( memcmp(zTag, "tag:", 4)==0
147
- || memcmp(zTag, "root:", 5)==0
148
- ){
149
- int isRoot = zTag[0]=='r';
146
+ if( memcmp(zTag, "tag:", 4)==0 ){
150147
rid = db_int(0,
151148
"SELECT event.objid"
152149
" FROM tag, tagxref, event"
153150
" WHERE tag.tagname='sym-%q' "
154151
" AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 "
155152
" AND event.objid=tagxref.rid "
156153
" AND event.type GLOB '%q'"
157154
" ORDER BY event.mtime DESC /*sort*/",
158
- &zTag[4+isRoot], zType
159
- );
160
- if( isRoot && rid>0 ){
161
- Stmt q;
162
- int rc;
163
- db_prepare(&q,
164
- "SELECT pid, EXISTS(SELECT 1 FROM tagxref"
165
- " WHERE tagid=%d AND tagtype>0"
166
- " AND value=%Q AND rid=plink.pid)"
167
- " FROM plink"
168
- " WHERE cid=:cid AND isprim",
169
- TAG_BRANCH, &zTag[5]
170
- );
171
- do{
172
- db_reset(&q);
173
- db_bind_int(&q, ":cid", rid);
174
- rc = db_step(&q);
175
- if( rc!=SQLITE_ROW ) break;
176
- rid = db_column_int(&q, 0);
177
- }while( db_column_int(&q, 1)==1 && rid>0 );
178
- db_finalize(&q);
179
- }
155
+ &zTag[4], zType
156
+ );
157
+ }
158
+
159
+ /* root:TAG -> The origin of the branch */
160
+ if( memcmp(zTag, "root:", 5)==0 ){
161
+ Stmt q;
162
+ int rc;
163
+ rid = symbolic_name_to_rid(zTag+5, zType);
164
+ db_prepare(&q,
165
+ "SELECT pid, EXISTS(SELECT 1 FROM tagxref"
166
+ " WHERE tagid=%d AND tagtype>0"
167
+ " AND value=%Q AND rid=plink.pid)"
168
+ " FROM plink"
169
+ " WHERE cid=:cid AND isprim",
170
+ TAG_BRANCH, &zTag[5]
171
+ );
172
+ do{
173
+ db_reset(&q);
174
+ db_bind_int(&q, ":cid", rid);
175
+ rc = db_step(&q);
176
+ if( rc!=SQLITE_ROW ) break;
177
+ rid = db_column_int(&q, 0);
178
+ }while( db_column_int(&q, 1)==1 && rid>0 );
179
+ db_finalize(&q);
180180
return rid;
181181
}
182182
183183
/* symbolic-name ":" date-time */
184184
nTag = strlen(zTag);
185185
--- src/name.c
+++ src/name.c
@@ -141,44 +141,44 @@
141 &zTag[4], zType);
142 return rid;
143 }
144
145 /* "tag:" + symbolic-name */
146 if( memcmp(zTag, "tag:", 4)==0
147 || memcmp(zTag, "root:", 5)==0
148 ){
149 int isRoot = zTag[0]=='r';
150 rid = db_int(0,
151 "SELECT event.objid"
152 " FROM tag, tagxref, event"
153 " WHERE tag.tagname='sym-%q' "
154 " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 "
155 " AND event.objid=tagxref.rid "
156 " AND event.type GLOB '%q'"
157 " ORDER BY event.mtime DESC /*sort*/",
158 &zTag[4+isRoot], zType
159 );
160 if( isRoot && rid>0 ){
161 Stmt q;
162 int rc;
163 db_prepare(&q,
164 "SELECT pid, EXISTS(SELECT 1 FROM tagxref"
165 " WHERE tagid=%d AND tagtype>0"
166 " AND value=%Q AND rid=plink.pid)"
167 " FROM plink"
168 " WHERE cid=:cid AND isprim",
169 TAG_BRANCH, &zTag[5]
170 );
171 do{
172 db_reset(&q);
173 db_bind_int(&q, ":cid", rid);
174 rc = db_step(&q);
175 if( rc!=SQLITE_ROW ) break;
176 rid = db_column_int(&q, 0);
177 }while( db_column_int(&q, 1)==1 && rid>0 );
178 db_finalize(&q);
179 }
 
 
 
180 return rid;
181 }
182
183 /* symbolic-name ":" date-time */
184 nTag = strlen(zTag);
185
--- src/name.c
+++ src/name.c
@@ -141,44 +141,44 @@
141 &zTag[4], zType);
142 return rid;
143 }
144
145 /* "tag:" + symbolic-name */
146 if( memcmp(zTag, "tag:", 4)==0 ){
 
 
 
147 rid = db_int(0,
148 "SELECT event.objid"
149 " FROM tag, tagxref, event"
150 " WHERE tag.tagname='sym-%q' "
151 " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 "
152 " AND event.objid=tagxref.rid "
153 " AND event.type GLOB '%q'"
154 " ORDER BY event.mtime DESC /*sort*/",
155 &zTag[4], zType
156 );
157 }
158
159 /* root:TAG -> The origin of the branch */
160 if( memcmp(zTag, "root:", 5)==0 ){
161 Stmt q;
162 int rc;
163 rid = symbolic_name_to_rid(zTag+5, zType);
164 db_prepare(&q,
165 "SELECT pid, EXISTS(SELECT 1 FROM tagxref"
166 " WHERE tagid=%d AND tagtype>0"
167 " AND value=%Q AND rid=plink.pid)"
168 " FROM plink"
169 " WHERE cid=:cid AND isprim",
170 TAG_BRANCH, &zTag[5]
171 );
172 do{
173 db_reset(&q);
174 db_bind_int(&q, ":cid", rid);
175 rc = db_step(&q);
176 if( rc!=SQLITE_ROW ) break;
177 rid = db_column_int(&q, 0);
178 }while( db_column_int(&q, 1)==1 && rid>0 );
179 db_finalize(&q);
180 return rid;
181 }
182
183 /* symbolic-name ":" date-time */
184 nTag = strlen(zTag);
185

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button