50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
struct AnnVers {
char *zFUuid; /* File being analyzed */
char *zMUuid; /* Check-in containing the file */
char *zUser; /* Name of user who did the check-in */
double mtime; /* [event].[mtime] db entry */
} *aVers; /* For each check-in analyzed */
unsigned int naVers; /* # of entries allocated in this->aVers */
};
static const Annotator Annotator_empty = {
fsl_diff_cx_empty_m,
fsl_buffer_empty_m/*headVersion*/,
NULL/*aOrig*/,
0U/*nOrig*/, 0U/*nVers*/,
false/*bMoreToDo*/,
0/*origId*/,
0/*showId*/,
NULL/*aVers*/,
0U/*naVerse*/
};
static void fsl__annotator_clean(Annotator * const a){
unsigned i;
fsl__diff_cx_clean(&a->c);
for(i = 0; i < a->nVers; ++i){
fsl_free(a->aVers[i].zFUuid);
|
>
|
>
|
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
struct AnnVers {
char *zFUuid; /* File being analyzed */
char *zMUuid; /* Check-in containing the file */
char *zUser; /* Name of user who did the check-in */
double mtime; /* [event].[mtime] db entry */
} *aVers; /* For each check-in analyzed */
unsigned int naVers; /* # of entries allocated in this->aVers */
fsl_timer_state timer;
};
static const Annotator Annotator_empty = {
fsl_diff_cx_empty_m,
fsl_buffer_empty_m/*headVersion*/,
NULL/*aOrig*/,
0U/*nOrig*/, 0U/*nVers*/,
false/*bMoreToDo*/,
0/*origId*/,
0/*showId*/,
NULL/*aVers*/,
0U/*naVerse*/,
fsl_timer_state_empty_m
};
static void fsl__annotator_clean(Annotator * const a){
unsigned i;
fsl__diff_cx_clean(&a->c);
for(i = 0; i < a->nVers; ++i){
fsl_free(a->aVers[i].zFUuid);
|
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
fsl_annotate_opt const * const opt){
int rc = FSL_RC_NYI;
fsl_buffer step = fsl_buffer_empty /*previous revision*/;
fsl_id_t cid = 0, fnid = 0; // , rid = 0;
fsl_stmt q = fsl_stmt_empty;
bool openedTransaction = false;
fsl_db * const db = fsl_needs_repo(f);
if(!db) return FSL_RC_NOT_A_REPO;
rc = fsl_cx_transaction_begin(f);
if(rc) goto dberr;
openedTransaction = true;
fnid = fsl_db_g_id(db, 0,
"SELECT fnid FROM filename WHERE name=%Q %s",
|
<
|
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
fsl_annotate_opt const * const opt){
int rc = FSL_RC_NYI;
fsl_buffer step = fsl_buffer_empty /*previous revision*/;
fsl_id_t cid = 0, fnid = 0; // , rid = 0;
fsl_stmt q = fsl_stmt_empty;
bool openedTransaction = false;
fsl_db * const db = fsl_needs_repo(f);
if(!db) return FSL_RC_NOT_A_REPO;
rc = fsl_cx_transaction_begin(f);
if(rc) goto dberr;
openedTransaction = true;
fnid = fsl_db_g_id(db, 0,
"SELECT fnid FROM filename WHERE name=%Q %s",
|
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
|
" ORDER BY ancestor.generation;",
fnid
);
if(rc) goto dberr;
while(FSL_RC_STEP_ROW==fsl_stmt_step(&q)){
if(a->nVers>=3){
/*Process at least 3 rows before imposing any limit.
Note that we do not impose a time-based limit here like
fossil does, but may want to add that at some point.*/
if(opt->limit>0 && a->nVers>=opt->limit){
a->bMoreToDo = true;
break;
}
}
char * zTmp = 0;
char const * zCol = 0;
fsl_size_t nCol = 0;
|
|
<
|
|
>
>
>
>
|
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
|
" ORDER BY ancestor.generation;",
fnid
);
if(rc) goto dberr;
while(FSL_RC_STEP_ROW==fsl_stmt_step(&q)){
if(a->nVers>=3){
/* Process at least 3 rows before imposing any limit. That is
historical behaviour inherited from fossil(1). */
if(opt->limitMs>0 &&
fsl_timer_fetch(&a->timer)/1000 >= opt->limitMs){
a->bMoreToDo = true;
break;
}else if(opt->limitVersions>0 && a->nVers>=opt->limitVersions){
a->bMoreToDo = true;
break;
}
}
char * zTmp = 0;
char const * zCol = 0;
fsl_size_t nCol = 0;
|
398
399
400
401
402
403
404
405
406
407
408
409
410
411
|
int rc;
Annotator ann = Annotator_empty;
unsigned int i;
fsl_buffer * const scratch = fsl_cx_scratchpad(f);
fsl_annotate_step aStep;
assert(opt->out);
rc = fsl__annotate_file(f, &ann, opt);
if(rc) goto end;
memset(&aStep,0,sizeof(fsl_annotate_step));
if(opt->dumpVersions){
struct AnnVers *av;
for(av = ann.aVers, i = 0;
|
>
|
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
|
int rc;
Annotator ann = Annotator_empty;
unsigned int i;
fsl_buffer * const scratch = fsl_cx_scratchpad(f);
fsl_annotate_step aStep;
assert(opt->out);
if(opt->limitMs>0) fsl_timer_start(&ann.timer);
rc = fsl__annotate_file(f, &ann, opt);
if(rc) goto end;
memset(&aStep,0,sizeof(fsl_annotate_step));
if(opt->dumpVersions){
struct AnnVers *av;
for(av = ann.aVers, i = 0;
|