@@ -108,21 +108,25 @@
108 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return zEDate;
109 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
110 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
111 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
112 112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the RID that is the "root" of the branch that contains
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** check-in "rid" if inBranch==0 or the first check-in in the branch
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if inBranch==1.
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** check-in "rid". Details depending on eType:
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** eType==0 The check-in of the parent branch off of which
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the branch containing RID originally diverged.
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** eType==1 The first check-in of the branch that contains RID.
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** eType==2 The youngest ancestor of RID that is on the branch
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from which the branch containing RID diverged.
115 122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int start_of_branch(int rid, int inBranch){
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int start_of_branch(int rid, int eType){
117 124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
118 125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zBr;
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zBr = db_text("trunk","SELECT value FROM tagxref"
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE rid=%d AND tagid=%d"
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND tagtype>0",
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid, TAG_BRANCH);
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ans = rid;
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zBr = branch_of_rid(rid);
124 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
125 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT pid, EXISTS(SELECT 1 FROM tagxref"
126 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tagid=%d AND tagtype>0"
127 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND value=%Q AND rid=plink.pid)"
128 132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM plink"
@@ -130,18 +134,23 @@
130 134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TAG_BRANCH, zBr
131 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
132 136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(zBr);
133 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{
134 138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_reset(&q);
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_bind_int(&q, ":cid", rid);
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_bind_int(&q, ":cid", ans);
136 140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = db_step(&q);
137 141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_ROW ) break;
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( inBranch && db_column_int(&q,1)==0 ) break;
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = db_column_int(&q, 0);
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( db_column_int(&q, 1)==1 && rid>0 );
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType==1 && db_column_int(&q,1)==0 ) break;
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ans = db_column_int(&q, 0);
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( db_column_int(&q, 1)==1 && ans>0 );
141 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rid;
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType==2 && ans>0 ){
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zBr = branch_of_rid(ans);
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ans = compute_youngest_ancestor_in_branch(rid, zBr);
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free(zBr);
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return ans;
143 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
145 154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
146 155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Convert a symbolic name into a RID. Acceptable forms:
147 156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -165,10 +174,11 @@
165 174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
166 175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The zType parameter specifies the type of artifact: ci, t, w, e, g, f.
167 176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If zType is NULL or "" or "*" then any type of artifact will serve.
168 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If zType is "br" then find the first check-in of the named branch
169 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** rather than the last.
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
170 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zType is "ci" in most use cases since we are usually searching for
171 181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a check-in.
172 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
173 183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Note that the input zTag for types "t" and "e" is the artifact hash of
174 184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the ticket-change or technote-change artifact, not the randomly generated
@@ -270,14 +280,19 @@
270 280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
271 281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( startOfBranch ) rid = start_of_branch(rid,1);
272 282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rid;
273 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
274 284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* root:TAG -> The origin of the branch */
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( memcmp(zTag, "root:", 5)==0 ){
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* root:BR -> The origin of the branch named BR */
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strncmp(zTag, "root:", 5)==0 ){
277 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = symbolic_name_to_rid(zTag+5, zType);
278 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return start_of_branch(rid, 0);
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* rootx:BR -> Most recent merge-in for the branch name BR */
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strncmp(zTag, "merge-in:", 9)==0 ){
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = symbolic_name_to_rid(zTag+9, zType);
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return start_of_branch(rid, 2);
279 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
280 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
281 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* symbolic-name ":" date-time */
282 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nTag = strlen(zTag);
283 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nTag-10 && zTag[i]!=':'; i++){}
@@ -465,26 +480,37 @@
465 480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
466 481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
467 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
468 483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-name-to-id
469 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Convert a name to a full artifact ID.
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Usage: %fossil test-name-to-id [--count N] NAME
486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Convert a NAME to a full artifact ID. Repeat the conversion N
488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** times (for timing purposes) if the --count option is given.
471 489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
472 490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void test_name_to_id(void){
473 491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = 0;
474 493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob name;
475 494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_must_be_within_tree();
476 495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=2; i<g.argc; i++){
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_init(&name, g.argv[i], -1);
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("%s -> ", g.argv[i]);
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( name_to_uuid(&name, 1, "*") ){
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("ERROR: %s\n", g.zErrMsg);
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_error_reset();
482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("%s\n", blob_buffer(&name));
484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_reset(&name);
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(g.argv[i],"--count")==0 && i+1<g.argc ){
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i++;
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = atoi(g.argv[i]);
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do{
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_init(&name, g.argv[i], -1);
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("%s -> ", g.argv[i]);
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( name_to_uuid(&name, 1, "*") ){
505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("ERROR: %s\n", g.zErrMsg);
506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_error_reset();
507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print("%s\n", blob_buffer(&name));
509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&name);
511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( n-- > 0 );
486 512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
487 513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
488 514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
489 515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
490 516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Convert a name to a rid. If the name can be any of the various forms
491 517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!