Artifact [8ab90316eb]
Not logged in

Artifact 8ab90316eb30467b62b16c43be87f11c5621bbe3:

Ticket change [8ab90316eb] - Ticket [f89470bc3d] More useful file browser status still Open with 1 other change by drh 2010-11-30 18:44:40.
D 2010-11-30T18:44:40
J comment The\scurrent\sfile\sbased\srepository\sbrowsing\sis\suseful\sfor\sfinding\sthe\shistory\sof\sa\sspecific\sfile,\sbut\sdoesn't\shelp\smuch\sin\sfinding\sout\swhat\schanged\swhen.\sIn\saddition,\sthe\smulti-column\slayout\smakes\sit\sharder\sto\slocate\sa\sspecific\sentry.\r\n\r\nExample:\s[http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/cvs/]\r\n\r\n\s\s*\s\slinear,\ssorted\slist\r\n\s\s*\s\srevision\sof\shead\r\n\s\s*\s\stime\sof\slast\scommit,\scolor\scoded\sfor\sease\sof\suse\r\n\s\s*\s\sauthor\sand\scommit\smessage\sof\slast\scommit\r\n\r\nAnother\sexample:\s[http://svn.freebsd.org/viewvc/base/]\r\n\r\n\s\s*\s\sList\sthe\ssame\sdata\sfor\seach\sdirectory,\se.g.\sthe\slast\stime\ssomething\sin\sthis\sdirectory\stree\schanged.\r\n\r\n<hr\s/><i>zachtodd\sadded\son\s2010-11-30\s14:46:25:</i><br\s/>\r\nI\shave\supdated\sthe\sfile\sbrowser\sto\sreflect\sthe\srequested\sfunctionality\sshown\sin\sthe\sfirst\sexample.\r\n\r\nBelow\sis\sthe\spatch\sthat\simplements\sthe\snew\sfile\sbrowser:\r\n\r\n---------------------\r\n<verbatim>\r\nIndex:\ssrc/browse.c\r\n===================================================================\r\n---\ssrc/browse.c\r\n+++\ssrc/browse.c\r\n@@\s-93,10\s+93,66\s@@\r\n\s\s\s\s\szSep\s=\s"/";\r\n\s\s\s\s\swhile(\szPath[j]=='/'\s){\sj++;\s}\r\n\s\s\s}\r\n\s}\r\n\s\r\n+void\sget_filemeta(const\schar*\szFN,\schar**\szAuthor,\schar**\szComment,\schar**\smtime)\r\n+{\r\n+\s\s\s\sStmt\sq;\r\n+\s\s\s\sint\sfnid;\r\n+\s\s\s\sint\smid;\r\n+\s\s\s\sint\sztime;\r\n+\r\n+\s\s\s\sint\smin\s\s\s=\s60;\r\n+\s\s\s\sint\shour\s\s=\smin\s*\s60;\r\n+\s\s\s\sint\sday\s\s\s=\shour\s*\s24;\r\n+\s\s\s\sint\sweek\s\s=\sday\s*\s7;\r\n+\s\s\s\sint\smonth\s=\sweek\s*\s4;\r\n+\s\s\s\sint\syear\s\s=\smonth\s*\s12;\r\n+\r\n+\s\s\s\sdb_prepare(&q,\s"SELECT\sfnid\sFROM\sfilename\sWHERE\sname=:x");\r\n+\s\s\s\sdb_bind_text(&q,\s":x",\szFN);\r\n+\s\s\s\sdb_step(&q);\r\n+\r\n+\s\s\s\sfnid\s=\sdb_column_int(&q,\s0);\r\n+\s\s\s\sdb_finalize(&q);\r\n+\r\n+\s\s\s\sdb_prepare(&q,\s"SELECT\smax(mid)\sFROM\smlink\sWHERE\sfnid=:x");\r\n+\s\s\s\sdb_bind_int(&q,\s":x",\sfnid);\r\n+\s\s\s\sdb_step(&q);\r\n+\r\n+\s\s\s\smid\s=\sdb_column_int(&q,\s0);\r\n+\s\s\s\sdb_finalize(&q);\r\n+\r\n+\s\s\s\sdb_prepare(&q,\s"SELECT\s(julianday('now')\s-\sjulianday(mtime))\s*\s86400,\suser,\scomment\sFROM\sevent\sWHERE\sobjid=:x");\r\n+\s\s\s\sdb_bind_int(&q,\s":x",\smid);\r\n+\s\s\s\sdb_step(&q);\r\n+\r\n+\s\s\s\sztime\s\s\s\s\s\s\s=\sdb_column_int(&q,\s0);\r\n+\s\s\s\s(*zAuthor)\s\s=\sdb_column_text(&q,\s1);\r\n+\s\s\s\s(*zComment)\s=\sdb_column_text(&q,\s2);\r\n+\r\n+\s\s\s\sif\s(ztime\s==\s0){\r\n+\s\s\s\s\s\s\s\smtime[0]\s=\s0;\r\n+\s\s\s\s\s\s\s\sreturn;\r\n+\s\s\s\s}\r\n+\r\n+\s\s\s\sif\s(ztime\s-\syear\s>=\s0)\r\n+\s\s\s\s\s\s\s\ssprintf(*mtime,\s"%i\syears",\sztime/year);\r\n+\s\s\s\selse\sif\s(ztime\s-\smonth\s>=\s0)\r\n+\s\s\s\s\s\s\s\ssprintf(*mtime,\s"%i\smonths",\sztime/month);\r\n+\s\s\s\selse\sif\s(ztime\s-\sweek\s>=\s0)\r\n+\s\s\s\s\s\s\s\ssprintf(*mtime,\s"%i\sweeks",\sztime/week);\r\n+\s\s\s\selse\sif\s(ztime\s-\sday\s>=\s0)\r\n+\s\s\s\s\s\s\s\ssprintf(*mtime,\s"%i\sdays",\sztime/day);\r\n+\s\s\s\selse\sif\s(ztime\s-\shour\s>=\s0)\r\n+\s\s\s\s\s\s\s\ssprintf(*mtime,\s"%i\shours",\sztime/hour);\r\n+\s\s\s\selse\sif\s(ztime\s-\smin\s>=\s0)\r\n+\s\s\s\s\s\s\s\ssprintf(*mtime,\s"%i\sminutes",\sztime/min);\r\n+\s\s\s\selse\r\n+\s\s\s\s\s\s\s\ssprintf(*mtime,\s"%i\sseconds",\sztime);\r\n+}\r\n\s\r\n\s/*\r\n\s**\sWEBPAGE:\sdir\r\n\s**\r\n\s**\sQuery\sparameters:\r\n@@\s-105,13\s+161,10\s@@\r\n\s**\s\s\s\sci=LABEL\s\s\s\s\s\s\s\s\sShow\sonly\sfiles\sin\sthis\scheck-in.\s\sOptional.\r\n\s*/\r\n\svoid\spage_dir(void){\r\n\s\s\sconst\schar\s*zD\s=\sP("name");\r\n\s\s\sint\snD\s=\szD\s?\sstrlen(zD)+1\s:\s0;\r\n-\s\sint\smxLen;\r\n-\s\sint\snCol,\snRow;\r\n-\s\sint\scnt,\si;\r\n\s\s\schar\s*zPrefix;\r\n\s\s\sStmt\sq;\r\n\s\s\sconst\schar\s*zCI\s=\sP("ci");\r\n\s\s\sint\srid\s=\s0;\r\n\s\s\schar\s*zUuid\s=\s0;\r\n@@\s-235,40\s+288,41\s@@\r\n\s\s\s\s\sdb_multi_exec(\r\n\s\s\s\s\s\s\s"INSERT\sOR\sIGNORE\sINTO\slocalfiles"\r\n\s\s\s\s\s\s\s"\sSELECT\spathelement(name,0),\sNULL\sFROM\sfilename"\r\n\s\s\s\s\s);\r\n\s\s\s}\r\n-\r\n-\s\s/*\sGenerate\sa\smulti-column\stable\slisting\sthe\scontents\sof\szD[]\r\n-\s\s**\sdirectory.\r\n-\s\s*/\r\n-\s\smxLen\s=\sdb_int(12,\s"SELECT\smax(length(x))\sFROM\slocalfiles\s/*scan*/");\r\n-\s\scnt\s=\sdb_int(0,\s"SELECT\scount(*)\sFROM\slocalfiles\s/*scan*/");\r\n-\s\snCol\s=\s4;\r\n-\s\snRow\s=\s(cnt+nCol-1)/nCol;\r\n\s\s\sdb_prepare(&q,\s"SELECT\sx,\su\sFROM\slocalfiles\sORDER\sBY\sx\s/*scan*/");\r\n-\s\s@\s<table\sclass="browser"><tr><td\sclass="browser"><ul\sclass="browser">\r\n-\s\si\s=\s0;\r\n-\s\swhile(\sdb_step(&q)==SQLITE_ROW\s){\r\n-\s\s\s\sconst\schar\s*zFN;\r\n-\s\s\s\sif(\si==nRow\s){\r\n-\s\s\s\s\s\s@\s</ul></td><td\sclass="browser"><ul\sclass="browser">\r\n-\s\s\s\s\s\si\s=\s0;\r\n-\s\s\s\s}\r\n-\s\s\s\si++;\r\n-\s\s\s\szFN\s=\sdb_column_text(&q,\s0);\r\n-\s\s\s\sif(\szFN[0]=='/'\s){\r\n-\s\s\s\s\s\szFN++;\r\n-\s\s\s\s\s\s@\s<li><a\shref="%s(zSubdirLink)%T(zFN)">%h(zFN)/</a></li>\r\n-\s\s\s\s}else\sif(\szCI\s){\r\n-\s\s\s\s\s\sconst\schar\s*zUuid\s=\sdb_column_text(&q,\s1);\r\n-\s\s\s\s\s\s@\s<li><a\shref="%s(g.zBaseURL)/artifact?name=%s(zUuid)">%h(zFN)</a></li>\r\n-\s\s\s\s}else{\r\n-\s\s\s\s\s\s@\s<li><a\shref="%s(g.zBaseURL)/finfo?name=%T(zPrefix)%T(zFN)">%h(zFN)\r\n-\s\s\s\s\s\s@\s\s\s\s\s</a></li>\r\n-\s\s\s\s}\r\n+\s\s@\s<table\sclass="report\sbrowse"\sborder="1"><tr><th>File</th><th>Age</th><th>Author</th><th>Last\scomment</th></tr>\r\n+\r\n+\s\swhile\s(db_step(&q)\s==\sSQLITE_ROW)\s{\r\n+\s\s\sconst\schar\s*zFN;\r\n+\s\s\schar\s*zAuthor\s\s=\sNULL;\r\n+\s\s\schar\s*zComment\s=\sNULL;\r\n+\r\n+\s\s\szFN\s=\sdb_column_text(&q,\s0);\r\n+\s\s\schar\s*zFNPath\s\s=\smalloc(strlen(zPrefix)\s+\sstrlen(zFN)\s+\s2);\r\n+\s\s\schar\s*zMtime\s\s\s=\smalloc(32);\r\n+\r\n+\s\s\sstrcpy(zFNPath,\szPrefix);\r\n+\s\s\sstrcat(zFNPath,\szFN);\r\n+\r\n+\s\s\sget_filemeta(zFNPath,\s&zAuthor,\s&zComment,\s&zMtime);\r\n+\r\n+\s\s\sif\s(zFN[0]\s==\s'/')\s{\r\n+\s\s\s\s\s\s\szFN++;\r\n+\s\s\s\s\s\s\s@\s<tr><td><a\shref="%s(zSubdirLink)%T(zFN)">%h(zFN)/</a></td><td\snowrap>%s(zMtime)</td><td>%s(zAuthor)</td><td>%s(zComment)</td></tr>\r\n+\s\s\s}\r\n+\s\s\selse\sif\s(zCI)\s{\r\n+\s\s\s\s\s\s\sconst\schar\s*zUuid\s=\sdb_column_text(&q,\s1);\r\n+\s\s\s\s\s\s\s@\s<tr><td><a\shref="%s(g.zBaseURL)/artifact?name=%s(zUuid)">%h(zFN)</a></td><td\snowrap>%s(zMtime)</td><td>%s(zAuthor)</td><td>%s(zComment)</td></tr>\r\n+\s\s\s}\r\n+\s\s\selse\r\n+\s\s\s\s\s\s\s@\s<tr><td><a\shref="%s(g.zBaseURL)/finfo?name=%T(zPrefix)%T(zFN)">%h(zFN)</a></td><td\snowrap>%s(zMtime)</td><td>%s(zAuthor)</td><td>%s(zComment)</td></tr>\r\n+\r\n+\s\s\sfree(zFNPath);\r\n+\s\s\sfree(zMtime);\r\n\s\s\s}\r\n\s\s\sdb_finalize(&q);\r\n\s\s\smanifest_destroy(pM);\r\n-\s\s@\s</ul></td></tr></table>\r\n+\s\s@\s</table>\r\n\s\s\sstyle_footer();\r\n\s}\r\n</verbatim>\r\n\r\n\r\n\r\n<hr\s/><i>zachtodd\sadded\son\s2010-11-30\s14:47:12:</i><br\s/>\r\nNot\sthe\smost\swell\sformatted\spatch.\s\sAdding\sas\san\sattachment.
K f89470bc3d3477814b0c16ffee3e0a21d106b265
U drh
Z 8cd392ef48e9f08e7738ae428f04ce6d