Fossil SCM

Add the "leaves" webpage and the "branches" CLI command. We need to work on the nomenclature.

drh 2007-08-01 12:49 trunk
Commit afcdc7ec979a27421ed8d03760eb7740fa11ba5c
--- src/descendents.c
+++ src/descendents.c
@@ -65,11 +65,12 @@
6565
}
6666
6767
/*
6868
** COMMAND: leaves
6969
**
70
-** Find all leaf versions
70
+** Find all leaf descendents of the current version or of the
71
+** specified version.
7172
*/
7273
void leaves_cmd(void){
7374
Stmt q;
7475
int base;
7576
@@ -89,5 +90,59 @@
8990
" ORDER BY event.mtime DESC"
9091
);
9192
print_timeline(&q, 20);
9293
db_finalize(&q);
9394
}
95
+
96
+/*
97
+** COMMAND: branches
98
+**
99
+** Find leaves of all branches.
100
+*/
101
+void branches_cmd(void){
102
+ Stmt q;
103
+ int base;
104
+
105
+ db_must_be_within_tree();
106
+ if( g.argc==2 ){
107
+ base = db_lget_int("checkout", 0);
108
+ }else{
109
+ base = name_to_rid(g.argv[2]);
110
+ }
111
+ if( base==0 ) return;
112
+ db_prepare(&q,
113
+ "SELECT blob.uuid, datetime(event.mtime,'localtime'), event.comment"
114
+ " FROM blob, event"
115
+ " WHERE blob.rid IN"
116
+ " (SELECT cid FROM plink EXCEPT SELECT pid FROM plink)"
117
+ " AND event.objid=blob.rid"
118
+ " ORDER BY event.mtime DESC"
119
+ );
120
+ print_timeline(&q, 20);
121
+ db_finalize(&q);
122
+}
123
+
124
+/*
125
+** WEBPAGE: leaves
126
+**
127
+** Find leaves of all branches.
128
+*/
129
+void branches_page(void){
130
+ Stmt q;
131
+
132
+ login_check_credentials();
133
+ if( !g.okRead ){ login_needed(); return; }
134
+
135
+ style_header("Leaves");
136
+ db_prepare(&q,
137
+ "SELECT blob.uuid, datetime(event.mtime,'localtime'),"
138
+ " event.comment, event.user"
139
+ " FROM blob, event"
140
+ " WHERE blob.rid IN"
141
+ " (SELECT cid FROM plink EXCEPT SELECT pid FROM plink)"
142
+ " AND event.objid=blob.rid"
143
+ " ORDER BY event.mtime DESC"
144
+ );
145
+ www_print_timeline(&q);
146
+ db_finalize(&q);
147
+ style_footer();
148
+}
94149
--- src/descendents.c
+++ src/descendents.c
@@ -65,11 +65,12 @@
65 }
66
67 /*
68 ** COMMAND: leaves
69 **
70 ** Find all leaf versions
 
71 */
72 void leaves_cmd(void){
73 Stmt q;
74 int base;
75
@@ -89,5 +90,59 @@
89 " ORDER BY event.mtime DESC"
90 );
91 print_timeline(&q, 20);
92 db_finalize(&q);
93 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
--- src/descendents.c
+++ src/descendents.c
@@ -65,11 +65,12 @@
65 }
66
67 /*
68 ** COMMAND: leaves
69 **
70 ** Find all leaf descendents of the current version or of the
71 ** specified version.
72 */
73 void leaves_cmd(void){
74 Stmt q;
75 int base;
76
@@ -89,5 +90,59 @@
90 " ORDER BY event.mtime DESC"
91 );
92 print_timeline(&q, 20);
93 db_finalize(&q);
94 }
95
96 /*
97 ** COMMAND: branches
98 **
99 ** Find leaves of all branches.
100 */
101 void branches_cmd(void){
102 Stmt q;
103 int base;
104
105 db_must_be_within_tree();
106 if( g.argc==2 ){
107 base = db_lget_int("checkout", 0);
108 }else{
109 base = name_to_rid(g.argv[2]);
110 }
111 if( base==0 ) return;
112 db_prepare(&q,
113 "SELECT blob.uuid, datetime(event.mtime,'localtime'), event.comment"
114 " FROM blob, event"
115 " WHERE blob.rid IN"
116 " (SELECT cid FROM plink EXCEPT SELECT pid FROM plink)"
117 " AND event.objid=blob.rid"
118 " ORDER BY event.mtime DESC"
119 );
120 print_timeline(&q, 20);
121 db_finalize(&q);
122 }
123
124 /*
125 ** WEBPAGE: leaves
126 **
127 ** Find leaves of all branches.
128 */
129 void branches_page(void){
130 Stmt q;
131
132 login_check_credentials();
133 if( !g.okRead ){ login_needed(); return; }
134
135 style_header("Leaves");
136 db_prepare(&q,
137 "SELECT blob.uuid, datetime(event.mtime,'localtime'),"
138 " event.comment, event.user"
139 " FROM blob, event"
140 " WHERE blob.rid IN"
141 " (SELECT cid FROM plink EXCEPT SELECT pid FROM plink)"
142 " AND event.objid=blob.rid"
143 " ORDER BY event.mtime DESC"
144 );
145 www_print_timeline(&q);
146 db_finalize(&q);
147 style_footer();
148 }
149
--- src/style.c
+++ src/style.c
@@ -85,10 +85,11 @@
8585
@ <small>logged in as %h(g.zLogin)</small>
8686
}
8787
@ </td><td valign="top" align="right">
8888
@ <a href="%s(g.zBaseURL)/index">Home</a>
8989
if( g.okRead ){
90
+ @ | <a href="%s(g.zBaseURL)/leaves">Leaves</a>
9091
@ | <a href="%s(g.zBaseURL)/timeline">Timeline</a>
9192
}
9293
if( g.okRdWiki ){
9394
@ | <a href="%s(g.zBaseURL)/wiki">Wiki</a>
9495
}
9596
--- src/style.c
+++ src/style.c
@@ -85,10 +85,11 @@
85 @ <small>logged in as %h(g.zLogin)</small>
86 }
87 @ </td><td valign="top" align="right">
88 @ <a href="%s(g.zBaseURL)/index">Home</a>
89 if( g.okRead ){
 
90 @ | <a href="%s(g.zBaseURL)/timeline">Timeline</a>
91 }
92 if( g.okRdWiki ){
93 @ | <a href="%s(g.zBaseURL)/wiki">Wiki</a>
94 }
95
--- src/style.c
+++ src/style.c
@@ -85,10 +85,11 @@
85 @ <small>logged in as %h(g.zLogin)</small>
86 }
87 @ </td><td valign="top" align="right">
88 @ <a href="%s(g.zBaseURL)/index">Home</a>
89 if( g.okRead ){
90 @ | <a href="%s(g.zBaseURL)/leaves">Leaves</a>
91 @ | <a href="%s(g.zBaseURL)/timeline">Timeline</a>
92 }
93 if( g.okRdWiki ){
94 @ | <a href="%s(g.zBaseURL)/wiki">Wiki</a>
95 }
96
+38 -24
--- src/timeline.c
+++ src/timeline.c
@@ -51,34 +51,25 @@
5151
@ <a href="%s(g.zBaseURL)/diff?v1=%s(zV1)&v2=%s(zV2)">[diff]</a>
5252
}
5353
}
5454
}
5555
56
-
5756
/*
58
-** WEBPAGE: timeline
59
-*/
60
-void page_timeline(void){
61
- Stmt q;
62
- char zPrevDate[20];
63
-
64
- /* To view the timeline, must have permission to read project data.
65
- */
66
- login_check_credentials();
67
- if( !g.okRead ){ login_needed(); return; }
68
-
69
- style_header("Timeline");
57
+** Output a timeline in the web format given a query. The query
58
+** should return 4 columns:
59
+**
60
+** 0. UUID
61
+** 1. Date/Time
62
+** 2. Comment string
63
+** 3. User
64
+*/
65
+void www_print_timeline(Stmt *pQuery){
66
+ char zPrevDate[20];
7067
zPrevDate[0] = 0;
71
- db_prepare(&q,
72
- "SELECT uuid, datetime(event.mtime,'localtime'), comment, user"
73
- " FROM event, blob"
74
- " WHERE event.type='ci' AND blob.rid=event.objid"
75
- " ORDER BY event.mtime DESC"
76
- );
7768
@ <table cellspacing=0 border=0 cellpadding=0>
78
- while( db_step(&q)==SQLITE_ROW ){
79
- const char *zDate = db_column_text(&q, 1);
69
+ while( db_step(pQuery)==SQLITE_ROW ){
70
+ const char *zDate = db_column_text(pQuery, 1);
8071
if( memcmp(zDate, zPrevDate, 10) ){
8172
sprintf(zPrevDate, "%.10s", zDate);
8273
@ <tr><td colspan=3>
8374
@ <table cellpadding=2 border=0>
8475
@ <tr><td bgcolor="#a0b5f4" class="border1">
@@ -89,15 +80,38 @@
8980
@ </td></tr>
9081
}
9182
@ <tr><td valign="top">%s(&zDate[11])</td>
9283
@ <td width="20"></td>
9384
@ <td valign="top" align="left">
94
- hyperlink_to_uuid(db_column_text(&q,0));
95
- @ %h(db_column_text(&q,2)) (by %h(db_column_text(&q,3)))</td>
85
+ hyperlink_to_uuid(db_column_text(pQuery,0));
86
+ @ %h(db_column_text(pQuery,2)) (by %h(db_column_text(pQuery,3)))</td>
9687
}
97
- db_finalize(&q);
9888
@ </table>
89
+}
90
+
91
+
92
+
93
+/*
94
+** WEBPAGE: timeline
95
+*/
96
+void page_timeline(void){
97
+ Stmt q;
98
+
99
+ /* To view the timeline, must have permission to read project data.
100
+ */
101
+ login_check_credentials();
102
+ if( !g.okRead ){ login_needed(); return; }
103
+
104
+ style_header("Timeline");
105
+ db_prepare(&q,
106
+ "SELECT uuid, datetime(event.mtime,'localtime'), comment, user"
107
+ " FROM event, blob"
108
+ " WHERE event.type='ci' AND blob.rid=event.objid"
109
+ " ORDER BY event.mtime DESC"
110
+ );
111
+ www_print_timeline(&q);
112
+ db_finalize(&q);
99113
style_footer();
100114
}
101115
/*
102116
** The input query q selects various records. Print a human-readable
103117
** summary of those records.
104118
--- src/timeline.c
+++ src/timeline.c
@@ -51,34 +51,25 @@
51 @ <a href="%s(g.zBaseURL)/diff?v1=%s(zV1)&v2=%s(zV2)">[diff]</a>
52 }
53 }
54 }
55
56
57 /*
58 ** WEBPAGE: timeline
59 */
60 void page_timeline(void){
61 Stmt q;
62 char zPrevDate[20];
63
64 /* To view the timeline, must have permission to read project data.
65 */
66 login_check_credentials();
67 if( !g.okRead ){ login_needed(); return; }
68
69 style_header("Timeline");
70 zPrevDate[0] = 0;
71 db_prepare(&q,
72 "SELECT uuid, datetime(event.mtime,'localtime'), comment, user"
73 " FROM event, blob"
74 " WHERE event.type='ci' AND blob.rid=event.objid"
75 " ORDER BY event.mtime DESC"
76 );
77 @ <table cellspacing=0 border=0 cellpadding=0>
78 while( db_step(&q)==SQLITE_ROW ){
79 const char *zDate = db_column_text(&q, 1);
80 if( memcmp(zDate, zPrevDate, 10) ){
81 sprintf(zPrevDate, "%.10s", zDate);
82 @ <tr><td colspan=3>
83 @ <table cellpadding=2 border=0>
84 @ <tr><td bgcolor="#a0b5f4" class="border1">
@@ -89,15 +80,38 @@
89 @ </td></tr>
90 }
91 @ <tr><td valign="top">%s(&zDate[11])</td>
92 @ <td width="20"></td>
93 @ <td valign="top" align="left">
94 hyperlink_to_uuid(db_column_text(&q,0));
95 @ %h(db_column_text(&q,2)) (by %h(db_column_text(&q,3)))</td>
96 }
97 db_finalize(&q);
98 @ </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99 style_footer();
100 }
101 /*
102 ** The input query q selects various records. Print a human-readable
103 ** summary of those records.
104
--- src/timeline.c
+++ src/timeline.c
@@ -51,34 +51,25 @@
51 @ <a href="%s(g.zBaseURL)/diff?v1=%s(zV1)&v2=%s(zV2)">[diff]</a>
52 }
53 }
54 }
55
 
56 /*
57 ** Output a timeline in the web format given a query. The query
58 ** should return 4 columns:
59 **
60 ** 0. UUID
61 ** 1. Date/Time
62 ** 2. Comment string
63 ** 3. User
64 */
65 void www_print_timeline(Stmt *pQuery){
66 char zPrevDate[20];
 
 
67 zPrevDate[0] = 0;
 
 
 
 
 
 
68 @ <table cellspacing=0 border=0 cellpadding=0>
69 while( db_step(pQuery)==SQLITE_ROW ){
70 const char *zDate = db_column_text(pQuery, 1);
71 if( memcmp(zDate, zPrevDate, 10) ){
72 sprintf(zPrevDate, "%.10s", zDate);
73 @ <tr><td colspan=3>
74 @ <table cellpadding=2 border=0>
75 @ <tr><td bgcolor="#a0b5f4" class="border1">
@@ -89,15 +80,38 @@
80 @ </td></tr>
81 }
82 @ <tr><td valign="top">%s(&zDate[11])</td>
83 @ <td width="20"></td>
84 @ <td valign="top" align="left">
85 hyperlink_to_uuid(db_column_text(pQuery,0));
86 @ %h(db_column_text(pQuery,2)) (by %h(db_column_text(pQuery,3)))</td>
87 }
 
88 @ </table>
89 }
90
91
92
93 /*
94 ** WEBPAGE: timeline
95 */
96 void page_timeline(void){
97 Stmt q;
98
99 /* To view the timeline, must have permission to read project data.
100 */
101 login_check_credentials();
102 if( !g.okRead ){ login_needed(); return; }
103
104 style_header("Timeline");
105 db_prepare(&q,
106 "SELECT uuid, datetime(event.mtime,'localtime'), comment, user"
107 " FROM event, blob"
108 " WHERE event.type='ci' AND blob.rid=event.objid"
109 " ORDER BY event.mtime DESC"
110 );
111 www_print_timeline(&q);
112 db_finalize(&q);
113 style_footer();
114 }
115 /*
116 ** The input query q selects various records. Print a human-readable
117 ** summary of those records.
118

Keyboard Shortcuts

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