Fossil

Check-in [bdcac62937]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:After each item of the branch list, give a hyperlink to the timeline that shows all check-ins with the branch tag.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: bdcac6293748bd3fe9458e653d51d6affd3595ae
User & Date: drh 2009-01-21 03:34:37.000
References
2009-01-21
04:44 New ticket [d6bb26f436] Leaf menu in Nomenclaturebox is missing "Merged Leaf" description. ... (artifact: e6d2ddb8ca user: anonymous)
Context
2009-01-21
13:50
Fix a bug in the "leaves" page when the repository is empty. Begin adding support for the ability to erase tags. ... (check-in: 432d4391b9 user: drh tags: trunk)
03:34
After each item of the branch list, give a hyperlink to the timeline that shows all check-ins with the branch tag. ... (check-in: bdcac62937 user: drh tags: trunk)
03:21
Throw an error when the "fossil tag add" command specifies a CHECK-IN that does not exist. ... (check-in: 8b2dd05734 user: drh tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/branch.c.
210
211
212
213
214
215
216























217
218
219
220
221
222
223
224
225
226
227
228
229
230

231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
    print_timeline(&q, 2000);
    db_finalize(&q);
  }else{
    fossil_panic("branch subcommand should be one of: "
                 "new list");
  }
}
























/*
** WEBPAGE: brlist
**
** Show a timeline of all branches
*/
void brlist_page(void){
  Stmt q;

  login_check_credentials();
  if( !g.okRead ){ login_needed(); return; }

  style_header("Branches");
  login_anonymous_available();

  db_prepare(&q,
    "%s AND blob.rid IN (SELECT rid FROM tagxref WHERE tagtype>0 AND tagid=%d)"
    " ORDER BY event.mtime DESC",
    timeline_query_for_www(), TAG_NEWBRANCH
  );
  www_print_timeline(&q, 0, 0);
  db_finalize(&q);
  @ <br clear="both">
  @ <script>
  @ function xin(id){
  @ }
  @ function xout(id){
  @ }
  @ </script>
  style_footer();
}







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>














>





|










210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
    print_timeline(&q, 2000);
    db_finalize(&q);
  }else{
    fossil_panic("branch subcommand should be one of: "
                 "new list");
  }
}

/*
** This routine is called while for each check-in that is rendered by
** the timeline of a "brlist" page.  Add some additional hyperlinks
** to the end of the line.
*/
static void brlist_extra(int rid){
  Stmt q;
  db_prepare(&q, 
    "SELECT tagname, tagxref.tagid FROM tagxref, tag"
    " WHERE tagxref.rid=%d"
    "   AND tagxref.tagid=tag.tagid"
    "   AND tagxref.tagtype>0"
    "   AND tag.tagname GLOB 'sym-*'",
    rid
  );
  while( db_step(&q)==SQLITE_ROW ){
    const char *zTagName = db_column_text(&q, 0);
    int tagid = db_column_int(&q, 1);
    @ [<a href="%s(g.zBaseURL)/timeline?t=%d(tagid)">%h(&zTagName[4])</a>]
  }
  db_finalize(&q);
}

/*
** WEBPAGE: brlist
**
** Show a timeline of all branches
*/
void brlist_page(void){
  Stmt q;

  login_check_credentials();
  if( !g.okRead ){ login_needed(); return; }

  style_header("Branches");
  login_anonymous_available();
  @ <h2>The initial check-in for each branch:</h2>
  db_prepare(&q,
    "%s AND blob.rid IN (SELECT rid FROM tagxref WHERE tagtype>0 AND tagid=%d)"
    " ORDER BY event.mtime DESC",
    timeline_query_for_www(), TAG_NEWBRANCH
  );
  www_print_timeline(&q, 0, brlist_extra);
  db_finalize(&q);
  @ <br clear="both">
  @ <script>
  @ function xin(id){
  @ }
  @ function xout(id){
  @ }
  @ </script>
  style_footer();
}
Changes to src/timeline.c.
197
198
199
200
201
202
203
204
205
206
207




208
209
210
211
212
213
214
      wiki_convert(&truncated, 0, wikiFlags);
      blob_reset(&truncated);
    }else{
      wiki_convert(&comment, 0, wikiFlags);
    }
    blob_reset(&comment);
    if( zTagList && zTagList[0] ){
      @ (user: %h(zUser), tags: %h(zTagList))</td></tr>
    }else{
      @ (user: %h(zUser))</td></tr>
    }




  }
  @ </table>
}

/*
** Create a temporary table suitable for storing timeline data.
*/







|

|

>
>
>
>







197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
      wiki_convert(&truncated, 0, wikiFlags);
      blob_reset(&truncated);
    }else{
      wiki_convert(&comment, 0, wikiFlags);
    }
    blob_reset(&comment);
    if( zTagList && zTagList[0] ){
      @ (user: %h(zUser), tags: %h(zTagList))
    }else{
      @ (user: %h(zUser))
    }
    if( xExtra ){
      xExtra(rid);
    }
    @ </td></tr>
  }
  @ </table>
}

/*
** Create a temporary table suitable for storing timeline data.
*/