Artifact Content
Not logged in

Artifact bf79c24f77b9fd997fc7250f2b26cabd2839e05a

Ticket change [bf79c24f77] - Ticket 7a27e10f1f Need a command to find states of files for entire tree/subdir for Editors and IDEs. status still Open with 1 other change by drh on 2009-12-17 14:54:34.

D 2009-12-17T14:54:34
J comment This\shas\sbeen\sdiscussed\sa\sfew\stimes\sin\sthe\smailing\slist.\s\sMy\sparticular\r\nrequirement\sis\sfor\sintegration\sinto\semacs-23.\s\s\sThe\svc-dired\smode\srequires\r\na\scommand\sto\srun\sto\sgive\sthe\sstatus\sfor\seach\sfile\sthat\sis\sregistered\r\nwith\sfossil.\s\s\sAt\spresent\s"fossil\sls"\sgives\syou\sa\slist\sof\sfiles\sand\stheir\r\nstate,\sbut\sit\sdoesn't\stell\syou\sif\sa\sfile\swill\schange\sif\syou\sdo\san\supdate.\r\nMy\susers\sare\sused\sto\shaving\semacs\stell\sthem\swhat\sall\swill\schange\sif\sthey\r\ndo\san\supdate.\r\n\r\nThe\schanges\sare\sto\s3\sfiles:\r\n\r\n1.\sfile.c:\sfile_tree_name\sdoes\snot\shandle\sa\strailing\s/\son\sroot\sdir.\r\n\r\n2.\sfinfo.c\s:\sadded\soptions\sto\scommand\sline\sfinfo:\r\n\s\s\s\s-l|--log\s(default),\s-b|--brief\s(only\sone\sline\sper\srevision)\s(optional)\r\n\s\s\s\s-s|--status:\s\sreport\scheckin\sversion\sfor\sfile.\r\n\s\s\s\s-p\s<revision>:\sprint\sa\sspecific\sversion\sto\sstdout\r\n\r\n3.\supdate.c\s:\sadded\stwo\sflags:\r\n\s\s\s\s-v|--verbose\s:\sprint\sstatus\seven\sfor\sunchanged\sfiles\r\n\s\s\s\s-n|--nochange\s:\sdon't\sdo\sremote-pull,\sand\sprint\schanges\srather\sthan\sapplying\sthem.\r\n\s\s\sI\sonly\sneed\sboth\sflags\stogether\sso\sthey\scan\sbe\smerged.\r\n\r\nI'll\sattach\sa\spatch\sto\sthis\sticket\soff\sthe\scurrent\stip.\r\n\r\n<hr><i>anonymous\sclaiming\sto\sbe\sVenkat\sadded\son\s2009-12-14\s20:48:03:</i><br>\r\nPatch\sis:\r\n<verbatim>\r\nvenkat:../head/fossil:37>\sfossil\sdiff\r\nIndex:\ssrc/file.c\r\n===================================================================\r\n---\ssrc/file.c\r\n+++\ssrc/file.c\r\n@@\s-391,23\s+391,26\s@@\r\n\s**\sfalse,\sthen\ssimply\sreturn\s0.\r\n\s**\r\n\s**\sThe\sroot\sof\sthe\stree\sis\sdefined\sby\sthe\sg.zLocalRoot\svariable.\r\n\s*/\r\n\sint\sfile_tree_name(const\schar\s*zOrigName,\sBlob\s*pOut,\sint\serrFatal){\r\n-\s\sint\sn;\r\n+\s\sint\sm,n;\r\n\s\s\sBlob\sfull;\r\n\s\s\sdb_must_be_within_tree();\r\n\s\s\sfile_canonical_name(zOrigName,\s&full);\r\n\s\s\sn\s=\sstrlen(g.zLocalRoot);\r\n-\s\sif(\sblob_size(&full)<=n\s||\smemcmp(g.zLocalRoot,\sblob_buffer(&full),\sn)\s){\r\n+\s\sm\s=\sblob_size(&full);\r\n+\s\sif(\sm<n-1\s||\smemcmp(g.zLocalRoot,\sblob_buffer(&full),\sn-1)\s){\r\n\s\s\s\s\sblob_reset(&full);\r\n\s\s\s\s\sif(\serrFatal\s){\r\n\s\s\s\s\s\s\sfossil_fatal("file\soutside\sof\scheckout\stree:\s%s",\szOrigName);\r\n\s\s\s\s\s}\r\n\s\s\s\s\sreturn\s0;\r\n\s\s\s}\r\n\s\s\sblob_zero(pOut);\r\n+\s\sif\s(m\s==\sn\s-\s1)\r\n+\s\s\s\s\s\sreturn\s1;\r\n\s\s\sblob_append(pOut,\sblob_buffer(&full)+n,\sblob_size(&full)-n);\r\n\s\s\sreturn\s1;\r\n\s}\r\n\s\r\n\s/*\r\n\r\nIndex:\ssrc/finfo.c\r\n===================================================================\r\n---\ssrc/finfo.c\r\n+++\ssrc/finfo.c\r\n@@\s-27,71\s+27,169\s@@\r\n\s#include\s"finfo.h"\r\n\s\r\n\s/*\r\n\s**\sCOMMAND:\sfinfo\r\n\s**\r\n-**\sUsage:\s%fossil\sfinfo\sFILENAME\r\n+**\sUsage:\s%fossil\sfinfo\s{?-l|--log?\s/\s-s|--status\s/\s--p|--print}\sREV?FILENAME\r\n+**\r\n+**\sPrint\sthe\scomplete\schange\shistory\sfor\sa\ssingle\sfile\sgoing\sbackwards\r\n+**\sin\stime.\s\sThe\sdefault\sis\s-l.\r\n+**\r\n+**\sFor\sthe\s-l|--log\soption:\sIf\s"-b|--brief"\sis\sspecified\sone\sline\sper\srevision\r\n+**\sis\sprinted,\sotherwise\sthe\sfull\scomment\sis\sprinted.\s\sThe\s"--limit\sN"\r\n+**\sand\s"--offset\sP"\soptions\slimits\sthe\soutput\sto\sthe\sfirst\sN\schanges\r\n+**\safter\sskipping\sP\schanges.\r\n\s**\r\n-**\sPrint\sthe\schange\shistory\sfor\sa\ssingle\sfile.\r\n+**\sIn\sthe\s-s\sform\sprints\sthe\sstatus\sas\s<status>\s<revision>.\s\sThis\sis\r\n+**\sa\squick\sstatus\sand\sdoes\snot\scheck\sfor\sup-to-date-ness\sof\sthe\sfile.\r\n\s**\r\n-**\sThe\s"--limit\sN"\sand\s"--offset\sP"\soptions\slimits\sthe\soutput\sto\sthe\sfirst\r\n-**\sN\schanges\safter\sskipping\sP\schanges.\r\n+**\sThe\s-p\sform,\sthere's\san\soptional\sflag\s"-r|--revision\sREVISION".\s\sThe\r\n+**\sspecified\sversion\s(or\sthe\slatest\schecked\sout\sversion)\sis\sprinted\sto\r\n+**\sstdout.\r\n+**\r\n\s*/\r\n+\r\n\svoid\sfinfo_cmd(void){\r\n-\s\sStmt\sq;\r\n-\s\sint\svid;\r\n-\s\sBlob\sdest;\r\n-\s\sconst\schar\s*zFilename;\r\n-\s\sconst\schar\s*zLimit;\r\n-\s\sconst\schar\s*zOffset;\r\n-\s\sint\siLimit,\siOffset;\r\n+\s\sint\svid;\r\n\s\r\n\s\s\sdb_must_be_within_tree();\r\n\s\s\svid\s=\sdb_lget_int("checkout",\s0);\r\n\s\s\sif(\svid==0\s){\r\n\s\s\s\s\sfossil_panic("no\scheckout\sto\sfinfo\sfiles\sin");\r\n\s\s\s}\r\n-\s\szLimit\s=\sfind_option("limit",0,1);\r\n-\s\siLimit\s=\szLimit\s?\satoi(zLimit)\s:\s-1;\r\n-\s\szOffset\s=\sfind_option("offset",0,1);\r\n-\s\siOffset\s=\szOffset\s?\satoi(zOffset)\s:\s0;\r\n-\s\sif\s(g.argc<3)\s{\r\n-\s\s\s\susage("FILENAME");\r\n-\s\s}\r\n-\s\sfile_tree_name(g.argv[2],\s&dest,\s1);\r\n-\s\szFilename\s=\sblob_str(&dest);\r\n-\s\sdb_prepare(&q,\r\n-\s\s\s\s"SELECT\sb.uuid,\sci.uuid,\sdate(event.mtime,'localtime'),"\r\n-\s\s\s\s"\s\s\s\s\s\s\scoalesce(event.ecomment,\sevent.comment),"\r\n-\s\s\s\s"\s\s\s\s\s\s\scoalesce(event.euser,\sevent.user)"\r\n-\s\s\s\s"\s\sFROM\smlink,\sblob\sb,\sevent,\sblob\sci"\r\n-\s\s\s\s"\sWHERE\smlink.fnid=(SELECT\sfnid\sFROM\sfilename\sWHERE\sname=%Q)"\r\n-\s\s\s\s"\s\s\sAND\sb.rid=mlink.fid"\r\n-\s\s\s\s"\s\s\sAND\sevent.objid=mlink.mid"\r\n-\s\s\s\s"\s\s\sAND\sevent.objid=ci.rid"\r\n-\s\s\s\s"\sORDER\sBY\sevent.mtime\sDESC\sLIMIT\s%d\sOFFSET\s%d",\r\n-\s\s\s\szFilename,\siLimit,\siOffset\r\n-\s\s);\r\n+\s\svfile_check_signature(vid);\r\n+\s\sif\s(find_option("status","s",0))\s{\r\n+\s\s\s\s\s\sStmt\sq;\r\n+\s\s\s\s\s\sBlob\sline;\r\n+\s\s\s\s\s\sBlob\sfname;\r\n+\r\n+\s\s\s\s\s\sif\s(g.argc\s!=\s3)\s{\r\n+\t\s\susage("-s|--status\sFILENAME");\r\n+\s\s\s\s\s\s}\r\n+\s\s\s\s\s\sfile_tree_name(g.argv[2],\s&fname,\s1);\r\n+\s\s\s\s\s\sdb_prepare(&q,\r\n+\t\t\s"SELECT\spathname,\sdeleted,\srid,\schnged,\scoalesce(origname!=pathname,0)"\r\n+\t\t\s"\s\sFROM\svfile\sWHERE\svfile.pathname=%B",\s&fname);\r\n+\s\s\s\s\s\sblob_zero(&line);\r\n+\s\s\s\s\s\sif\s(\sdb_step(&q)==SQLITE_ROW\s)\s{\r\n+\t\s\sBlob\suuid;\r\n+\t\s\sint\sisDeleted\s=\sdb_column_int(&q,\s1);\r\n+\t\s\sint\sisNew\s=\sdb_column_int(&q,2)\s==\s0;\r\n+\t\s\sint\schnged\s=\sdb_column_int(&q,3);\r\n+\t\s\sint\srenamed\s=\sdb_column_int(&q,4);\r\n+\r\n+\t\s\sblob_zero(&uuid);\r\n+\t\s\sdb_blob(&uuid,"SELECT\suuid\sFROM\sblob,\smlink,\svfile\sWHERE\s"\r\n+\t\t\s\s"blob.rid\s=\smlink.mid\sAND\smlink.fid\s=\svfile.rid\sAND\s"\r\n+\t\t\s\s"vfile.pathname=%B",&fname);\r\n+\t\s\sif\s(isNew)\s{\r\n+\t\s\s\s\s\s\sblob_appendf(&line,\s"new");\r\n+\t\s\s}\selse\sif\s(isDeleted)\s{\r\n+\t\s\s\s\s\s\sblob_appendf(&line,\s"deleted");\r\n+\t\s\s}\selse\sif\s(renamed)\s{\r\n+\t\s\s\s\s\s\sblob_appendf(&line,\s"renamed");\r\n+\t\s\s}\selse\sif\s(chnged)\s{\r\n+\t\s\s\s\s\s\sblob_appendf(&line,\s"edited");\r\n+\t\s\s}\selse\s{\r\n+\t\s\s\s\s\s\sblob_appendf(&line,\s"unchanged");\r\n+\t\s\s}\r\n+\t\s\sblob_appendf(&line,\s"\s");\r\n+\t\s\sblob_appendf(&line,\s"\s%10.10s",\sblob_str(&uuid));\r\n+\t\s\sblob_reset(&uuid);\r\n+\s\s\s\s\s\s}\selse\s{\r\n+\t\s\sblob_appendf(&line,\s"unknown\s0000000000");\r\n+\s\s\s\s\s\s}\r\n+\s\s\s\s\s\sdb_finalize(&q);\r\n+\s\s\s\s\s\sprintf("%s\\n",\sblob_str(&line));\r\n+\s\s\s\s\s\sblob_reset(&fname);\r\n+\s\s\s\s\s\sblob_reset(&line);\r\n+\s\s}\selse\sif\s(find_option("print","p",0))\s{\r\n+\s\s\s\s\s\sBlob\srecord;\r\n+\s\s\s\s\s\sBlob\sfname;\r\n+\s\s\s\s\s\sconst\schar\s*zRevision\s=\sfind_option("revision",\s"r",\s1);\r\n+\r\n+\s\s\s\s\s\sfile_tree_name(g.argv[2],\s&fname,\s1);\r\n+\s\s\s\s\s\sif\s(zRevision)\s{\r\n+\t\s\shistorical_version_of_file(zRevision,\sblob_str(&fname),\s&record);\r\n+\s\s\s\s\s\s}\selse\s{\r\n+\t\s\sint\srid\s=\sdb_int(0,\s"SELECT\srid\sFROM\svfile\sWHERE\spathname=%B",\s&fname);\r\n+\t\s\sif(\srid==0\s){\r\n+\t\s\s\s\s\s\sfossil_fatal("no\shistory\sfor\sfile:\s%b",\s&fname);\r\n+\t\s\s}\r\n+\t\s\scontent_get(rid,\s&record);\r\n+\s\s\s\s\s\s}\r\n+\s\s\s\s\s\sblob_write_to_file(&record,\s"-");\r\n+\s\s\s\s\s\sblob_reset(&record);\r\n+\s\s\s\s\s\sblob_reset(&fname);\r\n+\s\s}\selse\s{\r\n+\s\s\s\s\s\sBlob\sline;\r\n+\s\s\s\s\s\sStmt\sq;\r\n+\s\s\s\s\s\sBlob\sfname;\r\n+\s\s\s\s\s\sint\srid;\r\n+\s\s\s\s\s\sconst\schar\s*zFilename;\r\n+\s\s\s\s\s\sconst\schar\s*zLimit;\r\n+\s\s\s\s\s\sconst\schar\s*zOffset;\r\n+\s\s\s\s\s\sint\siLimit,\siOffset,\siBrief;\r\n\s\r\n-\s\sprintf("History\sof\s%s\\n",\szFilename);\r\n-\s\swhile(\sdb_step(&q)==SQLITE_ROW\s){\r\n-\s\s\s\sconst\schar\s*zFileUuid\s=\sdb_column_text(&q,\s0);\r\n-\s\s\s\sconst\schar\s*zCiUuid\s=\sdb_column_text(&q,\s1);\r\n-\s\s\s\sconst\schar\s*zDate\s=\sdb_column_text(&q,\s2);\r\n-\s\s\s\sconst\schar\s*zCom\s=\sdb_column_text(&q,\s3);\r\n-\s\s\s\sconst\schar\s*zUser\s=\sdb_column_text(&q,\s4);\r\n-\s\s\s\schar\s*zOut;\r\n-\s\s\s\sprintf("%s\s",\szDate);\r\n-\s\s\s\szOut\s=\ssqlite3_mprintf("[%.10s]\s%s\s(user:\s%s,\sartifact:\s[%.10s])",\r\n-\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\szCiUuid,\szCom,\szUser,\szFileUuid);\r\n-\s\s\s\scomment_print(zOut,\s11,\s79);\r\n-\s\s\s\ssqlite3_free(zOut);\r\n+\s\s\s\s\s\sif\s(find_option("log","l",0))\s{\s/*\sthis\sis\sthe\sdefault,\sno-op\s*/\r\n+\s\s\s\s\s\s}\r\n+\s\s\s\s\s\szLimit\s=\sfind_option("limit",0,1);\r\n+\s\s\s\s\s\siLimit\s=\szLimit\s?\satoi(zLimit)\s:\s-1;\r\n+\s\s\s\s\s\szOffset\s=\sfind_option("offset",0,1);\r\n+\s\s\s\s\s\siOffset\s=\szOffset\s?\satoi(zOffset)\s:\s0;\r\n+\s\s\s\s\s\siBrief\s=\s(find_option("brief","b",0)\s==\s0);\r\n+\s\s\s\s\s\sif\s(g.argc\s!=\s3)\s{\r\n+\t\s\susage("?-l|--log?\s?-b|--brief?\sFILENAME");\r\n+\s\s\s\s\s\s}\r\n+\s\s\s\s\s\sfile_tree_name(g.argv[2],\s&fname,\s1);\r\n+\s\s\s\s\s\srid\s=\sdb_int(0,\s"SELECT\srid\sFROM\svfile\sWHERE\spathname=%B",\s&fname);\r\n+\s\s\s\s\s\sif(\srid==0\s){\r\n+\t\s\sfossil_fatal("no\shistory\sfor\sfile:\s%b",\s&fname);\r\n+\s\s\s\s\s\s}\r\n+\s\s\s\s\s\szFilename\s=\sblob_str(&fname);\r\n+\s\s\s\s\s\sdb_prepare(&q,\r\n+\t\t\s"SELECT\sb.uuid,\sci.uuid,\sdate(event.mtime,'localtime'),"\r\n+\t\t\s"\s\s\s\s\s\s\scoalesce(event.ecomment,\sevent.comment),"\r\n+\t\t\s"\s\s\s\s\s\s\scoalesce(event.euser,\sevent.user)"\r\n+\t\t\s"\s\sFROM\smlink,\sblob\sb,\sevent,\sblob\sci"\r\n+\t\t\s"\sWHERE\smlink.fnid=(SELECT\sfnid\sFROM\sfilename\sWHERE\sname=%Q)"\r\n+\t\t\s"\s\s\sAND\sb.rid=mlink.fid"\r\n+\t\t\s"\s\s\sAND\sevent.objid=mlink.mid"\r\n+\t\t\s"\s\s\sAND\sevent.objid=ci.rid"\r\n+\t\t\s"\sORDER\sBY\sevent.mtime\sDESC\sLIMIT\s%d\sOFFSET\s%d",\r\n+\t\t\szFilename,\siLimit,\siOffset\r\n+\t\s\s);\r\n+\s\s\s\s\s\sblob_zero(&line);\r\n+\s\s\s\s\s\sif\s(iBrief)\s{\r\n+\t\s\sprintf("History\sof\s%s\\n",\sblob_str(&fname));\r\n+\s\s\s\s\s\s}\r\n+\s\s\s\s\s\swhile(\sdb_step(&q)==SQLITE_ROW\s){\r\n+\t\s\sconst\schar\s*zFileUuid\s=\sdb_column_text(&q,\s0);\r\n+\t\s\sconst\schar\s*zCiUuid\s=\sdb_column_text(&q,1);\r\n+\t\s\sconst\schar\s*zDate\s=\sdb_column_text(&q,\s2);\r\n+\t\s\sconst\schar\s*zCom\s=\sdb_column_text(&q,\s3);\r\n+\t\s\sconst\schar\s*zUser\s=\sdb_column_text(&q,\s4);\r\n+\t\s\schar\s*zOut;\r\n+\t\s\sif\s(iBrief)\s{\r\n+\t\s\s\s\s\s\sprintf("%s\s",\szDate);\r\n+\t\s\s\s\s\s\szOut\s=\ssqlite3_mprintf("[%.10s]\s%s\s(user:\s%s,\sartifact:\s[%.10s])",\r\n+\t\t\t\t\s\s\s\s\szCiUuid,\szCom,\szUser,\szFileUuid);\r\n+\t\s\s\s\s\s\scomment_print(zOut,\s11,\s79);\r\n+\t\s\s\s\s\s\ssqlite3_free(zOut);\r\n+\t\s\s}\selse\s{\r\n+\t\s\s\s\s\s\sblob_reset(&line);\r\n+\t\s\s\s\s\s\sblob_appendf(&line,\s"%.10s\s",\szCiUuid);\r\n+\t\s\s\s\s\s\sblob_appendf(&line,\s"%.10s\s",\szDate);\r\n+\t\s\s\s\s\s\sblob_appendf(&line,\s"%8.8s\s",\szUser);\r\n+\t\s\s\s\s\s\sblob_appendf(&line,"%-40.40s\\n",\szCom\s);\r\n+\t\s\s\s\s\s\scomment_print(blob_str(&line),\s0,\s79);\r\n+\t\s\s}\r\n+\s\s\s\s\s\s}\r\n+\s\s\s\s\s\sdb_finalize(&q);\r\n+\s\s\s\s\s\sblob_reset(&fname);\r\n\s\s\s}\r\n-\s\sdb_finalize(&q);\r\n-\s\sblob_reset(&dest);\r\n-}\r\n-\r\n+}\r\n\s\r\n\s/*\r\n\s**\sWEBPAGE:\sfinfo\r\n\s**\sURL:\s/finfo?name=FILENAME\r\n\s**\r\n\r\nIndex:\ssrc/update.c\r\n===================================================================\r\n---\ssrc/update.c\r\n+++\ssrc/update.c\r\n@@\s-46,21\s+46,40\s@@\r\n\s**\ssingle\sleaf.\s\sIf\sthere\sare\sa\smultiple\sleaves,\sthe\slatest\sis\sused\r\n\s**\sif\sthe\s--latest\sflag\sis\spresent.\r\n\s**\r\n\s**\sThis\scommand\sis\sdifferent\sfrom\sthe\s"checkout"\sin\sthat\sedits\sare\r\n\s**\snot\soverwritten.\s\sEdits\sare\smerged\sinto\sthe\snew\sversion.\r\n+**\r\n+**\sIf\sthe\s"-n|--nochange"\sflag\sis\sspecified,\sThere\sis\sno\sauto-sync-pull,\r\n+**\sand\sno\slocal\sfiles\sare\smodified.\s\sBut\sit\swill\sstill\sgo\sthrough\sthe\r\n+**\sfiles\sand\sprint\sthe\sstatus\sof\sfiles\sthat\sare\snot\sup-to-date.\r\n+**\r\n+**\sIf\sthe\s"-v|--verbose"\sflag\sis\sspecified,\sthen\sit\sprints\sthe\sstatus\r\n+**\sof\sthe\sunmodified\sand\sup-to-date\sfiles\sas\swell.\r\n+**\r\n\s*/\r\n\svoid\supdate_cmd(void){\r\n\s\s\sint\svid;\s\s\s\s\s\s\s\s\s\s\s\s\s\s/*\sCurrent\sversion\s*/\r\n\s\s\sint\stid=0;\s\s\s\s\s\s\s\s\s\s\s\s/*\sTarget\sversion\s-\sversion\swe\sare\schanging\sto\s*/\r\n\s\s\sStmt\sq;\r\n\s\s\sint\slatestFlag;\s\s\s\s\s\s\s/*\sPick\sthe\slatest\sversion\sif\strue\s*/\r\n\s\s\sint\sforceFlag;\s\s\s\s\s\s\s\s/*\sTrue\sforce\sthe\supdate\s*/\r\n+\s\sint\snochangeFlag;\t/*\sDo\snot\smodify\sany\sfiles\sother\sthan\srepository\s*/\r\n+\s\sint\sverboseFlag;\t/*\sPrint\sstates\sof\sall\sfiles\s*/\r\n+\s\sconst\schar\s*zFile;\s\s\s\s/*\sName\sof\sfile\sto\supdate\s*/\r\n+\s\sBlob\sfname;\r\n\s\r\n\s\s\surl_proxy_options();\r\n\s\s\slatestFlag\s=\sfind_option("latest",0,\s0)!=0;\r\n\s\s\sforceFlag\s=\sfind_option("force","f",0)!=0;\r\n+\s\snochangeFlag\s=\sfind_option("nochange","n",0)!=\s0;\r\n+\s\sverboseFlag\s=\sfind_option("verbose","v",0)!=\s0;\r\n+\s\szFile\s=\sfind_option("file",0,1);\r\n+\s\sif\s(zFile\s!=\s0)\s{\r\n+\s\s\s\s\s\sfile_tree_name(zFile,\s&fname,\s1);\r\n+\s\s}\r\n+\r\n\s\s\sif(\sg.argc!=3\s&&\sg.argc!=2\s){\r\n\s\s\s\s\susage("?VERSION?");\r\n\s\s\s}\r\n\s\s\sdb_must_be_within_tree();\r\n\s\s\svid\s=\sdb_lget_int("checkout",\s0);\r\n@@\s-78,11\s+97,20\s@@\r\n\s\s\s\s\s}\r\n\s\s\s\s\sif(\s!is_a_version(tid)\s){\r\n\s\s\s\s\s\s\sfossil_fatal("not\sa\sversion:\s%s",\sg.argv[2]);\r\n\s\s\s\s\s}\r\n\s\s\s}\r\n-\s\sautosync(AUTOSYNC_PULL);\r\n+\r\n+\s\sif(nochangeFlag\s==\s0){\r\n+\s\s\s\s/*\r\n+\s\s\s\s**\sDo\san\sautosync\spull\sprior\sto\sthe\supdate,\sif\sautosync\sis\son\sand\sthey\r\n+\s\s\s\s**\sdid\snot\swant\sa\sspecific\sversion\s(i.e.\sanother\sbranch,\sa\spast\srevision).\r\n+\s\s\s\s**\sBy\snot\sgiving\sa\sspecific\sversion,\sthey\sare\sasking\sfor\sthe\slatest,\sthus\r\n+\s\s\s\s**\spull\sto\sget\sthe\slatest,\sthen\supdate.\r\n+\s\s\s\s*/\r\n+\s\s\s\sautosync(AUTOSYNC_PULL);\r\n+\s\s}\r\n\s\r\n\s\s\sif(\stid==0\s){\r\n\s\s\s\s\scompute_leaves(vid,\s1);\r\n\s\s\s\s\sif(\s!latestFlag\s&&\sdb_int(0,\s"SELECT\scount(*)\sFROM\sleaves")>1\s){\r\n\s\s\s\s\s\s\sdb_prepare(&q,\r\n@@\s-98,13\s+126,16\s@@\r\n\s\s\s\s\stid\s=\sdb_int(0,\s"SELECT\srid\sFROM\sleaves,\sevent"\r\n\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s"\sWHERE\sevent.objid=leaves.rid"\r\n\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s"\sORDER\sBY\sevent.mtime\sDESC");\r\n\s\s\s}\r\n\s\r\n-\s\sdb_begin_transaction();\r\n+\s\sif\s(!nochangeFlag)\s{\r\n+\s\s\s\s\s\sdb_begin_transaction();\r\n+\s\s}\r\n\s\s\svfile_check_signature(vid);\r\n-\s\sundo_begin();\r\n+\s\sif\s(!nochangeFlag)\r\n+\s\s\s\s\s\sundo_begin();\r\n\s\s\sload_vfile_from_rid(tid);\r\n\s\r\n\s\s\s/*\r\n\s\s\s**\sThe\srecord.fn\sfield\sis\sused\sto\smatch\sfiles\sagainst\seach\sother.\s\sThe\r\n\s\s\s**\sFV\stable\scontains\sone\srow\sfor\seach\seach\sunique\sfilename\sin\r\n@@\s-151,10\s+182,21\s@@\r\n\s\s\s\s\s\s\sid,\srid,\schnged,\sfn\r\n\s\s\s\s\s);\r\n\s\s\s}\r\n\s\s\sdb_finalize(&q);\r\n\s\r\n+\s\sif\s(zFile\s!=\s0)\s{\r\n+\s\s\s\s\s\sif\s(file_isdir(zFile)\s==\s1)\s{\r\n+\t\s\sif\s(strlen(blob_str(&fname))\s>\s0)\s{\r\n+\t\s\s\s\s\s\sdb_multi_exec("DELETE\sFROM\sfv\sWHERE\sfn\sNOT\sGLOB\s'%q/*'",\r\n+\t\t\t\s\s\s\sblob_str(&fname));\r\n+\t\s\s}\r\n+\s\s\s\s\s\s}\selse\s{\r\n+\t\s\sdb_multi_exec("DELETE\sFROM\sfv\sWHERE\sfn\s<>\s'%q'",\sblob_str(&fname));\r\n+\s\s\s\s\s\s}\r\n+\s\s}\r\n+\r\n\s\s\sdb_prepare(&q,\r\n\s\s\s\s\s"SELECT\sfn,\sidv,\sridv,\sidt,\sridt,\schnged\sFROM\sfv\sORDER\sBY\s1"\r\n\s\s\s);\r\n\s\s\swhile(\sdb_step(&q)==SQLITE_ROW\s){\r\n\s\s\s\s\sconst\schar\s*zName\s=\sdb_column_text(&q,\s0);\r\n@@\s-170,70\s+212,94\s@@\r\n\s\s\s\s\s\s\s*/\r\n\s\s\s\s\s\s\sprintf("CONFLICT\s%s\\n",\szName);\r\n\s\s\s\s\s}else\sif(\sidt>0\s&&\sidv==0\s){\r\n\s\s\s\s\s\s\s/*\sFile\sadded\sin\sthe\starget.\s*/\r\n\s\s\s\s\s\s\sprintf("ADD\s%s\\n",\szName);\r\n-\s\s\s\s\s\sundo_save(zName);\r\n-\s\s\s\s\s\svfile_to_disk(0,\sidt,\s0);\r\n+\s\s\s\s\s\sif\s(!nochangeFlag)\s{\r\n+\t\s\sundo_save(zName);\r\n+\t\s\svfile_to_disk(0,\sidt,\s0);\r\n+\s\s\s\s\s\s}\r\n+\s\s\s\s}else\sif\s(\sidt>0\s&&\sidv>0\s&&\sridt\s==\sridv){\r\n+\s\s\s\s\s\s/*\sWe\shave\slatest\sversion\s*/\r\n+\tif\s(verboseFlag)\s{\r\n+\t\s\s\s\sif\s(chnged)\s{\r\n+\t\tprintf("EDITED\s%s\\n",\szName);\r\n+\t\s\s\s\s}\selse\s{\r\n+\t\tprintf("UNCHANGED\s%s\\n",\szName);\r\n+\t\s\s\s\s}\r\n+\t}\r\n\s\s\s\s\s}else\sif(\sidt>0\s&&\sidv>0\s&&\sridt!=ridv\s&&\schnged==0\s){\r\n\s\s\s\s\s\s\s/*\sThe\sfile\sis\sunedited.\s\sChange\sit\sto\sthe\starget\sversion\s*/\r\n\s\s\s\s\s\s\sprintf("UPDATE\s%s\\n",\szName);\r\n-\s\s\s\s\s\sundo_save(zName);\r\n-\s\s\s\s\s\svfile_to_disk(0,\sidt,\s0);\r\n+\s\s\s\s\s\sif\s(!nochangeFlag)\s{\r\n+\t\s\sundo_save(zName);\r\n+\t\s\svfile_to_disk(0,\sidt,\s0);\r\n+\s\s\s\s\s\s}\r\n\s\s\s\s\s}else\sif(\sidt==0\s&&\sidv>0\s){\r\n\s\s\s\s\s\s\sif(\sridv==0\s){\r\n\s\s\s\s\s\s\s\s\s/*\sAdded\sin\scurrent\scheckout.\s\sContinue\sto\shold\sthe\sfile\sas\r\n\s\s\s\s\s\s\s\s\s**\sas\san\saddition\s*/\r\n-\s\s\s\s\s\s\s\sdb_multi_exec("UPDATE\svfile\sSET\svid=%d\sWHERE\sid=%d",\stid,\sidv);\r\n+\tif\s(verboseFlag)\s{\r\n+\t\s\s\s\sprintf("ADDED\s%s\\n",\szName);\r\n+\t}\r\n+\tif\s(!nochangeFlag)\s{\r\n+\t\s\s\s\sdb_multi_exec("UPDATE\svfile\sSET\svid=%d\sWHERE\sid=%d",\stid,\sidv);\r\n+\t}\r\n\s\s\s\s\s\s\s}else\sif(\schnged\s){\r\n\s\s\s\s\s\s\s\s\sprintf("CONFLICT\s%s\\n",\szName);\r\n\s\s\s\s\s\s\s}else{\r\n\s\s\s\s\s\s\s\s\schar\s*zFullPath;\r\n\s\s\s\s\s\s\s\s\sprintf("REMOVE\s%s\\n",\szName);\r\n-\s\s\s\s\s\s\s\sundo_save(zName);\r\n-\s\s\s\s\s\s\s\szFullPath\s=\smprintf("%s/%s",\sg.zLocalRoot,\szName);\r\n-\s\s\s\s\s\s\s\sunlink(zFullPath);\r\n-\s\s\s\s\s\s\s\sfree(zFullPath);\r\n+\tif\s(!nochangeFlag)\s{\r\n+\t\s\s\s\sundo_save(zName);\r\n+\t\s\s\s\szFullPath\s=\smprintf("%s/%s",\sg.zLocalRoot,\szName);\r\n+\t\s\s\s\sunlink(zFullPath);\r\n+\t\s\s\s\sfree(zFullPath);\r\n+\t}\r\n\s\s\s\s\s\s\s}\r\n\s\s\s\s\s}else\sif(\sidt>0\s&&\sidv>0\s&&\sridt!=ridv\s&&\schnged\s){\r\n\s\s\s\s\s\s\s/*\sMerge\sthe\schanges\sin\sthe\scurrent\stree\sinto\sthe\starget\sversion\s*/\r\n-\s\s\s\s\s\sBlob\se,\sr,\st,\sv;\r\n-\s\s\s\s\s\sint\src;\r\n-\s\s\s\s\s\schar\s*zFullPath;\r\n\s\s\s\s\s\s\sprintf("MERGE\s%s\\n",\szName);\r\n-\s\s\s\s\s\sundo_save(zName);\r\n-\s\s\s\s\s\szFullPath\s=\smprintf("%s/%s",\sg.zLocalRoot,\szName);\r\n-\s\s\s\s\s\scontent_get(ridt,\s&t);\r\n-\s\s\s\s\s\scontent_get(ridv,\s&v);\r\n-\s\s\s\s\s\sblob_zero(&e);\r\n-\s\s\s\s\s\sblob_read_from_file(&e,\szFullPath);\r\n-\s\s\s\s\s\src\s=\sblob_merge(&v,\s&e,\s&t,\s&r);\r\n-\s\s\s\s\s\sif(\src>=0\s){\r\n-\s\s\s\s\s\s\s\sblob_write_to_file(&r,\szFullPath);\r\n-\s\s\s\s\s\s\s\sif(\src>0\s){\r\n-\s\s\s\s\s\s\s\s\s\sprintf("*****\s%d\smerge\sconflicts\sin\s%s\\n",\src,\szName);\r\n-\s\s\s\s\s\s\s\s}\r\n-\s\s\s\s\s\s}else{\r\n-\s\s\s\s\s\s\s\sprintf("*****\sCannot\smerge\sbinary\sfile\s%s\\n",\szName);\r\n-\s\s\s\s\s\s}\r\n-\s\s\s\s\s\sfree(zFullPath);\r\n-\s\s\s\s\s\sblob_reset(&v);\r\n-\s\s\s\s\s\sblob_reset(&e);\r\n-\s\s\s\s\s\sblob_reset(&t);\r\n-\s\s\s\s\s\sblob_reset(&r);\r\n-\r\n+\s\s\s\s\s\sif\s(!nochangeFlag)\s{\r\n+\t\s\sBlob\se,\sr,\st,\sv;\r\n+\t\s\sint\src;\r\n+\t\s\schar\s*zFullPath;\r\n+\r\n+\t\s\sundo_save(zName);\r\n+\t\s\szFullPath\s=\smprintf("%s/%s",\sg.zLocalRoot,\szName);\r\n+\t\s\scontent_get(ridt,\s&t);\r\n+\t\s\scontent_get(ridv,\s&v);\r\n+\t\s\sblob_zero(&e);\r\n+\t\s\sblob_read_from_file(&e,\szFullPath);\r\n+\t\s\src\s=\sblob_merge(&v,\s&e,\s&t,\s&r);\r\n+\t\s\sif(\src>=0\s){\r\n+\t\s\s\s\s\s\sblob_write_to_file(&r,\szFullPath);\r\n+\t\s\s\s\s\s\sif(\src>0\s){\r\n+\t\t\s\sprintf("*****\s%d\smerge\sconflicts\sin\s%s\\n",\src,\szName);\r\n+\t\s\s\s\s\s\s}\r\n+\t\s\s}else{\r\n+\t\s\s\s\s\s\sprintf("*****\sCannot\smerge\sbinary\sfile\s%s\\n",\szName);\r\n+\t\s\s}\r\n+\t\s\sfree(zFullPath);\r\n+\t\s\sblob_reset(&v);\r\n+\t\s\sblob_reset(&e);\r\n+\t\s\sblob_reset(&t);\r\n+\t\s\sblob_reset(&r);\r\n+\s\s\s\s\s\s}\r\n\s\s\s\s\s}\r\n\s\s\s}\r\n\s\s\sdb_finalize(&q);\r\n\s\r\n\s\s\s/*\r\n\s\s\s**\sClean\sup\sthe\smid\sand\spid\sVFILE\sentries.\s\sThen\scommit\sthe\schanges.\r\n\s\s\s*/\r\n-\s\sdb_multi_exec("DELETE\sFROM\svfile\sWHERE\svid!=%d",\stid);\r\n-\s\smanifest_to_disk(tid);\r\n-\s\sdb_lset_int("checkout",\stid);\r\n-\s\sdb_end_transaction(0);\r\n+\s\sif\s(!nochangeFlag)\s{\r\n+\s\s\s\s\s\sdb_multi_exec("DELETE\sFROM\svfile\sWHERE\svid!=%d",\stid);\r\n+\s\s\s\s\s\smanifest_to_disk(tid);\r\n+\s\s\s\s\s\sdb_lset_int("checkout",\stid);\r\n+\s\s\s\s\s\sdb_end_transaction(0);\r\n+\s\s}\r\n\s}\r\n\s\r\n\s\r\n\s/*\r\n\s**\sGet\sthe\scontents\sof\sa\sfile\swithin\sa\sgiven\srevision.\r\n</verbatim>
K 7a27e10f1fe932d696f1c1b033aae8458c32e203
U drh
Z ccd7c01b7344a149de32e7d5dcd6668c