Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | timeline command now supports a ?-t|--type TYPE? option to filter on specific event types. Fixed a memleak in the timeline command. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
bab8363876617441f52ea6ebeb955f95 |
| User & Date: | stephan 2008-12-12 23:17:18.000 |
Context
|
2008-12-13
| ||
| 13:40 | added specification, subsystems to ticket choices, zorro-ed a spelling error ... (check-in: 9d704470c3 user: kejoki tags: trunk) | |
|
2008-12-12
| ||
| 23:17 | timeline command now supports a ?-t|--type TYPE? option to filter on specific event types. Fixed a memleak in the timeline command. ... (check-in: bab8363876 user: stephan tags: trunk) | |
| 22:19 | /timeline.rss now accepts the same filter parameters as /timeline (e.g. y=ci for commits and y=w for wiki) ... (check-in: 90adbd8443 user: stephan tags: trunk) | |
Changes
Changes to src/timeline.c.
| ︙ | ︙ | |||
590 591 592 593 594 595 596 597 598 599 600 |
@ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim),
@ (SELECT count(*) FROM plink WHERE cid=blob.rid)
@ FROM event, blob
@ WHERE blob.rid=event.objid
;
return zBaseSql;
}
/*
** COMMAND: timeline
**
| > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > | > | | | > | > > > | 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 |
@ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim),
@ (SELECT count(*) FROM plink WHERE cid=blob.rid)
@ FROM event, blob
@ WHERE blob.rid=event.objid
;
return zBaseSql;
}
/*
** Equivalent to timeline_query_for_tty(), except that:
**
** a) accepts a the -type=XX flag to set the event type to filter on.
** The values of XX are the same as supported by the /timeline page.
**
** b) The returned string must be freed using free().
*/
char * timeline_query_for_tty_m(void){
Blob bl;
char const * zType = 0;
blob_zero(&bl);
blob_append( &bl, timeline_query_for_tty(), -1 );
zType = find_option( "type", "t", 1 );
if( zType && *zType )
{
blob_appendf( &bl, " AND event.type=%Q", zType );
}
return blob_buffer(&bl);
}
/*
** COMMAND: timeline
**
** Usage: %fossil timeline ?WHEN? ?BASELINE|DATETIME? ?-n|--count N? ?-t|--type TYPE?
**
** Print a summary of activity going backwards in date and time
** specified or from the current date and time if no arguments
** are given. Show as many as N (default 20) check-ins. The
** WHEN argument can be any unique abbreviation of one of these
** keywords:
**
** before
** after
** descendants | children
** ancestors | parents
**
** The BASELINE can be any unique prefix of 4 characters or more.
** The DATETIME should be in the ISO8601 format. For
** examples: "2007-08-18 07:21:21". You can also say "current"
** for the current version or "now" for the current time.
**
** The optional TYPE argument may any types supported by the /timeline
** page. For example:
**
** w = wiki commits only
** ci = file commits only
** t = tickets only
*/
void timeline_cmd(void){
Stmt q;
int n, k;
const char *zCount;
const char *zType;
char *zOrigin;
char *zDate;
char *zSQL;
int objid = 0;
Blob uuid;
int mode = 1 ; /* 1: before 2:after 3:children 4:parents */
db_find_and_open_repository(1);
zCount = find_option("count","n",1);
zType = find_option("type","t",1);
if( zCount ){
n = atoi(zCount);
}else{
n = 20;
}
if( g.argc>=4 ){
k = strlen(g.argv[2]);
if( strncmp(g.argv[2],"before",k)==0 ){
mode = 1;
}else if( strncmp(g.argv[2],"after",k)==0 && k>1 ){
mode = 2;
}else if( strncmp(g.argv[2],"descendants",k)==0 ){
mode = 3;
}else if( strncmp(g.argv[2],"children",k)==0 ){
mode = 3;
}else if( strncmp(g.argv[2],"ancestors",k)==0 && k>1 ){
mode = 4;
}else if( strncmp(g.argv[2],"parents",k)==0 ){
mode = 4;
}else if(!zType && !zCount){
usage("?WHEN? ?BASELINE|DATETIME? ?-n|--count N? ?-t TYPE?");
}
if( '-' != *g.argv[3] ){
zOrigin = g.argv[3];
}else{
zOrigin = "now";
}
}else if( g.argc==3 ){
zOrigin = g.argv[2];
}else{
zOrigin = "now";
}
k = strlen(zOrigin);
blob_zero(&uuid);
|
| ︙ | ︙ | |||
675 676 677 678 679 680 681 |
zDate = mprintf("(SELECT mtime FROM plink WHERE cid=%d)", objid);
}else{
if( mode==3 || mode==4 ){
fossil_fatal("cannot compute descendants or ancestors of a date");
}
zDate = mprintf("(SELECT julianday(%Q, 'utc'))", zOrigin);
}
| | | > > > > > | 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 |
zDate = mprintf("(SELECT mtime FROM plink WHERE cid=%d)", objid);
}else{
if( mode==3 || mode==4 ){
fossil_fatal("cannot compute descendants or ancestors of a date");
}
zDate = mprintf("(SELECT julianday(%Q, 'utc'))", zOrigin);
}
zSQL = mprintf("%z AND event.mtime %s %s",
timeline_query_for_tty_m(),
(mode==1 || mode==4) ? "<=" : ">=",
zDate
);
if( mode==3 || mode==4 ){
db_multi_exec("CREATE TEMP TABLE ok(rid INTEGER PRIMARY KEY)");
if( mode==3 ){
compute_descendants(objid, n);
}else{
compute_ancestors(objid, n);
}
zSQL = mprintf("%z AND blob.rid IN ok", zSQL);
}
if( zType && (zType[0]!='a') ){
zSQL = mprintf( "%z AND event.type=%Q ", zSQL, zType);
}
zSQL = mprintf("%z ORDER BY event.mtime DESC", zSQL);
db_prepare(&q, zSQL);
free( zSQL );
print_timeline(&q, n);
db_finalize(&q);
}
/*
** This is a version of the "localtime()" function from the standard
** C library. It converts a unix timestamp (seconds since 1970) into
|
| ︙ | ︙ |