Hex Artifact Content
Not logged in

Artifact ad8e78b43e86052a3596b1d3a02229bbb3bd7d77:

File src/checkin.c part of check-in [89d100b845] - Make the "ls" command report MISSING instead of EDITED for files that do not exist in the tree. Ticket ce458c35ca. by drh on 2008-10-31 14:01:16.

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 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62   GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76  lic.** License v
00b0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c  ersion 2 as publ
00c0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65  ished by the Fre
00d0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
00e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
00f0: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73  s program is dis
0100: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20  tributed in the 
0110: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c  hope that it wil
0120: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20  l be useful,.** 
0130: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20  but WITHOUT ANY 
0140: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75  WARRANTY; withou
0150: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69  t even the impli
0160: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a  ed warranty of.*
0170: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54  * MERCHANTABILIT
0180: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52  Y or FITNESS FOR
0190: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55   A PARTICULAR PU
01a0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20  RPOSE.  See the 
01b0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50  GNU.** General P
01c0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f  ublic License fo
01d0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a  r more details..
01e0: 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c  ** .** You shoul
01f0: 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20  d have received 
0200: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e  a copy of the GN
0210: 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63  U General Public
0220: 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e  .** License alon
0230: 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72  g with this libr
0240: 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69  ary; if not, wri
0250: 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65  te to the.** Fre
0260: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
0270: 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20  ation, Inc., 59 
0280: 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53  Temple Place - S
0290: 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73  uite 330,.** Bos
02a0: 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31  ton, MA  02111-1
02b0: 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20  307, USA..**.** 
02c0: 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69  Author contact i
02d0: 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20  nformation:.**  
02e0: 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a   drh@hwaci.com.*
02f0: 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68  *   http://www.h
0300: 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a  waci.com/drh/.**
0310: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
0320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0360: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65  .**.** This file
0370: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75   contains code u
0380: 73 65 64 20 74 6f 20 63 68 65 63 6b 2d 69 6e 20  sed to check-in 
0390: 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
03a0: 70 72 6f 6a 65 63 74 0a 2a 2a 20 66 72 6f 6d 20  project.** from 
03b0: 74 68 65 20 6c 6f 63 61 6c 20 72 65 70 6f 73 69  the local reposi
03c0: 74 6f 72 79 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  tory..*/.#includ
03d0: 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e  e "config.h".#in
03e0: 63 6c 75 64 65 20 22 63 68 65 63 6b 69 6e 2e 68  clude "checkin.h
03f0: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  ".#include <asse
0400: 72 74 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e  rt.h>../*.** Gen
0410: 65 72 61 74 65 20 74 65 78 74 20 64 65 73 63 72  erate text descr
0420: 69 62 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65  ibing all change
0430: 73 2e 20 20 50 72 65 70 65 6e 64 20 7a 50 72 65  s.  Prepend zPre
0440: 66 69 78 20 74 6f 20 65 61 63 68 20 6c 69 6e 65  fix to each line
0450: 0a 2a 2a 20 6f 66 20 6f 75 74 70 75 74 2e 0a 2a  .** of output..*
0460: 2a 0a 2a 2a 20 57 65 20 61 73 73 75 6d 65 20 74  *.** We assume t
0470: 68 61 74 20 76 66 69 6c 65 5f 63 68 65 63 6b 5f  hat vfile_check_
0480: 73 69 67 6e 61 74 75 72 65 20 68 61 73 20 62 65  signature has be
0490: 65 6e 20 72 75 6e 2e 0a 2a 2f 0a 73 74 61 74 69  en run..*/.stati
04a0: 63 20 76 6f 69 64 20 73 74 61 74 75 73 5f 72 65  c void status_re
04b0: 70 6f 72 74 28 42 6c 6f 62 20 2a 72 65 70 6f 72  port(Blob *repor
04c0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  t, const char *z
04d0: 50 72 65 66 69 78 29 7b 0a 20 20 53 74 6d 74 20  Prefix){.  Stmt 
04e0: 71 3b 0a 20 20 69 6e 74 20 6e 50 72 65 66 69 78  q;.  int nPrefix
04f0: 20 3d 20 73 74 72 6c 65 6e 28 7a 50 72 65 66 69   = strlen(zPrefi
0500: 78 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65  x);.  db_prepare
0510: 28 26 71 2c 20 0a 20 20 20 20 22 53 45 4c 45 43  (&q, .    "SELEC
0520: 54 20 70 61 74 68 6e 61 6d 65 2c 20 64 65 6c 65  T pathname, dele
0530: 74 65 64 2c 20 63 68 6e 67 65 64 2c 20 72 69 64  ted, chnged, rid
0540: 20 46 52 4f 4d 20 76 66 69 6c 65 20 22 0a 20 20   FROM vfile ".  
0550: 20 20 22 57 48 45 52 45 20 66 69 6c 65 5f 69 73    "WHERE file_is
0560: 5f 73 65 6c 65 63 74 65 64 28 69 64 29 20 41 4e  _selected(id) AN
0570: 44 20 28 63 68 6e 67 65 64 20 4f 52 20 64 65 6c  D (chnged OR del
0580: 65 74 65 64 20 4f 52 20 72 69 64 3d 30 29 20 4f  eted OR rid=0) O
0590: 52 44 45 52 20 42 59 20 31 22 0a 20 20 29 3b 0a  RDER BY 1".  );.
05a0: 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70    while( db_step
05b0: 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  (&q)==SQLITE_ROW
05c0: 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
05d0: 61 72 20 2a 7a 50 61 74 68 6e 61 6d 65 20 3d 20  ar *zPathname = 
05e0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26  db_column_text(&
05f0: 71 2c 30 29 3b 0a 20 20 20 20 69 6e 74 20 69 73  q,0);.    int is
0600: 44 65 6c 65 74 65 64 20 3d 20 64 62 5f 63 6f 6c  Deleted = db_col
0610: 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 31 29 3b 0a  umn_int(&q, 1);.
0620: 20 20 20 20 69 6e 74 20 69 73 43 68 6e 67 65 64      int isChnged
0630: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74   = db_column_int
0640: 28 26 71 2c 32 29 3b 0a 20 20 20 20 69 6e 74 20  (&q,2);.    int 
0650: 69 73 4e 65 77 20 3d 20 64 62 5f 63 6f 6c 75 6d  isNew = db_colum
0660: 6e 5f 69 6e 74 28 26 71 2c 33 29 3d 3d 30 3b 0a  n_int(&q,3)==0;.
0670: 20 20 20 20 63 68 61 72 20 2a 7a 46 75 6c 6c 4e      char *zFullN
0680: 61 6d 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 25  ame = mprintf("%
0690: 73 2f 25 73 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52  s/%s", g.zLocalR
06a0: 6f 6f 74 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b  oot, zPathname);
06b0: 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64  .    blob_append
06c0: 28 72 65 70 6f 72 74 2c 20 7a 50 72 65 66 69 78  (report, zPrefix
06d0: 2c 20 6e 50 72 65 66 69 78 29 3b 0a 20 20 20 20  , nPrefix);.    
06e0: 69 66 28 20 69 73 44 65 6c 65 74 65 64 20 29 7b  if( isDeleted ){
06f0: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65  .      blob_appe
0700: 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 44 45 4c  ndf(report, "DEL
0710: 45 54 45 44 20 20 25 73 5c 6e 22 2c 20 7a 50 61  ETED  %s\n", zPa
0720: 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c  thname);.    }el
0730: 73 65 20 69 66 28 20 61 63 63 65 73 73 28 7a 46  se if( access(zF
0740: 75 6c 6c 4e 61 6d 65 2c 20 30 29 20 29 7b 0a 20  ullName, 0) ){. 
0750: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64       blob_append
0760: 66 28 72 65 70 6f 72 74 2c 20 22 4d 49 53 53 49  f(report, "MISSI
0770: 4e 47 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68  NG  %s\n", zPath
0780: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  name);.    }else
0790: 20 69 66 28 20 69 73 4e 65 77 20 29 7b 0a 20 20   if( isNew ){.  
07a0: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66      blob_appendf
07b0: 28 72 65 70 6f 72 74 2c 20 22 41 44 44 45 44 20  (report, "ADDED 
07c0: 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e     %s\n", zPathn
07d0: 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  ame);.    }else 
07e0: 69 66 28 20 69 73 44 65 6c 65 74 65 64 20 29 7b  if( isDeleted ){
07f0: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65  .      blob_appe
0800: 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 44 45 4c  ndf(report, "DEL
0810: 45 54 45 44 20 20 25 73 5c 6e 22 2c 20 7a 50 61  ETED  %s\n", zPa
0820: 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c  thname);.    }el
0830: 73 65 20 69 66 28 20 69 73 43 68 6e 67 65 64 3d  se if( isChnged=
0840: 3d 32 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62  =2 ){.      blob
0850: 5f 61 70 70 65 6e 64 66 28 72 65 70 6f 72 74 2c  _appendf(report,
0860: 20 22 55 50 44 41 54 45 44 5f 42 59 5f 4d 45 52   "UPDATED_BY_MER
0870: 47 45 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e  GE %s\n", zPathn
0880: 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  ame);.    }else 
0890: 69 66 28 20 69 73 43 68 6e 67 65 64 3d 3d 33 20  if( isChnged==3 
08a0: 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70  ){.      blob_ap
08b0: 70 65 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 41  pendf(report, "A
08c0: 44 44 45 44 5f 42 59 5f 4d 45 52 47 45 20 25 73  DDED_BY_MERGE %s
08d0: 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b  \n", zPathname);
08e0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
08f0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 72    blob_appendf(r
0900: 65 70 6f 72 74 2c 20 22 45 44 49 54 45 44 20 20  eport, "EDITED  
0910: 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 6d   %s\n", zPathnam
0920: 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 72  e);.    }.    fr
0930: 65 65 28 7a 46 75 6c 6c 4e 61 6d 65 29 3b 0a 20  ee(zFullName);. 
0940: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65   }.  db_finalize
0950: 28 26 71 29 3b 0a 20 20 64 62 5f 70 72 65 70 61  (&q);.  db_prepa
0960: 72 65 28 26 71 2c 20 22 53 45 4c 45 43 54 20 75  re(&q, "SELECT u
0970: 75 69 64 20 46 52 4f 4d 20 76 6d 65 72 67 65 20  uid FROM vmerge 
0980: 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e 20 6d 65 72  JOIN blob ON mer
0990: 67 65 3d 72 69 64 22 0a 20 20 20 20 20 20 20 20  ge=rid".        
09a0: 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45           " WHERE
09b0: 20 69 64 3d 30 22 29 3b 0a 20 20 77 68 69 6c 65   id=0");.  while
09c0: 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53  ( db_step(&q)==S
09d0: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20  QLITE_ROW ){.   
09e0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 72 65 70   blob_append(rep
09f0: 6f 72 74 2c 20 7a 50 72 65 66 69 78 2c 20 6e 50  ort, zPrefix, nP
0a00: 72 65 66 69 78 29 3b 0a 20 20 20 20 62 6c 6f 62  refix);.    blob
0a10: 5f 61 70 70 65 6e 64 66 28 72 65 70 6f 72 74 2c  _appendf(report,
0a20: 20 22 4d 45 52 47 45 44 5f 57 49 54 48 20 25 73   "MERGED_WITH %s
0a30: 5c 6e 22 2c 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74  \n", db_column_t
0a40: 65 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 20 7d  ext(&q, 0));.  }
0a50: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26  .  db_finalize(&
0a60: 71 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d  q);.}../*.** COM
0a70: 4d 41 4e 44 3a 20 63 68 61 6e 67 65 73 0a 2a 2a  MAND: changes.**
0a80: 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66 6f 73 73  .** Usage: %foss
0a90: 69 6c 20 63 68 61 6e 67 65 73 0a 2a 2a 0a 2a 2a  il changes.**.**
0aa0: 20 52 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 65   Report on the e
0ab0: 64 69 74 20 73 74 61 74 75 73 20 6f 66 20 61 6c  dit status of al
0ac0: 6c 20 66 69 6c 65 73 20 69 6e 20 74 68 65 20 63  l files in the c
0ad0: 75 72 72 65 6e 74 20 63 68 65 63 6b 6f 75 74 2e  urrent checkout.
0ae0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 74 68 65  .** See also the
0af0: 20 22 73 74 61 74 75 73 22 20 61 6e 64 20 22 65   "status" and "e
0b00: 78 74 72 61 22 20 63 6f 6d 6d 61 6e 64 73 2e 0a  xtra" commands..
0b10: 2a 2f 0a 76 6f 69 64 20 63 68 61 6e 67 65 73 5f  */.void changes_
0b20: 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20 42 6c 6f  cmd(void){.  Blo
0b30: 62 20 72 65 70 6f 72 74 3b 0a 20 20 69 6e 74 20  b report;.  int 
0b40: 76 69 64 3b 0a 20 20 64 62 5f 6d 75 73 74 5f 62  vid;.  db_must_b
0b50: 65 5f 77 69 74 68 69 6e 5f 74 72 65 65 28 29 3b  e_within_tree();
0b60: 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 72 65  .  blob_zero(&re
0b70: 70 6f 72 74 29 3b 0a 20 20 76 69 64 20 3d 20 64  port);.  vid = d
0b80: 62 5f 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63  b_lget_int("chec
0b90: 6b 6f 75 74 22 2c 20 30 29 3b 0a 20 20 76 66 69  kout", 0);.  vfi
0ba0: 6c 65 5f 63 68 65 63 6b 5f 73 69 67 6e 61 74 75  le_check_signatu
0bb0: 72 65 28 76 69 64 29 3b 0a 20 20 73 74 61 74 75  re(vid);.  statu
0bc0: 73 5f 72 65 70 6f 72 74 28 26 72 65 70 6f 72 74  s_report(&report
0bd0: 2c 20 22 22 29 3b 0a 20 20 62 6c 6f 62 5f 77 72  , "");.  blob_wr
0be0: 69 74 65 5f 74 6f 5f 66 69 6c 65 28 26 72 65 70  ite_to_file(&rep
0bf0: 6f 72 74 2c 20 22 2d 22 29 3b 0a 7d 0a 0a 2f 2a  ort, "-");.}../*
0c00: 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 73 74 61  .** COMMAND: sta
0c10: 74 75 73 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a  tus.**.** Usage:
0c20: 20 25 66 6f 73 73 69 6c 20 73 74 61 74 75 73 0a   %fossil status.
0c30: 2a 2a 0a 2a 2a 20 52 65 70 6f 72 74 20 6f 6e 20  **.** Report on 
0c40: 74 68 65 20 73 74 61 74 75 73 20 6f 66 20 74 68  the status of th
0c50: 65 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b 6f  e current checko
0c60: 75 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 74 61 74  ut..*/.void stat
0c70: 75 73 5f 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20  us_cmd(void){.  
0c80: 69 6e 74 20 76 69 64 3b 0a 20 20 64 62 5f 6d 75  int vid;.  db_mu
0c90: 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65  st_be_within_tre
0ca0: 65 28 29 3b 0a 20 20 20 20 20 20 20 2f 2a 20 30  e();.       /* 0
0cb0: 31 32 33 34 35 36 37 38 39 30 31 32 33 34 20 2a  12345678901234 *
0cc0: 2f 0a 20 20 70 72 69 6e 74 66 28 22 72 65 70 6f  /.  printf("repo
0cd0: 73 69 74 6f 72 79 3a 20 20 20 25 73 5c 6e 22 2c  sitory:   %s\n",
0ce0: 20 64 62 5f 6c 67 65 74 28 22 72 65 70 6f 73 69   db_lget("reposi
0cf0: 74 6f 72 79 22 2c 22 22 29 29 3b 0a 20 20 70 72  tory",""));.  pr
0d00: 69 6e 74 66 28 22 6c 6f 63 61 6c 2d 72 6f 6f 74  intf("local-root
0d10: 3a 20 20 20 25 73 5c 6e 22 2c 20 67 2e 7a 4c 6f  :   %s\n", g.zLo
0d20: 63 61 6c 52 6f 6f 74 29 3b 0a 20 20 70 72 69 6e  calRoot);.  prin
0d30: 74 66 28 22 73 65 72 76 65 72 2d 63 6f 64 65 3a  tf("server-code:
0d40: 20 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 28    %s\n", db_get(
0d50: 22 73 65 72 76 65 72 2d 63 6f 64 65 22 2c 20 22  "server-code", "
0d60: 22 29 29 3b 0a 20 20 76 69 64 20 3d 20 64 62 5f  "));.  vid = db_
0d70: 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63 6b 6f  lget_int("checko
0d80: 75 74 22 2c 20 30 29 3b 0a 20 20 69 66 28 20 76  ut", 0);.  if( v
0d90: 69 64 20 29 7b 0a 20 20 20 20 73 68 6f 77 5f 63  id ){.    show_c
0da0: 6f 6d 6d 6f 6e 5f 69 6e 66 6f 28 76 69 64 2c 20  ommon_info(vid, 
0db0: 22 63 68 65 63 6b 6f 75 74 3a 22 2c 20 30 29 3b  "checkout:", 0);
0dc0: 0a 20 20 7d 0a 20 20 63 68 61 6e 67 65 73 5f 63  .  }.  changes_c
0dd0: 6d 64 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  md();.}../*.** C
0de0: 4f 4d 4d 41 4e 44 3a 20 6c 73 0a 2a 2a 0a 2a 2a  OMMAND: ls.**.**
0df0: 20 55 73 61 67 65 3a 20 25 66 6f 73 73 69 6c 20   Usage: %fossil 
0e00: 6c 73 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 20 74 68  ls.**.** Show th
0e10: 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 66  e names of all f
0e20: 69 6c 65 73 20 69 6e 20 74 68 65 20 63 75 72 72  iles in the curr
0e30: 65 6e 74 20 63 68 65 63 6b 6f 75 74 0a 2a 2f 0a  ent checkout.*/.
0e40: 76 6f 69 64 20 6c 73 5f 63 6d 64 28 76 6f 69 64  void ls_cmd(void
0e50: 29 7b 0a 20 20 69 6e 74 20 76 69 64 3b 0a 20 20  ){.  int vid;.  
0e60: 53 74 6d 74 20 71 3b 0a 0a 20 20 64 62 5f 6d 75  Stmt q;..  db_mu
0e70: 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65  st_be_within_tre
0e80: 65 28 29 3b 0a 20 20 76 69 64 20 3d 20 64 62 5f  e();.  vid = db_
0e90: 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63 6b 6f  lget_int("checko
0ea0: 75 74 22 2c 20 30 29 3b 0a 20 20 76 66 69 6c 65  ut", 0);.  vfile
0eb0: 5f 63 68 65 63 6b 5f 73 69 67 6e 61 74 75 72 65  _check_signature
0ec0: 28 76 69 64 29 3b 0a 20 20 64 62 5f 70 72 65 70  (vid);.  db_prep
0ed0: 61 72 65 28 26 71 2c 20 22 53 45 4c 45 43 54 20  are(&q, "SELECT 
0ee0: 70 61 74 68 6e 61 6d 65 2c 20 64 65 6c 65 74 65  pathname, delete
0ef0: 64 2c 20 72 69 64 2c 20 63 68 6e 67 65 64 20 46  d, rid, chnged F
0f00: 52 4f 4d 20 76 66 69 6c 65 22 0a 20 20 20 20 20  ROM vfile".     
0f10: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52              " OR
0f20: 44 45 52 20 42 59 20 31 22 29 3b 0a 20 20 77 68  DER BY 1");.  wh
0f30: 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29  ile( db_step(&q)
0f40: 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
0f50: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
0f60: 7a 50 61 74 68 6e 61 6d 65 20 3d 20 64 62 5f 63  zPathname = db_c
0f70: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 30 29  olumn_text(&q,0)
0f80: 3b 0a 20 20 20 20 69 6e 74 20 69 73 44 65 6c 65  ;.    int isDele
0f90: 74 65 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f  ted = db_column_
0fa0: 69 6e 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20  int(&q, 1);.    
0fb0: 69 6e 74 20 69 73 4e 65 77 20 3d 20 64 62 5f 63  int isNew = db_c
0fc0: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 32 29 3d  olumn_int(&q,2)=
0fd0: 3d 30 3b 0a 20 20 20 20 69 6e 74 20 63 68 6e 67  =0;.    int chng
0fe0: 65 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69  ed = db_column_i
0ff0: 6e 74 28 26 71 2c 33 29 3b 0a 20 20 20 20 63 68  nt(&q,3);.    ch
1000: 61 72 20 2a 7a 46 75 6c 6c 4e 61 6d 65 20 3d 20  ar *zFullName = 
1010: 6d 70 72 69 6e 74 66 28 22 25 73 2f 25 73 22 2c  mprintf("%s/%s",
1020: 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 2c 20 7a   g.zLocalRoot, z
1030: 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 69  Pathname);.    i
1040: 66 28 20 69 73 4e 65 77 20 29 7b 0a 20 20 20 20  f( isNew ){.    
1050: 20 20 70 72 69 6e 74 66 28 22 41 44 44 45 44 20    printf("ADDED 
1060: 20 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68      %s\n", zPath
1070: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  name);.    }else
1080: 20 69 66 28 20 61 63 63 65 73 73 28 7a 46 75 6c   if( access(zFul
1090: 6c 4e 61 6d 65 2c 20 30 29 20 29 7b 0a 20 20 20  lName, 0) ){.   
10a0: 20 20 20 70 72 69 6e 74 66 28 22 4d 49 53 53 49     printf("MISSI
10b0: 4e 47 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74  NG   %s\n", zPat
10c0: 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73  hname);.    }els
10d0: 65 20 69 66 28 20 69 73 44 65 6c 65 74 65 64 20  e if( isDeleted 
10e0: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  ){.      printf(
10f0: 22 44 45 4c 45 54 45 44 20 20 20 25 73 5c 6e 22  "DELETED   %s\n"
1100: 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20  , zPathname);.  
1110: 20 20 7d 65 6c 73 65 20 69 66 28 20 63 68 6e 67    }else if( chng
1120: 65 64 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e  ed ){.      prin
1130: 74 66 28 22 45 44 49 54 45 44 20 20 20 20 25 73  tf("EDITED    %s
1140: 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b  \n", zPathname);
1150: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1160: 20 20 70 72 69 6e 74 66 28 22 55 4e 43 48 41 4e    printf("UNCHAN
1170: 47 45 44 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68  GED %s\n", zPath
1180: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  name);.    }.   
1190: 20 66 72 65 65 28 7a 46 75 6c 6c 4e 61 6d 65 29   free(zFullName)
11a0: 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c  ;.  }.  db_final
11b0: 69 7a 65 28 26 71 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ize(&q);.}../*.*
11c0: 2a 20 43 4f 4d 4d 41 4e 44 3a 20 65 78 74 72 61  * COMMAND: extra
11d0: 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66 6f 73 73  .** Usage: %foss
11e0: 69 6c 20 65 78 74 72 61 0a 2a 2a 0a 2a 2a 20 50  il extra.**.** P
11f0: 72 69 6e 74 20 61 20 6c 69 73 74 20 6f 66 20 61  rint a list of a
1200: 6c 6c 20 66 69 6c 65 73 20 69 6e 20 74 68 65 20  ll files in the 
1210: 73 6f 75 72 63 65 20 74 72 65 65 20 74 68 61 74  source tree that
1220: 20 61 72 65 20 6e 6f 74 20 70 61 72 74 20 6f 66   are not part of
1230: 0a 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20  .** the current 
1240: 63 68 65 63 6b 6f 75 74 2e 20 20 53 65 65 20 61  checkout.  See a
1250: 6c 73 6f 20 74 68 65 20 22 63 6c 65 61 6e 22 20  lso the "clean" 
1260: 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 76 6f 69 64  command..*/.void
1270: 20 65 78 74 72 61 5f 63 6d 64 28 76 6f 69 64 29   extra_cmd(void)
1280: 7b 0a 20 20 42 6c 6f 62 20 70 61 74 68 3b 0a 20  {.  Blob path;. 
1290: 20 42 6c 6f 62 20 72 65 70 6f 3b 0a 20 20 53 74   Blob repo;.  St
12a0: 6d 74 20 71 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20  mt q;.  int n;. 
12b0: 20 64 62 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68   db_must_be_with
12c0: 69 6e 5f 74 72 65 65 28 29 3b 0a 20 20 64 62 5f  in_tree();.  db_
12d0: 6d 75 6c 74 69 5f 65 78 65 63 28 22 43 52 45 41  multi_exec("CREA
12e0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 73 66  TE TEMP TABLE sf
12f0: 69 6c 65 28 78 20 54 45 58 54 20 50 52 49 4d 41  ile(x TEXT PRIMA
1300: 52 59 20 4b 45 59 29 22 29 3b 0a 20 20 6e 20 3d  RY KEY)");.  n =
1310: 20 73 74 72 6c 65 6e 28 67 2e 7a 4c 6f 63 61 6c   strlen(g.zLocal
1320: 52 6f 6f 74 29 3b 0a 20 20 62 6c 6f 62 5f 69 6e  Root);.  blob_in
1330: 69 74 28 26 70 61 74 68 2c 20 67 2e 7a 4c 6f 63  it(&path, g.zLoc
1340: 61 6c 52 6f 6f 74 2c 20 6e 2d 31 29 3b 0a 20 20  alRoot, n-1);.  
1350: 76 66 69 6c 65 5f 73 63 61 6e 28 30 2c 20 26 70  vfile_scan(0, &p
1360: 61 74 68 2c 20 62 6c 6f 62 5f 73 69 7a 65 28 26  ath, blob_size(&
1370: 70 61 74 68 29 29 3b 0a 20 20 64 62 5f 70 72 65  path));.  db_pre
1380: 70 61 72 65 28 26 71 2c 20 0a 20 20 20 20 20 20  pare(&q, .      
1390: 22 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 73  "SELECT x FROM s
13a0: 66 69 6c 65 22 0a 20 20 20 20 20 20 22 20 57 48  file".      " WH
13b0: 45 52 45 20 78 20 4e 4f 54 20 49 4e 20 28 27 6d  ERE x NOT IN ('m
13c0: 61 6e 69 66 65 73 74 27 2c 27 6d 61 6e 69 66 65  anifest','manife
13d0: 73 74 2e 75 75 69 64 27 2c 27 5f 46 4f 53 53 49  st.uuid','_FOSSI
13e0: 4c 5f 27 29 22 0a 20 20 20 20 20 20 22 20 4f 52  L_')".      " OR
13f0: 44 45 52 20 42 59 20 31 22 29 3b 0a 20 20 69 66  DER BY 1");.  if
1400: 28 20 66 69 6c 65 5f 74 72 65 65 5f 6e 61 6d 65  ( file_tree_name
1410: 28 67 2e 7a 52 65 70 6f 73 69 74 6f 72 79 4e 61  (g.zRepositoryNa
1420: 6d 65 2c 20 26 72 65 70 6f 2c 20 30 29 20 29 7b  me, &repo, 0) ){
1430: 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78  .    db_multi_ex
1440: 65 63 28 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  ec("DELETE FROM 
1450: 73 66 69 6c 65 20 57 48 45 52 45 20 78 3d 25 42  sfile WHERE x=%B
1460: 22 2c 20 26 72 65 70 6f 29 3b 0a 20 20 7d 0a 20  ", &repo);.  }. 
1470: 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28   while( db_step(
1480: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  &q)==SQLITE_ROW 
1490: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 25  ){.    printf("%
14a0: 73 5c 6e 22 2c 20 64 62 5f 63 6f 6c 75 6d 6e 5f  s\n", db_column_
14b0: 74 65 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 20  text(&q, 0));.  
14c0: 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28  }.  db_finalize(
14d0: 26 71 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f  &q);.}../*.** CO
14e0: 4d 4d 41 4e 44 3a 20 63 6c 65 61 6e 0a 2a 2a 20  MMAND: clean.** 
14f0: 55 73 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 63  Usage: %fossil c
1500: 6c 65 61 6e 20 3f 2d 61 6c 6c 3f 0a 2a 2a 0a 2a  lean ?-all?.**.*
1510: 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 22 65 78  * Delete all "ex
1520: 74 72 61 22 20 66 69 6c 65 73 20 69 6e 20 74 68  tra" files in th
1530: 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e 20 20  e source tree.  
1540: 22 45 78 74 72 61 22 20 66 69 6c 65 73 20 61 72  "Extra" files ar
1550: 65 0a 2a 2a 20 66 69 6c 65 73 20 74 68 61 74 20  e.** files that 
1560: 61 72 65 20 6e 6f 74 20 6f 66 66 69 63 69 61 6c  are not official
1570: 6c 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  ly part of the c
1580: 68 65 63 6b 6f 75 74 2e 20 20 53 65 65 20 61 6c  heckout.  See al
1590: 73 6f 0a 2a 2a 20 74 68 65 20 22 65 78 74 72 61  so.** the "extra
15a0: 22 20 63 6f 6d 6d 61 6e 64 2e 20 54 68 69 73 20  " command. This 
15b0: 6f 70 65 72 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  operation cannot
15c0: 20 62 65 20 75 6e 64 6f 6e 65 2e 20 0a 2a 2a 0a   be undone. .**.
15d0: 2a 2a 20 59 6f 75 20 77 69 6c 6c 20 62 65 20 70  ** You will be p
15e0: 72 6f 6d 70 74 65 64 20 62 65 66 6f 72 65 20 72  rompted before r
15f0: 65 6d 6f 76 69 6e 67 20 65 61 63 68 20 66 69 6c  emoving each fil
1600: 65 2e 20 49 66 20 79 6f 75 20 61 72 65 0a 2a 2a  e. If you are.**
1610: 20 73 75 72 65 20 79 6f 75 20 77 69 73 68 20 74   sure you wish t
1620: 6f 20 72 65 6d 6f 76 65 20 61 6c 6c 20 22 65 78  o remove all "ex
1630: 74 72 61 22 20 66 69 6c 65 73 20 79 6f 75 20 63  tra" files you c
1640: 61 6e 20 73 70 65 63 69 66 79 20 74 68 65 0a 2a  an specify the.*
1650: 2a 20 6f 70 74 69 6f 6e 61 6c 20 2d 61 6c 6c 20  * optional -all 
1660: 66 6c 61 67 2e 0a 2a 2f 0a 76 6f 69 64 20 63 6c  flag..*/.void cl
1670: 65 61 6e 5f 63 6d 64 28 76 6f 69 64 29 7b 0a 20  ean_cmd(void){. 
1680: 20 69 6e 74 20 61 6c 6c 46 6c 61 67 3b 0a 20 20   int allFlag;.  
1690: 42 6c 6f 62 20 70 61 74 68 2c 20 72 65 70 6f 3b  Blob path, repo;
16a0: 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 69 6e 74  .  Stmt q;.  int
16b0: 20 6e 3b 0a 20 20 61 6c 6c 46 6c 61 67 20 3d 20   n;.  allFlag = 
16c0: 66 69 6e 64 5f 6f 70 74 69 6f 6e 28 22 61 6c 6c  find_option("all
16d0: 22 2c 22 61 22 2c 30 29 21 3d 30 3b 0a 20 20 64  ","a",0)!=0;.  d
16e0: 62 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68 69 6e  b_must_be_within
16f0: 5f 74 72 65 65 28 29 3b 0a 20 20 64 62 5f 6d 75  _tree();.  db_mu
1700: 6c 74 69 5f 65 78 65 63 28 22 43 52 45 41 54 45  lti_exec("CREATE
1710: 20 54 45 4d 50 20 54 41 42 4c 45 20 73 66 69 6c   TEMP TABLE sfil
1720: 65 28 78 20 54 45 58 54 20 50 52 49 4d 41 52 59  e(x TEXT PRIMARY
1730: 20 4b 45 59 29 22 29 3b 0a 20 20 6e 20 3d 20 73   KEY)");.  n = s
1740: 74 72 6c 65 6e 28 67 2e 7a 4c 6f 63 61 6c 52 6f  trlen(g.zLocalRo
1750: 6f 74 29 3b 0a 20 20 62 6c 6f 62 5f 69 6e 69 74  ot);.  blob_init
1760: 28 26 70 61 74 68 2c 20 67 2e 7a 4c 6f 63 61 6c  (&path, g.zLocal
1770: 52 6f 6f 74 2c 20 6e 2d 31 29 3b 0a 20 20 76 66  Root, n-1);.  vf
1780: 69 6c 65 5f 73 63 61 6e 28 30 2c 20 26 70 61 74  ile_scan(0, &pat
1790: 68 2c 20 62 6c 6f 62 5f 73 69 7a 65 28 26 70 61  h, blob_size(&pa
17a0: 74 68 29 29 3b 0a 20 20 64 62 5f 70 72 65 70 61  th));.  db_prepa
17b0: 72 65 28 26 71 2c 20 0a 20 20 20 20 20 20 22 53  re(&q, .      "S
17c0: 45 4c 45 43 54 20 25 51 20 7c 7c 20 78 20 46 52  ELECT %Q || x FR
17d0: 4f 4d 20 73 66 69 6c 65 22 0a 20 20 20 20 20 20  OM sfile".      
17e0: 22 20 57 48 45 52 45 20 78 20 4e 4f 54 20 49 4e  " WHERE x NOT IN
17f0: 20 28 27 6d 61 6e 69 66 65 73 74 27 2c 27 6d 61   ('manifest','ma
1800: 6e 69 66 65 73 74 2e 75 75 69 64 27 2c 27 5f 46  nifest.uuid','_F
1810: 4f 53 53 49 4c 5f 27 29 22 0a 20 20 20 20 20 20  OSSIL_')".      
1820: 22 20 4f 52 44 45 52 20 42 59 20 31 22 2c 20 67  " ORDER BY 1", g
1830: 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20 20  .zLocalRoot);.  
1840: 69 66 28 20 66 69 6c 65 5f 74 72 65 65 5f 6e 61  if( file_tree_na
1850: 6d 65 28 67 2e 7a 52 65 70 6f 73 69 74 6f 72 79  me(g.zRepository
1860: 4e 61 6d 65 2c 20 26 72 65 70 6f 2c 20 30 29 20  Name, &repo, 0) 
1870: 29 7b 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f  ){.    db_multi_
1880: 65 78 65 63 28 22 44 45 4c 45 54 45 20 46 52 4f  exec("DELETE FRO
1890: 4d 20 73 66 69 6c 65 20 57 48 45 52 45 20 78 3d  M sfile WHERE x=
18a0: 25 42 22 2c 20 26 72 65 70 6f 29 3b 0a 20 20 7d  %B", &repo);.  }
18b0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65  .  while( db_ste
18c0: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  p(&q)==SQLITE_RO
18d0: 57 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 6c  W ){.    if( all
18e0: 46 6c 61 67 20 29 7b 0a 20 20 20 20 20 20 75 6e  Flag ){.      un
18f0: 6c 69 6e 6b 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74  link(db_column_t
1900: 65 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 20 20  ext(&q, 0));.   
1910: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 42 6c   }else{.      Bl
1920: 6f 62 20 61 6e 73 3b 0a 20 20 20 20 20 20 63 68  ob ans;.      ch
1930: 61 72 20 2a 70 72 6f 6d 70 74 20 3d 20 6d 70 72  ar *prompt = mpr
1940: 69 6e 74 66 28 22 72 65 6d 6f 76 65 20 75 6e 6d  intf("remove unm
1950: 61 6e 61 67 65 64 20 66 69 6c 65 20 5c 22 25 73  anaged file \"%s
1960: 5c 22 20 5b 79 2f 4e 5d 3f 20 22 2c 0a 20 20 20  \" [y/N]? ",.   
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1980: 20 20 20 20 20 20 20 20 20 20 20 64 62 5f 63 6f             db_co
1990: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29  lumn_text(&q, 0)
19a0: 29 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 7a 65  );.      blob_ze
19b0: 72 6f 28 26 61 6e 73 29 3b 0a 20 20 20 20 20 20  ro(&ans);.      
19c0: 70 72 6f 6d 70 74 5f 75 73 65 72 28 70 72 6f 6d  prompt_user(prom
19d0: 70 74 2c 20 26 61 6e 73 29 3b 0a 20 20 20 20 20  pt, &ans);.     
19e0: 20 69 66 28 20 62 6c 6f 62 5f 73 74 72 28 26 61   if( blob_str(&a
19f0: 6e 73 29 5b 30 5d 3d 3d 27 79 27 20 29 7b 0a 20  ns)[0]=='y' ){. 
1a00: 20 20 20 20 20 20 20 75 6e 6c 69 6e 6b 28 64 62         unlink(db
1a10: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c  _column_text(&q,
1a20: 20 30 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   0));.      }.  
1a30: 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e    }.  }.  db_fin
1a40: 61 6c 69 7a 65 28 26 71 29 3b 0a 7d 0a 0a 2f 2a  alize(&q);.}../*
1a50: 0a 2a 2a 20 50 72 65 70 61 72 65 20 61 20 63 6f  .** Prepare a co
1a60: 6d 6d 69 74 20 63 6f 6d 6d 65 6e 74 2e 20 20 4c  mmit comment.  L
1a70: 65 74 20 74 68 65 20 75 73 65 72 20 6d 6f 64 69  et the user modi
1a80: 66 79 20 69 74 20 75 73 69 6e 67 20 74 68 65 0a  fy it using the.
1a90: 2a 2a 20 65 64 69 74 6f 72 20 73 70 65 63 69 66  ** editor specif
1aa0: 69 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 61  ied in the globa
1ab0: 6c 5f 63 6f 6e 66 69 67 20 74 61 62 6c 65 20 6f  l_config table o
1ac0: 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 68 65 20  r either.** the 
1ad0: 56 49 53 55 41 4c 20 6f 72 20 45 44 49 54 4f 52  VISUAL or EDITOR
1ae0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
1af0: 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f  iable..**.** Sto
1b00: 72 65 20 74 68 65 20 66 69 6e 61 6c 20 63 6f 6d  re the final com
1b10: 6d 69 74 20 63 6f 6d 6d 65 6e 74 20 69 6e 20 70  mit comment in p
1b20: 43 6f 6d 6d 65 6e 74 2e 20 20 70 43 6f 6d 6d 65  Comment.  pComme
1b30: 6e 74 20 69 73 20 61 73 73 75 6d 65 64 0a 2a 2a  nt is assumed.**
1b40: 20 74 6f 20 62 65 20 75 6e 69 6e 69 74 69 61 6c   to be uninitial
1b50: 69 7a 65 64 20 2d 20 61 6e 79 20 70 72 69 6f 72  ized - any prior
1b60: 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 76 65 72   content is over
1b70: 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 61 74  written..*/.stat
1b80: 69 63 20 76 6f 69 64 20 70 72 65 70 61 72 65 5f  ic void prepare_
1b90: 63 6f 6d 6d 69 74 5f 63 6f 6d 6d 65 6e 74 28 42  commit_comment(B
1ba0: 6c 6f 62 20 2a 70 43 6f 6d 6d 65 6e 74 29 7b 0a  lob *pComment){.
1bb0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
1bc0: 64 69 74 6f 72 3b 0a 20 20 63 68 61 72 20 2a 7a  ditor;.  char *z
1bd0: 43 6d 64 3b 0a 20 20 63 68 61 72 20 2a 7a 46 69  Cmd;.  char *zFi
1be0: 6c 65 3b 0a 20 20 42 6c 6f 62 20 74 65 78 74 2c  le;.  Blob text,
1bf0: 20 6c 69 6e 65 3b 0a 20 20 63 68 61 72 20 2a 7a   line;.  char *z
1c00: 43 6f 6d 6d 65 6e 74 3b 0a 20 20 69 6e 74 20 69  Comment;.  int i
1c10: 3b 0a 20 20 62 6c 6f 62 5f 73 65 74 28 26 74 65  ;.  blob_set(&te
1c20: 78 74 2c 0a 20 20 20 20 22 5c 6e 23 20 45 6e 74  xt,.    "\n# Ent
1c30: 65 72 20 63 6f 6d 6d 65 6e 74 73 20 6f 6e 20 74  er comments on t
1c40: 68 69 73 20 63 6f 6d 6d 69 74 2e 20 20 4c 69 6e  his commit.  Lin
1c50: 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
1c60: 68 20 23 20 61 72 65 20 69 67 6e 6f 72 65 64 5c  h # are ignored\
1c70: 6e 22 0a 20 20 20 20 22 23 5c 6e 22 0a 20 20 29  n".    "#\n".  )
1c80: 3b 0a 20 20 73 74 61 74 75 73 5f 72 65 70 6f 72  ;.  status_repor
1c90: 74 28 26 74 65 78 74 2c 20 22 23 20 22 29 3b 0a  t(&text, "# ");.
1ca0: 20 20 7a 45 64 69 74 6f 72 20 3d 20 64 62 5f 67    zEditor = db_g
1cb0: 65 74 28 22 65 64 69 74 6f 72 22 2c 20 30 29 3b  et("editor", 0);
1cc0: 0a 20 20 69 66 28 20 7a 45 64 69 74 6f 72 3d 3d  .  if( zEditor==
1cd0: 30 20 29 7b 0a 20 20 20 20 7a 45 64 69 74 6f 72  0 ){.    zEditor
1ce0: 20 3d 20 67 65 74 65 6e 76 28 22 56 49 53 55 41   = getenv("VISUA
1cf0: 4c 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  L");.  }.  if( z
1d00: 45 64 69 74 6f 72 3d 3d 30 20 29 7b 0a 20 20 20  Editor==0 ){.   
1d10: 20 7a 45 64 69 74 6f 72 20 3d 20 67 65 74 65 6e   zEditor = geten
1d20: 76 28 22 45 44 49 54 4f 52 22 29 3b 0a 20 20 7d  v("EDITOR");.  }
1d30: 0a 20 20 69 66 28 20 7a 45 64 69 74 6f 72 3d 3d  .  if( zEditor==
1d40: 30 20 29 7b 0a 23 69 66 64 65 66 20 5f 5f 4d 49  0 ){.#ifdef __MI
1d50: 4e 47 57 33 32 5f 5f 0a 20 20 20 20 7a 45 64 69  NGW32__.    zEdi
1d60: 74 6f 72 20 3d 20 22 6e 6f 74 65 70 61 64 22 3b  tor = "notepad";
1d70: 0a 23 65 6c 73 65 0a 20 20 20 20 7a 45 64 69 74  .#else.    zEdit
1d80: 6f 72 20 3d 20 22 65 64 22 3b 0a 23 65 6e 64 69  or = "ed";.#endi
1d90: 66 0a 20 20 7d 0a 20 20 7a 46 69 6c 65 20 3d 20  f.  }.  zFile = 
1da0: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45  db_text(0, "SELE
1db0: 43 54 20 27 25 71 63 69 2d 63 6f 6d 6d 65 6e 74  CT '%qci-comment
1dc0: 2d 27 20 7c 7c 20 68 65 78 28 72 61 6e 64 6f 6d  -' || hex(random
1dd0: 62 6c 6f 62 28 36 29 29 20 7c 7c 20 27 2e 74 78  blob(6)) || '.tx
1de0: 74 27 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  t'",.           
1df0: 20 20 20 20 20 20 20 20 67 2e 7a 4c 6f 63 61 6c          g.zLocal
1e00: 52 6f 6f 74 29 3b 0a 23 69 66 64 65 66 20 5f 5f  Root);.#ifdef __
1e10: 4d 49 4e 47 57 33 32 5f 5f 0a 20 20 62 6c 6f 62  MINGW32__.  blob
1e20: 5f 61 64 64 5f 63 72 28 26 74 65 78 74 29 3b 0a  _add_cr(&text);.
1e30: 23 65 6e 64 69 66 0a 20 20 62 6c 6f 62 5f 77 72  #endif.  blob_wr
1e40: 69 74 65 5f 74 6f 5f 66 69 6c 65 28 26 74 65 78  ite_to_file(&tex
1e50: 74 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 7a 43 6d  t, zFile);.  zCm
1e60: 64 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 20  d = mprintf("%s 
1e70: 5c 22 25 73 5c 22 22 2c 20 7a 45 64 69 74 6f 72  \"%s\"", zEditor
1e80: 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 70 72 69 6e  , zFile);.  prin
1e90: 74 66 28 22 25 73 5c 6e 22 2c 20 7a 43 6d 64 29  tf("%s\n", zCmd)
1ea0: 3b 0a 20 20 69 66 28 20 73 79 73 74 65 6d 28 7a  ;.  if( system(z
1eb0: 43 6d 64 29 20 29 7b 0a 20 20 20 20 66 6f 73 73  Cmd) ){.    foss
1ec0: 69 6c 5f 70 61 6e 69 63 28 22 65 64 69 74 6f 72  il_panic("editor
1ed0: 20 61 62 6f 72 74 65 64 22 29 3b 0a 20 20 7d 0a   aborted");.  }.
1ee0: 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 74 65    blob_reset(&te
1ef0: 78 74 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 61 64  xt);.  blob_read
1f00: 5f 66 72 6f 6d 5f 66 69 6c 65 28 26 74 65 78 74  _from_file(&text
1f10: 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 62 6c 6f 62  , zFile);.  blob
1f20: 5f 72 65 6d 6f 76 65 5f 63 72 28 26 74 65 78 74  _remove_cr(&text
1f30: 29 3b 0a 20 20 75 6e 6c 69 6e 6b 28 7a 46 69 6c  );.  unlink(zFil
1f40: 65 29 3b 0a 20 20 66 72 65 65 28 7a 46 69 6c 65  e);.  free(zFile
1f50: 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 70  );.  blob_zero(p
1f60: 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 77 68 69 6c  Comment);.  whil
1f70: 65 28 20 62 6c 6f 62 5f 6c 69 6e 65 28 26 74 65  e( blob_line(&te
1f80: 78 74 2c 20 26 6c 69 6e 65 29 20 29 7b 0a 20 20  xt, &line) ){.  
1f90: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 20 20    int i, n;.    
1fa0: 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 6e 20 3d  char *z;.    n =
1fb0: 20 62 6c 6f 62 5f 73 69 7a 65 28 26 6c 69 6e 65   blob_size(&line
1fc0: 29 3b 0a 20 20 20 20 7a 20 3d 20 62 6c 6f 62 5f  );.    z = blob_
1fd0: 62 75 66 66 65 72 28 26 6c 69 6e 65 29 3b 0a 20  buffer(&line);. 
1fe0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 20     for(i=0; i<n 
1ff0: 26 26 20 69 73 73 70 61 63 65 28 7a 5b 69 5d 29  && isspace(z[i])
2000: 3b 20 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 69 66  ;  i++){}.    if
2010: 28 20 69 3c 6e 20 26 26 20 7a 5b 69 5d 3d 3d 27  ( i<n && z[i]=='
2020: 23 27 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  #' ) continue;. 
2030: 20 20 20 69 66 28 20 69 3c 6e 20 7c 7c 20 62 6c     if( i<n || bl
2040: 6f 62 5f 73 69 7a 65 28 70 43 6f 6d 6d 65 6e 74  ob_size(pComment
2050: 29 3e 30 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f  )>0 ){.      blo
2060: 62 5f 61 70 70 65 6e 64 66 28 70 43 6f 6d 6d 65  b_appendf(pComme
2070: 6e 74 2c 20 22 25 62 22 2c 20 26 6c 69 6e 65 29  nt, "%b", &line)
2080: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 6c  ;.    }.  }.  bl
2090: 6f 62 5f 72 65 73 65 74 28 26 74 65 78 74 29 3b  ob_reset(&text);
20a0: 0a 20 20 7a 43 6f 6d 6d 65 6e 74 20 3d 20 62 6c  .  zComment = bl
20b0: 6f 62 5f 73 74 72 28 70 43 6f 6d 6d 65 6e 74 29  ob_str(pComment)
20c0: 3b 0a 20 20 69 20 3d 20 73 74 72 6c 65 6e 28 7a  ;.  i = strlen(z
20d0: 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 77 68 69 6c  Comment);.  whil
20e0: 65 28 20 69 3e 30 20 26 26 20 69 73 73 70 61 63  e( i>0 && isspac
20f0: 65 28 7a 43 6f 6d 6d 65 6e 74 5b 69 2d 31 5d 29  e(zComment[i-1])
2100: 20 29 7b 20 69 2d 2d 3b 20 7d 0a 20 20 62 6c 6f   ){ i--; }.  blo
2110: 62 5f 72 65 73 69 7a 65 28 70 43 6f 6d 6d 65 6e  b_resize(pCommen
2120: 74 2c 20 69 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t, i);.}../*.** 
2130: 50 6f 70 75 6c 61 74 65 20 74 68 65 20 47 6c 6f  Populate the Glo
2140: 62 61 6c 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 5b  bal.aCommitFile[
2150: 5d 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  ] based on the c
2160: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75  ommand line argu
2170: 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 61 20 5b 63  ments.** to a [c
2180: 6f 6d 6d 69 74 5d 20 63 6f 6d 6d 61 6e 64 2e 20  ommit] command. 
2190: 47 6c 6f 62 61 6c 2e 61 43 6f 6d 6d 69 74 46 69  Global.aCommitFi
21a0: 6c 65 20 69 73 20 61 6e 20 61 72 72 61 79 20 6f  le is an array o
21b0: 66 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73 69  f integers.** si
21c0: 7a 65 64 20 61 74 20 28 4e 2b 31 29 2c 20 77 68  zed at (N+1), wh
21d0: 65 72 65 20 4e 20 69 73 20 74 68 65 20 6e 75 6d  ere N is the num
21e0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
21f0: 20 70 61 73 73 65 64 20 74 6f 20 5b 63 6f 6d 6d   passed to [comm
2200: 69 74 5d 2e 0a 2a 2a 20 54 68 65 20 63 6f 6e 74  it]..** The cont
2210: 65 6e 74 73 20 61 72 65 20 74 68 65 20 5b 69 64  ents are the [id
2220: 5d 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68  ] values from th
2230: 65 20 76 66 69 6c 65 20 74 61 62 6c 65 20 63 6f  e vfile table co
2240: 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74  rresponding.** t
2250: 6f 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 73 20  o the filenames 
2260: 70 61 73 73 65 64 20 61 73 20 61 72 67 75 6d 65  passed as argume
2270: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c  nts..**.** The l
2280: 61 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  ast element of a
2290: 43 6f 6d 6d 69 74 46 69 6c 65 5b 5d 20 69 73 20  CommitFile[] is 
22a0: 61 6c 77 61 79 73 20 30 20 2d 20 69 6e 64 69 63  always 0 - indic
22b0: 61 74 69 6e 67 20 74 68 65 20 65 6e 64 0a 2a 2a  ating the end.**
22c0: 20 6f 66 20 74 68 65 20 61 72 72 61 79 2e 0a 2a   of the array..*
22d0: 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65  *.** If there we
22e0: 72 65 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20  re no arguments 
22f0: 70 61 73 73 65 64 20 74 6f 20 5b 63 6f 6d 6d 69  passed to [commi
2300: 74 5d 2c 20 61 43 6f 6d 6d 69 74 46 69 6c 65 20  t], aCommitFile 
2310: 69 73 20 6e 6f 74 0a 2a 2a 20 61 6c 6c 6f 63 61  is not.** alloca
2320: 74 65 64 20 61 6e 64 20 72 65 6d 61 69 6e 73 20  ted and remains 
2330: 4e 55 4c 4c 2e 20 4f 74 68 65 72 20 70 61 72 74  NULL. Other part
2340: 73 20 6f 66 20 74 68 65 20 63 6f 64 65 20 69 6e  s of the code in
2350: 74 65 72 70 72 65 74 20 74 68 69 73 0a 2a 2a 20  terpret this.** 
2360: 74 6f 20 6d 65 61 6e 20 22 61 6c 6c 20 66 69 6c  to mean "all fil
2370: 65 73 22 2e 0a 2a 2f 0a 76 6f 69 64 20 73 65 6c  es"..*/.void sel
2380: 65 63 74 5f 63 6f 6d 6d 69 74 5f 66 69 6c 65 73  ect_commit_files
2390: 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20 67 2e  (void){.  if( g.
23a0: 61 72 67 63 3e 32 20 29 7b 0a 20 20 20 20 69 6e  argc>2 ){.    in
23b0: 74 20 69 69 3b 0a 20 20 20 20 42 6c 6f 62 20 62  t ii;.    Blob b
23c0: 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28  ;.    blob_zero(
23d0: 26 62 29 3b 0a 20 20 20 20 67 2e 61 43 6f 6d 6d  &b);.    g.aComm
23e0: 69 74 46 69 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28  itFile = malloc(
23f0: 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 67 2e 61  sizeof(int)*(g.a
2400: 72 67 63 2d 31 29 29 3b 0a 0a 20 20 20 20 66 6f  rgc-1));..    fo
2410: 72 28 69 69 3d 32 3b 20 69 69 3c 67 2e 61 72 67  r(ii=2; ii<g.arg
2420: 63 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  c; ii++){.      
2430: 69 6e 74 20 69 49 64 3b 0a 20 20 20 20 20 20 66  int iId;.      f
2440: 69 6c 65 5f 74 72 65 65 5f 6e 61 6d 65 28 67 2e  ile_tree_name(g.
2450: 61 72 67 76 5b 69 69 5d 2c 20 26 62 2c 20 31 29  argv[ii], &b, 1)
2460: 3b 0a 20 20 20 20 20 20 69 49 64 20 3d 20 64 62  ;.      iId = db
2470: 5f 69 6e 74 28 2d 31 2c 20 22 53 45 4c 45 43 54  _int(-1, "SELECT
2480: 20 69 64 20 46 52 4f 4d 20 76 66 69 6c 65 20 57   id FROM vfile W
2490: 48 45 52 45 20 70 61 74 68 6e 61 6d 65 3d 25 51  HERE pathname=%Q
24a0: 22 2c 20 62 6c 6f 62 5f 73 74 72 28 26 62 29 29  ", blob_str(&b))
24b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 49 64 3c  ;.      if( iId<
24c0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 73  0 ){.        fos
24d0: 73 69 6c 5f 66 61 74 61 6c 28 22 66 6f 73 73 69  sil_fatal("fossi
24e0: 6c 20 6b 6e 6f 77 73 20 6e 6f 74 68 69 6e 67 20  l knows nothing 
24f0: 61 62 6f 75 74 3a 20 25 73 22 2c 20 67 2e 61 72  about: %s", g.ar
2500: 67 76 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 7d  gv[ii]);.      }
2510: 0a 20 20 20 20 20 20 67 2e 61 43 6f 6d 6d 69 74  .      g.aCommit
2520: 46 69 6c 65 5b 69 69 2d 32 5d 20 3d 20 69 49 64  File[ii-2] = iId
2530: 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 72 65 73  ;.      blob_res
2540: 65 74 28 26 62 29 3b 0a 20 20 20 20 7d 0a 20 20  et(&b);.    }.  
2550: 20 20 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 5b    g.aCommitFile[
2560: 69 69 2d 32 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  ii-2] = 0;.  }.}
2570: 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a  ../*.** COMMAND:
2580: 20 63 69 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20   ci.** COMMAND: 
2590: 63 6f 6d 6d 69 74 0a 2a 2a 0a 2a 2a 20 55 73 61  commit.**.** Usa
25a0: 67 65 3a 20 25 66 6f 73 73 69 6c 20 63 6f 6d 6d  ge: %fossil comm
25b0: 69 74 20 3f 2d 6d 20 43 4f 4d 4d 45 4e 54 3f 20  it ?-m COMMENT? 
25c0: 3f 2d 2d 6e 6f 73 69 67 6e 3f 20 3f 46 49 4c 45  ?--nosign? ?FILE
25d0: 2e 2e 2e 3f 0a 2a 2a 0a 2a 2a 20 43 72 65 61 74  ...?.**.** Creat
25e0: 65 20 61 20 6e 65 77 20 76 65 72 73 69 6f 6e 20  e a new version 
25f0: 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 6f  containing all o
2600: 66 20 74 68 65 20 63 68 61 6e 67 65 73 20 69 6e  f the changes in
2610: 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
2620: 63 68 65 63 6b 6f 75 74 2e 20 20 59 6f 75 20 77  checkout.  You w
2630: 69 6c 6c 20 62 65 20 70 72 6f 6d 70 74 65 64 20  ill be prompted 
2640: 74 6f 20 65 6e 74 65 72 20 61 20 63 68 65 63 6b  to enter a check
2650: 2d 69 6e 20 63 6f 6d 6d 65 6e 74 20 75 6e 6c 65  -in comment unle
2660: 73 73 0a 2a 2a 20 74 68 65 20 22 2d 6d 22 20 6f  ss.** the "-m" o
2670: 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ption is used to
2680: 20 73 70 65 63 69 66 79 20 61 20 63 6f 6d 6d 65   specify a comme
2690: 6e 74 20 6c 69 6e 65 2e 20 20 59 6f 75 20 77 69  nt line.  You wi
26a0: 6c 6c 20 62 65 0a 2a 2a 20 70 72 6f 6d 70 74 65  ll be.** prompte
26b0: 64 20 66 6f 72 20 79 6f 75 72 20 47 50 47 20 70  d for your GPG p
26c0: 61 73 73 70 68 72 61 73 65 20 69 6e 20 6f 72 64  assphrase in ord
26d0: 65 72 20 74 6f 20 73 69 67 6e 20 74 68 65 20 6e  er to sign the n
26e0: 65 77 20 6d 61 6e 69 66 65 73 74 0a 2a 2a 20 75  ew manifest.** u
26f0: 6e 6c 65 73 73 20 74 68 65 20 22 2d 2d 6e 6f 73  nless the "--nos
2700: 69 67 6e 22 20 6f 70 74 69 6f 6e 73 20 69 73 20  ign" options is 
2710: 75 73 65 64 2e 20 20 41 6c 6c 20 66 69 6c 65 73  used.  All files
2720: 20 74 68 61 74 20 68 61 76 65 0a 2a 2a 20 63 68   that have.** ch
2730: 61 6e 67 65 64 20 77 69 6c 6c 20 62 65 20 63 6f  anged will be co
2740: 6d 6d 69 74 74 65 64 20 75 6e 6c 65 73 73 20 73  mmitted unless s
2750: 6f 6d 65 20 73 75 62 73 65 74 20 6f 66 20 66 69  ome subset of fi
2760: 6c 65 73 20 69 73 20 73 70 65 63 69 66 69 65 64  les is specified
2770: 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61  .** on the comma
2780: 6e 64 20 6c 69 6e 65 2e 0a 2a 2f 0a 76 6f 69 64  nd line..*/.void
2790: 20 63 6f 6d 6d 69 74 5f 63 6d 64 28 76 6f 69 64   commit_cmd(void
27a0: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  ){.  int rc;.  i
27b0: 6e 74 20 76 69 64 2c 20 6e 72 69 64 2c 20 6e 76  nt vid, nrid, nv
27c0: 69 64 2c 20 77 6f 75 6c 64 46 6f 72 6b 3d 30 3b  id, wouldFork=0;
27d0: 0a 20 20 42 6c 6f 62 20 63 6f 6d 6d 65 6e 74 3b  .  Blob comment;
27e0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
27f0: 43 6f 6d 6d 65 6e 74 3b 0a 20 20 53 74 6d 74 20  Comment;.  Stmt 
2800: 71 3b 0a 20 20 53 74 6d 74 20 71 32 3b 0a 20 20  q;.  Stmt q2;.  
2810: 63 68 61 72 20 2a 7a 55 75 69 64 2c 20 2a 7a 44  char *zUuid, *zD
2820: 61 74 65 3b 0a 20 20 69 6e 74 20 6e 6f 53 69 67  ate;.  int noSig
2830: 6e 20 3d 20 30 3b 20 20 20 20 20 20 20 20 2f 2a  n = 0;        /*
2840: 20 54 72 75 65 20 74 6f 20 6f 6d 69 74 20 73 69   True to omit si
2850: 67 6e 69 6e 67 20 74 68 65 20 6d 61 6e 69 66 65  gning the manife
2860: 73 74 20 75 73 69 6e 67 20 47 50 47 20 2a 2f 0a  st using GPG */.
2870: 20 20 69 6e 74 20 69 73 41 4d 65 72 67 65 20 3d    int isAMerge =
2880: 20 30 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65   0;      /* True
2890: 20 69 66 20 63 68 65 63 6b 69 6e 67 20 69 6e 20   if checking in 
28a0: 61 20 6d 65 72 67 65 20 2a 2f 0a 20 20 69 6e 74  a merge */.  int
28b0: 20 66 6f 72 63 65 46 6c 61 67 20 3d 20 30 3b 20   forceFlag = 0; 
28c0: 20 20 20 20 2f 2a 20 46 6f 72 63 65 20 61 20 66      /* Force a f
28d0: 6f 72 6b 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ork */.  char *z
28e0: 4d 61 6e 69 66 65 73 74 46 69 6c 65 3b 20 20 20  ManifestFile;   
28f0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d  /* Name of the m
2900: 61 6e 69 66 65 73 74 20 66 69 6c 65 20 2a 2f 0a  anifest file */.
2910: 20 20 69 6e 74 20 6e 42 61 73 65 6e 61 6d 65 3b    int nBasename;
2920: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
2930: 74 68 20 6f 66 20 22 67 2e 7a 4c 6f 63 61 6c 52  th of "g.zLocalR
2940: 6f 6f 74 2f 22 20 2a 2f 0a 20 20 42 6c 6f 62 20  oot/" */.  Blob 
2950: 66 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  filename;       
2960: 20 20 2f 2a 20 63 6f 6d 70 6c 65 74 65 20 66 69    /* complete fi
2970: 6c 65 6e 61 6d 65 20 2a 2f 0a 20 20 42 6c 6f 62  lename */.  Blob
2980: 20 6d 61 6e 69 66 65 73 74 3b 0a 20 20 42 6c 6f   manifest;.  Blo
2990: 62 20 6d 75 75 69 64 3b 20 20 20 20 20 20 20 20  b muuid;        
29a0: 20 20 20 20 2f 2a 20 4d 61 6e 69 66 65 73 74 20      /* Manifest 
29b0: 75 75 69 64 20 2a 2f 0a 20 20 42 6c 6f 62 20 6d  uuid */.  Blob m
29c0: 63 6b 73 75 6d 3b 20 20 20 20 20 20 20 20 20 20  cksum;          
29d0: 20 2f 2a 20 53 65 6c 66 2d 63 68 65 63 6b 73 75   /* Self-checksu
29e0: 6d 20 6f 6e 20 74 68 65 20 6d 61 6e 69 66 65 73  m on the manifes
29f0: 74 20 2a 2f 0a 20 20 42 6c 6f 62 20 63 6b 73 75  t */.  Blob cksu
2a00: 6d 31 2c 20 63 6b 73 75 6d 32 3b 20 20 20 2f 2a  m1, cksum2;   /*
2a10: 20 42 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   Before and afte
2a20: 72 20 63 6f 6d 6d 69 74 20 63 68 65 63 6b 73 75  r commit checksu
2a30: 6d 73 20 2a 2f 0a 20 20 42 6c 6f 62 20 63 6b 73  ms */.  Blob cks
2a40: 75 6d 31 62 3b 20 20 20 20 20 20 20 20 20 20 2f  um1b;          /
2a50: 2a 20 43 68 65 63 6b 73 75 6d 20 72 65 63 6f 72  * Checksum recor
2a60: 64 65 64 20 69 6e 20 74 68 65 20 6d 61 6e 69 66  ded in the manif
2a70: 65 73 74 20 2a 2f 0a 20 0a 20 20 75 72 6c 5f 70  est */. .  url_p
2a80: 72 6f 78 79 5f 6f 70 74 69 6f 6e 73 28 29 3b 0a  roxy_options();.
2a90: 20 20 6e 6f 53 69 67 6e 20 3d 20 66 69 6e 64 5f    noSign = find_
2aa0: 6f 70 74 69 6f 6e 28 22 6e 6f 73 69 67 6e 22 2c  option("nosign",
2ab0: 22 22 2c 30 29 21 3d 30 3b 0a 20 20 7a 43 6f 6d  "",0)!=0;.  zCom
2ac0: 6d 65 6e 74 20 3d 20 66 69 6e 64 5f 6f 70 74 69  ment = find_opti
2ad0: 6f 6e 28 22 63 6f 6d 6d 65 6e 74 22 2c 22 6d 22  on("comment","m"
2ae0: 2c 31 29 3b 0a 20 20 66 6f 72 63 65 46 6c 61 67  ,1);.  forceFlag
2af0: 20 3d 20 66 69 6e 64 5f 6f 70 74 69 6f 6e 28 22   = find_option("
2b00: 66 6f 72 63 65 22 2c 20 22 66 22 2c 20 30 29 21  force", "f", 0)!
2b10: 3d 30 3b 0a 20 20 64 62 5f 6d 75 73 74 5f 62 65  =0;.  db_must_be
2b20: 5f 77 69 74 68 69 6e 5f 74 72 65 65 28 29 3b 0a  _within_tree();.
2b30: 20 20 6e 6f 53 69 67 6e 20 3d 20 64 62 5f 67 65    noSign = db_ge
2b40: 74 5f 62 6f 6f 6c 65 61 6e 28 22 6f 6d 69 74 73  t_boolean("omits
2b50: 69 67 6e 22 2c 20 30 29 7c 6e 6f 53 69 67 6e 3b  ign", 0)|noSign;
2b60: 0a 20 20 69 66 28 20 64 62 5f 67 65 74 5f 62 6f  .  if( db_get_bo
2b70: 6f 6c 65 61 6e 28 22 63 6c 65 61 72 73 69 67 6e  olean("clearsign
2b80: 22 2c 20 31 29 3d 3d 30 20 29 7b 20 6e 6f 53 69  ", 1)==0 ){ noSi
2b90: 67 6e 20 3d 20 31 3b 20 7d 0a 20 20 76 65 72 69  gn = 1; }.  veri
2ba0: 66 79 5f 61 6c 6c 5f 6f 70 74 69 6f 6e 73 28 29  fy_all_options()
2bb0: 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 41 75 74  ;..  /*.  ** Aut
2bc0: 6f 73 79 6e 63 20 69 66 20 72 65 71 75 65 73 74  osync if request
2bd0: 65 64 2e 0a 20 20 2a 2f 0a 20 20 61 75 74 6f 73  ed..  */.  autos
2be0: 79 6e 63 28 41 55 54 4f 53 59 4e 43 5f 50 55 4c  ync(AUTOSYNC_PUL
2bf0: 4c 29 3b 0a 20 20 0a 20 20 2f 2a 20 54 68 65 72  L);.  .  /* Ther
2c00: 65 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74  e are two ways t
2c10: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20  his command may 
2c20: 62 65 20 65 78 65 63 75 74 65 64 2e 20 49 66 20  be executed. If 
2c30: 74 68 65 72 65 20 61 72 65 0a 20 20 2a 2a 20 6e  there are.  ** n
2c40: 6f 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 6c 6c  o arguments foll
2c50: 6f 77 69 6e 67 20 74 68 65 20 77 6f 72 64 20 22  owing the word "
2c60: 63 6f 6d 6d 69 74 22 2c 20 74 68 65 6e 20 61 6c  commit", then al
2c70: 6c 20 6d 6f 64 69 66 69 65 64 20 66 69 6c 65 73  l modified files
2c80: 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 63 68 65  .  ** in the che
2c90: 63 6b 65 64 20 6f 75 74 20 64 69 72 65 63 74 6f  cked out directo
2ca0: 72 79 20 61 72 65 20 63 6f 6d 6d 69 74 74 65 64  ry are committed
2cb0: 2e 20 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  . If one or more
2cc0: 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 2a 2a 20   arguments.  ** 
2cd0: 66 6f 6c 6c 6f 77 73 20 22 63 6f 6d 6d 69 74 22  follows "commit"
2ce0: 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73  , then only thos
2cf0: 65 20 66 69 6c 65 73 20 61 72 65 20 63 6f 6d 6d  e files are comm
2d00: 69 74 74 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  itted..  **.  **
2d10: 20 41 66 74 65 72 20 74 68 65 20 66 6f 6c 6c 6f   After the follo
2d20: 77 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 63 61  wing function ca
2d30: 6c 6c 20 68 61 73 20 72 65 74 75 72 6e 65 64 2c  ll has returned,
2d40: 20 74 68 65 20 47 6c 6f 62 61 6c 2e 61 43 6f 6d   the Global.aCom
2d50: 6d 69 74 46 69 6c 65 5b 5d 0a 20 20 2a 2a 20 61  mitFile[].  ** a
2d60: 72 72 61 79 20 69 73 20 61 6c 6c 6f 63 61 74 65  rray is allocate
2d70: 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  d to contain the
2d80: 20 22 69 64 22 20 66 69 65 6c 64 20 66 72 6f 6d   "id" field from
2d90: 20 74 68 65 20 76 66 69 6c 65 20 74 61 62 6c 65   the vfile table
2da0: 0a 20 20 2a 2a 20 66 6f 72 20 65 61 63 68 20 66  .  ** for each f
2db0: 69 6c 65 20 74 6f 20 62 65 20 63 6f 6d 6d 69 74  ile to be commit
2dc0: 74 65 64 2e 20 4f 72 2c 20 69 66 20 61 43 6f 6d  ted. Or, if aCom
2dd0: 6d 69 74 46 69 6c 65 20 69 73 20 4e 55 4c 4c 2c  mitFile is NULL,
2de0: 20 61 6c 6c 20 66 69 6c 65 73 0a 20 20 2a 2a 20   all files.  ** 
2df0: 73 68 6f 75 6c 64 20 62 65 20 63 6f 6d 6d 69 74  should be commit
2e00: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 65 6c 65  ted..  */.  sele
2e10: 63 74 5f 63 6f 6d 6d 69 74 5f 66 69 6c 65 73 28  ct_commit_files(
2e20: 29 3b 0a 20 20 69 73 41 4d 65 72 67 65 20 3d 20  );.  isAMerge = 
2e30: 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43  db_exists("SELEC
2e40: 54 20 31 20 46 52 4f 4d 20 76 6d 65 72 67 65 22  T 1 FROM vmerge"
2e50: 29 3b 0a 20 20 69 66 28 20 67 2e 61 43 6f 6d 6d  );.  if( g.aComm
2e60: 69 74 46 69 6c 65 20 26 26 20 69 73 41 4d 65 72  itFile && isAMer
2e70: 67 65 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c  ge ){.    fossil
2e80: 5f 66 61 74 61 6c 28 22 63 61 6e 6e 6f 74 20 64  _fatal("cannot d
2e90: 6f 20 61 20 70 61 72 74 69 61 6c 20 63 6f 6d 6d  o a partial comm
2ea0: 69 74 20 6f 66 20 61 20 6d 65 72 67 65 22 29 3b  it of a merge");
2eb0: 0a 20 20 7d 0a 0a 20 20 75 73 65 72 5f 73 65 6c  .  }..  user_sel
2ec0: 65 63 74 28 29 3b 0a 20 20 2f 2a 0a 20 20 2a 2a  ect();.  /*.  **
2ed0: 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65 20   Check that the 
2ee0: 75 73 65 72 20 65 78 69 73 74 73 2e 0a 20 20 2a  user exists..  *
2ef0: 2f 0a 20 20 69 66 28 20 21 64 62 5f 65 78 69 73  /.  if( !db_exis
2f00: 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f  ts("SELECT 1 FRO
2f10: 4d 20 75 73 65 72 20 57 48 45 52 45 20 6c 6f 67  M user WHERE log
2f20: 69 6e 3d 25 51 22 2c 20 67 2e 7a 4c 6f 67 69 6e  in=%Q", g.zLogin
2f30: 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f  ) ){.    fossil_
2f40: 66 61 74 61 6c 28 22 6e 6f 20 73 75 63 68 20 75  fatal("no such u
2f50: 73 65 72 3a 20 25 73 22 2c 20 67 2e 7a 4c 6f 67  ser: %s", g.zLog
2f60: 69 6e 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 64 62  in);.  }.  .  db
2f70: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69  _begin_transacti
2f80: 6f 6e 28 29 3b 0a 20 20 64 62 5f 72 65 63 6f 72  on();.  db_recor
2f90: 64 5f 72 65 70 6f 73 69 74 6f 72 79 5f 66 69 6c  d_repository_fil
2fa0: 65 6e 61 6d 65 28 30 29 3b 0a 20 20 72 63 20 3d  ename(0);.  rc =
2fb0: 20 75 6e 73 61 76 65 64 5f 63 68 61 6e 67 65 73   unsaved_changes
2fc0: 28 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20  ();.  if( rc==0 
2fd0: 26 26 20 21 69 73 41 4d 65 72 67 65 20 26 26 20  && !isAMerge && 
2fe0: 21 66 6f 72 63 65 46 6c 61 67 20 29 7b 0a 20 20  !forceFlag ){.  
2ff0: 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22    fossil_panic("
3000: 6e 6f 74 68 69 6e 67 20 68 61 73 20 63 68 61 6e  nothing has chan
3010: 67 65 64 22 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ged");.  }..  /*
3020: 20 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   If one or more 
3030: 66 69 6c 65 73 20 74 68 61 74 20 77 65 72 65 20  files that were 
3040: 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 63 6f 6d  named on the com
3050: 6d 61 6e 64 20 6c 69 6e 65 20 68 61 76 65 20 6e  mand line have n
3060: 6f 74 0a 20 20 2a 2a 20 62 65 65 6e 20 6d 6f 64  ot.  ** been mod
3070: 69 66 69 65 64 2c 20 62 61 69 6c 20 6f 75 74 20  ified, bail out 
3080: 6e 6f 77 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  now..  */.  if( 
3090: 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 20 29 7b  g.aCommitFile ){
30a0: 0a 20 20 20 20 42 6c 6f 62 20 75 6e 6d 6f 64 69  .    Blob unmodi
30b0: 66 69 65 64 3b 0a 20 20 20 20 6d 65 6d 73 65 74  fied;.    memset
30c0: 28 26 75 6e 6d 6f 64 69 66 69 65 64 2c 20 30 2c  (&unmodified, 0,
30d0: 20 73 69 7a 65 6f 66 28 42 6c 6f 62 29 29 3b 0a   sizeof(Blob));.
30e0: 20 20 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 75      blob_init(&u
30f0: 6e 6d 6f 64 69 66 69 65 64 2c 20 30 2c 20 30 29  nmodified, 0, 0)
3100: 3b 0a 20 20 20 20 64 62 5f 62 6c 6f 62 28 26 75  ;.    db_blob(&u
3110: 6e 6d 6f 64 69 66 69 65 64 2c 20 0a 20 20 20 20  nmodified, .    
3120: 20 20 22 53 45 4c 45 43 54 20 70 61 74 68 6e 61    "SELECT pathna
3130: 6d 65 20 46 52 4f 4d 20 76 66 69 6c 65 20 57 48  me FROM vfile WH
3140: 45 52 45 20 63 68 6e 67 65 64 20 3d 20 30 20 41  ERE chnged = 0 A
3150: 4e 44 20 66 69 6c 65 5f 69 73 5f 73 65 6c 65 63  ND file_is_selec
3160: 74 65 64 28 69 64 29 22 0a 20 20 20 20 29 3b 0a  ted(id)".    );.
3170: 20 20 20 20 69 66 28 20 73 74 72 6c 65 6e 28 62      if( strlen(b
3180: 6c 6f 62 5f 73 74 72 28 26 75 6e 6d 6f 64 69 66  lob_str(&unmodif
3190: 69 65 64 29 29 20 29 7b 0a 20 20 20 20 20 20 66  ied)) ){.      f
31a0: 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 66 69 6c  ossil_panic("fil
31b0: 65 20 25 73 20 68 61 73 20 6e 6f 74 20 63 68 61  e %s has not cha
31c0: 6e 67 65 64 22 2c 20 62 6c 6f 62 5f 73 74 72 28  nged", blob_str(
31d0: 26 75 6e 6d 6f 64 69 66 69 65 64 29 29 3b 0a 20  &unmodified));. 
31e0: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 76 69 64 20     }.  }..  vid 
31f0: 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74 28 22 63  = db_lget_int("c
3200: 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b 0a 20 20  heckout", 0);.  
3210: 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 53  if( db_exists("S
3220: 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 6c 69  ELECT 1 FROM pli
3230: 6e 6b 20 57 48 45 52 45 20 70 69 64 3d 25 64 22  nk WHERE pid=%d"
3240: 2c 20 76 69 64 29 20 29 7b 0a 20 20 20 20 77 6f  , vid) ){.    wo
3250: 75 6c 64 46 6f 72 6b 3d 31 3b 0a 20 20 20 20 69  uldFork=1;.    i
3260: 66 28 20 66 6f 72 63 65 46 6c 61 67 3d 3d 30 20  f( forceFlag==0 
3270: 29 7b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f  ){.      fossil_
3280: 66 61 74 61 6c 28 22 77 6f 75 6c 64 20 66 6f 72  fatal("would for
3290: 6b 2e 20 20 75 73 65 20 2d 66 20 6f 72 20 2d 2d  k.  use -f or --
32a0: 66 6f 72 63 65 22 29 3b 0a 20 20 20 20 7d 0a 20  force");.    }. 
32b0: 20 7d 0a 20 20 76 66 69 6c 65 5f 61 67 67 72 65   }.  vfile_aggre
32c0: 67 61 74 65 5f 63 68 65 63 6b 73 75 6d 5f 64 69  gate_checksum_di
32d0: 73 6b 28 76 69 64 2c 20 26 63 6b 73 75 6d 31 29  sk(vid, &cksum1)
32e0: 3b 0a 20 20 69 66 28 20 7a 43 6f 6d 6d 65 6e 74  ;.  if( zComment
32f0: 20 29 7b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72   ){.    blob_zer
3300: 6f 28 26 63 6f 6d 6d 65 6e 74 29 3b 0a 20 20 20  o(&comment);.   
3310: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 63 6f   blob_append(&co
3320: 6d 6d 65 6e 74 2c 20 7a 43 6f 6d 6d 65 6e 74 2c  mment, zComment,
3330: 20 2d 31 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   -1);.  }else{. 
3340: 20 20 20 70 72 65 70 61 72 65 5f 63 6f 6d 6d 69     prepare_commi
3350: 74 5f 63 6f 6d 6d 65 6e 74 28 26 63 6f 6d 6d 65  t_comment(&comme
3360: 6e 74 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53  nt);.  }..  /* S
3370: 74 65 70 20 31 3a 20 49 6e 73 65 72 74 20 72 65  tep 1: Insert re
3380: 63 6f 72 64 73 20 66 6f 72 20 61 6c 6c 20 6d 6f  cords for all mo
3390: 64 69 66 69 65 64 20 66 69 6c 65 73 20 69 6e 74  dified files int
33a0: 6f 20 74 68 65 20 62 6c 6f 62 20 0a 20 20 2a 2a  o the blob .  **
33b0: 20 74 61 62 6c 65 2e 20 49 66 20 74 68 65 72 65   table. If there
33c0: 20 77 65 72 65 20 61 72 67 75 6d 65 6e 74 73 20   were arguments 
33d0: 70 61 73 73 65 64 20 74 6f 20 74 68 69 73 20 63  passed to this c
33e0: 6f 6d 6d 61 6e 64 2c 20 6f 6e 6c 79 0a 20 20 2a  ommand, only.  *
33f0: 2a 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 64  * the identified
3400: 20 66 69 6c 73 20 61 72 65 20 69 6e 73 65 72 74   fils are insert
3410: 65 64 20 28 69 66 20 74 68 65 79 20 68 61 76 65  ed (if they have
3420: 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 29 2e   been modified).
3430: 0a 20 20 2a 2f 0a 20 20 64 62 5f 70 72 65 70 61  .  */.  db_prepa
3440: 72 65 28 26 71 2c 0a 20 20 20 20 22 53 45 4c 45  re(&q,.    "SELE
3450: 43 54 20 69 64 2c 20 25 51 20 7c 7c 20 70 61 74  CT id, %Q || pat
3460: 68 6e 61 6d 65 2c 20 6d 72 69 64 20 46 52 4f 4d  hname, mrid FROM
3470: 20 76 66 69 6c 65 20 22 0a 20 20 20 20 22 57 48   vfile ".    "WH
3480: 45 52 45 20 63 68 6e 67 65 64 3d 3d 31 20 41 4e  ERE chnged==1 AN
3490: 44 20 4e 4f 54 20 64 65 6c 65 74 65 64 20 41 4e  D NOT deleted AN
34a0: 44 20 66 69 6c 65 5f 69 73 5f 73 65 6c 65 63 74  D file_is_select
34b0: 65 64 28 69 64 29 22 0a 20 20 20 20 2c 20 67 2e  ed(id)".    , g.
34c0: 7a 4c 6f 63 61 6c 52 6f 6f 74 0a 20 20 29 3b 0a  zLocalRoot.  );.
34d0: 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70    while( db_step
34e0: 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  (&q)==SQLITE_ROW
34f0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 64 2c 20   ){.    int id, 
3500: 72 69 64 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  rid;.    const c
3510: 68 61 72 20 2a 7a 46 75 6c 6c 6e 61 6d 65 3b 0a  har *zFullname;.
3520: 20 20 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74      Blob content
3530: 3b 0a 0a 20 20 20 20 69 64 20 3d 20 64 62 5f 63  ;..    id = db_c
3540: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 30 29  olumn_int(&q, 0)
3550: 3b 0a 20 20 20 20 7a 46 75 6c 6c 6e 61 6d 65 20  ;.    zFullname 
3560: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  = db_column_text
3570: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 72 69 64  (&q, 1);.    rid
3580: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74   = db_column_int
3590: 28 26 71 2c 20 32 29 3b 0a 0a 20 20 20 20 62 6c  (&q, 2);..    bl
35a0: 6f 62 5f 7a 65 72 6f 28 26 63 6f 6e 74 65 6e 74  ob_zero(&content
35b0: 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 72 65 61 64  );.    blob_read
35c0: 5f 66 72 6f 6d 5f 66 69 6c 65 28 26 63 6f 6e 74  _from_file(&cont
35d0: 65 6e 74 2c 20 7a 46 75 6c 6c 6e 61 6d 65 29 3b  ent, zFullname);
35e0: 0a 20 20 20 20 6e 72 69 64 20 3d 20 63 6f 6e 74  .    nrid = cont
35f0: 65 6e 74 5f 70 75 74 28 26 63 6f 6e 74 65 6e 74  ent_put(&content
3600: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  , 0, 0);.    if(
3610: 20 72 69 64 3e 30 20 29 7b 0a 20 20 20 20 20 20   rid>0 ){.      
3620: 63 6f 6e 74 65 6e 74 5f 64 65 6c 74 69 66 79 28  content_deltify(
3630: 72 69 64 2c 20 6e 72 69 64 2c 20 30 29 3b 0a 20  rid, nrid, 0);. 
3640: 20 20 20 7d 0a 20 20 20 20 64 62 5f 6d 75 6c 74     }.    db_mult
3650: 69 5f 65 78 65 63 28 22 55 50 44 41 54 45 20 76  i_exec("UPDATE v
3660: 66 69 6c 65 20 53 45 54 20 6d 72 69 64 3d 25 64  file SET mrid=%d
3670: 2c 20 72 69 64 3d 25 64 20 57 48 45 52 45 20 69  , rid=%d WHERE i
3680: 64 3d 25 64 22 2c 20 6e 72 69 64 2c 6e 72 69 64  d=%d", nrid,nrid
3690: 2c 69 64 29 3b 0a 20 20 20 20 64 62 5f 6d 75 6c  ,id);.    db_mul
36a0: 74 69 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20  ti_exec("INSERT 
36b0: 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 75  OR IGNORE INTO u
36c0: 6e 73 65 6e 74 20 56 41 4c 55 45 53 28 25 64 29  nsent VALUES(%d)
36d0: 22 2c 20 6e 72 69 64 29 3b 0a 20 20 7d 0a 20 20  ", nrid);.  }.  
36e0: 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b  db_finalize(&q);
36f0: 0a 0a 20 20 2f 2a 20 43 72 65 61 74 65 20 74 68  ..  /* Create th
3700: 65 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 20 20  e manifest */.  
3710: 62 6c 6f 62 5f 7a 65 72 6f 28 26 6d 61 6e 69 66  blob_zero(&manif
3720: 65 73 74 29 3b 0a 20 20 69 66 28 20 62 6c 6f 62  est);.  if( blob
3730: 5f 73 69 7a 65 28 26 63 6f 6d 6d 65 6e 74 29 3d  _size(&comment)=
3740: 3d 30 20 29 7b 0a 20 20 20 20 62 6c 6f 62 5f 61  =0 ){.    blob_a
3750: 70 70 65 6e 64 28 26 63 6f 6d 6d 65 6e 74 2c 20  ppend(&comment, 
3760: 22 28 6e 6f 20 63 6f 6d 6d 65 6e 74 29 22 2c 20  "(no comment)", 
3770: 2d 31 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f  -1);.  }.  blob_
3780: 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66 65 73  appendf(&manifes
3790: 74 2c 20 22 43 20 25 46 5c 6e 22 2c 20 62 6c 6f  t, "C %F\n", blo
37a0: 62 5f 73 74 72 28 26 63 6f 6d 6d 65 6e 74 29 29  b_str(&comment))
37b0: 3b 0a 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 74  ;.  zDate = db_t
37c0: 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64  ext(0, "SELECT d
37d0: 61 74 65 74 69 6d 65 28 27 6e 6f 77 27 29 22 29  atetime('now')")
37e0: 3b 0a 20 20 7a 44 61 74 65 5b 31 30 5d 20 3d 20  ;.  zDate[10] = 
37f0: 27 54 27 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65  'T';.  blob_appe
3800: 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22  ndf(&manifest, "
3810: 44 20 25 73 5c 6e 22 2c 20 7a 44 61 74 65 29 3b  D %s\n", zDate);
3820: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71  .  db_prepare(&q
3830: 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 20 70 61  ,.    "SELECT pa
3840: 74 68 6e 61 6d 65 2c 20 75 75 69 64 20 46 52 4f  thname, uuid FRO
3850: 4d 20 76 66 69 6c 65 20 4a 4f 49 4e 20 62 6c 6f  M vfile JOIN blo
3860: 62 20 4f 4e 20 76 66 69 6c 65 2e 6d 72 69 64 3d  b ON vfile.mrid=
3870: 62 6c 6f 62 2e 72 69 64 22 0a 20 20 20 20 22 20  blob.rid".    " 
3880: 57 48 45 52 45 20 4e 4f 54 20 64 65 6c 65 74 65  WHERE NOT delete
3890: 64 20 41 4e 44 20 76 66 69 6c 65 2e 76 69 64 3d  d AND vfile.vid=
38a0: 25 64 22 0a 20 20 20 20 22 20 4f 52 44 45 52 20  %d".    " ORDER 
38b0: 42 59 20 31 22 2c 20 76 69 64 29 3b 0a 20 20 62  BY 1", vid);.  b
38c0: 6c 6f 62 5f 7a 65 72 6f 28 26 66 69 6c 65 6e 61  lob_zero(&filena
38d0: 6d 65 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65  me);.  blob_appe
38e0: 6e 64 66 28 26 66 69 6c 65 6e 61 6d 65 2c 20 22  ndf(&filename, "
38f0: 25 73 2f 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f  %s/", g.zLocalRo
3900: 6f 74 29 3b 0a 20 20 6e 42 61 73 65 6e 61 6d 65  ot);.  nBasename
3910: 20 3d 20 62 6c 6f 62 5f 73 69 7a 65 28 26 66 69   = blob_size(&fi
3920: 6c 65 6e 61 6d 65 29 3b 0a 20 20 77 68 69 6c 65  lename);.  while
3930: 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53  ( db_step(&q)==S
3940: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20  QLITE_ROW ){.   
3950: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
3960: 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74  me = db_column_t
3970: 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20  ext(&q, 0);.    
3980: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69  const char *zUui
3990: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65  d = db_column_te
39a0: 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 63  xt(&q, 1);.    c
39b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 65 72 6d  onst char *zPerm
39c0: 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e  ;.    blob_appen
39d0: 64 28 26 66 69 6c 65 6e 61 6d 65 2c 20 7a 4e 61  d(&filename, zNa
39e0: 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 69 66 28  me, -1);.    if(
39f0: 20 66 69 6c 65 5f 69 73 65 78 65 28 62 6c 6f 62   file_isexe(blob
3a00: 5f 73 74 72 28 26 66 69 6c 65 6e 61 6d 65 29 29  _str(&filename))
3a10: 20 29 7b 0a 20 20 20 20 20 20 7a 50 65 72 6d 20   ){.      zPerm 
3a20: 3d 20 22 20 78 22 3b 0a 20 20 20 20 7d 65 6c 73  = " x";.    }els
3a30: 65 7b 0a 20 20 20 20 20 20 7a 50 65 72 6d 20 3d  e{.      zPerm =
3a40: 20 22 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62   "";.    }.    b
3a50: 6c 6f 62 5f 72 65 73 69 7a 65 28 26 66 69 6c 65  lob_resize(&file
3a60: 6e 61 6d 65 2c 20 6e 42 61 73 65 6e 61 6d 65 29  name, nBasename)
3a70: 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e  ;.    blob_appen
3a80: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 46  df(&manifest, "F
3a90: 20 25 46 20 25 73 25 73 5c 6e 22 2c 20 7a 4e 61   %F %s%s\n", zNa
3aa0: 6d 65 2c 20 7a 55 75 69 64 2c 20 7a 50 65 72 6d  me, zUuid, zPerm
3ab0: 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 72 65  );.  }.  blob_re
3ac0: 73 65 74 28 26 66 69 6c 65 6e 61 6d 65 29 3b 0a  set(&filename);.
3ad0: 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71    db_finalize(&q
3ae0: 29 3b 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 5f  );.  zUuid = db_
3af0: 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20  text(0, "SELECT 
3b00: 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57  uuid FROM blob W
3b10: 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 76 69  HERE rid=%d", vi
3b20: 64 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e  d);.  blob_appen
3b30: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 50  df(&manifest, "P
3b40: 20 25 73 22 2c 20 7a 55 75 69 64 29 3b 0a 0a 20   %s", zUuid);.. 
3b50: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 32 2c   db_prepare(&q2,
3b60: 20 22 53 45 4c 45 43 54 20 6d 65 72 67 65 20 46   "SELECT merge F
3b70: 52 4f 4d 20 76 6d 65 72 67 65 20 57 48 45 52 45  ROM vmerge WHERE
3b80: 20 69 64 3d 3a 69 64 22 29 3b 0a 20 20 64 62 5f   id=:id");.  db_
3b90: 62 69 6e 64 5f 69 6e 74 28 26 71 32 2c 20 22 3a  bind_int(&q2, ":
3ba0: 69 64 22 2c 20 30 29 3b 0a 20 20 77 68 69 6c 65  id", 0);.  while
3bb0: 28 20 64 62 5f 73 74 65 70 28 26 71 32 29 3d 3d  ( db_step(&q2)==
3bc0: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20  SQLITE_ROW ){.  
3bd0: 20 20 69 6e 74 20 6d 69 64 20 3d 20 64 62 5f 63    int mid = db_c
3be0: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 32 2c 20 30  olumn_int(&q2, 0
3bf0: 29 3b 0a 20 20 20 20 7a 55 75 69 64 20 3d 20 64  );.    zUuid = d
3c00: 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43  b_text(0, "SELEC
3c10: 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62  T uuid FROM blob
3c20: 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20   WHERE rid=%d", 
3c30: 6d 69 64 29 3b 0a 20 20 20 20 69 66 28 20 7a 55  mid);.    if( zU
3c40: 75 69 64 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f  uid ){.      blo
3c50: 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66  b_appendf(&manif
3c60: 65 73 74 2c 20 22 20 25 73 22 2c 20 7a 55 75 69  est, " %s", zUui
3c70: 64 29 3b 0a 20 20 20 20 20 20 66 72 65 65 28 7a  d);.      free(z
3c80: 55 75 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  Uuid);.    }.  }
3c90: 0a 20 20 64 62 5f 72 65 73 65 74 28 26 71 32 29  .  db_reset(&q2)
3ca0: 3b 0a 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64  ;..  blob_append
3cb0: 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 5c 6e  f(&manifest, "\n
3cc0: 22 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e  ");.  blob_appen
3cd0: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 52  df(&manifest, "R
3ce0: 20 25 62 5c 6e 22 2c 20 26 63 6b 73 75 6d 31 29   %b\n", &cksum1)
3cf0: 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66  ;.  blob_appendf
3d00: 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 55 20 25  (&manifest, "U %
3d10: 46 5c 6e 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b  F\n", g.zLogin);
3d20: 0a 20 20 6d 64 35 73 75 6d 5f 62 6c 6f 62 28 26  .  md5sum_blob(&
3d30: 6d 61 6e 69 66 65 73 74 2c 20 26 6d 63 6b 73 75  manifest, &mcksu
3d40: 6d 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e  m);.  blob_appen
3d50: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 5a  df(&manifest, "Z
3d60: 20 25 62 5c 6e 22 2c 20 26 6d 63 6b 73 75 6d 29   %b\n", &mcksum)
3d70: 3b 0a 20 20 7a 4d 61 6e 69 66 65 73 74 46 69 6c  ;.  zManifestFil
3d80: 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 6d  e = mprintf("%sm
3d90: 61 6e 69 66 65 73 74 22 2c 20 67 2e 7a 4c 6f 63  anifest", g.zLoc
3da0: 61 6c 52 6f 6f 74 29 3b 0a 20 20 69 66 28 20 21  alRoot);.  if( !
3db0: 6e 6f 53 69 67 6e 20 26 26 20 63 6c 65 61 72 73  noSign && clears
3dc0: 69 67 6e 28 26 6d 61 6e 69 66 65 73 74 2c 20 26  ign(&manifest, &
3dd0: 6d 61 6e 69 66 65 73 74 29 20 29 7b 0a 20 20 20  manifest) ){.   
3de0: 20 42 6c 6f 62 20 61 6e 73 3b 0a 20 20 20 20 62   Blob ans;.    b
3df0: 6c 6f 62 5f 7a 65 72 6f 28 26 61 6e 73 29 3b 0a  lob_zero(&ans);.
3e00: 20 20 20 20 70 72 6f 6d 70 74 5f 75 73 65 72 28      prompt_user(
3e10: 22 75 6e 61 62 6c 65 20 74 6f 20 73 69 67 6e 20  "unable to sign 
3e20: 6d 61 6e 69 66 65 73 74 2e 20 20 63 6f 6e 74 69  manifest.  conti
3e30: 6e 75 65 20 5b 79 2f 4e 5d 3f 20 22 2c 20 26 61  nue [y/N]? ", &a
3e40: 6e 73 29 3b 0a 20 20 20 20 69 66 28 20 62 6c 6f  ns);.    if( blo
3e50: 62 5f 73 74 72 28 26 61 6e 73 29 5b 30 5d 21 3d  b_str(&ans)[0]!=
3e60: 27 79 27 20 29 7b 0a 20 20 20 20 20 20 64 62 5f  'y' ){.      db_
3e70: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28  end_transaction(
3e80: 31 29 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31  1);.      exit(1
3e90: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
3ea0: 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69 6c  lob_write_to_fil
3eb0: 65 28 26 6d 61 6e 69 66 65 73 74 2c 20 7a 4d 61  e(&manifest, zMa
3ec0: 6e 69 66 65 73 74 46 69 6c 65 29 3b 0a 20 20 62  nifestFile);.  b
3ed0: 6c 6f 62 5f 72 65 73 65 74 28 26 6d 61 6e 69 66  lob_reset(&manif
3ee0: 65 73 74 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 61  est);.  blob_rea
3ef0: 64 5f 66 72 6f 6d 5f 66 69 6c 65 28 26 6d 61 6e  d_from_file(&man
3f00: 69 66 65 73 74 2c 20 7a 4d 61 6e 69 66 65 73 74  ifest, zManifest
3f10: 46 69 6c 65 29 3b 0a 20 20 66 72 65 65 28 7a 4d  File);.  free(zM
3f20: 61 6e 69 66 65 73 74 46 69 6c 65 29 3b 0a 20 20  anifestFile);.  
3f30: 6e 76 69 64 20 3d 20 63 6f 6e 74 65 6e 74 5f 70  nvid = content_p
3f40: 75 74 28 26 6d 61 6e 69 66 65 73 74 2c 20 30 2c  ut(&manifest, 0,
3f50: 20 30 29 3b 0a 20 20 69 66 28 20 6e 76 69 64 3d   0);.  if( nvid=
3f60: 3d 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c  =0 ){.    fossil
3f70: 5f 70 61 6e 69 63 28 22 74 72 6f 75 62 6c 65 20  _panic("trouble 
3f80: 63 6f 6d 6d 69 74 74 69 6e 67 20 6d 61 6e 69 66  committing manif
3f90: 65 73 74 3a 20 25 73 22 2c 20 67 2e 7a 45 72 72  est: %s", g.zErr
3fa0: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 6d  Msg);.  }.  db_m
3fb0: 75 6c 74 69 5f 65 78 65 63 28 22 49 4e 53 45 52  ulti_exec("INSER
3fc0: 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f  T OR IGNORE INTO
3fd0: 20 75 6e 73 65 6e 74 20 56 41 4c 55 45 53 28 25   unsent VALUES(%
3fe0: 64 29 22 2c 20 6e 76 69 64 29 3b 0a 20 20 6d 61  d)", nvid);.  ma
3ff0: 6e 69 66 65 73 74 5f 63 72 6f 73 73 6c 69 6e 6b  nifest_crosslink
4000: 28 6e 76 69 64 2c 20 26 6d 61 6e 69 66 65 73 74  (nvid, &manifest
4010: 29 3b 0a 20 20 63 6f 6e 74 65 6e 74 5f 64 65 6c  );.  content_del
4020: 74 69 66 79 28 76 69 64 2c 20 6e 76 69 64 2c 20  tify(vid, nvid, 
4030: 30 29 3b 0a 20 20 7a 55 75 69 64 20 3d 20 64 62  0);.  zUuid = db
4040: 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54  _text(0, "SELECT
4050: 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20   uuid FROM blob 
4060: 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 6e  WHERE rid=%d", n
4070: 76 69 64 29 3b 0a 20 20 70 72 69 6e 74 66 28 22  vid);.  printf("
4080: 4e 65 77 5f 56 65 72 73 69 6f 6e 3a 20 25 73 5c  New_Version: %s\
4090: 6e 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 7a 4d  n", zUuid);.  zM
40a0: 61 6e 69 66 65 73 74 46 69 6c 65 20 3d 20 6d 70  anifestFile = mp
40b0: 72 69 6e 74 66 28 22 25 73 6d 61 6e 69 66 65 73  rintf("%smanifes
40c0: 74 2e 75 75 69 64 22 2c 20 67 2e 7a 4c 6f 63 61  t.uuid", g.zLoca
40d0: 6c 52 6f 6f 74 29 3b 0a 20 20 62 6c 6f 62 5f 7a  lRoot);.  blob_z
40e0: 65 72 6f 28 26 6d 75 75 69 64 29 3b 0a 20 20 62  ero(&muuid);.  b
40f0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 75 75  lob_appendf(&muu
4100: 69 64 2c 20 22 25 73 5c 6e 22 2c 20 7a 55 75 69  id, "%s\n", zUui
4110: 64 29 3b 0a 20 20 62 6c 6f 62 5f 77 72 69 74 65  d);.  blob_write
4120: 5f 74 6f 5f 66 69 6c 65 28 26 6d 75 75 69 64 2c  _to_file(&muuid,
4130: 20 7a 4d 61 6e 69 66 65 73 74 46 69 6c 65 29 3b   zManifestFile);
4140: 0a 20 20 66 72 65 65 28 7a 4d 61 6e 69 66 65 73  .  free(zManifes
4150: 74 46 69 6c 65 29 3b 0a 20 20 62 6c 6f 62 5f 72  tFile);.  blob_r
4160: 65 73 65 74 28 26 6d 75 75 69 64 29 3b 0a 0a 20  eset(&muuid);.. 
4170: 20 0a 20 20 2f 2a 20 55 70 64 61 74 65 20 74 68   .  /* Update th
4180: 65 20 76 66 69 6c 65 20 61 6e 64 20 76 6d 65 72  e vfile and vmer
4190: 67 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 64  ge tables */.  d
41a0: 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a 20 20  b_multi_exec(.  
41b0: 20 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 76    "DELETE FROM v
41c0: 66 69 6c 65 20 57 48 45 52 45 20 28 76 69 64 21  file WHERE (vid!
41d0: 3d 25 64 20 4f 52 20 64 65 6c 65 74 65 64 29 20  =%d OR deleted) 
41e0: 41 4e 44 20 66 69 6c 65 5f 69 73 5f 73 65 6c 65  AND file_is_sele
41f0: 63 74 65 64 28 69 64 29 3b 22 0a 20 20 20 20 22  cted(id);".    "
4200: 44 45 4c 45 54 45 20 46 52 4f 4d 20 76 6d 65 72  DELETE FROM vmer
4210: 67 65 20 57 48 45 52 45 20 66 69 6c 65 5f 69 73  ge WHERE file_is
4220: 5f 73 65 6c 65 63 74 65 64 28 69 64 29 20 4f 52  _selected(id) OR
4230: 20 69 64 3d 30 3b 22 0a 20 20 20 20 22 55 50 44   id=0;".    "UPD
4240: 41 54 45 20 76 66 69 6c 65 20 53 45 54 20 76 69  ATE vfile SET vi
4250: 64 3d 25 64 3b 22 0a 20 20 20 20 22 55 50 44 41  d=%d;".    "UPDA
4260: 54 45 20 76 66 69 6c 65 20 53 45 54 20 72 69 64  TE vfile SET rid
4270: 3d 6d 72 69 64 2c 20 63 68 6e 67 65 64 3d 30 2c  =mrid, chnged=0,
4280: 20 64 65 6c 65 74 65 64 3d 30 20 57 48 45 52 45   deleted=0 WHERE
4290: 20 66 69 6c 65 5f 69 73 5f 73 65 6c 65 63 74 65   file_is_selecte
42a0: 64 28 69 64 29 3b 22 0a 20 20 20 20 2c 20 76 69  d(id);".    , vi
42b0: 64 2c 20 6e 76 69 64 0a 20 20 29 3b 0a 20 20 64  d, nvid.  );.  d
42c0: 62 5f 6c 73 65 74 5f 69 6e 74 28 22 63 68 65 63  b_lset_int("chec
42d0: 6b 6f 75 74 22 2c 20 6e 76 69 64 29 3b 0a 0a 20  kout", nvid);.. 
42e0: 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20   /* Verify that 
42f0: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 20 63  the repository c
4300: 68 65 63 6b 73 75 6d 20 6d 61 74 63 68 65 73 20  hecksum matches 
4310: 74 68 65 20 65 78 70 65 63 74 65 64 20 63 68 65  the expected che
4320: 63 6b 73 75 6d 0a 20 20 2a 2a 20 63 61 6c 63 75  cksum.  ** calcu
4330: 6c 61 74 65 64 20 62 65 66 6f 72 65 20 74 68 65  lated before the
4340: 20 63 68 65 63 6b 69 6e 20 73 74 61 72 74 65 64   checkin started
4350: 20 28 61 6e 64 20 73 74 6f 72 65 64 20 61 73 20   (and stored as 
4360: 74 68 65 20 52 20 72 65 63 6f 72 64 0a 20 20 2a  the R record.  *
4370: 2a 20 6f 66 20 74 68 65 20 6d 61 6e 69 66 65 73  * of the manifes
4380: 74 20 66 69 6c 65 29 2e 0a 20 20 2a 2f 0a 20 20  t file)..  */.  
4390: 76 66 69 6c 65 5f 61 67 67 72 65 67 61 74 65 5f  vfile_aggregate_
43a0: 63 68 65 63 6b 73 75 6d 5f 72 65 70 6f 73 69 74  checksum_reposit
43b0: 6f 72 79 28 6e 76 69 64 2c 20 26 63 6b 73 75 6d  ory(nvid, &cksum
43c0: 32 29 3b 0a 20 20 69 66 28 20 62 6c 6f 62 5f 63  2);.  if( blob_c
43d0: 6f 6d 70 61 72 65 28 26 63 6b 73 75 6d 31 2c 20  ompare(&cksum1, 
43e0: 26 63 6b 73 75 6d 32 29 20 29 7b 0a 20 20 20 20  &cksum2) ){.    
43f0: 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 74 72  fossil_panic("tr
4400: 65 65 20 63 68 65 63 6b 73 75 6d 20 64 6f 65 73  ee checksum does
4410: 20 6e 6f 74 20 6d 61 74 63 68 20 72 65 70 6f 73   not match repos
4420: 69 74 6f 72 79 20 61 66 74 65 72 20 63 6f 6d 6d  itory after comm
4430: 69 74 22 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  it");.  }..  /* 
4440: 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  Verify that the 
4450: 6d 61 6e 69 66 65 73 74 20 63 68 65 63 6b 73 75  manifest checksu
4460: 6d 20 6d 61 74 63 68 65 73 20 74 68 65 20 65 78  m matches the ex
4470: 70 65 63 74 65 64 20 63 68 65 63 6b 73 75 6d 20  pected checksum 
4480: 2a 2f 0a 20 20 76 66 69 6c 65 5f 61 67 67 72 65  */.  vfile_aggre
4490: 67 61 74 65 5f 63 68 65 63 6b 73 75 6d 5f 6d 61  gate_checksum_ma
44a0: 6e 69 66 65 73 74 28 6e 76 69 64 2c 20 26 63 6b  nifest(nvid, &ck
44b0: 73 75 6d 32 2c 20 26 63 6b 73 75 6d 31 62 29 3b  sum2, &cksum1b);
44c0: 0a 20 20 69 66 28 20 62 6c 6f 62 5f 63 6f 6d 70  .  if( blob_comp
44d0: 61 72 65 28 26 63 6b 73 75 6d 31 2c 20 26 63 6b  are(&cksum1, &ck
44e0: 73 75 6d 31 62 29 20 29 7b 0a 20 20 20 20 66 6f  sum1b) ){.    fo
44f0: 73 73 69 6c 5f 70 61 6e 69 63 28 22 6d 61 6e 69  ssil_panic("mani
4500: 66 65 73 74 20 63 68 65 63 6b 73 75 6d 20 64 6f  fest checksum do
4510: 65 73 20 6e 6f 74 20 61 67 72 65 65 20 77 69 74  es not agree wit
4520: 68 20 6d 61 6e 69 66 65 73 74 3a 20 22 0a 20 20  h manifest: ".  
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
4540: 25 62 20 76 65 72 73 75 73 20 25 62 22 2c 20 26  %b versus %b", &
4550: 63 6b 73 75 6d 31 2c 20 26 63 6b 73 75 6d 31 62  cksum1, &cksum1b
4560: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 62 6c 6f  );.  }.  if( blo
4570: 62 5f 63 6f 6d 70 61 72 65 28 26 63 6b 73 75 6d  b_compare(&cksum
4580: 31 2c 20 26 63 6b 73 75 6d 32 29 20 29 7b 0a 20  1, &cksum2) ){. 
4590: 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28     fossil_panic(
45a0: 22 74 72 65 65 20 63 68 65 63 6b 73 75 6d 20 64  "tree checksum d
45b0: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 6d 61  oes not match ma
45c0: 6e 69 66 65 73 74 20 61 66 74 65 72 20 63 6f 6d  nifest after com
45d0: 6d 69 74 3a 20 22 0a 20 20 20 20 20 20 20 20 20  mit: ".         
45e0: 20 20 20 20 20 20 20 20 22 25 62 20 76 65 72 73          "%b vers
45f0: 75 73 20 25 62 22 2c 20 26 63 6b 73 75 6d 31 2c  us %b", &cksum1,
4600: 20 26 63 6b 73 75 6d 32 29 3b 0a 20 20 7d 0a 0a   &cksum2);.  }..
4610: 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74    /* Verify that
4620: 20 74 68 65 20 63 6f 6d 6d 69 74 20 64 69 64 20   the commit did 
4630: 6e 6f 74 20 6d 6f 64 69 66 79 20 61 6e 79 20 64  not modify any d
4640: 69 73 6b 20 69 6d 61 67 65 73 2e 20 2a 2f 0a 20  isk images. */. 
4650: 20 76 66 69 6c 65 5f 61 67 67 72 65 67 61 74 65   vfile_aggregate
4660: 5f 63 68 65 63 6b 73 75 6d 5f 64 69 73 6b 28 6e  _checksum_disk(n
4670: 76 69 64 2c 20 26 63 6b 73 75 6d 32 29 3b 0a 20  vid, &cksum2);. 
4680: 20 69 66 28 20 62 6c 6f 62 5f 63 6f 6d 70 61 72   if( blob_compar
4690: 65 28 26 63 6b 73 75 6d 31 2c 20 26 63 6b 73 75  e(&cksum1, &cksu
46a0: 6d 32 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69  m2) ){.    fossi
46b0: 6c 5f 70 61 6e 69 63 28 22 74 72 65 65 20 63 68  l_panic("tree ch
46c0: 65 63 6b 73 75 6d 73 20 62 65 66 6f 72 65 20 61  ecksums before a
46d0: 6e 64 20 61 66 74 65 72 20 63 6f 6d 6d 69 74 20  nd after commit 
46e0: 64 6f 20 6e 6f 74 20 6d 61 74 63 68 22 29 3b 0a  do not match");.
46f0: 20 20 7d 0a 0a 20 20 2f 2a 20 43 6c 65 61 72 20    }..  /* Clear 
4700: 74 68 65 20 75 6e 64 6f 2f 72 65 64 6f 20 73 74  the undo/redo st
4710: 61 63 6b 20 2a 2f 0a 20 20 75 6e 64 6f 5f 72 65  ack */.  undo_re
4720: 73 65 74 28 29 3b 0a 0a 20 20 2f 2a 20 43 6f 6d  set();..  /* Com
4730: 6d 69 74 20 2a 2f 0a 20 20 64 62 5f 65 6e 64 5f  mit */.  db_end_
4740: 74 72 61 6e 73 61 63 74 69 6f 6e 28 30 29 3b 0a  transaction(0);.
4750: 0a 20 20 61 75 74 6f 73 79 6e 63 28 41 55 54 4f  .  autosync(AUTO
4760: 53 59 4e 43 5f 50 55 53 48 29 3b 20 20 0a 20 20  SYNC_PUSH);  .  
4770: 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 53  if( db_exists("S
4780: 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 6c 69  ELECT 1 FROM pli
4790: 6e 6b 20 57 48 45 52 45 20 70 69 64 3d 25 64 20  nk WHERE pid=%d 
47a0: 41 4e 44 20 63 69 64 21 3d 25 64 22 2c 20 76 69  AND cid!=%d", vi
47b0: 64 2c 20 6e 76 69 64 29 20 29 7b 0a 20 20 20 20  d, nvid) ){.    
47c0: 70 72 69 6e 74 66 28 22 2a 2a 2a 2a 20 77 61 72  printf("**** war
47d0: 6e 69 6e 67 3a 20 61 20 66 6f 72 6b 20 68 61 73  ning: a fork has
47e0: 20 6f 63 63 75 72 72 65 64 20 2a 2a 2a 2a 2a 5c   occurred *****\
47f0: 6e 22 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  n");.  }.}../*.*
4800: 2a 20 43 4f 4d 4d 41 4e 44 3a 20 74 65 73 74 2d  * COMMAND: test-
4810: 69 6d 70 6f 72 74 2d 6d 61 6e 69 66 65 73 74 0a  import-manifest.
4820: 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66 6f  **.** Usage: %fo
4830: 73 73 69 6c 20 74 65 73 74 2d 69 6d 70 6f 72 74  ssil test-import
4840: 2d 6d 61 6e 69 66 65 73 74 20 44 41 54 45 20 43  -manifest DATE C
4850: 4f 4d 4d 45 4e 54 20 3f 2d 70 20 50 41 52 45 4e  OMMENT ?-p PAREN
4860: 54 5f 52 45 43 4f 52 44 49 44 3f 2e 2e 2e 20 3f  T_RECORDID?... ?
4870: 2d 66 20 28 46 49 4c 45 5f 52 45 43 4f 52 44 49  -f (FILE_RECORDI
4880: 44 20 50 41 54 48 29 3f 2e 2e 2e 0a 2a 2a 0a 2a  D PATH)?....**.*
4890: 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 76  * Create a new v
48a0: 65 72 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e  ersion containin
48b0: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
48c0: 66 69 6c 65 0a 2a 2a 20 72 65 76 69 73 69 6f 6e  file.** revision
48d0: 73 20 28 69 66 20 61 6e 79 29 2c 20 61 6e 64 20  s (if any), and 
48e0: 63 68 69 6c 64 20 6f 66 20 74 68 65 20 67 69 76  child of the giv
48f0: 65 6e 20 50 41 52 45 4e 54 20 76 65 72 73 69 6f  en PARENT versio
4900: 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 69 6d 70 6f 72  n..*/.void impor
4910: 74 5f 6d 61 6e 69 66 65 73 74 5f 63 6d 64 28 76  t_manifest_cmd(v
4920: 6f 69 64 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68  oid){.  const ch
4930: 61 72 2a 20 7a 44 61 74 65 3b 20 20 20 20 2f 2a  ar* zDate;    /*
4940: 20 61 72 67 75 6d 65 6e 74 20 2d 20 74 69 6d 65   argument - time
4950: 73 74 61 6d 70 2c 20 61 73 20 73 65 63 6f 6e 64  stamp, as second
4960: 73 20 73 69 6e 63 65 20 65 70 6f 63 68 20 28 69  s since epoch (i
4970: 6e 74 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nt) */.  const c
4980: 68 61 72 2a 20 7a 43 6f 6d 6d 65 6e 74 3b 20 2f  har* zComment; /
4990: 2a 20 61 72 67 75 6d 65 6e 74 20 2d 20 6d 61 6e  * argument - man
49a0: 69 66 65 73 74 20 63 6f 6d 6d 65 6e 74 20 2a 2f  ifest comment */
49b0: 0a 20 20 63 68 61 72 2a 20 7a 44 61 74 65 46 6d  .  char* zDateFm
49c0: 74 3b 20 20 20 20 20 20 20 2f 2a 20 74 69 6d 65  t;       /* time
49d0: 73 74 61 6d 70 20 66 6f 72 6d 61 74 74 65 64 20  stamp formatted 
49e0: 66 6f 72 20 74 68 65 20 6d 61 6e 69 66 65 73 74  for the manifest
49f0: 20 2a 2f 0a 20 20 69 6e 74 2a 20 7a 50 61 72 65   */.  int* zPare
4a00: 6e 74 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 61  nts;        /* a
4a10: 72 67 75 6d 65 6e 74 73 20 2d 20 61 72 72 61 79  rguments - array
4a20: 20 6f 66 20 70 61 72 65 6e 74 20 72 65 66 65 72   of parent refer
4a30: 65 6e 63 65 73 20 2a 2f 0a 20 20 69 6e 74 20 7a  ences */.  int z
4a40: 50 61 72 65 6e 74 43 6f 75 6e 74 3b 20 20 20 20  ParentCount;    
4a50: 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 6f   /* number of fo
4a60: 75 6e 64 20 70 61 72 65 6e 74 20 72 65 66 65 72  und parent refer
4a70: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 6c 6f 62 20  ences */.  Blob 
4a80: 6d 61 6e 69 66 65 73 74 3b 20 20 20 20 20 20 20  manifest;       
4a90: 20 2f 2a 20 63 6f 6e 74 61 69 6e 65 72 20 66 6f   /* container fo
4aa0: 72 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 74  r the manifest t
4ab0: 6f 20 62 65 20 67 65 6e 65 72 61 74 65 64 20 2a  o be generated *
4ac0: 2f 0a 20 20 42 6c 6f 62 20 6d 63 6b 73 75 6d 3b  /.  Blob mcksum;
4ad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 6c            /* Sel
4ae0: 66 2d 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68  f-checksum on th
4af0: 65 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 20 20  e manifest */.  
4b00: 42 6c 6f 62 20 63 6b 73 75 6d 2c 20 63 6b 73 75  Blob cksum, cksu
4b10: 6d 32 3b 20 20 20 2f 2a 20 42 65 66 6f 72 65 20  m2;   /* Before 
4b20: 61 6e 64 20 61 66 74 65 72 20 63 6f 6d 6d 69 74  and after commit
4b30: 20 63 68 65 63 6b 73 75 6d 73 20 2a 2f 0a 20 20   checksums */.  
4b40: 42 6c 6f 62 20 63 6b 73 75 6d 31 62 3b 20 20 20  Blob cksum1b;   
4b50: 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 73 75        /* Checksu
4b60: 6d 20 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68  m recorded in th
4b70: 65 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 20 20  e manifest */.  
4b80: 63 6f 6e 73 74 20 63 68 61 72 2a 20 70 61 72 65  const char* pare
4b90: 6e 74 3b 20 20 20 2f 2a 20 6c 6f 6f 70 20 76 61  nt;   /* loop va
4ba0: 72 69 61 62 6c 65 20 77 68 65 6e 20 63 6f 6c 6c  riable when coll
4bb0: 65 63 74 69 6e 67 20 70 61 72 65 6e 74 20 72 65  ecting parent re
4bc0: 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 69 6e  ferences */.  in
4bd0: 74 20 69 2c 20 6d 69 64 3b 20 20 20 20 20 20 20  t i, mid;       
4be0: 20 20 20 20 2f 2a 20 41 6e 6f 74 68 65 72 20 6c      /* Another l
4bf0: 6f 6f 70 20 69 6e 64 65 78 2c 20 61 6e 64 20 69  oop index, and i
4c00: 64 20 6f 66 20 6e 65 77 20 6d 61 6e 69 66 65 73  d of new manifes
4c10: 74 20 2a 2f 0a 20 20 53 74 6d 74 20 71 3b 20 20  t */.  Stmt q;  
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4c30: 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  sql statement to
4c40: 20 71 75 65 72 79 20 74 61 62 6c 65 20 6f 66 20   query table of 
4c50: 66 69 6c 65 73 20 2a 2f 0a 20 20 63 68 61 72 2a  files */.  char*
4c60: 20 7a 4d 69 64 55 75 69 64 3b 20 20 20 20 20 20   zMidUuid;      
4c70: 20 2f 2a 20 55 75 69 64 20 66 6f 72 20 74 68 65   /* Uuid for the
4c80: 20 6e 65 77 6c 79 20 67 65 6e 65 72 61 74 65 64   newly generated
4c90: 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 0a 0a 23   manifest */...#
4ca0: 64 65 66 69 6e 65 20 55 53 41 47 45 20 28 22 44  define USAGE ("D
4cb0: 41 54 45 20 43 4f 4d 4d 45 4e 54 20 3f 2d 70 7c  ATE COMMENT ?-p|
4cc0: 2d 70 61 72 65 6e 74 20 50 41 52 45 4e 54 5f 52  -parent PARENT_R
4cd0: 49 44 2e 2e 2e 3f 20 3f 2d 66 7c 2d 66 69 6c 65  ID...? ?-f|-file
4ce0: 20 28 46 49 4c 45 5f 52 49 44 20 50 41 54 48 29   (FILE_RID PATH)
4cf0: 2e 2e 2e 3f 22 29 0a 0a 20 20 2f 2a 0a 20 20 2a  ...?")..  /*.  *
4d00: 2a 20 56 61 6c 69 64 61 74 65 20 61 6e 64 20 70  * Validate and p
4d10: 72 6f 63 65 73 73 20 61 72 67 75 6d 65 6e 74 73  rocess arguments
4d20: 2c 20 63 6f 6c 6c 65 63 74 20 69 6e 66 6f 72 6d  , collect inform
4d30: 61 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 0a 20 20 64  ation..  */..  d
4d40: 62 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68 69 6e  b_must_be_within
4d50: 5f 74 72 65 65 28 29 3b 0a 0a 20 20 2f 2a 20 4d  _tree();..  /* M
4d60: 61 6e 64 61 74 6f 72 79 20 61 72 67 75 6d 65 6e  andatory argumen
4d70: 74 73 20 2a 2f 0a 20 20 69 66 20 28 67 2e 61 72  ts */.  if (g.ar
4d80: 67 63 20 3c 20 34 29 20 7b 0a 20 20 20 20 75 73  gc < 4) {.    us
4d90: 61 67 65 20 28 55 53 41 47 45 29 3b 0a 20 20 7d  age (USAGE);.  }
4da0: 0a 0a 20 20 7a 44 61 74 65 20 20 20 20 3d 20 67  ..  zDate    = g
4db0: 2e 61 72 67 76 5b 32 5d 3b 0a 20 20 7a 43 6f 6d  .argv[2];.  zCom
4dc0: 6d 65 6e 74 20 3d 20 67 2e 61 72 67 76 5b 33 5d  ment = g.argv[3]
4dd0: 3b 0a 0a 20 20 72 65 6d 6f 76 65 5f 66 72 6f 6d  ;..  remove_from
4de0: 5f 61 72 67 76 20 28 32 2c 32 29 3b 0a 0a 20 20  _argv (2,2);..  
4df0: 2f 2a 20 50 75 6c 6c 20 74 68 65 20 6f 70 74 69  /* Pull the opti
4e00: 6f 6e 61 6c 20 70 61 72 65 6e 74 20 61 72 67 75  onal parent argu
4e10: 6d 65 6e 74 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ments.  **.  ** 
4e20: 4e 6f 74 65 3a 20 49 6e 20 70 72 69 6e 63 69 70  Note: In princip
4e30: 6c 65 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  le it is possibl
4e40: 65 20 74 68 61 74 20 74 68 65 20 6c 6f 6f 70 20  e that the loop 
4e50: 62 65 6c 6f 77 20 65 78 74 72 61 63 74 73 0a 20  below extracts. 
4e60: 20 2a 2a 20 74 68 65 20 77 72 6f 6e 67 20 61 72   ** the wrong ar
4e70: 67 75 6d 65 6e 74 73 2c 20 69 66 20 77 65 20 65  guments, if we e
4e80: 76 65 72 20 74 72 79 20 74 6f 20 69 6d 70 6f 72  ver try to impor
4e90: 74 20 61 20 66 69 6c 65 20 77 68 6f 73 65 20 70  t a file whose p
4ea0: 61 74 68 0a 20 20 2a 2a 20 73 74 61 72 74 73 20  ath.  ** starts 
4eb0: 77 69 74 68 20 2d 70 2f 2d 70 61 72 65 6e 74 2e  with -p/-parent.
4ec0: 20 49 6e 20 74 68 61 74 20 63 61 73 65 20 68 6f   In that case ho
4ed0: 77 65 76 65 72 20 74 68 65 20 72 65 6d 6f 76 61  wever the remova
4ee0: 6c 20 6f 66 20 74 77 6f 0a 20 20 2a 2a 20 61 72  l of two.  ** ar
4ef0: 67 75 6d 65 6e 74 73 20 77 69 6c 6c 20 6c 65 61  guments will lea
4f00: 76 65 20 74 68 65 20 66 69 6c 65 20 62 65 72 65  ve the file bere
4f10: 66 74 20 6f 66 20 61 6e 20 61 72 67 75 6d 65 6e  ft of an argumen
4f20: 74 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 72  t and the.  ** r
4f30: 65 63 68 65 63 6b 20 6f 66 20 74 68 65 20 6e 75  echeck of the nu
4f40: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
4f50: 73 20 62 65 6c 6f 77 20 73 68 6f 75 6c 64 20 63  s below should c
4f60: 61 74 63 68 20 74 68 61 74 2e 0a 20 20 2a 2a 0a  atch that..  **.
4f70: 20 20 2a 2a 20 46 6f 72 20 61 20 74 65 73 74 20    ** For a test 
4f80: 63 6f 6d 6d 61 6e 64 20 74 68 69 73 20 69 73 20  command this is 
4f90: 61 63 63 65 70 74 61 62 6c 65 2c 20 69 74 20 77  acceptable, it w
4fa0: 6f 6e 27 74 20 68 61 76 65 20 6c 6f 74 73 20 6f  on't have lots o
4fb0: 66 0a 20 20 2a 2a 20 73 61 66 65 74 79 20 6e 65  f.  ** safety ne
4fc0: 74 73 2e 0a 20 20 2a 2f 0a 0a 20 20 7a 50 61 72  ts..  */..  zPar
4fd0: 65 6e 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 20 20  entCount = 0;.  
4fe0: 7a 50 61 72 65 6e 74 73 20 3d 20 28 69 6e 74 2a  zParents = (int*
4ff0: 29 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 69  )malloc(sizeof(i
5000: 6e 74 29 2a 28 31 2b 67 2e 61 72 67 63 29 29 3b  nt)*(1+g.argc));
5010: 0a 20 20 2f 2a 20 31 2b 2c 20 74 6f 20 62 65 20  .  /* 1+, to be 
5020: 6f 6b 20 77 69 74 68 20 74 68 65 20 64 65 66 61  ok with the defa
5030: 75 6c 74 20 65 76 65 6e 20 69 66 20 6e 6f 20 61  ult even if no a
5040: 72 67 75 6d 65 6e 74 73 20 61 72 6f 75 6e 64 20  rguments around 
5050: 2a 2f 0a 0a 20 20 77 68 69 6c 65 20 28 28 70 61  */..  while ((pa
5060: 72 65 6e 74 20 3d 20 66 69 6e 64 5f 6f 70 74 69  rent = find_opti
5070: 6f 6e 28 22 70 61 72 65 6e 74 22 2c 22 70 22 2c  on("parent","p",
5080: 31 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20  1)) != NULL) {. 
5090: 20 20 20 2f 2a 20 43 68 65 63 6b 20 61 6e 64 20     /* Check and 
50a0: 73 74 6f 72 65 20 2e 2e 2e 20 2a 2f 0a 20 20 20  store ... */.   
50b0: 20 7a 50 61 72 65 6e 74 73 20 5b 7a 50 61 72 65   zParents [zPare
50c0: 6e 74 43 6f 75 6e 74 5d 20 3d 20 6e 61 6d 65 5f  ntCount] = name_
50d0: 74 6f 5f 72 69 64 20 28 70 61 72 65 6e 74 29 3b  to_rid (parent);
50e0: 0a 20 20 20 20 7a 50 61 72 65 6e 74 43 6f 75 6e  .    zParentCoun
50f0: 74 20 2b 2b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  t ++;.  }..  /*.
5100: 20 20 2a 2a 20 46 61 6c 6c 20 62 61 63 6b 20 74    ** Fall back t
5110: 6f 20 74 68 65 20 72 6f 6f 74 20 6d 61 6e 69 66  o the root manif
5120: 65 73 74 20 61 73 20 70 61 72 65 6e 74 20 69 66  est as parent if
5130: 20 6e 6f 6e 65 20 77 65 72 65 20 73 70 65 63 69   none were speci
5140: 66 69 65 64 0a 20 20 2a 2a 20 65 78 70 6c 69 63  fied.  ** explic
5150: 69 74 6c 79 2e 0a 20 20 2a 2f 0a 0a 20 20 69 66  itly..  */..  if
5160: 20 28 21 7a 50 61 72 65 6e 74 43 6f 75 6e 74 29   (!zParentCount)
5170: 20 7b 0a 20 20 20 20 7a 50 61 72 65 6e 74 73 20   {.    zParents 
5180: 5b 7a 50 61 72 65 6e 74 43 6f 75 6e 74 5d 20 3d  [zParentCount] =
5190: 20 31 3b 20 2f 2a 20 48 41 43 4b 3a 20 72 69 64   1; /* HACK: rid
51a0: 20 31 20 69 73 20 74 68 65 20 62 61 73 65 6c 69   1 is the baseli
51b0: 6e 65 20 6d 61 6e 69 66 65 73 74 0a 09 09 09 09  ne manifest.....
51c0: 20 2a 2a 20 77 68 69 63 68 20 77 61 73 20 65 6e   ** which was en
51d0: 74 65 72 65 64 20 77 68 65 6e 20 74 68 65 20 72  tered when the r
51e0: 65 70 6f 73 69 74 6f 72 79 0a 09 09 09 09 20 2a  epository..... *
51f0: 2a 20 77 61 73 20 63 72 65 61 74 65 64 20 76 69  * was created vi
5200: 61 20 27 6e 65 77 27 2e 20 49 74 20 61 6c 77 61  a 'new'. It alwa
5210: 79 73 20 68 61 73 0a 09 09 09 09 20 2a 2a 20 72  ys has..... ** r
5220: 69 64 20 31 2e 0a 09 09 09 09 20 2a 2f 0a 20 20  id 1...... */.  
5230: 20 20 7a 50 61 72 65 6e 74 43 6f 75 6e 74 20 2b    zParentCount +
5240: 2b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 75 6c  +;.  }..  /* Pul
5250: 6c 20 74 68 65 20 66 69 6c 65 20 61 72 67 75 6d  l the file argum
5260: 65 6e 74 73 2c 20 61 74 20 6c 65 61 73 74 20 6f  ents, at least o
5270: 6e 65 20 68 61 73 20 74 6f 20 62 65 20 70 72 65  ne has to be pre
5280: 73 65 6e 74 2e 20 54 68 65 79 20 61 72 65 0a 20  sent. They are. 
5290: 20 2a 2a 20 74 68 65 20 6f 6e 6c 79 20 74 68 69   ** the only thi
52a0: 6e 67 73 20 77 65 20 63 61 6e 20 68 61 76 65 20  ngs we can have 
52b0: 68 65 72 65 2c 20 6e 6f 77 2c 20 61 6e 64 20 74  here, now, and t
52c0: 68 65 79 20 61 72 65 20 74 72 69 70 6c 65 73 20  hey are triples 
52d0: 6f 66 0a 20 20 2a 2a 20 27 2d 66 20 46 49 44 20  of.  ** '-f FID 
52e0: 50 41 54 48 27 2c 20 73 6f 20 75 73 65 20 6f 66  PATH', so use of
52f0: 20 66 69 6e 64 5f 6f 70 74 69 6f 6e 20 69 73 20   find_option is 
5300: 6f 75 74 2c 20 61 6e 64 20 77 65 20 63 61 6e 20  out, and we can 
5310: 63 68 65 63 6b 20 74 68 65 0a 20 20 2a 2a 20 6e  check the.  ** n
5320: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
5330: 74 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f  ts..  **.  ** No
5340: 74 65 3a 20 57 65 20 73 74 6f 72 65 20 74 68 65  te: We store the
5350: 20 64 61 74 61 20 69 6e 20 61 20 74 65 6d 70 2e   data in a temp.
5360: 20 74 61 62 6c 65 2c 20 73 6f 20 74 68 61 74 20   table, so that 
5370: 77 65 20 6c 61 74 65 72 20 63 61 6e 0a 20 20 2a  we later can.  *
5380: 2a 20 20 20 20 20 20 20 70 75 6c 6c 20 69 74 20  *       pull it 
5390: 73 6f 72 74 65 64 2c 20 61 6e 64 20 61 6c 73 6f  sorted, and also
53a0: 20 65 61 73 69 6c 79 20 67 65 74 20 74 68 65 20   easily get the 
53b0: 61 73 73 6f 63 69 61 74 65 64 20 68 61 73 68 0a  associated hash.
53c0: 20 20 2a 2a 20 20 20 20 20 20 20 69 64 65 6e 74    **       ident
53d0: 69 66 69 65 72 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ifiers..  **.  *
53e0: 2a 20 4e 6f 74 65 20 32 3a 20 57 65 20 65 78 70  * Note 2: We exp
53f0: 65 63 74 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  ect at least one
5400: 20 66 69 6c 65 2c 20 6f 74 68 65 72 77 69 73 65   file, otherwise
5410: 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 77 6f   the manifest wo
5420: 6e 27 74 0a 20 20 2a 2a 20 62 65 20 72 65 63 6f  n't.  ** be reco
5430: 67 6e 69 7a 65 64 20 61 73 20 61 20 62 61 73 65  gnized as a base
5440: 6c 69 6e 65 20 62 79 20 74 68 65 20 6d 61 6e 69  line by the mani
5450: 66 65 73 74 20 70 61 72 73 65 72 2e 0a 20 20 2a  fest parser..  *
5460: 2f 0a 0a 20 20 69 66 20 28 28 28 67 2e 61 72 67  /..  if (((g.arg
5470: 63 2d 32 29 20 25 20 33 20 21 3d 20 30 29 20 7c  c-2) % 3 != 0) |
5480: 7c 20 28 67 2e 61 72 67 63 20 3c 20 35 29 29 20  | (g.argc < 5)) 
5490: 7b 0a 20 20 20 20 75 73 61 67 65 20 28 55 53 41  {.    usage (USA
54a0: 47 45 29 3b 0a 20 20 7d 0a 0a 20 20 64 62 5f 62  GE);.  }..  db_b
54b0: 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e  egin_transaction
54c0: 28 29 3b 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65  ();.  db_multi_e
54d0: 78 65 63 20 28 22 43 52 45 41 54 45 20 54 45 4d  xec ("CREATE TEM
54e0: 50 20 54 41 42 4c 45 20 5f 5f 69 6d 20 28 22 0a  P TABLE __im (".
54f0: 09 09 20 22 72 69 64 20 20 20 20 20 20 49 4e 54  .. "rid      INT
5500: 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 2c 22 0a  EGER NOT NULL,".
5510: 09 09 20 22 70 61 74 68 6e 61 6d 65 20 54 45 58  .. "pathname TEX
5520: 54 20 20 20 20 4e 4f 54 20 4e 55 4c 4c 29 22 20  T    NOT NULL)" 
5530: 29 3b 0a 0a 20 20 77 68 69 6c 65 20 28 67 2e 61  );..  while (g.a
5540: 72 67 63 20 3e 20 32 29 20 7b 0a 20 20 20 20 2f  rgc > 2) {.    /
5550: 2a 20 43 68 65 63 6b 20 61 6e 64 20 73 74 6f 72  * Check and stor
5560: 65 20 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 20  e ... */.    if 
5570: 28 73 74 72 63 6d 70 28 22 2d 66 22 2c 20 20 20  (strcmp("-f",   
5580: 67 2e 61 72 67 76 5b 32 5d 29 20 26 26 0a 09 73  g.argv[2]) &&..s
5590: 74 72 63 6d 70 28 22 2d 66 69 6c 65 22 2c 67 2e  trcmp("-file",g.
55a0: 61 72 67 76 5b 32 5d 29 29 20 7b 0a 20 20 20 20  argv[2])) {.    
55b0: 20 20 75 73 61 67 65 20 28 55 53 41 47 45 29 3b    usage (USAGE);
55c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 44  .    }..    /* D
55d0: 41 4e 47 45 52 20 54 68 65 20 25 73 20 66 6f 72  ANGER The %s for
55e0: 20 74 68 65 20 70 61 74 68 20 6d 69 67 68 74 20   the path might 
55f0: 6c 65 61 64 20 69 74 73 65 6c 66 20 74 6f 20 61  lead itself to a
5600: 6e 20 69 6e 6a 65 63 74 69 6f 6e 0a 20 20 20 20  n injection.    
5610: 2a 2a 20 61 74 74 61 63 6b 2e 20 46 6f 72 20 6e  ** attack. For n
5620: 6f 77 20 28 69 2e 65 2e 20 74 65 73 74 69 6e 67  ow (i.e. testing
5630: 29 20 74 68 69 73 20 69 73 20 6f 6b 2c 20 62 75  ) this is ok, bu
5640: 74 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 20  t do something. 
5650: 20 20 20 2a 2a 20 62 65 74 74 65 72 20 69 6e 20     ** better in 
5660: 74 68 65 20 66 75 74 75 72 65 2e 0a 20 20 20 20  the future..    
5670: 2a 2f 0a 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69  */..    db_multi
5680: 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20 49 4e  _exec("INSERT IN
5690: 54 4f 20 5f 5f 69 6d 20 56 41 4c 55 45 53 28 25  TO __im VALUES(%
56a0: 64 2c 27 25 73 27 29 22 2c 0a 09 09 20 20 6e 61  d,'%s')",...  na
56b0: 6d 65 5f 74 6f 5f 72 69 64 20 28 67 2e 61 72 67  me_to_rid (g.arg
56c0: 76 5b 33 5d 29 2c 20 67 2e 61 72 67 76 5b 34 5d  v[3]), g.argv[4]
56d0: 20 29 3b 0a 20 20 20 20 72 65 6d 6f 76 65 5f 66   );.    remove_f
56e0: 72 6f 6d 5f 61 72 67 76 20 28 32 2c 33 29 3b 0a  rom_argv (2,3);.
56f0: 20 20 7d 0a 0a 20 20 76 65 72 69 66 79 5f 61 6c    }..  verify_al
5700: 6c 5f 6f 70 74 69 6f 6e 73 28 29 3b 0a 0a 20 20  l_options();..  
5710: 2f 2a 0a 20 20 2a 2a 20 44 65 74 65 72 6d 69 6e  /*.  ** Determin
5720: 65 20 74 68 65 20 75 73 65 72 20 74 68 65 20 6d  e the user the m
5730: 61 6e 69 66 65 73 74 20 77 69 6c 6c 20 62 65 6c  anifest will bel
5740: 6f 6e 67 20 74 6f 2c 20 61 6e 64 20 63 68 65 63  ong to, and chec
5750: 6b 20 74 68 61 74 0a 20 20 2a 2a 20 74 68 69 73  k that.  ** this
5760: 20 75 73 65 72 20 65 78 69 73 74 73 2e 0a 20 20   user exists..  
5770: 2a 2f 0a 0a 20 20 75 73 65 72 5f 73 65 6c 65 63  */..  user_selec
5780: 74 28 29 3b 0a 20 20 69 66 28 20 21 64 62 5f 65  t();.  if( !db_e
5790: 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20  xists("SELECT 1 
57a0: 46 52 4f 4d 20 75 73 65 72 20 57 48 45 52 45 20  FROM user WHERE 
57b0: 6c 6f 67 69 6e 3d 25 51 22 2c 20 67 2e 7a 4c 6f  login=%Q", g.zLo
57c0: 67 69 6e 29 20 29 7b 0a 20 20 20 20 66 6f 73 73  gin) ){.    foss
57d0: 69 6c 5f 66 61 74 61 6c 28 22 6e 6f 20 73 75 63  il_fatal("no suc
57e0: 68 20 75 73 65 72 3a 20 25 73 22 2c 20 67 2e 7a  h user: %s", g.z
57f0: 4c 6f 67 69 6e 29 3b 0a 20 20 7d 0a 0a 20 20 2f  Login);.  }..  /
5800: 2a 0a 20 20 2a 2a 20 4e 6f 77 20 67 65 6e 65 72  *.  ** Now gener
5810: 61 74 65 20 74 68 65 20 6d 61 6e 69 66 65 73 74  ate the manifest
5820: 20 69 6e 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a   in memory..  **
5830: 0a 20 20 2a 2a 20 53 74 61 72 74 20 77 69 74 68  .  ** Start with
5840: 20 63 6f 6d 6d 65 6e 74 20 61 6e 64 20 64 61 74   comment and dat
5850: 65 2e 20 54 68 65 20 6c 61 74 74 65 72 20 69 73  e. The latter is
5860: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68   converted to th
5870: 65 0a 20 20 2a 2a 20 70 72 6f 70 65 72 20 66 6f  e.  ** proper fo
5880: 72 6d 61 74 20 62 65 66 6f 72 65 20 69 6e 73 65  rmat before inse
5890: 72 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 0a 20 20 62  rtion..  */..  b
58a0: 6c 6f 62 5f 7a 65 72 6f 28 26 6d 61 6e 69 66 65  lob_zero(&manife
58b0: 73 74 29 3b 0a 0a 20 20 69 66 20 28 21 73 74 72  st);..  if (!str
58c0: 6c 65 6e 28 7a 43 6f 6d 6d 65 6e 74 29 29 20 7b  len(zComment)) {
58d0: 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64  .    blob_append
58e0: 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 43 20  f(&manifest, "C 
58f0: 25 46 5c 6e 22 2c 20 22 28 6e 6f 20 63 6f 6d 6d  %F\n", "(no comm
5900: 65 6e 74 29 22 29 3b 0a 20 20 7d 20 65 6c 73 65  ent)");.  } else
5910: 20 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65   {.    blob_appe
5920: 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22  ndf(&manifest, "
5930: 43 20 25 46 5c 6e 22 2c 20 7a 43 6f 6d 6d 65 6e  C %F\n", zCommen
5940: 74 29 3b 0a 20 20 7d 0a 0a 20 20 7a 44 61 74 65  t);.  }..  zDate
5950: 46 6d 74 20 3d 20 64 62 5f 74 65 78 74 28 30 2c  Fmt = db_text(0,
5960: 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d   "SELECT datetim
5970: 65 28 25 51 2c 27 75 6e 69 78 65 70 6f 63 68 27  e(%Q,'unixepoch'
5980: 29 22 2c 7a 44 61 74 65 29 3b 0a 20 20 7a 44 61  )",zDate);.  zDa
5990: 74 65 46 6d 74 5b 31 30 5d 20 3d 20 27 54 27 3b  teFmt[10] = 'T';
59a0: 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28  .  blob_appendf(
59b0: 26 6d 61 6e 69 66 65 73 74 2c 20 22 44 20 25 73  &manifest, "D %s
59c0: 5c 6e 22 2c 20 7a 44 61 74 65 46 6d 74 29 3b 0a  \n", zDateFmt);.
59d0: 20 20 66 72 65 65 28 7a 44 61 74 65 46 6d 74 29    free(zDateFmt)
59e0: 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 46 6f 6c  ;..  /*.  ** Fol
59f0: 6c 6f 77 20 77 69 74 68 20 61 6c 6c 20 74 68 65  low with all the
5a00: 20 63 6f 6c 6c 65 63 74 65 64 20 66 69 6c 65 73   collected files
5a10: 2c 20 70 72 6f 70 65 72 6c 79 20 73 6f 72 74 65  , properly sorte
5a20: 64 2e 20 48 65 72 65 20 77 65 72 65 0a 20 20 2a  d. Here were.  *
5a30: 2a 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74  * also compute t
5a40: 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 76 65 72  he checksum over
5a50: 20 74 68 65 20 66 69 6c 65 73 20 28 70 61 74 68   the files (path
5a60: 73 2c 20 73 69 7a 65 73 2c 0a 20 20 2a 2a 20 63  s, sizes,.  ** c
5a70: 6f 6e 74 65 6e 74 73 29 2c 20 73 69 6d 69 6c 61  ontents), simila
5a80: 72 20 74 6f 20 77 68 61 74 20 27 76 66 69 6c 65  r to what 'vfile
5a90: 5f 61 67 67 72 65 67 61 74 65 5f 63 68 65 63 6b  _aggregate_check
5aa0: 73 75 6d 5f 72 65 70 6f 73 69 74 6f 72 79 27 0a  sum_repository'.
5ab0: 20 20 2a 2a 20 64 6f 65 73 2e 0a 20 20 2a 2f 0a    ** does..  */.
5ac0: 0a 20 20 6d 64 35 73 75 6d 5f 69 6e 69 74 28 29  .  md5sum_init()
5ad0: 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26  ;.  db_prepare(&
5ae0: 71 2c 0a 09 20 20 20 20 20 22 53 45 4c 45 43 54  q,..     "SELECT
5af0: 20 70 61 74 68 6e 61 6d 65 2c 20 75 75 69 64 2c   pathname, uuid,
5b00: 20 5f 5f 69 6d 2e 72 69 64 22 0a 09 20 20 20 20   __im.rid"..    
5b10: 20 22 20 46 52 4f 4d 20 5f 5f 69 6d 20 4a 4f 49   " FROM __im JOI
5b20: 4e 20 62 6c 6f 62 20 4f 4e 20 5f 5f 69 6d 2e 72  N blob ON __im.r
5b30: 69 64 3d 62 6c 6f 62 2e 72 69 64 22 0a 09 20 20  id=blob.rid"..  
5b40: 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 31 22     " ORDER BY 1"
5b50: 29 3b 0a 0a 20 20 77 68 69 6c 65 28 20 64 62 5f  );..  while( db_
5b60: 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45  step(&q)==SQLITE
5b70: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 68 61 72  _ROW ){.    char
5b80: 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 20 20 20 20   zBuf[100];.    
5b90: 42 6c 6f 62 20 66 69 6c 65 3b 0a 20 20 20 20 63  Blob file;.    c
5ba0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
5bb0: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78   = db_column_tex
5bc0: 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f  t(&q, 0);.    co
5bd0: 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 20  nst char *zUuid 
5be0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  = db_column_text
5bf0: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 69 6e 74  (&q, 1);.    int
5c00: 20 20 20 20 20 20 20 20 20 7a 52 69 64 20 20 3d           zRid  =
5c10: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 28   db_column_int (
5c20: 26 71 2c 20 32 29 3b 0a 0a 20 20 20 20 2f 2a 20  &q, 2);..    /* 
5c30: 45 78 74 65 6e 64 20 74 68 65 20 6d 61 6e 69 66  Extend the manif
5c40: 65 73 74 20 2a 2f 0a 20 20 20 20 62 6c 6f 62 5f  est */.    blob_
5c50: 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66 65 73  appendf(&manifes
5c60: 74 2c 20 22 46 20 25 46 20 25 73 5c 6e 22 2c 20  t, "F %F %s\n", 
5c70: 7a 4e 61 6d 65 2c 20 7a 55 75 69 64 29 3b 0a 0a  zName, zUuid);..
5c80: 20 20 20 20 2f 2a 20 55 70 64 61 74 65 20 74 68      /* Update th
5c90: 65 20 63 68 65 63 6b 73 75 6d 20 2a 2f 0a 20 20  e checksum */.  
5ca0: 20 20 6d 64 35 73 75 6d 5f 73 74 65 70 5f 74 65    md5sum_step_te
5cb0: 78 74 28 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20  xt(zName, -1);. 
5cc0: 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 66 69     blob_zero(&fi
5cd0: 6c 65 29 3b 0a 20 20 20 20 63 6f 6e 74 65 6e 74  le);.    content
5ce0: 5f 67 65 74 28 7a 52 69 64 2c 20 26 66 69 6c 65  _get(zRid, &file
5cf0: 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a  );.    sprintf(z
5d00: 42 75 66 2c 20 22 20 25 64 5c 6e 22 2c 20 62 6c  Buf, " %d\n", bl
5d10: 6f 62 5f 73 69 7a 65 28 26 66 69 6c 65 29 29 3b  ob_size(&file));
5d20: 0a 20 20 20 20 6d 64 35 73 75 6d 5f 73 74 65 70  .    md5sum_step
5d30: 5f 74 65 78 74 28 7a 42 75 66 2c 20 2d 31 29 3b  _text(zBuf, -1);
5d40: 0a 20 20 20 20 6d 64 35 73 75 6d 5f 73 74 65 70  .    md5sum_step
5d50: 5f 62 6c 6f 62 28 26 66 69 6c 65 29 3b 0a 20 20  _blob(&file);.  
5d60: 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 66 69    blob_reset(&fi
5d70: 6c 65 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69  le);.  }.  db_fi
5d80: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 6d 64  nalize(&q);.  md
5d90: 35 73 75 6d 5f 66 69 6e 69 73 68 20 28 26 63 6b  5sum_finish (&ck
5da0: 73 75 6d 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  sum);..  /*.  **
5db0: 20 46 6f 6c 6c 6f 77 20 77 69 74 68 20 61 6c 6c   Follow with all
5dc0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70   the specified p
5dd0: 61 72 65 6e 74 73 2e 20 57 65 20 6b 6e 6f 77 20  arents. We know 
5de0: 74 68 61 74 20 74 68 65 72 65 20 69 73 20 61 74  that there is at
5df0: 0a 20 20 2a 2a 20 6c 65 61 73 74 20 6f 6e 65 2e  .  ** least one.
5e00: 0a 20 20 2a 2f 0a 0a 20 20 62 6c 6f 62 5f 61 70  .  */..  blob_ap
5e10: 70 65 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c  pendf(&manifest,
5e20: 20 22 50 22 29 3b 0a 20 20 66 6f 72 20 28 69 3d   "P");.  for (i=
5e30: 30 3b 69 3c 7a 50 61 72 65 6e 74 43 6f 75 6e 74  0;i<zParentCount
5e40: 3b 69 2b 2b 29 20 7b 0a 20 20 20 20 63 68 61 72  ;i++) {.    char
5e50: 2a 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78  * zUuid = db_tex
5e60: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69  t(0, "SELECT uui
5e70: 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52  d FROM blob WHER
5e80: 45 20 72 69 64 3d 25 64 22 2c 20 7a 50 61 72 65  E rid=%d", zPare
5e90: 6e 74 73 20 5b 69 5d 29 3b 0a 20 20 20 20 62 6c  nts [i]);.    bl
5ea0: 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69  ob_appendf(&mani
5eb0: 66 65 73 74 2c 20 22 20 25 73 22 2c 20 7a 55 75  fest, " %s", zUu
5ec0: 69 64 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 55  id);.    free(zU
5ed0: 75 69 64 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62  uid);.  }.  blob
5ee0: 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66 65  _appendf(&manife
5ef0: 73 74 2c 20 22 5c 6e 22 29 3b 0a 0a 20 20 2f 2a  st, "\n");..  /*
5f00: 0a 20 20 2a 2a 20 43 6f 6d 70 6c 65 74 65 20 74  .  ** Complete t
5f10: 68 65 20 6d 61 6e 69 66 65 73 74 20 77 69 74 68  he manifest with
5f20: 20 75 73 65 72 20 6e 61 6d 65 20 61 6e 64 20 74   user name and t
5f30: 68 65 20 76 61 72 69 6f 75 73 20 63 68 65 63 6b  he various check
5f40: 73 75 6d 73 0a 20 20 2a 2f 0a 0a 20 20 62 6c 6f  sums.  */..  blo
5f50: 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66  b_appendf(&manif
5f60: 65 73 74 2c 20 22 52 20 25 62 5c 6e 22 2c 20 26  est, "R %b\n", &
5f70: 63 6b 73 75 6d 29 3b 0a 20 20 62 6c 6f 62 5f 61  cksum);.  blob_a
5f80: 70 70 65 6e 64 66 28 26 6d 61 6e 69 66 65 73 74  ppendf(&manifest
5f90: 2c 20 22 55 20 25 46 5c 6e 22 2c 20 67 2e 7a 4c  , "U %F\n", g.zL
5fa0: 6f 67 69 6e 29 3b 0a 20 20 6d 64 35 73 75 6d 5f  ogin);.  md5sum_
5fb0: 62 6c 6f 62 28 26 6d 61 6e 69 66 65 73 74 2c 20  blob(&manifest, 
5fc0: 26 6d 63 6b 73 75 6d 29 3b 0a 20 20 62 6c 6f 62  &mcksum);.  blob
5fd0: 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66 65  _appendf(&manife
5fe0: 73 74 2c 20 22 5a 20 25 62 5c 6e 22 2c 20 26 6d  st, "Z %b\n", &m
5ff0: 63 6b 73 75 6d 29 3b 0a 0a 20 20 2f 2a 0a 20 20  cksum);..  /*.  
6000: 2a 2a 20 4e 6f 77 20 69 6e 73 65 72 74 20 74 68  ** Now insert th
6010: 65 20 6e 65 77 20 6d 61 6e 69 66 65 73 74 2c 20  e new manifest, 
6020: 74 72 79 20 74 6f 20 63 6f 6d 70 72 65 73 73 20  try to compress 
6030: 69 74 20 72 65 6c 61 74 69 76 65 20 74 6f 20 66  it relative to f
6040: 69 72 73 74 0a 20 20 2a 2a 20 70 61 72 65 6e 74  irst.  ** parent
6050: 20 28 70 72 69 6d 61 72 79 29 2e 0a 20 20 20 2a   (primary)..   *
6060: 2f 0a 0a 20 20 2f 2a 62 6c 6f 62 5f 77 72 69 74  /..  /*blob_writ
6070: 65 5f 74 6f 5f 66 69 6c 65 20 28 26 6d 61 6e 69  e_to_file (&mani
6080: 66 65 73 74 2c 20 22 54 45 53 54 5f 4d 41 4e 49  fest, "TEST_MANI
6090: 46 45 53 54 22 29 3b 2a 2f 0a 0a 20 20 6d 69 64  FEST");*/..  mid
60a0: 20 3d 20 63 6f 6e 74 65 6e 74 5f 70 75 74 28 26   = content_put(&
60b0: 6d 61 6e 69 66 65 73 74 2c 20 30 2c 20 30 29 3b  manifest, 0, 0);
60c0: 0a 20 20 69 66 28 20 6d 69 64 3d 3d 30 20 29 7b  .  if( mid==0 ){
60d0: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69  .    fossil_pani
60e0: 63 28 22 74 72 6f 75 62 6c 65 20 63 6f 6d 6d 69  c("trouble commi
60f0: 74 74 69 6e 67 20 6d 61 6e 69 66 65 73 74 3a 20  tting manifest: 
6100: 25 73 22 2c 20 67 2e 7a 45 72 72 4d 73 67 29 3b  %s", g.zErrMsg);
6110: 0a 20 20 7d 0a 0a 20 20 63 6f 6e 74 65 6e 74 5f  .  }..  content_
6120: 64 65 6c 74 69 66 79 28 7a 50 61 72 65 6e 74 73  deltify(zParents
6130: 5b 30 5d 2c 20 6d 69 64 2c 20 30 29 3b 0a 0a 20  [0], mid, 0);.. 
6140: 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20   /* Verify that 
6150: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 20 63  the repository c
6160: 68 65 63 6b 73 75 6d 20 6d 61 74 63 68 65 73 20  hecksum matches 
6170: 74 68 65 20 65 78 70 65 63 74 65 64 20 63 68 65  the expected che
6180: 63 6b 73 75 6d 0a 20 20 2a 2a 20 63 61 6c 63 75  cksum.  ** calcu
6190: 6c 61 74 65 64 20 62 65 66 6f 72 65 20 74 68 65  lated before the
61a0: 20 63 68 65 63 6b 69 6e 20 73 74 61 72 74 65 64   checkin started
61b0: 20 28 61 6e 64 20 73 74 6f 72 65 64 20 61 73 20   (and stored as 
61c0: 74 68 65 20 52 20 72 65 63 6f 72 64 0a 20 20 2a  the R record.  *
61d0: 2a 20 6f 66 20 74 68 65 20 6d 61 6e 69 66 65 73  * of the manifes
61e0: 74 20 66 69 6c 65 29 2e 0a 20 20 2a 2f 0a 0a 20  t file)..  */.. 
61f0: 20 76 66 69 6c 65 5f 61 67 67 72 65 67 61 74 65   vfile_aggregate
6200: 5f 63 68 65 63 6b 73 75 6d 5f 6d 61 6e 69 66 65  _checksum_manife
6210: 73 74 28 6d 69 64 2c 20 26 63 6b 73 75 6d 32 2c  st(mid, &cksum2,
6220: 20 26 63 6b 73 75 6d 31 62 29 3b 0a 20 20 69 66   &cksum1b);.  if
6230: 28 20 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 28 26  ( blob_compare(&
6240: 63 6b 73 75 6d 2c 20 26 63 6b 73 75 6d 31 62 29  cksum, &cksum1b)
6250: 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70   ){.    fossil_p
6260: 61 6e 69 63 28 22 6d 61 6e 69 66 65 73 74 20 63  anic("manifest c
6270: 68 65 63 6b 73 75 6d 20 64 6f 65 73 20 6e 6f 74  hecksum does not
6280: 20 61 67 72 65 65 20 77 69 74 68 20 6d 61 6e 69   agree with mani
6290: 66 65 73 74 3a 20 22 0a 20 20 20 20 20 20 20 20  fest: ".        
62a0: 20 20 20 20 20 20 20 20 20 22 25 62 20 76 65 72           "%b ver
62b0: 73 75 73 20 25 62 22 2c 20 26 63 6b 73 75 6d 2c  sus %b", &cksum,
62c0: 20 26 63 6b 73 75 6d 31 62 29 3b 0a 20 20 7d 0a   &cksum1b);.  }.
62d0: 20 20 69 66 28 20 62 6c 6f 62 5f 63 6f 6d 70 61    if( blob_compa
62e0: 72 65 28 26 63 6b 73 75 6d 2c 20 26 63 6b 73 75  re(&cksum, &cksu
62f0: 6d 32 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69  m2) ){.    fossi
6300: 6c 5f 70 61 6e 69 63 28 22 74 72 65 65 20 63 68  l_panic("tree ch
6310: 65 63 6b 73 75 6d 20 64 6f 65 73 20 6e 6f 74 20  ecksum does not 
6320: 6d 61 74 63 68 20 6d 61 6e 69 66 65 73 74 20 61  match manifest a
6330: 66 74 65 72 20 63 6f 6d 6d 69 74 3a 20 22 0a 20  fter commit: ". 
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6350: 22 25 62 20 76 65 72 73 75 73 20 25 62 22 2c 20  "%b versus %b", 
6360: 26 63 6b 73 75 6d 2c 20 26 63 6b 73 75 6d 32 29  &cksum, &cksum2)
6370: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
6380: 20 41 74 20 6c 61 73 74 20 63 6f 6d 6d 69 74 20   At last commit 
6390: 61 6c 6c 20 63 68 61 6e 67 65 73 2c 20 61 66 74  all changes, aft
63a0: 65 72 20 67 65 74 74 69 6e 67 20 72 69 64 20 6f  er getting rid o
63b0: 66 20 74 68 65 20 74 65 6d 70 0a 20 20 2a 2a 20  f the temp.  ** 
63c0: 68 6f 6c 64 65 72 20 66 6f 72 20 74 68 65 20 66  holder for the f
63d0: 69 6c 65 73 2c 20 61 6e 64 20 72 65 6c 65 61 73  iles, and releas
63e0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f  e allocated memo
63f0: 72 79 2e 0a 20 20 2a 2f 0a 0a 20 20 64 62 5f 6d  ry..  */..  db_m
6400: 75 6c 74 69 5f 65 78 65 63 28 22 44 52 4f 50 20  ulti_exec("DROP 
6410: 54 41 42 4c 45 20 5f 5f 69 6d 22 29 3b 0a 20 20  TABLE __im");.  
6420: 7a 4d 69 64 55 75 69 64 20 3d 20 64 62 5f 74 65  zMidUuid = db_te
6430: 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75  xt(0, "SELECT uu
6440: 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45  id FROM blob WHE
6450: 52 45 20 72 69 64 3d 25 64 22 2c 20 6d 69 64 29  RE rid=%d", mid)
6460: 3b 0a 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73  ;.  db_end_trans
6470: 61 63 74 69 6f 6e 28 30 29 3b 0a 20 20 66 72 65  action(0);.  fre
6480: 65 28 7a 50 61 72 65 6e 74 73 29 3b 0a 0a 20 20  e(zParents);..  
6490: 2f 2a 0a 20 20 2a 2a 20 41 74 20 74 68 65 20 76  /*.  ** At the v
64a0: 65 72 79 20 6c 61 73 74 20 69 6e 66 6f 72 6d 20  ery last inform 
64b0: 74 68 65 20 63 61 6c 6c 65 72 20 61 62 6f 75 74  the caller about
64c0: 20 74 68 65 20 69 64 20 61 6e 64 20 75 75 69 64   the id and uuid
64d0: 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 6e 65 77   of the.  ** new
64e0: 20 6d 61 6e 69 66 65 73 74 2e 0a 20 20 2a 2f 0a   manifest..  */.
64f0: 0a 0a 20 20 70 72 69 6e 74 66 28 22 69 6e 73 65  ..  printf("inse
6500: 72 74 65 64 20 61 73 20 72 65 63 6f 72 64 20 25  rted as record %
6510: 64 2c 20 25 73 5c 6e 22 2c 20 6d 69 64 2c 20 7a  d, %s\n", mid, z
6520: 4d 69 64 55 75 69 64 29 3b 0a 20 20 66 72 65 65  MidUuid);.  free
6530: 28 7a 4d 69 64 55 75 69 64 29 3b 0a 20 20 72 65  (zMidUuid);.  re
6540: 74 75 72 6e 3b 0a 0a 23 75 6e 64 65 66 20 55 53  turn;..#undef US
6550: 41 47 45 0a 7d 0a                                AGE.}.