Fossil SCM

Change the "branch list" command to provide output more like Git.

drh 2010-11-13 23:45 trunk
Commit 761a6a9dcfd808ff576c1851d79ce95b1f4a4a78
1 file changed +24 -10
+24 -10
--- src/branch.c
+++ src/branch.c
@@ -187,27 +187,41 @@
187187
** List all branches
188188
**
189189
*/
190190
void branch_cmd(void){
191191
int n;
192
+ const char *zCmd = "list";
192193
db_find_and_open_repository(1);
193
- if( g.argc<3 ){
194
+ if( g.argc<2 ){
194195
usage("new|list ...");
195196
}
196
- n = strlen(g.argv[2]);
197
- if( n>=2 && strncmp(g.argv[2],"new",n)==0 ){
197
+ if( g.argc>=3 ) zCmd = g.argv[2];
198
+ n = strlen(zCmd);
199
+ if( strncmp(zCmd,"new",n)==0 ){
198200
branch_new();
199
- }else if( n>=2 && strncmp(g.argv[2],"list",n)==0 ){
201
+ }else if( strncmp(zCmd,"list",n)==0 ){
200202
Stmt q;
203
+ int vid;
204
+ char *zCurrent = 0;
205
+
206
+ if( g.localOpen ){
207
+ vid = db_lget_int("checkout", 0);
208
+ zCurrent = db_text(0, "SELECT value FROM tagxref"
209
+ " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH);
210
+ }
211
+ compute_leaves(0, 1);
201212
db_prepare(&q,
202
- "%s"
203
- " AND blob.rid IN (SELECT rid FROM tagxref"
204
- " WHERE tagid=%d AND tagtype==2 AND srcid!=0)"
205
- " ORDER BY event.mtime DESC",
206
- timeline_query_for_tty(), TAG_BRANCH
213
+ "SELECT DISTINCT value FROM tagxref"
214
+ " WHERE tagid=%d AND value NOT NULL AND rid IN leaves"
215
+ " ORDER BY value /*sort*/",
216
+ TAG_BRANCH
207217
);
208
- print_timeline(&q, 2000);
218
+ while( db_step(&q)==SQLITE_ROW ){
219
+ const char *zBr = db_column_text(&q, 0);
220
+ int isCur = zCurrent!=0 && strcmp(zCurrent,zBr)==0;
221
+ printf("%s%s\n", (isCur ? "* " : " "), zBr);
222
+ }
209223
db_finalize(&q);
210224
}else{
211225
fossil_panic("branch subcommand should be one of: "
212226
"new list");
213227
}
214228
--- src/branch.c
+++ src/branch.c
@@ -187,27 +187,41 @@
187 ** List all branches
188 **
189 */
190 void branch_cmd(void){
191 int n;
 
192 db_find_and_open_repository(1);
193 if( g.argc<3 ){
194 usage("new|list ...");
195 }
196 n = strlen(g.argv[2]);
197 if( n>=2 && strncmp(g.argv[2],"new",n)==0 ){
 
198 branch_new();
199 }else if( n>=2 && strncmp(g.argv[2],"list",n)==0 ){
200 Stmt q;
 
 
 
 
 
 
 
 
 
201 db_prepare(&q,
202 "%s"
203 " AND blob.rid IN (SELECT rid FROM tagxref"
204 " WHERE tagid=%d AND tagtype==2 AND srcid!=0)"
205 " ORDER BY event.mtime DESC",
206 timeline_query_for_tty(), TAG_BRANCH
207 );
208 print_timeline(&q, 2000);
 
 
 
 
209 db_finalize(&q);
210 }else{
211 fossil_panic("branch subcommand should be one of: "
212 "new list");
213 }
214
--- src/branch.c
+++ src/branch.c
@@ -187,27 +187,41 @@
187 ** List all branches
188 **
189 */
190 void branch_cmd(void){
191 int n;
192 const char *zCmd = "list";
193 db_find_and_open_repository(1);
194 if( g.argc<2 ){
195 usage("new|list ...");
196 }
197 if( g.argc>=3 ) zCmd = g.argv[2];
198 n = strlen(zCmd);
199 if( strncmp(zCmd,"new",n)==0 ){
200 branch_new();
201 }else if( strncmp(zCmd,"list",n)==0 ){
202 Stmt q;
203 int vid;
204 char *zCurrent = 0;
205
206 if( g.localOpen ){
207 vid = db_lget_int("checkout", 0);
208 zCurrent = db_text(0, "SELECT value FROM tagxref"
209 " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH);
210 }
211 compute_leaves(0, 1);
212 db_prepare(&q,
213 "SELECT DISTINCT value FROM tagxref"
214 " WHERE tagid=%d AND value NOT NULL AND rid IN leaves"
215 " ORDER BY value /*sort*/",
216 TAG_BRANCH
 
217 );
218 while( db_step(&q)==SQLITE_ROW ){
219 const char *zBr = db_column_text(&q, 0);
220 int isCur = zCurrent!=0 && strcmp(zCurrent,zBr)==0;
221 printf("%s%s\n", (isCur ? "* " : " "), zBr);
222 }
223 db_finalize(&q);
224 }else{
225 fossil_panic("branch subcommand should be one of: "
226 "new list");
227 }
228

Keyboard Shortcuts

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