In src/info.c, just before the finfo_page, add this code
below.  Then 

fossil finfo <filename>  

Gives you the change history for a file.  This is my first attempt at
doing anything inside fossil.  Suggestions welcome.

 - Venks

/*
** COMMAND: finfo FILENAME
** 
** Print the complete change history for a single file.
*/

void finfo_cmd(void){
  Stmt q;
  int vid;
  Blob dest;
  const char *zFilename;

  db_must_be_within_tree();
  vid = db_lget_int("checkout", 0);
  if( vid==0 ){
    fossil_panic("no checkout to finfo files in");
  }
  if (g.argc<3) {
      usage("FILENAME");
  }
  file_tree_name(g.argv[2], &dest, 1);
  zFilename = blob_str(&dest);
  db_prepare(&q,
    "SELECT substr(b.uuid,1,10), datetime(event.mtime,'localtime'),"
    "       coalesce(event.ecomment, event.comment),"
    "       coalesce(event.euser, event.user),"
    "       mlink.pid, mlink.fid, mlink.mid, mlink.fnid, ci.uuid"
    "  FROM mlink, blob b, event, blob ci"
    " WHERE mlink.fnid=(SELECT fnid FROM filename WHERE name=%Q)"
    "   AND b.rid=mlink.fid"
    "   AND event.objid=mlink.mid"
    "   AND event.objid=ci.rid"
    " ORDER BY event.mtime DESC",
    zFilename
  );

  printf("History of %s\n", zFilename);
  while( db_step(&q)==SQLITE_ROW ){
    const char *zUuid = db_column_text(&q, 0);
    const char *zDate = db_column_text(&q, 1);
    const char *zCom = db_column_text(&q, 2);
    const char *zUser = db_column_text(&q, 3);
    printf("Ver %.10s by %.10s on %.10s: %s\n", zUuid, zUser, zDate, zCom );
  }
  db_finalize(&q);
  blob_reset(&dest);
}


_______________________________________________
fossil-users mailing list
[email protected]
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to