Fossil SCM

Tolerate "[...&#93" delimiters enclosing hash identifiers.

drh 2017-12-05 15:48 trunk
Commit 537b498e6cd4f10df71a50befe7d0e69fa156fd07218e5daaef3a561d93938e7
1 file changed +18 -4
+18 -4
--- src/name.c
+++ src/name.c
@@ -76,11 +76,11 @@
7676
}
7777
7878
/*
7979
** Convert a symbolic name into a RID. Acceptable forms:
8080
**
81
-** * artifact hash
81
+** * artifact hash (optionally enclosed in [...])
8282
** * 4-character or larger prefix of a artifact
8383
** * Symbolic Name
8484
** * "tag:" + symbolic name
8585
** * Date or date-time
8686
** * "date:" + Date or date-time
@@ -112,10 +112,12 @@
112112
int vid;
113113
int rid = 0;
114114
int nTag;
115115
int i;
116116
int startOfBranch = 0;
117
+ const char *zXTag; /* zTag with optional [...] removed */
118
+ int nXTag; /* Size of zXTag */
117119
118120
if( zType==0 || zType[0]==0 ){
119121
zType = "*";
120122
}else if( zType[0]=='b' ){
121123
zType = "ci";
@@ -227,17 +229,29 @@
227229
" AND event.type GLOB '%q'",
228230
zTagBase, zDate, zType
229231
);
230232
return rid;
231233
}
234
+
235
+ /* Remove optional [...] */
236
+ zXTag = zTag;
237
+ nXTag = nTag;
238
+ if( zXTag[0]=='[' ){
239
+ zXTag++;
240
+ nXTag--;
241
+ }
242
+ if( nXTag>0 && zXTag[nXTag-1]==']' ){
243
+ nXTag--;
244
+ }
232245
233246
/* artifact hash or prefix */
234
- if( nTag>=4 && nTag<=HNAME_MAX && validate16(zTag, nTag) ){
247
+ if( nXTag>=4 && nXTag<=HNAME_MAX && validate16(zXTag, nXTag) ){
235248
Stmt q;
236249
char zUuid[HNAME_MAX+1];
237
- memcpy(zUuid, zTag, nTag+1);
238
- canonical16(zUuid, nTag);
250
+ memcpy(zUuid, zXTag, nXTag);
251
+ zUuid[nXTag] = 0;
252
+ canonical16(zUuid, nXTag);
239253
rid = 0;
240254
if( zType[0]=='*' ){
241255
db_prepare(&q, "SELECT rid FROM blob WHERE uuid GLOB '%q*'", zUuid);
242256
}else{
243257
db_prepare(&q,
244258
--- src/name.c
+++ src/name.c
@@ -76,11 +76,11 @@
76 }
77
78 /*
79 ** Convert a symbolic name into a RID. Acceptable forms:
80 **
81 ** * artifact hash
82 ** * 4-character or larger prefix of a artifact
83 ** * Symbolic Name
84 ** * "tag:" + symbolic name
85 ** * Date or date-time
86 ** * "date:" + Date or date-time
@@ -112,10 +112,12 @@
112 int vid;
113 int rid = 0;
114 int nTag;
115 int i;
116 int startOfBranch = 0;
 
 
117
118 if( zType==0 || zType[0]==0 ){
119 zType = "*";
120 }else if( zType[0]=='b' ){
121 zType = "ci";
@@ -227,17 +229,29 @@
227 " AND event.type GLOB '%q'",
228 zTagBase, zDate, zType
229 );
230 return rid;
231 }
 
 
 
 
 
 
 
 
 
 
 
232
233 /* artifact hash or prefix */
234 if( nTag>=4 && nTag<=HNAME_MAX && validate16(zTag, nTag) ){
235 Stmt q;
236 char zUuid[HNAME_MAX+1];
237 memcpy(zUuid, zTag, nTag+1);
238 canonical16(zUuid, nTag);
 
239 rid = 0;
240 if( zType[0]=='*' ){
241 db_prepare(&q, "SELECT rid FROM blob WHERE uuid GLOB '%q*'", zUuid);
242 }else{
243 db_prepare(&q,
244
--- src/name.c
+++ src/name.c
@@ -76,11 +76,11 @@
76 }
77
78 /*
79 ** Convert a symbolic name into a RID. Acceptable forms:
80 **
81 ** * artifact hash (optionally enclosed in [...])
82 ** * 4-character or larger prefix of a artifact
83 ** * Symbolic Name
84 ** * "tag:" + symbolic name
85 ** * Date or date-time
86 ** * "date:" + Date or date-time
@@ -112,10 +112,12 @@
112 int vid;
113 int rid = 0;
114 int nTag;
115 int i;
116 int startOfBranch = 0;
117 const char *zXTag; /* zTag with optional [...] removed */
118 int nXTag; /* Size of zXTag */
119
120 if( zType==0 || zType[0]==0 ){
121 zType = "*";
122 }else if( zType[0]=='b' ){
123 zType = "ci";
@@ -227,17 +229,29 @@
229 " AND event.type GLOB '%q'",
230 zTagBase, zDate, zType
231 );
232 return rid;
233 }
234
235 /* Remove optional [...] */
236 zXTag = zTag;
237 nXTag = nTag;
238 if( zXTag[0]=='[' ){
239 zXTag++;
240 nXTag--;
241 }
242 if( nXTag>0 && zXTag[nXTag-1]==']' ){
243 nXTag--;
244 }
245
246 /* artifact hash or prefix */
247 if( nXTag>=4 && nXTag<=HNAME_MAX && validate16(zXTag, nXTag) ){
248 Stmt q;
249 char zUuid[HNAME_MAX+1];
250 memcpy(zUuid, zXTag, nXTag);
251 zUuid[nXTag] = 0;
252 canonical16(zUuid, nXTag);
253 rid = 0;
254 if( zType[0]=='*' ){
255 db_prepare(&q, "SELECT rid FROM blob WHERE uuid GLOB '%q*'", zUuid);
256 }else{
257 db_prepare(&q,
258

Keyboard Shortcuts

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