Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Improvements to the "annotate" algorithm: Only search primary ancestors; ignore branchs. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
621be704940afeef6d02c3615c07a2ee |
| User & Date: | drh 2011-06-07 15:51:01.833 |
Context
|
2011-06-09
| ||
| 19:20 | Make sure the content of a manifest has been materialized and is not a copy-or-write segment of another blob prior to parsing it. Ticket [9c3e2a224b6b0055] ... (check-in: 0538980488 user: drh tags: trunk) | |
|
2011-06-07
| ||
| 15:51 | Improvements to the "annotate" algorithm: Only search primary ancestors; ignore branchs. ... (check-in: 621be70494 user: drh tags: trunk) | |
| 02:09 | Merge the venks-emacs changes into trunk. ... (check-in: fbf417b681 user: drh tags: trunk) | |
Changes
Changes to src/descendants.c.
| ︙ | ︙ | |||
184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
pqueue_insert(&queue, pid, -mtime, 0);
}
}
db_reset(&q);
}
bag_clear(&seen);
pqueue_clear(&queue);
db_finalize(&ins);
db_finalize(&q);
}
/*
** Load the record ID rid and up to N-1 closest descendants into
** the "ok" table.
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
pqueue_insert(&queue, pid, -mtime, 0);
}
}
db_reset(&q);
}
bag_clear(&seen);
pqueue_clear(&queue);
db_finalize(&ins);
db_finalize(&q);
}
/*
** Compute up to N direct ancestors (merge ancestors do not count)
** for the check-in rid and put them in a table named "ancestor".
** Label each generation with consecutive integers going backwards
** in time such that rid has the smallest generation number and the oldest
** direct ancestor as the largest generation number.
*/
void compute_direct_ancestors(int rid, int N){
Stmt ins;
Stmt q;
int gen = 0;
db_multi_exec(
"CREATE TEMP TABLE ancestor(rid INTEGER, generation INTEGER PRIMARY KEY);"
"INSERT INTO ancestor VALUES(%d, 0);", rid
);
db_prepare(&ins, "INSERT INTO ancestor VALUES(:rid, :gen)");
db_prepare(&q,
"SELECT pid FROM plink"
" WHERE cid=:rid AND isprim"
);
while( (N--)>0 ){
db_bind_int(&q, ":rid", rid);
if( db_step(&q)!=SQLITE_ROW ) break;
rid = db_column_int(&q, 0);
db_reset(&q);
gen++;
db_bind_int(&ins, ":rid", rid);
db_bind_int(&ins, ":gen", gen);
db_step(&ins);
db_reset(&ins);
}
db_finalize(&ins);
db_finalize(&q);
}
/*
** Load the record ID rid and up to N-1 closest descendants into
** the "ok" table.
|
| ︙ | ︙ |
Changes to src/diff.c.
| ︙ | ︙ | |||
756 757 758 759 760 761 762 | ** Compute a complete annotation on a file. The file is identified ** by its filename number (filename.fnid) and the baseline in which ** it was checked in (mlink.mid). */ static void annotate_file( Annotator *p, /* The annotator */ int fnid, /* The name of the file to be annotated */ | | | > | | | | | | 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 |
** Compute a complete annotation on a file. The file is identified
** by its filename number (filename.fnid) and the baseline in which
** it was checked in (mlink.mid).
*/
static void annotate_file(
Annotator *p, /* The annotator */
int fnid, /* The name of the file to be annotated */
int mid, /* Use the version of the file in this check-in */
int webLabel, /* Use web-style annotations if true */
int iLimit, /* Limit the number of levels if greater than zero */
int annFlags /* Flags to alter the annotation */
){
Blob toAnnotate; /* Text of the final (mid) version of the file */
Blob step; /* Text of previous revision */
int rid; /* Artifact ID of the file being annotated */
char *zLabel; /* Label to apply to a line */
Stmt q; /* Query returning all ancestor versions */
/* Initialize the annotation */
rid = db_int(0, "SELECT fid FROM mlink WHERE mid=%d AND fnid=%d",mid,fnid);
if( rid==0 ){
fossil_panic("file #%d is unchanged in manifest #%d", fnid, mid);
}
if( !content_get(rid, &toAnnotate) ){
fossil_panic("unable to retrieve content of artifact #%d", rid);
}
db_multi_exec("CREATE TEMP TABLE ok(rid INTEGER PRIMARY KEY)");
if( iLimit<=0 ) iLimit = 1000000000;
compute_direct_ancestors(mid, iLimit);
annotation_start(p, &toAnnotate);
db_prepare(&q,
"SELECT mlink.fid,"
" (SELECT uuid FROM blob WHERE rid=mlink.%s),"
" date(event.mtime), "
" coalesce(event.euser,event.user) "
" FROM ancestor, mlink, event"
" WHERE mlink.fnid=%d"
" AND mlink.mid=ancestor.rid"
" AND event.objid=ancestor.rid"
" ORDER BY ancestor.generation ASC"
" LIMIT %d",
(annFlags & ANN_FILE_VERS)!=0 ? "fid" : "mid",
fnid,
iLimit>0 ? iLimit : 10000000
);
while( db_step(&q)==SQLITE_ROW ){
int pid = db_column_int(&q, 0);
|
| ︙ | ︙ |