Hex Artifact Content
Not logged in

Artifact b983c3b20809c9dabe28131fa098fbf401402bcb:

File src/checkin.c part of check-in [b6e22e62cf] - Attempting to rationalize the tagging and branching logic. The "branch" command has been resurrected and appears to work now. The "tag branch" command has been removed. Special tags "newbranch" and "closed" used to manage branches. New changes are not well-tested - use with caution. You must "rebuild" when upgrading through this version. by drh on 2009-01-20 16:51:19.

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: 2c 20 63 6f 61 6c 65 73 63 65 28 6f 72 69 67 6e  , coalesce(orign
0550: 61 6d 65 21 3d 70 61 74 68 6e 61 6d 65 2c 30 29  ame!=pathname,0)
0560: 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20 76 66  ".    "  FROM vf
0570: 69 6c 65 20 22 0a 20 20 20 20 22 20 57 48 45 52  ile ".    " WHER
0580: 45 20 66 69 6c 65 5f 69 73 5f 73 65 6c 65 63 74  E file_is_select
0590: 65 64 28 69 64 29 22 0a 20 20 20 20 22 20 20 20  ed(id)".    "   
05a0: 41 4e 44 20 28 63 68 6e 67 65 64 20 4f 52 20 64  AND (chnged OR d
05b0: 65 6c 65 74 65 64 20 4f 52 20 72 69 64 3d 30 20  eleted OR rid=0 
05c0: 4f 52 20 70 61 74 68 6e 61 6d 65 21 3d 6f 72 69  OR pathname!=ori
05d0: 67 6e 61 6d 65 29 20 4f 52 44 45 52 20 42 59 20  gname) ORDER BY 
05e0: 31 22 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28  1".  );.  while(
05f0: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51   db_step(&q)==SQ
0600: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
0610: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 74  const char *zPat
0620: 68 6e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d  hname = db_colum
0630: 6e 5f 74 65 78 74 28 26 71 2c 30 29 3b 0a 20 20  n_text(&q,0);.  
0640: 20 20 69 6e 74 20 69 73 44 65 6c 65 74 65 64 20    int isDeleted 
0650: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  = db_column_int(
0660: 26 71 2c 20 31 29 3b 0a 20 20 20 20 69 6e 74 20  &q, 1);.    int 
0670: 69 73 43 68 6e 67 65 64 20 3d 20 64 62 5f 63 6f  isChnged = db_co
0680: 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 32 29 3b 0a  lumn_int(&q,2);.
0690: 20 20 20 20 69 6e 74 20 69 73 4e 65 77 20 3d 20      int isNew = 
06a0: 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71  db_column_int(&q
06b0: 2c 33 29 3d 3d 30 3b 0a 20 20 20 20 69 6e 74 20  ,3)==0;.    int 
06c0: 69 73 52 65 6e 61 6d 65 64 20 3d 20 64 62 5f 63  isRenamed = db_c
06d0: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 34 29 3b  olumn_int(&q,4);
06e0: 0a 20 20 20 20 63 68 61 72 20 2a 7a 46 75 6c 6c  .    char *zFull
06f0: 4e 61 6d 65 20 3d 20 6d 70 72 69 6e 74 66 28 22  Name = mprintf("
0700: 25 73 2f 25 73 22 2c 20 67 2e 7a 4c 6f 63 61 6c  %s/%s", g.zLocal
0710: 52 6f 6f 74 2c 20 7a 50 61 74 68 6e 61 6d 65 29  Root, zPathname)
0720: 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e  ;.    blob_appen
0730: 64 28 72 65 70 6f 72 74 2c 20 7a 50 72 65 66 69  d(report, zPrefi
0740: 78 2c 20 6e 50 72 65 66 69 78 29 3b 0a 20 20 20  x, nPrefix);.   
0750: 20 69 66 28 20 69 73 44 65 6c 65 74 65 64 20 29   if( isDeleted )
0760: 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70  {.      blob_app
0770: 65 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 44 45  endf(report, "DE
0780: 4c 45 54 45 44 20 20 25 73 5c 6e 22 2c 20 7a 50  LETED  %s\n", zP
0790: 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65  athname);.    }e
07a0: 6c 73 65 20 69 66 28 20 61 63 63 65 73 73 28 7a  lse if( access(z
07b0: 46 75 6c 6c 4e 61 6d 65 2c 20 30 29 20 29 7b 0a  FullName, 0) ){.
07c0: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e        blob_appen
07d0: 64 66 28 72 65 70 6f 72 74 2c 20 22 4d 49 53 53  df(report, "MISS
07e0: 49 4e 47 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74  ING  %s\n", zPat
07f0: 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73  hname);.    }els
0800: 65 20 69 66 28 20 69 73 4e 65 77 20 29 7b 0a 20  e if( isNew ){. 
0810: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64       blob_append
0820: 66 28 72 65 70 6f 72 74 2c 20 22 41 44 44 45 44  f(report, "ADDED
0830: 20 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68      %s\n", zPath
0840: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  name);.    }else
0850: 20 69 66 28 20 69 73 44 65 6c 65 74 65 64 20 29   if( isDeleted )
0860: 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70  {.      blob_app
0870: 65 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 44 45  endf(report, "DE
0880: 4c 45 54 45 44 20 20 25 73 5c 6e 22 2c 20 7a 50  LETED  %s\n", zP
0890: 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65  athname);.    }e
08a0: 6c 73 65 20 69 66 28 20 69 73 43 68 6e 67 65 64  lse if( isChnged
08b0: 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f  ==2 ){.      blo
08c0: 62 5f 61 70 70 65 6e 64 66 28 72 65 70 6f 72 74  b_appendf(report
08d0: 2c 20 22 55 50 44 41 54 45 44 5f 42 59 5f 4d 45  , "UPDATED_BY_ME
08e0: 52 47 45 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68  RGE %s\n", zPath
08f0: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  name);.    }else
0900: 20 69 66 28 20 69 73 43 68 6e 67 65 64 3d 3d 33   if( isChnged==3
0910: 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61   ){.      blob_a
0920: 70 70 65 6e 64 66 28 72 65 70 6f 72 74 2c 20 22  ppendf(report, "
0930: 41 44 44 45 44 5f 42 59 5f 4d 45 52 47 45 20 25  ADDED_BY_MERGE %
0940: 73 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65 29  s\n", zPathname)
0950: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
0960: 69 73 43 68 6e 67 65 64 3d 3d 31 20 29 7b 0a 20  isChnged==1 ){. 
0970: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64       blob_append
0980: 66 28 72 65 70 6f 72 74 2c 20 22 45 44 49 54 45  f(report, "EDITE
0990: 44 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68  D   %s\n", zPath
09a0: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  name);.    }else
09b0: 20 69 66 28 20 69 73 52 65 6e 61 6d 65 64 20 29   if( isRenamed )
09c0: 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70  {.      blob_app
09d0: 65 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 52 45  endf(report, "RE
09e0: 4e 41 4d 45 44 20 20 25 73 5c 6e 22 2c 20 7a 50  NAMED  %s\n", zP
09f0: 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a  athname);.    }.
0a00: 20 20 20 20 66 72 65 65 28 7a 46 75 6c 6c 4e 61      free(zFullNa
0a10: 6d 65 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69  me);.  }.  db_fi
0a20: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 64 62  nalize(&q);.  db
0a30: 5f 70 72 65 70 61 72 65 28 26 71 2c 20 22 53 45  _prepare(&q, "SE
0a40: 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 76  LECT uuid FROM v
0a50: 6d 65 72 67 65 20 4a 4f 49 4e 20 62 6c 6f 62 20  merge JOIN blob 
0a60: 4f 4e 20 6d 65 72 67 65 3d 72 69 64 22 0a 20 20  ON merge=rid".  
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
0a80: 20 57 48 45 52 45 20 69 64 3d 30 22 29 3b 0a 20   WHERE id=0");. 
0a90: 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28   while( db_step(
0aa0: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  &q)==SQLITE_ROW 
0ab0: 29 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65  ){.    blob_appe
0ac0: 6e 64 28 72 65 70 6f 72 74 2c 20 7a 50 72 65 66  nd(report, zPref
0ad0: 69 78 2c 20 6e 50 72 65 66 69 78 29 3b 0a 20 20  ix, nPrefix);.  
0ae0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 72    blob_appendf(r
0af0: 65 70 6f 72 74 2c 20 22 4d 45 52 47 45 44 5f 57  eport, "MERGED_W
0b00: 49 54 48 20 25 73 5c 6e 22 2c 20 64 62 5f 63 6f  ITH %s\n", db_co
0b10: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29  lumn_text(&q, 0)
0b20: 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61  );.  }.  db_fina
0b30: 6c 69 7a 65 28 26 71 29 3b 0a 7d 0a 0a 2f 2a 0a  lize(&q);.}../*.
0b40: 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 63 68 61 6e  ** COMMAND: chan
0b50: 67 65 73 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a  ges.**.** Usage:
0b60: 20 25 66 6f 73 73 69 6c 20 63 68 61 6e 67 65 73   %fossil changes
0b70: 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 72 74 20 6f 6e  .**.** Report on
0b80: 20 74 68 65 20 65 64 69 74 20 73 74 61 74 75 73   the edit status
0b90: 20 6f 66 20 61 6c 6c 20 66 69 6c 65 73 20 69 6e   of all files in
0ba0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 68 65   the current che
0bb0: 63 6b 6f 75 74 2e 0a 2a 2a 20 53 65 65 20 61 6c  ckout..** See al
0bc0: 73 6f 20 74 68 65 20 22 73 74 61 74 75 73 22 20  so the "status" 
0bd0: 61 6e 64 20 22 65 78 74 72 61 22 20 63 6f 6d 6d  and "extra" comm
0be0: 61 6e 64 73 2e 0a 2a 2f 0a 76 6f 69 64 20 63 68  ands..*/.void ch
0bf0: 61 6e 67 65 73 5f 63 6d 64 28 76 6f 69 64 29 7b  anges_cmd(void){
0c00: 0a 20 20 42 6c 6f 62 20 72 65 70 6f 72 74 3b 0a  .  Blob report;.
0c10: 20 20 69 6e 74 20 76 69 64 3b 0a 20 20 64 62 5f    int vid;.  db_
0c20: 6d 75 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74  must_be_within_t
0c30: 72 65 65 28 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65  ree();.  blob_ze
0c40: 72 6f 28 26 72 65 70 6f 72 74 29 3b 0a 20 20 76  ro(&report);.  v
0c50: 69 64 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74  id = db_lget_int
0c60: 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b  ("checkout", 0);
0c70: 0a 20 20 76 66 69 6c 65 5f 63 68 65 63 6b 5f 73  .  vfile_check_s
0c80: 69 67 6e 61 74 75 72 65 28 76 69 64 29 3b 0a 20  ignature(vid);. 
0c90: 20 73 74 61 74 75 73 5f 72 65 70 6f 72 74 28 26   status_report(&
0ca0: 72 65 70 6f 72 74 2c 20 22 22 29 3b 0a 20 20 62  report, "");.  b
0cb0: 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69 6c  lob_write_to_fil
0cc0: 65 28 26 72 65 70 6f 72 74 2c 20 22 2d 22 29 3b  e(&report, "-");
0cd0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e  .}../*.** COMMAN
0ce0: 44 3a 20 73 74 61 74 75 73 0a 2a 2a 0a 2a 2a 20  D: status.**.** 
0cf0: 55 73 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 73  Usage: %fossil s
0d00: 74 61 74 75 73 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  tatus.**.** Repo
0d10: 72 74 20 6f 6e 20 74 68 65 20 73 74 61 74 75 73  rt on the status
0d20: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
0d30: 63 68 65 63 6b 6f 75 74 2e 0a 2a 2f 0a 76 6f 69  checkout..*/.voi
0d40: 64 20 73 74 61 74 75 73 5f 63 6d 64 28 76 6f 69  d status_cmd(voi
0d50: 64 29 7b 0a 20 20 69 6e 74 20 76 69 64 3b 0a 20  d){.  int vid;. 
0d60: 20 64 62 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68   db_must_be_with
0d70: 69 6e 5f 74 72 65 65 28 29 3b 0a 20 20 20 20 20  in_tree();.     
0d80: 20 20 2f 2a 20 30 31 32 33 34 35 36 37 38 39 30    /* 01234567890
0d90: 31 32 33 34 20 2a 2f 0a 20 20 70 72 69 6e 74 66  1234 */.  printf
0da0: 28 22 72 65 70 6f 73 69 74 6f 72 79 3a 20 20 20  ("repository:   
0db0: 25 73 5c 6e 22 2c 20 64 62 5f 6c 67 65 74 28 22  %s\n", db_lget("
0dc0: 72 65 70 6f 73 69 74 6f 72 79 22 2c 22 22 29 29  repository",""))
0dd0: 3b 0a 20 20 70 72 69 6e 74 66 28 22 6c 6f 63 61  ;.  printf("loca
0de0: 6c 2d 72 6f 6f 74 3a 20 20 20 25 73 5c 6e 22 2c  l-root:   %s\n",
0df0: 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a   g.zLocalRoot);.
0e00: 20 20 70 72 69 6e 74 66 28 22 73 65 72 76 65 72    printf("server
0e10: 2d 63 6f 64 65 3a 20 20 25 73 5c 6e 22 2c 20 64  -code:  %s\n", d
0e20: 62 5f 67 65 74 28 22 73 65 72 76 65 72 2d 63 6f  b_get("server-co
0e30: 64 65 22 2c 20 22 22 29 29 3b 0a 20 20 76 69 64  de", ""));.  vid
0e40: 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74 28 22   = db_lget_int("
0e50: 63 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b 0a 20  checkout", 0);. 
0e60: 20 69 66 28 20 76 69 64 20 29 7b 0a 20 20 20 20   if( vid ){.    
0e70: 73 68 6f 77 5f 63 6f 6d 6d 6f 6e 5f 69 6e 66 6f  show_common_info
0e80: 28 76 69 64 2c 20 22 63 68 65 63 6b 6f 75 74 3a  (vid, "checkout:
0e90: 22 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 63 68 61  ", 0);.  }.  cha
0ea0: 6e 67 65 73 5f 63 6d 64 28 29 3b 0a 7d 0a 0a 2f  nges_cmd();.}../
0eb0: 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 6c 73  *.** COMMAND: ls
0ec0: 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66  .**.** Usage: %f
0ed0: 6f 73 73 69 6c 20 6c 73 0a 2a 2a 0a 2a 2a 20 53  ossil ls.**.** S
0ee0: 68 6f 77 20 74 68 65 20 6e 61 6d 65 73 20 6f 66  how the names of
0ef0: 20 61 6c 6c 20 66 69 6c 65 73 20 69 6e 20 74 68   all files in th
0f00: 65 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b 6f  e current checko
0f10: 75 74 0a 2a 2f 0a 76 6f 69 64 20 6c 73 5f 63 6d  ut.*/.void ls_cm
0f20: 64 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 76  d(void){.  int v
0f30: 69 64 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 0a 20  id;.  Stmt q;.. 
0f40: 20 64 62 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68   db_must_be_with
0f50: 69 6e 5f 74 72 65 65 28 29 3b 0a 20 20 76 69 64  in_tree();.  vid
0f60: 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74 28 22   = db_lget_int("
0f70: 63 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b 0a 20  checkout", 0);. 
0f80: 20 76 66 69 6c 65 5f 63 68 65 63 6b 5f 73 69 67   vfile_check_sig
0f90: 6e 61 74 75 72 65 28 76 69 64 29 3b 0a 20 20 64  nature(vid);.  d
0fa0: 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20  b_prepare(&q,.  
0fb0: 20 20 20 22 53 45 4c 45 43 54 20 70 61 74 68 6e     "SELECT pathn
0fc0: 61 6d 65 2c 20 64 65 6c 65 74 65 64 2c 20 72 69  ame, deleted, ri
0fd0: 64 2c 20 63 68 6e 67 65 64 2c 20 63 6f 61 6c 65  d, chnged, coale
0fe0: 73 63 65 28 6f 72 69 67 6e 61 6d 65 21 3d 70 61  sce(origname!=pa
0ff0: 74 68 6e 61 6d 65 2c 30 29 22 0a 20 20 20 20 20  thname,0)".     
1000: 22 20 20 46 52 4f 4d 20 76 66 69 6c 65 22 0a 20  "  FROM vfile". 
1010: 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 31      " ORDER BY 1
1020: 22 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  ".  );.  while( 
1030: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c  db_step(&q)==SQL
1040: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63  ITE_ROW ){.    c
1050: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 74 68  onst char *zPath
1060: 6e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e  name = db_column
1070: 5f 74 65 78 74 28 26 71 2c 30 29 3b 0a 20 20 20  _text(&q,0);.   
1080: 20 69 6e 74 20 69 73 44 65 6c 65 74 65 64 20 3d   int isDeleted =
1090: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26   db_column_int(&
10a0: 71 2c 20 31 29 3b 0a 20 20 20 20 69 6e 74 20 69  q, 1);.    int i
10b0: 73 4e 65 77 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e  sNew = db_column
10c0: 5f 69 6e 74 28 26 71 2c 32 29 3d 3d 30 3b 0a 20  _int(&q,2)==0;. 
10d0: 20 20 20 69 6e 74 20 63 68 6e 67 65 64 20 3d 20     int chnged = 
10e0: 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71  db_column_int(&q
10f0: 2c 33 29 3b 0a 20 20 20 20 69 6e 74 20 72 65 6e  ,3);.    int ren
1100: 61 6d 65 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e  amed = db_column
1110: 5f 69 6e 74 28 26 71 2c 34 29 3b 0a 20 20 20 20  _int(&q,4);.    
1120: 63 68 61 72 20 2a 7a 46 75 6c 6c 4e 61 6d 65 20  char *zFullName 
1130: 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 2f 25 73  = mprintf("%s/%s
1140: 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 2c  ", g.zLocalRoot,
1150: 20 7a 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20   zPathname);.   
1160: 20 69 66 28 20 69 73 4e 65 77 20 29 7b 0a 20 20   if( isNew ){.  
1170: 20 20 20 20 70 72 69 6e 74 66 28 22 41 44 44 45      printf("ADDE
1180: 44 20 20 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61  D     %s\n", zPa
1190: 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c  thname);.    }el
11a0: 73 65 20 69 66 28 20 61 63 63 65 73 73 28 7a 46  se if( access(zF
11b0: 75 6c 6c 4e 61 6d 65 2c 20 30 29 20 29 7b 0a 20  ullName, 0) ){. 
11c0: 20 20 20 20 20 70 72 69 6e 74 66 28 22 4d 49 53       printf("MIS
11d0: 53 49 4e 47 20 20 20 25 73 5c 6e 22 2c 20 7a 50  SING   %s\n", zP
11e0: 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65  athname);.    }e
11f0: 6c 73 65 20 69 66 28 20 69 73 44 65 6c 65 74 65  lse if( isDelete
1200: 64 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74  d ){.      print
1210: 66 28 22 44 45 4c 45 54 45 44 20 20 20 25 73 5c  f("DELETED   %s\
1220: 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b 0a  n", zPathname);.
1230: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 68      }else if( ch
1240: 6e 67 65 64 20 29 7b 0a 20 20 20 20 20 20 70 72  nged ){.      pr
1250: 69 6e 74 66 28 22 45 44 49 54 45 44 20 20 20 20  intf("EDITED    
1260: 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65  %s\n", zPathname
1270: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
1280: 20 72 65 6e 61 6d 65 64 20 29 7b 0a 20 20 20 20   renamed ){.    
1290: 20 20 70 72 69 6e 74 66 28 22 52 45 4e 41 4d 45    printf("RENAME
12a0: 44 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68  D   %s\n", zPath
12b0: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  name);.    }else
12c0: 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22  {.      printf("
12d0: 55 4e 43 48 41 4e 47 45 44 20 25 73 5c 6e 22 2c  UNCHANGED %s\n",
12e0: 20 7a 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20   zPathname);.   
12f0: 20 7d 0a 20 20 20 20 66 72 65 65 28 7a 46 75 6c   }.    free(zFul
1300: 6c 4e 61 6d 65 29 3b 0a 20 20 7d 0a 20 20 64 62  lName);.  }.  db
1310: 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 7d  _finalize(&q);.}
1320: 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a  ../*.** COMMAND:
1330: 20 65 78 74 72 61 0a 2a 2a 20 55 73 61 67 65 3a   extra.** Usage:
1340: 20 25 66 6f 73 73 69 6c 20 65 78 74 72 61 0a 2a   %fossil extra.*
1350: 2a 0a 2a 2a 20 50 72 69 6e 74 20 61 20 6c 69 73  *.** Print a lis
1360: 74 20 6f 66 20 61 6c 6c 20 66 69 6c 65 73 20 69  t of all files i
1370: 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 72 65  n the source tre
1380: 65 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 70  e that are not p
1390: 61 72 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 75  art of.** the cu
13a0: 72 72 65 6e 74 20 63 68 65 63 6b 6f 75 74 2e 20  rrent checkout. 
13b0: 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 22 63   See also the "c
13c0: 6c 65 61 6e 22 20 63 6f 6d 6d 61 6e 64 2e 0a 2a  lean" command..*
13d0: 2f 0a 76 6f 69 64 20 65 78 74 72 61 5f 63 6d 64  /.void extra_cmd
13e0: 28 76 6f 69 64 29 7b 0a 20 20 42 6c 6f 62 20 70  (void){.  Blob p
13f0: 61 74 68 3b 0a 20 20 42 6c 6f 62 20 72 65 70 6f  ath;.  Blob repo
1400: 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 69 6e  ;.  Stmt q;.  in
1410: 74 20 6e 3b 0a 20 20 64 62 5f 6d 75 73 74 5f 62  t n;.  db_must_b
1420: 65 5f 77 69 74 68 69 6e 5f 74 72 65 65 28 29 3b  e_within_tree();
1430: 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63  .  db_multi_exec
1440: 28 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41  ("CREATE TEMP TA
1450: 42 4c 45 20 73 66 69 6c 65 28 78 20 54 45 58 54  BLE sfile(x TEXT
1460: 20 50 52 49 4d 41 52 59 20 4b 45 59 29 22 29 3b   PRIMARY KEY)");
1470: 0a 20 20 6e 20 3d 20 73 74 72 6c 65 6e 28 67 2e  .  n = strlen(g.
1480: 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20 20 62  zLocalRoot);.  b
1490: 6c 6f 62 5f 69 6e 69 74 28 26 70 61 74 68 2c 20  lob_init(&path, 
14a0: 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 2c 20 6e 2d  g.zLocalRoot, n-
14b0: 31 29 3b 0a 20 20 76 66 69 6c 65 5f 73 63 61 6e  1);.  vfile_scan
14c0: 28 30 2c 20 26 70 61 74 68 2c 20 62 6c 6f 62 5f  (0, &path, blob_
14d0: 73 69 7a 65 28 26 70 61 74 68 29 29 3b 0a 20 20  size(&path));.  
14e0: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 0a  db_prepare(&q, .
14f0: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78 20        "SELECT x 
1500: 46 52 4f 4d 20 73 66 69 6c 65 22 0a 20 20 20 20  FROM sfile".    
1510: 20 20 22 20 57 48 45 52 45 20 78 20 4e 4f 54 20    " WHERE x NOT 
1520: 49 4e 20 28 27 6d 61 6e 69 66 65 73 74 27 2c 27  IN ('manifest','
1530: 6d 61 6e 69 66 65 73 74 2e 75 75 69 64 27 2c 27  manifest.uuid','
1540: 5f 46 4f 53 53 49 4c 5f 27 29 22 0a 20 20 20 20  _FOSSIL_')".    
1550: 20 20 22 20 4f 52 44 45 52 20 42 59 20 31 22 29    " ORDER BY 1")
1560: 3b 0a 20 20 69 66 28 20 66 69 6c 65 5f 74 72 65  ;.  if( file_tre
1570: 65 5f 6e 61 6d 65 28 67 2e 7a 52 65 70 6f 73 69  e_name(g.zReposi
1580: 74 6f 72 79 4e 61 6d 65 2c 20 26 72 65 70 6f 2c  toryName, &repo,
1590: 20 30 29 20 29 7b 0a 20 20 20 20 64 62 5f 6d 75   0) ){.    db_mu
15a0: 6c 74 69 5f 65 78 65 63 28 22 44 45 4c 45 54 45  lti_exec("DELETE
15b0: 20 46 52 4f 4d 20 73 66 69 6c 65 20 57 48 45 52   FROM sfile WHER
15c0: 45 20 78 3d 25 42 22 2c 20 26 72 65 70 6f 29 3b  E x=%B", &repo);
15d0: 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 64 62  .  }.  while( db
15e0: 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54  _step(&q)==SQLIT
15f0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 70 72 69  E_ROW ){.    pri
1600: 6e 74 66 28 22 25 73 5c 6e 22 2c 20 64 62 5f 63  ntf("%s\n", db_c
1610: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30  olumn_text(&q, 0
1620: 29 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e  ));.  }.  db_fin
1630: 61 6c 69 7a 65 28 26 71 29 3b 0a 7d 0a 0a 2f 2a  alize(&q);.}../*
1640: 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 63 6c 65  .** COMMAND: cle
1650: 61 6e 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66 6f  an.** Usage: %fo
1660: 73 73 69 6c 20 63 6c 65 61 6e 20 3f 2d 61 6c 6c  ssil clean ?-all
1670: 3f 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  ?.**.** Delete a
1680: 6c 6c 20 22 65 78 74 72 61 22 20 66 69 6c 65 73  ll "extra" files
1690: 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74   in the source t
16a0: 72 65 65 2e 20 20 22 45 78 74 72 61 22 20 66 69  ree.  "Extra" fi
16b0: 6c 65 73 20 61 72 65 0a 2a 2a 20 66 69 6c 65 73  les are.** files
16c0: 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 6f 66   that are not of
16d0: 66 69 63 69 61 6c 6c 79 20 70 61 72 74 20 6f 66  ficially part of
16e0: 20 74 68 65 20 63 68 65 63 6b 6f 75 74 2e 20 20   the checkout.  
16f0: 53 65 65 20 61 6c 73 6f 0a 2a 2a 20 74 68 65 20  See also.** the 
1700: 22 65 78 74 72 61 22 20 63 6f 6d 6d 61 6e 64 2e  "extra" command.
1710: 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
1720: 63 61 6e 6e 6f 74 20 62 65 20 75 6e 64 6f 6e 65  cannot be undone
1730: 2e 20 0a 2a 2a 0a 2a 2a 20 59 6f 75 20 77 69 6c  . .**.** You wil
1740: 6c 20 62 65 20 70 72 6f 6d 70 74 65 64 20 62 65  l be prompted be
1750: 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67 20 65 61  fore removing ea
1760: 63 68 20 66 69 6c 65 2e 20 49 66 20 79 6f 75 20  ch file. If you 
1770: 61 72 65 0a 2a 2a 20 73 75 72 65 20 79 6f 75 20  are.** sure you 
1780: 77 69 73 68 20 74 6f 20 72 65 6d 6f 76 65 20 61  wish to remove a
1790: 6c 6c 20 22 65 78 74 72 61 22 20 66 69 6c 65 73  ll "extra" files
17a0: 20 79 6f 75 20 63 61 6e 20 73 70 65 63 69 66 79   you can specify
17b0: 20 74 68 65 0a 2a 2a 20 6f 70 74 69 6f 6e 61 6c   the.** optional
17c0: 20 2d 61 6c 6c 20 66 6c 61 67 2e 0a 2a 2f 0a 76   -all flag..*/.v
17d0: 6f 69 64 20 63 6c 65 61 6e 5f 63 6d 64 28 76 6f  oid clean_cmd(vo
17e0: 69 64 29 7b 0a 20 20 69 6e 74 20 61 6c 6c 46 6c  id){.  int allFl
17f0: 61 67 3b 0a 20 20 42 6c 6f 62 20 70 61 74 68 2c  ag;.  Blob path,
1800: 20 72 65 70 6f 3b 0a 20 20 53 74 6d 74 20 71 3b   repo;.  Stmt q;
1810: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 61 6c 6c 46  .  int n;.  allF
1820: 6c 61 67 20 3d 20 66 69 6e 64 5f 6f 70 74 69 6f  lag = find_optio
1830: 6e 28 22 61 6c 6c 22 2c 22 61 22 2c 30 29 21 3d  n("all","a",0)!=
1840: 30 3b 0a 20 20 64 62 5f 6d 75 73 74 5f 62 65 5f  0;.  db_must_be_
1850: 77 69 74 68 69 6e 5f 74 72 65 65 28 29 3b 0a 20  within_tree();. 
1860: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22   db_multi_exec("
1870: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
1880: 45 20 73 66 69 6c 65 28 78 20 54 45 58 54 20 50  E sfile(x TEXT P
1890: 52 49 4d 41 52 59 20 4b 45 59 29 22 29 3b 0a 20  RIMARY KEY)");. 
18a0: 20 6e 20 3d 20 73 74 72 6c 65 6e 28 67 2e 7a 4c   n = strlen(g.zL
18b0: 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20 20 62 6c 6f  ocalRoot);.  blo
18c0: 62 5f 69 6e 69 74 28 26 70 61 74 68 2c 20 67 2e  b_init(&path, g.
18d0: 7a 4c 6f 63 61 6c 52 6f 6f 74 2c 20 6e 2d 31 29  zLocalRoot, n-1)
18e0: 3b 0a 20 20 76 66 69 6c 65 5f 73 63 61 6e 28 30  ;.  vfile_scan(0
18f0: 2c 20 26 70 61 74 68 2c 20 62 6c 6f 62 5f 73 69  , &path, blob_si
1900: 7a 65 28 26 70 61 74 68 29 29 3b 0a 20 20 64 62  ze(&path));.  db
1910: 5f 70 72 65 70 61 72 65 28 26 71 2c 20 0a 20 20  _prepare(&q, .  
1920: 20 20 20 20 22 53 45 4c 45 43 54 20 25 51 20 7c      "SELECT %Q |
1930: 7c 20 78 20 46 52 4f 4d 20 73 66 69 6c 65 22 0a  | x FROM sfile".
1940: 20 20 20 20 20 20 22 20 57 48 45 52 45 20 78 20        " WHERE x 
1950: 4e 4f 54 20 49 4e 20 28 27 6d 61 6e 69 66 65 73  NOT IN ('manifes
1960: 74 27 2c 27 6d 61 6e 69 66 65 73 74 2e 75 75 69  t','manifest.uui
1970: 64 27 2c 27 5f 46 4f 53 53 49 4c 5f 27 29 22 0a  d','_FOSSIL_')".
1980: 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59        " ORDER BY
1990: 20 31 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f   1", g.zLocalRoo
19a0: 74 29 3b 0a 20 20 69 66 28 20 66 69 6c 65 5f 74  t);.  if( file_t
19b0: 72 65 65 5f 6e 61 6d 65 28 67 2e 7a 52 65 70 6f  ree_name(g.zRepo
19c0: 73 69 74 6f 72 79 4e 61 6d 65 2c 20 26 72 65 70  sitoryName, &rep
19d0: 6f 2c 20 30 29 20 29 7b 0a 20 20 20 20 64 62 5f  o, 0) ){.    db_
19e0: 6d 75 6c 74 69 5f 65 78 65 63 28 22 44 45 4c 45  multi_exec("DELE
19f0: 54 45 20 46 52 4f 4d 20 73 66 69 6c 65 20 57 48  TE FROM sfile WH
1a00: 45 52 45 20 78 3d 25 42 22 2c 20 26 72 65 70 6f  ERE x=%B", &repo
1a10: 29 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20  );.  }.  while( 
1a20: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c  db_step(&q)==SQL
1a30: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69  ITE_ROW ){.    i
1a40: 66 28 20 61 6c 6c 46 6c 61 67 20 29 7b 0a 20 20  f( allFlag ){.  
1a50: 20 20 20 20 75 6e 6c 69 6e 6b 28 64 62 5f 63 6f      unlink(db_co
1a60: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29  lumn_text(&q, 0)
1a70: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1a80: 20 20 20 20 42 6c 6f 62 20 61 6e 73 3b 0a 20 20      Blob ans;.  
1a90: 20 20 20 20 63 68 61 72 20 2a 70 72 6f 6d 70 74      char *prompt
1aa0: 20 3d 20 6d 70 72 69 6e 74 66 28 22 72 65 6d 6f   = mprintf("remo
1ab0: 76 65 20 75 6e 6d 61 6e 61 67 65 64 20 66 69 6c  ve unmanaged fil
1ac0: 65 20 5c 22 25 73 5c 22 20 5b 79 2f 4e 5d 3f 20  e \"%s\" [y/N]? 
1ad0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28   db_column_text(
1b00: 26 71 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 62  &q, 0));.      b
1b10: 6c 6f 62 5f 7a 65 72 6f 28 26 61 6e 73 29 3b 0a  lob_zero(&ans);.
1b20: 20 20 20 20 20 20 70 72 6f 6d 70 74 5f 75 73 65        prompt_use
1b30: 72 28 70 72 6f 6d 70 74 2c 20 26 61 6e 73 29 3b  r(prompt, &ans);
1b40: 0a 20 20 20 20 20 20 69 66 28 20 62 6c 6f 62 5f  .      if( blob_
1b50: 73 74 72 28 26 61 6e 73 29 5b 30 5d 3d 3d 27 79  str(&ans)[0]=='y
1b60: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 75 6e 6c  ' ){.        unl
1b70: 69 6e 6b 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65  ink(db_column_te
1b80: 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 20 20 20  xt(&q, 0));.    
1b90: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
1ba0: 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b  db_finalize(&q);
1bb0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 65 70 61 72  .}../*.** Prepar
1bc0: 65 20 61 20 63 6f 6d 6d 69 74 20 63 6f 6d 6d 65  e a commit comme
1bd0: 6e 74 2e 20 20 4c 65 74 20 74 68 65 20 75 73 65  nt.  Let the use
1be0: 72 20 6d 6f 64 69 66 79 20 69 74 20 75 73 69 6e  r modify it usin
1bf0: 67 20 74 68 65 0a 2a 2a 20 65 64 69 74 6f 72 20  g the.** editor 
1c00: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
1c10: 20 67 6c 6f 62 61 6c 5f 63 6f 6e 66 69 67 20 74   global_config t
1c20: 61 62 6c 65 20 6f 72 20 65 69 74 68 65 72 0a 2a  able or either.*
1c30: 2a 20 74 68 65 20 56 49 53 55 41 4c 20 6f 72 20  * the VISUAL or 
1c40: 45 44 49 54 4f 52 20 65 6e 76 69 72 6f 6e 6d 65  EDITOR environme
1c50: 6e 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  nt variable..**.
1c60: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 66 69 6e  ** Store the fin
1c70: 61 6c 20 63 6f 6d 6d 69 74 20 63 6f 6d 6d 65 6e  al commit commen
1c80: 74 20 69 6e 20 70 43 6f 6d 6d 65 6e 74 2e 20 20  t in pComment.  
1c90: 70 43 6f 6d 6d 65 6e 74 20 69 73 20 61 73 73 75  pComment is assu
1ca0: 6d 65 64 0a 2a 2a 20 74 6f 20 62 65 20 75 6e 69  med.** to be uni
1cb0: 6e 69 74 69 61 6c 69 7a 65 64 20 2d 20 61 6e 79  nitialized - any
1cc0: 20 70 72 69 6f 72 20 63 6f 6e 74 65 6e 74 20 69   prior content i
1cd0: 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 0a 2a  s overwritten..*
1ce0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72  /.static void pr
1cf0: 65 70 61 72 65 5f 63 6f 6d 6d 69 74 5f 63 6f 6d  epare_commit_com
1d00: 6d 65 6e 74 28 42 6c 6f 62 20 2a 70 43 6f 6d 6d  ment(Blob *pComm
1d10: 65 6e 74 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ent){.  const ch
1d20: 61 72 20 2a 7a 45 64 69 74 6f 72 3b 0a 20 20 63  ar *zEditor;.  c
1d30: 68 61 72 20 2a 7a 43 6d 64 3b 0a 20 20 63 68 61  har *zCmd;.  cha
1d40: 72 20 2a 7a 46 69 6c 65 3b 0a 20 20 42 6c 6f 62  r *zFile;.  Blob
1d50: 20 74 65 78 74 2c 20 6c 69 6e 65 3b 0a 20 20 63   text, line;.  c
1d60: 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 3b 0a 20  har *zComment;. 
1d70: 20 69 6e 74 20 69 3b 0a 20 20 62 6c 6f 62 5f 73   int i;.  blob_s
1d80: 65 74 28 26 74 65 78 74 2c 0a 20 20 20 20 22 5c  et(&text,.    "\
1d90: 6e 22 0a 20 20 20 20 22 23 20 45 6e 74 65 72 20  n".    "# Enter 
1da0: 63 6f 6d 6d 65 6e 74 73 20 6f 6e 20 74 68 69 73  comments on this
1db0: 20 63 68 65 63 6b 2d 69 6e 2e 20 20 4c 69 6e 65   check-in.  Line
1dc0: 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
1dd0: 20 23 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 5c   # are ignored.\
1de0: 6e 22 0a 20 20 20 20 22 23 20 54 68 65 20 63 68  n".    "# The ch
1df0: 65 63 6b 2d 69 6e 20 63 6f 6d 6d 65 6e 74 20 66  eck-in comment f
1e00: 6f 6c 6c 6f 77 73 20 77 69 6b 69 20 66 6f 72 6d  ollows wiki form
1e10: 61 74 74 69 6e 67 20 72 75 6c 65 73 2e 5c 6e 22  atting rules.\n"
1e20: 0a 20 20 20 20 22 23 5c 6e 22 0a 20 20 29 3b 0a  .    "#\n".  );.
1e30: 20 20 73 74 61 74 75 73 5f 72 65 70 6f 72 74 28    status_report(
1e40: 26 74 65 78 74 2c 20 22 23 20 22 29 3b 0a 20 20  &text, "# ");.  
1e50: 7a 45 64 69 74 6f 72 20 3d 20 64 62 5f 67 65 74  zEditor = db_get
1e60: 28 22 65 64 69 74 6f 72 22 2c 20 30 29 3b 0a 20  ("editor", 0);. 
1e70: 20 69 66 28 20 7a 45 64 69 74 6f 72 3d 3d 30 20   if( zEditor==0 
1e80: 29 7b 0a 20 20 20 20 7a 45 64 69 74 6f 72 20 3d  ){.    zEditor =
1e90: 20 67 65 74 65 6e 76 28 22 56 49 53 55 41 4c 22   getenv("VISUAL"
1ea0: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 45 64  );.  }.  if( zEd
1eb0: 69 74 6f 72 3d 3d 30 20 29 7b 0a 20 20 20 20 7a  itor==0 ){.    z
1ec0: 45 64 69 74 6f 72 20 3d 20 67 65 74 65 6e 76 28  Editor = getenv(
1ed0: 22 45 44 49 54 4f 52 22 29 3b 0a 20 20 7d 0a 20  "EDITOR");.  }. 
1ee0: 20 69 66 28 20 7a 45 64 69 74 6f 72 3d 3d 30 20   if( zEditor==0 
1ef0: 29 7b 0a 23 69 66 64 65 66 20 5f 5f 4d 49 4e 47  ){.#ifdef __MING
1f00: 57 33 32 5f 5f 0a 20 20 20 20 7a 45 64 69 74 6f  W32__.    zEdito
1f10: 72 20 3d 20 22 6e 6f 74 65 70 61 64 22 3b 0a 23  r = "notepad";.#
1f20: 65 6c 73 65 0a 20 20 20 20 7a 45 64 69 74 6f 72  else.    zEditor
1f30: 20 3d 20 22 65 64 22 3b 0a 23 65 6e 64 69 66 0a   = "ed";.#endif.
1f40: 20 20 7d 0a 20 20 7a 46 69 6c 65 20 3d 20 64 62    }.  zFile = db
1f50: 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54  _text(0, "SELECT
1f60: 20 27 25 71 63 69 2d 63 6f 6d 6d 65 6e 74 2d 27   '%qci-comment-'
1f70: 20 7c 7c 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c   || hex(randombl
1f80: 6f 62 28 36 29 29 20 7c 7c 20 27 2e 74 78 74 27  ob(6)) || '.txt'
1f90: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
1fa0: 20 20 20 20 20 20 67 2e 7a 4c 6f 63 61 6c 52 6f        g.zLocalRo
1fb0: 6f 74 29 3b 0a 23 69 66 64 65 66 20 5f 5f 4d 49  ot);.#ifdef __MI
1fc0: 4e 47 57 33 32 5f 5f 0a 20 20 62 6c 6f 62 5f 61  NGW32__.  blob_a
1fd0: 64 64 5f 63 72 28 26 74 65 78 74 29 3b 0a 23 65  dd_cr(&text);.#e
1fe0: 6e 64 69 66 0a 20 20 62 6c 6f 62 5f 77 72 69 74  ndif.  blob_writ
1ff0: 65 5f 74 6f 5f 66 69 6c 65 28 26 74 65 78 74 2c  e_to_file(&text,
2000: 20 7a 46 69 6c 65 29 3b 0a 20 20 7a 43 6d 64 20   zFile);.  zCmd 
2010: 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 20 5c 22  = mprintf("%s \"
2020: 25 73 5c 22 22 2c 20 7a 45 64 69 74 6f 72 2c 20  %s\"", zEditor, 
2030: 7a 46 69 6c 65 29 3b 0a 20 20 70 72 69 6e 74 66  zFile);.  printf
2040: 28 22 25 73 5c 6e 22 2c 20 7a 43 6d 64 29 3b 0a  ("%s\n", zCmd);.
2050: 20 20 69 66 28 20 73 79 73 74 65 6d 28 7a 43 6d    if( system(zCm
2060: 64 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c  d) ){.    fossil
2070: 5f 70 61 6e 69 63 28 22 65 64 69 74 6f 72 20 61  _panic("editor a
2080: 62 6f 72 74 65 64 22 29 3b 0a 20 20 7d 0a 20 20  borted");.  }.  
2090: 62 6c 6f 62 5f 72 65 73 65 74 28 26 74 65 78 74  blob_reset(&text
20a0: 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 61 64 5f 66  );.  blob_read_f
20b0: 72 6f 6d 5f 66 69 6c 65 28 26 74 65 78 74 2c 20  rom_file(&text, 
20c0: 7a 46 69 6c 65 29 3b 0a 20 20 62 6c 6f 62 5f 72  zFile);.  blob_r
20d0: 65 6d 6f 76 65 5f 63 72 28 26 74 65 78 74 29 3b  emove_cr(&text);
20e0: 0a 20 20 75 6e 6c 69 6e 6b 28 7a 46 69 6c 65 29  .  unlink(zFile)
20f0: 3b 0a 20 20 66 72 65 65 28 7a 46 69 6c 65 29 3b  ;.  free(zFile);
2100: 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 70 43 6f  .  blob_zero(pCo
2110: 6d 6d 65 6e 74 29 3b 0a 20 20 77 68 69 6c 65 28  mment);.  while(
2120: 20 62 6c 6f 62 5f 6c 69 6e 65 28 26 74 65 78 74   blob_line(&text
2130: 2c 20 26 6c 69 6e 65 29 20 29 7b 0a 20 20 20 20  , &line) ){.    
2140: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 20 20 63 68  int i, n;.    ch
2150: 61 72 20 2a 7a 3b 0a 20 20 20 20 6e 20 3d 20 62  ar *z;.    n = b
2160: 6c 6f 62 5f 73 69 7a 65 28 26 6c 69 6e 65 29 3b  lob_size(&line);
2170: 0a 20 20 20 20 7a 20 3d 20 62 6c 6f 62 5f 62 75  .    z = blob_bu
2180: 66 66 65 72 28 26 6c 69 6e 65 29 3b 0a 20 20 20  ffer(&line);.   
2190: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 20 26 26   for(i=0; i<n &&
21a0: 20 69 73 73 70 61 63 65 28 7a 5b 69 5d 29 3b 20   isspace(z[i]); 
21b0: 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 69 66 28 20   i++){}.    if( 
21c0: 69 3c 6e 20 26 26 20 7a 5b 69 5d 3d 3d 27 23 27  i<n && z[i]=='#'
21d0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
21e0: 20 69 66 28 20 69 3c 6e 20 7c 7c 20 62 6c 6f 62   if( i<n || blob
21f0: 5f 73 69 7a 65 28 70 43 6f 6d 6d 65 6e 74 29 3e  _size(pComment)>
2200: 30 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f  0 ){.      blob_
2210: 61 70 70 65 6e 64 66 28 70 43 6f 6d 6d 65 6e 74  appendf(pComment
2220: 2c 20 22 25 62 22 2c 20 26 6c 69 6e 65 29 3b 0a  , "%b", &line);.
2230: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 6c 6f 62      }.  }.  blob
2240: 5f 72 65 73 65 74 28 26 74 65 78 74 29 3b 0a 20  _reset(&text);. 
2250: 20 7a 43 6f 6d 6d 65 6e 74 20 3d 20 62 6c 6f 62   zComment = blob
2260: 5f 73 74 72 28 70 43 6f 6d 6d 65 6e 74 29 3b 0a  _str(pComment);.
2270: 20 20 69 20 3d 20 73 74 72 6c 65 6e 28 7a 43 6f    i = strlen(zCo
2280: 6d 6d 65 6e 74 29 3b 0a 20 20 77 68 69 6c 65 28  mment);.  while(
2290: 20 69 3e 30 20 26 26 20 69 73 73 70 61 63 65 28   i>0 && isspace(
22a0: 7a 43 6f 6d 6d 65 6e 74 5b 69 2d 31 5d 29 20 29  zComment[i-1]) )
22b0: 7b 20 69 2d 2d 3b 20 7d 0a 20 20 62 6c 6f 62 5f  { i--; }.  blob_
22c0: 72 65 73 69 7a 65 28 70 43 6f 6d 6d 65 6e 74 2c  resize(pComment,
22d0: 20 69 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 6f   i);.}../*.** Po
22e0: 70 75 6c 61 74 65 20 74 68 65 20 47 6c 6f 62 61  pulate the Globa
22f0: 6c 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 5b 5d 20  l.aCommitFile[] 
2300: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6d  based on the com
2310: 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65  mand line argume
2320: 6e 74 73 0a 2a 2a 20 74 6f 20 61 20 5b 63 6f 6d  nts.** to a [com
2330: 6d 69 74 5d 20 63 6f 6d 6d 61 6e 64 2e 20 47 6c  mit] command. Gl
2340: 6f 62 61 6c 2e 61 43 6f 6d 6d 69 74 46 69 6c 65  obal.aCommitFile
2350: 20 69 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20   is an array of 
2360: 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73 69 7a 65  integers.** size
2370: 64 20 61 74 20 28 4e 2b 31 29 2c 20 77 68 65 72  d at (N+1), wher
2380: 65 20 4e 20 69 73 20 74 68 65 20 6e 75 6d 62 65  e N is the numbe
2390: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
23a0: 61 73 73 65 64 20 74 6f 20 5b 63 6f 6d 6d 69 74  assed to [commit
23b0: 5d 2e 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e  ]..** The conten
23c0: 74 73 20 61 72 65 20 74 68 65 20 5b 69 64 5d 20  ts are the [id] 
23d0: 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20  values from the 
23e0: 76 66 69 6c 65 20 74 61 62 6c 65 20 63 6f 72 72  vfile table corr
23f0: 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 6f 20  esponding.** to 
2400: 74 68 65 20 66 69 6c 65 6e 61 6d 65 73 20 70 61  the filenames pa
2410: 73 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  ssed as argument
2420: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 61 73  s..**.** The las
2430: 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 43 6f  t element of aCo
2440: 6d 6d 69 74 46 69 6c 65 5b 5d 20 69 73 20 61 6c  mmitFile[] is al
2450: 77 61 79 73 20 30 20 2d 20 69 6e 64 69 63 61 74  ways 0 - indicat
2460: 69 6e 67 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f  ing the end.** o
2470: 66 20 74 68 65 20 61 72 72 61 79 2e 0a 2a 2a 0a  f the array..**.
2480: 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65  ** If there were
2490: 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 70 61   no arguments pa
24a0: 73 73 65 64 20 74 6f 20 5b 63 6f 6d 6d 69 74 5d  ssed to [commit]
24b0: 2c 20 61 43 6f 6d 6d 69 74 46 69 6c 65 20 69 73  , aCommitFile is
24c0: 20 6e 6f 74 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65   not.** allocate
24d0: 64 20 61 6e 64 20 72 65 6d 61 69 6e 73 20 4e 55  d and remains NU
24e0: 4c 4c 2e 20 4f 74 68 65 72 20 70 61 72 74 73 20  LL. Other parts 
24f0: 6f 66 20 74 68 65 20 63 6f 64 65 20 69 6e 74 65  of the code inte
2500: 72 70 72 65 74 20 74 68 69 73 0a 2a 2a 20 74 6f  rpret this.** to
2510: 20 6d 65 61 6e 20 22 61 6c 6c 20 66 69 6c 65 73   mean "all files
2520: 22 2e 0a 2a 2f 0a 76 6f 69 64 20 73 65 6c 65 63  "..*/.void selec
2530: 74 5f 63 6f 6d 6d 69 74 5f 66 69 6c 65 73 28 76  t_commit_files(v
2540: 6f 69 64 29 7b 0a 20 20 69 66 28 20 67 2e 61 72  oid){.  if( g.ar
2550: 67 63 3e 32 20 29 7b 0a 20 20 20 20 69 6e 74 20  gc>2 ){.    int 
2560: 69 69 3b 0a 20 20 20 20 42 6c 6f 62 20 62 3b 0a  ii;.    Blob b;.
2570: 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 62      blob_zero(&b
2580: 29 3b 0a 20 20 20 20 67 2e 61 43 6f 6d 6d 69 74  );.    g.aCommit
2590: 46 69 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28 73 69  File = malloc(si
25a0: 7a 65 6f 66 28 69 6e 74 29 2a 28 67 2e 61 72 67  zeof(int)*(g.arg
25b0: 63 2d 31 29 29 3b 0a 0a 20 20 20 20 66 6f 72 28  c-1));..    for(
25c0: 69 69 3d 32 3b 20 69 69 3c 67 2e 61 72 67 63 3b  ii=2; ii<g.argc;
25d0: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e   ii++){.      in
25e0: 74 20 69 49 64 3b 0a 20 20 20 20 20 20 66 69 6c  t iId;.      fil
25f0: 65 5f 74 72 65 65 5f 6e 61 6d 65 28 67 2e 61 72  e_tree_name(g.ar
2600: 67 76 5b 69 69 5d 2c 20 26 62 2c 20 31 29 3b 0a  gv[ii], &b, 1);.
2610: 20 20 20 20 20 20 69 49 64 20 3d 20 64 62 5f 69        iId = db_i
2620: 6e 74 28 2d 31 2c 20 22 53 45 4c 45 43 54 20 69  nt(-1, "SELECT i
2630: 64 20 46 52 4f 4d 20 76 66 69 6c 65 20 57 48 45  d FROM vfile WHE
2640: 52 45 20 70 61 74 68 6e 61 6d 65 3d 25 51 22 2c  RE pathname=%Q",
2650: 20 62 6c 6f 62 5f 73 74 72 28 26 62 29 29 3b 0a   blob_str(&b));.
2660: 20 20 20 20 20 20 69 66 28 20 69 49 64 3c 30 20        if( iId<0 
2670: 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 73 73 69  ){.        fossi
2680: 6c 5f 66 61 74 61 6c 28 22 66 6f 73 73 69 6c 20  l_fatal("fossil 
2690: 6b 6e 6f 77 73 20 6e 6f 74 68 69 6e 67 20 61 62  knows nothing ab
26a0: 6f 75 74 3a 20 25 73 22 2c 20 67 2e 61 72 67 76  out: %s", g.argv
26b0: 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  [ii]);.      }. 
26c0: 20 20 20 20 20 67 2e 61 43 6f 6d 6d 69 74 46 69       g.aCommitFi
26d0: 6c 65 5b 69 69 2d 32 5d 20 3d 20 69 49 64 3b 0a  le[ii-2] = iId;.
26e0: 20 20 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74        blob_reset
26f0: 28 26 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  (&b);.    }.    
2700: 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 5b 69 69  g.aCommitFile[ii
2710: 2d 32 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 0a  -2] = 0;.  }.}..
2720: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
2730: 65 20 69 66 20 74 68 65 20 63 68 65 63 6b 2d 69  e if the check-i
2740: 6e 20 77 69 74 68 20 52 49 44 3d 72 69 64 20 68  n with RID=rid h
2750: 61 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 63  as one or more c
2760: 68 69 6c 64 0a 2a 2a 20 63 68 65 63 6b 2d 69 6e  hild.** check-in
2770: 73 20 77 68 69 63 68 20 61 72 65 20 6e 6f 74 20  s which are not 
2780: 74 61 67 67 65 64 20 77 69 74 68 20 22 6e 65 77  tagged with "new
2790: 62 72 61 6e 63 68 22 2e 20 20 49 6e 20 6f 74 68  branch".  In oth
27a0: 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 72 65 74  er words,.** ret
27b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
27c0: 63 68 65 63 6b 2d 69 6e 20 69 73 20 6e 6f 74 20  check-in is not 
27d0: 61 20 6c 65 61 66 2e 0a 2a 2f 0a 69 6e 74 20 69  a leaf..*/.int i
27e0: 73 5f 6e 6f 74 5f 61 5f 6c 65 61 66 28 69 6e 74  s_not_a_leaf(int
27f0: 20 72 69 64 29 7b 0a 20 20 72 65 74 75 72 6e 20   rid){.  return 
2800: 64 62 5f 65 78 69 73 74 73 28 0a 20 20 20 20 22  db_exists(.    "
2810: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 6c  SELECT 1 FROM pl
2820: 69 6e 6b 22 0a 20 20 20 20 22 20 57 48 45 52 45  ink".    " WHERE
2830: 20 70 69 64 3d 25 64 22 0a 20 20 20 20 20 20 22   pid=%d".      "
2840: 20 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 28 22   AND NOT EXIST("
2850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2860: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 31 20        "SELECT 1 
2870: 46 52 4f 4d 20 74 61 67 78 72 65 66 22 0a 20 20  FROM tagxref".  
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2890: 20 20 20 22 20 57 48 45 52 45 20 74 61 67 78 72     " WHERE tagxr
28a0: 65 66 2e 72 69 64 3d 70 6c 69 6e 6b 2e 63 69 64  ef.rid=plink.cid
28b0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
28c0: 20 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 74         "   AND t
28d0: 61 67 78 72 65 66 2e 74 61 67 69 64 3d 25 64 22  agxref.tagid=%d"
28e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f0: 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 74 61        "   AND ta
2900: 67 78 72 65 66 2e 74 61 67 74 79 70 65 3d 31 22  gxref.tagtype=1"
2910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2920: 22 29 22 2c 0a 20 20 20 20 72 69 64 2c 20 54 41  ")",.    rid, TA
2930: 47 5f 4e 45 57 42 52 41 4e 43 48 0a 20 20 29 3b  G_NEWBRANCH.  );
2940: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e  .}../*.** COMMAN
2950: 44 3a 20 63 69 0a 2a 2a 20 43 4f 4d 4d 41 4e 44  D: ci.** COMMAND
2960: 3a 20 63 6f 6d 6d 69 74 0a 2a 2a 0a 2a 2a 20 55  : commit.**.** U
2970: 73 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 63 6f  sage: %fossil co
2980: 6d 6d 69 74 20 3f 2d 6d 20 43 4f 4d 4d 45 4e 54  mmit ?-m COMMENT
2990: 3f 20 3f 2d 2d 6e 6f 73 69 67 6e 3f 20 3f 46 49  ? ?--nosign? ?FI
29a0: 4c 45 2e 2e 2e 3f 0a 2a 2a 0a 2a 2a 20 43 72 65  LE...?.**.** Cre
29b0: 61 74 65 20 61 20 6e 65 77 20 76 65 72 73 69 6f  ate a new versio
29c0: 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c  n containing all
29d0: 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 73 20   of the changes 
29e0: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  in the current.*
29f0: 2a 20 63 68 65 63 6b 6f 75 74 2e 20 20 59 6f 75  * checkout.  You
2a00: 20 77 69 6c 6c 20 62 65 20 70 72 6f 6d 70 74 65   will be prompte
2a10: 64 20 74 6f 20 65 6e 74 65 72 20 61 20 63 68 65  d to enter a che
2a20: 63 6b 2d 69 6e 20 63 6f 6d 6d 65 6e 74 20 75 6e  ck-in comment un
2a30: 6c 65 73 73 0a 2a 2a 20 74 68 65 20 22 2d 6d 22  less.** the "-m"
2a40: 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20   option is used 
2a50: 74 6f 20 73 70 65 63 69 66 79 20 61 20 63 6f 6d  to specify a com
2a60: 6d 65 6e 74 20 6c 69 6e 65 2e 20 20 59 6f 75 20  ment line.  You 
2a70: 77 69 6c 6c 20 62 65 0a 2a 2a 20 70 72 6f 6d 70  will be.** promp
2a80: 74 65 64 20 66 6f 72 20 79 6f 75 72 20 47 50 47  ted for your GPG
2a90: 20 70 61 73 73 70 68 72 61 73 65 20 69 6e 20 6f   passphrase in o
2aa0: 72 64 65 72 20 74 6f 20 73 69 67 6e 20 74 68 65  rder to sign the
2ab0: 20 6e 65 77 20 6d 61 6e 69 66 65 73 74 0a 2a 2a   new manifest.**
2ac0: 20 75 6e 6c 65 73 73 20 74 68 65 20 22 2d 2d 6e   unless the "--n
2ad0: 6f 73 69 67 6e 22 20 6f 70 74 69 6f 6e 73 20 69  osign" options i
2ae0: 73 20 75 73 65 64 2e 20 20 41 6c 6c 20 66 69 6c  s used.  All fil
2af0: 65 73 20 74 68 61 74 20 68 61 76 65 0a 2a 2a 20  es that have.** 
2b00: 63 68 61 6e 67 65 64 20 77 69 6c 6c 20 62 65 20  changed will be 
2b10: 63 6f 6d 6d 69 74 74 65 64 20 75 6e 6c 65 73 73  committed unless
2b20: 20 73 6f 6d 65 20 73 75 62 73 65 74 20 6f 66 20   some subset of 
2b30: 66 69 6c 65 73 20 69 73 20 73 70 65 63 69 66 69  files is specifi
2b40: 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d  ed.** on the com
2b50: 6d 61 6e 64 20 6c 69 6e 65 2e 0a 2a 2f 0a 76 6f  mand line..*/.vo
2b60: 69 64 20 63 6f 6d 6d 69 74 5f 63 6d 64 28 76 6f  id commit_cmd(vo
2b70: 69 64 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  id){.  int rc;. 
2b80: 20 69 6e 74 20 76 69 64 2c 20 6e 72 69 64 2c 20   int vid, nrid, 
2b90: 6e 76 69 64 2c 20 77 6f 75 6c 64 46 6f 72 6b 3d  nvid, wouldFork=
2ba0: 30 3b 0a 20 20 42 6c 6f 62 20 63 6f 6d 6d 65 6e  0;.  Blob commen
2bb0: 74 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  t;.  const char 
2bc0: 2a 7a 43 6f 6d 6d 65 6e 74 3b 0a 20 20 53 74 6d  *zComment;.  Stm
2bd0: 74 20 71 3b 0a 20 20 53 74 6d 74 20 71 32 3b 0a  t q;.  Stmt q2;.
2be0: 20 20 63 68 61 72 20 2a 7a 55 75 69 64 2c 20 2a    char *zUuid, *
2bf0: 7a 44 61 74 65 3b 0a 20 20 69 6e 74 20 6e 6f 53  zDate;.  int noS
2c00: 69 67 6e 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ign = 0;        
2c10: 2f 2a 20 54 72 75 65 20 74 6f 20 6f 6d 69 74 20  /* True to omit 
2c20: 73 69 67 6e 69 6e 67 20 74 68 65 20 6d 61 6e 69  signing the mani
2c30: 66 65 73 74 20 75 73 69 6e 67 20 47 50 47 20 2a  fest using GPG *
2c40: 2f 0a 20 20 69 6e 74 20 69 73 41 4d 65 72 67 65  /.  int isAMerge
2c50: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 54 72   = 0;      /* Tr
2c60: 75 65 20 69 66 20 63 68 65 63 6b 69 6e 67 20 69  ue if checking i
2c70: 6e 20 61 20 6d 65 72 67 65 20 2a 2f 0a 20 20 69  n a merge */.  i
2c80: 6e 74 20 66 6f 72 63 65 46 6c 61 67 20 3d 20 30  nt forceFlag = 0
2c90: 3b 20 20 20 20 20 2f 2a 20 46 6f 72 63 65 20 61  ;     /* Force a
2ca0: 20 66 6f 72 6b 20 2a 2f 0a 20 20 63 68 61 72 20   fork */.  char 
2cb0: 2a 7a 4d 61 6e 69 66 65 73 74 46 69 6c 65 3b 20  *zManifestFile; 
2cc0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
2cd0: 20 6d 61 6e 69 66 65 73 74 20 66 69 6c 65 20 2a   manifest file *
2ce0: 2f 0a 20 20 69 6e 74 20 6e 42 61 73 65 6e 61 6d  /.  int nBasenam
2cf0: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  e;         /* Le
2d00: 6e 67 74 68 20 6f 66 20 22 67 2e 7a 4c 6f 63 61  ngth of "g.zLoca
2d10: 6c 52 6f 6f 74 2f 22 20 2a 2f 0a 20 20 42 6c 6f  lRoot/" */.  Blo
2d20: 62 20 66 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20  b filename;     
2d30: 20 20 20 20 2f 2a 20 63 6f 6d 70 6c 65 74 65 20      /* complete 
2d40: 66 69 6c 65 6e 61 6d 65 20 2a 2f 0a 20 20 42 6c  filename */.  Bl
2d50: 6f 62 20 6d 61 6e 69 66 65 73 74 3b 0a 20 20 42  ob manifest;.  B
2d60: 6c 6f 62 20 6d 75 75 69 64 3b 20 20 20 20 20 20  lob muuid;      
2d70: 20 20 20 20 20 20 2f 2a 20 4d 61 6e 69 66 65 73        /* Manifes
2d80: 74 20 75 75 69 64 20 2a 2f 0a 20 20 42 6c 6f 62  t uuid */.  Blob
2d90: 20 6d 63 6b 73 75 6d 3b 20 20 20 20 20 20 20 20   mcksum;        
2da0: 20 20 20 2f 2a 20 53 65 6c 66 2d 63 68 65 63 6b     /* Self-check
2db0: 73 75 6d 20 6f 6e 20 74 68 65 20 6d 61 6e 69 66  sum on the manif
2dc0: 65 73 74 20 2a 2f 0a 20 20 42 6c 6f 62 20 63 6b  est */.  Blob ck
2dd0: 73 75 6d 31 2c 20 63 6b 73 75 6d 32 3b 20 20 20  sum1, cksum2;   
2de0: 2f 2a 20 42 65 66 6f 72 65 20 61 6e 64 20 61 66  /* Before and af
2df0: 74 65 72 20 63 6f 6d 6d 69 74 20 63 68 65 63 6b  ter commit check
2e00: 73 75 6d 73 20 2a 2f 0a 20 20 42 6c 6f 62 20 63  sums */.  Blob c
2e10: 6b 73 75 6d 31 62 3b 20 20 20 20 20 20 20 20 20  ksum1b;         
2e20: 20 2f 2a 20 43 68 65 63 6b 73 75 6d 20 72 65 63   /* Checksum rec
2e30: 6f 72 64 65 64 20 69 6e 20 74 68 65 20 6d 61 6e  orded in the man
2e40: 69 66 65 73 74 20 2a 2f 0a 20 0a 20 20 75 72 6c  ifest */. .  url
2e50: 5f 70 72 6f 78 79 5f 6f 70 74 69 6f 6e 73 28 29  _proxy_options()
2e60: 3b 0a 20 20 6e 6f 53 69 67 6e 20 3d 20 66 69 6e  ;.  noSign = fin
2e70: 64 5f 6f 70 74 69 6f 6e 28 22 6e 6f 73 69 67 6e  d_option("nosign
2e80: 22 2c 22 22 2c 30 29 21 3d 30 3b 0a 20 20 7a 43  ","",0)!=0;.  zC
2e90: 6f 6d 6d 65 6e 74 20 3d 20 66 69 6e 64 5f 6f 70  omment = find_op
2ea0: 74 69 6f 6e 28 22 63 6f 6d 6d 65 6e 74 22 2c 22  tion("comment","
2eb0: 6d 22 2c 31 29 3b 0a 20 20 66 6f 72 63 65 46 6c  m",1);.  forceFl
2ec0: 61 67 20 3d 20 66 69 6e 64 5f 6f 70 74 69 6f 6e  ag = find_option
2ed0: 28 22 66 6f 72 63 65 22 2c 20 22 66 22 2c 20 30  ("force", "f", 0
2ee0: 29 21 3d 30 3b 0a 20 20 64 62 5f 6d 75 73 74 5f  )!=0;.  db_must_
2ef0: 62 65 5f 77 69 74 68 69 6e 5f 74 72 65 65 28 29  be_within_tree()
2f00: 3b 0a 20 20 6e 6f 53 69 67 6e 20 3d 20 64 62 5f  ;.  noSign = db_
2f10: 67 65 74 5f 62 6f 6f 6c 65 61 6e 28 22 6f 6d 69  get_boolean("omi
2f20: 74 73 69 67 6e 22 2c 20 30 29 7c 6e 6f 53 69 67  tsign", 0)|noSig
2f30: 6e 3b 0a 20 20 69 66 28 20 64 62 5f 67 65 74 5f  n;.  if( db_get_
2f40: 62 6f 6f 6c 65 61 6e 28 22 63 6c 65 61 72 73 69  boolean("clearsi
2f50: 67 6e 22 2c 20 31 29 3d 3d 30 20 29 7b 20 6e 6f  gn", 1)==0 ){ no
2f60: 53 69 67 6e 20 3d 20 31 3b 20 7d 0a 20 20 76 65  Sign = 1; }.  ve
2f70: 72 69 66 79 5f 61 6c 6c 5f 6f 70 74 69 6f 6e 73  rify_all_options
2f80: 28 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 41  ();..  /*.  ** A
2f90: 75 74 6f 73 79 6e 63 20 69 66 20 72 65 71 75 65  utosync if reque
2fa0: 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 61 75 74  sted..  */.  aut
2fb0: 6f 73 79 6e 63 28 41 55 54 4f 53 59 4e 43 5f 50  osync(AUTOSYNC_P
2fc0: 55 4c 4c 29 3b 0a 20 20 0a 20 20 2f 2a 20 54 68  ULL);.  .  /* Th
2fd0: 65 72 65 20 61 72 65 20 74 77 6f 20 77 61 79 73  ere are two ways
2fe0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6d 61   this command ma
2ff0: 79 20 62 65 20 65 78 65 63 75 74 65 64 2e 20 49  y be executed. I
3000: 66 20 74 68 65 72 65 20 61 72 65 0a 20 20 2a 2a  f there are.  **
3010: 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 66 6f   no arguments fo
3020: 6c 6c 6f 77 69 6e 67 20 74 68 65 20 77 6f 72 64  llowing the word
3030: 20 22 63 6f 6d 6d 69 74 22 2c 20 74 68 65 6e 20   "commit", then 
3040: 61 6c 6c 20 6d 6f 64 69 66 69 65 64 20 66 69 6c  all modified fil
3050: 65 73 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 63  es.  ** in the c
3060: 68 65 63 6b 65 64 20 6f 75 74 20 64 69 72 65 63  hecked out direc
3070: 74 6f 72 79 20 61 72 65 20 63 6f 6d 6d 69 74 74  tory are committ
3080: 65 64 2e 20 49 66 20 6f 6e 65 20 6f 72 20 6d 6f  ed. If one or mo
3090: 72 65 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 2a  re arguments.  *
30a0: 2a 20 66 6f 6c 6c 6f 77 73 20 22 63 6f 6d 6d 69  * follows "commi
30b0: 74 22 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  t", then only th
30c0: 6f 73 65 20 66 69 6c 65 73 20 61 72 65 20 63 6f  ose files are co
30d0: 6d 6d 69 74 74 65 64 2e 0a 20 20 2a 2a 0a 20 20  mmitted..  **.  
30e0: 2a 2a 20 41 66 74 65 72 20 74 68 65 20 66 6f 6c  ** After the fol
30f0: 6c 6f 77 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lowing function 
3100: 63 61 6c 6c 20 68 61 73 20 72 65 74 75 72 6e 65  call has returne
3110: 64 2c 20 74 68 65 20 47 6c 6f 62 61 6c 2e 61 43  d, the Global.aC
3120: 6f 6d 6d 69 74 46 69 6c 65 5b 5d 0a 20 20 2a 2a  ommitFile[].  **
3130: 20 61 72 72 61 79 20 69 73 20 61 6c 6c 6f 63 61   array is alloca
3140: 74 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ted to contain t
3150: 68 65 20 22 69 64 22 20 66 69 65 6c 64 20 66 72  he "id" field fr
3160: 6f 6d 20 74 68 65 20 76 66 69 6c 65 20 74 61 62  om the vfile tab
3170: 6c 65 0a 20 20 2a 2a 20 66 6f 72 20 65 61 63 68  le.  ** for each
3180: 20 66 69 6c 65 20 74 6f 20 62 65 20 63 6f 6d 6d   file to be comm
3190: 69 74 74 65 64 2e 20 4f 72 2c 20 69 66 20 61 43  itted. Or, if aC
31a0: 6f 6d 6d 69 74 46 69 6c 65 20 69 73 20 4e 55 4c  ommitFile is NUL
31b0: 4c 2c 20 61 6c 6c 20 66 69 6c 65 73 0a 20 20 2a  L, all files.  *
31c0: 2a 20 73 68 6f 75 6c 64 20 62 65 20 63 6f 6d 6d  * should be comm
31d0: 69 74 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 65  itted..  */.  se
31e0: 6c 65 63 74 5f 63 6f 6d 6d 69 74 5f 66 69 6c 65  lect_commit_file
31f0: 73 28 29 3b 0a 20 20 69 73 41 4d 65 72 67 65 20  s();.  isAMerge 
3200: 3d 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c  = db_exists("SEL
3210: 45 43 54 20 31 20 46 52 4f 4d 20 76 6d 65 72 67  ECT 1 FROM vmerg
3220: 65 22 29 3b 0a 20 20 69 66 28 20 67 2e 61 43 6f  e");.  if( g.aCo
3230: 6d 6d 69 74 46 69 6c 65 20 26 26 20 69 73 41 4d  mmitFile && isAM
3240: 65 72 67 65 20 29 7b 0a 20 20 20 20 66 6f 73 73  erge ){.    foss
3250: 69 6c 5f 66 61 74 61 6c 28 22 63 61 6e 6e 6f 74  il_fatal("cannot
3260: 20 64 6f 20 61 20 70 61 72 74 69 61 6c 20 63 6f   do a partial co
3270: 6d 6d 69 74 20 6f 66 20 61 20 6d 65 72 67 65 22  mmit of a merge"
3280: 29 3b 0a 20 20 7d 0a 0a 20 20 75 73 65 72 5f 73  );.  }..  user_s
3290: 65 6c 65 63 74 28 29 3b 0a 20 20 2f 2a 0a 20 20  elect();.  /*.  
32a0: 2a 2a 20 43 68 65 63 6b 20 74 68 61 74 20 74 68  ** Check that th
32b0: 65 20 75 73 65 72 20 65 78 69 73 74 73 2e 0a 20  e user exists.. 
32c0: 20 2a 2f 0a 20 20 69 66 28 20 21 64 62 5f 65 78   */.  if( !db_ex
32d0: 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46  ists("SELECT 1 F
32e0: 52 4f 4d 20 75 73 65 72 20 57 48 45 52 45 20 6c  ROM user WHERE l
32f0: 6f 67 69 6e 3d 25 51 22 2c 20 67 2e 7a 4c 6f 67  ogin=%Q", g.zLog
3300: 69 6e 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69  in) ){.    fossi
3310: 6c 5f 66 61 74 61 6c 28 22 6e 6f 20 73 75 63 68  l_fatal("no such
3320: 20 75 73 65 72 3a 20 25 73 22 2c 20 67 2e 7a 4c   user: %s", g.zL
3330: 6f 67 69 6e 29 3b 0a 20 20 7d 0a 20 20 0a 20 20  ogin);.  }.  .  
3340: 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63  db_begin_transac
3350: 74 69 6f 6e 28 29 3b 0a 20 20 64 62 5f 72 65 63  tion();.  db_rec
3360: 6f 72 64 5f 72 65 70 6f 73 69 74 6f 72 79 5f 66  ord_repository_f
3370: 69 6c 65 6e 61 6d 65 28 30 29 3b 0a 20 20 72 63  ilename(0);.  rc
3380: 20 3d 20 75 6e 73 61 76 65 64 5f 63 68 61 6e 67   = unsaved_chang
3390: 65 73 28 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  es();.  if( rc==
33a0: 30 20 26 26 20 21 69 73 41 4d 65 72 67 65 20 26  0 && !isAMerge &
33b0: 26 20 21 66 6f 72 63 65 46 6c 61 67 20 29 7b 0a  & !forceFlag ){.
33c0: 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63      fossil_panic
33d0: 28 22 6e 6f 74 68 69 6e 67 20 68 61 73 20 63 68  ("nothing has ch
33e0: 61 6e 67 65 64 22 29 3b 0a 20 20 7d 0a 0a 20 20  anged");.  }..  
33f0: 2f 2a 20 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  /* If one or mor
3400: 65 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 72  e files that wer
3410: 65 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 63  e named on the c
3420: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61 76 65  ommand line have
3430: 20 6e 6f 74 0a 20 20 2a 2a 20 62 65 65 6e 20 6d   not.  ** been m
3440: 6f 64 69 66 69 65 64 2c 20 62 61 69 6c 20 6f 75  odified, bail ou
3450: 74 20 6e 6f 77 2e 0a 20 20 2a 2f 0a 20 20 69 66  t now..  */.  if
3460: 28 20 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 20  ( g.aCommitFile 
3470: 29 7b 0a 20 20 20 20 42 6c 6f 62 20 75 6e 6d 6f  ){.    Blob unmo
3480: 64 69 66 69 65 64 3b 0a 20 20 20 20 6d 65 6d 73  dified;.    mems
3490: 65 74 28 26 75 6e 6d 6f 64 69 66 69 65 64 2c 20  et(&unmodified, 
34a0: 30 2c 20 73 69 7a 65 6f 66 28 42 6c 6f 62 29 29  0, sizeof(Blob))
34b0: 3b 0a 20 20 20 20 62 6c 6f 62 5f 69 6e 69 74 28  ;.    blob_init(
34c0: 26 75 6e 6d 6f 64 69 66 69 65 64 2c 20 30 2c 20  &unmodified, 0, 
34d0: 30 29 3b 0a 20 20 20 20 64 62 5f 62 6c 6f 62 28  0);.    db_blob(
34e0: 26 75 6e 6d 6f 64 69 66 69 65 64 2c 20 0a 20 20  &unmodified, .  
34f0: 20 20 20 20 22 53 45 4c 45 43 54 20 70 61 74 68      "SELECT path
3500: 6e 61 6d 65 20 46 52 4f 4d 20 76 66 69 6c 65 20  name FROM vfile 
3510: 57 48 45 52 45 20 63 68 6e 67 65 64 20 3d 20 30  WHERE chnged = 0
3520: 20 41 4e 44 20 66 69 6c 65 5f 69 73 5f 73 65 6c   AND file_is_sel
3530: 65 63 74 65 64 28 69 64 29 22 0a 20 20 20 20 29  ected(id)".    )
3540: 3b 0a 20 20 20 20 69 66 28 20 73 74 72 6c 65 6e  ;.    if( strlen
3550: 28 62 6c 6f 62 5f 73 74 72 28 26 75 6e 6d 6f 64  (blob_str(&unmod
3560: 69 66 69 65 64 29 29 20 29 7b 0a 20 20 20 20 20  ified)) ){.     
3570: 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 66   fossil_panic("f
3580: 69 6c 65 20 25 73 20 68 61 73 20 6e 6f 74 20 63  ile %s has not c
3590: 68 61 6e 67 65 64 22 2c 20 62 6c 6f 62 5f 73 74  hanged", blob_st
35a0: 72 28 26 75 6e 6d 6f 64 69 66 69 65 64 29 29 3b  r(&unmodified));
35b0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 76 69  .    }.  }..  vi
35c0: 64 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74 28  d = db_lget_int(
35d0: 22 63 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b 0a  "checkout", 0);.
35e0: 20 20 69 66 28 20 69 73 5f 6e 6f 74 5f 61 5f 6c    if( is_not_a_l
35f0: 65 61 66 28 76 69 64 29 20 29 7b 0a 20 20 20 20  eaf(vid) ){.    
3600: 77 6f 75 6c 64 46 6f 72 6b 3d 31 3b 0a 20 20 20  wouldFork=1;.   
3610: 20 69 66 28 20 66 6f 72 63 65 46 6c 61 67 3d 3d   if( forceFlag==
3620: 30 20 29 7b 0a 20 20 20 20 20 20 66 6f 73 73 69  0 ){.      fossi
3630: 6c 5f 66 61 74 61 6c 28 22 77 6f 75 6c 64 20 66  l_fatal("would f
3640: 6f 72 6b 2e 20 20 5c 22 75 70 64 61 74 65 5c 22  ork.  \"update\"
3650: 20 66 69 72 73 74 20 6f 72 20 75 73 65 20 2d 66   first or use -f
3660: 20 6f 72 20 2d 2d 66 6f 72 63 65 2e 22 29 3b 0a   or --force.");.
3670: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 76 66 69 6c      }.  }.  vfil
3680: 65 5f 61 67 67 72 65 67 61 74 65 5f 63 68 65 63  e_aggregate_chec
3690: 6b 73 75 6d 5f 64 69 73 6b 28 76 69 64 2c 20 26  ksum_disk(vid, &
36a0: 63 6b 73 75 6d 31 29 3b 0a 20 20 69 66 28 20 7a  cksum1);.  if( z
36b0: 43 6f 6d 6d 65 6e 74 20 29 7b 0a 20 20 20 20 62  Comment ){.    b
36c0: 6c 6f 62 5f 7a 65 72 6f 28 26 63 6f 6d 6d 65 6e  lob_zero(&commen
36d0: 74 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70  t);.    blob_app
36e0: 65 6e 64 28 26 63 6f 6d 6d 65 6e 74 2c 20 7a 43  end(&comment, zC
36f0: 6f 6d 6d 65 6e 74 2c 20 2d 31 29 3b 0a 20 20 7d  omment, -1);.  }
3700: 65 6c 73 65 7b 0a 20 20 20 20 70 72 65 70 61 72  else{.    prepar
3710: 65 5f 63 6f 6d 6d 69 74 5f 63 6f 6d 6d 65 6e 74  e_commit_comment
3720: 28 26 63 6f 6d 6d 65 6e 74 29 3b 0a 20 20 20 20  (&comment);.    
3730: 69 66 28 20 62 6c 6f 62 5f 73 69 7a 65 28 26 63  if( blob_size(&c
3740: 6f 6d 6d 65 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  omment)==0 ){.  
3750: 20 20 20 20 42 6c 6f 62 20 61 6e 73 3b 0a 20 20      Blob ans;.  
3760: 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 61      blob_zero(&a
3770: 6e 73 29 3b 0a 20 20 20 20 20 20 70 72 6f 6d 70  ns);.      promp
3780: 74 5f 75 73 65 72 28 22 65 6d 70 74 79 20 63 68  t_user("empty ch
3790: 65 63 6b 2d 69 6e 20 63 6f 6d 6d 65 6e 74 2e 20  eck-in comment. 
37a0: 20 63 6f 6e 74 69 6e 75 65 20 5b 79 2f 4e 5d 3f   continue [y/N]?
37b0: 20 22 2c 20 26 61 6e 73 29 3b 0a 20 20 20 20 20   ", &ans);.     
37c0: 20 69 66 28 20 62 6c 6f 62 5f 73 74 72 28 26 61   if( blob_str(&a
37d0: 6e 73 29 5b 30 5d 21 3d 27 79 27 20 29 7b 0a 20  ns)[0]!='y' ){. 
37e0: 20 20 20 20 20 20 20 64 62 5f 65 6e 64 5f 74 72         db_end_tr
37f0: 61 6e 73 61 63 74 69 6f 6e 28 31 29 3b 0a 20 20  ansaction(1);.  
3800: 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20        exit(1);. 
3810: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
3820: 0a 0a 20 20 2f 2a 20 53 74 65 70 20 31 3a 20 49  ..  /* Step 1: I
3830: 6e 73 65 72 74 20 72 65 63 6f 72 64 73 20 66 6f  nsert records fo
3840: 72 20 61 6c 6c 20 6d 6f 64 69 66 69 65 64 20 66  r all modified f
3850: 69 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 62 6c  iles into the bl
3860: 6f 62 20 0a 20 20 2a 2a 20 74 61 62 6c 65 2e 20  ob .  ** table. 
3870: 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 72  If there were ar
3880: 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74  guments passed t
3890: 6f 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 2c 20  o this command, 
38a0: 6f 6e 6c 79 0a 20 20 2a 2a 20 74 68 65 20 69 64  only.  ** the id
38b0: 65 6e 74 69 66 69 65 64 20 66 69 6c 73 20 61 72  entified fils ar
38c0: 65 20 69 6e 73 65 72 74 65 64 20 28 69 66 20 74  e inserted (if t
38d0: 68 65 79 20 68 61 76 65 20 62 65 65 6e 20 6d 6f  hey have been mo
38e0: 64 69 66 69 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  dified)..  */.  
38f0: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20  db_prepare(&q,. 
3900: 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c 20 25     "SELECT id, %
3910: 51 20 7c 7c 20 70 61 74 68 6e 61 6d 65 2c 20 6d  Q || pathname, m
3920: 72 69 64 20 46 52 4f 4d 20 76 66 69 6c 65 20 22  rid FROM vfile "
3930: 0a 20 20 20 20 22 57 48 45 52 45 20 63 68 6e 67  .    "WHERE chng
3940: 65 64 3d 3d 31 20 41 4e 44 20 4e 4f 54 20 64 65  ed==1 AND NOT de
3950: 6c 65 74 65 64 20 41 4e 44 20 66 69 6c 65 5f 69  leted AND file_i
3960: 73 5f 73 65 6c 65 63 74 65 64 28 69 64 29 22 0a  s_selected(id)".
3970: 20 20 20 20 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f      , g.zLocalRo
3980: 6f 74 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28  ot.  );.  while(
3990: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51   db_step(&q)==SQ
39a0: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
39b0: 69 6e 74 20 69 64 2c 20 72 69 64 3b 0a 20 20 20  int id, rid;.   
39c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75   const char *zFu
39d0: 6c 6c 6e 61 6d 65 3b 0a 20 20 20 20 42 6c 6f 62  llname;.    Blob
39e0: 20 63 6f 6e 74 65 6e 74 3b 0a 0a 20 20 20 20 69   content;..    i
39f0: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e  d = db_column_in
3a00: 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 7a 46  t(&q, 0);.    zF
3a10: 75 6c 6c 6e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c  ullname = db_col
3a20: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b  umn_text(&q, 1);
3a30: 0a 20 20 20 20 72 69 64 20 3d 20 64 62 5f 63 6f  .    rid = db_co
3a40: 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 32 29 3b  lumn_int(&q, 2);
3a50: 0a 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28  ..    blob_zero(
3a60: 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 62  &content);.    b
3a70: 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d 5f 66 69  lob_read_from_fi
3a80: 6c 65 28 26 63 6f 6e 74 65 6e 74 2c 20 7a 46 75  le(&content, zFu
3a90: 6c 6c 6e 61 6d 65 29 3b 0a 20 20 20 20 6e 72 69  llname);.    nri
3aa0: 64 20 3d 20 63 6f 6e 74 65 6e 74 5f 70 75 74 28  d = content_put(
3ab0: 26 63 6f 6e 74 65 6e 74 2c 20 30 2c 20 30 29 3b  &content, 0, 0);
3ac0: 0a 20 20 20 20 69 66 28 20 72 69 64 3e 30 20 29  .    if( rid>0 )
3ad0: 7b 0a 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 5f  {.      content_
3ae0: 64 65 6c 74 69 66 79 28 72 69 64 2c 20 6e 72 69  deltify(rid, nri
3af0: 64 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  d, 0);.    }.   
3b00: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22   db_multi_exec("
3b10: 55 50 44 41 54 45 20 76 66 69 6c 65 20 53 45 54  UPDATE vfile SET
3b20: 20 6d 72 69 64 3d 25 64 2c 20 72 69 64 3d 25 64   mrid=%d, rid=%d
3b30: 20 57 48 45 52 45 20 69 64 3d 25 64 22 2c 20 6e   WHERE id=%d", n
3b40: 72 69 64 2c 6e 72 69 64 2c 69 64 29 3b 0a 20 20  rid,nrid,id);.  
3b50: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28    db_multi_exec(
3b60: 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52  "INSERT OR IGNOR
3b70: 45 20 49 4e 54 4f 20 75 6e 73 65 6e 74 20 56 41  E INTO unsent VA
3b80: 4c 55 45 53 28 25 64 29 22 2c 20 6e 72 69 64 29  LUES(%d)", nrid)
3b90: 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c  ;.  }.  db_final
3ba0: 69 7a 65 28 26 71 29 3b 0a 0a 20 20 2f 2a 20 43  ize(&q);..  /* C
3bb0: 72 65 61 74 65 20 74 68 65 20 6d 61 6e 69 66 65  reate the manife
3bc0: 73 74 20 2a 2f 0a 20 20 62 6c 6f 62 5f 7a 65 72  st */.  blob_zer
3bd0: 6f 28 26 6d 61 6e 69 66 65 73 74 29 3b 0a 20 20  o(&manifest);.  
3be0: 69 66 28 20 62 6c 6f 62 5f 73 69 7a 65 28 26 63  if( blob_size(&c
3bf0: 6f 6d 6d 65 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  omment)==0 ){.  
3c00: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 63    blob_append(&c
3c10: 6f 6d 6d 65 6e 74 2c 20 22 28 6e 6f 20 63 6f 6d  omment, "(no com
3c20: 6d 65 6e 74 29 22 2c 20 2d 31 29 3b 0a 20 20 7d  ment)", -1);.  }
3c30: 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28  .  blob_appendf(
3c40: 26 6d 61 6e 69 66 65 73 74 2c 20 22 43 20 25 46  &manifest, "C %F
3c50: 5c 6e 22 2c 20 62 6c 6f 62 5f 73 74 72 28 26 63  \n", blob_str(&c
3c60: 6f 6d 6d 65 6e 74 29 29 3b 0a 20 20 7a 44 61 74  omment));.  zDat
3c70: 65 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22  e = db_text(0, "
3c80: 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
3c90: 27 6e 6f 77 27 29 22 29 3b 0a 20 20 7a 44 61 74  'now')");.  zDat
3ca0: 65 5b 31 30 5d 20 3d 20 27 54 27 3b 0a 20 20 62  e[10] = 'T';.  b
3cb0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e  lob_appendf(&man
3cc0: 69 66 65 73 74 2c 20 22 44 20 25 73 5c 6e 22 2c  ifest, "D %s\n",
3cd0: 20 7a 44 61 74 65 29 3b 0a 20 20 64 62 5f 70 72   zDate);.  db_pr
3ce0: 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 22 53  epare(&q,.    "S
3cf0: 45 4c 45 43 54 20 70 61 74 68 6e 61 6d 65 2c 20  ELECT pathname, 
3d00: 75 75 69 64 2c 20 6f 72 69 67 6e 61 6d 65 22 0a  uuid, origname".
3d10: 20 20 20 20 22 20 20 46 52 4f 4d 20 76 66 69 6c      "  FROM vfil
3d20: 65 20 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e 20 76  e JOIN blob ON v
3d30: 66 69 6c 65 2e 6d 72 69 64 3d 62 6c 6f 62 2e 72  file.mrid=blob.r
3d40: 69 64 22 0a 20 20 20 20 22 20 57 48 45 52 45 20  id".    " WHERE 
3d50: 4e 4f 54 20 64 65 6c 65 74 65 64 20 41 4e 44 20  NOT deleted AND 
3d60: 76 66 69 6c 65 2e 76 69 64 3d 25 64 22 0a 20 20  vfile.vid=%d".  
3d70: 20 20 22 20 4f 52 44 45 52 20 42 59 20 31 22 2c    " ORDER BY 1",
3d80: 20 76 69 64 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65   vid);.  blob_ze
3d90: 72 6f 28 26 66 69 6c 65 6e 61 6d 65 29 3b 0a 20  ro(&filename);. 
3da0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 66   blob_appendf(&f
3db0: 69 6c 65 6e 61 6d 65 2c 20 22 25 73 2f 22 2c 20  ilename, "%s/", 
3dc0: 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20  g.zLocalRoot);. 
3dd0: 20 6e 42 61 73 65 6e 61 6d 65 20 3d 20 62 6c 6f   nBasename = blo
3de0: 62 5f 73 69 7a 65 28 26 66 69 6c 65 6e 61 6d 65  b_size(&filename
3df0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73  );.  while( db_s
3e00: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f  tep(&q)==SQLITE_
3e10: 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ROW ){.    const
3e20: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64   char *zName = d
3e30: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71  b_column_text(&q
3e40: 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20  , 0);.    const 
3e50: 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62  char *zUuid = db
3e60: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c  _column_text(&q,
3e70: 20 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63   1);.    const c
3e80: 68 61 72 20 2a 7a 4f 72 69 67 20 3d 20 64 62 5f  har *zOrig = db_
3e90: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20  column_text(&q, 
3ea0: 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  2);.    const ch
3eb0: 61 72 20 2a 7a 50 65 72 6d 3b 0a 20 20 20 20 62  ar *zPerm;.    b
3ec0: 6c 6f 62 5f 61 70 70 65 6e 64 28 26 66 69 6c 65  lob_append(&file
3ed0: 6e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 2d 31 29  name, zName, -1)
3ee0: 3b 0a 20 20 20 20 69 66 28 20 66 69 6c 65 5f 69  ;.    if( file_i
3ef0: 73 65 78 65 28 62 6c 6f 62 5f 73 74 72 28 26 66  sexe(blob_str(&f
3f00: 69 6c 65 6e 61 6d 65 29 29 20 29 7b 0a 20 20 20  ilename)) ){.   
3f10: 20 20 20 7a 50 65 72 6d 20 3d 20 22 20 78 22 3b     zPerm = " x";
3f20: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3f30: 20 20 7a 50 65 72 6d 20 3d 20 22 22 3b 0a 20 20    zPerm = "";.  
3f40: 20 20 7d 0a 20 20 20 20 62 6c 6f 62 5f 72 65 73    }.    blob_res
3f50: 69 7a 65 28 26 66 69 6c 65 6e 61 6d 65 2c 20 6e  ize(&filename, n
3f60: 42 61 73 65 6e 61 6d 65 29 3b 0a 20 20 20 20 69  Basename);.    i
3f70: 66 28 20 7a 4f 72 69 67 3d 3d 30 20 7c 7c 20 73  f( zOrig==0 || s
3f80: 74 72 63 6d 70 28 7a 4f 72 69 67 2c 7a 4e 61 6d  trcmp(zOrig,zNam
3f90: 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62  e)==0 ){.      b
3fa0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e  lob_appendf(&man
3fb0: 69 66 65 73 74 2c 20 22 46 20 25 46 20 25 73 25  ifest, "F %F %s%
3fc0: 73 5c 6e 22 2c 20 7a 4e 61 6d 65 2c 20 7a 55 75  s\n", zName, zUu
3fd0: 69 64 2c 20 7a 50 65 72 6d 29 3b 0a 20 20 20 20  id, zPerm);.    
3fe0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
3ff0: 20 7a 50 65 72 6d 5b 30 5d 3d 3d 30 20 29 7b 20   zPerm[0]==0 ){ 
4000: 7a 50 65 72 6d 20 3d 20 22 20 77 22 3b 20 7d 0a  zPerm = " w"; }.
4010: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e        blob_appen
4020: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 46  df(&manifest, "F
4030: 20 25 46 20 25 73 25 73 20 25 46 5c 6e 22 2c 20   %F %s%s %F\n", 
4040: 7a 4e 61 6d 65 2c 20 7a 55 75 69 64 2c 20 7a 50  zName, zUuid, zP
4050: 65 72 6d 2c 20 7a 4f 72 69 67 29 3b 0a 20 20 20  erm, zOrig);.   
4060: 20 7d 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 72 65   }.  }.  blob_re
4070: 73 65 74 28 26 66 69 6c 65 6e 61 6d 65 29 3b 0a  set(&filename);.
4080: 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71    db_finalize(&q
4090: 29 3b 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 5f  );.  zUuid = db_
40a0: 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20  text(0, "SELECT 
40b0: 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57  uuid FROM blob W
40c0: 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 76 69  HERE rid=%d", vi
40d0: 64 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e  d);.  blob_appen
40e0: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 50  df(&manifest, "P
40f0: 20 25 73 22 2c 20 7a 55 75 69 64 29 3b 0a 0a 20   %s", zUuid);.. 
4100: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 32 2c   db_prepare(&q2,
4110: 20 22 53 45 4c 45 43 54 20 6d 65 72 67 65 20 46   "SELECT merge F
4120: 52 4f 4d 20 76 6d 65 72 67 65 20 57 48 45 52 45  ROM vmerge WHERE
4130: 20 69 64 3d 3a 69 64 22 29 3b 0a 20 20 64 62 5f   id=:id");.  db_
4140: 62 69 6e 64 5f 69 6e 74 28 26 71 32 2c 20 22 3a  bind_int(&q2, ":
4150: 69 64 22 2c 20 30 29 3b 0a 20 20 77 68 69 6c 65  id", 0);.  while
4160: 28 20 64 62 5f 73 74 65 70 28 26 71 32 29 3d 3d  ( db_step(&q2)==
4170: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20  SQLITE_ROW ){.  
4180: 20 20 69 6e 74 20 6d 69 64 20 3d 20 64 62 5f 63    int mid = db_c
4190: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 32 2c 20 30  olumn_int(&q2, 0
41a0: 29 3b 0a 20 20 20 20 7a 55 75 69 64 20 3d 20 64  );.    zUuid = d
41b0: 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43  b_text(0, "SELEC
41c0: 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62  T uuid FROM blob
41d0: 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20   WHERE rid=%d", 
41e0: 6d 69 64 29 3b 0a 20 20 20 20 69 66 28 20 7a 55  mid);.    if( zU
41f0: 75 69 64 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f  uid ){.      blo
4200: 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66  b_appendf(&manif
4210: 65 73 74 2c 20 22 20 25 73 22 2c 20 7a 55 75 69  est, " %s", zUui
4220: 64 29 3b 0a 20 20 20 20 20 20 66 72 65 65 28 7a  d);.      free(z
4230: 55 75 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  Uuid);.    }.  }
4240: 0a 20 20 64 62 5f 72 65 73 65 74 28 26 71 32 29  .  db_reset(&q2)
4250: 3b 0a 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64  ;..  blob_append
4260: 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 5c 6e  f(&manifest, "\n
4270: 22 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e  ");.  blob_appen
4280: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 52  df(&manifest, "R
4290: 20 25 62 5c 6e 22 2c 20 26 63 6b 73 75 6d 31 29   %b\n", &cksum1)
42a0: 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66  ;.  blob_appendf
42b0: 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 55 20 25  (&manifest, "U %
42c0: 46 5c 6e 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b  F\n", g.zLogin);
42d0: 0a 20 20 6d 64 35 73 75 6d 5f 62 6c 6f 62 28 26  .  md5sum_blob(&
42e0: 6d 61 6e 69 66 65 73 74 2c 20 26 6d 63 6b 73 75  manifest, &mcksu
42f0: 6d 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e  m);.  blob_appen
4300: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 5a  df(&manifest, "Z
4310: 20 25 62 5c 6e 22 2c 20 26 6d 63 6b 73 75 6d 29   %b\n", &mcksum)
4320: 3b 0a 20 20 7a 4d 61 6e 69 66 65 73 74 46 69 6c  ;.  zManifestFil
4330: 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 6d  e = mprintf("%sm
4340: 61 6e 69 66 65 73 74 22 2c 20 67 2e 7a 4c 6f 63  anifest", g.zLoc
4350: 61 6c 52 6f 6f 74 29 3b 0a 20 20 69 66 28 20 21  alRoot);.  if( !
4360: 6e 6f 53 69 67 6e 20 26 26 20 63 6c 65 61 72 73  noSign && clears
4370: 69 67 6e 28 26 6d 61 6e 69 66 65 73 74 2c 20 26  ign(&manifest, &
4380: 6d 61 6e 69 66 65 73 74 29 20 29 7b 0a 20 20 20  manifest) ){.   
4390: 20 42 6c 6f 62 20 61 6e 73 3b 0a 20 20 20 20 62   Blob ans;.    b
43a0: 6c 6f 62 5f 7a 65 72 6f 28 26 61 6e 73 29 3b 0a  lob_zero(&ans);.
43b0: 20 20 20 20 70 72 6f 6d 70 74 5f 75 73 65 72 28      prompt_user(
43c0: 22 75 6e 61 62 6c 65 20 74 6f 20 73 69 67 6e 20  "unable to sign 
43d0: 6d 61 6e 69 66 65 73 74 2e 20 20 63 6f 6e 74 69  manifest.  conti
43e0: 6e 75 65 20 5b 79 2f 4e 5d 3f 20 22 2c 20 26 61  nue [y/N]? ", &a
43f0: 6e 73 29 3b 0a 20 20 20 20 69 66 28 20 62 6c 6f  ns);.    if( blo
4400: 62 5f 73 74 72 28 26 61 6e 73 29 5b 30 5d 21 3d  b_str(&ans)[0]!=
4410: 27 79 27 20 29 7b 0a 20 20 20 20 20 20 64 62 5f  'y' ){.      db_
4420: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28  end_transaction(
4430: 31 29 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31  1);.      exit(1
4440: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
4450: 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69 6c  lob_write_to_fil
4460: 65 28 26 6d 61 6e 69 66 65 73 74 2c 20 7a 4d 61  e(&manifest, zMa
4470: 6e 69 66 65 73 74 46 69 6c 65 29 3b 0a 20 20 62  nifestFile);.  b
4480: 6c 6f 62 5f 72 65 73 65 74 28 26 6d 61 6e 69 66  lob_reset(&manif
4490: 65 73 74 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 61  est);.  blob_rea
44a0: 64 5f 66 72 6f 6d 5f 66 69 6c 65 28 26 6d 61 6e  d_from_file(&man
44b0: 69 66 65 73 74 2c 20 7a 4d 61 6e 69 66 65 73 74  ifest, zManifest
44c0: 46 69 6c 65 29 3b 0a 20 20 66 72 65 65 28 7a 4d  File);.  free(zM
44d0: 61 6e 69 66 65 73 74 46 69 6c 65 29 3b 0a 20 20  anifestFile);.  
44e0: 6e 76 69 64 20 3d 20 63 6f 6e 74 65 6e 74 5f 70  nvid = content_p
44f0: 75 74 28 26 6d 61 6e 69 66 65 73 74 2c 20 30 2c  ut(&manifest, 0,
4500: 20 30 29 3b 0a 20 20 69 66 28 20 6e 76 69 64 3d   0);.  if( nvid=
4510: 3d 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c  =0 ){.    fossil
4520: 5f 70 61 6e 69 63 28 22 74 72 6f 75 62 6c 65 20  _panic("trouble 
4530: 63 6f 6d 6d 69 74 74 69 6e 67 20 6d 61 6e 69 66  committing manif
4540: 65 73 74 3a 20 25 73 22 2c 20 67 2e 7a 45 72 72  est: %s", g.zErr
4550: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 6d  Msg);.  }.  db_m
4560: 75 6c 74 69 5f 65 78 65 63 28 22 49 4e 53 45 52  ulti_exec("INSER
4570: 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f  T OR IGNORE INTO
4580: 20 75 6e 73 65 6e 74 20 56 41 4c 55 45 53 28 25   unsent VALUES(%
4590: 64 29 22 2c 20 6e 76 69 64 29 3b 0a 20 20 6d 61  d)", nvid);.  ma
45a0: 6e 69 66 65 73 74 5f 63 72 6f 73 73 6c 69 6e 6b  nifest_crosslink
45b0: 28 6e 76 69 64 2c 20 26 6d 61 6e 69 66 65 73 74  (nvid, &manifest
45c0: 29 3b 0a 20 20 63 6f 6e 74 65 6e 74 5f 64 65 6c  );.  content_del
45d0: 74 69 66 79 28 76 69 64 2c 20 6e 76 69 64 2c 20  tify(vid, nvid, 
45e0: 30 29 3b 0a 20 20 7a 55 75 69 64 20 3d 20 64 62  0);.  zUuid = db
45f0: 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54  _text(0, "SELECT
4600: 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20   uuid FROM blob 
4610: 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 6e  WHERE rid=%d", n
4620: 76 69 64 29 3b 0a 20 20 70 72 69 6e 74 66 28 22  vid);.  printf("
4630: 4e 65 77 5f 56 65 72 73 69 6f 6e 3a 20 25 73 5c  New_Version: %s\
4640: 6e 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 7a 4d  n", zUuid);.  zM
4650: 61 6e 69 66 65 73 74 46 69 6c 65 20 3d 20 6d 70  anifestFile = mp
4660: 72 69 6e 74 66 28 22 25 73 6d 61 6e 69 66 65 73  rintf("%smanifes
4670: 74 2e 75 75 69 64 22 2c 20 67 2e 7a 4c 6f 63 61  t.uuid", g.zLoca
4680: 6c 52 6f 6f 74 29 3b 0a 20 20 62 6c 6f 62 5f 7a  lRoot);.  blob_z
4690: 65 72 6f 28 26 6d 75 75 69 64 29 3b 0a 20 20 62  ero(&muuid);.  b
46a0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 75 75  lob_appendf(&muu
46b0: 69 64 2c 20 22 25 73 5c 6e 22 2c 20 7a 55 75 69  id, "%s\n", zUui
46c0: 64 29 3b 0a 20 20 62 6c 6f 62 5f 77 72 69 74 65  d);.  blob_write
46d0: 5f 74 6f 5f 66 69 6c 65 28 26 6d 75 75 69 64 2c  _to_file(&muuid,
46e0: 20 7a 4d 61 6e 69 66 65 73 74 46 69 6c 65 29 3b   zManifestFile);
46f0: 0a 20 20 66 72 65 65 28 7a 4d 61 6e 69 66 65 73  .  free(zManifes
4700: 74 46 69 6c 65 29 3b 0a 20 20 62 6c 6f 62 5f 72  tFile);.  blob_r
4710: 65 73 65 74 28 26 6d 75 75 69 64 29 3b 0a 0a 20  eset(&muuid);.. 
4720: 20 0a 20 20 2f 2a 20 55 70 64 61 74 65 20 74 68   .  /* Update th
4730: 65 20 76 66 69 6c 65 20 61 6e 64 20 76 6d 65 72  e vfile and vmer
4740: 67 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 64  ge tables */.  d
4750: 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a 20 20  b_multi_exec(.  
4760: 20 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 76    "DELETE FROM v
4770: 66 69 6c 65 20 57 48 45 52 45 20 28 76 69 64 21  file WHERE (vid!
4780: 3d 25 64 20 4f 52 20 64 65 6c 65 74 65 64 29 20  =%d OR deleted) 
4790: 41 4e 44 20 66 69 6c 65 5f 69 73 5f 73 65 6c 65  AND file_is_sele
47a0: 63 74 65 64 28 69 64 29 3b 22 0a 20 20 20 20 22  cted(id);".    "
47b0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 76 6d 65 72  DELETE FROM vmer
47c0: 67 65 20 57 48 45 52 45 20 66 69 6c 65 5f 69 73  ge WHERE file_is
47d0: 5f 73 65 6c 65 63 74 65 64 28 69 64 29 20 4f 52  _selected(id) OR
47e0: 20 69 64 3d 30 3b 22 0a 20 20 20 20 22 55 50 44   id=0;".    "UPD
47f0: 41 54 45 20 76 66 69 6c 65 20 53 45 54 20 76 69  ATE vfile SET vi
4800: 64 3d 25 64 3b 22 0a 20 20 20 20 22 55 50 44 41  d=%d;".    "UPDA
4810: 54 45 20 76 66 69 6c 65 20 53 45 54 20 72 69 64  TE vfile SET rid
4820: 3d 6d 72 69 64 2c 20 63 68 6e 67 65 64 3d 30 2c  =mrid, chnged=0,
4830: 20 64 65 6c 65 74 65 64 3d 30 2c 20 6f 72 69 67   deleted=0, orig
4840: 6e 61 6d 65 3d 4e 55 4c 4c 22 0a 20 20 20 20 22  name=NULL".    "
4850: 20 57 48 45 52 45 20 66 69 6c 65 5f 69 73 5f 73   WHERE file_is_s
4860: 65 6c 65 63 74 65 64 28 69 64 29 3b 22 0a 20 20  elected(id);".  
4870: 20 20 2c 20 76 69 64 2c 20 6e 76 69 64 0a 20 20    , vid, nvid.  
4880: 29 3b 0a 20 20 64 62 5f 6c 73 65 74 5f 69 6e 74  );.  db_lset_int
4890: 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 6e 76 69  ("checkout", nvi
48a0: 64 29 3b 0a 0a 20 20 2f 2a 20 56 65 72 69 66 79  d);..  /* Verify
48b0: 20 74 68 61 74 20 74 68 65 20 72 65 70 6f 73 69   that the reposi
48c0: 74 6f 72 79 20 63 68 65 63 6b 73 75 6d 20 6d 61  tory checksum ma
48d0: 74 63 68 65 73 20 74 68 65 20 65 78 70 65 63 74  tches the expect
48e0: 65 64 20 63 68 65 63 6b 73 75 6d 0a 20 20 2a 2a  ed checksum.  **
48f0: 20 63 61 6c 63 75 6c 61 74 65 64 20 62 65 66 6f   calculated befo
4900: 72 65 20 74 68 65 20 63 68 65 63 6b 69 6e 20 73  re the checkin s
4910: 74 61 72 74 65 64 20 28 61 6e 64 20 73 74 6f 72  tarted (and stor
4920: 65 64 20 61 73 20 74 68 65 20 52 20 72 65 63 6f  ed as the R reco
4930: 72 64 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 6d  rd.  ** of the m
4940: 61 6e 69 66 65 73 74 20 66 69 6c 65 29 2e 0a 20  anifest file).. 
4950: 20 2a 2f 0a 20 20 76 66 69 6c 65 5f 61 67 67 72   */.  vfile_aggr
4960: 65 67 61 74 65 5f 63 68 65 63 6b 73 75 6d 5f 72  egate_checksum_r
4970: 65 70 6f 73 69 74 6f 72 79 28 6e 76 69 64 2c 20  epository(nvid, 
4980: 26 63 6b 73 75 6d 32 29 3b 0a 20 20 69 66 28 20  &cksum2);.  if( 
4990: 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 28 26 63 6b  blob_compare(&ck
49a0: 73 75 6d 31 2c 20 26 63 6b 73 75 6d 32 29 20 29  sum1, &cksum2) )
49b0: 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e  {.    fossil_pan
49c0: 69 63 28 22 74 72 65 65 20 63 68 65 63 6b 73 75  ic("tree checksu
49d0: 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  m does not match
49e0: 20 72 65 70 6f 73 69 74 6f 72 79 20 61 66 74 65   repository afte
49f0: 72 20 63 6f 6d 6d 69 74 22 29 3b 0a 20 20 7d 0a  r commit");.  }.
4a00: 0a 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61  .  /* Verify tha
4a10: 74 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 63  t the manifest c
4a20: 68 65 63 6b 73 75 6d 20 6d 61 74 63 68 65 73 20  hecksum matches 
4a30: 74 68 65 20 65 78 70 65 63 74 65 64 20 63 68 65  the expected che
4a40: 63 6b 73 75 6d 20 2a 2f 0a 20 20 76 66 69 6c 65  cksum */.  vfile
4a50: 5f 61 67 67 72 65 67 61 74 65 5f 63 68 65 63 6b  _aggregate_check
4a60: 73 75 6d 5f 6d 61 6e 69 66 65 73 74 28 6e 76 69  sum_manifest(nvi
4a70: 64 2c 20 26 63 6b 73 75 6d 32 2c 20 26 63 6b 73  d, &cksum2, &cks
4a80: 75 6d 31 62 29 3b 0a 20 20 69 66 28 20 62 6c 6f  um1b);.  if( blo
4a90: 62 5f 63 6f 6d 70 61 72 65 28 26 63 6b 73 75 6d  b_compare(&cksum
4aa0: 31 2c 20 26 63 6b 73 75 6d 31 62 29 20 29 7b 0a  1, &cksum1b) ){.
4ab0: 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63      fossil_panic
4ac0: 28 22 6d 61 6e 69 66 65 73 74 20 63 68 65 63 6b  ("manifest check
4ad0: 73 75 6d 20 64 6f 65 73 20 6e 6f 74 20 61 67 72  sum does not agr
4ae0: 65 65 20 77 69 74 68 20 6d 61 6e 69 66 65 73 74  ee with manifest
4af0: 3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  : ".            
4b00: 20 20 20 20 20 22 25 62 20 76 65 72 73 75 73 20       "%b versus 
4b10: 25 62 22 2c 20 26 63 6b 73 75 6d 31 2c 20 26 63  %b", &cksum1, &c
4b20: 6b 73 75 6d 31 62 29 3b 0a 20 20 7d 0a 20 20 69  ksum1b);.  }.  i
4b30: 66 28 20 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 28  f( blob_compare(
4b40: 26 63 6b 73 75 6d 31 2c 20 26 63 6b 73 75 6d 32  &cksum1, &cksum2
4b50: 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f  ) ){.    fossil_
4b60: 70 61 6e 69 63 28 22 74 72 65 65 20 63 68 65 63  panic("tree chec
4b70: 6b 73 75 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61  ksum does not ma
4b80: 74 63 68 20 6d 61 6e 69 66 65 73 74 20 61 66 74  tch manifest aft
4b90: 65 72 20 63 6f 6d 6d 69 74 3a 20 22 0a 20 20 20  er commit: ".   
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25                "%
4bb0: 62 20 76 65 72 73 75 73 20 25 62 22 2c 20 26 63  b versus %b", &c
4bc0: 6b 73 75 6d 31 2c 20 26 63 6b 73 75 6d 32 29 3b  ksum1, &cksum2);
4bd0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 56 65 72 69 66  .  }..  /* Verif
4be0: 79 20 74 68 61 74 20 74 68 65 20 63 6f 6d 6d 69  y that the commi
4bf0: 74 20 64 69 64 20 6e 6f 74 20 6d 6f 64 69 66 79  t did not modify
4c00: 20 61 6e 79 20 64 69 73 6b 20 69 6d 61 67 65 73   any disk images
4c10: 2e 20 2a 2f 0a 20 20 76 66 69 6c 65 5f 61 67 67  . */.  vfile_agg
4c20: 72 65 67 61 74 65 5f 63 68 65 63 6b 73 75 6d 5f  regate_checksum_
4c30: 64 69 73 6b 28 6e 76 69 64 2c 20 26 63 6b 73 75  disk(nvid, &cksu
4c40: 6d 32 29 3b 0a 20 20 69 66 28 20 62 6c 6f 62 5f  m2);.  if( blob_
4c50: 63 6f 6d 70 61 72 65 28 26 63 6b 73 75 6d 31 2c  compare(&cksum1,
4c60: 20 26 63 6b 73 75 6d 32 29 20 29 7b 0a 20 20 20   &cksum2) ){.   
4c70: 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 74   fossil_panic("t
4c80: 72 65 65 20 63 68 65 63 6b 73 75 6d 73 20 62 65  ree checksums be
4c90: 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 63  fore and after c
4ca0: 6f 6d 6d 69 74 20 64 6f 20 6e 6f 74 20 6d 61 74  ommit do not mat
4cb0: 63 68 22 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  ch");.  }..  /* 
4cc0: 43 6c 65 61 72 20 74 68 65 20 75 6e 64 6f 2f 72  Clear the undo/r
4cd0: 65 64 6f 20 73 74 61 63 6b 20 2a 2f 0a 20 20 75  edo stack */.  u
4ce0: 6e 64 6f 5f 72 65 73 65 74 28 29 3b 0a 0a 20 20  ndo_reset();..  
4cf0: 2f 2a 20 43 6f 6d 6d 69 74 20 2a 2f 0a 20 20 64  /* Commit */.  d
4d00: 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f  b_end_transactio
4d10: 6e 28 30 29 3b 0a 0a 20 20 61 75 74 6f 73 79 6e  n(0);..  autosyn
4d20: 63 28 41 55 54 4f 53 59 4e 43 5f 50 55 53 48 29  c(AUTOSYNC_PUSH)
4d30: 3b 20 20 0a 20 20 69 66 28 20 64 62 5f 65 78 69  ;  .  if( db_exi
4d40: 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52  sts("SELECT 1 FR
4d50: 4f 4d 20 70 6c 69 6e 6b 20 57 48 45 52 45 20 70  OM plink WHERE p
4d60: 69 64 3d 25 64 20 41 4e 44 20 63 69 64 21 3d 25  id=%d AND cid!=%
4d70: 64 22 2c 20 76 69 64 2c 20 6e 76 69 64 29 20 29  d", vid, nvid) )
4d80: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2a 2a  {.    printf("**
4d90: 2a 2a 20 77 61 72 6e 69 6e 67 3a 20 61 20 66 6f  ** warning: a fo
4da0: 72 6b 20 68 61 73 20 6f 63 63 75 72 72 65 64 20  rk has occurred 
4db0: 2a 2a 2a 2a 2a 5c 6e 22 29 3b 0a 20 20 7d 0a 7d  *****\n");.  }.}
4dc0: 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a  ../*.** COMMAND:
4dd0: 20 74 65 73 74 2d 69 6d 70 6f 72 74 2d 6d 61 6e   test-import-man
4de0: 69 66 65 73 74 0a 2a 2a 0a 2a 2a 20 55 73 61 67  ifest.**.** Usag
4df0: 65 3a 20 25 66 6f 73 73 69 6c 20 74 65 73 74 2d  e: %fossil test-
4e00: 69 6d 70 6f 72 74 2d 6d 61 6e 69 66 65 73 74 20  import-manifest 
4e10: 44 41 54 45 20 43 4f 4d 4d 45 4e 54 20 3f 2d 70  DATE COMMENT ?-p
4e20: 20 50 41 52 45 4e 54 5f 52 45 43 4f 52 44 49 44   PARENT_RECORDID
4e30: 3f 2e 2e 2e 20 3f 2d 66 20 28 46 49 4c 45 5f 52  ?... ?-f (FILE_R
4e40: 45 43 4f 52 44 49 44 20 50 41 54 48 29 3f 2e 2e  ECORDID PATH)?..
4e50: 2e 0a 2a 2a 0a 2a 2a 20 43 72 65 61 74 65 20 61  ..**.** Create a
4e60: 20 6e 65 77 20 76 65 72 73 69 6f 6e 20 63 6f 6e   new version con
4e70: 74 61 69 6e 69 6e 67 20 74 68 65 20 73 70 65 63  taining the spec
4e80: 69 66 69 65 64 20 66 69 6c 65 0a 2a 2a 20 72 65  ified file.** re
4e90: 76 69 73 69 6f 6e 73 20 28 69 66 20 61 6e 79 29  visions (if any)
4ea0: 2c 20 61 6e 64 20 63 68 69 6c 64 20 6f 66 20 74  , and child of t
4eb0: 68 65 20 67 69 76 65 6e 20 50 41 52 45 4e 54 20  he given PARENT 
4ec0: 76 65 72 73 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64  version..*/.void
4ed0: 20 69 6d 70 6f 72 74 5f 6d 61 6e 69 66 65 73 74   import_manifest
4ee0: 5f 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20 63 6f  _cmd(void){.  co
4ef0: 6e 73 74 20 63 68 61 72 2a 20 7a 44 61 74 65 3b  nst char* zDate;
4f00: 20 20 20 20 2f 2a 20 61 72 67 75 6d 65 6e 74 20      /* argument 
4f10: 2d 20 74 69 6d 65 73 74 61 6d 70 2c 20 61 73 20  - timestamp, as 
4f20: 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 65 70  seconds since ep
4f30: 6f 63 68 20 28 69 6e 74 29 20 2a 2f 0a 20 20 63  och (int) */.  c
4f40: 6f 6e 73 74 20 63 68 61 72 2a 20 7a 43 6f 6d 6d  onst char* zComm
4f50: 65 6e 74 3b 20 2f 2a 20 61 72 67 75 6d 65 6e 74  ent; /* argument
4f60: 20 2d 20 6d 61 6e 69 66 65 73 74 20 63 6f 6d 6d   - manifest comm
4f70: 65 6e 74 20 2a 2f 0a 20 20 63 68 61 72 2a 20 7a  ent */.  char* z
4f80: 44 61 74 65 46 6d 74 3b 20 20 20 20 20 20 20 2f  DateFmt;       /
4f90: 2a 20 74 69 6d 65 73 74 61 6d 70 20 66 6f 72 6d  * timestamp form
4fa0: 61 74 74 65 64 20 66 6f 72 20 74 68 65 20 6d 61  atted for the ma
4fb0: 6e 69 66 65 73 74 20 2a 2f 0a 20 20 69 6e 74 2a  nifest */.  int*
4fc0: 20 7a 50 61 72 65 6e 74 73 3b 20 20 20 20 20 20   zParents;      
4fd0: 20 20 2f 2a 20 61 72 67 75 6d 65 6e 74 73 20 2d    /* arguments -
4fe0: 20 61 72 72 61 79 20 6f 66 20 70 61 72 65 6e 74   array of parent
4ff0: 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
5000: 20 69 6e 74 20 7a 50 61 72 65 6e 74 43 6f 75 6e   int zParentCoun
5010: 74 3b 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72  t;     /* number
5020: 20 6f 66 20 66 6f 75 6e 64 20 70 61 72 65 6e 74   of found parent
5030: 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
5040: 20 42 6c 6f 62 20 6d 61 6e 69 66 65 73 74 3b 20   Blob manifest; 
5050: 20 20 20 20 20 20 20 2f 2a 20 63 6f 6e 74 61 69         /* contai
5060: 6e 65 72 20 66 6f 72 20 74 68 65 20 6d 61 6e 69  ner for the mani
5070: 66 65 73 74 20 74 6f 20 62 65 20 67 65 6e 65 72  fest to be gener
5080: 61 74 65 64 20 2a 2f 0a 20 20 42 6c 6f 62 20 6d  ated */.  Blob m
5090: 63 6b 73 75 6d 3b 20 20 20 20 20 20 20 20 20 20  cksum;          
50a0: 2f 2a 20 53 65 6c 66 2d 63 68 65 63 6b 73 75 6d  /* Self-checksum
50b0: 20 6f 6e 20 74 68 65 20 6d 61 6e 69 66 65 73 74   on the manifest
50c0: 20 2a 2f 0a 20 20 42 6c 6f 62 20 63 6b 73 75 6d   */.  Blob cksum
50d0: 2c 20 63 6b 73 75 6d 32 3b 20 20 20 2f 2a 20 42  , cksum2;   /* B
50e0: 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20  efore and after 
50f0: 63 6f 6d 6d 69 74 20 63 68 65 63 6b 73 75 6d 73  commit checksums
5100: 20 2a 2f 0a 20 20 42 6c 6f 62 20 63 6b 73 75 6d   */.  Blob cksum
5110: 31 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  1b;         /* C
5120: 68 65 63 6b 73 75 6d 20 72 65 63 6f 72 64 65 64  hecksum recorded
5130: 20 69 6e 20 74 68 65 20 6d 61 6e 69 66 65 73 74   in the manifest
5140: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
5150: 2a 20 70 61 72 65 6e 74 3b 20 20 20 2f 2a 20 6c  * parent;   /* l
5160: 6f 6f 70 20 76 61 72 69 61 62 6c 65 20 77 68 65  oop variable whe
5170: 6e 20 63 6f 6c 6c 65 63 74 69 6e 67 20 70 61 72  n collecting par
5180: 65 6e 74 20 72 65 66 65 72 65 6e 63 65 73 20 2a  ent references *
5190: 2f 0a 20 20 69 6e 74 20 69 2c 20 6d 69 64 3b 20  /.  int i, mid; 
51a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 6f            /* Ano
51b0: 74 68 65 72 20 6c 6f 6f 70 20 69 6e 64 65 78 2c  ther loop index,
51c0: 20 61 6e 64 20 69 64 20 6f 66 20 6e 65 77 20 6d   and id of new m
51d0: 61 6e 69 66 65 73 74 20 2a 2f 0a 20 20 53 74 6d  anifest */.  Stm
51e0: 74 20 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  t q;            
51f0: 20 20 20 2f 2a 20 73 71 6c 20 73 74 61 74 65 6d     /* sql statem
5200: 65 6e 74 20 74 6f 20 71 75 65 72 79 20 74 61 62  ent to query tab
5210: 6c 65 20 6f 66 20 66 69 6c 65 73 20 2a 2f 0a 20  le of files */. 
5220: 20 63 68 61 72 2a 20 7a 4d 69 64 55 75 69 64 3b   char* zMidUuid;
5230: 20 20 20 20 20 20 20 2f 2a 20 55 75 69 64 20 66         /* Uuid f
5240: 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 67 65 6e  or the newly gen
5250: 65 72 61 74 65 64 20 6d 61 6e 69 66 65 73 74 20  erated manifest 
5260: 2a 2f 0a 0a 0a 23 64 65 66 69 6e 65 20 55 53 41  */...#define USA
5270: 47 45 20 28 22 44 41 54 45 20 43 4f 4d 4d 45 4e  GE ("DATE COMMEN
5280: 54 20 3f 2d 70 7c 2d 70 61 72 65 6e 74 20 50 41  T ?-p|-parent PA
5290: 52 45 4e 54 5f 52 49 44 2e 2e 2e 3f 20 3f 2d 66  RENT_RID...? ?-f
52a0: 7c 2d 66 69 6c 65 20 28 46 49 4c 45 5f 52 49 44  |-file (FILE_RID
52b0: 20 50 41 54 48 29 2e 2e 2e 3f 22 29 0a 0a 20 20   PATH)...?")..  
52c0: 2f 2a 0a 20 20 2a 2a 20 56 61 6c 69 64 61 74 65  /*.  ** Validate
52d0: 20 61 6e 64 20 70 72 6f 63 65 73 73 20 61 72 67   and process arg
52e0: 75 6d 65 6e 74 73 2c 20 63 6f 6c 6c 65 63 74 20  uments, collect 
52f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 20 20 2a  information..  *
5300: 2f 0a 0a 20 20 64 62 5f 6d 75 73 74 5f 62 65 5f  /..  db_must_be_
5310: 77 69 74 68 69 6e 5f 74 72 65 65 28 29 3b 0a 0a  within_tree();..
5320: 20 20 2f 2a 20 4d 61 6e 64 61 74 6f 72 79 20 61    /* Mandatory a
5330: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 66  rguments */.  if
5340: 20 28 67 2e 61 72 67 63 20 3c 20 34 29 20 7b 0a   (g.argc < 4) {.
5350: 20 20 20 20 75 73 61 67 65 20 28 55 53 41 47 45      usage (USAGE
5360: 29 3b 0a 20 20 7d 0a 0a 20 20 7a 44 61 74 65 20  );.  }..  zDate 
5370: 20 20 20 3d 20 67 2e 61 72 67 76 5b 32 5d 3b 0a     = g.argv[2];.
5380: 20 20 7a 43 6f 6d 6d 65 6e 74 20 3d 20 67 2e 61    zComment = g.a
5390: 72 67 76 5b 33 5d 3b 0a 0a 20 20 72 65 6d 6f 76  rgv[3];..  remov
53a0: 65 5f 66 72 6f 6d 5f 61 72 67 76 20 28 32 2c 32  e_from_argv (2,2
53b0: 29 3b 0a 0a 20 20 2f 2a 20 50 75 6c 6c 20 74 68  );..  /* Pull th
53c0: 65 20 6f 70 74 69 6f 6e 61 6c 20 70 61 72 65 6e  e optional paren
53d0: 74 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 2a 2a  t arguments.  **
53e0: 0a 20 20 2a 2a 20 4e 6f 74 65 3a 20 49 6e 20 70  .  ** Note: In p
53f0: 72 69 6e 63 69 70 6c 65 20 69 74 20 69 73 20 70  rinciple it is p
5400: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 65  ossible that the
5410: 20 6c 6f 6f 70 20 62 65 6c 6f 77 20 65 78 74 72   loop below extr
5420: 61 63 74 73 0a 20 20 2a 2a 20 74 68 65 20 77 72  acts.  ** the wr
5430: 6f 6e 67 20 61 72 67 75 6d 65 6e 74 73 2c 20 69  ong arguments, i
5440: 66 20 77 65 20 65 76 65 72 20 74 72 79 20 74 6f  f we ever try to
5450: 20 69 6d 70 6f 72 74 20 61 20 66 69 6c 65 20 77   import a file w
5460: 68 6f 73 65 20 70 61 74 68 0a 20 20 2a 2a 20 73  hose path.  ** s
5470: 74 61 72 74 73 20 77 69 74 68 20 2d 70 2f 2d 70  tarts with -p/-p
5480: 61 72 65 6e 74 2e 20 49 6e 20 74 68 61 74 20 63  arent. In that c
5490: 61 73 65 20 68 6f 77 65 76 65 72 20 74 68 65 20  ase however the 
54a0: 72 65 6d 6f 76 61 6c 20 6f 66 20 74 77 6f 0a 20  removal of two. 
54b0: 20 2a 2a 20 61 72 67 75 6d 65 6e 74 73 20 77 69   ** arguments wi
54c0: 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 66 69 6c  ll leave the fil
54d0: 65 20 62 65 72 65 66 74 20 6f 66 20 61 6e 20 61  e bereft of an a
54e0: 72 67 75 6d 65 6e 74 20 61 6e 64 20 74 68 65 0a  rgument and the.
54f0: 20 20 2a 2a 20 72 65 63 68 65 63 6b 20 6f 66 20    ** recheck of 
5500: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
5510: 67 75 6d 65 6e 74 73 20 62 65 6c 6f 77 20 73 68  guments below sh
5520: 6f 75 6c 64 20 63 61 74 63 68 20 74 68 61 74 2e  ould catch that.
5530: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 46 6f 72 20 61  .  **.  ** For a
5540: 20 74 65 73 74 20 63 6f 6d 6d 61 6e 64 20 74 68   test command th
5550: 69 73 20 69 73 20 61 63 63 65 70 74 61 62 6c 65  is is acceptable
5560: 2c 20 69 74 20 77 6f 6e 27 74 20 68 61 76 65 20  , it won't have 
5570: 6c 6f 74 73 20 6f 66 0a 20 20 2a 2a 20 73 61 66  lots of.  ** saf
5580: 65 74 79 20 6e 65 74 73 2e 0a 20 20 2a 2f 0a 0a  ety nets..  */..
5590: 20 20 7a 50 61 72 65 6e 74 43 6f 75 6e 74 20 3d    zParentCount =
55a0: 20 30 3b 0a 20 20 7a 50 61 72 65 6e 74 73 20 3d   0;.  zParents =
55b0: 20 28 69 6e 74 2a 29 6d 61 6c 6c 6f 63 28 73 69   (int*)malloc(si
55c0: 7a 65 6f 66 28 69 6e 74 29 2a 28 31 2b 67 2e 61  zeof(int)*(1+g.a
55d0: 72 67 63 29 29 3b 0a 20 20 2f 2a 20 31 2b 2c 20  rgc));.  /* 1+, 
55e0: 74 6f 20 62 65 20 6f 6b 20 77 69 74 68 20 74 68  to be ok with th
55f0: 65 20 64 65 66 61 75 6c 74 20 65 76 65 6e 20 69  e default even i
5600: 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61  f no arguments a
5610: 72 6f 75 6e 64 20 2a 2f 0a 0a 20 20 77 68 69 6c  round */..  whil
5620: 65 20 28 28 70 61 72 65 6e 74 20 3d 20 66 69 6e  e ((parent = fin
5630: 64 5f 6f 70 74 69 6f 6e 28 22 70 61 72 65 6e 74  d_option("parent
5640: 22 2c 22 70 22 2c 31 29 29 20 21 3d 20 4e 55 4c  ","p",1)) != NUL
5650: 4c 29 20 7b 0a 20 20 20 20 2f 2a 20 43 68 65 63  L) {.    /* Chec
5660: 6b 20 61 6e 64 20 73 74 6f 72 65 20 2e 2e 2e 20  k and store ... 
5670: 2a 2f 0a 20 20 20 20 7a 50 61 72 65 6e 74 73 20  */.    zParents 
5680: 5b 7a 50 61 72 65 6e 74 43 6f 75 6e 74 5d 20 3d  [zParentCount] =
5690: 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 20 28 70 61   name_to_rid (pa
56a0: 72 65 6e 74 29 3b 0a 20 20 20 20 7a 50 61 72 65  rent);.    zPare
56b0: 6e 74 43 6f 75 6e 74 20 2b 2b 3b 0a 20 20 7d 0a  ntCount ++;.  }.
56c0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 46 61 6c 6c 20  .  /*.  ** Fall 
56d0: 62 61 63 6b 20 74 6f 20 74 68 65 20 72 6f 6f 74  back to the root
56e0: 20 6d 61 6e 69 66 65 73 74 20 61 73 20 70 61 72   manifest as par
56f0: 65 6e 74 20 69 66 20 6e 6f 6e 65 20 77 65 72 65  ent if none were
5700: 20 73 70 65 63 69 66 69 65 64 0a 20 20 2a 2a 20   specified.  ** 
5710: 65 78 70 6c 69 63 69 74 6c 79 2e 0a 20 20 2a 2f  explicitly..  */
5720: 0a 0a 20 20 69 66 20 28 21 7a 50 61 72 65 6e 74  ..  if (!zParent
5730: 43 6f 75 6e 74 29 20 7b 0a 20 20 20 20 7a 50 61  Count) {.    zPa
5740: 72 65 6e 74 73 20 5b 7a 50 61 72 65 6e 74 43 6f  rents [zParentCo
5750: 75 6e 74 5d 20 3d 20 31 3b 20 2f 2a 20 48 41 43  unt] = 1; /* HAC
5760: 4b 3a 20 72 69 64 20 31 20 69 73 20 74 68 65 20  K: rid 1 is the 
5770: 62 61 73 65 6c 69 6e 65 20 6d 61 6e 69 66 65 73  baseline manifes
5780: 74 0a 09 09 09 09 20 2a 2a 20 77 68 69 63 68 20  t..... ** which 
5790: 77 61 73 20 65 6e 74 65 72 65 64 20 77 68 65 6e  was entered when
57a0: 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 0a   the repository.
57b0: 09 09 09 09 20 2a 2a 20 77 61 73 20 63 72 65 61  .... ** was crea
57c0: 74 65 64 20 76 69 61 20 27 6e 65 77 27 2e 20 49  ted via 'new'. I
57d0: 74 20 61 6c 77 61 79 73 20 68 61 73 0a 09 09 09  t always has....
57e0: 09 20 2a 2a 20 72 69 64 20 31 2e 0a 09 09 09 09  . ** rid 1......
57f0: 20 2a 2f 0a 20 20 20 20 7a 50 61 72 65 6e 74 43   */.    zParentC
5800: 6f 75 6e 74 20 2b 2b 3b 0a 20 20 7d 0a 0a 20 20  ount ++;.  }..  
5810: 2f 2a 20 50 75 6c 6c 20 74 68 65 20 66 69 6c 65  /* Pull the file
5820: 20 61 72 67 75 6d 65 6e 74 73 2c 20 61 74 20 6c   arguments, at l
5830: 65 61 73 74 20 6f 6e 65 20 68 61 73 20 74 6f 20  east one has to 
5840: 62 65 20 70 72 65 73 65 6e 74 2e 20 54 68 65 79  be present. They
5850: 20 61 72 65 0a 20 20 2a 2a 20 74 68 65 20 6f 6e   are.  ** the on
5860: 6c 79 20 74 68 69 6e 67 73 20 77 65 20 63 61 6e  ly things we can
5870: 20 68 61 76 65 20 68 65 72 65 2c 20 6e 6f 77 2c   have here, now,
5880: 20 61 6e 64 20 74 68 65 79 20 61 72 65 20 74 72   and they are tr
5890: 69 70 6c 65 73 20 6f 66 0a 20 20 2a 2a 20 27 2d  iples of.  ** '-
58a0: 66 20 46 49 44 20 50 41 54 48 27 2c 20 73 6f 20  f FID PATH', so 
58b0: 75 73 65 20 6f 66 20 66 69 6e 64 5f 6f 70 74 69  use of find_opti
58c0: 6f 6e 20 69 73 20 6f 75 74 2c 20 61 6e 64 20 77  on is out, and w
58d0: 65 20 63 61 6e 20 63 68 65 63 6b 20 74 68 65 0a  e can check the.
58e0: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 61    ** number of a
58f0: 72 67 75 6d 65 6e 74 73 2e 0a 20 20 2a 2a 0a 20  rguments..  **. 
5900: 20 2a 2a 20 4e 6f 74 65 3a 20 57 65 20 73 74 6f   ** Note: We sto
5910: 72 65 20 74 68 65 20 64 61 74 61 20 69 6e 20 61  re the data in a
5920: 20 74 65 6d 70 2e 20 74 61 62 6c 65 2c 20 73 6f   temp. table, so
5930: 20 74 68 61 74 20 77 65 20 6c 61 74 65 72 20 63   that we later c
5940: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 20 20 70 75  an.  **       pu
5950: 6c 6c 20 69 74 20 73 6f 72 74 65 64 2c 20 61 6e  ll it sorted, an
5960: 64 20 61 6c 73 6f 20 65 61 73 69 6c 79 20 67 65  d also easily ge
5970: 74 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  t the associated
5980: 20 68 61 73 68 0a 20 20 2a 2a 20 20 20 20 20 20   hash.  **      
5990: 20 69 64 65 6e 74 69 66 69 65 72 73 2e 0a 20 20   identifiers..  
59a0: 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 32 3a 20  **.  ** Note 2: 
59b0: 57 65 20 65 78 70 65 63 74 20 61 74 20 6c 65 61  We expect at lea
59c0: 73 74 20 6f 6e 65 20 66 69 6c 65 2c 20 6f 74 68  st one file, oth
59d0: 65 72 77 69 73 65 20 74 68 65 20 6d 61 6e 69 66  erwise the manif
59e0: 65 73 74 20 77 6f 6e 27 74 0a 20 20 2a 2a 20 62  est won't.  ** b
59f0: 65 20 72 65 63 6f 67 6e 69 7a 65 64 20 61 73 20  e recognized as 
5a00: 61 20 62 61 73 65 6c 69 6e 65 20 62 79 20 74 68  a baseline by th
5a10: 65 20 6d 61 6e 69 66 65 73 74 20 70 61 72 73 65  e manifest parse
5a20: 72 2e 0a 20 20 2a 2f 0a 0a 20 20 69 66 20 28 28  r..  */..  if ((
5a30: 28 67 2e 61 72 67 63 2d 32 29 20 25 20 33 20 21  (g.argc-2) % 3 !
5a40: 3d 20 30 29 20 7c 7c 20 28 67 2e 61 72 67 63 20  = 0) || (g.argc 
5a50: 3c 20 35 29 29 20 7b 0a 20 20 20 20 75 73 61 67  < 5)) {.    usag
5a60: 65 20 28 55 53 41 47 45 29 3b 0a 20 20 7d 0a 0a  e (USAGE);.  }..
5a70: 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e 73    db_begin_trans
5a80: 61 63 74 69 6f 6e 28 29 3b 0a 20 20 64 62 5f 6d  action();.  db_m
5a90: 75 6c 74 69 5f 65 78 65 63 20 28 22 43 52 45 41  ulti_exec ("CREA
5aa0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 5f 5f  TE TEMP TABLE __
5ab0: 69 6d 20 28 22 0a 09 09 20 22 72 69 64 20 20 20  im ("... "rid   
5ac0: 20 20 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e     INTEGER NOT N
5ad0: 55 4c 4c 2c 22 0a 09 09 20 22 70 61 74 68 6e 61  ULL,"... "pathna
5ae0: 6d 65 20 54 45 58 54 20 20 20 20 4e 4f 54 20 4e  me TEXT    NOT N
5af0: 55 4c 4c 29 22 20 29 3b 0a 0a 20 20 77 68 69 6c  ULL)" );..  whil
5b00: 65 20 28 67 2e 61 72 67 63 20 3e 20 32 29 20 7b  e (g.argc > 2) {
5b10: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 61 6e  .    /* Check an
5b20: 64 20 73 74 6f 72 65 20 2e 2e 2e 20 2a 2f 0a 20  d store ... */. 
5b30: 20 20 20 69 66 20 28 73 74 72 63 6d 70 28 22 2d     if (strcmp("-
5b40: 66 22 2c 20 20 20 67 2e 61 72 67 76 5b 32 5d 29  f",   g.argv[2])
5b50: 20 26 26 0a 09 73 74 72 63 6d 70 28 22 2d 66 69   &&..strcmp("-fi
5b60: 6c 65 22 2c 67 2e 61 72 67 76 5b 32 5d 29 29 20  le",g.argv[2])) 
5b70: 7b 0a 20 20 20 20 20 20 75 73 61 67 65 20 28 55  {.      usage (U
5b80: 53 41 47 45 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  SAGE);.    }..  
5b90: 20 20 2f 2a 20 44 41 4e 47 45 52 20 54 68 65 20    /* DANGER The 
5ba0: 25 73 20 66 6f 72 20 74 68 65 20 70 61 74 68 20  %s for the path 
5bb0: 6d 69 67 68 74 20 6c 65 61 64 20 69 74 73 65 6c  might lead itsel
5bc0: 66 20 74 6f 20 61 6e 20 69 6e 6a 65 63 74 69 6f  f to an injectio
5bd0: 6e 0a 20 20 20 20 2a 2a 20 61 74 74 61 63 6b 2e  n.    ** attack.
5be0: 20 46 6f 72 20 6e 6f 77 20 28 69 2e 65 2e 20 74   For now (i.e. t
5bf0: 65 73 74 69 6e 67 29 20 74 68 69 73 20 69 73 20  esting) this is 
5c00: 6f 6b 2c 20 62 75 74 20 64 6f 20 73 6f 6d 65 74  ok, but do somet
5c10: 68 69 6e 67 0a 20 20 20 20 2a 2a 20 62 65 74 74  hing.    ** bett
5c20: 65 72 20 69 6e 20 74 68 65 20 66 75 74 75 72 65  er in the future
5c30: 2e 0a 20 20 20 20 2a 2f 0a 0a 20 20 20 20 64 62  ..    */..    db
5c40: 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 49 4e 53  _multi_exec("INS
5c50: 45 52 54 20 49 4e 54 4f 20 5f 5f 69 6d 20 56 41  ERT INTO __im VA
5c60: 4c 55 45 53 28 25 64 2c 27 25 73 27 29 22 2c 0a  LUES(%d,'%s')",.
5c70: 09 09 20 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 20  ..  name_to_rid 
5c80: 28 67 2e 61 72 67 76 5b 33 5d 29 2c 20 67 2e 61  (g.argv[3]), g.a
5c90: 72 67 76 5b 34 5d 20 29 3b 0a 20 20 20 20 72 65  rgv[4] );.    re
5ca0: 6d 6f 76 65 5f 66 72 6f 6d 5f 61 72 67 76 20 28  move_from_argv (
5cb0: 32 2c 33 29 3b 0a 20 20 7d 0a 0a 20 20 76 65 72  2,3);.  }..  ver
5cc0: 69 66 79 5f 61 6c 6c 5f 6f 70 74 69 6f 6e 73 28  ify_all_options(
5cd0: 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 44 65  );..  /*.  ** De
5ce0: 74 65 72 6d 69 6e 65 20 74 68 65 20 75 73 65 72  termine the user
5cf0: 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 77 69   the manifest wi
5d00: 6c 6c 20 62 65 6c 6f 6e 67 20 74 6f 2c 20 61 6e  ll belong to, an
5d10: 64 20 63 68 65 63 6b 20 74 68 61 74 0a 20 20 2a  d check that.  *
5d20: 2a 20 74 68 69 73 20 75 73 65 72 20 65 78 69 73  * this user exis
5d30: 74 73 2e 0a 20 20 2a 2f 0a 0a 20 20 75 73 65 72  ts..  */..  user
5d40: 5f 73 65 6c 65 63 74 28 29 3b 0a 20 20 69 66 28  _select();.  if(
5d50: 20 21 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c   !db_exists("SEL
5d60: 45 43 54 20 31 20 46 52 4f 4d 20 75 73 65 72 20  ECT 1 FROM user 
5d70: 57 48 45 52 45 20 6c 6f 67 69 6e 3d 25 51 22 2c  WHERE login=%Q",
5d80: 20 67 2e 7a 4c 6f 67 69 6e 29 20 29 7b 0a 20 20   g.zLogin) ){.  
5d90: 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28 22    fossil_fatal("
5da0: 6e 6f 20 73 75 63 68 20 75 73 65 72 3a 20 25 73  no such user: %s
5db0: 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20  ", g.zLogin);.  
5dc0: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 4e 6f 77  }..  /*.  ** Now
5dd0: 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 6d 61   generate the ma
5de0: 6e 69 66 65 73 74 20 69 6e 20 6d 65 6d 6f 72 79  nifest in memory
5df0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 53 74 61 72  ..  **.  ** Star
5e00: 74 20 77 69 74 68 20 63 6f 6d 6d 65 6e 74 20 61  t with comment a
5e10: 6e 64 20 64 61 74 65 2e 20 54 68 65 20 6c 61 74  nd date. The lat
5e20: 74 65 72 20 69 73 20 63 6f 6e 76 65 72 74 65 64  ter is converted
5e30: 20 74 6f 20 74 68 65 0a 20 20 2a 2a 20 70 72 6f   to the.  ** pro
5e40: 70 65 72 20 66 6f 72 6d 61 74 20 62 65 66 6f 72  per format befor
5e50: 65 20 69 6e 73 65 72 74 69 6f 6e 2e 0a 20 20 2a  e insertion..  *
5e60: 2f 0a 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26  /..  blob_zero(&
5e70: 6d 61 6e 69 66 65 73 74 29 3b 0a 0a 20 20 69 66  manifest);..  if
5e80: 20 28 21 73 74 72 6c 65 6e 28 7a 43 6f 6d 6d 65   (!strlen(zComme
5e90: 6e 74 29 29 20 7b 0a 20 20 20 20 62 6c 6f 62 5f  nt)) {.    blob_
5ea0: 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66 65 73  appendf(&manifes
5eb0: 74 2c 20 22 43 20 25 46 5c 6e 22 2c 20 22 28 6e  t, "C %F\n", "(n
5ec0: 6f 20 63 6f 6d 6d 65 6e 74 29 22 29 3b 0a 20 20  o comment)");.  
5ed0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 62 6c 6f  } else {.    blo
5ee0: 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66  b_appendf(&manif
5ef0: 65 73 74 2c 20 22 43 20 25 46 5c 6e 22 2c 20 7a  est, "C %F\n", z
5f00: 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 7d 0a 0a 20  Comment);.  }.. 
5f10: 20 7a 44 61 74 65 46 6d 74 20 3d 20 64 62 5f 74   zDateFmt = db_t
5f20: 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64  ext(0, "SELECT d
5f30: 61 74 65 74 69 6d 65 28 25 51 2c 27 75 6e 69 78  atetime(%Q,'unix
5f40: 65 70 6f 63 68 27 29 22 2c 7a 44 61 74 65 29 3b  epoch')",zDate);
5f50: 0a 20 20 7a 44 61 74 65 46 6d 74 5b 31 30 5d 20  .  zDateFmt[10] 
5f60: 3d 20 27 54 27 3b 0a 20 20 62 6c 6f 62 5f 61 70  = 'T';.  blob_ap
5f70: 70 65 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c  pendf(&manifest,
5f80: 20 22 44 20 25 73 5c 6e 22 2c 20 7a 44 61 74 65   "D %s\n", zDate
5f90: 46 6d 74 29 3b 0a 20 20 66 72 65 65 28 7a 44 61  Fmt);.  free(zDa
5fa0: 74 65 46 6d 74 29 3b 0a 0a 20 20 2f 2a 0a 20 20  teFmt);..  /*.  
5fb0: 2a 2a 20 46 6f 6c 6c 6f 77 20 77 69 74 68 20 61  ** Follow with a
5fc0: 6c 6c 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64  ll the collected
5fd0: 20 66 69 6c 65 73 2c 20 70 72 6f 70 65 72 6c 79   files, properly
5fe0: 20 73 6f 72 74 65 64 2e 20 48 65 72 65 20 77 65   sorted. Here we
5ff0: 72 65 0a 20 20 2a 2a 20 61 6c 73 6f 20 63 6f 6d  re.  ** also com
6000: 70 75 74 65 20 74 68 65 20 63 68 65 63 6b 73 75  pute the checksu
6010: 6d 20 6f 76 65 72 20 74 68 65 20 66 69 6c 65 73  m over the files
6020: 20 28 70 61 74 68 73 2c 20 73 69 7a 65 73 2c 0a   (paths, sizes,.
6030: 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 73 29 2c 20    ** contents), 
6040: 73 69 6d 69 6c 61 72 20 74 6f 20 77 68 61 74 20  similar to what 
6050: 27 76 66 69 6c 65 5f 61 67 67 72 65 67 61 74 65  'vfile_aggregate
6060: 5f 63 68 65 63 6b 73 75 6d 5f 72 65 70 6f 73 69  _checksum_reposi
6070: 74 6f 72 79 27 0a 20 20 2a 2a 20 64 6f 65 73 2e  tory'.  ** does.
6080: 0a 20 20 2a 2f 0a 0a 20 20 6d 64 35 73 75 6d 5f  .  */..  md5sum_
6090: 69 6e 69 74 28 29 3b 0a 20 20 64 62 5f 70 72 65  init();.  db_pre
60a0: 70 61 72 65 28 26 71 2c 0a 09 20 20 20 20 20 22  pare(&q,..     "
60b0: 53 45 4c 45 43 54 20 70 61 74 68 6e 61 6d 65 2c  SELECT pathname,
60c0: 20 75 75 69 64 2c 20 5f 5f 69 6d 2e 72 69 64 22   uuid, __im.rid"
60d0: 0a 09 20 20 20 20 20 22 20 46 52 4f 4d 20 5f 5f  ..     " FROM __
60e0: 69 6d 20 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e 20  im JOIN blob ON 
60f0: 5f 5f 69 6d 2e 72 69 64 3d 62 6c 6f 62 2e 72 69  __im.rid=blob.ri
6100: 64 22 0a 09 20 20 20 20 20 22 20 4f 52 44 45 52  d"..     " ORDER
6110: 20 42 59 20 31 22 29 3b 0a 0a 20 20 77 68 69 6c   BY 1");..  whil
6120: 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d  e( db_step(&q)==
6130: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20  SQLITE_ROW ){.  
6140: 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d    char zBuf[100]
6150: 3b 0a 20 20 20 20 42 6c 6f 62 20 66 69 6c 65 3b  ;.    Blob file;
6160: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
6170: 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75  *zName = db_colu
6180: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a  mn_text(&q, 0);.
6190: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
61a0: 7a 55 75 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d  zUuid = db_colum
61b0: 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20  n_text(&q, 1);. 
61c0: 20 20 20 69 6e 74 20 20 20 20 20 20 20 20 20 7a     int         z
61d0: 52 69 64 20 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e  Rid  = db_column
61e0: 5f 69 6e 74 20 28 26 71 2c 20 32 29 3b 0a 0a 20  _int (&q, 2);.. 
61f0: 20 20 20 2f 2a 20 45 78 74 65 6e 64 20 74 68 65     /* Extend the
6200: 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 20 20 20   manifest */.   
6210: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d   blob_appendf(&m
6220: 61 6e 69 66 65 73 74 2c 20 22 46 20 25 46 20 25  anifest, "F %F %
6230: 73 5c 6e 22 2c 20 7a 4e 61 6d 65 2c 20 7a 55 75  s\n", zName, zUu
6240: 69 64 29 3b 0a 0a 20 20 20 20 2f 2a 20 55 70 64  id);..    /* Upd
6250: 61 74 65 20 74 68 65 20 63 68 65 63 6b 73 75 6d  ate the checksum
6260: 20 2a 2f 0a 20 20 20 20 6d 64 35 73 75 6d 5f 73   */.    md5sum_s
6270: 74 65 70 5f 74 65 78 74 28 7a 4e 61 6d 65 2c 20  tep_text(zName, 
6280: 2d 31 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65  -1);.    blob_ze
6290: 72 6f 28 26 66 69 6c 65 29 3b 0a 20 20 20 20 63  ro(&file);.    c
62a0: 6f 6e 74 65 6e 74 5f 67 65 74 28 7a 52 69 64 2c  ontent_get(zRid,
62b0: 20 26 66 69 6c 65 29 3b 0a 20 20 20 20 73 70 72   &file);.    spr
62c0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 20 25 64 5c  intf(zBuf, " %d\
62d0: 6e 22 2c 20 62 6c 6f 62 5f 73 69 7a 65 28 26 66  n", blob_size(&f
62e0: 69 6c 65 29 29 3b 0a 20 20 20 20 6d 64 35 73 75  ile));.    md5su
62f0: 6d 5f 73 74 65 70 5f 74 65 78 74 28 7a 42 75 66  m_step_text(zBuf
6300: 2c 20 2d 31 29 3b 0a 20 20 20 20 6d 64 35 73 75  , -1);.    md5su
6310: 6d 5f 73 74 65 70 5f 62 6c 6f 62 28 26 66 69 6c  m_step_blob(&fil
6320: 65 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 72 65 73  e);.    blob_res
6330: 65 74 28 26 66 69 6c 65 29 3b 0a 20 20 7d 0a 20  et(&file);.  }. 
6340: 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29   db_finalize(&q)
6350: 3b 0a 20 20 6d 64 35 73 75 6d 5f 66 69 6e 69 73  ;.  md5sum_finis
6360: 68 20 28 26 63 6b 73 75 6d 29 3b 0a 0a 20 20 2f  h (&cksum);..  /
6370: 2a 0a 20 20 2a 2a 20 46 6f 6c 6c 6f 77 20 77 69  *.  ** Follow wi
6380: 74 68 20 61 6c 6c 20 74 68 65 20 73 70 65 63 69  th all the speci
6390: 66 69 65 64 20 70 61 72 65 6e 74 73 2e 20 57 65  fied parents. We
63a0: 20 6b 6e 6f 77 20 74 68 61 74 20 74 68 65 72 65   know that there
63b0: 20 69 73 20 61 74 0a 20 20 2a 2a 20 6c 65 61 73   is at.  ** leas
63c0: 74 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 0a 20 20 62  t one..  */..  b
63d0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e  lob_appendf(&man
63e0: 69 66 65 73 74 2c 20 22 50 22 29 3b 0a 20 20 66  ifest, "P");.  f
63f0: 6f 72 20 28 69 3d 30 3b 69 3c 7a 50 61 72 65 6e  or (i=0;i<zParen
6400: 74 43 6f 75 6e 74 3b 69 2b 2b 29 20 7b 0a 20 20  tCount;i++) {.  
6410: 20 20 63 68 61 72 2a 20 7a 55 75 69 64 20 3d 20    char* zUuid = 
6420: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45  db_text(0, "SELE
6430: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f  CT uuid FROM blo
6440: 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c  b WHERE rid=%d",
6450: 20 7a 50 61 72 65 6e 74 73 5b 69 5d 29 3b 0a 20   zParents[i]);. 
6460: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28     blob_appendf(
6470: 26 6d 61 6e 69 66 65 73 74 2c 20 22 20 25 73 22  &manifest, " %s"
6480: 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 66 72  , zUuid);.    fr
6490: 65 65 28 7a 55 75 69 64 29 3b 0a 20 20 7d 0a 20  ee(zUuid);.  }. 
64a0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d   blob_appendf(&m
64b0: 61 6e 69 66 65 73 74 2c 20 22 5c 6e 22 29 3b 0a  anifest, "\n");.
64c0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 43 6f 6d 70 6c  .  /*.  ** Compl
64d0: 65 74 65 20 74 68 65 20 6d 61 6e 69 66 65 73 74  ete the manifest
64e0: 20 77 69 74 68 20 75 73 65 72 20 6e 61 6d 65 20   with user name 
64f0: 61 6e 64 20 74 68 65 20 76 61 72 69 6f 75 73 20  and the various 
6500: 63 68 65 63 6b 73 75 6d 73 0a 20 20 2a 2f 0a 0a  checksums.  */..
6510: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26    blob_appendf(&
6520: 6d 61 6e 69 66 65 73 74 2c 20 22 52 20 25 62 5c  manifest, "R %b\
6530: 6e 22 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 62  n", &cksum);.  b
6540: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e  lob_appendf(&man
6550: 69 66 65 73 74 2c 20 22 55 20 25 46 5c 6e 22 2c  ifest, "U %F\n",
6560: 20 67 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 6d 64   g.zLogin);.  md
6570: 35 73 75 6d 5f 62 6c 6f 62 28 26 6d 61 6e 69 66  5sum_blob(&manif
6580: 65 73 74 2c 20 26 6d 63 6b 73 75 6d 29 3b 0a 20  est, &mcksum);. 
6590: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d   blob_appendf(&m
65a0: 61 6e 69 66 65 73 74 2c 20 22 5a 20 25 62 5c 6e  anifest, "Z %b\n
65b0: 22 2c 20 26 6d 63 6b 73 75 6d 29 3b 0a 0a 20 20  ", &mcksum);..  
65c0: 2f 2a 0a 20 20 2a 2a 20 4e 6f 77 20 69 6e 73 65  /*.  ** Now inse
65d0: 72 74 20 74 68 65 20 6e 65 77 20 6d 61 6e 69 66  rt the new manif
65e0: 65 73 74 2c 20 74 72 79 20 74 6f 20 63 6f 6d 70  est, try to comp
65f0: 72 65 73 73 20 69 74 20 72 65 6c 61 74 69 76 65  ress it relative
6600: 20 74 6f 20 66 69 72 73 74 0a 20 20 2a 2a 20 70   to first.  ** p
6610: 61 72 65 6e 74 20 28 70 72 69 6d 61 72 79 29 2e  arent (primary).
6620: 0a 20 20 20 2a 2f 0a 0a 20 20 2f 2a 62 6c 6f 62  .   */..  /*blob
6630: 5f 77 72 69 74 65 5f 74 6f 5f 66 69 6c 65 20 28  _write_to_file (
6640: 26 6d 61 6e 69 66 65 73 74 2c 20 22 54 45 53 54  &manifest, "TEST
6650: 5f 4d 41 4e 49 46 45 53 54 22 29 3b 2a 2f 0a 0a  _MANIFEST");*/..
6660: 20 20 6d 69 64 20 3d 20 63 6f 6e 74 65 6e 74 5f    mid = content_
6670: 70 75 74 28 26 6d 61 6e 69 66 65 73 74 2c 20 30  put(&manifest, 0
6680: 2c 20 30 29 3b 0a 20 20 69 66 28 20 6d 69 64 3d  , 0);.  if( mid=
6690: 3d 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c  =0 ){.    fossil
66a0: 5f 70 61 6e 69 63 28 22 74 72 6f 75 62 6c 65 20  _panic("trouble 
66b0: 63 6f 6d 6d 69 74 74 69 6e 67 20 6d 61 6e 69 66  committing manif
66c0: 65 73 74 3a 20 25 73 22 2c 20 67 2e 7a 45 72 72  est: %s", g.zErr
66d0: 4d 73 67 29 3b 0a 20 20 7d 0a 0a 20 20 63 6f 6e  Msg);.  }..  con
66e0: 74 65 6e 74 5f 64 65 6c 74 69 66 79 28 7a 50 61  tent_deltify(zPa
66f0: 72 65 6e 74 73 5b 30 5d 2c 20 6d 69 64 2c 20 30  rents[0], mid, 0
6700: 29 3b 0a 0a 20 20 2f 2a 20 56 65 72 69 66 79 20  );..  /* Verify 
6710: 74 68 61 74 20 74 68 65 20 72 65 70 6f 73 69 74  that the reposit
6720: 6f 72 79 20 63 68 65 63 6b 73 75 6d 20 6d 61 74  ory checksum mat
6730: 63 68 65 73 20 74 68 65 20 65 78 70 65 63 74 65  ches the expecte
6740: 64 20 63 68 65 63 6b 73 75 6d 0a 20 20 2a 2a 20  d checksum.  ** 
6750: 63 61 6c 63 75 6c 61 74 65 64 20 62 65 66 6f 72  calculated befor
6760: 65 20 74 68 65 20 63 68 65 63 6b 69 6e 20 73 74  e the checkin st
6770: 61 72 74 65 64 20 28 61 6e 64 20 73 74 6f 72 65  arted (and store
6780: 64 20 61 73 20 74 68 65 20 52 20 72 65 63 6f 72  d as the R recor
6790: 64 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 6d 61  d.  ** of the ma
67a0: 6e 69 66 65 73 74 20 66 69 6c 65 29 2e 0a 20 20  nifest file)..  
67b0: 2a 2f 0a 0a 20 20 76 66 69 6c 65 5f 61 67 67 72  */..  vfile_aggr
67c0: 65 67 61 74 65 5f 63 68 65 63 6b 73 75 6d 5f 6d  egate_checksum_m
67d0: 61 6e 69 66 65 73 74 28 6d 69 64 2c 20 26 63 6b  anifest(mid, &ck
67e0: 73 75 6d 32 2c 20 26 63 6b 73 75 6d 31 62 29 3b  sum2, &cksum1b);
67f0: 0a 20 20 69 66 28 20 62 6c 6f 62 5f 63 6f 6d 70  .  if( blob_comp
6800: 61 72 65 28 26 63 6b 73 75 6d 2c 20 26 63 6b 73  are(&cksum, &cks
6810: 75 6d 31 62 29 20 29 7b 0a 20 20 20 20 66 6f 73  um1b) ){.    fos
6820: 73 69 6c 5f 70 61 6e 69 63 28 22 6d 61 6e 69 66  sil_panic("manif
6830: 65 73 74 20 63 68 65 63 6b 73 75 6d 20 64 6f 65  est checksum doe
6840: 73 20 6e 6f 74 20 61 67 72 65 65 20 77 69 74 68  s not agree with
6850: 20 6d 61 6e 69 66 65 73 74 3a 20 22 0a 20 20 20   manifest: ".   
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25                "%
6870: 62 20 76 65 72 73 75 73 20 25 62 22 2c 20 26 63  b versus %b", &c
6880: 6b 73 75 6d 2c 20 26 63 6b 73 75 6d 31 62 29 3b  ksum, &cksum1b);
6890: 0a 20 20 7d 0a 20 20 69 66 28 20 62 6c 6f 62 5f  .  }.  if( blob_
68a0: 63 6f 6d 70 61 72 65 28 26 63 6b 73 75 6d 2c 20  compare(&cksum, 
68b0: 26 63 6b 73 75 6d 32 29 20 29 7b 0a 20 20 20 20  &cksum2) ){.    
68c0: 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 74 72  fossil_panic("tr
68d0: 65 65 20 63 68 65 63 6b 73 75 6d 20 64 6f 65 73  ee checksum does
68e0: 20 6e 6f 74 20 6d 61 74 63 68 20 6d 61 6e 69 66   not match manif
68f0: 65 73 74 20 61 66 74 65 72 20 63 6f 6d 6d 69 74  est after commit
6900: 3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  : ".            
6910: 20 20 20 20 20 22 25 62 20 76 65 72 73 75 73 20       "%b versus 
6920: 25 62 22 2c 20 26 63 6b 73 75 6d 2c 20 26 63 6b  %b", &cksum, &ck
6930: 73 75 6d 32 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  sum2);.  }..  /*
6940: 0a 20 20 2a 2a 20 41 74 20 6c 61 73 74 20 63 6f  .  ** At last co
6950: 6d 6d 69 74 20 61 6c 6c 20 63 68 61 6e 67 65 73  mmit all changes
6960: 2c 20 61 66 74 65 72 20 67 65 74 74 69 6e 67 20  , after getting 
6970: 72 69 64 20 6f 66 20 74 68 65 20 74 65 6d 70 0a  rid of the temp.
6980: 20 20 2a 2a 20 68 6f 6c 64 65 72 20 66 6f 72 20    ** holder for 
6990: 74 68 65 20 66 69 6c 65 73 2c 20 61 6e 64 20 72  the files, and r
69a0: 65 6c 65 61 73 65 20 61 6c 6c 6f 63 61 74 65 64  elease allocated
69b0: 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 0a 20   memory..  */.. 
69c0: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22   db_multi_exec("
69d0: 44 52 4f 50 20 54 41 42 4c 45 20 5f 5f 69 6d 22  DROP TABLE __im"
69e0: 29 3b 0a 20 20 7a 4d 69 64 55 75 69 64 20 3d 20  );.  zMidUuid = 
69f0: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45  db_text(0, "SELE
6a00: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f  CT uuid FROM blo
6a10: 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c  b WHERE rid=%d",
6a20: 20 6d 69 64 29 3b 0a 20 20 64 62 5f 65 6e 64 5f   mid);.  db_end_
6a30: 74 72 61 6e 73 61 63 74 69 6f 6e 28 30 29 3b 0a  transaction(0);.
6a40: 20 20 66 72 65 65 28 7a 50 61 72 65 6e 74 73 29    free(zParents)
6a50: 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 41 74 20  ;..  /*.  ** At 
6a60: 74 68 65 20 76 65 72 79 20 6c 61 73 74 20 69 6e  the very last in
6a70: 66 6f 72 6d 20 74 68 65 20 63 61 6c 6c 65 72 20  form the caller 
6a80: 61 62 6f 75 74 20 74 68 65 20 69 64 20 61 6e 64  about the id and
6a90: 20 75 75 69 64 20 6f 66 20 74 68 65 0a 20 20 2a   uuid of the.  *
6aa0: 2a 20 6e 65 77 20 6d 61 6e 69 66 65 73 74 2e 0a  * new manifest..
6ab0: 20 20 2a 2f 0a 0a 0a 20 20 70 72 69 6e 74 66 28    */...  printf(
6ac0: 22 69 6e 73 65 72 74 65 64 20 61 73 20 72 65 63  "inserted as rec
6ad0: 6f 72 64 20 25 64 2c 20 25 73 5c 6e 22 2c 20 6d  ord %d, %s\n", m
6ae0: 69 64 2c 20 7a 4d 69 64 55 75 69 64 29 3b 0a 20  id, zMidUuid);. 
6af0: 20 66 72 65 65 28 7a 4d 69 64 55 75 69 64 29 3b   free(zMidUuid);
6b00: 0a 20 20 72 65 74 75 72 6e 3b 0a 0a 23 75 6e 64  .  return;..#und
6b10: 65 66 20 55 53 41 47 45 0a 7d 0a                 ef USAGE.}.