示例#1
0
文件: branch.c 项目: oopos/fossil
/*
** WEBPAGE: brlist
**
** Show a timeline of all branches
*/
void brlist_page(void){
  Stmt q;
  int cnt;
  int showClosed = P("closed")!=0;
  int showAll = P("all")!=0;
  int colorTest = P("colortest")!=0;

  login_check_credentials();
  if( !g.perm.Read ){ login_needed(); return; }
  if( colorTest ){
    showClosed = 0;
    showAll = 1;
  }

  style_header(showClosed ? "Closed Branches" :
                  showAll ? "All Branches" : "Open Branches");
  style_submenu_element("Timeline", "Timeline", "brtimeline");
  if( showClosed ){
    style_submenu_element("All", "All", "brlist?all");
    style_submenu_element("Open","Open","brlist");
  }else if( showAll ){
    style_submenu_element("Closed", "Closed", "brlist?closed");
    style_submenu_element("Open","Open","brlist");
  }else{
    style_submenu_element("All", "All", "brlist?all");
    style_submenu_element("Closed","Closed","brlist?closed");
  }
  if( !colorTest ){
    style_submenu_element("Color-Test", "Color-Test", "brlist?colortest");
  }else{
    style_submenu_element("All", "All", "brlist?all");
  }
  login_anonymous_available();
  style_sidebox_begin("Nomenclature:", "33%");
  @ <ol>
示例#2
0
文件: finfo.c 项目: digsrc/fossil
/*
** WEBPAGE: finfo
** URL: /finfo?name=FILENAME
**
** Show the change history for a single file.
**
** Additional query parameters:
**
**    a=DATE     Only show changes after DATE
**    b=DATE     Only show changes before DATE
**    n=NUM      Show the first NUM changes only
**    brbg       Background color by branch name
**    ubg        Background color by user name
**    ci=UUID    Ancestors of a particular check-in
**    showid     Show RID values for debugging
*/
void finfo_page(void){
  Stmt q;
  const char *zFilename;
  char zPrevDate[20];
  const char *zA;
  const char *zB;
  int n;
  int baseCheckin;
  int fnid;
  Bag ancestor;
  Blob title;
  Blob sql;
  HQuery url;
  GraphContext *pGraph;
  int brBg = P("brbg")!=0;
  int uBg = P("ubg")!=0;
  int fDebug = atoi(PD("debug","0"));
  int fShowId = P("showid")!=0;

  login_check_credentials();
  if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
  style_header("File History");
  login_anonymous_available();
  url_initialize(&url, "finfo");
  if( brBg ) url_add_parameter(&url, "brbg", 0);
  if( uBg ) url_add_parameter(&url, "ubg", 0);
  baseCheckin = name_to_rid_www("ci");
  zPrevDate[0] = 0;
  zFilename = PD("name","");
  fnid = db_int(0, "SELECT fnid FROM filename WHERE name=%Q", zFilename);
  if( fnid==0 ){
    @ No such file: %h(zFilename)
    style_footer();
    return;
  }
示例#3
0
/*
** WEBPAGE: /tagtimeline
*/
void tagtimeline_page(void){
  Stmt q;

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

  style_header("Tagged Check-ins");
  style_submenu_element("List", "List", "taglist");
  login_anonymous_available();
  cgi_printf("<h2>Check-ins with non-propagating tags:</h2>\n");
  db_prepare(&q,
    "%s AND blob.rid IN (SELECT rid FROM tagxref"
    "                     WHERE tagtype=1 AND srcid>0"
    "                       AND tagid IN (SELECT tagid FROM tag "
    "                                      WHERE tagname GLOB 'sym-*'))"
    " ORDER BY event.mtime DESC",
    timeline_query_for_www()
  );
  www_print_timeline(&q, 0, 0, 0, 0);
  db_finalize(&q);
  cgi_printf("<br />\n"
         "<script  type=\"text/JavaScript\">\n"
         "function xin(id){\n"
         "}\n"
         "function xout(id){\n"
         "}\n"
         "</script>\n");
  style_footer();
}
示例#4
0
/*
** WEBPAGE: /taglist
*/
void taglist_page(void){
  Stmt q;

  login_check_credentials();
  if( !g.perm.Read ){
    login_needed();
  }
  login_anonymous_available();
  style_header("Tags");
  style_submenu_element("Timeline", "Timeline", "tagtimeline");
  cgi_printf("<h2>Non-propagating tags:</h2>\n");
  db_prepare(&q,
    "SELECT substr(tagname,5)"
    "  FROM tag"
    " WHERE EXISTS(SELECT 1 FROM tagxref"
    "               WHERE tagid=tag.tagid"
    "                 AND tagtype=1)"
    " AND tagname GLOB 'sym-*'"
    " ORDER BY tagname"
  );
  cgi_printf("<ul>\n");
  while( db_step(&q)==SQLITE_ROW ){
    const char *zName = db_column_text(&q, 0);
    if( g.perm.Hyperlink ){
      cgi_printf("<li>%z\n"
             "%h</a></li>\n",(xhref("class='taglink'","%R/timeline?t=%T",zName)),(zName));
    }else{
      cgi_printf("<li><span class=\"tagDsp\">%h</span></li>\n",(zName));
    }
  }
  cgi_printf("</ul>\n");
  db_finalize(&q);
  style_footer();
}
示例#5
0
/*
** WEBPAGE:  leaves
**
** Find leaves of all branches.
*/
void leaves_page(void) {
    Blob sql;
    Stmt q;
    int showAll = P("all")!=0;
    int showClosed = P("closed")!=0;

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

    if( !showAll ) {
        style_submenu_element("All", "All", "leaves?all");
    }
    if( !showClosed ) {
        style_submenu_element("Closed", "Closed", "leaves?closed");
    }
    if( showClosed || showAll ) {
        style_submenu_element("Open", "Open", "leaves");
    }
    style_header("Leaves");
    login_anonymous_available();
    style_sidebox_begin("Nomenclature:", "33%");
    @ <ol>
示例#6
0
文件: finfo.c 项目: oopos/fossil
/*
** WEBPAGE: finfo
** URL: /finfo?name=FILENAME
**
** Show the change history for a single file.
**
** Additional query parameters:
**
**    a=DATE     Only show changes after DATE
**    b=DATE     Only show changes before DATE
**    n=NUM      Show the first NUM changes only
**    brbg       Background color by branch name
**    ubg        Background color by user name
*/
void finfo_page(void) {
    Stmt q;
    const char *zFilename;
    char zPrevDate[20];
    const char *zA;
    const char *zB;
    int n;
    Blob title;
    Blob sql;
    GraphContext *pGraph;
    int brBg = P("brbg")!=0;
    int uBg = P("ubg")!=0;

    login_check_credentials();
    if( !g.perm.Read ) {
        login_needed();
        return;
    }
    style_header("File History");
    login_anonymous_available();

    zPrevDate[0] = 0;
    zFilename = PD("name","");
    blob_zero(&sql);
    blob_appendf(&sql,
                 "SELECT"
                 " datetime(event.mtime,'localtime'),"            /* Date of change */
                 " coalesce(event.ecomment, event.comment),"      /* Check-in comment */
                 " coalesce(event.euser, event.user),"            /* User who made chng */
                 " mlink.pid,"                                    /* Parent rid */
                 " mlink.fid,"                                    /* File rid */
                 " (SELECT uuid FROM blob WHERE rid=mlink.pid),"  /* Parent file uuid */
                 " (SELECT uuid FROM blob WHERE rid=mlink.fid),"  /* Current file uuid */
                 " (SELECT uuid FROM blob WHERE rid=mlink.mid),"  /* Check-in uuid */
                 " event.bgcolor,"                                /* Background color */
                 " (SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0"
                 " AND tagxref.rid=mlink.mid)" /* Tags */
                 "  FROM mlink, event"
                 " WHERE mlink.fnid IN (SELECT fnid FROM filename WHERE name=%Q %s)"
                 "   AND event.objid=mlink.mid",
                 TAG_BRANCH,
                 zFilename, filename_collation()
                );
    if( (zA = P("a"))!=0 ) {
        blob_appendf(&sql, " AND event.mtime>=julianday('%q')", zA);
    }
    if( (zB = P("b"))!=0 ) {
        blob_appendf(&sql, " AND event.mtime<=julianday('%q')", zB);
    }
    blob_appendf(&sql," ORDER BY event.mtime DESC /*sort*/");
    if( (n = atoi(PD("n","0")))>0 ) {
        blob_appendf(&sql, " LIMIT %d", n);
    }
    db_prepare(&q, blob_str(&sql));
    blob_reset(&sql);
    blob_zero(&title);
    blob_appendf(&title, "History of ");
    hyperlinked_path(zFilename, &title, 0);
    @ <h2>%b(&title)</h2>
示例#7
0
/*
** WEBPAGE: /taglist
*/
void taglist_page(void){
  Stmt q;

  login_check_credentials();
  if( !g.perm.Read ){
    login_needed();
  }
  login_anonymous_available();
  style_header("Tags");
  style_submenu_element("Timeline", "Timeline", "tagtimeline");
  @ <h2>Non-propagating tags:</h2>
示例#8
0
文件: branch.c 项目: 3615pipou/coopy
/*
** WEBPAGE: brlist
**
** Show a timeline of all branches
*/
void brlist_page(void){
  Stmt q;
  int cnt;
  int showClosed = P("closed")!=0;

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

  style_header(showClosed ? "Closed Branches" : "Open Branches");
  style_submenu_element("Timeline", "Timeline", "brtimeline");
  if( showClosed ){
    style_submenu_element("Open","Open","brlist");
  }else{
    style_submenu_element("Closed","Closed","brlist?closed");
  }
  login_anonymous_available();
  compute_leaves(0, 1);
  style_sidebox_begin("Nomenclature:", "33%");
  @ <ol>
/*
** WEBPAGE:  leaves
**
** Find leaves of all branches.
*/
void leaves_page(void){
  Blob sql;
  Stmt q;
  int showAll = P("all")!=0;
  int showClosed = P("closed")!=0;

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

  if( !showAll ){
    style_submenu_element("All", "All", "leaves?all");
  }
  if( !showClosed ){
    style_submenu_element("Closed", "Closed", "leaves?closed");
  }
  if( showClosed || showAll ){
    style_submenu_element("Open", "Open", "leaves");
  }
  style_header("Leaves");
  login_anonymous_available();
  style_sidebox_begin("Nomenclature:", "33%");
  cgi_printf("<ol>\n"
         "<li> A <div class=\"sideboxDescribed\">leaf</div>\n"
         "is a check-in with no descendants in the same branch.</li>\n"
         "<li> An <div class=\"sideboxDescribed\">open leaf</div>\n"
         "is a leaf that does not have a \"closed\" tag\n"
         "and is thus assumed to still be in use.</li>\n"
         "<li> A <div class=\"sideboxDescribed\">closed leaf</div>\n"
         "has a \"closed\" tag and is thus assumed to\n"
         "be historical and no longer in active use.</li>\n"
         "</ol>\n");
  style_sidebox_end();

  if( showAll ){
    cgi_printf("<h1>All leaves, both open and closed:</h1>\n");
  }else if( showClosed ){
    cgi_printf("<h1>Closed leaves:</h1>\n");
  }else{
    cgi_printf("<h1>Open leaves:</h1>\n");
  }
  blob_zero(&sql);
  blob_append(&sql, timeline_query_for_www(), -1);
  blob_appendf(&sql, " AND blob.rid IN leaf");
  if( showClosed ){
    blob_appendf(&sql," AND %z", leaf_is_closed_sql("blob.rid"));
  }else if( !showAll ){
    blob_appendf(&sql," AND NOT %z", leaf_is_closed_sql("blob.rid"));
  }
  db_prepare(&q, "%s ORDER BY event.mtime DESC", blob_str(&sql));
  blob_reset(&sql);
  www_print_timeline(&q, TIMELINE_LEAFONLY, 0, 0, 0);
  db_finalize(&q);
  cgi_printf("<br />\n"
         "<script  type=\"text/JavaScript\">\n"
         "function xin(id){\n"
         "}\n"
         "function xout(id){\n"
         "}\n"
         "</script>\n");
  style_footer();
}