Fossil

Hex Artifact Content
Login

Artifact 073b324327d22aae32023f6337c1393a15621683ef5e2920e30a6982237c0372:


0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 32 30 30 37 20 44 2e 20 52 69 63 68  (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54  ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20  te it and/or.** 
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20  modify it under 
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
0090: 20 53 69 6d 70 6c 69 66 69 65 64 20 42 53 44 20   Simplified BSD 
00a0: 4c 69 63 65 6e 73 65 20 28 61 6c 73 6f 0a 2a 2a  License (also.**
00b0: 20 6b 6e 6f 77 6e 20 61 73 20 74 68 65 20 22 32   known as the "2
00c0: 2d 43 6c 61 75 73 65 20 4c 69 63 65 6e 73 65 22  -Clause License"
00d0: 20 6f 72 20 22 46 72 65 65 42 53 44 20 4c 69 63   or "FreeBSD Lic
00e0: 65 6e 73 65 22 2e 29 0a 0a 2a 2a 20 54 68 69 73  ense".)..** This
00f0: 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74   program is dist
0100: 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  ributed in the h
0110: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c  ope that it will
0120: 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 62   be useful,.** b
0130: 75 74 20 77 69 74 68 6f 75 74 20 61 6e 79 20 77  ut without any w
0140: 61 72 72 61 6e 74 79 3b 20 77 69 74 68 6f 75 74  arranty; without
0150: 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65   even the implie
0160: 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a 2a  d warranty of.**
0170: 20 6d 65 72 63 68 61 6e 74 61 62 69 6c 69 74 79   merchantability
0180: 20 6f 72 20 66 69 74 6e 65 73 73 20 66 6f 72 20   or fitness for 
0190: 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 75 72  a particular pur
01a0: 70 6f 73 65 2e 0a 2a 2a 0a 2a 2a 20 41 75 74 68  pose..**.** Auth
01b0: 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e 66 6f 72  or contact infor
01c0: 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 64 72 68  mation:.**   drh
01d0: 40 68 77 61 63 69 2e 63 6f 6d 0a 2a 2a 20 20 20  @hwaci.com.**   
01e0: 68 74 74 70 3a 2f 2f 77 77 77 2e 68 77 61 63 69  http://www.hwaci
01f0: 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a  .com/drh/.**.***
0200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a  ************.**.
0250: 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e  ** This file con
0260: 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65 64 20  tains code used 
0270: 74 6f 20 6d 65 72 67 65 20 74 68 65 20 63 68 61  to merge the cha
0280: 6e 67 65 73 20 69 6e 20 74 68 65 20 63 75 72 72  nges in the curr
0290: 65 6e 74 0a 2a 2a 20 63 68 65 63 6b 6f 75 74 20  ent.** checkout 
02a0: 69 6e 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74  into a different
02b0: 20 76 65 72 73 69 6f 6e 20 61 6e 64 20 73 77 69   version and swi
02c0: 74 63 68 20 74 6f 20 74 68 61 74 20 76 65 72 73  tch to that vers
02d0: 69 6f 6e 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ion..*/.#include
02e0: 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e 63   "config.h".#inc
02f0: 6c 75 64 65 20 22 75 70 64 61 74 65 2e 68 22 0a  lude "update.h".
0300: 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74  #include <assert
0310: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  .h>../*.** Retur
0320: 6e 20 74 72 75 65 20 69 66 20 61 72 74 69 66 61  n true if artifa
0330: 63 74 20 72 69 64 20 69 73 20 61 20 76 65 72 73  ct rid is a vers
0340: 69 6f 6e 0a 2a 2f 0a 69 6e 74 20 69 73 5f 61 5f  ion.*/.int is_a_
0350: 76 65 72 73 69 6f 6e 28 69 6e 74 20 72 69 64 29  version(int rid)
0360: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 5f 65 78  {.  return db_ex
0370: 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46  ists("SELECT 1 F
0380: 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 45 20  ROM event WHERE 
0390: 6f 62 6a 69 64 3d 25 64 20 41 4e 44 20 74 79 70  objid=%d AND typ
03a0: 65 3d 27 63 69 27 22 2c 20 72 69 64 29 3b 0a 7d  e='ci'", rid);.}
03b0: 0a 0a 2f 2a 20 54 68 69 73 20 76 61 72 69 61 62  ../* This variab
03c0: 6c 65 20 69 73 20 73 65 74 20 69 66 20 77 65 20  le is set if we 
03d0: 61 72 65 20 64 6f 69 6e 67 20 61 6e 20 69 6e 74  are doing an int
03e0: 65 72 6e 61 6c 20 75 70 64 61 74 65 2e 20 20 49  ernal update.  I
03f0: 74 20 69 73 20 63 6c 65 61 72 0a 2a 2a 20 77 68  t is clear.** wh
0400: 65 6e 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 22  en running the "
0410: 75 70 64 61 74 65 22 20 63 6f 6d 6d 61 6e 64 2e  update" command.
0420: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69  .*/.static int i
0430: 6e 74 65 72 6e 61 6c 55 70 64 61 74 65 20 3d 20  nternalUpdate = 
0440: 30 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e  0;.static int in
0450: 74 65 72 6e 61 6c 43 6f 6e 66 6c 69 63 74 43 6e  ternalConflictCn
0460: 74 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 44 6f  t = 0;../*.** Do
0470: 20 61 6e 20 75 70 64 61 74 65 20 74 6f 20 76 65   an update to ve
0480: 72 73 69 6f 6e 20 76 69 64 2e 0a 2a 2a 0a 2a 2a  rsion vid..**.**
0490: 20 53 74 61 72 74 20 61 6e 20 75 6e 64 6f 20 73   Start an undo s
04a0: 65 73 73 69 6f 6e 20 62 75 74 20 64 6f 20 6e 6f  ession but do no
04b0: 74 20 74 65 72 6d 69 6e 61 74 65 20 69 74 2e 20  t terminate it. 
04c0: 20 44 6f 20 6e 6f 74 20 61 75 74 6f 73 79 6e 63   Do not autosync
04d0: 2e 0a 2a 2f 0a 69 6e 74 20 75 70 64 61 74 65 5f  ..*/.int update_
04e0: 74 6f 28 69 6e 74 20 76 69 64 29 7b 0a 20 20 69  to(int vid){.  i
04f0: 6e 74 20 73 61 76 65 64 41 72 67 63 3b 0a 20 20  nt savedArgc;.  
0500: 63 68 61 72 20 2a 2a 73 61 76 65 64 41 72 67 76  char **savedArgv
0510: 3b 0a 20 20 63 68 61 72 20 2a 6e 65 77 41 72 67  ;.  char *newArg
0520: 76 5b 33 5d 3b 0a 20 20 6e 65 77 41 72 67 76 5b  v[3];.  newArgv[
0530: 30 5d 20 3d 20 67 2e 61 72 67 76 5b 30 5d 3b 0a  0] = g.argv[0];.
0540: 20 20 6e 65 77 41 72 67 76 5b 31 5d 20 3d 20 22    newArgv[1] = "
0550: 75 70 64 61 74 65 22 3b 0a 20 20 6e 65 77 41 72  update";.  newAr
0560: 67 76 5b 32 5d 20 3d 20 30 3b 0a 20 20 73 61 76  gv[2] = 0;.  sav
0570: 65 64 41 72 67 76 20 3d 20 67 2e 61 72 67 76 3b  edArgv = g.argv;
0580: 0a 20 20 73 61 76 65 64 41 72 67 63 20 3d 20 67  .  savedArgc = g
0590: 2e 61 72 67 63 3b 0a 20 20 67 2e 61 72 67 63 20  .argc;.  g.argc 
05a0: 3d 20 32 3b 0a 20 20 67 2e 61 72 67 76 20 3d 20  = 2;.  g.argv = 
05b0: 6e 65 77 41 72 67 76 3b 0a 20 20 69 6e 74 65 72  newArgv;.  inter
05c0: 6e 61 6c 55 70 64 61 74 65 20 3d 20 76 69 64 3b  nalUpdate = vid;
05d0: 0a 20 20 69 6e 74 65 72 6e 61 6c 43 6f 6e 66 6c  .  internalConfl
05e0: 69 63 74 43 6e 74 20 3d 20 30 3b 0a 20 20 75 70  ictCnt = 0;.  up
05f0: 64 61 74 65 5f 63 6d 64 28 29 3b 0a 20 20 67 2e  date_cmd();.  g.
0600: 61 72 67 63 20 3d 20 73 61 76 65 64 41 72 67 63  argc = savedArgc
0610: 3b 0a 20 20 67 2e 61 72 67 76 20 3d 20 73 61 76  ;.  g.argv = sav
0620: 65 64 41 72 67 76 3b 0a 20 20 72 65 74 75 72 6e  edArgv;.  return
0630: 20 69 6e 74 65 72 6e 61 6c 43 6f 6e 66 6c 69 63   internalConflic
0640: 74 43 6e 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  tCnt;.}../*.** C
0650: 4f 4d 4d 41 4e 44 3a 20 75 70 64 61 74 65 0a 2a  OMMAND: update.*
0660: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66 6f 73  *.** Usage: %fos
0670: 73 69 6c 20 75 70 64 61 74 65 20 3f 4f 50 54 49  sil update ?OPTI
0680: 4f 4e 53 3f 20 3f 56 45 52 53 49 4f 4e 3f 20 3f  ONS? ?VERSION? ?
0690: 46 49 4c 45 53 2e 2e 2e 3f 0a 2a 2a 0a 2a 2a 20  FILES...?.**.** 
06a0: 43 68 61 6e 67 65 20 74 68 65 20 76 65 72 73 69  Change the versi
06b0: 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  on of the curren
06c0: 74 20 63 68 65 63 6b 6f 75 74 20 74 6f 20 56 45  t checkout to VE
06d0: 52 53 49 4f 4e 2e 20 20 41 6e 79 0a 2a 2a 20 75  RSION.  Any.** u
06e0: 6e 63 6f 6d 6d 69 74 74 65 64 20 63 68 61 6e 67  ncommitted chang
06f0: 65 73 20 61 72 65 20 72 65 74 61 69 6e 65 64 20  es are retained 
0700: 61 6e 64 20 61 70 70 6c 69 65 64 20 74 6f 20 74  and applied to t
0710: 68 65 20 6e 65 77 20 63 68 65 63 6b 6f 75 74 2e  he new checkout.
0720: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 56 45 52 53 49  .**.** The VERSI
0730: 4f 4e 20 61 72 67 75 6d 65 6e 74 20 63 61 6e 20  ON argument can 
0740: 62 65 20 61 20 73 70 65 63 69 66 69 63 20 76 65  be a specific ve
0750: 72 73 69 6f 6e 20 6f 72 20 74 61 67 20 6f 72 20  rsion or tag or 
0760: 62 72 61 6e 63 68 0a 2a 2a 20 6e 61 6d 65 2e 20  branch.** name. 
0770: 20 49 66 20 74 68 65 20 56 45 52 53 49 4f 4e 20   If the VERSION 
0780: 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
0790: 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6c 65  ted, then the le
07a0: 61 66 20 6f 66 20 74 68 65 0a 2a 2a 20 73 75 62  af of the.** sub
07b0: 74 72 65 65 20 74 68 61 74 20 62 65 67 69 6e 73  tree that begins
07c0: 20 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20   at the current 
07d0: 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 2c  version is used,
07e0: 20 69 66 20 74 68 65 72 65 20 69 73 0a 2a 2a 20   if there is.** 
07f0: 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 6c 65  only a single le
0800: 61 66 2e 20 20 56 45 52 53 49 4f 4e 20 63 61 6e  af.  VERSION can
0810: 20 61 6c 73 6f 20 62 65 20 22 63 75 72 72 65 6e   also be "curren
0820: 74 22 20 74 6f 20 73 65 6c 65 63 74 20 74 68 65  t" to select the
0830: 0a 2a 2a 20 6c 65 61 66 20 6f 66 20 74 68 65 20  .** leaf of the 
0840: 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 20  current version 
0850: 6f 72 20 22 6c 61 74 65 73 74 22 20 74 6f 20 73  or "latest" to s
0860: 65 6c 65 63 74 20 74 68 65 20 6d 6f 73 74 20 72  elect the most r
0870: 65 63 65 6e 74 0a 2a 2a 20 63 68 65 63 6b 2d 69  ecent.** check-i
0880: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6f 6e 65 20  n..**.** If one 
0890: 6f 72 20 6d 6f 72 65 20 46 49 4c 45 53 20 61 72  or more FILES ar
08a0: 65 20 6c 69 73 74 65 64 20 61 66 74 65 72 20 74  e listed after t
08b0: 68 65 20 56 45 52 53 49 4f 4e 20 74 68 65 6e 20  he VERSION then 
08c0: 6f 6e 6c 79 20 74 68 65 0a 2a 2a 20 6e 61 6d 65  only the.** name
08d0: 64 20 66 69 6c 65 73 20 61 72 65 20 63 61 6e 64  d files are cand
08e0: 69 64 61 74 65 73 20 74 6f 20 62 65 20 75 70 64  idates to be upd
08f0: 61 74 65 64 2c 20 61 6e 64 20 61 6e 79 20 75 70  ated, and any up
0900: 64 61 74 65 73 20 74 6f 20 74 68 65 6d 0a 2a 2a  dates to them.**
0910: 20 77 69 6c 6c 20 62 65 20 74 72 65 61 74 65 64   will be treated
0920: 20 61 73 20 65 64 69 74 73 20 74 6f 20 74 68 65   as edits to the
0930: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
0940: 2e 20 55 73 69 6e 67 20 61 20 64 69 72 65 63 74  . Using a direct
0950: 6f 72 79 0a 2a 2a 20 6e 61 6d 65 20 66 6f 72 20  ory.** name for 
0960: 6f 6e 65 20 6f 66 20 74 68 65 20 46 49 4c 45 53  one of the FILES
0970: 20 61 72 67 75 6d 65 6e 74 73 20 69 73 20 74 68   arguments is th
0980: 65 20 73 61 6d 65 20 61 73 20 75 73 69 6e 67 20  e same as using 
0990: 65 76 65 72 79 0a 2a 2a 20 73 75 62 64 69 72 65  every.** subdire
09a0: 63 74 6f 72 79 20 61 6e 64 20 66 69 6c 65 20 62  ctory and file b
09b0: 65 6e 65 61 74 68 20 74 68 61 74 20 64 69 72 65  eneath that dire
09c0: 63 74 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ctory..**.** If 
09d0: 46 49 4c 45 53 20 69 73 20 6f 6d 69 74 74 65 64  FILES is omitted
09e0: 2c 20 61 6c 6c 20 66 69 6c 65 73 20 69 6e 20 74  , all files in t
09f0: 68 65 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b  he current check
0a00: 6f 75 74 20 61 72 65 20 73 75 62 6a 65 63 74 0a  out are subject.
0a10: 2a 2a 20 74 6f 20 62 65 69 6e 67 20 75 70 64 61  ** to being upda
0a20: 74 65 64 20 61 6e 64 20 74 68 65 20 76 65 72 73  ted and the vers
0a30: 69 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65  ion of the curre
0a40: 6e 74 20 63 68 65 63 6b 6f 75 74 20 69 73 20 63  nt checkout is c
0a50: 68 61 6e 67 65 64 0a 2a 2a 20 74 6f 20 56 45 52  hanged.** to VER
0a60: 53 49 4f 4e 2e 20 41 6e 79 20 75 6e 63 6f 6d 6d  SION. Any uncomm
0a70: 69 74 74 65 64 20 63 68 61 6e 67 65 73 20 61 72  itted changes ar
0a80: 65 20 72 65 74 61 69 6e 65 64 20 61 6e 64 20 61  e retained and a
0a90: 70 70 6c 69 65 64 20 74 6f 20 74 68 65 0a 2a 2a  pplied to the.**
0aa0: 20 6e 65 77 20 63 68 65 63 6b 6f 75 74 2e 0a 2a   new checkout..*
0ab0: 2a 0a 2a 2a 20 54 68 65 20 2d 6e 20 6f 72 20 2d  *.** The -n or -
0ac0: 2d 64 72 79 2d 72 75 6e 20 6f 70 74 69 6f 6e 20  -dry-run option 
0ad0: 63 61 75 73 65 73 20 74 68 69 73 20 63 6f 6d 6d  causes this comm
0ae0: 61 6e 64 20 74 6f 20 64 6f 20 61 20 22 64 72 79  and to do a "dry
0af0: 20 72 75 6e 22 2e 0a 2a 2a 20 49 74 20 70 72 69   run"..** It pri
0b00: 6e 74 73 20 6f 75 74 20 77 68 61 74 20 77 6f 75  nts out what wou
0b10: 6c 64 20 68 61 76 65 20 68 61 70 70 65 6e 65 64  ld have happened
0b20: 20 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 61 63   but does not ac
0b30: 74 75 61 6c 6c 79 20 6d 61 6b 65 0a 2a 2a 20 61  tually make.** a
0b40: 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ny changes to th
0b50: 65 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b 6f  e current checko
0b60: 75 74 20 6f 72 20 74 68 65 20 72 65 70 6f 73 69  ut or the reposi
0b70: 74 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tory..**.** The 
0b80: 2d 76 20 6f 72 20 2d 2d 76 65 72 62 6f 73 65 20  -v or --verbose 
0b90: 6f 70 74 69 6f 6e 20 70 72 69 6e 74 73 20 73 74  option prints st
0ba0: 61 74 75 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  atus information
0bb0: 20 61 62 6f 75 74 0a 2a 2a 20 75 6e 63 68 61 6e   about.** unchan
0bc0: 67 65 64 20 66 69 6c 65 73 20 69 6e 20 61 64 64  ged files in add
0bd0: 69 74 69 6f 6e 20 74 6f 20 74 68 6f 73 65 20 66  ition to those f
0be0: 69 6c 65 20 74 68 61 74 20 61 63 74 75 61 6c 6c  ile that actuall
0bf0: 79 20 64 6f 20 63 68 61 6e 67 65 2e 0a 2a 2a 0a  y do change..**.
0c00: 2a 2a 20 4f 70 74 69 6f 6e 73 3a 0a 2a 2a 20 20  ** Options:.**  
0c10: 20 2d 2d 63 61 73 65 2d 73 65 6e 73 69 74 69 76   --case-sensitiv
0c20: 65 20 3c 42 4f 4f 4c 3e 20 6f 76 65 72 72 69 64  e <BOOL> overrid
0c30: 65 20 63 61 73 65 2d 73 65 6e 73 69 74 69 76 65  e case-sensitive
0c40: 20 73 65 74 74 69 6e 67 0a 2a 2a 20 20 20 2d 2d   setting.**   --
0c50: 64 65 62 75 67 20 20 20 20 20 20 20 20 20 20 70  debug          p
0c60: 72 69 6e 74 20 64 65 62 75 67 20 69 6e 66 6f 72  rint debug infor
0c70: 6d 61 74 69 6f 6e 20 6f 6e 20 73 74 64 6f 75 74  mation on stdout
0c80: 0a 2a 2a 20 20 20 2d 2d 6c 61 74 65 73 74 20 20  .**   --latest  
0c90: 20 20 20 20 20 20 20 61 63 63 65 70 74 61 62 6c         acceptabl
0ca0: 65 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 56 45  e in place of VE
0cb0: 52 53 49 4f 4e 2c 20 75 70 64 61 74 65 20 74 6f  RSION, update to
0cc0: 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e 0a   latest version.
0cd0: 2a 2a 20 20 20 2d 2d 66 6f 72 63 65 2d 6d 69 73  **   --force-mis
0ce0: 73 69 6e 67 20 20 66 6f 72 63 65 20 75 70 64 61  sing  force upda
0cf0: 74 65 20 69 66 20 6d 69 73 73 69 6e 67 20 63 6f  te if missing co
0d00: 6e 74 65 6e 74 20 61 66 74 65 72 20 73 79 6e 63  ntent after sync
0d10: 0a 2a 2a 20 20 20 2d 6e 7c 2d 2d 64 72 79 2d 72  .**   -n|--dry-r
0d20: 75 6e 20 20 20 20 20 49 66 20 67 69 76 65 6e 2c  un     If given,
0d30: 20 64 69 73 70 6c 61 79 20 69 6e 73 74 65 61 64   display instead
0d40: 20 6f 66 20 72 75 6e 20 61 63 74 69 6f 6e 73 0a   of run actions.
0d50: 2a 2a 20 20 20 2d 76 7c 2d 2d 76 65 72 62 6f 73  **   -v|--verbos
0d60: 65 20 20 20 20 20 70 72 69 6e 74 20 73 74 61 74  e     print stat
0d70: 75 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  us information a
0d80: 62 6f 75 74 20 61 6c 6c 20 66 69 6c 65 73 0a 2a  bout all files.*
0d90: 2a 20 20 20 2d 57 7c 2d 2d 77 69 64 74 68 20 3c  *   -W|--width <
0da0: 6e 75 6d 3e 20 57 69 64 74 68 20 6f 66 20 6c 69  num> Width of li
0db0: 6e 65 73 20 28 64 65 66 61 75 6c 74 20 69 73 20  nes (default is 
0dc0: 74 6f 20 61 75 74 6f 2d 64 65 74 65 63 74 29 2e  to auto-detect).
0dd0: 20 4d 75 73 74 20 62 65 20 3e 32 30 0a 2a 2a 20   Must be >20.** 
0de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0df0: 20 20 20 6f 72 20 30 20 28 3d 20 6e 6f 20 6c 69     or 0 (= no li
0e00: 6d 69 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  mit, resulting i
0e10: 6e 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20  n a single line 
0e20: 70 65 72 20 65 6e 74 72 79 29 2e 0a 2a 2a 0a 2a  per entry)..**.*
0e30: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 72 65 76 65  * See also: reve
0e40: 72 74 0a 2a 2f 0a 76 6f 69 64 20 75 70 64 61 74  rt.*/.void updat
0e50: 65 5f 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20 69  e_cmd(void){.  i
0e60: 6e 74 20 76 69 64 3b 20 20 20 20 20 20 20 20 20  nt vid;         
0e70: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
0e80: 76 65 72 73 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  version */.  int
0e90: 20 74 69 64 3d 30 3b 20 20 20 20 20 20 20 20 20   tid=0;         
0ea0: 20 20 20 2f 2a 20 54 61 72 67 65 74 20 76 65 72     /* Target ver
0eb0: 73 69 6f 6e 20 2d 20 76 65 72 73 69 6f 6e 20 77  sion - version w
0ec0: 65 20 61 72 65 20 63 68 61 6e 67 69 6e 67 20 74  e are changing t
0ed0: 6f 20 2a 2f 0a 20 20 53 74 6d 74 20 71 3b 0a 20  o */.  Stmt q;. 
0ee0: 20 69 6e 74 20 6c 61 74 65 73 74 46 6c 61 67 3b   int latestFlag;
0ef0: 20 20 20 20 20 20 20 2f 2a 20 2d 2d 6c 61 74 65         /* --late
0f00: 73 74 2e 20 20 50 69 63 6b 20 74 68 65 20 6c 61  st.  Pick the la
0f10: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 69 66 20  test version if 
0f20: 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20 64 72  true */.  int dr
0f30: 79 52 75 6e 46 6c 61 67 3b 20 20 20 20 20 20 20  yRunFlag;       
0f40: 2f 2a 20 2d 6e 20 6f 72 20 2d 2d 64 72 79 2d 72  /* -n or --dry-r
0f50: 75 6e 2e 20 20 44 6f 20 61 20 64 72 79 20 72 75  un.  Do a dry ru
0f60: 6e 20 2a 2f 0a 20 20 69 6e 74 20 76 65 72 62 6f  n */.  int verbo
0f70: 73 65 46 6c 61 67 3b 20 20 20 20 20 20 2f 2a 20  seFlag;      /* 
0f80: 2d 76 20 6f 72 20 2d 2d 76 65 72 62 6f 73 65 2e  -v or --verbose.
0f90: 20 20 4f 75 74 70 75 74 20 65 78 74 72 61 20 69    Output extra i
0fa0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
0fb0: 69 6e 74 20 66 6f 72 63 65 4d 69 73 73 69 6e 67  int forceMissing
0fc0: 46 6c 61 67 3b 20 2f 2a 20 2d 2d 66 6f 72 63 65  Flag; /* --force
0fd0: 2d 6d 69 73 73 69 6e 67 2e 20 20 43 6f 6e 74 69  -missing.  Conti
0fe0: 6e 75 65 20 69 66 20 6d 69 73 73 69 6e 67 20 63  nue if missing c
0ff0: 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  ontent */.  int 
1000: 64 65 62 75 67 46 6c 61 67 3b 20 20 20 20 20 20  debugFlag;      
1010: 20 20 2f 2a 20 2d 2d 64 65 62 75 67 20 6f 70 74    /* --debug opt
1020: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65 74  ion */.  int set
1030: 6d 74 69 6d 65 46 6c 61 67 3b 20 20 20 20 20 2f  mtimeFlag;     /
1040: 2a 20 2d 2d 73 65 74 6d 74 69 6d 65 2e 20 20 53  * --setmtime.  S
1050: 65 74 20 6d 74 69 6d 65 73 20 6f 6e 20 66 69 6c  et mtimes on fil
1060: 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 6e  es */.  int nChn
1070: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
1080: 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 6c 65 20   Number of file 
1090: 72 65 6e 61 6d 65 73 20 2a 2f 0a 20 20 69 6e 74  renames */.  int
10a0: 20 2a 61 43 68 6e 67 3b 20 20 20 20 20 20 20 20   *aChng;        
10b0: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 66     /* Array of f
10c0: 69 6c 65 20 72 65 6e 61 6d 65 73 20 2a 2f 0a 20  ile renames */. 
10d0: 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
10e0: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
10f0: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ounter */.  int 
1100: 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 30 3b 20 20  nConflict = 0;  
1110: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
1120: 65 72 67 65 20 63 6f 6e 66 6c 69 63 74 73 20 2a  erge conflicts *
1130: 2f 0a 20 20 69 6e 74 20 6e 4f 76 65 72 77 72 69  /.  int nOverwri
1140: 74 65 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 75 6d  te = 0;   /* Num
1150: 62 65 72 20 6f 66 20 75 6e 6d 61 6e 61 67 65 64  ber of unmanaged
1160: 20 66 69 6c 65 73 20 6f 76 65 72 77 72 69 74 74   files overwritt
1170: 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 70 64  en */.  int nUpd
1180: 61 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  ate = 0;      /*
1190: 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67   Number of chang
11a0: 65 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a  es of any kind *
11b0: 2f 0a 20 20 69 6e 74 20 77 69 64 74 68 3b 20 20  /.  int width;  
11c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 64            /* Wid
11d0: 74 68 20 6f 66 20 70 72 69 6e 74 65 64 20 63 6f  th of printed co
11e0: 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 2a 2f 0a 20  mment lines */. 
11f0: 20 53 74 6d 74 20 6d 74 69 6d 65 58 66 65 72 3b   Stmt mtimeXfer;
1200: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 65 6d         /* Statem
1210: 65 6e 74 20 74 6f 20 74 72 61 6e 73 66 65 72 20  ent to transfer 
1220: 6d 74 69 6d 65 73 20 2a 2f 0a 20 20 63 6f 6e 73  mtimes */.  cons
1230: 74 20 63 68 61 72 20 2a 7a 57 69 64 74 68 3b 20  t char *zWidth; 
1240: 20 20 2f 2a 20 57 69 64 74 68 20 6f 70 74 69 6f    /* Width optio
1250: 6e 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 2a  n string value *
1260: 2f 0a 0a 20 20 69 66 28 20 21 69 6e 74 65 72 6e  /..  if( !intern
1270: 61 6c 55 70 64 61 74 65 20 29 7b 0a 20 20 20 20  alUpdate ){.    
1280: 75 6e 64 6f 5f 63 61 70 74 75 72 65 5f 63 6f 6d  undo_capture_com
1290: 6d 61 6e 64 5f 6c 69 6e 65 28 29 3b 0a 20 20 20  mand_line();.   
12a0: 20 75 72 6c 5f 70 72 6f 78 79 5f 6f 70 74 69 6f   url_proxy_optio
12b0: 6e 73 28 29 3b 0a 20 20 7d 0a 20 20 7a 57 69 64  ns();.  }.  zWid
12c0: 74 68 20 3d 20 66 69 6e 64 5f 6f 70 74 69 6f 6e  th = find_option
12d0: 28 22 77 69 64 74 68 22 2c 22 57 22 2c 31 29 3b  ("width","W",1);
12e0: 0a 20 20 69 66 28 20 7a 57 69 64 74 68 20 29 7b  .  if( zWidth ){
12f0: 0a 20 20 20 20 77 69 64 74 68 20 3d 20 61 74 6f  .    width = ato
1300: 69 28 7a 57 69 64 74 68 29 3b 0a 20 20 20 20 69  i(zWidth);.    i
1310: 66 28 20 28 77 69 64 74 68 21 3d 30 29 20 26 26  f( (width!=0) &&
1320: 20 28 77 69 64 74 68 3c 3d 32 30 29 20 29 7b 0a   (width<=20) ){.
1330: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74        fossil_fat
1340: 61 6c 28 22 2d 57 7c 2d 2d 77 69 64 74 68 20 76  al("-W|--width v
1350: 61 6c 75 65 20 6d 75 73 74 20 62 65 20 3e 32 30  alue must be >20
1360: 20 6f 72 20 30 22 29 3b 0a 20 20 20 20 7d 0a 20   or 0");.    }. 
1370: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 69 64 74   }else{.    widt
1380: 68 20 3d 20 2d 31 3b 0a 20 20 7d 0a 20 20 6c 61  h = -1;.  }.  la
1390: 74 65 73 74 46 6c 61 67 20 3d 20 66 69 6e 64 5f  testFlag = find_
13a0: 6f 70 74 69 6f 6e 28 22 6c 61 74 65 73 74 22 2c  option("latest",
13b0: 30 2c 20 30 29 21 3d 30 3b 0a 20 20 64 72 79 52  0, 0)!=0;.  dryR
13c0: 75 6e 46 6c 61 67 20 3d 20 66 69 6e 64 5f 6f 70  unFlag = find_op
13d0: 74 69 6f 6e 28 22 64 72 79 2d 72 75 6e 22 2c 22  tion("dry-run","
13e0: 6e 22 2c 30 29 21 3d 30 3b 0a 20 20 69 66 28 20  n",0)!=0;.  if( 
13f0: 21 64 72 79 52 75 6e 46 6c 61 67 20 29 7b 0a 20  !dryRunFlag ){. 
1400: 20 20 20 64 72 79 52 75 6e 46 6c 61 67 20 3d 20     dryRunFlag = 
1410: 66 69 6e 64 5f 6f 70 74 69 6f 6e 28 22 6e 6f 63  find_option("noc
1420: 68 61 6e 67 65 22 2c 30 2c 30 29 21 3d 30 3b 20  hange",0,0)!=0; 
1430: 2f 2a 20 64 65 70 72 65 63 61 74 65 64 20 2a 2f  /* deprecated */
1440: 0a 20 20 7d 0a 20 20 76 65 72 62 6f 73 65 46 6c  .  }.  verboseFl
1450: 61 67 20 3d 20 66 69 6e 64 5f 6f 70 74 69 6f 6e  ag = find_option
1460: 28 22 76 65 72 62 6f 73 65 22 2c 22 76 22 2c 30  ("verbose","v",0
1470: 29 21 3d 30 3b 0a 20 20 66 6f 72 63 65 4d 69 73  )!=0;.  forceMis
1480: 73 69 6e 67 46 6c 61 67 20 3d 20 66 69 6e 64 5f  singFlag = find_
1490: 6f 70 74 69 6f 6e 28 22 66 6f 72 63 65 2d 6d 69  option("force-mi
14a0: 73 73 69 6e 67 22 2c 30 2c 30 29 21 3d 30 3b 0a  ssing",0,0)!=0;.
14b0: 20 20 64 65 62 75 67 46 6c 61 67 20 3d 20 66 69    debugFlag = fi
14c0: 6e 64 5f 6f 70 74 69 6f 6e 28 22 64 65 62 75 67  nd_option("debug
14d0: 22 2c 30 2c 30 29 21 3d 30 3b 0a 20 20 73 65 74  ",0,0)!=0;.  set
14e0: 6d 74 69 6d 65 46 6c 61 67 20 3d 20 66 69 6e 64  mtimeFlag = find
14f0: 5f 6f 70 74 69 6f 6e 28 22 73 65 74 6d 74 69 6d  _option("setmtim
1500: 65 22 2c 30 2c 30 29 21 3d 30 3b 0a 0a 20 20 2f  e",0,0)!=0;..  /
1510: 2a 20 57 65 20 73 68 6f 75 6c 64 20 62 65 20 64  * We should be d
1520: 6f 6e 65 20 77 69 74 68 20 6f 70 74 69 6f 6e 73  one with options
1530: 2e 2e 20 2a 2f 0a 20 20 76 65 72 69 66 79 5f 61  .. */.  verify_a
1540: 6c 6c 5f 6f 70 74 69 6f 6e 73 28 29 3b 0a 0a 20  ll_options();.. 
1550: 20 64 62 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68   db_must_be_with
1560: 69 6e 5f 74 72 65 65 28 29 3b 0a 20 20 76 69 64  in_tree();.  vid
1570: 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74 28 22   = db_lget_int("
1580: 63 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b 0a 20  checkout", 0);. 
1590: 20 75 73 65 72 5f 73 65 6c 65 63 74 28 29 3b 0a   user_select();.
15a0: 20 20 69 66 28 20 21 64 72 79 52 75 6e 46 6c 61    if( !dryRunFla
15b0: 67 20 26 26 20 21 69 6e 74 65 72 6e 61 6c 55 70  g && !internalUp
15c0: 64 61 74 65 20 29 7b 0a 20 20 20 20 69 66 28 20  date ){.    if( 
15d0: 61 75 74 6f 73 79 6e 63 5f 6c 6f 6f 70 28 53 59  autosync_loop(SY
15e0: 4e 43 5f 50 55 4c 4c 20 2b 20 53 59 4e 43 5f 56  NC_PULL + SYNC_V
15f0: 45 52 42 4f 53 45 2a 76 65 72 62 6f 73 65 46 6c  ERBOSE*verboseFl
1600: 61 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ag,.            
1610: 20 20 20 20 20 20 20 20 20 20 64 62 5f 67 65 74            db_get
1620: 5f 69 6e 74 28 22 61 75 74 6f 73 79 6e 63 2d 74  _int("autosync-t
1630: 72 69 65 73 22 2c 20 31 29 2c 20 31 29 20 29 7b  ries", 1), 1) ){
1640: 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 66 61  .      fossil_fa
1650: 74 61 6c 28 22 75 70 64 61 74 65 20 61 62 61 6e  tal("update aban
1660: 64 6f 6e 65 64 20 64 75 65 20 74 6f 20 73 79 6e  doned due to syn
1670: 63 20 66 61 69 6c 75 72 65 22 29 3b 0a 20 20 20  c failure");.   
1680: 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 72 65   }.  }..  /* Cre
1690: 61 74 65 20 61 6e 79 20 65 6d 70 74 79 20 64 69  ate any empty di
16a0: 72 65 63 74 6f 72 69 65 73 20 6e 6f 77 2c 20 61  rectories now, a
16b0: 73 20 77 65 6c 6c 20 61 73 20 61 66 74 65 72 20  s well as after 
16c0: 74 68 65 20 75 70 64 61 74 65 2c 0a 20 20 2a 2a  the update,.  **
16d0: 20 73 6f 20 63 68 61 6e 67 65 73 20 69 6e 20 73   so changes in s
16e0: 65 74 74 69 6e 67 73 20 61 72 65 20 72 65 66 6c  ettings are refl
16f0: 65 63 74 65 64 20 6e 6f 77 20 2a 2f 0a 20 20 69  ected now */.  i
1700: 66 28 20 21 64 72 79 52 75 6e 46 6c 61 67 20 29  f( !dryRunFlag )
1710: 20 65 6e 73 75 72 65 5f 65 6d 70 74 79 5f 64 69   ensure_empty_di
1720: 72 73 5f 63 72 65 61 74 65 64 28 29 3b 0a 0a 20  rs_created();.. 
1730: 20 69 66 28 20 69 6e 74 65 72 6e 61 6c 55 70 64   if( internalUpd
1740: 61 74 65 20 29 7b 0a 20 20 20 20 74 69 64 20 3d  ate ){.    tid =
1750: 20 69 6e 74 65 72 6e 61 6c 55 70 64 61 74 65 3b   internalUpdate;
1760: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 67 2e 61  .  }else if( g.a
1770: 72 67 63 3e 3d 33 20 29 7b 0a 20 20 20 20 69 66  rgc>=3 ){.    if
1780: 28 20 66 6f 73 73 69 6c 5f 73 74 72 63 6d 70 28  ( fossil_strcmp(
1790: 67 2e 61 72 67 76 5b 32 5d 2c 20 22 63 75 72 72  g.argv[2], "curr
17a0: 65 6e 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ent")==0 ){.    
17b0: 20 20 2f 2a 20 49 66 20 56 45 52 53 49 4f 4e 20    /* If VERSION 
17c0: 69 73 20 22 63 75 72 72 65 6e 74 22 2c 20 74 68  is "current", th
17d0: 65 6e 20 75 73 65 20 74 68 65 20 73 61 6d 65 20  en use the same 
17e0: 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 66 69 6e  algorithm to fin
17f0: 64 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 74  d the.      ** t
1800: 61 72 67 65 74 20 61 73 20 69 66 20 56 45 52 53  arget as if VERS
1810: 49 4f 4e 20 77 65 72 65 20 6f 6d 69 74 74 65 64  ION were omitted
1820: 2e 20 2a 2f 0a 20 20 20 20 7d 65 6c 73 65 20 69  . */.    }else i
1830: 66 28 20 66 6f 73 73 69 6c 5f 73 74 72 63 6d 70  f( fossil_strcmp
1840: 28 67 2e 61 72 67 76 5b 32 5d 2c 20 22 6c 61 74  (g.argv[2], "lat
1850: 65 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  est")==0 ){.    
1860: 20 20 2f 2a 20 49 66 20 56 45 52 53 49 4f 4e 20    /* If VERSION 
1870: 69 73 20 22 6c 61 74 65 73 74 22 2c 20 74 68 65  is "latest", the
1880: 6e 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 61  n use the same a
1890: 6c 67 6f 72 69 74 68 6d 20 74 6f 20 66 69 6e 64  lgorithm to find
18a0: 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 74 61   the.      ** ta
18b0: 72 67 65 74 20 61 73 20 69 66 20 56 45 52 53 49  rget as if VERSI
18c0: 4f 4e 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ON were omitted 
18d0: 61 6e 64 20 74 68 65 20 2d 2d 6c 61 74 65 73 74  and the --latest
18e0: 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74   flag is present
18f0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
1900: 20 6c 61 74 65 73 74 46 6c 61 67 20 3d 20 31 3b   latestFlag = 1;
1910: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1920: 20 20 74 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f    tid = name_to_
1930: 74 79 70 65 64 5f 72 69 64 28 67 2e 61 72 67 76  typed_rid(g.argv
1940: 5b 32 5d 2c 22 63 69 22 29 3b 0a 20 20 20 20 20  [2],"ci");.     
1950: 20 20 69 66 28 20 74 69 64 3d 3d 30 20 7c 7c 20    if( tid==0 || 
1960: 21 69 73 5f 61 5f 76 65 72 73 69 6f 6e 28 74 69  !is_a_version(ti
1970: 64 29 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  d) ){.        fo
1980: 73 73 69 6c 5f 66 61 74 61 6c 28 22 6e 6f 20 73  ssil_fatal("no s
1990: 75 63 68 20 63 68 65 63 6b 2d 69 6e 3a 20 25 73  uch check-in: %s
19a0: 22 2c 20 67 2e 61 72 67 76 5b 32 5d 29 3b 0a 20  ", g.argv[2]);. 
19b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
19c0: 0a 0a 20 20 2f 2a 20 49 66 20 6e 6f 20 56 45 52  ..  /* If no VER
19d0: 53 49 4f 4e 20 69 73 20 73 70 65 63 69 66 69 65  SION is specifie
19e0: 64 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  d on the command
19f0: 2d 6c 69 6e 65 2c 20 74 68 65 6e 20 6c 6f 6f 6b  -line, then look
1a00: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 64 65 73 63   for a.  ** desc
1a10: 65 6e 64 65 6e 74 20 6f 66 20 74 68 65 20 63 75  endent of the cu
1a20: 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 2e 20 20  rrent version.  
1a30: 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
1a40: 74 69 70 6c 65 20 64 65 73 63 65 6e 64 61 6e 74  tiple descendant
1a50: 73 2c 0a 20 20 2a 2a 20 6c 6f 6f 6b 20 66 6f 72  s,.  ** look for
1a60: 20 6f 6e 65 20 66 72 6f 6d 20 74 68 65 20 73 61   one from the sa
1a70: 6d 65 20 62 72 61 6e 63 68 20 61 73 20 74 68 65  me branch as the
1a80: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
1a90: 2e 20 20 49 66 20 74 68 65 72 65 0a 20 20 2a 2a  .  If there.  **
1aa0: 20 61 72 65 20 73 74 69 6c 6c 20 6d 75 6c 74 69   are still multi
1ab0: 70 6c 65 20 64 65 73 63 65 6e 64 61 6e 74 73 2c  ple descendants,
1ac0: 20 73 68 6f 77 20 74 68 65 6d 20 61 6c 6c 20 61   show them all a
1ad0: 6e 64 20 72 65 66 75 73 65 20 74 6f 20 75 70 64  nd refuse to upd
1ae0: 61 74 65 0a 20 20 2a 2a 20 75 6e 74 69 6c 20 74  ate.  ** until t
1af0: 68 65 20 75 73 65 72 20 73 65 6c 65 63 74 73 20  he user selects 
1b00: 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  one..  */.  if( 
1b10: 74 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e  tid==0 ){.    in
1b20: 74 20 63 6c 6f 73 65 43 6f 64 65 20 3d 20 31 3b  t closeCode = 1;
1b30: 0a 20 20 20 20 63 6f 6d 70 75 74 65 5f 6c 65 61  .    compute_lea
1b40: 76 65 73 28 76 69 64 2c 20 63 6c 6f 73 65 43 6f  ves(vid, closeCo
1b50: 64 65 29 3b 0a 20 20 20 20 69 66 28 20 21 64 62  de);.    if( !db
1b60: 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20  _exists("SELECT 
1b70: 31 20 46 52 4f 4d 20 6c 65 61 76 65 73 22 29 20  1 FROM leaves") 
1b80: 29 7b 0a 20 20 20 20 20 20 63 6c 6f 73 65 43 6f  ){.      closeCo
1b90: 64 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 6f  de = 0;.      co
1ba0: 6d 70 75 74 65 5f 6c 65 61 76 65 73 28 76 69 64  mpute_leaves(vid
1bb0: 2c 20 63 6c 6f 73 65 43 6f 64 65 29 3b 0a 20 20  , closeCode);.  
1bc0: 20 20 7d 0a 20 20 20 20 69 66 28 20 21 6c 61 74    }.    if( !lat
1bd0: 65 73 74 46 6c 61 67 20 26 26 20 64 62 5f 69 6e  estFlag && db_in
1be0: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 63 6f 75  t(0, "SELECT cou
1bf0: 6e 74 28 2a 29 20 46 52 4f 4d 20 6c 65 61 76 65  nt(*) FROM leave
1c00: 73 22 29 3e 31 20 29 7b 0a 20 20 20 20 20 20 64  s")>1 ){.      d
1c10: 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a 20 20  b_multi_exec(.  
1c20: 20 20 20 20 20 20 22 44 45 4c 45 54 45 20 46 52        "DELETE FR
1c30: 4f 4d 20 6c 65 61 76 65 73 20 57 48 45 52 45 20  OM leaves WHERE 
1c40: 72 69 64 20 4e 4f 54 20 49 4e 22 0a 20 20 20 20  rid NOT IN".    
1c50: 20 20 20 20 22 20 20 20 28 53 45 4c 45 43 54 20      "   (SELECT 
1c60: 6c 65 61 76 65 73 2e 72 69 64 20 46 52 4f 4d 20  leaves.rid FROM 
1c70: 6c 65 61 76 65 73 2c 20 74 61 67 78 72 65 66 22  leaves, tagxref"
1c80: 0a 20 20 20 20 20 20 20 20 22 20 20 20 20 20 57  .        "     W
1c90: 48 45 52 45 20 6c 65 61 76 65 73 2e 72 69 64 3d  HERE leaves.rid=
1ca0: 74 61 67 78 72 65 66 2e 72 69 64 20 41 4e 44 20  tagxref.rid AND 
1cb0: 74 61 67 78 72 65 66 2e 74 61 67 69 64 3d 25 64  tagxref.tagid=%d
1cc0: 22 0a 20 20 20 20 20 20 20 20 22 20 20 20 20 20  ".        "     
1cd0: 20 20 41 4e 44 20 74 61 67 78 72 65 66 2e 76 61    AND tagxref.va
1ce0: 6c 75 65 3d 3d 28 53 45 4c 45 43 54 20 76 61 6c  lue==(SELECT val
1cf0: 75 65 20 46 52 4f 4d 20 74 61 67 78 72 65 66 22  ue FROM tagxref"
1d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d20: 20 20 20 20 22 20 57 48 45 52 45 20 74 61 67 69      " WHERE tagi
1d30: 64 3d 25 64 20 41 4e 44 20 72 69 64 3d 25 64 29  d=%d AND rid=%d)
1d40: 29 22 2c 0a 20 20 20 20 20 20 20 20 54 41 47 5f  )",.        TAG_
1d50: 42 52 41 4e 43 48 2c 20 54 41 47 5f 42 52 41 4e  BRANCH, TAG_BRAN
1d60: 43 48 2c 20 76 69 64 0a 20 20 20 20 20 20 29 3b  CH, vid.      );
1d70: 0a 20 20 20 20 20 20 69 66 28 20 64 62 5f 69 6e  .      if( db_in
1d80: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 63 6f 75  t(0, "SELECT cou
1d90: 6e 74 28 2a 29 20 46 52 4f 4d 20 6c 65 61 76 65  nt(*) FROM leave
1da0: 73 22 29 3e 31 20 29 7b 0a 20 20 20 20 20 20 20  s")>1 ){.       
1db0: 20 63 6f 6d 70 75 74 65 5f 6c 65 61 76 65 73 28   compute_leaves(
1dc0: 76 69 64 2c 20 63 6c 6f 73 65 43 6f 64 65 29 3b  vid, closeCode);
1dd0: 0a 20 20 20 20 20 20 20 20 64 62 5f 70 72 65 70  .        db_prep
1de0: 61 72 65 28 26 71 2c 0a 20 20 20 20 20 20 20 20  are(&q,.        
1df0: 20 20 22 25 73 20 22 0a 20 20 20 20 20 20 20 20    "%s ".        
1e00: 20 20 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e    "   AND event.
1e10: 6f 62 6a 69 64 20 49 4e 20 6c 65 61 76 65 73 22  objid IN leaves"
1e20: 0a 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44  .          " ORD
1e30: 45 52 20 42 59 20 65 76 65 6e 74 2e 6d 74 69 6d  ER BY event.mtim
1e40: 65 20 44 45 53 43 22 2c 0a 20 20 20 20 20 20 20  e DESC",.       
1e50: 20 20 20 74 69 6d 65 6c 69 6e 65 5f 71 75 65 72     timeline_quer
1e60: 79 5f 66 6f 72 5f 74 74 79 28 29 0a 20 20 20 20  y_for_tty().    
1e70: 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 70      );.        p
1e80: 72 69 6e 74 5f 74 69 6d 65 6c 69 6e 65 28 26 71  rint_timeline(&q
1e90: 2c 20 2d 31 30 30 2c 20 77 69 64 74 68 2c 20 30  , -100, width, 0
1ea0: 29 3b 0a 20 20 20 20 20 20 20 20 64 62 5f 66 69  );.        db_fi
1eb0: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 20  nalize(&q);.    
1ec0: 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c      fossil_fatal
1ed0: 28 22 4d 75 6c 74 69 70 6c 65 20 64 65 73 63 65  ("Multiple desce
1ee0: 6e 64 61 6e 74 73 22 29 3b 0a 20 20 20 20 20 20  ndants");.      
1ef0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 74 69 64 20  }.    }.    tid 
1f00: 3d 20 64 62 5f 69 6e 74 28 30 2c 20 22 53 45 4c  = db_int(0, "SEL
1f10: 45 43 54 20 72 69 64 20 46 52 4f 4d 20 6c 65 61  ECT rid FROM lea
1f20: 76 65 73 2c 20 65 76 65 6e 74 22 0a 20 20 20 20  ves, event".    
1f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f40: 22 20 57 48 45 52 45 20 65 76 65 6e 74 2e 6f 62  " WHERE event.ob
1f50: 6a 69 64 3d 6c 65 61 76 65 73 2e 72 69 64 22 0a  jid=leaves.rid".
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f70: 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 65      " ORDER BY e
1f80: 76 65 6e 74 2e 6d 74 69 6d 65 20 44 45 53 43 22  vent.mtime DESC"
1f90: 29 3b 0a 20 20 20 20 69 66 28 20 74 69 64 3d 3d  );.    if( tid==
1fa0: 30 20 29 20 74 69 64 20 3d 20 76 69 64 3b 0a 20  0 ) tid = vid;. 
1fb0: 20 7d 0a 0a 20 20 69 66 28 20 74 69 64 3d 3d 30   }..  if( tid==0
1fc0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a   ){.    return;.
1fd0: 20 20 7d 0a 0a 20 20 64 62 5f 62 65 67 69 6e 5f    }..  db_begin_
1fe0: 74 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20  transaction();. 
1ff0: 20 76 66 69 6c 65 5f 63 68 65 63 6b 5f 73 69 67   vfile_check_sig
2000: 6e 61 74 75 72 65 28 76 69 64 2c 20 43 4b 53 49  nature(vid, CKSI
2010: 47 5f 45 4e 4f 54 46 49 4c 45 29 3b 0a 20 20 69  G_ENOTFILE);.  i
2020: 66 28 20 21 64 72 79 52 75 6e 46 6c 61 67 20 26  f( !dryRunFlag &
2030: 26 20 21 69 6e 74 65 72 6e 61 6c 55 70 64 61 74  & !internalUpdat
2040: 65 20 29 20 75 6e 64 6f 5f 62 65 67 69 6e 28 29  e ) undo_begin()
2050: 3b 0a 20 20 69 66 28 20 6c 6f 61 64 5f 76 66 69  ;.  if( load_vfi
2060: 6c 65 5f 66 72 6f 6d 5f 72 69 64 28 74 69 64 29  le_from_rid(tid)
2070: 20 26 26 20 21 66 6f 72 63 65 4d 69 73 73 69 6e   && !forceMissin
2080: 67 46 6c 61 67 20 29 7b 0a 20 20 20 20 66 6f 73  gFlag ){.    fos
2090: 73 69 6c 5f 66 61 74 61 6c 28 22 6d 69 73 73 69  sil_fatal("missi
20a0: 6e 67 20 63 6f 6e 74 65 6e 74 2c 20 75 6e 61 62  ng content, unab
20b0: 6c 65 20 74 6f 20 75 70 64 61 74 65 22 29 3b 0a  le to update");.
20c0: 20 20 7d 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20    };..  /*.  ** 
20d0: 54 68 65 20 72 65 63 6f 72 64 2e 66 6e 20 66 69  The record.fn fi
20e0: 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20 6d  eld is used to m
20f0: 61 74 63 68 20 66 69 6c 65 73 20 61 67 61 69 6e  atch files again
2100: 73 74 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20  st each other.  
2110: 54 68 65 0a 20 20 2a 2a 20 46 56 20 74 61 62 6c  The.  ** FV tabl
2120: 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 72  e contains one r
2130: 6f 77 20 66 6f 72 20 65 61 63 68 20 65 61 63 68  ow for each each
2140: 20 75 6e 69 71 75 65 20 66 69 6c 65 6e 61 6d 65   unique filename
2150: 20 69 6e 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20   in.  ** in the 
2160: 63 75 72 72 65 6e 74 20 63 68 65 63 6b 6f 75 74  current checkout
2170: 2c 20 74 68 65 20 70 69 76 6f 74 2c 20 61 6e 64  , the pivot, and
2180: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 62 65 69   the version bei
2190: 6e 67 20 6d 65 72 67 65 64 2e 0a 20 20 2a 2f 0a  ng merged..  */.
21a0: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28    db_multi_exec(
21b0: 0a 20 20 20 20 22 44 52 4f 50 20 54 41 42 4c 45  .    "DROP TABLE
21c0: 20 49 46 20 45 58 49 53 54 53 20 66 76 3b 22 0a   IF EXISTS fv;".
21d0: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
21e0: 20 54 41 42 4c 45 20 66 76 28 22 0a 20 20 20 20   TABLE fv(".    
21f0: 22 20 20 66 6e 20 54 45 58 54 20 25 73 20 50 52  "  fn TEXT %s PR
2200: 49 4d 41 52 59 20 4b 45 59 2c 22 20 20 20 2f 2a  IMARY KEY,"   /*
2210: 20 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 72 65   The filename re
2220: 6c 61 74 69 76 65 20 74 6f 20 72 6f 6f 74 20 2a  lative to root *
2230: 2f 0a 20 20 20 20 22 20 20 69 64 76 20 49 4e 54  /.    "  idv INT
2240: 45 47 45 52 2c 22 20 20 20 20 20 20 20 20 20 20  EGER,"          
2250: 20 20 20 20 2f 2a 20 56 46 49 4c 45 20 65 6e 74      /* VFILE ent
2260: 72 79 20 66 6f 72 20 63 75 72 72 65 6e 74 20 76  ry for current v
2270: 65 72 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 22 20  ersion */.    " 
2280: 20 69 64 74 20 49 4e 54 45 47 45 52 2c 22 20 20   idt INTEGER,"  
2290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
22a0: 46 49 4c 45 20 65 6e 74 72 79 20 66 6f 72 20 74  FILE entry for t
22b0: 61 72 67 65 74 20 76 65 72 73 69 6f 6e 20 2a 2f  arget version */
22c0: 0a 20 20 20 20 22 20 20 63 68 6e 67 65 64 20 42  .    "  chnged B
22d0: 4f 4f 4c 45 41 4e 2c 22 20 20 20 20 20 20 20 20  OOLEAN,"        
22e0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 75     /* True if cu
22f0: 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 20 68 61  rrent version ha
2300: 73 20 62 65 65 6e 20 65 64 69 74 65 64 20 2a 2f  s been edited */
2310: 0a 20 20 20 20 22 20 20 69 73 6c 69 6e 6b 76 20  .    "  islinkv 
2320: 42 4f 4f 4c 45 41 4e 2c 22 20 20 20 20 20 20 20  BOOLEAN,"       
2330: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 75     /* True if cu
2340: 72 72 65 6e 74 20 66 69 6c 65 20 69 73 20 61 20  rrent file is a 
2350: 6c 69 6e 6b 20 2a 2f 0a 20 20 20 20 22 20 20 69  link */.    "  i
2360: 73 6c 69 6e 6b 74 20 42 4f 4f 4c 45 41 4e 2c 22  slinkt BOOLEAN,"
2370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
2380: 65 20 69 66 20 74 61 72 67 65 74 20 66 69 6c 65  e if target file
2390: 20 69 73 20 61 20 6c 69 6e 6b 20 2a 2f 0a 20 20   is a link */.  
23a0: 20 20 22 20 20 72 69 64 76 20 49 4e 54 45 47 45    "  ridv INTEGE
23b0: 52 2c 22 20 20 20 20 20 20 20 20 20 20 20 20 20  R,"             
23c0: 2f 2a 20 52 65 63 6f 72 64 20 49 44 20 66 6f 72  /* Record ID for
23d0: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
23e0: 20 2a 2f 0a 20 20 20 20 22 20 20 72 69 64 74 20   */.    "  ridt 
23f0: 49 4e 54 45 47 45 52 2c 22 20 20 20 20 20 20 20  INTEGER,"       
2400: 20 20 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20        /* Record 
2410: 49 44 20 66 6f 72 20 74 61 72 67 65 74 20 2a 2f  ID for target */
2420: 0a 20 20 20 20 22 20 20 69 73 65 78 65 20 42 4f  .    "  isexe BO
2430: 4f 4c 45 41 4e 2c 22 20 20 20 20 20 20 20 20 20  OLEAN,"         
2440: 20 20 20 2f 2a 20 44 6f 65 73 20 74 61 72 67 65     /* Does targe
2450: 74 20 68 61 76 65 20 65 78 65 63 75 74 65 20 70  t have execute p
2460: 65 72 6d 69 73 73 69 6f 6e 3f 20 2a 2f 0a 20 20  ermission? */.  
2470: 20 20 22 20 20 64 65 6c 65 74 65 64 20 42 4f 4f    "  deleted BOO
2480: 4c 45 41 4e 20 44 45 46 41 55 4c 54 20 30 2c 22  LEAN DEFAULT 0,"
2490: 2f 2a 20 46 69 6c 65 20 6d 61 72 6b 65 64 20 62  /* File marked b
24a0: 79 20 22 72 6d 22 20 74 6f 20 62 65 63 6f 6d 65  y "rm" to become
24b0: 20 75 6e 6d 61 6e 61 67 65 64 20 2a 2f 0a 20 20   unmanaged */.  
24c0: 20 20 22 20 20 66 6e 74 20 54 45 58 54 20 25 73    "  fnt TEXT %s
24d0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
24e0: 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 6f 66 20 73  /* Filename of s
24f0: 61 6d 65 20 66 69 6c 65 20 6f 6e 20 74 61 72 67  ame file on targ
2500: 65 74 20 76 65 72 73 69 6f 6e 20 2a 2f 0a 20 20  et version */.  
2510: 20 20 22 29 3b 22 2c 0a 20 20 20 20 66 69 6c 65    ");",.    file
2520: 6e 61 6d 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29  name_collation()
2530: 2c 20 66 69 6c 65 6e 61 6d 65 5f 63 6f 6c 6c 61  , filename_colla
2540: 74 69 6f 6e 28 29 0a 20 20 29 3b 0a 0a 20 20 2f  tion().  );..  /
2550: 2a 20 41 64 64 20 66 69 6c 65 73 20 66 6f 75 6e  * Add files foun
2560: 64 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d in the current
2570: 20 76 65 72 73 69 6f 6e 0a 20 20 2a 2f 0a 20 20   version.  */.  
2580: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a 20  db_multi_exec(. 
2590: 20 20 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47     "INSERT OR IG
25a0: 4e 4f 52 45 20 49 4e 54 4f 20 66 76 28 66 6e 2c  NORE INTO fv(fn,
25b0: 66 6e 74 2c 69 64 76 2c 69 64 74 2c 72 69 64 76  fnt,idv,idt,ridv
25c0: 2c 72 69 64 74 2c 69 73 65 78 65 2c 63 68 6e 67  ,ridt,isexe,chng
25d0: 65 64 2c 64 65 6c 65 74 65 64 29 22 0a 20 20 20  ed,deleted)".   
25e0: 20 22 20 53 45 4c 45 43 54 20 70 61 74 68 6e 61   " SELECT pathna
25f0: 6d 65 2c 20 70 61 74 68 6e 61 6d 65 2c 20 69 64  me, pathname, id
2600: 2c 20 30 2c 20 72 69 64 2c 20 30 2c 20 69 73 65  , 0, rid, 0, ise
2610: 78 65 2c 20 63 68 6e 67 65 64 2c 20 64 65 6c 65  xe, chnged, dele
2620: 74 65 64 22 0a 20 20 20 20 22 20 20 20 46 52 4f  ted".    "   FRO
2630: 4d 20 76 66 69 6c 65 20 57 48 45 52 45 20 76 69  M vfile WHERE vi
2640: 64 3d 25 64 22 2c 0a 20 20 20 20 76 69 64 0a 20  d=%d",.    vid. 
2650: 20 29 3b 0a 0a 20 20 2f 2a 20 43 6f 6d 70 75 74   );..  /* Comput
2660: 65 20 66 69 6c 65 20 6e 61 6d 65 20 63 68 61 6e  e file name chan
2670: 67 65 73 20 6f 6e 20 56 2d 3e 54 2e 20 20 52 65  ges on V->T.  Re
2680: 63 6f 72 64 20 6e 61 6d 65 20 63 68 61 6e 67 65  cord name change
2690: 73 20 69 6e 20 66 69 6c 65 73 20 74 68 61 74 0a  s in files that.
26a0: 20 20 2a 2a 20 68 61 76 65 20 63 68 61 6e 67 65    ** have change
26b0: 64 20 6c 6f 63 61 6c 6c 79 2e 0a 20 20 2a 2f 0a  d locally..  */.
26c0: 20 20 69 66 28 20 76 69 64 20 29 7b 0a 20 20 20    if( vid ){.   
26d0: 20 66 69 6e 64 5f 66 69 6c 65 6e 61 6d 65 5f 63   find_filename_c
26e0: 68 61 6e 67 65 73 28 76 69 64 2c 20 74 69 64 2c  hanges(vid, tid,
26f0: 20 31 2c 20 26 6e 43 68 6e 67 2c 20 26 61 43 68   1, &nChng, &aCh
2700: 6e 67 2c 20 64 65 62 75 67 46 6c 61 67 20 3f 20  ng, debugFlag ? 
2710: 22 56 2d 3e 54 22 3a 20 30 29 3b 0a 20 20 20 20  "V->T": 0);.    
2720: 69 66 28 20 6e 43 68 6e 67 20 29 7b 0a 20 20 20  if( nChng ){.   
2730: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43     for(i=0; i<nC
2740: 68 6e 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  hng; i++){.     
2750: 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63     db_multi_exec
2760: 28 0a 20 20 20 20 20 20 20 20 20 20 22 55 50 44  (.          "UPD
2770: 41 54 45 20 66 76 22 0a 20 20 20 20 20 20 20 20  ATE fv".        
2780: 20 20 22 20 20 20 53 45 54 20 66 6e 74 3d 28 53    "   SET fnt=(S
2790: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
27a0: 66 69 6c 65 6e 61 6d 65 20 57 48 45 52 45 20 66  filename WHERE f
27b0: 6e 69 64 3d 25 64 29 22 0a 20 20 20 20 20 20 20  nid=%d)".       
27c0: 20 20 20 22 20 57 48 45 52 45 20 66 6e 3d 28 53     " WHERE fn=(S
27d0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
27e0: 66 69 6c 65 6e 61 6d 65 20 57 48 45 52 45 20 66  filename WHERE f
27f0: 6e 69 64 3d 25 64 29 20 41 4e 44 20 63 68 6e 67  nid=%d) AND chng
2800: 65 64 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61  ed",.          a
2810: 43 68 6e 67 5b 69 2a 32 2b 31 5d 2c 20 61 43 68  Chng[i*2+1], aCh
2820: 6e 67 5b 69 2a 32 5d 0a 20 20 20 20 20 20 20 20  ng[i*2].        
2830: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
2840: 20 66 6f 73 73 69 6c 5f 66 72 65 65 28 61 43 68   fossil_free(aCh
2850: 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  ng);.    }.  }..
2860: 20 20 2f 2a 20 41 64 64 20 66 69 6c 65 73 20 66    /* Add files f
2870: 6f 75 6e 64 20 69 6e 20 74 68 65 20 74 61 72 67  ound in the targ
2880: 65 74 20 76 65 72 73 69 6f 6e 20 54 20 62 75 74  et version T but
2890: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 74 68   missing from th
28a0: 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 76  e current.  ** v
28b0: 65 72 73 69 6f 6e 20 56 2e 0a 20 20 2a 2f 0a 20  ersion V..  */. 
28c0: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a   db_multi_exec(.
28d0: 20 20 20 20 22 49 4e 53 45 52 54 20 4f 52 20 49      "INSERT OR I
28e0: 47 4e 4f 52 45 20 49 4e 54 4f 20 66 76 28 66 6e  GNORE INTO fv(fn
28f0: 2c 66 6e 74 2c 69 64 76 2c 69 64 74 2c 72 69 64  ,fnt,idv,idt,rid
2900: 76 2c 72 69 64 74 2c 69 73 65 78 65 2c 63 68 6e  v,ridt,isexe,chn
2910: 67 65 64 29 22 0a 20 20 20 20 22 20 53 45 4c 45  ged)".    " SELE
2920: 43 54 20 70 61 74 68 6e 61 6d 65 2c 20 70 61 74  CT pathname, pat
2930: 68 6e 61 6d 65 2c 20 30 2c 20 30 2c 20 30 2c 20  hname, 0, 0, 0, 
2940: 30 2c 20 69 73 65 78 65 2c 20 30 20 46 52 4f 4d  0, isexe, 0 FROM
2950: 20 76 66 69 6c 65 22 0a 20 20 20 20 22 20 20 57   vfile".    "  W
2960: 48 45 52 45 20 76 69 64 3d 25 64 22 0a 20 20 20  HERE vid=%d".   
2970: 20 22 20 20 20 20 41 4e 44 20 70 61 74 68 6e 61   "    AND pathna
2980: 6d 65 20 25 73 20 4e 4f 54 20 49 4e 20 28 53 45  me %s NOT IN (SE
2990: 4c 45 43 54 20 66 6e 74 20 46 52 4f 4d 20 66 76  LECT fnt FROM fv
29a0: 29 22 2c 0a 20 20 20 20 74 69 64 2c 20 66 69 6c  )",.    tid, fil
29b0: 65 6e 61 6d 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  ename_collation(
29c0: 29 0a 20 20 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a  ).  );..  /*.  *
29d0: 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 66 69  * Compute the fi
29e0: 6c 65 20 76 65 72 73 69 6f 6e 20 69 64 73 20 66  le version ids f
29f0: 6f 72 20 54 0a 20 20 2a 2f 0a 20 20 64 62 5f 6d  or T.  */.  db_m
2a00: 75 6c 74 69 5f 65 78 65 63 28 0a 20 20 20 20 22  ulti_exec(.    "
2a10: 55 50 44 41 54 45 20 66 76 20 53 45 54 22 0a 20  UPDATE fv SET". 
2a20: 20 20 20 22 20 69 64 74 3d 63 6f 61 6c 65 73 63     " idt=coalesc
2a30: 65 28 28 53 45 4c 45 43 54 20 69 64 20 46 52 4f  e((SELECT id FRO
2a40: 4d 20 76 66 69 6c 65 20 57 48 45 52 45 20 76 69  M vfile WHERE vi
2a50: 64 3d 25 64 20 41 4e 44 20 66 6e 74 3d 70 61 74  d=%d AND fnt=pat
2a60: 68 6e 61 6d 65 29 2c 30 29 2c 22 0a 20 20 20 20  hname),0),".    
2a70: 22 20 72 69 64 74 3d 63 6f 61 6c 65 73 63 65 28  " ridt=coalesce(
2a80: 28 53 45 4c 45 43 54 20 72 69 64 20 46 52 4f 4d  (SELECT rid FROM
2a90: 20 76 66 69 6c 65 20 57 48 45 52 45 20 76 69 64   vfile WHERE vid
2aa0: 3d 25 64 20 41 4e 44 20 66 6e 74 3d 70 61 74 68  =%d AND fnt=path
2ab0: 6e 61 6d 65 29 2c 30 29 22 2c 0a 20 20 20 20 74  name),0)",.    t
2ac0: 69 64 2c 20 74 69 64 0a 20 20 29 3b 0a 0a 20 20  id, tid.  );..  
2ad0: 2f 2a 0a 20 20 2a 2a 20 41 64 64 20 69 73 6c 69  /*.  ** Add isli
2ae0: 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 20  nk information. 
2af0: 20 2a 2f 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65   */.  db_multi_e
2b00: 78 65 63 28 0a 20 20 20 20 22 55 50 44 41 54 45  xec(.    "UPDATE
2b10: 20 66 76 20 53 45 54 22 0a 20 20 20 20 22 20 69   fv SET".    " i
2b20: 73 6c 69 6e 6b 76 3d 63 6f 61 6c 65 73 63 65 28  slinkv=coalesce(
2b30: 28 53 45 4c 45 43 54 20 69 73 6c 69 6e 6b 20 46  (SELECT islink F
2b40: 52 4f 4d 20 76 66 69 6c 65 22 0a 20 20 20 20 20  ROM vfile".     
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 22 20 57 48 45 52 45 20 76 69 64 3d 25 64    " WHERE vid=%d
2b70: 20 41 4e 44 20 66 6e 74 3d 70 61 74 68 6e 61 6d   AND fnt=pathnam
2b80: 65 29 2c 30 29 2c 22 0a 20 20 20 20 22 20 69 73  e),0),".    " is
2b90: 6c 69 6e 6b 74 3d 63 6f 61 6c 65 73 63 65 28 28  linkt=coalesce((
2ba0: 53 45 4c 45 43 54 20 69 73 6c 69 6e 6b 20 46 52  SELECT islink FR
2bb0: 4f 4d 20 76 66 69 6c 65 22 0a 20 20 20 20 20 20  OM vfile".      
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd0: 20 22 20 57 48 45 52 45 20 76 69 64 3d 25 64 20   " WHERE vid=%d 
2be0: 41 4e 44 20 66 6e 74 3d 70 61 74 68 6e 61 6d 65  AND fnt=pathname
2bf0: 29 2c 30 29 22 2c 0a 20 20 20 20 76 69 64 2c 20  ),0)",.    vid, 
2c00: 74 69 64 0a 20 20 29 3b 0a 0a 0a 20 20 69 66 28  tid.  );...  if(
2c10: 20 64 65 62 75 67 46 6c 61 67 20 29 7b 0a 20 20   debugFlag ){.  
2c20: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c    db_prepare(&q,
2c30: 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
2c40: 72 6f 77 69 64 2c 20 66 6e 2c 20 66 6e 74 2c 20  rowid, fn, fnt, 
2c50: 63 68 6e 67 65 64 2c 20 72 69 64 76 2c 20 72 69  chnged, ridv, ri
2c60: 64 74 2c 20 69 73 65 78 65 2c 22 0a 20 20 20 20  dt, isexe,".    
2c70: 20 20 20 22 20 20 20 20 20 20 20 69 73 6c 69 6e     "       islin
2c80: 6b 76 2c 20 69 73 6c 69 6e 6b 74 20 46 52 4f 4d  kv, islinkt FROM
2c90: 20 66 76 22 0a 20 20 20 20 29 3b 0a 20 20 20 20   fv".    );.    
2ca0: 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26  while( db_step(&
2cb0: 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  q)==SQLITE_ROW )
2cc0: 7b 0a 20 20 20 20 20 20 20 66 6f 73 73 69 6c 5f  {.       fossil_
2cd0: 70 72 69 6e 74 28 22 25 33 64 3a 20 72 69 64 76  print("%3d: ridv
2ce0: 3d 25 2d 34 64 20 72 69 64 74 3d 25 2d 34 64 20  =%-4d ridt=%-4d 
2cf0: 63 68 6e 67 65 64 3d 25 64 20 69 73 65 78 65 3d  chnged=%d isexe=
2d00: 25 64 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  %d".            
2d10: 20 20 20 20 20 20 20 20 22 20 69 73 6c 69 6e 6b          " islink
2d20: 76 3d 25 64 20 20 69 73 6c 69 6e 6b 74 3d 25 64  v=%d  islinkt=%d
2d30: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 64  \n",.          d
2d40: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c  b_column_int(&q,
2d50: 20 30 29 2c 0a 20 20 20 20 20 20 20 20 20 20 64   0),.          d
2d60: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c  b_column_int(&q,
2d70: 20 34 29 2c 0a 20 20 20 20 20 20 20 20 20 20 64   4),.          d
2d80: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c  b_column_int(&q,
2d90: 20 35 29 2c 0a 20 20 20 20 20 20 20 20 20 20 64   5),.          d
2da0: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c  b_column_int(&q,
2db0: 20 33 29 2c 0a 20 20 20 20 20 20 20 20 20 20 64   3),.          d
2dc0: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c  b_column_int(&q,
2dd0: 20 36 29 2c 0a 20 20 20 20 20 20 20 20 20 20 64   6),.          d
2de0: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c  b_column_int(&q,
2df0: 20 37 29 2c 0a 20 20 20 20 20 20 20 20 20 20 64   7),.          d
2e00: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c  b_column_int(&q,
2e10: 20 38 29 29 3b 0a 20 20 20 20 20 20 20 66 6f 73   8));.       fos
2e20: 73 69 6c 5f 70 72 69 6e 74 28 22 20 20 20 20 20  sil_print("     
2e30: 66 6e 76 20 3d 20 5b 25 73 5d 5c 6e 22 2c 20 64  fnv = [%s]\n", d
2e40: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71  b_column_text(&q
2e50: 2c 20 31 29 29 3b 0a 20 20 20 20 20 20 20 66 6f  , 1));.       fo
2e60: 73 73 69 6c 5f 70 72 69 6e 74 28 22 20 20 20 20  ssil_print("    
2e70: 20 66 6e 74 20 3d 20 5b 25 73 5d 5c 6e 22 2c 20   fnt = [%s]\n", 
2e80: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26  db_column_text(&
2e90: 71 2c 20 32 29 29 3b 0a 20 20 20 20 7d 0a 20 20  q, 2));.    }.  
2ea0: 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71    db_finalize(&q
2eb0: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  );.  }..  /* If 
2ec0: 46 49 4c 45 53 20 61 70 70 65 61 72 20 6f 6e 20  FILES appear on 
2ed0: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
2ee0: 2c 20 72 65 6d 6f 76 65 20 66 72 6f 6d 20 74 68  , remove from th
2ef0: 65 20 22 66 76 22 20 74 61 62 6c 65 0a 20 20 2a  e "fv" table.  *
2f00: 2a 20 65 76 65 72 79 20 65 6e 74 72 79 20 74 68  * every entry th
2f10: 61 74 20 69 73 20 6e 6f 74 20 6e 61 6d 65 64 20  at is not named 
2f20: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
2f30: 69 6e 65 20 6f 72 20 77 68 69 63 68 20 69 73 20  ine or which is 
2f40: 6e 6f 74 0a 20 20 2a 2a 20 69 6e 20 61 20 64 69  not.  ** in a di
2f50: 72 65 63 74 6f 72 79 20 6e 61 6d 65 64 20 6f 6e  rectory named on
2f60: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
2f70: 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 67 2e  e..  */.  if( g.
2f80: 61 72 67 63 3e 3d 34 20 29 7b 0a 20 20 20 20 42  argc>=4 ){.    B
2f90: 6c 6f 62 20 73 71 6c 3b 20 20 20 20 20 20 20 20  lob sql;        
2fa0: 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 73 74 61        /* SQL sta
2fb0: 74 65 6d 65 6e 74 20 74 6f 20 70 75 72 67 65 20  tement to purge 
2fc0: 75 6e 77 61 6e 74 65 64 20 65 6e 74 72 69 65 73  unwanted entries
2fd0: 20 2a 2f 0a 20 20 20 20 42 6c 6f 62 20 74 72 65   */.    Blob tre
2fe0: 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  ename;         /
2ff0: 2a 20 4e 6f 72 6d 61 6c 69 7a 65 64 20 66 69 6c  * Normalized fil
3000: 65 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74  ename */.    int
3010: 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
3020: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
3030: 74 65 72 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  ter */.    const
3040: 20 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20 20   char *zSep;    
3050: 20 20 2f 2a 20 54 65 72 6d 20 73 65 70 61 72 61    /* Term separa
3060: 74 6f 72 20 2a 2f 0a 0a 20 20 20 20 62 6c 6f 62  tor */..    blob
3070: 5f 7a 65 72 6f 28 26 73 71 6c 29 3b 0a 20 20 20  _zero(&sql);.   
3080: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 73 71   blob_append(&sq
3090: 6c 2c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  l, "DELETE FROM 
30a0: 66 76 20 57 48 45 52 45 20 22 2c 20 2d 31 29 3b  fv WHERE ", -1);
30b0: 0a 20 20 20 20 7a 53 65 70 20 3d 20 22 22 3b 0a  .    zSep = "";.
30c0: 20 20 20 20 66 6f 72 28 69 3d 33 3b 20 69 3c 67      for(i=3; i<g
30d0: 2e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  .argc; i++){.   
30e0: 20 20 20 66 69 6c 65 5f 74 72 65 65 5f 6e 61 6d     file_tree_nam
30f0: 65 28 67 2e 61 72 67 76 5b 69 5d 2c 20 26 74 72  e(g.argv[i], &tr
3100: 65 65 6e 61 6d 65 2c 20 30 2c 20 31 29 3b 0a 20  eename, 0, 1);. 
3110: 20 20 20 20 20 69 66 28 20 66 69 6c 65 5f 69 73       if( file_is
3120: 64 69 72 28 67 2e 61 72 67 76 5b 69 5d 2c 20 52  dir(g.argv[i], R
3130: 65 70 6f 46 49 4c 45 29 3d 3d 31 20 29 7b 0a 20  epoFILE)==1 ){. 
3140: 20 20 20 20 20 20 20 69 66 28 20 62 6c 6f 62 5f         if( blob_
3150: 73 69 7a 65 28 26 74 72 65 65 6e 61 6d 65 29 20  size(&treename) 
3160: 21 3d 20 31 20 7c 7c 20 62 6c 6f 62 5f 73 74 72  != 1 || blob_str
3170: 28 26 74 72 65 65 6e 61 6d 65 29 5b 30 5d 20 21  (&treename)[0] !
3180: 3d 20 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20  = '.' ){.       
3190: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 5f 73     blob_append_s
31a0: 71 6c 28 26 73 71 6c 2c 20 22 25 73 66 6e 20 4e  ql(&sql, "%sfn N
31b0: 4f 54 20 47 4c 4f 42 20 27 25 71 2f 2a 27 20 22  OT GLOB '%q/*' "
31c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
31d0: 20 20 20 20 20 20 20 20 20 20 20 7a 53 65 70 20             zSep 
31e0: 2f 2a 73 61 66 65 2d 66 6f 72 2d 25 73 2a 2f 2c  /*safe-for-%s*/,
31f0: 20 62 6c 6f 62 5f 73 74 72 28 26 74 72 65 65 6e   blob_str(&treen
3200: 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 7d  ame));.        }
3210: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
3220: 62 6c 6f 62 5f 72 65 73 65 74 28 26 73 71 6c 29  blob_reset(&sql)
3230: 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
3240: 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
3250: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3260: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 5f 73 71    blob_append_sq
3270: 6c 28 26 73 71 6c 2c 20 22 25 73 66 6e 3c 3e 25  l(&sql, "%sfn<>%
3280: 51 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Q ",.           
3290: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 53 65               zSe
32a0: 70 20 2f 2a 73 61 66 65 2d 66 6f 72 2d 25 73 2a  p /*safe-for-%s*
32b0: 2f 2c 20 62 6c 6f 62 5f 73 74 72 28 26 74 72 65  /, blob_str(&tre
32c0: 65 6e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 7d  ename));.      }
32d0: 0a 20 20 20 20 20 20 7a 53 65 70 20 3d 20 22 41  .      zSep = "A
32e0: 4e 44 20 22 3b 0a 20 20 20 20 20 20 62 6c 6f 62  ND ";.      blob
32f0: 5f 72 65 73 65 74 28 26 74 72 65 65 6e 61 6d 65  _reset(&treename
3300: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f  );.    }.    db_
3310: 6d 75 6c 74 69 5f 65 78 65 63 28 22 25 73 22 2c  multi_exec("%s",
3320: 20 62 6c 6f 62 5f 73 71 6c 5f 74 65 78 74 28 26   blob_sql_text(&
3330: 73 71 6c 29 29 3b 0a 20 20 20 20 62 6c 6f 62 5f  sql));.    blob_
3340: 72 65 73 65 74 28 26 73 71 6c 29 3b 0a 20 20 7d  reset(&sql);.  }
3350: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 41 6c 74 65  ..  /*.  ** Alte
3360: 72 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  r the content of
3370: 20 74 68 65 20 63 68 65 63 6b 6f 75 74 20 73 6f   the checkout so
3380: 20 74 68 61 74 20 69 74 20 63 6f 6e 66 6f 72 6d   that it conform
3390: 73 20 77 69 74 68 20 74 68 65 0a 20 20 2a 2a 20  s with the.  ** 
33a0: 74 61 72 67 65 74 0a 20 20 2a 2f 0a 20 20 64 62  target.  */.  db
33b0: 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20  _prepare(&q,.   
33c0: 20 22 53 45 4c 45 43 54 20 66 6e 2c 20 69 64 76   "SELECT fn, idv
33d0: 2c 20 72 69 64 76 2c 20 69 64 74 2c 20 72 69 64  , ridv, idt, rid
33e0: 74 2c 20 63 68 6e 67 65 64 2c 20 66 6e 74 2c 22  t, chnged, fnt,"
33f0: 0a 20 20 20 20 22 20 20 20 20 20 20 20 69 73 65  .    "       ise
3400: 78 65 2c 20 69 73 6c 69 6e 6b 76 2c 20 69 73 6c  xe, islinkv, isl
3410: 69 6e 6b 74 2c 20 64 65 6c 65 74 65 64 20 46 52  inkt, deleted FR
3420: 4f 4d 20 66 76 20 4f 52 44 45 52 20 42 59 20 31  OM fv ORDER BY 1
3430: 22 0a 20 20 29 3b 0a 20 20 64 62 5f 70 72 65 70  ".  );.  db_prep
3440: 61 72 65 28 26 6d 74 69 6d 65 58 66 65 72 2c 0a  are(&mtimeXfer,.
3450: 20 20 20 20 22 55 50 44 41 54 45 20 76 66 69 6c      "UPDATE vfil
3460: 65 20 53 45 54 20 6d 74 69 6d 65 3d 28 53 45 4c  e SET mtime=(SEL
3470: 45 43 54 20 6d 74 69 6d 65 20 46 52 4f 4d 20 76  ECT mtime FROM v
3480: 66 69 6c 65 20 57 48 45 52 45 20 69 64 3d 3a 69  file WHERE id=:i
3490: 64 76 29 22 0a 20 20 20 20 22 20 57 48 45 52 45  dv)".    " WHERE
34a0: 20 69 64 3d 3a 69 64 74 22 0a 20 20 29 3b 0a 20   id=:idt".  );. 
34b0: 20 61 73 73 65 72 74 28 20 67 2e 7a 4c 6f 63 61   assert( g.zLoca
34c0: 6c 52 6f 6f 74 21 3d 30 20 29 3b 0a 20 20 61 73  lRoot!=0 );.  as
34d0: 73 65 72 74 28 20 73 74 72 6c 65 6e 28 67 2e 7a  sert( strlen(g.z
34e0: 4c 6f 63 61 6c 52 6f 6f 74 29 3e 30 20 29 3b 0a  LocalRoot)>0 );.
34f0: 20 20 61 73 73 65 72 74 28 20 67 2e 7a 4c 6f 63    assert( g.zLoc
3500: 61 6c 52 6f 6f 74 5b 73 74 72 6c 65 6e 28 67 2e  alRoot[strlen(g.
3510: 7a 4c 6f 63 61 6c 52 6f 6f 74 29 2d 31 5d 3d 3d  zLocalRoot)-1]==
3520: 27 2f 27 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  '/' );.  while( 
3530: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c  db_step(&q)==SQL
3540: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63  ITE_ROW ){.    c
3550: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
3560: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78   = db_column_tex
3570: 74 28 26 71 2c 20 30 29 3b 20 20 2f 2a 20 54 68  t(&q, 0);  /* Th
3580: 65 20 66 69 6c 65 6e 61 6d 65 20 66 72 6f 6d 20  e filename from 
3590: 72 6f 6f 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  root */.    int 
35a0: 69 64 76 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f  idv = db_column_
35b0: 69 6e 74 28 26 71 2c 20 31 29 3b 20 20 20 20 20  int(&q, 1);     
35c0: 20 20 20 20 20 20 20 20 2f 2a 20 56 46 49 4c 45          /* VFILE
35d0: 20 65 6e 74 72 79 20 66 6f 72 20 63 75 72 72 65   entry for curre
35e0: 6e 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 69  nt */.    int ri
35f0: 64 76 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69  dv = db_column_i
3600: 6e 74 28 26 71 2c 20 32 29 3b 20 20 20 20 20 20  nt(&q, 2);      
3610: 20 20 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 49        /* RecordI
3620: 44 20 66 6f 72 20 63 75 72 72 65 6e 74 20 2a 2f  D for current */
3630: 0a 20 20 20 20 69 6e 74 20 69 64 74 20 3d 20 64  .    int idt = d
3640: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c  b_column_int(&q,
3650: 20 33 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   3);            
3660: 20 2f 2a 20 56 46 49 4c 45 20 65 6e 74 72 79 20   /* VFILE entry 
3670: 66 6f 72 20 74 61 72 67 65 74 20 2a 2f 0a 20 20  for target */.  
3680: 20 20 69 6e 74 20 72 69 64 74 20 3d 20 64 62 5f    int ridt = db_
3690: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 34  column_int(&q, 4
36a0: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
36b0: 20 52 65 63 6f 72 64 49 44 20 66 6f 72 20 74 61   RecordID for ta
36c0: 72 67 65 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  rget */.    int 
36d0: 63 68 6e 67 65 64 20 3d 20 64 62 5f 63 6f 6c 75  chnged = db_colu
36e0: 6d 6e 5f 69 6e 74 28 26 71 2c 20 35 29 3b 20 20  mn_int(&q, 5);  
36f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
3700: 6e 74 20 69 73 20 65 64 69 74 65 64 20 2a 2f 0a  nt is edited */.
3710: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
3720: 7a 4e 65 77 4e 61 6d 65 20 3d 20 64 62 5f 63 6f  zNewName = db_co
3730: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 36 29 3b  lumn_text(&q,6);
3740: 2f 2a 20 4e 65 77 20 66 69 6c 65 6e 61 6d 65 20  /* New filename 
3750: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 73 65 78 65  */.    int isexe
3760: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74   = db_column_int
3770: 28 26 71 2c 20 37 29 3b 20 20 20 20 20 20 20 20  (&q, 7);        
3780: 20 20 20 2f 2a 20 45 58 45 20 70 65 72 6d 20 66     /* EXE perm f
3790: 6f 72 20 6e 65 77 20 66 69 6c 65 20 2a 2f 0a 20  or new file */. 
37a0: 20 20 20 69 6e 74 20 69 73 6c 69 6e 6b 76 20 3d     int islinkv =
37b0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26   db_column_int(&
37c0: 71 2c 20 38 29 3b 20 20 20 20 20 20 20 20 20 2f  q, 8);         /
37d0: 2a 20 49 73 20 63 75 72 72 65 6e 74 20 66 69 6c  * Is current fil
37e0: 65 20 69 73 20 61 20 6c 69 6e 6b 20 2a 2f 0a 20  e is a link */. 
37f0: 20 20 20 69 6e 74 20 69 73 6c 69 6e 6b 74 20 3d     int islinkt =
3800: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26   db_column_int(&
3810: 71 2c 20 39 29 3b 20 20 20 20 20 20 20 20 20 2f  q, 9);         /
3820: 2a 20 49 73 20 74 61 72 67 65 74 20 66 69 6c 65  * Is target file
3830: 20 69 73 20 61 20 6c 69 6e 6b 20 2a 2f 0a 20 20   is a link */.  
3840: 20 20 69 6e 74 20 64 65 6c 65 74 65 64 20 3d 20    int deleted = 
3850: 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71  db_column_int(&q
3860: 2c 20 31 30 29 3b 20 20 20 20 20 20 20 20 2f 2a  , 10);        /*
3870: 20 4d 61 72 6b 65 64 20 66 6f 72 20 64 65 6c 65   Marked for dele
3880: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  tion */.    char
3890: 20 2a 7a 46 75 6c 6c 50 61 74 68 3b 20 20 20 20   *zFullPath;    
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38b0: 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
38c0: 70 61 74 68 6e 61 6d 65 20 6f 66 20 74 68 65 20  pathname of the 
38d0: 66 69 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  file */.    char
38e0: 20 2a 7a 46 75 6c 6c 4e 65 77 50 61 74 68 3b 20   *zFullNewPath; 
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3900: 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
3910: 70 61 74 68 6e 61 6d 65 20 6f 66 20 64 65 73 74  pathname of dest
3920: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 6e 61 6d   */.    char nam
3930: 65 43 68 6e 67 3b 20 20 20 20 20 20 20 20 20 20  eChng;          
3940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3950: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
3960: 68 65 20 6e 61 6d 65 20 63 68 61 6e 67 65 64 20  he name changed 
3970: 2a 2f 0a 0a 20 20 20 20 7a 46 75 6c 6c 50 61 74  */..    zFullPat
3980: 68 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 25  h = mprintf("%s%
3990: 73 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74  s", g.zLocalRoot
39a0: 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7a 46  , zName);.    zF
39b0: 75 6c 6c 4e 65 77 50 61 74 68 20 3d 20 6d 70 72  ullNewPath = mpr
39c0: 69 6e 74 66 28 22 25 73 25 73 22 2c 20 67 2e 7a  intf("%s%s", g.z
39d0: 4c 6f 63 61 6c 52 6f 6f 74 2c 20 7a 4e 65 77 4e  LocalRoot, zNewN
39e0: 61 6d 65 29 3b 0a 20 20 20 20 6e 61 6d 65 43 68  ame);.    nameCh
39f0: 6e 67 20 3d 20 66 6f 73 73 69 6c 5f 73 74 72 63  ng = fossil_strc
3a00: 6d 70 28 7a 4e 61 6d 65 2c 20 7a 4e 65 77 4e 61  mp(zName, zNewNa
3a10: 6d 65 29 3b 0a 20 20 20 20 6e 55 70 64 61 74 65  me);.    nUpdate
3a20: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 65 6c 65  ++;.    if( dele
3a30: 74 65 64 20 29 7b 0a 20 20 20 20 20 20 64 62 5f  ted ){.      db_
3a40: 6d 75 6c 74 69 5f 65 78 65 63 28 22 55 50 44 41  multi_exec("UPDA
3a50: 54 45 20 76 66 69 6c 65 20 53 45 54 20 64 65 6c  TE vfile SET del
3a60: 65 74 65 64 3d 31 20 57 48 45 52 45 20 69 64 3d  eted=1 WHERE id=
3a70: 25 64 22 2c 20 69 64 74 29 3b 0a 20 20 20 20 7d  %d", idt);.    }
3a80: 0a 20 20 20 20 69 66 28 20 69 64 76 3e 30 20 26  .    if( idv>0 &
3a90: 26 20 72 69 64 76 3d 3d 30 20 26 26 20 69 64 74  & ridv==0 && idt
3aa0: 3e 30 20 26 26 20 72 69 64 74 3e 30 20 29 7b 0a  >0 && ridt>0 ){.
3ab0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 66 6c 69 63        /* Conflic
3ac0: 74 2e 20 20 54 68 69 73 20 66 69 6c 65 20 68 61  t.  This file ha
3ad0: 73 20 62 65 65 6e 20 61 64 64 65 64 20 74 6f 20  s been added to 
3ae0: 74 68 65 20 63 75 72 72 65 6e 74 20 63 68 65 63  the current chec
3af0: 6b 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20 62 75  kout.      ** bu
3b00: 74 20 61 6c 73 6f 20 65 78 69 73 74 73 20 69 6e  t also exists in
3b10: 20 74 68 65 20 74 61 72 67 65 74 20 63 68 65 63   the target chec
3b20: 6b 6f 75 74 2e 20 20 55 73 65 20 74 68 65 20 63  kout.  Use the c
3b30: 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 2e 0a  urrent version..
3b40: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66        */.      f
3b50: 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 43 4f 4e  ossil_print("CON
3b60: 46 4c 49 43 54 20 25 73 5c 6e 22 2c 20 7a 4e 61  FLICT %s\n", zNa
3b70: 6d 65 29 3b 0a 20 20 20 20 20 20 6e 43 6f 6e 66  me);.      nConf
3b80: 6c 69 63 74 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73  lict++;.    }els
3b90: 65 20 69 66 28 20 69 64 74 3e 30 20 26 26 20 69  e if( idt>0 && i
3ba0: 64 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  dv==0 ){.      /
3bb0: 2a 20 46 69 6c 65 20 61 64 64 65 64 20 69 6e 20  * File added in 
3bc0: 74 68 65 20 74 61 72 67 65 74 2e 20 2a 2f 0a 20  the target. */. 
3bd0: 20 20 20 20 20 69 66 28 20 66 69 6c 65 5f 69 73       if( file_is
3be0: 66 69 6c 65 5f 6f 72 5f 6c 69 6e 6b 28 7a 46 75  file_or_link(zFu
3bf0: 6c 6c 50 61 74 68 29 20 29 7b 0a 20 20 20 20 20  llPath) ){.     
3c00: 20 20 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28     fossil_print(
3c10: 22 41 44 44 20 25 73 20 2d 20 6f 76 65 72 77 72  "ADD %s - overwr
3c20: 69 74 65 73 20 61 6e 20 75 6e 6d 61 6e 61 67 65  ites an unmanage
3c30: 64 20 66 69 6c 65 5c 6e 22 2c 20 7a 4e 61 6d 65  d file\n", zName
3c40: 29 3b 0a 20 20 20 20 20 20 20 20 6e 4f 76 65 72  );.        nOver
3c50: 77 72 69 74 65 2b 2b 3b 0a 20 20 20 20 20 20 7d  write++;.      }
3c60: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 66 6f  else{.        fo
3c70: 73 73 69 6c 5f 70 72 69 6e 74 28 22 41 44 44 20  ssil_print("ADD 
3c80: 25 73 5c 6e 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  %s\n", zName);. 
3c90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
3ca0: 20 21 64 72 79 52 75 6e 46 6c 61 67 20 26 26 20   !dryRunFlag && 
3cb0: 21 69 6e 74 65 72 6e 61 6c 55 70 64 61 74 65 20  !internalUpdate 
3cc0: 29 20 75 6e 64 6f 5f 73 61 76 65 28 7a 4e 61 6d  ) undo_save(zNam
3cd0: 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 64  e);.      if( !d
3ce0: 72 79 52 75 6e 46 6c 61 67 20 29 20 76 66 69 6c  ryRunFlag ) vfil
3cf0: 65 5f 74 6f 5f 64 69 73 6b 28 30 2c 20 69 64 74  e_to_disk(0, idt
3d00: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 65 6c  , 0, 0);.    }el
3d10: 73 65 20 69 66 28 20 69 64 74 3e 30 20 26 26 20  se if( idt>0 && 
3d20: 69 64 76 3e 30 20 26 26 20 72 69 64 74 21 3d 72  idv>0 && ridt!=r
3d30: 69 64 76 20 26 26 20 28 63 68 6e 67 65 64 3d 3d  idv && (chnged==
3d40: 30 20 7c 7c 20 64 65 6c 65 74 65 64 29 20 29 7b  0 || deleted) ){
3d50: 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  .      /* The fi
3d60: 6c 65 20 69 73 20 75 6e 65 64 69 74 65 64 2e 20  le is unedited. 
3d70: 20 43 68 61 6e 67 65 20 69 74 20 74 6f 20 74 68   Change it to th
3d80: 65 20 74 61 72 67 65 74 20 76 65 72 73 69 6f 6e  e target version
3d90: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 64 65   */.      if( de
3da0: 6c 65 74 65 64 20 29 7b 0a 20 20 20 20 20 20 20  leted ){.       
3db0: 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 55   fossil_print("U
3dc0: 50 44 41 54 45 20 25 73 20 2d 20 63 68 61 6e 67  PDATE %s - chang
3dd0: 65 20 74 6f 20 75 6e 6d 61 6e 61 67 65 64 20 66  e to unmanaged f
3de0: 69 6c 65 5c 6e 22 2c 20 7a 4e 61 6d 65 29 3b 0a  ile\n", zName);.
3df0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3e00: 20 20 20 20 20 66 6f 73 73 69 6c 5f 70 72 69 6e       fossil_prin
3e10: 74 28 22 55 50 44 41 54 45 20 25 73 5c 6e 22 2c  t("UPDATE %s\n",
3e20: 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d   zName);.      }
3e30: 0a 20 20 20 20 20 20 69 66 28 20 21 64 72 79 52  .      if( !dryR
3e40: 75 6e 46 6c 61 67 20 26 26 20 21 69 6e 74 65 72  unFlag && !inter
3e50: 6e 61 6c 55 70 64 61 74 65 20 29 20 75 6e 64 6f  nalUpdate ) undo
3e60: 5f 73 61 76 65 28 7a 4e 61 6d 65 29 3b 0a 20 20  _save(zName);.  
3e70: 20 20 20 20 69 66 28 20 21 64 72 79 52 75 6e 46      if( !dryRunF
3e80: 6c 61 67 20 29 20 76 66 69 6c 65 5f 74 6f 5f 64  lag ) vfile_to_d
3e90: 69 73 6b 28 30 2c 20 69 64 74 2c 20 30 2c 20 30  isk(0, idt, 0, 0
3ea0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3eb0: 20 69 64 74 3e 30 20 26 26 20 69 64 76 3e 30 20   idt>0 && idv>0 
3ec0: 26 26 20 21 64 65 6c 65 74 65 64 20 26 26 20 66  && !deleted && f
3ed0: 69 6c 65 5f 73 69 7a 65 28 7a 46 75 6c 6c 50 61  ile_size(zFullPa
3ee0: 74 68 2c 20 52 65 70 6f 46 49 4c 45 29 3c 30 20  th, RepoFILE)<0 
3ef0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ){.      /* The 
3f00: 66 69 6c 65 20 6d 69 73 73 69 6e 67 20 66 72 6f  file missing fro
3f10: 6d 20 74 68 65 20 6c 6f 63 61 6c 20 63 68 65 63  m the local chec
3f20: 6b 2d 6f 75 74 2e 20 52 65 73 74 6f 72 65 20 69  k-out. Restore i
3f30: 74 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a  t to the.      *
3f40: 2a 20 76 65 72 73 69 6f 6e 20 74 68 61 74 20 61  * version that a
3f50: 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 74 61  ppears in the ta
3f60: 72 67 65 74 2e 20 2a 2f 0a 20 20 20 20 20 20 66  rget. */.      f
3f70: 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 55 50 44  ossil_print("UPD
3f80: 41 54 45 20 25 73 5c 6e 22 2c 20 7a 4e 61 6d 65  ATE %s\n", zName
3f90: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 64 72  );.      if( !dr
3fa0: 79 52 75 6e 46 6c 61 67 20 26 26 20 21 69 6e 74  yRunFlag && !int
3fb0: 65 72 6e 61 6c 55 70 64 61 74 65 20 29 20 75 6e  ernalUpdate ) un
3fc0: 64 6f 5f 73 61 76 65 28 7a 4e 61 6d 65 29 3b 0a  do_save(zName);.
3fd0: 20 20 20 20 20 20 69 66 28 20 21 64 72 79 52 75        if( !dryRu
3fe0: 6e 46 6c 61 67 20 29 20 76 66 69 6c 65 5f 74 6f  nFlag ) vfile_to
3ff0: 5f 64 69 73 6b 28 30 2c 20 69 64 74 2c 20 30 2c  _disk(0, idt, 0,
4000: 20 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69   0);.    }else i
4010: 66 28 20 69 64 74 3d 3d 30 20 26 26 20 69 64 76  f( idt==0 && idv
4020: 3e 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  >0 ){.      if( 
4030: 72 69 64 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ridv==0 ){.     
4040: 20 20 20 2f 2a 20 41 64 64 65 64 20 69 6e 20 63     /* Added in c
4050: 75 72 72 65 6e 74 20 63 68 65 63 6b 6f 75 74 2e  urrent checkout.
4060: 20 20 43 6f 6e 74 69 6e 75 65 20 74 6f 20 68 6f    Continue to ho
4070: 6c 64 20 74 68 65 20 66 69 6c 65 20 61 73 0a 20  ld the file as. 
4080: 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20         ** as an 
4090: 61 64 64 69 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  addition */.    
40a0: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65      db_multi_exe
40b0: 63 28 22 55 50 44 41 54 45 20 76 66 69 6c 65 20  c("UPDATE vfile 
40c0: 53 45 54 20 76 69 64 3d 25 64 20 57 48 45 52 45  SET vid=%d WHERE
40d0: 20 69 64 3d 25 64 22 2c 20 74 69 64 2c 20 69 64   id=%d", tid, id
40e0: 76 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  v);.      }else 
40f0: 69 66 28 20 63 68 6e 67 65 64 20 29 7b 0a 20 20  if( chnged ){.  
4100: 20 20 20 20 20 20 2f 2a 20 45 64 69 74 65 64 20        /* Edited 
4110: 6c 6f 63 61 6c 6c 79 20 62 75 74 20 64 65 6c 65  locally but dele
4120: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 74 61 72  ted from the tar
4130: 67 65 74 2e 20 20 44 6f 20 6e 6f 74 20 74 72 61  get.  Do not tra
4140: 63 6b 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a  ck the.        *
4150: 2a 20 66 69 6c 65 20 62 75 74 20 6b 65 65 70 20  * file but keep 
4160: 74 68 65 20 65 64 69 74 65 64 20 76 65 72 73 69  the edited versi
4170: 6f 6e 20 61 72 6f 75 6e 64 2e 20 2a 2f 0a 20 20  on around. */.  
4180: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70 72 69        fossil_pri
4190: 6e 74 28 22 43 4f 4e 46 4c 49 43 54 20 25 73 20  nt("CONFLICT %s 
41a0: 2d 20 65 64 69 74 65 64 20 6c 6f 63 61 6c 6c 79  - edited locally
41b0: 20 62 75 74 20 64 65 6c 65 74 65 64 20 62 79 20   but deleted by 
41c0: 75 70 64 61 74 65 5c 6e 22 2c 0a 20 20 20 20 20  update\n",.     
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41e0: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
41f0: 6e 43 6f 6e 66 6c 69 63 74 2b 2b 3b 0a 20 20 20  nConflict++;.   
4200: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4210: 20 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22    fossil_print("
4220: 52 45 4d 4f 56 45 20 25 73 5c 6e 22 2c 20 7a 4e  REMOVE %s\n", zN
4230: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ame);.        if
4240: 28 20 21 64 72 79 52 75 6e 46 6c 61 67 20 26 26  ( !dryRunFlag &&
4250: 20 21 69 6e 74 65 72 6e 61 6c 55 70 64 61 74 65   !internalUpdate
4260: 20 29 20 75 6e 64 6f 5f 73 61 76 65 28 7a 4e 61   ) undo_save(zNa
4270: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  me);.        if(
4280: 20 21 64 72 79 52 75 6e 46 6c 61 67 20 29 20 66   !dryRunFlag ) f
4290: 69 6c 65 5f 64 65 6c 65 74 65 28 7a 46 75 6c 6c  ile_delete(zFull
42a0: 50 61 74 68 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Path);.      }. 
42b0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69 64 74     }else if( idt
42c0: 3e 30 20 26 26 20 69 64 76 3e 30 20 26 26 20 72  >0 && idv>0 && r
42d0: 69 64 74 21 3d 72 69 64 76 20 26 26 20 63 68 6e  idt!=ridv && chn
42e0: 67 65 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ged ){.      /* 
42f0: 4d 65 72 67 65 20 74 68 65 20 63 68 61 6e 67 65  Merge the change
4300: 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  s in the current
4310: 20 74 72 65 65 20 69 6e 74 6f 20 74 68 65 20 74   tree into the t
4320: 61 72 67 65 74 20 76 65 72 73 69 6f 6e 20 2a 2f  arget version */
4330: 0a 20 20 20 20 20 20 42 6c 6f 62 20 72 2c 20 74  .      Blob r, t
4340: 2c 20 76 3b 0a 20 20 20 20 20 20 69 6e 74 20 72  , v;.      int r
4350: 63 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 61 6d  c;.      if( nam
4360: 65 43 68 6e 67 20 29 7b 0a 20 20 20 20 20 20 20  eChng ){.       
4370: 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 4d   fossil_print("M
4380: 45 52 47 45 20 25 73 20 2d 3e 20 25 73 5c 6e 22  ERGE %s -> %s\n"
4390: 2c 20 7a 4e 61 6d 65 2c 20 7a 4e 65 77 4e 61 6d  , zName, zNewNam
43a0: 65 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  e);.      }else{
43b0: 0a 20 20 20 20 20 20 20 20 66 6f 73 73 69 6c 5f  .        fossil_
43c0: 70 72 69 6e 74 28 22 4d 45 52 47 45 20 25 73 5c  print("MERGE %s\
43d0: 6e 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  n", zName);.    
43e0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 69 73    }.      if( is
43f0: 6c 69 6e 6b 76 20 7c 7c 20 69 73 6c 69 6e 6b 74  linkv || islinkt
4400: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 73 73   ){.        foss
4410: 69 6c 5f 70 72 69 6e 74 28 22 2a 2a 2a 2a 2a 20  il_print("***** 
4420: 43 61 6e 6e 6f 74 20 6d 65 72 67 65 20 73 79 6d  Cannot merge sym
4430: 6c 69 6e 6b 20 25 73 5c 6e 22 2c 20 7a 4e 65 77  link %s\n", zNew
4440: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 6e  Name);.        n
4450: 43 6f 6e 66 6c 69 63 74 2b 2b 3b 0a 20 20 20 20  Conflict++;.    
4460: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
4470: 20 75 6e 73 69 67 6e 65 64 20 6d 65 72 67 65 46   unsigned mergeF
4480: 6c 61 67 73 20 3d 20 64 72 79 52 75 6e 46 6c 61  lags = dryRunFla
4490: 67 20 3f 20 4d 45 52 47 45 5f 44 52 59 52 55 4e  g ? MERGE_DRYRUN
44a0: 20 3a 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66   : 0;.        if
44b0: 28 20 21 64 72 79 52 75 6e 46 6c 61 67 20 26 26  ( !dryRunFlag &&
44c0: 20 21 69 6e 74 65 72 6e 61 6c 55 70 64 61 74 65   !internalUpdate
44d0: 20 29 20 75 6e 64 6f 5f 73 61 76 65 28 7a 4e 61   ) undo_save(zNa
44e0: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e  me);.        con
44f0: 74 65 6e 74 5f 67 65 74 28 72 69 64 74 2c 20 26  tent_get(ridt, &
4500: 74 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74  t);.        cont
4510: 65 6e 74 5f 67 65 74 28 72 69 64 76 2c 20 26 76  ent_get(ridv, &v
4520: 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
4530: 6d 65 72 67 65 5f 33 77 61 79 28 26 76 2c 20 7a  merge_3way(&v, z
4540: 46 75 6c 6c 50 61 74 68 2c 20 26 74 2c 20 26 72  FullPath, &t, &r
4550: 2c 20 6d 65 72 67 65 46 6c 61 67 73 29 3b 0a 20  , mergeFlags);. 
4560: 20 20 20 20 20 20 20 69 66 28 20 72 63 3e 3d 30         if( rc>=0
4570: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
4580: 28 20 21 64 72 79 52 75 6e 46 6c 61 67 20 29 7b  ( !dryRunFlag ){
4590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f  .            blo
45a0: 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69 6c 65 28  b_write_to_file(
45b0: 26 72 2c 20 7a 46 75 6c 6c 4e 65 77 50 61 74 68  &r, zFullNewPath
45c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  );.            f
45d0: 69 6c 65 5f 73 65 74 65 78 65 28 7a 46 75 6c 6c  ile_setexe(zFull
45e0: 4e 65 77 50 61 74 68 2c 20 69 73 65 78 65 29 3b  NewPath, isexe);
45f0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
4600: 20 20 20 20 20 20 20 69 66 28 20 72 63 3e 30 20         if( rc>0 
4610: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ){.            f
4620: 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 2a 2a 2a  ossil_print("***
4630: 2a 2a 20 25 64 20 6d 65 72 67 65 20 63 6f 6e 66  ** %d merge conf
4640: 6c 69 63 74 73 20 69 6e 20 25 73 5c 6e 22 2c 20  licts in %s\n", 
4650: 72 63 2c 20 7a 4e 65 77 4e 61 6d 65 29 3b 0a 20  rc, zNewName);. 
4660: 20 20 20 20 20 20 20 20 20 20 20 6e 43 6f 6e 66             nConf
4670: 6c 69 63 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20  lict++;.        
4680: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
4690: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  e{.          if(
46a0: 20 21 64 72 79 52 75 6e 46 6c 61 67 20 29 7b 0a   !dryRunFlag ){.
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62              blob
46c0: 5f 77 72 69 74 65 5f 74 6f 5f 66 69 6c 65 28 26  _write_to_file(&
46d0: 74 2c 20 7a 46 75 6c 6c 4e 65 77 50 61 74 68 29  t, zFullNewPath)
46e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69  ;.            fi
46f0: 6c 65 5f 73 65 74 65 78 65 28 7a 46 75 6c 6c 4e  le_setexe(zFullN
4700: 65 77 50 61 74 68 2c 20 69 73 65 78 65 29 3b 0a  ewPath, isexe);.
4710: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
4720: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70 72 69        fossil_pri
4730: 6e 74 28 22 2a 2a 2a 2a 2a 20 43 61 6e 6e 6f 74  nt("***** Cannot
4740: 20 6d 65 72 67 65 20 62 69 6e 61 72 79 20 66 69   merge binary fi
4750: 6c 65 20 25 73 5c 6e 22 2c 20 7a 4e 65 77 4e 61  le %s\n", zNewNa
4760: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6e  me);.          n
4770: 43 6f 6e 66 6c 69 63 74 2b 2b 3b 0a 20 20 20 20  Conflict++;.    
4780: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
4790: 20 20 20 20 69 66 28 20 6e 61 6d 65 43 68 6e 67      if( nameChng
47a0: 20 26 26 20 21 64 72 79 52 75 6e 46 6c 61 67 20   && !dryRunFlag 
47b0: 29 20 66 69 6c 65 5f 64 65 6c 65 74 65 28 7a 46  ) file_delete(zF
47c0: 75 6c 6c 50 61 74 68 29 3b 0a 20 20 20 20 20 20  ullPath);.      
47d0: 62 6c 6f 62 5f 72 65 73 65 74 28 26 76 29 3b 0a  blob_reset(&v);.
47e0: 20 20 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74        blob_reset
47f0: 28 26 74 29 3b 0a 20 20 20 20 20 20 62 6c 6f 62  (&t);.      blob
4800: 5f 72 65 73 65 74 28 26 72 29 3b 0a 20 20 20 20  _reset(&r);.    
4810: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 55 70  }else{.      nUp
4820: 64 61 74 65 2d 2d 3b 0a 20 20 20 20 20 20 69 66  date--;.      if
4830: 28 20 63 68 6e 67 65 64 20 29 7b 0a 20 20 20 20  ( chnged ){.    
4840: 20 20 20 20 69 66 28 20 76 65 72 62 6f 73 65 46      if( verboseF
4850: 6c 61 67 20 29 20 66 6f 73 73 69 6c 5f 70 72 69  lag ) fossil_pri
4860: 6e 74 28 22 45 44 49 54 45 44 20 25 73 5c 6e 22  nt("EDITED %s\n"
4870: 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
4880: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
4890: 62 5f 62 69 6e 64 5f 69 6e 74 28 26 6d 74 69 6d  b_bind_int(&mtim
48a0: 65 58 66 65 72 2c 20 22 3a 69 64 76 22 2c 20 69  eXfer, ":idv", i
48b0: 64 76 29 3b 0a 20 20 20 20 20 20 20 20 64 62 5f  dv);.        db_
48c0: 62 69 6e 64 5f 69 6e 74 28 26 6d 74 69 6d 65 58  bind_int(&mtimeX
48d0: 66 65 72 2c 20 22 3a 69 64 74 22 2c 20 69 64 74  fer, ":idt", idt
48e0: 29 3b 0a 20 20 20 20 20 20 20 20 64 62 5f 73 74  );.        db_st
48f0: 65 70 28 26 6d 74 69 6d 65 58 66 65 72 29 3b 0a  ep(&mtimeXfer);.
4900: 20 20 20 20 20 20 20 20 64 62 5f 72 65 73 65 74          db_reset
4910: 28 26 6d 74 69 6d 65 58 66 65 72 29 3b 0a 20 20  (&mtimeXfer);.  
4920: 20 20 20 20 20 20 69 66 28 20 76 65 72 62 6f 73        if( verbos
4930: 65 46 6c 61 67 20 29 20 66 6f 73 73 69 6c 5f 70  eFlag ) fossil_p
4940: 72 69 6e 74 28 22 55 4e 43 48 41 4e 47 45 44 20  rint("UNCHANGED 
4950: 25 73 5c 6e 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  %s\n", zName);. 
4960: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4970: 20 66 72 65 65 28 7a 46 75 6c 6c 50 61 74 68 29   free(zFullPath)
4980: 3b 0a 20 20 20 20 66 72 65 65 28 7a 46 75 6c 6c  ;.    free(zFull
4990: 4e 65 77 50 61 74 68 29 3b 0a 20 20 7d 0a 20 20  NewPath);.  }.  
49a0: 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b  db_finalize(&q);
49b0: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26  .  db_finalize(&
49c0: 6d 74 69 6d 65 58 66 65 72 29 3b 0a 20 20 66 6f  mtimeXfer);.  fo
49d0: 73 73 69 6c 5f 70 72 69 6e 74 28 22 25 2e 37 39  ssil_print("%.79
49e0: 63 5c 6e 22 2c 27 2d 27 29 3b 0a 20 20 69 66 28  c\n",'-');.  if(
49f0: 20 6e 55 70 64 61 74 65 3d 3d 30 20 29 7b 0a 20   nUpdate==0 ){. 
4a00: 20 20 20 73 68 6f 77 5f 63 6f 6d 6d 6f 6e 5f 69     show_common_i
4a10: 6e 66 6f 28 74 69 64 2c 20 22 63 68 65 63 6b 6f  nfo(tid, "checko
4a20: 75 74 3a 22 2c 20 31 2c 20 30 29 3b 0a 20 20 20  ut:", 1, 0);.   
4a30: 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 25   fossil_print("%
4a40: 2d 31 33 73 20 4e 6f 6e 65 2e 20 41 6c 72 65 61  -13s None. Alrea
4a50: 64 79 20 75 70 2d 74 6f 2d 64 61 74 65 5c 6e 22  dy up-to-date\n"
4a60: 2c 20 22 63 68 61 6e 67 65 73 3a 22 29 3b 0a 20  , "changes:");. 
4a70: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 68 6f 77   }else{.    show
4a80: 5f 63 6f 6d 6d 6f 6e 5f 69 6e 66 6f 28 74 69 64  _common_info(tid
4a90: 2c 20 22 75 70 64 61 74 65 64 2d 74 6f 3a 22 2c  , "updated-to:",
4aa0: 20 31 2c 20 30 29 3b 0a 20 20 20 20 66 6f 73 73   1, 0);.    foss
4ab0: 69 6c 5f 70 72 69 6e 74 28 22 25 2d 31 33 73 20  il_print("%-13s 
4ac0: 25 64 20 66 69 6c 65 25 73 20 6d 6f 64 69 66 69  %d file%s modifi
4ad0: 65 64 2e 5c 6e 22 2c 20 22 63 68 61 6e 67 65 73  ed.\n", "changes
4ae0: 3a 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  :",.            
4af0: 20 20 20 20 20 6e 55 70 64 61 74 65 2c 20 6e 55       nUpdate, nU
4b00: 70 64 61 74 65 3e 31 20 3f 20 22 73 22 20 3a 20  pdate>1 ? "s" : 
4b10: 22 22 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  "");.  }..  /* R
4b20: 65 70 6f 72 74 20 6f 6e 20 63 6f 6e 66 6c 69 63  eport on conflic
4b30: 74 73 0a 20 20 2a 2f 0a 20 20 69 66 28 20 21 64  ts.  */.  if( !d
4b40: 72 79 52 75 6e 46 6c 61 67 20 29 7b 0a 20 20 20  ryRunFlag ){.   
4b50: 20 53 74 6d 74 20 71 3b 0a 20 20 20 20 69 6e 74   Stmt q;.    int
4b60: 20 6e 4d 65 72 67 65 20 3d 20 30 3b 0a 20 20 20   nMerge = 0;.   
4b70: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20   db_prepare(&q, 
4b80: 22 53 45 4c 45 43 54 20 75 75 69 64 2c 20 69 64  "SELECT uuid, id
4b90: 20 46 52 4f 4d 20 76 6d 65 72 67 65 20 4a 4f 49   FROM vmerge JOI
4ba0: 4e 20 62 6c 6f 62 20 4f 4e 20 6d 65 72 67 65 3d  N blob ON merge=
4bb0: 72 69 64 22 0a 20 20 20 20 20 20 20 20 20 20 20  rid".           
4bc0: 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20          " WHERE 
4bd0: 69 64 3c 3d 30 22 29 3b 0a 20 20 20 20 77 68 69  id<=0");.    whi
4be0: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d  le( db_step(&q)=
4bf0: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
4c00: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
4c10: 2a 7a 4c 61 62 65 6c 20 3d 20 22 6d 65 72 67 65  *zLabel = "merge
4c20: 22 3b 0a 20 20 20 20 20 20 73 77 69 74 63 68 28  ";.      switch(
4c30: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26   db_column_int(&
4c40: 71 2c 20 31 29 20 29 7b 0a 20 20 20 20 20 20 20  q, 1) ){.       
4c50: 20 63 61 73 65 20 2d 31 3a 20 20 7a 4c 61 62 65   case -1:  zLabe
4c60: 6c 20 3d 20 22 63 68 65 72 72 79 70 69 63 6b 20  l = "cherrypick 
4c70: 6d 65 72 67 65 22 3b 20 62 72 65 61 6b 3b 0a 20  merge"; break;. 
4c80: 20 20 20 20 20 20 20 63 61 73 65 20 2d 32 3a 20         case -2: 
4c90: 20 7a 4c 61 62 65 6c 20 3d 20 22 62 61 63 6b 6f   zLabel = "backo
4ca0: 75 74 20 6d 65 72 67 65 22 3b 20 20 20 20 62 72  ut merge";    br
4cb0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
4cc0: 20 20 20 66 6f 73 73 69 6c 5f 77 61 72 6e 69 6e     fossil_warnin
4cd0: 67 28 22 75 6e 63 6f 6d 6d 69 74 74 65 64 20 25  g("uncommitted %
4ce0: 73 20 61 67 61 69 6e 73 74 20 25 53 2e 22 2c 0a  s against %S.",.
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 20 20 20 20 20 7a 4c 61 62 65 6c 2c 20 64 62 5f       zLabel, db_
4d10: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20  column_text(&q, 
4d20: 30 29 29 3b 0a 20 20 20 20 20 20 6e 4d 65 72 67  0));.      nMerg
4d30: 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  e++;.    }.    d
4d40: 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a  b_finalize(&q);.
4d50: 20 20 20 20 6c 65 61 66 5f 61 6d 62 69 67 75 69      leaf_ambigui
4d60: 74 79 5f 77 61 72 6e 69 6e 67 28 74 69 64 2c 20  ty_warning(tid, 
4d70: 74 69 64 29 3b 0a 0a 20 20 20 20 69 66 28 20 6e  tid);..    if( n
4d80: 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
4d90: 20 20 69 66 28 20 69 6e 74 65 72 6e 61 6c 55 70    if( internalUp
4da0: 64 61 74 65 20 29 7b 0a 20 20 20 20 20 20 20 20  date ){.        
4db0: 69 6e 74 65 72 6e 61 6c 43 6f 6e 66 6c 69 63 74  internalConflict
4dc0: 43 6e 74 20 3d 20 6e 43 6f 6e 66 6c 69 63 74 3b  Cnt = nConflict;
4dd0: 0a 20 20 20 20 20 20 20 20 6e 43 6f 6e 66 6c 69  .        nConfli
4de0: 63 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  ct = 0;.      }e
4df0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 66 6f 73  lse{.        fos
4e00: 73 69 6c 5f 77 61 72 6e 69 6e 67 28 22 57 41 52  sil_warning("WAR
4e10: 4e 49 4e 47 3a 20 25 64 20 6d 65 72 67 65 20 63  NING: %d merge c
4e20: 6f 6e 66 6c 69 63 74 73 22 2c 20 6e 43 6f 6e 66  onflicts", nConf
4e30: 6c 69 63 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  lict);.      }. 
4e40: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 4f 76     }.    if( nOv
4e50: 65 72 77 72 69 74 65 20 29 7b 0a 20 20 20 20 20  erwrite ){.     
4e60: 20 66 6f 73 73 69 6c 5f 77 61 72 6e 69 6e 67 28   fossil_warning(
4e70: 22 57 41 52 4e 49 4e 47 3a 20 25 64 20 75 6e 6d  "WARNING: %d unm
4e80: 61 6e 61 67 65 64 20 66 69 6c 65 73 20 77 65 72  anaged files wer
4e90: 65 20 6f 76 65 72 77 72 69 74 74 65 6e 22 2c 0a  e overwritten",.
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4eb0: 20 20 20 20 20 6e 4f 76 65 72 77 72 69 74 65 29       nOverwrite)
4ec0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
4ed0: 6e 4d 65 72 67 65 20 29 7b 0a 20 20 20 20 20 20  nMerge ){.      
4ee0: 66 6f 73 73 69 6c 5f 77 61 72 6e 69 6e 67 28 22  fossil_warning("
4ef0: 57 41 52 4e 49 4e 47 3a 20 25 64 20 75 6e 63 6f  WARNING: %d unco
4f00: 6d 6d 69 74 74 65 64 20 70 72 69 6f 72 20 6d 65  mmitted prior me
4f10: 72 67 65 73 22 2c 20 6e 4d 65 72 67 65 29 3b 0a  rges", nMerge);.
4f20: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 0a      }.  }..  /*.
4f30: 20 20 2a 2a 20 43 6c 65 61 6e 20 75 70 20 74 68    ** Clean up th
4f40: 65 20 6d 69 64 20 61 6e 64 20 70 69 64 20 56 46  e mid and pid VF
4f50: 49 4c 45 20 65 6e 74 72 69 65 73 2e 20 20 54 68  ILE entries.  Th
4f60: 65 6e 20 63 6f 6d 6d 69 74 20 74 68 65 20 63 68  en commit the ch
4f70: 61 6e 67 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66  anges..  */.  if
4f80: 28 20 64 72 79 52 75 6e 46 6c 61 67 20 29 7b 0a  ( dryRunFlag ){.
4f90: 20 20 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73      db_end_trans
4fa0: 61 63 74 69 6f 6e 28 31 29 3b 20 20 2f 2a 20 57  action(1);  /* W
4fb0: 69 74 68 20 2d 2d 64 72 79 2d 72 75 6e 2c 20 72  ith --dry-run, r
4fc0: 6f 6c 6c 62 61 63 6b 20 63 68 61 6e 67 65 73 20  ollback changes 
4fd0: 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
4fe0: 65 6e 73 75 72 65 5f 65 6d 70 74 79 5f 64 69 72  ensure_empty_dir
4ff0: 73 5f 63 72 65 61 74 65 64 28 29 3b 0a 20 20 20  s_created();.   
5000: 20 69 66 28 20 67 2e 61 72 67 63 3c 3d 33 20 29   if( g.argc<=3 )
5010: 7b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  {.      /* All f
5020: 69 6c 65 73 20 75 70 64 61 74 65 64 2e 20 20 53  iles updated.  S
5030: 68 69 66 74 20 74 68 65 20 63 75 72 72 65 6e 74  hift the current
5040: 20 63 68 65 63 6b 6f 75 74 20 74 6f 20 74 68 65   checkout to the
5050: 20 74 61 72 67 65 74 2e 20 2a 2f 0a 20 20 20 20   target. */.    
5060: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28    db_multi_exec(
5070: 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 76 66 69  "DELETE FROM vfi
5080: 6c 65 20 57 48 45 52 45 20 76 69 64 21 3d 25 64  le WHERE vid!=%d
5090: 22 2c 20 74 69 64 29 3b 0a 20 20 20 20 20 20 63  ", tid);.      c
50a0: 68 65 63 6b 6f 75 74 5f 73 65 74 5f 61 6c 6c 5f  heckout_set_all_
50b0: 65 78 65 28 74 69 64 29 3b 0a 20 20 20 20 20 20  exe(tid);.      
50c0: 6d 61 6e 69 66 65 73 74 5f 74 6f 5f 64 69 73 6b  manifest_to_disk
50d0: 28 74 69 64 29 3b 0a 20 20 20 20 20 20 64 62 5f  (tid);.      db_
50e0: 6c 73 65 74 5f 69 6e 74 28 22 63 68 65 63 6b 6f  lset_int("checko
50f0: 75 74 22 2c 20 74 69 64 29 3b 0a 20 20 20 20 7d  ut", tid);.    }
5100: 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 41  else{.      /* A
5110: 20 73 75 62 73 65 74 20 6f 66 20 66 69 6c 65 73   subset of files
5120: 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
5130: 65 64 20 6f 75 74 2e 20 20 4b 65 65 70 20 74 68  ed out.  Keep th
5140: 65 20 63 75 72 72 65 6e 74 0a 20 20 20 20 20 20  e current.      
5150: 2a 2a 20 63 68 65 63 6b 6f 75 74 20 75 6e 63 68  ** checkout unch
5160: 61 6e 67 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  anged. */.      
5170: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 44  db_multi_exec("D
5180: 45 4c 45 54 45 20 46 52 4f 4d 20 76 66 69 6c 65  ELETE FROM vfile
5190: 20 57 48 45 52 45 20 76 69 64 21 3d 25 64 22 2c   WHERE vid!=%d",
51a0: 20 76 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20   vid);.    }.   
51b0: 20 69 66 28 20 21 69 6e 74 65 72 6e 61 6c 55 70   if( !internalUp
51c0: 64 61 74 65 20 29 20 75 6e 64 6f 5f 66 69 6e 69  date ) undo_fini
51d0: 73 68 28 29 3b 0a 20 20 20 20 69 66 28 20 73 65  sh();.    if( se
51e0: 74 6d 74 69 6d 65 46 6c 61 67 20 29 20 76 66 69  tmtimeFlag ) vfi
51f0: 6c 65 5f 63 68 65 63 6b 5f 73 69 67 6e 61 74 75  le_check_signatu
5200: 72 65 28 74 69 64 2c 20 43 4b 53 49 47 5f 53 45  re(tid, CKSIG_SE
5210: 54 4d 54 49 4d 45 29 3b 0a 20 20 20 20 64 62 5f  TMTIME);.    db_
5220: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28  end_transaction(
5230: 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  0);.  }.}../*.**
5240: 20 43 72 65 61 74 65 20 65 6d 70 74 79 20 64 69   Create empty di
5250: 72 65 63 74 6f 72 69 65 73 20 73 70 65 63 69 66  rectories specif
5260: 69 65 64 20 62 79 20 74 68 65 20 65 6d 70 74 79  ied by the empty
5270: 2d 64 69 72 73 20 73 65 74 74 69 6e 67 2e 0a 2a  -dirs setting..*
5280: 2f 0a 76 6f 69 64 20 65 6e 73 75 72 65 5f 65 6d  /.void ensure_em
5290: 70 74 79 5f 64 69 72 73 5f 63 72 65 61 74 65 64  pty_dirs_created
52a0: 28 76 6f 69 64 29 7b 0a 20 20 63 68 61 72 20 2a  (void){.  char *
52b0: 7a 45 6d 70 74 79 44 69 72 73 20 3d 20 64 62 5f  zEmptyDirs = db_
52c0: 67 65 74 28 22 65 6d 70 74 79 2d 64 69 72 73 22  get("empty-dirs"
52d0: 2c 20 30 29 3b 0a 20 20 69 66 28 20 7a 45 6d 70  , 0);.  if( zEmp
52e0: 74 79 44 69 72 73 21 3d 30 20 29 7b 0a 20 20 20  tyDirs!=0 ){.   
52f0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 42 6c 6f 62   int i;.    Blob
5300: 20 64 69 72 4e 61 6d 65 3b 0a 20 20 20 20 42 6c   dirName;.    Bl
5310: 6f 62 20 64 69 72 73 4c 69 73 74 3b 0a 0a 20 20  ob dirsList;..  
5320: 20 20 7a 45 6d 70 74 79 44 69 72 73 20 3d 20 66    zEmptyDirs = f
5330: 6f 73 73 69 6c 5f 73 74 72 64 75 70 28 7a 45 6d  ossil_strdup(zEm
5340: 70 74 79 44 69 72 73 29 3b 0a 20 20 20 20 66 6f  ptyDirs);.    fo
5350: 72 28 69 3d 30 3b 20 7a 45 6d 70 74 79 44 69 72  r(i=0; zEmptyDir
5360: 73 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  s[i]; i++){.    
5370: 20 20 69 66 28 20 7a 45 6d 70 74 79 44 69 72 73    if( zEmptyDirs
5380: 5b 69 5d 3d 3d 27 2c 27 20 29 20 7a 45 6d 70 74  [i]==',' ) zEmpt
5390: 79 44 69 72 73 5b 69 5d 20 3d 20 27 20 27 3b 0a  yDirs[i] = ' ';.
53a0: 20 20 20 20 7d 0a 20 20 20 20 62 6c 6f 62 5f 69      }.    blob_i
53b0: 6e 69 74 28 26 64 69 72 73 4c 69 73 74 2c 20 7a  nit(&dirsList, z
53c0: 45 6d 70 74 79 44 69 72 73 2c 20 2d 31 29 3b 0a  EmptyDirs, -1);.
53d0: 20 20 20 20 77 68 69 6c 65 28 20 62 6c 6f 62 5f      while( blob_
53e0: 74 6f 6b 65 6e 28 26 64 69 72 73 4c 69 73 74 2c  token(&dirsList,
53f0: 20 26 64 69 72 4e 61 6d 65 29 20 29 7b 0a 20 20   &dirName) ){.  
5400: 20 20 20 20 63 68 61 72 20 2a 7a 44 69 72 20 3d      char *zDir =
5410: 20 62 6c 6f 62 5f 73 74 72 28 26 64 69 72 4e 61   blob_str(&dirNa
5420: 6d 65 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20  me);.      char 
5430: 2a 7a 50 61 74 68 20 3d 20 6d 70 72 69 6e 74 66  *zPath = mprintf
5440: 28 22 25 73 2f 25 73 22 2c 20 67 2e 7a 4c 6f 63  ("%s/%s", g.zLoc
5450: 61 6c 52 6f 6f 74 2c 20 7a 44 69 72 29 3b 0a 20  alRoot, zDir);. 
5460: 20 20 20 20 20 73 77 69 74 63 68 28 20 66 69 6c       switch( fil
5470: 65 5f 69 73 64 69 72 28 7a 50 61 74 68 2c 20 52  e_isdir(zPath, R
5480: 65 70 6f 46 49 4c 45 29 20 29 7b 0a 20 20 20 20  epoFILE) ){.    
5490: 20 20 20 20 63 61 73 65 20 30 3a 20 7b 20 2f 2a      case 0: { /*
54a0: 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74 20 2a   doesn't exist *
54b0: 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6f 73 73  /.          foss
54c0: 69 6c 5f 66 72 65 65 28 7a 50 61 74 68 29 3b 0a  il_free(zPath);.
54d0: 20 20 20 20 20 20 20 20 20 20 7a 50 61 74 68 20            zPath 
54e0: 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 2f 25 73  = mprintf("%s/%s
54f0: 2f 78 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f  /x", g.zLocalRoo
5500: 74 2c 20 7a 44 69 72 29 3b 0a 20 20 20 20 20 20  t, zDir);.      
5510: 20 20 20 20 69 66 28 20 66 69 6c 65 5f 6d 6b 66      if( file_mkf
5520: 6f 6c 64 65 72 28 7a 50 61 74 68 2c 20 52 65 70  older(zPath, Rep
5530: 6f 46 49 4c 45 2c 20 30 2c 20 31 29 21 3d 30 20  oFILE, 0, 1)!=0 
5540: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
5550: 66 6f 73 73 69 6c 5f 77 61 72 6e 69 6e 67 28 22  fossil_warning("
5560: 63 6f 75 6c 64 6e 27 74 20 63 72 65 61 74 65 20  couldn't create 
5570: 64 69 72 65 63 74 6f 72 79 20 25 73 20 61 73 20  directory %s as 
5580: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 65               "re
55a0: 71 75 69 72 65 64 20 62 79 20 65 6d 70 74 79 2d  quired by empty-
55b0: 64 69 72 73 20 73 65 74 74 69 6e 67 22 2c 20 7a  dirs setting", z
55c0: 44 69 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Dir);.          
55d0: 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
55e0: 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
55f0: 20 20 20 20 20 63 61 73 65 20 31 3a 20 7b 20 2f       case 1: { /
5600: 2a 20 65 78 69 73 74 73 2c 20 61 6e 64 20 69 73  * exists, and is
5610: 20 61 20 64 69 72 65 63 74 6f 72 79 20 2a 2f 0a   a directory */.
5620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 64 6f 20            /* do 
5630: 6e 6f 74 68 69 6e 67 20 2d 20 72 65 71 75 69 72  nothing - requir
5640: 65 64 20 64 69 72 65 63 74 6f 72 79 20 65 78 69  ed directory exi
5650: 73 74 73 20 61 6c 72 65 61 64 79 20 2a 2f 0a 20  sts already */. 
5660: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
5670: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5680: 20 20 63 61 73 65 20 32 3a 20 7b 20 2f 2a 20 65    case 2: { /* e
5690: 78 69 73 74 73 2c 20 62 75 74 20 69 73 6e 27 74  xists, but isn't
56a0: 20 61 20 64 69 72 65 63 74 6f 72 79 20 2a 2f 0a   a directory */.
56b0: 20 20 20 20 20 20 20 20 20 20 66 6f 73 73 69 6c            fossil
56c0: 5f 77 61 72 6e 69 6e 67 28 22 66 69 6c 65 20 25  _warning("file %
56d0: 73 20 66 6f 75 6e 64 2c 20 62 75 74 20 61 20 64  s found, but a d
56e0: 69 72 65 63 74 6f 72 79 20 69 73 20 72 65 71 75  irectory is requ
56f0: 69 72 65 64 20 22 0a 20 20 20 20 20 20 20 20 20  ired ".         
5700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5710: 22 62 79 20 65 6d 70 74 79 2d 64 69 72 73 20 73  "by empty-dirs s
5720: 65 74 74 69 6e 67 22 2c 20 7a 44 69 72 29 3b 0a  etting", zDir);.
5730: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5740: 7d 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 66  }.      fossil_f
5750: 72 65 65 28 7a 50 61 74 68 29 3b 0a 20 20 20 20  ree(zPath);.    
5760: 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 64 69    blob_reset(&di
5770: 72 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20  rName);.    }.  
5780: 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 64 69    blob_reset(&di
5790: 72 73 4c 69 73 74 29 3b 0a 20 20 20 20 66 6f 73  rsList);.    fos
57a0: 73 69 6c 5f 66 72 65 65 28 7a 45 6d 70 74 79 44  sil_free(zEmptyD
57b0: 69 72 73 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  irs);.  }.}../*.
57c0: 2a 2a 20 47 65 74 20 74 68 65 20 6d 61 6e 69 66  ** Get the manif
57d0: 65 73 74 20 72 65 63 6f 72 64 20 66 6f 72 20 61  est record for a
57e0: 20 67 69 76 65 6e 20 72 65 76 69 73 69 6f 6e 2c   given revision,
57f0: 20 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20   or the current 
5800: 63 68 65 63 6b 6f 75 74 20 69 66 0a 2a 2a 20 7a  checkout if.** z
5810: 52 65 76 69 73 69 6f 6e 20 69 73 20 4e 55 4c 4c  Revision is NULL
5820: 2e 0a 2a 2f 0a 4d 61 6e 69 66 65 73 74 20 2a 68  ..*/.Manifest *h
5830: 69 73 74 6f 72 69 63 61 6c 5f 6d 61 6e 69 66 65  istorical_manife
5840: 73 74 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  st(.  const char
5850: 20 2a 7a 52 65 76 69 73 69 6f 6e 20 20 20 20 2f   *zRevision    /
5860: 2a 20 54 68 65 20 63 68 65 63 6b 2d 69 6e 20 74  * The check-in t
5870: 6f 20 71 75 65 72 79 2c 20 6f 72 20 4e 55 4c 4c  o query, or NULL
5880: 20 66 6f 72 20 63 75 72 72 65 6e 74 20 2a 2f 0a   for current */.
5890: 29 7b 0a 20 20 69 6e 74 20 76 69 64 3b 0a 20 20  ){.  int vid;.  
58a0: 4d 61 6e 69 66 65 73 74 20 2a 70 4d 61 6e 69 66  Manifest *pManif
58b0: 65 73 74 3b 0a 0a 20 20 2f 2a 20 44 65 74 65 72  est;..  /* Deter
58c0: 6d 69 6e 65 20 74 68 65 20 63 68 65 63 6b 2d 69  mine the check-i
58d0: 6e 20 6d 61 6e 69 66 65 73 74 20 61 72 74 69 66  n manifest artif
58e0: 61 63 74 20 49 44 2e 20 20 50 61 6e 69 63 20 6f  act ID.  Panic o
58f0: 6e 20 66 61 69 6c 75 72 65 2e 20 2a 2f 0a 20 20  n failure. */.  
5900: 69 66 28 20 7a 52 65 76 69 73 69 6f 6e 20 29 7b  if( zRevision ){
5910: 0a 20 20 20 20 76 69 64 20 3d 20 6e 61 6d 65 5f  .    vid = name_
5920: 74 6f 5f 74 79 70 65 64 5f 72 69 64 28 7a 52 65  to_typed_rid(zRe
5930: 76 69 73 69 6f 6e 2c 20 22 63 69 22 29 3b 0a 20  vision, "ci");. 
5940: 20 7d 65 6c 73 65 20 69 66 28 20 21 67 2e 6c 6f   }else if( !g.lo
5950: 63 61 6c 4f 70 65 6e 20 29 7b 0a 20 20 20 20 76  calOpen ){.    v
5960: 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f 74 79 70  id = name_to_typ
5970: 65 64 5f 72 69 64 28 64 62 5f 67 65 74 28 22 6d  ed_rid(db_get("m
5980: 61 69 6e 2d 62 72 61 6e 63 68 22 2c 20 22 74 72  ain-branch", "tr
5990: 75 6e 6b 22 29 2c 20 22 63 69 22 29 3b 0a 20 20  unk"), "ci");.  
59a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 69 64 20 3d  }else{.    vid =
59b0: 20 64 62 5f 6c 67 65 74 5f 69 6e 74 28 22 63 68   db_lget_int("ch
59c0: 65 63 6b 6f 75 74 22 2c 20 30 29 3b 0a 20 20 20  eckout", 0);.   
59d0: 20 69 66 28 20 21 69 73 5f 61 5f 76 65 72 73 69   if( !is_a_versi
59e0: 6f 6e 28 76 69 64 29 20 29 7b 0a 20 20 20 20 20  on(vid) ){.     
59f0: 20 7a 52 65 76 69 73 69 6f 6e 20 3d 20 64 62 5f   zRevision = db_
5a00: 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20  text(0, "SELECT 
5a10: 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57  uuid FROM blob W
5a20: 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 76 69  HERE rid=%d", vi
5a30: 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52  d);.      if( zR
5a40: 65 76 69 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20  evision ){.     
5a50: 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28     fossil_fatal(
5a60: 22 63 68 65 63 6b 6f 75 74 20 61 72 74 69 66 61  "checkout artifa
5a70: 63 74 20 69 73 20 6e 6f 74 20 61 20 63 68 65 63  ct is not a chec
5a80: 6b 2d 69 6e 3a 20 25 73 22 2c 20 7a 52 65 76 69  k-in: %s", zRevi
5a90: 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 7d 65 6c  sion);.      }el
5aa0: 73 65 7b 0a 20 20 20 20 20 20 20 20 66 6f 73 73  se{.        foss
5ab0: 69 6c 5f 66 61 74 61 6c 28 22 69 6e 76 61 6c 69  il_fatal("invali
5ac0: 64 20 63 68 65 63 6b 6f 75 74 20 61 72 74 69 66  d checkout artif
5ad0: 61 63 74 20 49 44 3a 20 25 64 22 2c 20 76 69 64  act ID: %d", vid
5ae0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5af0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 61 72 73 65  .  }..  /* Parse
5b00: 20 74 68 65 20 6d 61 6e 69 66 65 73 74 2c 20 67   the manifest, g
5b10: 69 76 65 6e 20 69 74 73 20 61 72 74 69 66 61 63  iven its artifac
5b20: 74 20 49 44 2e 20 20 50 61 6e 69 63 20 6f 6e 20  t ID.  Panic on 
5b30: 66 61 69 6c 75 72 65 2e 20 2a 2f 0a 20 20 69 66  failure. */.  if
5b40: 28 20 21 28 70 4d 61 6e 69 66 65 73 74 20 3d 20  ( !(pManifest = 
5b50: 6d 61 6e 69 66 65 73 74 5f 67 65 74 28 76 69 64  manifest_get(vid
5b60: 2c 20 43 46 54 59 50 45 5f 4d 41 4e 49 46 45 53  , CFTYPE_MANIFES
5b70: 54 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 69 66  T, 0)) ){.    if
5b80: 28 20 7a 52 65 76 69 73 69 6f 6e 20 29 7b 0a 20  ( zRevision ){. 
5b90: 20 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61       fossil_fata
5ba0: 6c 28 22 63 6f 75 6c 64 20 6e 6f 74 20 70 61 72  l("could not par
5bb0: 73 65 20 6d 61 6e 69 66 65 73 74 20 66 6f 72 20  se manifest for 
5bc0: 63 68 65 63 6b 2d 69 6e 3a 20 25 73 22 2c 20 7a  check-in: %s", z
5bd0: 52 65 76 69 73 69 6f 6e 29 3b 0a 20 20 20 20 7d  Revision);.    }
5be0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 6f 73 73  else{.      foss
5bf0: 69 6c 5f 66 61 74 61 6c 28 22 63 6f 75 6c 64 20  il_fatal("could 
5c00: 6e 6f 74 20 70 61 72 73 65 20 6d 61 6e 69 66 65  not parse manife
5c10: 73 74 20 66 6f 72 20 63 75 72 72 65 6e 74 20 63  st for current c
5c20: 68 65 63 6b 6f 75 74 22 29 3b 0a 20 20 20 20 7d  heckout");.    }
5c30: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72  .  }..  /* Retur
5c40: 6e 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 70  n the manifest p
5c50: 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 63 61 6c  ointer.  The cal
5c60: 6c 65 72 20 6d 75 73 74 20 75 73 65 20 6d 61 6e  ler must use man
5c70: 69 66 65 73 74 5f 64 65 73 74 72 6f 79 28 29 20  ifest_destroy() 
5c80: 74 6f 0a 20 20 20 2a 20 63 6c 65 61 6e 20 75 70  to.   * clean up
5c90: 20 77 68 65 6e 20 66 69 6e 69 73 68 65 64 20 75   when finished u
5ca0: 73 69 6e 67 20 74 68 65 20 6d 61 6e 69 66 65 73  sing the manifes
5cb0: 74 2e 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 70  t. */.  return p
5cc0: 4d 61 6e 69 66 65 73 74 3b 0a 7d 0a 0a 2f 2a 0a  Manifest;.}../*.
5cd0: 2a 2a 20 47 65 74 20 74 68 65 20 63 6f 6e 74 65  ** Get the conte
5ce0: 6e 74 73 20 6f 66 20 61 20 66 69 6c 65 20 77 69  nts of a file wi
5cf0: 74 68 69 6e 20 74 68 65 20 63 68 65 63 6b 2d 69  thin the check-i
5d00: 6e 20 22 7a 52 65 76 69 73 69 6f 6e 22 2e 20 20  n "zRevision".  
5d10: 49 66 0a 2a 2a 20 7a 52 65 76 69 73 69 6f 6e 3d  If.** zRevision=
5d20: 3d 4e 55 4c 4c 20 74 68 65 6e 20 67 65 74 20 74  =NULL then get t
5d30: 68 65 20 66 69 6c 65 20 63 6f 6e 74 65 6e 74 20  he file content 
5d40: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
5d50: 63 68 65 63 6b 6f 75 74 2e 0a 2a 2f 0a 69 6e 74  checkout..*/.int
5d60: 20 68 69 73 74 6f 72 69 63 61 6c 5f 62 6c 6f 62   historical_blob
5d70: 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  (.  const char *
5d80: 7a 52 65 76 69 73 69 6f 6e 2c 20 20 20 2f 2a 20  zRevision,   /* 
5d90: 54 68 65 20 63 68 65 63 6b 2d 69 6e 20 63 6f 6e  The check-in con
5da0: 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6c 65  taining the file
5db0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
5dc0: 20 2a 7a 46 69 6c 65 2c 20 20 20 20 20 20 20 2f   *zFile,       /
5dd0: 2a 20 46 75 6c 6c 20 74 72 65 65 6e 61 6d 65 20  * Full treename 
5de0: 6f 66 20 74 68 65 20 66 69 6c 65 20 2a 2f 0a 20  of the file */. 
5df0: 20 42 6c 6f 62 20 2a 70 42 6c 6f 62 2c 20 20 20   Blob *pBlob,   
5e00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 75 74            /* Put
5e10: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 68 65 72   the content her
5e20: 65 20 2a 2f 0a 20 20 69 6e 74 20 66 61 74 61 6c  e */.  int fatal
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e40: 2f 2a 20 49 66 20 6e 6f 6e 7a 65 72 6f 2c 20 70  /* If nonzero, p
5e50: 61 6e 69 63 20 69 66 20 66 69 6c 65 2f 61 72 74  anic if file/art
5e60: 69 66 61 63 74 20 6e 6f 74 20 66 6f 75 6e 64 20  ifact not found 
5e70: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 65 73 75  */.){.  int resu
5e80: 6c 74 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 47 65  lt = 0;..  /* Ge
5e90: 74 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 66  t the manifest f
5ea0: 6f 72 20 74 68 65 20 72 65 71 75 65 73 74 65 64  or the requested
5eb0: 20 63 68 65 63 6b 2d 69 6e 20 76 65 72 73 69 6f   check-in versio
5ec0: 6e 2e 20 20 54 68 69 73 20 63 61 6c 6c 20 75 6e  n.  This call un
5ed0: 61 76 6f 69 64 61 62 6c 79 0a 20 20 20 2a 20 70  avoidably.   * p
5ee0: 61 6e 69 63 73 20 6f 6e 20 66 61 69 6c 75 72 65  anics on failure
5ef0: 20 65 76 65 6e 20 69 66 20 66 61 74 61 6c 20 69   even if fatal i
5f00: 73 20 6e 6f 74 20 73 65 74 2e 20 2a 2f 0a 20 20  s not set. */.  
5f10: 4d 61 6e 69 66 65 73 74 20 2a 70 4d 61 6e 69 66  Manifest *pManif
5f20: 65 73 74 20 3d 20 68 69 73 74 6f 72 69 63 61 6c  est = historical
5f30: 5f 6d 61 6e 69 66 65 73 74 28 7a 52 65 76 69 73  _manifest(zRevis
5f40: 69 6f 6e 29 3b 0a 0a 20 20 2f 2a 20 54 72 79 20  ion);..  /* Try 
5f50: 74 6f 20 66 69 6e 64 20 74 68 65 20 66 69 6c 65  to find the file
5f60: 20 72 65 63 6f 72 64 20 77 69 74 68 69 6e 20 74   record within t
5f70: 68 65 20 6d 61 6e 69 66 65 73 74 2e 20 2a 2f 0a  he manifest. */.
5f80: 20 20 4d 61 6e 69 66 65 73 74 46 69 6c 65 20 2a    ManifestFile *
5f90: 70 46 69 6c 65 20 3d 20 6d 61 6e 69 66 65 73 74  pFile = manifest
5fa0: 5f 66 69 6c 65 5f 66 69 6e 64 28 70 4d 61 6e 69  _file_find(pMani
5fb0: 66 65 73 74 2c 20 7a 46 69 6c 65 29 3b 0a 0a 20  fest, zFile);.. 
5fc0: 20 69 66 28 20 21 70 46 69 6c 65 20 29 7b 0a 20   if( !pFile ){. 
5fd0: 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 66 69     /* Process fi
5fe0: 6c 65 2d 6e 6f 74 2d 66 6f 75 6e 64 20 65 72 72  le-not-found err
5ff0: 6f 72 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  ors. */.    if( 
6000: 66 61 74 61 6c 20 29 7b 0a 20 20 20 20 20 20 69  fatal ){.      i
6010: 66 28 20 7a 52 65 76 69 73 69 6f 6e 20 29 7b 0a  f( zRevision ){.
6020: 20 20 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 66          fossil_f
6030: 61 74 61 6c 28 22 66 69 6c 65 20 25 73 20 64 6f  atal("file %s do
6040: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
6050: 63 68 65 63 6b 2d 69 6e 20 25 73 22 2c 20 7a 46  check-in %s", zF
6060: 69 6c 65 2c 20 7a 52 65 76 69 73 69 6f 6e 29 3b  ile, zRevision);
6070: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
6080: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74        fossil_fat
6090: 61 6c 28 22 6e 6f 20 73 75 63 68 20 66 69 6c 65  al("no such file
60a0: 3a 20 25 73 22 2c 20 7a 46 69 6c 65 29 3b 0a 20  : %s", zFile);. 
60b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
60c0: 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 47 65 74  else{.    /* Get
60d0: 20 74 68 65 20 66 69 6c 65 27 73 20 63 6f 6e 74   the file's cont
60e0: 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20 72 65 73  ents. */.    res
60f0: 75 6c 74 20 3d 20 63 6f 6e 74 65 6e 74 5f 67 65  ult = content_ge
6100: 74 28 66 61 73 74 5f 75 75 69 64 5f 74 6f 5f 72  t(fast_uuid_to_r
6110: 69 64 28 70 46 69 6c 65 2d 3e 7a 55 75 69 64 29  id(pFile->zUuid)
6120: 2c 20 70 42 6c 6f 62 29 3b 0a 0a 20 20 20 20 2f  , pBlob);..    /
6130: 2a 20 50 72 6f 63 65 73 73 20 61 72 74 69 66 61  * Process artifa
6140: 63 74 2d 6e 6f 74 2d 66 6f 75 6e 64 20 65 72 72  ct-not-found err
6150: 6f 72 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  ors. */.    if( 
6160: 21 72 65 73 75 6c 74 20 26 26 20 66 61 74 61 6c  !result && fatal
6170: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52   ){.      if( zR
6180: 65 76 69 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20  evision ){.     
6190: 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28     fossil_fatal(
61a0: 22 6d 69 73 73 69 6e 67 20 61 72 74 69 66 61 63  "missing artifac
61b0: 74 20 25 73 20 66 6f 72 20 66 69 6c 65 20 25 73  t %s for file %s
61c0: 20 69 6e 20 63 68 65 63 6b 2d 69 6e 20 25 73 22   in check-in %s"
61d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 46  ,.            pF
61e0: 69 6c 65 2d 3e 7a 55 75 69 64 2c 20 7a 46 69 6c  ile->zUuid, zFil
61f0: 65 2c 20 7a 52 65 76 69 73 69 6f 6e 29 3b 0a 20  e, zRevision);. 
6200: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
6210: 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c      fossil_fatal
6220: 28 22 6d 69 73 73 69 6e 67 20 61 72 74 69 66 61  ("missing artifa
6230: 63 74 20 25 73 20 66 6f 72 20 66 69 6c 65 20 25  ct %s for file %
6240: 73 22 2c 20 70 46 69 6c 65 2d 3e 7a 55 75 69 64  s", pFile->zUuid
6250: 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  , zFile);.      
6260: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  }.    }.  }..  /
6270: 2a 20 44 65 61 6c 6c 6f 63 61 74 65 20 74 68 65  * Deallocate the
6280: 20 70 61 72 73 65 64 20 6d 61 6e 69 66 65 73 74   parsed manifest
6290: 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20   structure. */. 
62a0: 20 6d 61 6e 69 66 65 73 74 5f 64 65 73 74 72 6f   manifest_destro
62b0: 79 28 70 4d 61 6e 69 66 65 73 74 29 3b 0a 0a 20  y(pManifest);.. 
62c0: 20 2f 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20   /* Return 1 on 
62d0: 73 75 63 63 65 73 73 20 61 6e 64 20 28 61 73 73  success and (ass
62e0: 75 6d 69 6e 67 20 66 61 74 61 6c 20 69 73 20 6e  uming fatal is n
62f0: 6f 74 20 73 65 74 29 20 30 20 69 66 20 6e 6f 74  ot set) 0 if not
6300: 20 66 6f 75 6e 64 2e 20 2a 2f 0a 20 20 72 65 74   found. */.  ret
6310: 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a 2f  urn result;.}../
6320: 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 72 65  *.** COMMAND: re
6330: 76 65 72 74 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  vert.**.** Usage
6340: 3a 20 25 66 6f 73 73 69 6c 20 72 65 76 65 72 74  : %fossil revert
6350: 20 3f 2d 72 20 52 45 56 49 53 49 4f 4e 3f 20 3f   ?-r REVISION? ?
6360: 46 49 4c 45 20 2e 2e 2e 3f 0a 2a 2a 0a 2a 2a 20  FILE ...?.**.** 
6370: 52 65 76 65 72 74 20 74 6f 20 74 68 65 20 63 75  Revert to the cu
6380: 72 72 65 6e 74 20 72 65 70 6f 73 69 74 6f 72 79  rrent repository
6390: 20 76 65 72 73 69 6f 6e 20 6f 66 20 46 49 4c 45   version of FILE
63a0: 2c 20 6f 72 20 74 6f 0a 2a 2a 20 74 68 65 20 76  , or to.** the v
63b0: 65 72 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ersion associate
63c0: 64 20 77 69 74 68 20 62 61 73 65 6c 69 6e 65 20  d with baseline 
63d0: 52 45 56 49 53 49 4f 4e 20 69 66 20 74 68 65 20  REVISION if the 
63e0: 2d 72 20 66 6c 61 67 0a 2a 2a 20 61 70 70 65 61  -r flag.** appea
63f0: 72 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 46 49 4c  rs..**.** If FIL
6400: 45 20 77 61 73 20 70 61 72 74 20 6f 66 20 61 20  E was part of a 
6410: 72 65 6e 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  rename operation
6420: 2c 20 62 6f 74 68 20 74 68 65 20 6f 72 69 67 69  , both the origi
6430: 6e 61 6c 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20  nal file.** and 
6440: 74 68 65 20 72 65 6e 61 6d 65 64 20 66 69 6c 65  the renamed file
6450: 20 61 72 65 20 72 65 76 65 72 74 65 64 2e 0a 2a   are reverted..*
6460: 2a 0a 2a 2a 20 52 65 76 65 72 74 20 61 6c 6c 20  *.** Revert all 
6470: 66 69 6c 65 73 20 69 66 20 6e 6f 20 66 69 6c 65  files if no file
6480: 20 6e 61 6d 65 20 69 73 20 70 72 6f 76 69 64 65   name is provide
6490: 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 66 69  d..**.** If a fi
64a0: 6c 65 20 69 73 20 72 65 76 65 72 74 65 64 20 61  le is reverted a
64b0: 63 63 69 64 65 6e 74 61 6c 6c 79 2c 20 69 74 20  ccidentally, it 
64c0: 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
64d0: 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 22 66 6f  using.** the "fo
64e0: 73 73 69 6c 20 75 6e 64 6f 22 20 63 6f 6d 6d 61  ssil undo" comma
64f0: 6e 64 2e 0a 2a 2a 0a 2a 2a 20 4f 70 74 69 6f 6e  nd..**.** Option
6500: 73 3a 0a 2a 2a 20 20 20 2d 72 20 52 45 56 49 53  s:.**   -r REVIS
6510: 49 4f 4e 20 20 20 20 72 65 76 65 72 74 20 67 69  ION    revert gi
6520: 76 65 6e 20 46 49 4c 45 28 73 29 20 62 61 63 6b  ven FILE(s) back
6530: 20 74 6f 20 67 69 76 65 6e 20 52 45 56 49 53 49   to given REVISI
6540: 4f 4e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  ON.**.** See als
6550: 6f 3a 20 72 65 64 6f 2c 20 75 6e 64 6f 2c 20 75  o: redo, undo, u
6560: 70 64 61 74 65 0a 2a 2f 0a 76 6f 69 64 20 72 65  pdate.*/.void re
6570: 76 65 72 74 5f 63 6d 64 28 76 6f 69 64 29 7b 0a  vert_cmd(void){.
6580: 20 20 4d 61 6e 69 66 65 73 74 20 2a 70 43 6f 4d    Manifest *pCoM
6590: 61 6e 69 66 65 73 74 3b 20 20 20 20 20 20 20 20  anifest;        
65a0: 20 20 2f 2a 20 4d 61 6e 69 66 65 73 74 20 6f 66    /* Manifest of
65b0: 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b 6f 75   current checkou
65c0: 74 20 2a 2f 0a 20 20 4d 61 6e 69 66 65 73 74 20  t */.  Manifest 
65d0: 2a 70 52 76 4d 61 6e 69 66 65 73 74 3b 20 20 20  *pRvManifest;   
65e0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 6e 69 66 65         /* Manife
65f0: 73 74 20 6f 66 20 73 65 6c 65 63 74 65 64 20 72  st of selected r
6600: 65 76 65 72 74 20 76 65 72 73 69 6f 6e 20 2a 2f  evert version */
6610: 0a 20 20 4d 61 6e 69 66 65 73 74 46 69 6c 65 20  .  ManifestFile 
6620: 2a 70 43 6f 46 69 6c 65 3b 20 20 20 20 20 20 20  *pCoFile;       
6630: 20 20 20 2f 2a 20 46 69 6c 65 20 77 69 74 68 69     /* File withi
6640: 6e 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b 6f  n current checko
6650: 75 74 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 20  ut manifest */. 
6660: 20 4d 61 6e 69 66 65 73 74 46 69 6c 65 20 2a 70   ManifestFile *p
6670: 52 76 46 69 6c 65 3b 20 20 20 20 20 20 20 20 20  RvFile;         
6680: 20 2f 2a 20 46 69 6c 65 20 77 69 74 68 69 6e 20   /* File within 
6690: 72 65 76 65 72 74 20 76 65 72 73 69 6f 6e 20 6d  revert version m
66a0: 61 6e 69 66 65 73 74 20 2a 2f 0a 20 20 63 6f 6e  anifest */.  con
66b0: 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 20  st char *zFile; 
66c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
66d0: 46 69 6c 65 6e 61 6d 65 20 72 65 6c 61 74 69 76  Filename relativ
66e0: 65 20 74 6f 20 63 68 65 63 6b 6f 75 74 20 72 6f  e to checkout ro
66f0: 6f 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ot */.  const ch
6700: 61 72 20 2a 7a 52 65 76 69 73 69 6f 6e 3b 20 20  ar *zRevision;  
6710: 20 20 20 20 20 20 20 20 2f 2a 20 53 65 6c 65 63          /* Selec
6720: 74 65 64 20 72 65 76 65 72 74 20 76 65 72 73 69  ted revert versi
6730: 6f 6e 2c 20 4e 55 4c 4c 20 69 66 20 63 75 72 72  on, NULL if curr
6740: 65 6e 74 20 2a 2f 0a 20 20 42 6c 6f 62 20 72 65  ent */.  Blob re
6750: 63 6f 72 64 20 3d 20 42 4c 4f 42 5f 49 4e 49 54  cord = BLOB_INIT
6760: 49 41 4c 49 5a 45 52 3b 20 2f 2a 20 43 6f 6e 74  IALIZER; /* Cont
6770: 65 6e 74 73 20 6f 66 20 65 61 63 68 20 72 65 76  ents of each rev
6780: 65 72 74 65 64 20 66 69 6c 65 20 2a 2f 0a 20 20  erted file */.  
6790: 69 6e 74 20 69 3b 0a 20 20 53 74 6d 74 20 71 3b  int i;.  Stmt q;
67a0: 0a 0a 20 20 75 6e 64 6f 5f 63 61 70 74 75 72 65  ..  undo_capture
67b0: 5f 63 6f 6d 6d 61 6e 64 5f 6c 69 6e 65 28 29 3b  _command_line();
67c0: 0a 20 20 7a 52 65 76 69 73 69 6f 6e 20 3d 20 66  .  zRevision = f
67d0: 69 6e 64 5f 6f 70 74 69 6f 6e 28 22 72 65 76 69  ind_option("revi
67e0: 73 69 6f 6e 22 2c 20 22 72 22 2c 20 31 29 3b 0a  sion", "r", 1);.
67f0: 20 20 76 65 72 69 66 79 5f 61 6c 6c 5f 6f 70 74    verify_all_opt
6800: 69 6f 6e 73 28 29 3b 0a 0a 20 20 69 66 28 20 67  ions();..  if( g
6810: 2e 61 72 67 63 3c 32 20 29 7b 0a 20 20 20 20 75  .argc<2 ){.    u
6820: 73 61 67 65 28 22 3f 4f 50 54 49 4f 4e 53 3f 20  sage("?OPTIONS? 
6830: 5b 46 49 4c 45 5d 20 2e 2e 2e 22 29 3b 0a 20 20  [FILE] ...");.  
6840: 7d 0a 20 20 69 66 28 20 7a 52 65 76 69 73 69 6f  }.  if( zRevisio
6850: 6e 20 26 26 20 67 2e 61 72 67 63 3c 33 20 29 7b  n && g.argc<3 ){
6860: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61  .    fossil_fata
6870: 6c 28 22 74 68 65 20 2d 2d 72 65 76 69 73 69 6f  l("the --revisio
6880: 6e 20 6f 70 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  n option does no
6890: 74 20 77 6f 72 6b 20 66 6f 72 20 74 68 65 20 65  t work for the e
68a0: 6e 74 69 72 65 20 74 72 65 65 22 29 3b 0a 20 20  ntire tree");.  
68b0: 7d 0a 20 20 64 62 5f 6d 75 73 74 5f 62 65 5f 77  }.  db_must_be_w
68c0: 69 74 68 69 6e 5f 74 72 65 65 28 29 3b 0a 0a 20  ithin_tree();.. 
68d0: 20 2f 2a 20 47 65 74 20 6d 61 6e 69 66 65 73 74   /* Get manifest
68e0: 73 20 6f 66 20 72 65 76 65 72 74 20 76 65 72 73  s of revert vers
68f0: 69 6f 6e 20 61 6e 64 20 28 69 66 20 64 69 66 66  ion and (if diff
6900: 65 72 65 6e 74 29 20 63 75 72 72 65 6e 74 20 63  erent) current c
6910: 68 65 63 6b 6f 75 74 2e 20 2a 2f 0a 20 20 70 52  heckout. */.  pR
6920: 76 4d 61 6e 69 66 65 73 74 20 3d 20 68 69 73 74  vManifest = hist
6930: 6f 72 69 63 61 6c 5f 6d 61 6e 69 66 65 73 74 28  orical_manifest(
6940: 7a 52 65 76 69 73 69 6f 6e 29 3b 0a 20 20 70 43  zRevision);.  pC
6950: 6f 4d 61 6e 69 66 65 73 74 20 3d 20 7a 52 65 76  oManifest = zRev
6960: 69 73 69 6f 6e 20 3f 20 68 69 73 74 6f 72 69 63  ision ? historic
6970: 61 6c 5f 6d 61 6e 69 66 65 73 74 28 30 29 20 3a  al_manifest(0) :
6980: 20 30 3b 0a 0a 20 20 64 62 5f 62 65 67 69 6e 5f   0;..  db_begin_
6990: 74 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20  transaction();. 
69a0: 20 75 6e 64 6f 5f 62 65 67 69 6e 28 29 3b 0a 20   undo_begin();. 
69b0: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22   db_multi_exec("
69c0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
69d0: 45 20 74 6f 72 65 76 65 72 74 28 6e 61 6d 65 20  E torevert(name 
69e0: 55 4e 49 51 55 45 29 3b 22 29 3b 0a 0a 20 20 69  UNIQUE);");..  i
69f0: 66 28 20 67 2e 61 72 67 63 3e 32 20 29 7b 0a 20  f( g.argc>2 ){. 
6a00: 20 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 67 2e     for(i=2; i<g.
6a10: 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
6a20: 20 20 42 6c 6f 62 20 66 6e 61 6d 65 3b 0a 20 20    Blob fname;.  
6a30: 20 20 20 20 7a 46 69 6c 65 20 3d 20 6d 70 72 69      zFile = mpri
6a40: 6e 74 66 28 22 25 2f 22 2c 20 67 2e 61 72 67 76  ntf("%/", g.argv
6a50: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 62 6c 6f 62  [i]);.      blob
6a60: 5f 7a 65 72 6f 28 26 66 6e 61 6d 65 29 3b 0a 20  _zero(&fname);. 
6a70: 20 20 20 20 20 66 69 6c 65 5f 74 72 65 65 5f 6e       file_tree_n
6a80: 61 6d 65 28 7a 46 69 6c 65 2c 20 26 66 6e 61 6d  ame(zFile, &fnam
6a90: 65 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20  e, 0, 1);.      
6aa0: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a 20  db_multi_exec(. 
6ab0: 20 20 20 20 20 20 20 22 52 45 50 4c 41 43 45 20         "REPLACE 
6ac0: 49 4e 54 4f 20 74 6f 72 65 76 65 72 74 20 56 41  INTO torevert VA
6ad0: 4c 55 45 53 28 25 42 29 3b 22 0a 20 20 20 20 20  LUES(%B);".     
6ae0: 20 20 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47     "INSERT OR IG
6af0: 4e 4f 52 45 20 49 4e 54 4f 20 74 6f 72 65 76 65  NORE INTO toreve
6b00: 72 74 22 0a 20 20 20 20 20 20 20 20 22 20 53 45  rt".        " SE
6b10: 4c 45 43 54 20 70 61 74 68 6e 61 6d 65 22 0a 20  LECT pathname". 
6b20: 20 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d 20         "   FROM 
6b30: 76 66 69 6c 65 22 0a 20 20 20 20 20 20 20 20 22  vfile".        "
6b40: 20 20 57 48 45 52 45 20 6f 72 69 67 6e 61 6d 65    WHERE origname
6b50: 3d 25 42 3b 22 2c 0a 20 20 20 20 20 20 20 20 26  =%B;",.        &
6b60: 66 6e 61 6d 65 2c 20 26 66 6e 61 6d 65 0a 20 20  fname, &fname.  
6b70: 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 6c 6f      );.      blo
6b80: 62 5f 72 65 73 65 74 28 26 66 6e 61 6d 65 29 3b  b_reset(&fname);
6b90: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
6ba0: 20 20 20 20 69 6e 74 20 76 69 64 3b 0a 20 20 20      int vid;.   
6bb0: 20 76 69 64 20 3d 20 64 62 5f 6c 67 65 74 5f 69   vid = db_lget_i
6bc0: 6e 74 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 30  nt("checkout", 0
6bd0: 29 3b 0a 20 20 20 20 76 66 69 6c 65 5f 63 68 65  );.    vfile_che
6be0: 63 6b 5f 73 69 67 6e 61 74 75 72 65 28 76 69 64  ck_signature(vid
6bf0: 2c 20 30 29 3b 0a 20 20 20 20 64 62 5f 6d 75 6c  , 0);.    db_mul
6c00: 74 69 5f 65 78 65 63 28 0a 20 20 20 20 20 20 22  ti_exec(.      "
6c10: 44 45 4c 45 54 45 20 46 52 4f 4d 20 76 6d 65 72  DELETE FROM vmer
6c20: 67 65 3b 22 0a 20 20 20 20 20 20 22 49 4e 53 45  ge;".      "INSE
6c30: 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54  RT OR IGNORE INT
6c40: 4f 20 74 6f 72 65 76 65 72 74 20 22 0a 20 20 20  O torevert ".   
6c50: 20 20 20 22 20 53 45 4c 45 43 54 20 70 61 74 68     " SELECT path
6c60: 6e 61 6d 65 22 0a 20 20 20 20 20 20 22 20 20 20  name".      "   
6c70: 46 52 4f 4d 20 76 66 69 6c 65 20 22 0a 20 20 20  FROM vfile ".   
6c80: 20 20 20 22 20 20 57 48 45 52 45 20 63 68 6e 67     "  WHERE chng
6c90: 65 64 20 4f 52 20 64 65 6c 65 74 65 64 20 4f 52  ed OR deleted OR
6ca0: 20 72 69 64 3d 30 20 4f 52 20 70 61 74 68 6e 61   rid=0 OR pathna
6cb0: 6d 65 21 3d 6f 72 69 67 6e 61 6d 65 3b 22 0a 20  me!=origname;". 
6cc0: 20 20 20 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 6d     );.  }.  db_m
6cd0: 75 6c 74 69 5f 65 78 65 63 28 0a 20 20 20 20 22  ulti_exec(.    "
6ce0: 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45  INSERT OR IGNORE
6cf0: 20 49 4e 54 4f 20 74 6f 72 65 76 65 72 74 22 0a   INTO torevert".
6d00: 20 20 20 20 22 20 53 45 4c 45 43 54 20 6f 72 69      " SELECT ori
6d10: 67 6e 61 6d 65 22 0a 20 20 20 20 22 20 20 20 46  gname".    "   F
6d20: 52 4f 4d 20 76 66 69 6c 65 22 0a 20 20 20 20 22  ROM vfile".    "
6d30: 20 20 57 48 45 52 45 20 6f 72 69 67 6e 61 6d 65    WHERE origname
6d40: 21 3d 70 61 74 68 6e 61 6d 65 20 41 4e 44 20 70  !=pathname AND p
6d50: 61 74 68 6e 61 6d 65 20 49 4e 20 28 53 45 4c 45  athname IN (SELE
6d60: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74 6f 72  CT name FROM tor
6d70: 65 76 65 72 74 29 3b 22 0a 20 20 29 3b 0a 20 20  evert);".  );.  
6d80: 62 6c 6f 62 5f 7a 65 72 6f 28 26 72 65 63 6f 72  blob_zero(&recor
6d90: 64 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65  d);.  db_prepare
6da0: 28 26 71 2c 20 22 53 45 4c 45 43 54 20 6e 61 6d  (&q, "SELECT nam
6db0: 65 20 46 52 4f 4d 20 74 6f 72 65 76 65 72 74 22  e FROM torevert"
6dc0: 29 3b 0a 20 20 69 66 28 20 7a 52 65 76 69 73 69  );.  if( zRevisi
6dd0: 6f 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  on==0 ){.    int
6de0: 20 76 69 64 20 3d 20 64 62 5f 6c 67 65 74 5f 69   vid = db_lget_i
6df0: 6e 74 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 30  nt("checkout", 0
6e00: 29 3b 0a 20 20 20 20 7a 52 65 76 69 73 69 6f 6e  );.    zRevision
6e10: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53   = db_text(0, "S
6e20: 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20  ELECT uuid FROM 
6e30: 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d 25  blob WHERE rid=%
6e40: 64 22 2c 20 76 69 64 29 3b 0a 20 20 7d 0a 20 20  d", vid);.  }.  
6e50: 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26  while( db_step(&
6e60: 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  q)==SQLITE_ROW )
6e70: 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 46 75 6c  {.    char *zFul
6e80: 6c 3b 0a 20 20 20 20 7a 46 69 6c 65 20 3d 20 64  l;.    zFile = d
6e90: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71  b_column_text(&q
6ea0: 2c 20 30 29 3b 0a 20 20 20 20 7a 46 75 6c 6c 20  , 0);.    zFull 
6eb0: 3d 20 6d 70 72 69 6e 74 66 28 22 25 2f 25 2f 22  = mprintf("%/%/"
6ec0: 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 2c 20  , g.zLocalRoot, 
6ed0: 7a 46 69 6c 65 29 3b 0a 20 20 20 20 70 52 76 46  zFile);.    pRvF
6ee0: 69 6c 65 20 3d 20 6d 61 6e 69 66 65 73 74 5f 66  ile = manifest_f
6ef0: 69 6c 65 5f 66 69 6e 64 28 70 52 76 4d 61 6e 69  ile_find(pRvMani
6f00: 66 65 73 74 2c 20 7a 46 69 6c 65 29 3b 0a 20 20  fest, zFile);.  
6f10: 20 20 69 66 28 20 21 70 52 76 46 69 6c 65 20 29    if( !pRvFile )
6f20: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 5f 69  {.      if( db_i
6f30: 6e 74 28 30 2c 20 22 53 45 4c 45 43 54 20 72 69  nt(0, "SELECT ri
6f40: 64 20 46 52 4f 4d 20 76 66 69 6c 65 20 57 48 45  d FROM vfile WHE
6f50: 52 45 20 70 61 74 68 6e 61 6d 65 3d 25 51 20 4f  RE pathname=%Q O
6f60: 52 20 6f 72 69 67 6e 61 6d 65 3d 25 51 22 2c 0a  R origname=%Q",.
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f80: 20 7a 46 69 6c 65 2c 20 7a 46 69 6c 65 29 3d 3d   zFile, zFile)==
6f90: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 73  0 ){.        fos
6fa0: 73 69 6c 5f 70 72 69 6e 74 28 22 55 4e 4d 41 4e  sil_print("UNMAN
6fb0: 41 47 45 20 25 73 5c 6e 22 2c 20 7a 46 69 6c 65  AGE %s\n", zFile
6fc0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
6fd0: 20 20 20 20 20 20 20 20 75 6e 64 6f 5f 73 61 76          undo_sav
6fe0: 65 28 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  e(zFile);.      
6ff0: 20 20 66 69 6c 65 5f 64 65 6c 65 74 65 28 7a 46    file_delete(zF
7000: 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  ull);.        fo
7010: 73 73 69 6c 5f 70 72 69 6e 74 28 22 44 45 4c 45  ssil_print("DELE
7020: 54 45 20 20 20 25 73 5c 6e 22 2c 20 7a 46 69 6c  TE   %s\n", zFil
7030: 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
7040: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28    db_multi_exec(
7050: 0a 20 20 20 20 20 20 20 20 22 55 50 44 41 54 45  .        "UPDATE
7060: 20 4f 52 20 52 45 50 4c 41 43 45 20 76 66 69 6c   OR REPLACE vfil
7070: 65 22 0a 20 20 20 20 20 20 20 20 22 20 20 20 53  e".        "   S
7080: 45 54 20 70 61 74 68 6e 61 6d 65 3d 6f 72 69 67  ET pathname=orig
7090: 6e 61 6d 65 2c 20 6f 72 69 67 6e 61 6d 65 3d 4e  name, origname=N
70a0: 55 4c 4c 22 0a 20 20 20 20 20 20 20 20 22 20 57  ULL".        " W
70b0: 48 45 52 45 20 70 61 74 68 6e 61 6d 65 3d 25 51  HERE pathname=%Q
70c0: 20 41 4e 44 20 6f 72 69 67 6e 61 6d 65 21 3d 70   AND origname!=p
70d0: 61 74 68 6e 61 6d 65 3b 22 0a 20 20 20 20 20 20  athname;".      
70e0: 20 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 76    "DELETE FROM v
70f0: 66 69 6c 65 20 57 48 45 52 45 20 70 61 74 68 6e  file WHERE pathn
7100: 61 6d 65 3d 25 51 22 2c 0a 20 20 20 20 20 20 20  ame=%Q",.       
7110: 20 7a 46 69 6c 65 2c 20 7a 46 69 6c 65 0a 20 20   zFile, zFile.  
7120: 20 20 20 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65      );.    }else
7130: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
7140: 69 6e 74 36 34 20 6d 74 69 6d 65 3b 0a 20 20 20  int64 mtime;.   
7150: 20 20 20 69 6e 74 20 72 76 43 68 6e 67 65 64 20     int rvChnged 
7160: 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 74 20 72  = 0;.      int r
7170: 76 50 65 72 6d 20 3d 20 6d 61 6e 69 66 65 73 74  vPerm = manifest
7180: 5f 66 69 6c 65 5f 6d 70 65 72 6d 28 70 52 76 46  _file_mperm(pRvF
7190: 69 6c 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ile);..      /* 
71a0: 44 65 74 65 72 6d 69 6e 65 20 69 66 20 72 65 76  Determine if rev
71b0: 65 72 74 65 64 2d 74 6f 20 66 69 6c 65 20 69 73  erted-to file is
71c0: 20 64 69 66 66 65 72 65 6e 74 20 74 68 61 6e 20   different than 
71d0: 63 68 65 63 6b 65 64 20 6f 75 74 20 66 69 6c 65  checked out file
71e0: 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
71f0: 43 6f 4d 61 6e 69 66 65 73 74 20 26 26 20 28 70  CoManifest && (p
7200: 43 6f 46 69 6c 65 20 3d 20 6d 61 6e 69 66 65 73  CoFile = manifes
7210: 74 5f 66 69 6c 65 5f 66 69 6e 64 28 70 43 6f 4d  t_file_find(pCoM
7220: 61 6e 69 66 65 73 74 2c 20 7a 46 69 6c 65 29 29  anifest, zFile))
7230: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 76 43 68   ){.        rvCh
7240: 6e 67 65 64 20 3d 20 6d 61 6e 69 66 65 73 74 5f  nged = manifest_
7250: 66 69 6c 65 5f 6d 70 65 72 6d 28 70 52 76 46 69  file_mperm(pRvFi
7260: 6c 65 29 21 3d 72 76 50 65 72 6d 0a 20 20 20 20  le)!=rvPerm.    
7270: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 66              || f
7280: 6f 73 73 69 6c 5f 73 74 72 63 6d 70 28 70 52 76  ossil_strcmp(pRv
7290: 46 69 6c 65 2d 3e 7a 55 75 69 64 2c 20 70 43 6f  File->zUuid, pCo
72a0: 46 69 6c 65 2d 3e 7a 55 75 69 64 29 21 3d 30 3b  File->zUuid)!=0;
72b0: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
72c0: 2f 2a 20 47 65 74 20 63 6f 6e 74 65 6e 74 73 20  /* Get contents 
72d0: 6f 66 20 72 65 76 65 72 74 65 64 2d 74 6f 20 66  of reverted-to f
72e0: 69 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6f  ile. */.      co
72f0: 6e 74 65 6e 74 5f 67 65 74 28 66 61 73 74 5f 75  ntent_get(fast_u
7300: 75 69 64 5f 74 6f 5f 72 69 64 28 70 52 76 46 69  uid_to_rid(pRvFi
7310: 6c 65 2d 3e 7a 55 75 69 64 29 2c 20 26 72 65 63  le->zUuid), &rec
7320: 6f 72 64 29 3b 0a 0a 20 20 20 20 20 20 75 6e 64  ord);..      und
7330: 6f 5f 73 61 76 65 28 7a 46 69 6c 65 29 3b 0a 20  o_save(zFile);. 
7340: 20 20 20 20 20 69 66 28 20 66 69 6c 65 5f 73 69       if( file_si
7350: 7a 65 28 7a 46 75 6c 6c 2c 20 52 65 70 6f 46 49  ze(zFull, RepoFI
7360: 4c 45 29 3e 3d 30 0a 20 20 20 20 20 20 20 26 26  LE)>=0.       &&
7370: 20 28 72 76 50 65 72 6d 3d 3d 50 45 52 4d 5f 4c   (rvPerm==PERM_L
7380: 4e 4b 20 7c 7c 20 66 69 6c 65 5f 69 73 6c 69 6e  NK || file_islin
7390: 6b 28 30 29 29 0a 20 20 20 20 20 20 29 7b 0a 20  k(0)).      ){. 
73a0: 20 20 20 20 20 20 20 66 69 6c 65 5f 64 65 6c 65         file_dele
73b0: 74 65 28 7a 46 75 6c 6c 29 3b 0a 20 20 20 20 20  te(zFull);.     
73c0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 76 50   }.      if( rvP
73d0: 65 72 6d 3d 3d 50 45 52 4d 5f 4c 4e 4b 20 29 7b  erm==PERM_LNK ){
73e0: 0a 20 20 20 20 20 20 20 20 73 79 6d 6c 69 6e 6b  .        symlink
73f0: 5f 63 72 65 61 74 65 28 62 6c 6f 62 5f 73 74 72  _create(blob_str
7400: 28 26 72 65 63 6f 72 64 29 2c 20 7a 46 75 6c 6c  (&record), zFull
7410: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
7420: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 77 72 69          blob_wri
7430: 74 65 5f 74 6f 5f 66 69 6c 65 28 26 72 65 63 6f  te_to_file(&reco
7440: 72 64 2c 20 7a 46 75 6c 6c 29 3b 0a 20 20 20 20  rd, zFull);.    
7450: 20 20 7d 0a 20 20 20 20 20 20 66 69 6c 65 5f 73    }.      file_s
7460: 65 74 65 78 65 28 7a 46 75 6c 6c 2c 20 72 76 50  etexe(zFull, rvP
7470: 65 72 6d 3d 3d 50 45 52 4d 5f 45 58 45 29 3b 0a  erm==PERM_EXE);.
7480: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70 72 69        fossil_pri
7490: 6e 74 28 22 52 45 56 45 52 54 20 20 20 25 73 5c  nt("REVERT   %s\
74a0: 6e 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20  n", zFile);.    
74b0: 20 20 6d 74 69 6d 65 20 3d 20 66 69 6c 65 5f 6d    mtime = file_m
74c0: 74 69 6d 65 28 7a 46 75 6c 6c 2c 20 52 65 70 6f  time(zFull, Repo
74d0: 46 49 4c 45 29 3b 0a 20 20 20 20 20 20 64 62 5f  FILE);.      db_
74e0: 6d 75 6c 74 69 5f 65 78 65 63 28 0a 20 20 20 20  multi_exec(.    
74f0: 20 20 20 20 20 22 55 50 44 41 54 45 20 76 66 69       "UPDATE vfi
7500: 6c 65 22 0a 20 20 20 20 20 20 20 20 20 22 20 20  le".         "  
7510: 20 53 45 54 20 6d 74 69 6d 65 3d 25 6c 6c 64 2c   SET mtime=%lld,
7520: 20 63 68 6e 67 65 64 3d 25 64 2c 20 64 65 6c 65   chnged=%d, dele
7530: 74 65 64 3d 30 2c 20 69 73 65 78 65 3d 25 64 2c  ted=0, isexe=%d,
7540: 20 69 73 6c 69 6e 6b 3d 25 64 2c 6d 72 69 64 3d   islink=%d,mrid=
7550: 72 69 64 22 0a 20 20 20 20 20 20 20 20 20 22 20  rid".         " 
7560: 57 48 45 52 45 20 70 61 74 68 6e 61 6d 65 3d 25  WHERE pathname=%
7570: 51 20 4f 52 20 6f 72 69 67 6e 61 6d 65 3d 25 51  Q OR origname=%Q
7580: 22 2c 0a 20 20 20 20 20 20 20 20 20 6d 74 69 6d  ",.         mtim
7590: 65 2c 20 72 76 43 68 6e 67 65 64 2c 20 72 76 50  e, rvChnged, rvP
75a0: 65 72 6d 3d 3d 50 45 52 4d 5f 45 58 45 2c 20 72  erm==PERM_EXE, r
75b0: 76 50 65 72 6d 3d 3d 50 45 52 4d 5f 4c 4e 4b 2c  vPerm==PERM_LNK,
75c0: 20 7a 46 69 6c 65 2c 20 7a 46 69 6c 65 0a 20 20   zFile, zFile.  
75d0: 20 20 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20      );.    }.   
75e0: 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 72 65 63   blob_reset(&rec
75f0: 6f 72 64 29 3b 0a 20 20 20 20 66 72 65 65 28 7a  ord);.    free(z
7600: 46 75 6c 6c 29 3b 0a 20 20 7d 0a 20 20 64 62 5f  Full);.  }.  db_
7610: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20  finalize(&q);.  
7620: 75 6e 64 6f 5f 66 69 6e 69 73 68 28 29 3b 0a 20  undo_finish();. 
7630: 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74   db_end_transact
7640: 69 6f 6e 28 30 29 3b 0a 0a 20 20 2f 2a 20 44 65  ion(0);..  /* De
7650: 61 6c 6c 6f 63 61 74 65 20 70 61 72 73 65 64 20  allocate parsed 
7660: 6d 61 6e 69 66 65 73 74 20 73 74 72 75 63 74 75  manifest structu
7670: 72 65 73 2e 20 2a 2f 0a 20 20 6d 61 6e 69 66 65  res. */.  manife
7680: 73 74 5f 64 65 73 74 72 6f 79 28 70 52 76 4d 61  st_destroy(pRvMa
7690: 6e 69 66 65 73 74 29 3b 0a 20 20 6d 61 6e 69 66  nifest);.  manif
76a0: 65 73 74 5f 64 65 73 74 72 6f 79 28 70 43 6f 4d  est_destroy(pCoM
76b0: 61 6e 69 66 65 73 74 29 3b 0a 7d 0a              anifest);.}.