Hex Artifact Content
Not logged in

Artifact 39235e784733cff4cf3534917aa19fa10aa3f02d:

File src/checkin.c part of check-in [8372cc0b81] - Socket operations now functional in Win32 port. Added quotes around the filename portion of the command to edit thus working of windows in paths where the temp directory contains spaces. Added -all flag to clean command. If not specified each file is prompted for before removing. by jnc on 2007-09-22 18:34:49. Also file src/checkin.c part of check-in [3c5482959c] - Merge in the w32 changes. by drh on 2007-09-22 19:43:55.

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 6f 75 74  sed to check-out
0390: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
03a0: 20 70 72 6f 6a 65 63 74 0a 2a 2a 20 66 72 6f 6d   project.** from
03b0: 20 74 68 65 20 6c 6f 63 61 6c 20 72 65 70 6f 73   the local repos
03c0: 69 74 6f 72 79 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  itory..*/.#inclu
03d0: 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 69  de "config.h".#i
03e0: 6e 63 6c 75 64 65 20 22 63 68 65 63 6b 69 6e 2e  nclude "checkin.
03f0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h".#include <ass
0400: 65 72 74 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 47 65  ert.h>../*.** Ge
0410: 6e 65 72 61 74 65 20 74 65 78 74 20 64 65 73 63  nerate text desc
0420: 72 69 62 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67  ribing all chang
0430: 65 73 2e 20 20 50 72 65 70 65 6e 64 20 7a 50 72  es.  Prepend zPr
0440: 65 66 69 78 20 74 6f 20 65 61 63 68 20 6c 69 6e  efix to each lin
0450: 65 0a 2a 2a 20 6f 66 20 6f 75 74 70 75 74 2e 0a  e.** of output..
0460: 2a 2a 0a 2a 2a 20 57 65 20 61 73 73 75 6d 65 20  **.** We assume 
0470: 74 68 61 74 20 76 66 69 6c 65 5f 63 68 65 63 6b  that vfile_check
0480: 5f 73 69 67 6e 61 74 75 72 65 20 68 61 73 20 62  _signature has b
0490: 65 65 6e 20 72 75 6e 2e 0a 2a 2f 0a 73 74 61 74  een run..*/.stat
04a0: 69 63 20 76 6f 69 64 20 73 74 61 74 75 73 5f 72  ic void status_r
04b0: 65 70 6f 72 74 28 42 6c 6f 62 20 2a 72 65 70 6f  eport(Blob *repo
04c0: 72 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  rt, const char *
04d0: 7a 50 72 65 66 69 78 29 7b 0a 20 20 53 74 6d 74  zPrefix){.  Stmt
04e0: 20 71 3b 0a 20 20 69 6e 74 20 6e 50 72 65 66 69   q;.  int nPrefi
04f0: 78 20 3d 20 73 74 72 6c 65 6e 28 7a 50 72 65 66  x = strlen(zPref
0500: 69 78 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72  ix);.  db_prepar
0510: 65 28 26 71 2c 20 0a 20 20 20 20 22 53 45 4c 45  e(&q, .    "SELE
0520: 43 54 20 70 61 74 68 6e 61 6d 65 2c 20 64 65 6c  CT pathname, del
0530: 65 74 65 64 2c 20 63 68 6e 67 65 64 2c 20 72 69  eted, chnged, ri
0540: 64 20 46 52 4f 4d 20 76 66 69 6c 65 20 22 0a 20  d FROM vfile ". 
0550: 20 20 20 22 57 48 45 52 45 20 66 69 6c 65 5f 69     "WHERE file_i
0560: 73 5f 73 65 6c 65 63 74 65 64 28 69 64 29 20 41  s_selected(id) A
0570: 4e 44 20 28 63 68 6e 67 65 64 20 4f 52 20 64 65  ND (chnged OR de
0580: 6c 65 74 65 64 20 4f 52 20 72 69 64 3d 30 29 20  leted OR rid=0) 
0590: 4f 52 44 45 52 20 42 59 20 31 22 0a 20 20 29 3b  ORDER BY 1".  );
05a0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65  .  while( db_ste
05b0: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  p(&q)==SQLITE_RO
05c0: 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  W ){.    const c
05d0: 68 61 72 20 2a 7a 50 61 74 68 6e 61 6d 65 20 3d  har *zPathname =
05e0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28   db_column_text(
05f0: 26 71 2c 30 29 3b 0a 20 20 20 20 69 6e 74 20 69  &q,0);.    int i
0600: 73 44 65 6c 65 74 65 64 20 3d 20 64 62 5f 63 6f  sDeleted = db_co
0610: 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 31 29 3b  lumn_int(&q, 1);
0620: 0a 20 20 20 20 69 6e 74 20 69 73 43 68 6e 67 65  .    int isChnge
0630: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e  d = db_column_in
0640: 74 28 26 71 2c 32 29 3b 0a 20 20 20 20 69 6e 74  t(&q,2);.    int
0650: 20 69 73 4e 65 77 20 3d 20 64 62 5f 63 6f 6c 75   isNew = db_colu
0660: 6d 6e 5f 69 6e 74 28 26 71 2c 33 29 3d 3d 30 3b  mn_int(&q,3)==0;
0670: 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64  .    blob_append
0680: 28 72 65 70 6f 72 74 2c 20 7a 50 72 65 66 69 78  (report, zPrefix
0690: 2c 20 6e 50 72 65 66 69 78 29 3b 0a 20 20 20 20  , nPrefix);.    
06a0: 69 66 28 20 69 73 4e 65 77 20 29 7b 0a 20 20 20  if( isNew ){.   
06b0: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28     blob_appendf(
06c0: 72 65 70 6f 72 74 2c 20 22 41 44 44 45 44 20 20  report, "ADDED  
06d0: 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e 61    %s\n", zPathna
06e0: 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  me);.    }else i
06f0: 66 28 20 69 73 44 65 6c 65 74 65 64 20 29 7b 0a  f( isDeleted ){.
0700: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e        blob_appen
0710: 64 66 28 72 65 70 6f 72 74 2c 20 22 44 45 4c 45  df(report, "DELE
0720: 54 45 44 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74  TED  %s\n", zPat
0730: 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73  hname);.    }els
0740: 65 20 69 66 28 20 69 73 43 68 6e 67 65 64 3d 3d  e if( isChnged==
0750: 32 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f  2 ){.      blob_
0760: 61 70 70 65 6e 64 66 28 72 65 70 6f 72 74 2c 20  appendf(report, 
0770: 22 55 50 44 41 54 45 44 5f 42 59 5f 4d 45 52 47  "UPDATED_BY_MERG
0780: 45 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e 61  E %s\n", zPathna
0790: 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  me);.    }else i
07a0: 66 28 20 69 73 43 68 6e 67 65 64 3d 3d 33 20 29  f( isChnged==3 )
07b0: 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70  {.      blob_app
07c0: 65 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 41 44  endf(report, "AD
07d0: 44 45 44 5f 42 59 5f 4d 45 52 47 45 20 25 73 5c  DED_BY_MERGE %s\
07e0: 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b 0a  n", zPathname);.
07f0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
0800: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 72 65   blob_appendf(re
0810: 70 6f 72 74 2c 20 22 45 44 49 54 45 44 20 20 20  port, "EDITED   
0820: 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65  %s\n", zPathname
0830: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64  );.    }.  }.  d
0840: 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a  b_finalize(&q);.
0850: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c    db_prepare(&q,
0860: 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52   "SELECT uuid FR
0870: 4f 4d 20 76 6d 65 72 67 65 20 4a 4f 49 4e 20 62  OM vmerge JOIN b
0880: 6c 6f 62 20 4f 4e 20 6d 65 72 67 65 3d 72 69 64  lob ON merge=rid
0890: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
08a0: 20 20 20 22 20 57 48 45 52 45 20 69 64 3d 30 22     " WHERE id=0"
08b0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73  );.  while( db_s
08c0: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f  tep(&q)==SQLITE_
08d0: 52 4f 57 20 29 7b 0a 20 20 20 20 62 6c 6f 62 5f  ROW ){.    blob_
08e0: 61 70 70 65 6e 64 28 72 65 70 6f 72 74 2c 20 7a  append(report, z
08f0: 50 72 65 66 69 78 2c 20 6e 50 72 65 66 69 78 29  Prefix, nPrefix)
0900: 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e  ;.    blob_appen
0910: 64 66 28 72 65 70 6f 72 74 2c 20 22 4d 45 52 47  df(report, "MERG
0920: 45 44 5f 57 49 54 48 20 25 73 5c 6e 22 2c 20 64  ED_WITH %s\n", d
0930: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71  b_column_text(&q
0940: 2c 20 30 29 29 3b 0a 20 20 7d 0a 20 20 64 62 5f  , 0));.  }.  db_
0950: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 7d 0a  finalize(&q);.}.
0960: 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20  ./*.** COMMAND: 
0970: 63 68 61 6e 67 65 73 0a 2a 2a 0a 2a 2a 20 55 73  changes.**.** Us
0980: 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 63 68 61  age: %fossil cha
0990: 6e 67 65 73 0a 2a 2a 20 52 65 70 6f 72 74 20 6f  nges.** Report o
09a0: 6e 20 74 68 65 20 65 64 69 74 20 73 74 61 74 75  n the edit statu
09b0: 73 20 6f 66 20 61 6c 6c 20 66 69 6c 65 73 20 69  s of all files i
09c0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 68  n the current ch
09d0: 65 63 6b 6f 75 74 2e 0a 2a 2a 20 53 65 65 20 61  eckout..** See a
09e0: 6c 73 6f 20 74 68 65 20 22 73 74 61 74 75 73 22  lso the "status"
09f0: 20 61 6e 64 20 22 65 78 74 72 61 22 20 63 6f 6d   and "extra" com
0a00: 6d 61 6e 64 73 2e 0a 2a 2f 0a 76 6f 69 64 20 63  mands..*/.void c
0a10: 68 61 6e 67 65 73 5f 63 6d 64 28 76 6f 69 64 29  hanges_cmd(void)
0a20: 7b 0a 20 20 42 6c 6f 62 20 72 65 70 6f 72 74 3b  {.  Blob report;
0a30: 0a 20 20 69 6e 74 20 76 69 64 3b 0a 20 20 64 62  .  int vid;.  db
0a40: 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f  _must_be_within_
0a50: 74 72 65 65 28 29 3b 0a 20 20 62 6c 6f 62 5f 7a  tree();.  blob_z
0a60: 65 72 6f 28 26 72 65 70 6f 72 74 29 3b 0a 20 20  ero(&report);.  
0a70: 76 69 64 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e  vid = db_lget_in
0a80: 74 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 30 29  t("checkout", 0)
0a90: 3b 0a 20 20 76 66 69 6c 65 5f 63 68 65 63 6b 5f  ;.  vfile_check_
0aa0: 73 69 67 6e 61 74 75 72 65 28 76 69 64 29 3b 0a  signature(vid);.
0ab0: 20 20 73 74 61 74 75 73 5f 72 65 70 6f 72 74 28    status_report(
0ac0: 26 72 65 70 6f 72 74 2c 20 22 22 29 3b 0a 20 20  &report, "");.  
0ad0: 62 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69  blob_write_to_fi
0ae0: 6c 65 28 26 72 65 70 6f 72 74 2c 20 22 2d 22 29  le(&report, "-")
0af0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41  ;.}../*.** COMMA
0b00: 4e 44 3a 20 73 74 61 74 75 73 0a 2a 2a 20 55 73  ND: status.** Us
0b10: 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 73 74 61  age: %fossil sta
0b20: 74 75 73 0a 2a 2a 20 52 65 70 6f 72 74 20 6f 6e  tus.** Report on
0b30: 20 74 68 65 20 73 74 61 74 75 73 20 6f 66 20 74   the status of t
0b40: 68 65 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b  he current check
0b50: 6f 75 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 74 61  out..*/.void sta
0b60: 74 75 73 5f 63 6d 64 28 76 6f 69 64 29 7b 0a 20  tus_cmd(void){. 
0b70: 20 69 6e 74 20 76 69 64 3b 0a 20 20 64 62 5f 6d   int vid;.  db_m
0b80: 75 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72  ust_be_within_tr
0b90: 65 65 28 29 3b 0a 20 20 20 20 20 20 20 2f 2a 20  ee();.       /* 
0ba0: 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 20  012345678901234 
0bb0: 2a 2f 0a 20 20 70 72 69 6e 74 66 28 22 72 65 70  */.  printf("rep
0bc0: 6f 73 69 74 6f 72 79 3a 20 20 20 25 73 5c 6e 22  ository:   %s\n"
0bd0: 2c 20 64 62 5f 6c 67 65 74 28 22 72 65 70 6f 73  , db_lget("repos
0be0: 69 74 6f 72 79 22 2c 22 22 29 29 3b 0a 20 20 70  itory",""));.  p
0bf0: 72 69 6e 74 66 28 22 6c 6f 63 61 6c 2d 72 6f 6f  rintf("local-roo
0c00: 74 3a 20 20 20 25 73 5c 6e 22 2c 20 67 2e 7a 4c  t:   %s\n", g.zL
0c10: 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20 20 70 72 69  ocalRoot);.  pri
0c20: 6e 74 66 28 22 73 65 72 76 65 72 2d 63 6f 64 65  ntf("server-code
0c30: 3a 20 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74  :  %s\n", db_get
0c40: 28 22 73 65 72 76 65 72 2d 63 6f 64 65 22 2c 20  ("server-code", 
0c50: 22 22 29 29 3b 0a 20 20 76 69 64 20 3d 20 64 62  ""));.  vid = db
0c60: 5f 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63 6b  _lget_int("check
0c70: 6f 75 74 22 2c 20 30 29 3b 0a 20 20 69 66 28 20  out", 0);.  if( 
0c80: 76 69 64 20 29 7b 0a 20 20 20 20 73 68 6f 77 5f  vid ){.    show_
0c90: 63 6f 6d 6d 6f 6e 5f 69 6e 66 6f 28 76 69 64 2c  common_info(vid,
0ca0: 20 22 63 68 65 63 6b 6f 75 74 3a 22 2c 20 30 29   "checkout:", 0)
0cb0: 3b 0a 20 20 7d 0a 20 20 63 68 61 6e 67 65 73 5f  ;.  }.  changes_
0cc0: 63 6d 64 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  cmd();.}../*.** 
0cd0: 43 4f 4d 4d 41 4e 44 3a 20 6c 73 0a 2a 2a 20 55  COMMAND: ls.** U
0ce0: 73 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 6c 73  sage: %fossil ls
0cf0: 0a 2a 2a 20 53 68 6f 77 20 74 68 65 20 6e 61 6d  .** Show the nam
0d00: 65 73 20 6f 66 20 61 6c 6c 20 66 69 6c 65 73 20  es of all files 
0d10: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  in the current c
0d20: 68 65 63 6b 6f 75 74 0a 2a 2f 0a 76 6f 69 64 20  heckout.*/.void 
0d30: 6c 73 5f 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20  ls_cmd(void){.  
0d40: 69 6e 74 20 76 69 64 3b 0a 20 20 53 74 6d 74 20  int vid;.  Stmt 
0d50: 71 3b 0a 0a 20 20 64 62 5f 6d 75 73 74 5f 62 65  q;..  db_must_be
0d60: 5f 77 69 74 68 69 6e 5f 74 72 65 65 28 29 3b 0a  _within_tree();.
0d70: 20 20 76 69 64 20 3d 20 64 62 5f 6c 67 65 74 5f    vid = db_lget_
0d80: 69 6e 74 28 22 63 68 65 63 6b 6f 75 74 22 2c 20  int("checkout", 
0d90: 30 29 3b 0a 20 20 76 66 69 6c 65 5f 63 68 65 63  0);.  vfile_chec
0da0: 6b 5f 73 69 67 6e 61 74 75 72 65 28 76 69 64 29  k_signature(vid)
0db0: 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26  ;.  db_prepare(&
0dc0: 71 2c 20 22 53 45 4c 45 43 54 20 70 61 74 68 6e  q, "SELECT pathn
0dd0: 61 6d 65 2c 20 64 65 6c 65 74 65 64 2c 20 72 69  ame, deleted, ri
0de0: 64 2c 20 63 68 6e 67 65 64 20 46 52 4f 4d 20 76  d, chnged FROM v
0df0: 66 69 6c 65 22 0a 20 20 20 20 20 20 20 20 20 20  file".          
0e00: 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 42         " ORDER B
0e10: 59 20 31 22 29 3b 0a 20 20 77 68 69 6c 65 28 20  Y 1");.  while( 
0e20: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c  db_step(&q)==SQL
0e30: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63  ITE_ROW ){.    c
0e40: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 74 68  onst char *zPath
0e50: 6e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e  name = db_column
0e60: 5f 74 65 78 74 28 26 71 2c 30 29 3b 0a 20 20 20  _text(&q,0);.   
0e70: 20 69 6e 74 20 69 73 44 65 6c 65 74 65 64 20 3d   int isDeleted =
0e80: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26   db_column_int(&
0e90: 71 2c 20 31 29 3b 0a 20 20 20 20 69 6e 74 20 69  q, 1);.    int i
0ea0: 73 4e 65 77 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e  sNew = db_column
0eb0: 5f 69 6e 74 28 26 71 2c 32 29 3d 3d 30 3b 0a 20  _int(&q,2)==0;. 
0ec0: 20 20 20 69 6e 74 20 63 68 6e 67 65 64 20 3d 20     int chnged = 
0ed0: 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71  db_column_int(&q
0ee0: 2c 33 29 3b 0a 20 20 20 20 69 66 28 20 69 73 4e  ,3);.    if( isN
0ef0: 65 77 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e  ew ){.      prin
0f00: 74 66 28 22 41 44 44 45 44 20 20 20 20 20 25 73  tf("ADDED     %s
0f10: 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b  \n", zPathname);
0f20: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69  .    }else if( i
0f30: 73 44 65 6c 65 74 65 64 20 29 7b 0a 20 20 20 20  sDeleted ){.    
0f40: 20 20 70 72 69 6e 74 66 28 22 44 45 4c 45 54 45    printf("DELETE
0f50: 44 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68  D   %s\n", zPath
0f60: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  name);.    }else
0f70: 20 69 66 28 20 63 68 6e 67 65 64 20 29 7b 0a 20   if( chnged ){. 
0f80: 20 20 20 20 20 70 72 69 6e 74 66 28 22 45 44 49       printf("EDI
0f90: 54 45 44 20 20 20 20 25 73 5c 6e 22 2c 20 7a 50  TED    %s\n", zP
0fa0: 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65  athname);.    }e
0fb0: 6c 73 65 7b 0a 20 20 20 20 20 20 70 72 69 6e 74  lse{.      print
0fc0: 66 28 22 55 4e 43 48 41 4e 47 45 44 20 25 73 5c  f("UNCHANGED %s\
0fd0: 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b 0a  n", zPathname);.
0fe0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66      }.  }.  db_f
0ff0: 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 7d 0a 0a  inalize(&q);.}..
1000: 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 65  /*.** COMMAND: e
1010: 78 74 72 61 0a 2a 2a 20 55 73 61 67 65 3a 20 25  xtra.** Usage: %
1020: 66 6f 73 73 69 6c 20 65 78 74 72 61 0a 2a 2a 20  fossil extra.** 
1030: 50 72 69 6e 74 20 61 20 6c 69 73 74 20 6f 66 20  Print a list of 
1040: 61 6c 6c 20 66 69 6c 65 73 20 69 6e 20 74 68 65  all files in the
1050: 20 73 6f 75 72 63 65 20 74 72 65 65 20 74 68 61   source tree tha
1060: 74 20 61 72 65 20 6e 6f 74 20 70 61 72 74 20 6f  t are not part o
1070: 66 0a 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74  f.** the current
1080: 20 63 68 65 63 6b 6f 75 74 2e 20 20 53 65 65 20   checkout.  See 
1090: 61 6c 73 6f 20 74 68 65 20 22 63 6c 65 61 6e 22  also the "clean"
10a0: 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 76 6f 69   command..*/.voi
10b0: 64 20 65 78 74 72 61 5f 63 6d 64 28 76 6f 69 64  d extra_cmd(void
10c0: 29 7b 0a 20 20 42 6c 6f 62 20 70 61 74 68 3b 0a  ){.  Blob path;.
10d0: 20 20 53 74 6d 74 20 71 3b 0a 20 20 64 62 5f 6d    Stmt q;.  db_m
10e0: 75 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72  ust_be_within_tr
10f0: 65 65 28 29 3b 0a 20 20 64 62 5f 6d 75 6c 74 69  ee();.  db_multi
1100: 5f 65 78 65 63 28 22 43 52 45 41 54 45 20 54 45  _exec("CREATE TE
1110: 4d 50 20 54 41 42 4c 45 20 73 66 69 6c 65 28 78  MP TABLE sfile(x
1120: 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
1130: 59 29 22 29 3b 0a 20 20 63 68 64 69 72 28 67 2e  Y)");.  chdir(g.
1140: 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20 20 62  zLocalRoot);.  b
1150: 6c 6f 62 5f 7a 65 72 6f 28 26 70 61 74 68 29 3b  lob_zero(&path);
1160: 0a 20 20 76 66 69 6c 65 5f 73 63 61 6e 28 30 2c  .  vfile_scan(0,
1170: 20 26 70 61 74 68 29 3b 0a 20 20 64 62 5f 70 72   &path);.  db_pr
1180: 65 70 61 72 65 28 26 71 2c 20 0a 20 20 20 20 20  epare(&q, .     
1190: 20 22 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20   "SELECT x FROM 
11a0: 73 66 69 6c 65 22 0a 20 20 20 20 20 20 22 20 57  sfile".      " W
11b0: 48 45 52 45 20 78 20 4e 4f 54 20 49 4e 20 28 27  HERE x NOT IN ('
11c0: 6d 61 6e 69 66 65 73 74 27 2c 27 6d 61 6e 69 66  manifest','manif
11d0: 65 73 74 2e 75 75 69 64 27 2c 27 5f 46 4f 53 53  est.uuid','_FOSS
11e0: 49 4c 5f 27 29 22 0a 20 20 20 20 20 20 22 20 4f  IL_')".      " O
11f0: 52 44 45 52 20 42 59 20 31 22 29 3b 0a 20 20 77  RDER BY 1");.  w
1200: 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71  hile( db_step(&q
1210: 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
1220: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c  .    printf("%s\
1230: 6e 22 2c 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65  n", db_column_te
1240: 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 20 7d 0a  xt(&q, 0));.  }.
1250: 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71    db_finalize(&q
1260: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d  );.}../*.** COMM
1270: 41 4e 44 3a 20 63 6c 65 61 6e 0a 2a 2a 20 55 73  AND: clean.** Us
1280: 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 63 6c 65  age: %fossil cle
1290: 61 6e 20 3f 2d 61 6c 6c 0a 2a 2a 20 44 65 6c 65  an ?-all.** Dele
12a0: 74 65 20 61 6c 6c 20 22 65 78 74 72 61 22 20 66  te all "extra" f
12b0: 69 6c 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72  iles in the sour
12c0: 63 65 20 74 72 65 65 2e 20 20 22 45 78 74 72 61  ce tree.  "Extra
12d0: 22 20 66 69 6c 65 73 20 61 72 65 0a 2a 2a 20 66  " files are.** f
12e0: 69 6c 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f  iles that are no
12f0: 74 20 6f 66 66 69 63 69 61 6c 6c 79 20 70 61 72  t officially par
1300: 74 20 6f 66 20 74 68 65 20 63 68 65 63 6b 6f 75  t of the checkou
1310: 74 2e 20 20 53 65 65 20 61 6c 73 6f 0a 2a 2a 20  t.  See also.** 
1320: 74 68 65 20 22 65 78 74 72 61 22 20 63 6f 6d 6d  the "extra" comm
1330: 61 6e 64 2e 20 54 68 69 73 20 6f 70 65 72 61 74  and. This operat
1340: 69 6f 6e 20 63 61 6e 6e 6f 74 20 62 65 20 75 6e  ion cannot be un
1350: 64 6f 6e 65 2e 20 0a 2a 2a 0a 2a 2a 20 59 6f 75  done. .**.** You
1360: 20 77 69 6c 6c 20 62 65 20 70 72 6f 6d 70 74 65   will be prompte
1370: 64 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e  d before removin
1380: 67 20 65 61 63 68 20 66 69 6c 65 2e 20 49 66 20  g each file. If 
1390: 79 6f 75 20 61 72 65 0a 2a 2a 20 73 75 72 65 20  you are.** sure 
13a0: 79 6f 75 20 77 69 73 68 20 74 6f 20 72 65 6d 6f  you wish to remo
13b0: 76 65 20 61 6c 6c 20 22 65 78 74 72 61 22 20 66  ve all "extra" f
13c0: 69 6c 65 73 20 79 6f 75 20 63 61 6e 20 73 70 65  iles you can spe
13d0: 63 69 66 79 20 74 68 65 0a 2a 2a 20 6f 70 74 69  cify the.** opti
13e0: 6f 6e 61 6c 20 2d 61 6c 6c 20 66 6c 61 67 2e 0a  onal -all flag..
13f0: 2a 2f 0a 76 6f 69 64 20 63 6c 65 61 6e 5f 63 6d  */.void clean_cm
1400: 64 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 61  d(void){.  int a
1410: 6c 6c 46 6c 61 67 3b 0a 20 20 42 6c 6f 62 20 70  llFlag;.  Blob p
1420: 61 74 68 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 20  ath;.  Stmt q;. 
1430: 20 61 6c 6c 46 6c 61 67 20 3d 20 66 69 6e 64 5f   allFlag = find_
1440: 6f 70 74 69 6f 6e 28 22 61 6c 6c 22 2c 22 61 22  option("all","a"
1450: 2c 30 29 21 3d 30 3b 0a 20 20 64 62 5f 6d 75 73  ,0)!=0;.  db_mus
1460: 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65 65  t_be_within_tree
1470: 28 29 3b 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65  ();.  db_multi_e
1480: 78 65 63 28 22 43 52 45 41 54 45 20 54 45 4d 50  xec("CREATE TEMP
1490: 20 54 41 42 4c 45 20 73 66 69 6c 65 28 78 20 54   TABLE sfile(x T
14a0: 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 29  EXT PRIMARY KEY)
14b0: 22 29 3b 0a 20 20 63 68 64 69 72 28 67 2e 7a 4c  ");.  chdir(g.zL
14c0: 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20 20 62 6c 6f  ocalRoot);.  blo
14d0: 62 5f 7a 65 72 6f 28 26 70 61 74 68 29 3b 0a 20  b_zero(&path);. 
14e0: 20 76 66 69 6c 65 5f 73 63 61 6e 28 30 2c 20 26   vfile_scan(0, &
14f0: 70 61 74 68 29 3b 0a 20 20 64 62 5f 70 72 65 70  path);.  db_prep
1500: 61 72 65 28 26 71 2c 20 0a 20 20 20 20 20 20 22  are(&q, .      "
1510: 53 45 4c 45 43 54 20 25 51 20 7c 7c 20 78 20 46  SELECT %Q || x F
1520: 52 4f 4d 20 73 66 69 6c 65 22 0a 20 20 20 20 20  ROM sfile".     
1530: 20 22 20 57 48 45 52 45 20 78 20 4e 4f 54 20 49   " WHERE x NOT I
1540: 4e 20 28 27 6d 61 6e 69 66 65 73 74 27 2c 27 6d  N ('manifest','m
1550: 61 6e 69 66 65 73 74 2e 75 75 69 64 27 2c 27 5f  anifest.uuid','_
1560: 46 4f 53 53 49 4c 5f 27 29 22 0a 20 20 20 20 20  FOSSIL_')".     
1570: 20 22 20 4f 52 44 45 52 20 42 59 20 31 22 2c 20   " ORDER BY 1", 
1580: 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20  g.zLocalRoot);. 
1590: 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28   while( db_step(
15a0: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  &q)==SQLITE_ROW 
15b0: 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 6c 46 6c  ){.    if( allFl
15c0: 61 67 20 29 7b 0a 20 20 20 20 20 20 75 6e 6c 69  ag ){.      unli
15d0: 6e 6b 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78  nk(db_column_tex
15e0: 74 28 26 71 2c 20 30 29 29 3b 0a 20 20 20 20 20  t(&q, 0));.     
15f0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d   continue;.    }
1600: 0a 20 20 20 20 0a 20 20 20 20 42 6c 6f 62 20 61  .    .    Blob a
1610: 6e 73 3b 0a 20 20 20 20 63 68 61 72 20 2a 70 72  ns;.    char *pr
1620: 6f 6d 70 74 20 3d 20 6d 70 72 69 6e 74 66 28 22  ompt = mprintf("
1630: 72 65 6d 6f 76 65 20 75 6e 6d 61 6e 61 67 65 64  remove unmanaged
1640: 20 66 69 6c 65 20 5c 22 25 73 5c 22 20 5b 79 2f   file \"%s\" [y/
1650: 4e 5d 3f 20 22 2c 0a 20 20 20 20 20 20 64 62 5f  N]? ",.      db_
1660: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20  column_text(&q, 
1670: 30 29 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65  0));.    blob_ze
1680: 72 6f 28 26 61 6e 73 29 3b 0a 20 20 20 20 70 72  ro(&ans);.    pr
1690: 6f 6d 70 74 5f 75 73 65 72 28 70 72 6f 6d 70 74  ompt_user(prompt
16a0: 2c 20 26 61 6e 73 29 3b 0a 20 20 20 20 69 66 28  , &ans);.    if(
16b0: 20 62 6c 6f 62 5f 73 74 72 28 26 61 6e 73 29 5b   blob_str(&ans)[
16c0: 30 5d 3d 3d 27 79 27 20 29 7b 0a 20 20 20 20 20  0]=='y' ){.     
16d0: 20 75 6e 6c 69 6e 6b 28 64 62 5f 63 6f 6c 75 6d   unlink(db_colum
16e0: 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 29 3b 0a  n_text(&q, 0));.
16f0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66      }.  }.  db_f
1700: 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 7d 0a 0a  inalize(&q);.}..
1710: 2f 2a 0a 2a 2a 20 50 72 65 70 61 72 65 20 61 20  /*.** Prepare a 
1720: 63 6f 6d 6d 69 74 20 63 6f 6d 6d 65 6e 74 2e 20  commit comment. 
1730: 20 4c 65 74 20 74 68 65 20 75 73 65 72 20 6d 6f   Let the user mo
1740: 64 69 66 79 20 69 74 20 75 73 69 6e 67 20 74 68  dify it using th
1750: 65 0a 2a 2a 20 65 64 69 74 6f 72 20 73 70 65 63  e.** editor spec
1760: 69 66 69 65 64 20 69 6e 20 74 68 65 20 67 6c 6f  ified in the glo
1770: 62 61 6c 5f 63 6f 6e 66 69 67 20 74 61 62 6c 65  bal_config table
1780: 20 6f 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 68   or either.** th
1790: 65 20 56 49 53 55 41 4c 20 6f 72 20 45 44 49 54  e VISUAL or EDIT
17a0: 4f 52 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  OR environment v
17b0: 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ariable..**.** S
17c0: 74 6f 72 65 20 74 68 65 20 66 69 6e 61 6c 20 63  tore the final c
17d0: 6f 6d 6d 69 74 20 63 6f 6d 6d 65 6e 74 20 69 6e  ommit comment in
17e0: 20 70 43 6f 6d 6d 65 6e 74 2e 20 20 70 43 6f 6d   pComment.  pCom
17f0: 6d 65 6e 74 20 69 73 20 61 73 73 75 6d 65 64 0a  ment is assumed.
1800: 2a 2a 20 74 6f 20 62 65 20 75 6e 69 6e 69 74 69  ** to be uniniti
1810: 61 6c 69 7a 65 64 20 2d 20 61 6e 79 20 70 72 69  alized - any pri
1820: 6f 72 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 76  or content is ov
1830: 65 72 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  erwritten..*/.st
1840: 61 74 69 63 20 76 6f 69 64 20 70 72 65 70 61 72  atic void prepar
1850: 65 5f 63 6f 6d 6d 69 74 5f 63 6f 6d 6d 65 6e 74  e_commit_comment
1860: 28 42 6c 6f 62 20 2a 70 43 6f 6d 6d 65 6e 74 29  (Blob *pComment)
1870: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1880: 7a 45 64 69 74 6f 72 3b 0a 20 20 63 68 61 72 20  zEditor;.  char 
1890: 2a 7a 43 6d 64 3b 0a 20 20 63 68 61 72 20 2a 7a  *zCmd;.  char *z
18a0: 46 69 6c 65 3b 0a 20 20 42 6c 6f 62 20 74 65 78  File;.  Blob tex
18b0: 74 2c 20 6c 69 6e 65 3b 0a 20 20 63 68 61 72 20  t, line;.  char 
18c0: 2a 7a 43 6f 6d 6d 65 6e 74 3b 0a 20 20 69 6e 74  *zComment;.  int
18d0: 20 69 3b 0a 20 20 62 6c 6f 62 5f 73 65 74 28 26   i;.  blob_set(&
18e0: 74 65 78 74 2c 0a 20 20 20 20 22 5c 6e 23 20 45  text,.    "\n# E
18f0: 6e 74 65 72 20 63 6f 6d 6d 65 6e 74 73 20 6f 6e  nter comments on
1900: 20 74 68 69 73 20 63 6f 6d 6d 69 74 2e 20 20 4c   this commit.  L
1910: 69 6e 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ines beginning w
1920: 69 74 68 20 23 20 61 72 65 20 69 67 6e 6f 72 65  ith # are ignore
1930: 64 5c 6e 22 0a 20 20 20 20 22 23 5c 6e 22 0a 20  d\n".    "#\n". 
1940: 20 29 3b 0a 20 20 73 74 61 74 75 73 5f 72 65 70   );.  status_rep
1950: 6f 72 74 28 26 74 65 78 74 2c 20 22 23 20 22 29  ort(&text, "# ")
1960: 3b 0a 20 20 7a 45 64 69 74 6f 72 20 3d 20 64 62  ;.  zEditor = db
1970: 5f 67 6c 6f 62 61 6c 5f 67 65 74 28 22 65 64 69  _global_get("edi
1980: 74 6f 72 22 2c 20 30 29 3b 0a 20 20 69 66 28 20  tor", 0);.  if( 
1990: 7a 45 64 69 74 6f 72 3d 3d 30 20 29 7b 0a 20 20  zEditor==0 ){.  
19a0: 20 20 7a 45 64 69 74 6f 72 20 3d 20 67 65 74 65    zEditor = gete
19b0: 6e 76 28 22 56 49 53 55 41 4c 22 29 3b 0a 20 20  nv("VISUAL");.  
19c0: 7d 0a 20 20 69 66 28 20 7a 45 64 69 74 6f 72 3d  }.  if( zEditor=
19d0: 3d 30 20 29 7b 0a 20 20 20 20 7a 45 64 69 74 6f  =0 ){.    zEdito
19e0: 72 20 3d 20 67 65 74 65 6e 76 28 22 45 44 49 54  r = getenv("EDIT
19f0: 4f 52 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  OR");.  }.  if( 
1a00: 7a 45 64 69 74 6f 72 3d 3d 30 20 29 7b 0a 20 20  zEditor==0 ){.  
1a10: 20 20 7a 45 64 69 74 6f 72 20 3d 20 22 65 64 22    zEditor = "ed"
1a20: 3b 0a 20 20 7d 0a 20 20 7a 46 69 6c 65 20 3d 20  ;.  }.  zFile = 
1a30: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45  db_text(0, "SELE
1a40: 43 54 20 27 25 71 63 69 2d 63 6f 6d 6d 65 6e 74  CT '%qci-comment
1a50: 2d 27 20 7c 7c 20 68 65 78 28 72 61 6e 64 6f 6d  -' || hex(random
1a60: 62 6c 6f 62 28 36 29 29 20 7c 7c 20 27 2e 74 78  blob(6)) || '.tx
1a70: 74 27 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  t'",.           
1a80: 20 20 20 20 20 20 20 20 67 2e 7a 4c 6f 63 61 6c          g.zLocal
1a90: 52 6f 6f 74 29 3b 0a 20 20 62 6c 6f 62 5f 77 72  Root);.  blob_wr
1aa0: 69 74 65 5f 74 6f 5f 66 69 6c 65 28 26 74 65 78  ite_to_file(&tex
1ab0: 74 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 7a 43 6d  t, zFile);.  zCm
1ac0: 64 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 20  d = mprintf("%s 
1ad0: 5c 22 25 73 5c 22 22 2c 20 7a 45 64 69 74 6f 72  \"%s\"", zEditor
1ae0: 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 70 72 69 6e  , zFile);.  prin
1af0: 74 66 28 22 25 73 5c 6e 22 2c 20 7a 43 6d 64 29  tf("%s\n", zCmd)
1b00: 3b 0a 20 20 69 66 28 20 73 79 73 74 65 6d 28 7a  ;.  if( system(z
1b10: 43 6d 64 29 20 29 7b 0a 20 20 20 20 66 6f 73 73  Cmd) ){.    foss
1b20: 69 6c 5f 70 61 6e 69 63 28 22 65 64 69 74 6f 72  il_panic("editor
1b30: 20 61 62 6f 72 74 65 64 22 29 3b 0a 20 20 7d 0a   aborted");.  }.
1b40: 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 74 65    blob_reset(&te
1b50: 78 74 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 61 64  xt);.  blob_read
1b60: 5f 66 72 6f 6d 5f 66 69 6c 65 28 26 74 65 78 74  _from_file(&text
1b70: 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 75 6e 6c 69  , zFile);.  unli
1b80: 6e 6b 28 7a 46 69 6c 65 29 3b 0a 20 20 66 72 65  nk(zFile);.  fre
1b90: 65 28 7a 46 69 6c 65 29 3b 0a 20 20 62 6c 6f 62  e(zFile);.  blob
1ba0: 5f 7a 65 72 6f 28 70 43 6f 6d 6d 65 6e 74 29 3b  _zero(pComment);
1bb0: 0a 20 20 77 68 69 6c 65 28 20 62 6c 6f 62 5f 6c  .  while( blob_l
1bc0: 69 6e 65 28 26 74 65 78 74 2c 20 26 6c 69 6e 65  ine(&text, &line
1bd0: 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20  ) ){.    int i, 
1be0: 6e 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a  n;.    char *z;.
1bf0: 20 20 20 20 6e 20 3d 20 62 6c 6f 62 5f 73 69 7a      n = blob_siz
1c00: 65 28 26 6c 69 6e 65 29 3b 0a 20 20 20 20 7a 20  e(&line);.    z 
1c10: 3d 20 62 6c 6f 62 5f 62 75 66 66 65 72 28 26 6c  = blob_buffer(&l
1c20: 69 6e 65 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  ine);.    for(i=
1c30: 30 3b 20 69 3c 6e 20 26 26 20 69 73 73 70 61 63  0; i<n && isspac
1c40: 65 28 7a 5b 69 5d 29 3b 20 20 69 2b 2b 29 7b 7d  e(z[i]);  i++){}
1c50: 0a 20 20 20 20 69 66 28 20 69 3c 6e 20 26 26 20  .    if( i<n && 
1c60: 7a 5b 69 5d 3d 3d 27 23 27 20 29 20 63 6f 6e 74  z[i]=='#' ) cont
1c70: 69 6e 75 65 3b 0a 20 20 20 20 69 66 28 20 69 3c  inue;.    if( i<
1c80: 6e 20 7c 7c 20 62 6c 6f 62 5f 73 69 7a 65 28 70  n || blob_size(p
1c90: 43 6f 6d 6d 65 6e 74 29 3e 30 20 29 7b 0a 20 20  Comment)>0 ){.  
1ca0: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66      blob_appendf
1cb0: 28 70 43 6f 6d 6d 65 6e 74 2c 20 22 25 62 22 2c  (pComment, "%b",
1cc0: 20 26 6c 69 6e 65 29 3b 0a 20 20 20 20 7d 0a 20   &line);.    }. 
1cd0: 20 7d 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28   }.  blob_reset(
1ce0: 26 74 65 78 74 29 3b 0a 20 20 7a 43 6f 6d 6d 65  &text);.  zComme
1cf0: 6e 74 20 3d 20 62 6c 6f 62 5f 73 74 72 28 70 43  nt = blob_str(pC
1d00: 6f 6d 6d 65 6e 74 29 3b 0a 20 20 69 20 3d 20 73  omment);.  i = s
1d10: 74 72 6c 65 6e 28 7a 43 6f 6d 6d 65 6e 74 29 3b  trlen(zComment);
1d20: 0a 20 20 77 68 69 6c 65 28 20 69 3e 30 20 26 26  .  while( i>0 &&
1d30: 20 69 73 73 70 61 63 65 28 7a 43 6f 6d 6d 65 6e   isspace(zCommen
1d40: 74 5b 69 2d 31 5d 29 20 29 7b 20 69 2d 2d 3b 20  t[i-1]) ){ i--; 
1d50: 7d 0a 20 20 62 6c 6f 62 5f 72 65 73 69 7a 65 28  }.  blob_resize(
1d60: 70 43 6f 6d 6d 65 6e 74 2c 20 69 29 3b 0a 7d 0a  pComment, i);.}.
1d70: 0a 2f 2a 0a 2a 2a 20 50 6f 70 75 6c 61 74 65 20  ./*.** Populate 
1d80: 74 68 65 20 47 6c 6f 62 61 6c 2e 61 43 6f 6d 6d  the Global.aComm
1d90: 69 74 46 69 6c 65 5b 5d 20 62 61 73 65 64 20 6f  itFile[] based o
1da0: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  n the command li
1db0: 6e 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  ne arguments.** 
1dc0: 74 6f 20 61 20 5b 63 6f 6d 6d 69 74 5d 20 63 6f  to a [commit] co
1dd0: 6d 6d 61 6e 64 2e 20 47 6c 6f 62 61 6c 2e 61 43  mmand. Global.aC
1de0: 6f 6d 6d 69 74 46 69 6c 65 20 69 73 20 61 6e 20  ommitFile is an 
1df0: 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
1e00: 73 0a 2a 2a 20 73 69 7a 65 64 20 61 74 20 28 4e  s.** sized at (N
1e10: 2b 31 29 2c 20 77 68 65 72 65 20 4e 20 69 73 20  +1), where N is 
1e20: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
1e30: 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74  guments passed t
1e40: 6f 20 5b 63 6f 6d 6d 69 74 5d 2e 0a 2a 2a 20 54  o [commit]..** T
1e50: 68 65 20 63 6f 6e 74 65 6e 74 73 20 61 72 65 20  he contents are 
1e60: 74 68 65 20 5b 69 64 5d 20 76 61 6c 75 65 73 20  the [id] values 
1e70: 66 72 6f 6d 20 74 68 65 20 76 66 69 6c 65 20 74  from the vfile t
1e80: 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
1e90: 6e 67 0a 2a 2a 20 74 6f 20 74 68 65 20 66 69 6c  ng.** to the fil
1ea0: 65 6e 61 6d 65 73 20 70 61 73 73 65 64 20 61 73  enames passed as
1eb0: 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a   arguments..**.*
1ec0: 2a 20 54 68 65 20 6c 61 73 74 20 65 6c 65 6d 65  * The last eleme
1ed0: 6e 74 20 6f 66 20 61 43 6f 6d 6d 69 74 46 69 6c  nt of aCommitFil
1ee0: 65 5b 5d 20 69 73 20 61 6c 77 61 79 73 20 30 20  e[] is always 0 
1ef0: 2d 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  - indicating the
1f00: 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 61   end.** of the a
1f10: 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  rray..**.** If t
1f20: 68 65 72 65 20 77 65 72 65 20 6e 6f 20 61 72 67  here were no arg
1f30: 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f  uments passed to
1f40: 20 5b 63 6f 6d 6d 69 74 5d 2c 20 61 43 6f 6d 6d   [commit], aComm
1f50: 69 74 46 69 6c 65 20 69 73 20 6e 6f 74 0a 2a 2a  itFile is not.**
1f60: 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 72   allocated and r
1f70: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 20 4f 74 68  emains NULL. Oth
1f80: 65 72 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  er parts of the 
1f90: 63 6f 64 65 20 69 6e 74 65 72 70 72 65 74 20 74  code interpret t
1fa0: 68 69 73 0a 2a 2a 20 74 6f 20 6d 65 61 6e 20 22  his.** to mean "
1fb0: 61 6c 6c 20 66 69 6c 65 73 22 2e 0a 2a 2f 0a 76  all files"..*/.v
1fc0: 6f 69 64 20 73 65 6c 65 63 74 5f 63 6f 6d 6d 69  oid select_commi
1fd0: 74 5f 66 69 6c 65 73 28 76 6f 69 64 29 7b 0a 20  t_files(void){. 
1fe0: 20 69 66 28 20 67 2e 61 72 67 63 3e 32 20 29 7b   if( g.argc>2 ){
1ff0: 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20  .    int ii;.   
2000: 20 42 6c 6f 62 20 62 3b 0a 20 20 20 20 62 6c 6f   Blob b;.    blo
2010: 62 5f 7a 65 72 6f 28 26 62 29 3b 0a 20 20 20 20  b_zero(&b);.    
2020: 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 20 3d 20  g.aCommitFile = 
2030: 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 69 6e  malloc(sizeof(in
2040: 74 29 2a 28 67 2e 61 72 67 63 2d 31 29 29 3b 0a  t)*(g.argc-1));.
2050: 0a 20 20 20 20 66 6f 72 28 69 69 3d 32 3b 20 69  .    for(ii=2; i
2060: 69 3c 67 2e 61 72 67 63 3b 20 69 69 2b 2b 29 7b  i<g.argc; ii++){
2070: 0a 20 20 20 20 20 20 69 6e 74 20 69 49 64 3b 0a  .      int iId;.
2080: 20 20 20 20 20 20 69 66 28 20 21 66 69 6c 65 5f        if( !file_
2090: 74 72 65 65 5f 6e 61 6d 65 28 67 2e 61 72 67 76  tree_name(g.argv
20a0: 5b 69 69 5d 2c 20 26 62 29 20 29 7b 0a 20 20 20  [ii], &b) ){.   
20b0: 20 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61       fossil_fata
20c0: 6c 28 22 66 69 6c 65 20 69 73 20 6e 6f 74 20 69  l("file is not i
20d0: 6e 20 74 72 65 65 3a 20 25 73 22 2c 20 67 2e 61  n tree: %s", g.a
20e0: 72 67 76 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20  rgv[ii]);.      
20f0: 7d 0a 20 20 20 20 20 20 69 49 64 20 3d 20 64 62  }.      iId = db
2100: 5f 69 6e 74 28 2d 31 2c 20 22 53 45 4c 45 43 54  _int(-1, "SELECT
2110: 20 69 64 20 46 52 4f 4d 20 76 66 69 6c 65 20 57   id FROM vfile W
2120: 48 45 52 45 20 70 61 74 68 6e 61 6d 65 3d 25 51  HERE pathname=%Q
2130: 22 2c 20 62 6c 6f 62 5f 73 74 72 28 26 62 29 29  ", blob_str(&b))
2140: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 49 64 3c  ;.      if( iId<
2150: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 73  0 ){.        fos
2160: 73 69 6c 5f 66 61 74 61 6c 28 22 66 6f 73 73 69  sil_fatal("fossi
2170: 6c 20 6b 6e 6f 77 73 20 6e 6f 74 68 69 6e 67 20  l knows nothing 
2180: 61 62 6f 75 74 3a 20 25 73 22 2c 20 67 2e 61 72  about: %s", g.ar
2190: 67 76 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 7d  gv[ii]);.      }
21a0: 0a 20 20 20 20 20 20 67 2e 61 43 6f 6d 6d 69 74  .      g.aCommit
21b0: 46 69 6c 65 5b 69 69 2d 32 5d 20 3d 20 69 49 64  File[ii-2] = iId
21c0: 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 72 65 73  ;.      blob_res
21d0: 65 74 28 26 62 29 3b 0a 20 20 20 20 7d 0a 20 20  et(&b);.    }.  
21e0: 20 20 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 5b    g.aCommitFile[
21f0: 69 69 2d 32 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  ii-2] = 0;.  }.}
2200: 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a  ../*.** COMMAND:
2210: 20 63 6f 6d 6d 69 74 0a 2a 2a 0a 2a 2a 20 55 73   commit.**.** Us
2220: 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 63 6f 6d  age: %fossil com
2230: 6d 69 74 20 3f 2d 6d 20 43 4f 4d 4d 45 4e 54 3f  mit ?-m COMMENT?
2240: 20 3f 2d 2d 6e 6f 73 69 67 6e 3f 20 3f 46 49 4c   ?--nosign? ?FIL
2250: 45 2e 2e 2e 3f 0a 2a 2a 0a 2a 2a 20 43 72 65 61  E...?.**.** Crea
2260: 74 65 20 61 20 6e 65 77 20 76 65 72 73 69 6f 6e  te a new version
2270: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20   containing all 
2280: 6f 66 20 74 68 65 20 63 68 61 6e 67 65 73 20 69  of the changes i
2290: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a  n the current.**
22a0: 20 63 68 65 63 6b 6f 75 74 2e 20 20 59 6f 75 20   checkout.  You 
22b0: 77 69 6c 6c 20 62 65 20 70 72 6f 6d 70 74 65 64  will be prompted
22c0: 20 74 6f 20 65 6e 74 65 72 20 61 20 63 68 65 63   to enter a chec
22d0: 6b 2d 69 6e 20 63 6f 6d 6d 65 6e 74 20 75 6e 6c  k-in comment unl
22e0: 65 73 73 0a 2a 2a 20 74 68 65 20 22 2d 6d 22 20  ess.** the "-m" 
22f0: 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  option is used t
2300: 6f 20 73 70 65 63 69 66 79 20 61 20 63 6f 6d 6d  o specify a comm
2310: 61 6e 64 20 6c 69 6e 65 2e 20 20 59 6f 75 20 77  and line.  You w
2320: 69 6c 6c 20 62 65 0a 2a 2a 20 70 72 6f 6d 70 74  ill be.** prompt
2330: 65 64 20 66 6f 72 20 79 6f 75 72 20 47 50 47 20  ed for your GPG 
2340: 70 61 73 73 70 68 72 61 73 65 20 69 6e 20 6f 72  passphrase in or
2350: 64 65 72 20 74 6f 20 73 69 67 6e 20 74 68 65 20  der to sign the 
2360: 6e 65 77 20 6d 61 6e 69 66 65 73 74 0a 2a 2a 20  new manifest.** 
2370: 75 6e 6c 65 73 73 20 74 68 65 20 22 2d 2d 6e 6f  unless the "--no
2380: 73 69 67 6e 22 20 6f 70 74 69 6f 6e 73 20 69 73  sign" options is
2390: 20 75 73 65 64 2e 20 20 41 6c 6c 20 66 69 6c 65   used.  All file
23a0: 73 20 74 68 61 74 20 68 61 76 65 0a 2a 2a 20 63  s that have.** c
23b0: 68 61 6e 67 65 64 20 77 69 6c 6c 20 62 65 20 63  hanged will be c
23c0: 6f 6d 6d 69 74 74 65 64 20 75 6e 6c 65 73 73 20  ommitted unless 
23d0: 73 6f 6d 65 20 73 75 62 73 65 74 20 6f 66 20 66  some subset of f
23e0: 69 6c 65 73 20 69 73 20 73 70 65 63 69 66 69 65  iles is specifie
23f0: 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  d.** on the comm
2400: 61 6e 64 20 6c 69 6e 65 2e 0a 2a 2f 0a 76 6f 69  and line..*/.voi
2410: 64 20 63 6f 6d 6d 69 74 5f 63 6d 64 28 76 6f 69  d commit_cmd(voi
2420: 64 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  d){.  int rc;.  
2430: 69 6e 74 20 76 69 64 2c 20 6e 72 69 64 2c 20 6e  int vid, nrid, n
2440: 76 69 64 3b 0a 20 20 42 6c 6f 62 20 63 6f 6d 6d  vid;.  Blob comm
2450: 65 6e 74 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ent;.  const cha
2460: 72 20 2a 7a 43 6f 6d 6d 65 6e 74 3b 0a 20 20 53  r *zComment;.  S
2470: 74 6d 74 20 71 3b 0a 20 20 53 74 6d 74 20 71 32  tmt q;.  Stmt q2
2480: 3b 0a 20 20 63 68 61 72 20 2a 7a 55 75 69 64 2c  ;.  char *zUuid,
2490: 20 2a 7a 44 61 74 65 3b 0a 20 20 69 6e 74 20 6e   *zDate;.  int n
24a0: 6f 53 69 67 6e 20 3d 20 30 3b 20 20 20 20 20 20  oSign = 0;      
24b0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 6f 6d 69    /* True to omi
24c0: 74 20 73 69 67 6e 69 6e 67 20 74 68 65 20 6d 61  t signing the ma
24d0: 6e 69 66 65 73 74 20 75 73 69 6e 67 20 47 50 47  nifest using GPG
24e0: 20 2a 2f 0a 20 20 69 6e 74 20 69 73 41 4d 65 72   */.  int isAMer
24f0: 67 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ge = 0;      /* 
2500: 54 72 75 65 20 69 66 20 63 68 65 63 6b 69 6e 67  True if checking
2510: 20 69 6e 20 61 20 6d 65 72 67 65 20 2a 2f 0a 20   in a merge */. 
2520: 20 63 68 61 72 20 2a 7a 4d 61 6e 69 66 65 73 74   char *zManifest
2530: 46 69 6c 65 3b 20 20 20 2f 2a 20 4e 61 6d 65 20  File;   /* Name 
2540: 6f 66 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20  of the manifest 
2550: 66 69 6c 65 20 2a 2f 0a 20 20 42 6c 6f 62 20 6d  file */.  Blob m
2560: 61 6e 69 66 65 73 74 3b 0a 20 20 42 6c 6f 62 20  anifest;.  Blob 
2570: 6d 75 75 69 64 3b 20 20 20 20 20 20 20 20 20 20  muuid;          
2580: 20 20 2f 2a 20 4d 61 6e 69 66 65 73 74 20 75 75    /* Manifest uu
2590: 69 64 20 2a 2f 0a 20 20 42 6c 6f 62 20 6d 63 6b  id */.  Blob mck
25a0: 73 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 2f  sum;           /
25b0: 2a 20 53 65 6c 66 2d 63 68 65 63 6b 73 75 6d 20  * Self-checksum 
25c0: 6f 6e 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20  on the manifest 
25d0: 2a 2f 0a 20 20 42 6c 6f 62 20 63 6b 73 75 6d 31  */.  Blob cksum1
25e0: 2c 20 63 6b 73 75 6d 32 3b 20 20 20 2f 2a 20 42  , cksum2;   /* B
25f0: 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20  efore and after 
2600: 63 6f 6d 6d 69 74 20 63 68 65 63 6b 73 75 6d 73  commit checksums
2610: 20 2a 2f 0a 20 20 42 6c 6f 62 20 63 6b 73 75 6d   */.  Blob cksum
2620: 31 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  1b;          /* 
2630: 43 68 65 63 6b 73 75 6d 20 72 65 63 6f 72 64 65  Checksum recorde
2640: 64 20 69 6e 20 74 68 65 20 6d 61 6e 69 66 65 73  d in the manifes
2650: 74 20 2a 2f 0a 20 0a 20 20 6e 6f 53 69 67 6e 20  t */. .  noSign 
2660: 3d 20 66 69 6e 64 5f 6f 70 74 69 6f 6e 28 22 6e  = find_option("n
2670: 6f 73 69 67 6e 22 2c 22 22 2c 30 29 21 3d 30 3b  osign","",0)!=0;
2680: 0a 20 20 7a 43 6f 6d 6d 65 6e 74 20 3d 20 66 69  .  zComment = fi
2690: 6e 64 5f 6f 70 74 69 6f 6e 28 22 63 6f 6d 6d 65  nd_option("comme
26a0: 6e 74 22 2c 22 6d 22 2c 31 29 3b 0a 20 20 64 62  nt","m",1);.  db
26b0: 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f  _must_be_within_
26c0: 74 72 65 65 28 29 3b 0a 20 20 6e 6f 53 69 67 6e  tree();.  noSign
26d0: 20 3d 20 64 62 5f 67 65 74 5f 69 6e 74 28 22 6f   = db_get_int("o
26e0: 6d 69 74 2d 63 69 2d 73 69 67 22 2c 20 30 29 7c  mit-ci-sig", 0)|
26f0: 6e 6f 53 69 67 6e 3b 0a 20 20 76 65 72 69 66 79  noSign;.  verify
2700: 5f 61 6c 6c 5f 6f 70 74 69 6f 6e 73 28 29 3b 0a  _all_options();.
2710: 0a 20 20 2f 2a 20 54 68 65 72 65 20 61 72 65 20  .  /* There are 
2720: 74 77 6f 20 77 61 79 73 20 74 68 69 73 20 63 6f  two ways this co
2730: 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 65 78 65  mmand may be exe
2740: 63 75 74 65 64 2e 20 49 66 20 74 68 65 72 65 20  cuted. If there 
2750: 61 72 65 0a 20 20 2a 2a 20 6e 6f 20 61 72 67 75  are.  ** no argu
2760: 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ments following 
2770: 74 68 65 20 77 6f 72 64 20 22 63 6f 6d 6d 69 74  the word "commit
2780: 22 2c 20 74 68 65 6e 20 61 6c 6c 20 6d 6f 64 69  ", then all modi
2790: 66 69 65 64 20 66 69 6c 65 73 0a 20 20 2a 2a 20  fied files.  ** 
27a0: 69 6e 20 74 68 65 20 63 68 65 63 6b 65 64 20 6f  in the checked o
27b0: 75 74 20 64 69 72 65 63 74 6f 72 79 20 61 72 65  ut directory are
27c0: 20 63 6f 6d 6d 69 74 74 65 64 2e 20 49 66 20 6f   committed. If o
27d0: 6e 65 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d  ne or more argum
27e0: 65 6e 74 73 0a 20 20 2a 2a 20 66 6f 6c 6c 6f 77  ents.  ** follow
27f0: 73 20 22 63 6f 6d 6d 69 74 22 2c 20 74 68 65 6e  s "commit", then
2800: 20 6f 6e 6c 79 20 74 68 6f 73 65 20 66 69 6c 65   only those file
2810: 73 20 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 2e  s are committed.
2820: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 66 74 65 72  .  **.  ** After
2830: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   the following f
2840: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 68 61 73  unction call has
2850: 20 72 65 74 75 72 6e 65 64 2c 20 74 68 65 20 47   returned, the G
2860: 6c 6f 62 61 6c 2e 61 43 6f 6d 6d 69 74 46 69 6c  lobal.aCommitFil
2870: 65 5b 5d 0a 20 20 2a 2a 20 61 72 72 61 79 20 69  e[].  ** array i
2880: 73 20 61 6c 6c 6f 63 61 74 65 64 20 74 6f 20 63  s allocated to c
2890: 6f 6e 74 61 69 6e 20 74 68 65 20 22 69 64 22 20  ontain the "id" 
28a0: 66 69 65 6c 64 20 66 72 6f 6d 20 74 68 65 20 76  field from the v
28b0: 66 69 6c 65 20 74 61 62 6c 65 0a 20 20 2a 2a 20  file table.  ** 
28c0: 66 6f 72 20 65 61 63 68 20 66 69 6c 65 20 74 6f  for each file to
28d0: 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 2e 20 4f   be committed. O
28e0: 72 2c 20 69 66 20 61 43 6f 6d 6d 69 74 46 69 6c  r, if aCommitFil
28f0: 65 20 69 73 20 4e 55 4c 4c 2c 20 61 6c 6c 20 66  e is NULL, all f
2900: 69 6c 65 73 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  iles.  ** should
2910: 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 2e 0a 20   be committed.. 
2920: 20 2a 2f 0a 20 20 73 65 6c 65 63 74 5f 63 6f 6d   */.  select_com
2930: 6d 69 74 5f 66 69 6c 65 73 28 29 3b 0a 20 20 69  mit_files();.  i
2940: 73 41 4d 65 72 67 65 20 3d 20 64 62 5f 65 78 69  sAMerge = db_exi
2950: 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52  sts("SELECT 1 FR
2960: 4f 4d 20 76 6d 65 72 67 65 22 29 3b 0a 20 20 69  OM vmerge");.  i
2970: 66 28 20 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65  f( g.aCommitFile
2980: 20 26 26 20 69 73 41 4d 65 72 67 65 20 29 7b 0a   && isAMerge ){.
2990: 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c      fossil_fatal
29a0: 28 22 63 61 6e 6e 6f 74 20 64 6f 20 61 20 70 61  ("cannot do a pa
29b0: 72 74 69 61 6c 20 63 6f 6d 6d 69 74 20 6f 66 20  rtial commit of 
29c0: 61 20 6d 65 72 67 65 22 29 3b 0a 20 20 7d 0a 0a  a merge");.  }..
29d0: 20 20 75 73 65 72 5f 73 65 6c 65 63 74 28 29 3b    user_select();
29e0: 0a 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e  .  db_begin_tran
29f0: 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 72 63 20  saction();.  rc 
2a00: 3d 20 75 6e 73 61 76 65 64 5f 63 68 61 6e 67 65  = unsaved_change
2a10: 73 28 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30  s();.  if( rc==0
2a20: 20 26 26 20 21 69 73 41 4d 65 72 67 65 20 29 7b   && !isAMerge ){
2a30: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69  .    fossil_pani
2a40: 63 28 22 6e 6f 74 68 69 6e 67 20 68 61 73 20 63  c("nothing has c
2a50: 68 61 6e 67 65 64 22 29 3b 0a 20 20 7d 0a 0a 20  hanged");.  }.. 
2a60: 20 2f 2a 20 49 66 20 6f 6e 65 20 6f 72 20 6d 6f   /* If one or mo
2a70: 72 65 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  re files that we
2a80: 72 65 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20  re named on the 
2a90: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61 76  command line hav
2aa0: 65 20 6e 6f 74 0a 20 20 2a 2a 20 62 65 65 6e 20  e not.  ** been 
2ab0: 6d 6f 64 69 66 69 65 64 2c 20 62 61 69 6c 20 6f  modified, bail o
2ac0: 75 74 20 6e 6f 77 2e 0a 20 20 2a 2f 0a 20 20 69  ut now..  */.  i
2ad0: 66 28 20 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65  f( g.aCommitFile
2ae0: 20 29 7b 0a 20 20 20 20 42 6c 6f 62 20 75 6e 6d   ){.    Blob unm
2af0: 6f 64 69 66 69 65 64 3b 0a 20 20 20 20 6d 65 6d  odified;.    mem
2b00: 73 65 74 28 26 75 6e 6d 6f 64 69 66 69 65 64 2c  set(&unmodified,
2b10: 20 30 2c 20 73 69 7a 65 6f 66 28 42 6c 6f 62 29   0, sizeof(Blob)
2b20: 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 69 6e 69 74  );.    blob_init
2b30: 28 26 75 6e 6d 6f 64 69 66 69 65 64 2c 20 30 2c  (&unmodified, 0,
2b40: 20 30 29 3b 0a 20 20 20 20 64 62 5f 62 6c 6f 62   0);.    db_blob
2b50: 28 26 75 6e 6d 6f 64 69 66 69 65 64 2c 20 0a 20  (&unmodified, . 
2b60: 20 20 20 20 20 22 53 45 4c 45 43 54 20 70 61 74       "SELECT pat
2b70: 68 6e 61 6d 65 20 46 52 4f 4d 20 76 66 69 6c 65  hname FROM vfile
2b80: 20 57 48 45 52 45 20 63 68 6e 67 65 64 20 3d 20   WHERE chnged = 
2b90: 30 20 41 4e 44 20 66 69 6c 65 5f 69 73 5f 73 65  0 AND file_is_se
2ba0: 6c 65 63 74 65 64 28 69 64 29 22 0a 20 20 20 20  lected(id)".    
2bb0: 29 3b 0a 20 20 20 20 69 66 28 20 73 74 72 6c 65  );.    if( strle
2bc0: 6e 28 62 6c 6f 62 5f 73 74 72 28 26 75 6e 6d 6f  n(blob_str(&unmo
2bd0: 64 69 66 69 65 64 29 29 20 29 7b 0a 20 20 20 20  dified)) ){.    
2be0: 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22    fossil_panic("
2bf0: 66 69 6c 65 20 25 73 20 68 61 73 20 6e 6f 74 20  file %s has not 
2c00: 63 68 61 6e 67 65 64 22 2c 20 62 6c 6f 62 5f 73  changed", blob_s
2c10: 74 72 28 26 75 6e 6d 6f 64 69 66 69 65 64 29 29  tr(&unmodified))
2c20: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 76  ;.    }.  }..  v
2c30: 69 64 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74  id = db_lget_int
2c40: 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b  ("checkout", 0);
2c50: 0a 20 20 76 66 69 6c 65 5f 61 67 67 72 65 67 61  .  vfile_aggrega
2c60: 74 65 5f 63 68 65 63 6b 73 75 6d 5f 64 69 73 6b  te_checksum_disk
2c70: 28 76 69 64 2c 20 26 63 6b 73 75 6d 31 29 3b 0a  (vid, &cksum1);.
2c80: 20 20 69 66 28 20 7a 43 6f 6d 6d 65 6e 74 20 29    if( zComment )
2c90: 7b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28  {.    blob_zero(
2ca0: 26 63 6f 6d 6d 65 6e 74 29 3b 0a 20 20 20 20 62  &comment);.    b
2cb0: 6c 6f 62 5f 61 70 70 65 6e 64 28 26 63 6f 6d 6d  lob_append(&comm
2cc0: 65 6e 74 2c 20 7a 43 6f 6d 6d 65 6e 74 2c 20 2d  ent, zComment, -
2cd0: 31 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1);.  }else{.   
2ce0: 20 70 72 65 70 61 72 65 5f 63 6f 6d 6d 69 74 5f   prepare_commit_
2cf0: 63 6f 6d 6d 65 6e 74 28 26 63 6f 6d 6d 65 6e 74  comment(&comment
2d00: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 74 65  );.  }..  /* Ste
2d10: 70 20 31 3a 20 49 6e 73 65 72 74 20 72 65 63 6f  p 1: Insert reco
2d20: 72 64 73 20 66 6f 72 20 61 6c 6c 20 6d 6f 64 69  rds for all modi
2d30: 66 69 65 64 20 66 69 6c 65 73 20 69 6e 74 6f 20  fied files into 
2d40: 74 68 65 20 62 6c 6f 62 20 0a 20 20 2a 2a 20 74  the blob .  ** t
2d50: 61 62 6c 65 2e 20 49 66 20 74 68 65 72 65 20 77  able. If there w
2d60: 65 72 65 20 61 72 67 75 6d 65 6e 74 73 20 70 61  ere arguments pa
2d70: 73 73 65 64 20 74 6f 20 74 68 69 73 20 63 6f 6d  ssed to this com
2d80: 6d 61 6e 64 2c 20 6f 6e 6c 79 0a 20 20 2a 2a 20  mand, only.  ** 
2d90: 74 68 65 20 69 64 65 6e 74 69 66 69 65 64 20 66  the identified f
2da0: 69 6c 73 20 61 72 65 20 69 6e 73 65 72 74 65 64  ils are inserted
2db0: 20 28 69 66 20 74 68 65 79 20 68 61 76 65 20 62   (if they have b
2dc0: 65 65 6e 20 6d 6f 64 69 66 69 65 64 29 2e 0a 20  een modified).. 
2dd0: 20 2a 2f 0a 20 20 64 62 5f 70 72 65 70 61 72 65   */.  db_prepare
2de0: 28 26 71 2c 0a 20 20 20 20 22 53 45 4c 45 43 54  (&q,.    "SELECT
2df0: 20 69 64 2c 20 25 51 20 7c 7c 20 70 61 74 68 6e   id, %Q || pathn
2e00: 61 6d 65 2c 20 6d 72 69 64 20 46 52 4f 4d 20 76  ame, mrid FROM v
2e10: 66 69 6c 65 20 22 0a 20 20 20 20 22 57 48 45 52  file ".    "WHER
2e20: 45 20 63 68 6e 67 65 64 3d 3d 31 20 41 4e 44 20  E chnged==1 AND 
2e30: 4e 4f 54 20 64 65 6c 65 74 65 64 20 41 4e 44 20  NOT deleted AND 
2e40: 66 69 6c 65 5f 69 73 5f 73 65 6c 65 63 74 65 64  file_is_selected
2e50: 28 69 64 29 22 0a 20 20 20 20 2c 20 67 2e 7a 4c  (id)".    , g.zL
2e60: 6f 63 61 6c 52 6f 6f 74 0a 20 20 29 3b 0a 20 20  ocalRoot.  );.  
2e70: 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26  while( db_step(&
2e80: 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  q)==SQLITE_ROW )
2e90: 7b 0a 20 20 20 20 69 6e 74 20 69 64 2c 20 72 69  {.    int id, ri
2ea0: 64 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  d;.    const cha
2eb0: 72 20 2a 7a 46 75 6c 6c 6e 61 6d 65 3b 0a 20 20  r *zFullname;.  
2ec0: 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a    Blob content;.
2ed0: 0a 20 20 20 20 69 64 20 3d 20 64 62 5f 63 6f 6c  .    id = db_col
2ee0: 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 30 29 3b 0a  umn_int(&q, 0);.
2ef0: 20 20 20 20 7a 46 75 6c 6c 6e 61 6d 65 20 3d 20      zFullname = 
2f00: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26  db_column_text(&
2f10: 71 2c 20 31 29 3b 0a 20 20 20 20 72 69 64 20 3d  q, 1);.    rid =
2f20: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26   db_column_int(&
2f30: 71 2c 20 32 29 3b 0a 0a 20 20 20 20 62 6c 6f 62  q, 2);..    blob
2f40: 5f 7a 65 72 6f 28 26 63 6f 6e 74 65 6e 74 29 3b  _zero(&content);
2f50: 0a 20 20 20 20 62 6c 6f 62 5f 72 65 61 64 5f 66  .    blob_read_f
2f60: 72 6f 6d 5f 66 69 6c 65 28 26 63 6f 6e 74 65 6e  rom_file(&conten
2f70: 74 2c 20 7a 46 75 6c 6c 6e 61 6d 65 29 3b 0a 20  t, zFullname);. 
2f80: 20 20 20 6e 72 69 64 20 3d 20 63 6f 6e 74 65 6e     nrid = conten
2f90: 74 5f 70 75 74 28 26 63 6f 6e 74 65 6e 74 2c 20  t_put(&content, 
2fa0: 30 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 72  0, 0);.    if( r
2fb0: 69 64 3e 30 20 29 7b 0a 20 20 20 20 20 20 63 6f  id>0 ){.      co
2fc0: 6e 74 65 6e 74 5f 64 65 6c 74 69 66 79 28 72 69  ntent_deltify(ri
2fd0: 64 2c 20 6e 72 69 64 2c 20 30 29 3b 0a 20 20 20  d, nrid, 0);.   
2fe0: 20 7d 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f   }.    db_multi_
2ff0: 65 78 65 63 28 22 55 50 44 41 54 45 20 76 66 69  exec("UPDATE vfi
3000: 6c 65 20 53 45 54 20 6d 72 69 64 3d 25 64 2c 20  le SET mrid=%d, 
3010: 72 69 64 3d 25 64 20 57 48 45 52 45 20 69 64 3d  rid=%d WHERE id=
3020: 25 64 22 2c 20 6e 72 69 64 2c 6e 72 69 64 2c 69  %d", nrid,nrid,i
3030: 64 29 3b 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69  d);.    db_multi
3040: 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20 4f 52  _exec("INSERT OR
3050: 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 75 6e 73   IGNORE INTO uns
3060: 65 6e 74 20 56 41 4c 55 45 53 28 25 64 29 22 2c  ent VALUES(%d)",
3070: 20 6e 72 69 64 29 3b 0a 20 20 7d 0a 20 20 64 62   nrid);.  }.  db
3080: 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 0a  _finalize(&q);..
3090: 20 20 2f 2a 20 43 72 65 61 74 65 20 74 68 65 20    /* Create the 
30a0: 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 20 20 62 6c  manifest */.  bl
30b0: 6f 62 5f 7a 65 72 6f 28 26 6d 61 6e 69 66 65 73  ob_zero(&manifes
30c0: 74 29 3b 0a 20 20 69 66 28 20 62 6c 6f 62 5f 73  t);.  if( blob_s
30d0: 69 7a 65 28 26 63 6f 6d 6d 65 6e 74 29 3d 3d 30  ize(&comment)==0
30e0: 20 29 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70   ){.    blob_app
30f0: 65 6e 64 28 26 63 6f 6d 6d 65 6e 74 2c 20 22 28  end(&comment, "(
3100: 6e 6f 20 63 6f 6d 6d 65 6e 74 29 22 2c 20 2d 31  no comment)", -1
3110: 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 61 70  );.  }.  blob_ap
3120: 70 65 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c  pendf(&manifest,
3130: 20 22 43 20 25 46 5c 6e 22 2c 20 62 6c 6f 62 5f   "C %F\n", blob_
3140: 73 74 72 28 26 63 6f 6d 6d 65 6e 74 29 29 3b 0a  str(&comment));.
3150: 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 74 65 78    zDate = db_tex
3160: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61 74  t(0, "SELECT dat
3170: 65 74 69 6d 65 28 27 6e 6f 77 27 29 22 29 3b 0a  etime('now')");.
3180: 20 20 7a 44 61 74 65 5b 31 30 5d 20 3d 20 27 54    zDate[10] = 'T
3190: 27 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64  ';.  blob_append
31a0: 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 44 20  f(&manifest, "D 
31b0: 25 73 5c 6e 22 2c 20 7a 44 61 74 65 29 3b 0a 20  %s\n", zDate);. 
31c0: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a   db_prepare(&q,.
31d0: 20 20 20 20 22 53 45 4c 45 43 54 20 70 61 74 68      "SELECT path
31e0: 6e 61 6d 65 2c 20 75 75 69 64 20 46 52 4f 4d 20  name, uuid FROM 
31f0: 76 66 69 6c 65 20 4a 4f 49 4e 20 62 6c 6f 62 20  vfile JOIN blob 
3200: 4f 4e 20 76 66 69 6c 65 2e 6d 72 69 64 3d 62 6c  ON vfile.mrid=bl
3210: 6f 62 2e 72 69 64 22 0a 20 20 20 20 22 20 57 48  ob.rid".    " WH
3220: 45 52 45 20 4e 4f 54 20 64 65 6c 65 74 65 64 20  ERE NOT deleted 
3230: 41 4e 44 20 76 66 69 6c 65 2e 76 69 64 3d 25 64  AND vfile.vid=%d
3240: 22 0a 20 20 20 20 22 20 4f 52 44 45 52 20 42 59  ".    " ORDER BY
3250: 20 31 22 2c 20 76 69 64 29 3b 0a 20 20 77 68 69   1", vid);.  whi
3260: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d  le( db_step(&q)=
3270: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
3280: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
3290: 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e  Name = db_column
32a0: 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20  _text(&q, 0);.  
32b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55    const char *zU
32c0: 75 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f  uid = db_column_
32d0: 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20  text(&q, 1);.   
32e0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d   blob_appendf(&m
32f0: 61 6e 69 66 65 73 74 2c 20 22 46 20 25 46 20 25  anifest, "F %F %
3300: 73 5c 6e 22 2c 20 7a 4e 61 6d 65 2c 20 7a 55 75  s\n", zName, zUu
3310: 69 64 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69  id);.  }.  db_fi
3320: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 7a 55  nalize(&q);.  zU
3330: 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c  uid = db_text(0,
3340: 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52   "SELECT uuid FR
3350: 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69  OM blob WHERE ri
3360: 64 3d 25 64 22 2c 20 76 69 64 29 3b 0a 20 20 62  d=%d", vid);.  b
3370: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e  lob_appendf(&man
3380: 69 66 65 73 74 2c 20 22 50 20 25 73 22 2c 20 7a  ifest, "P %s", z
3390: 55 75 69 64 29 3b 0a 0a 20 20 64 62 5f 70 72 65  Uuid);..  db_pre
33a0: 70 61 72 65 28 26 71 32 2c 20 22 53 45 4c 45 43  pare(&q2, "SELEC
33b0: 54 20 6d 65 72 67 65 20 46 52 4f 4d 20 76 6d 65  T merge FROM vme
33c0: 72 67 65 20 57 48 45 52 45 20 69 64 3d 3a 69 64  rge WHERE id=:id
33d0: 22 29 3b 0a 20 20 64 62 5f 62 69 6e 64 5f 69 6e  ");.  db_bind_in
33e0: 74 28 26 71 32 2c 20 22 3a 69 64 22 2c 20 30 29  t(&q2, ":id", 0)
33f0: 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74  ;.  while( db_st
3400: 65 70 28 26 71 32 29 3d 3d 53 51 4c 49 54 45 5f  ep(&q2)==SQLITE_
3410: 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74 20 6d  ROW ){.    int m
3420: 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69  id = db_column_i
3430: 6e 74 28 26 71 32 2c 20 30 29 3b 0a 20 20 20 20  nt(&q2, 0);.    
3440: 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28  zUuid = db_text(
3450: 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20  0, "SELECT uuid 
3460: 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20  FROM blob WHERE 
3470: 72 69 64 3d 25 64 22 2c 20 6d 69 64 29 3b 0a 20  rid=%d", mid);. 
3480: 20 20 20 69 66 28 20 7a 55 75 69 64 20 29 7b 0a     if( zUuid ){.
3490: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e        blob_appen
34a0: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 20  df(&manifest, " 
34b0: 25 73 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20  %s", zUuid);.   
34c0: 20 20 20 66 72 65 65 28 7a 55 75 69 64 29 3b 0a     free(zUuid);.
34d0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 72      }.  }.  db_r
34e0: 65 73 65 74 28 26 71 32 29 3b 0a 0a 20 20 62 6c  eset(&q2);..  bl
34f0: 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69  ob_appendf(&mani
3500: 66 65 73 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 62  fest, "\n");.  b
3510: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e  lob_appendf(&man
3520: 69 66 65 73 74 2c 20 22 52 20 25 62 5c 6e 22 2c  ifest, "R %b\n",
3530: 20 26 63 6b 73 75 6d 31 29 3b 0a 20 20 62 6c 6f   &cksum1);.  blo
3540: 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66  b_appendf(&manif
3550: 65 73 74 2c 20 22 55 20 25 46 5c 6e 22 2c 20 67  est, "U %F\n", g
3560: 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 6d 64 35 73  .zLogin);.  md5s
3570: 75 6d 5f 62 6c 6f 62 28 26 6d 61 6e 69 66 65 73  um_blob(&manifes
3580: 74 2c 20 26 6d 63 6b 73 75 6d 29 3b 0a 20 20 62  t, &mcksum);.  b
3590: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e  lob_appendf(&man
35a0: 69 66 65 73 74 2c 20 22 5a 20 25 62 5c 6e 22 2c  ifest, "Z %b\n",
35b0: 20 26 6d 63 6b 73 75 6d 29 3b 0a 20 20 7a 4d 61   &mcksum);.  zMa
35c0: 6e 69 66 65 73 74 46 69 6c 65 20 3d 20 6d 70 72  nifestFile = mpr
35d0: 69 6e 74 66 28 22 25 73 6d 61 6e 69 66 65 73 74  intf("%smanifest
35e0: 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29  ", g.zLocalRoot)
35f0: 3b 0a 20 20 69 66 28 20 21 6e 6f 53 69 67 6e 20  ;.  if( !noSign 
3600: 26 26 20 63 6c 65 61 72 73 69 67 6e 28 26 6d 61  && clearsign(&ma
3610: 6e 69 66 65 73 74 2c 20 26 6d 61 6e 69 66 65 73  nifest, &manifes
3620: 74 29 20 29 7b 0a 20 20 20 20 42 6c 6f 62 20 61  t) ){.    Blob a
3630: 6e 73 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72  ns;.    blob_zer
3640: 6f 28 26 61 6e 73 29 3b 0a 20 20 20 20 70 72 6f  o(&ans);.    pro
3650: 6d 70 74 5f 75 73 65 72 28 22 75 6e 61 62 6c 65  mpt_user("unable
3660: 20 74 6f 20 73 69 67 6e 20 6d 61 6e 69 66 65 73   to sign manifes
3670: 74 2e 20 20 63 6f 6e 74 69 6e 75 65 20 5b 79 2f  t.  continue [y/
3680: 4e 5d 3f 20 22 2c 20 26 61 6e 73 29 3b 0a 20 20  N]? ", &ans);.  
3690: 20 20 69 66 28 20 62 6c 6f 62 5f 73 74 72 28 26    if( blob_str(&
36a0: 61 6e 73 29 5b 30 5d 21 3d 27 79 27 20 29 7b 0a  ans)[0]!='y' ){.
36b0: 20 20 20 20 20 20 64 62 5f 65 6e 64 5f 74 72 61        db_end_tra
36c0: 6e 73 61 63 74 69 6f 6e 28 31 29 3b 0a 20 20 20  nsaction(1);.   
36d0: 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20     exit(1);.    
36e0: 7d 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 77 72 69  }.  }.  blob_wri
36f0: 74 65 5f 74 6f 5f 66 69 6c 65 28 26 6d 61 6e 69  te_to_file(&mani
3700: 66 65 73 74 2c 20 7a 4d 61 6e 69 66 65 73 74 46  fest, zManifestF
3710: 69 6c 65 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73  ile);.  blob_res
3720: 65 74 28 26 6d 61 6e 69 66 65 73 74 29 3b 0a 20  et(&manifest);. 
3730: 20 62 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d 5f   blob_read_from_
3740: 66 69 6c 65 28 26 6d 61 6e 69 66 65 73 74 2c 20  file(&manifest, 
3750: 7a 4d 61 6e 69 66 65 73 74 46 69 6c 65 29 3b 0a  zManifestFile);.
3760: 20 20 66 72 65 65 28 7a 4d 61 6e 69 66 65 73 74    free(zManifest
3770: 46 69 6c 65 29 3b 0a 20 20 6e 76 69 64 20 3d 20  File);.  nvid = 
3780: 63 6f 6e 74 65 6e 74 5f 70 75 74 28 26 6d 61 6e  content_put(&man
3790: 69 66 65 73 74 2c 20 30 2c 20 30 29 3b 0a 20 20  ifest, 0, 0);.  
37a0: 69 66 28 20 6e 76 69 64 3d 3d 30 20 29 7b 0a 20  if( nvid==0 ){. 
37b0: 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28     fossil_panic(
37c0: 22 74 72 6f 75 62 6c 65 20 63 6f 6d 6d 69 74 74  "trouble committ
37d0: 69 6e 67 20 6d 61 6e 69 66 65 73 74 3a 20 25 73  ing manifest: %s
37e0: 22 2c 20 67 2e 7a 45 72 72 4d 73 67 29 3b 0a 20  ", g.zErrMsg);. 
37f0: 20 7d 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78   }.  db_multi_ex
3800: 65 63 28 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ec("INSERT OR IG
3810: 4e 4f 52 45 20 49 4e 54 4f 20 75 6e 73 65 6e 74  NORE INTO unsent
3820: 20 56 41 4c 55 45 53 28 25 64 29 22 2c 20 6e 76   VALUES(%d)", nv
3830: 69 64 29 3b 0a 20 20 6d 61 6e 69 66 65 73 74 5f  id);.  manifest_
3840: 63 72 6f 73 73 6c 69 6e 6b 28 6e 76 69 64 2c 20  crosslink(nvid, 
3850: 26 6d 61 6e 69 66 65 73 74 29 3b 0a 20 20 63 6f  &manifest);.  co
3860: 6e 74 65 6e 74 5f 64 65 6c 74 69 66 79 28 76 69  ntent_deltify(vi
3870: 64 2c 20 6e 76 69 64 2c 20 30 29 3b 0a 20 20 7a  d, nvid, 0);.  z
3880: 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 30  Uuid = db_text(0
3890: 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46  , "SELECT uuid F
38a0: 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72  ROM blob WHERE r
38b0: 69 64 3d 25 64 22 2c 20 6e 76 69 64 29 3b 0a 20  id=%d", nvid);. 
38c0: 20 70 72 69 6e 74 66 28 22 4e 65 77 5f 56 65 72   printf("New_Ver
38d0: 73 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 55 75  sion: %s\n", zUu
38e0: 69 64 29 3b 0a 20 20 7a 4d 61 6e 69 66 65 73 74  id);.  zManifest
38f0: 46 69 6c 65 20 3d 20 6d 70 72 69 6e 74 66 28 22  File = mprintf("
3900: 25 73 6d 61 6e 69 66 65 73 74 2e 75 75 69 64 22  %smanifest.uuid"
3910: 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b  , g.zLocalRoot);
3920: 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 6d 75  .  blob_zero(&mu
3930: 75 69 64 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70  uid);.  blob_app
3940: 65 6e 64 66 28 26 6d 75 75 69 64 2c 20 22 25 73  endf(&muuid, "%s
3950: 5c 6e 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 62  \n", zUuid);.  b
3960: 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69 6c  lob_write_to_fil
3970: 65 28 26 6d 75 75 69 64 2c 20 7a 4d 61 6e 69 66  e(&muuid, zManif
3980: 65 73 74 46 69 6c 65 29 3b 0a 20 20 66 72 65 65  estFile);.  free
3990: 28 7a 4d 61 6e 69 66 65 73 74 46 69 6c 65 29 3b  (zManifestFile);
39a0: 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 6d  .  blob_reset(&m
39b0: 75 75 69 64 29 3b 0a 0a 20 20 0a 20 20 2f 2a 20  uuid);..  .  /* 
39c0: 55 70 64 61 74 65 20 74 68 65 20 76 66 69 6c 65  Update the vfile
39d0: 20 61 6e 64 20 76 6d 65 72 67 65 20 74 61 62 6c   and vmerge tabl
39e0: 65 73 20 2a 2f 0a 20 20 64 62 5f 6d 75 6c 74 69  es */.  db_multi
39f0: 5f 65 78 65 63 28 0a 20 20 20 20 22 44 45 4c 45  _exec(.    "DELE
3a00: 54 45 20 46 52 4f 4d 20 76 66 69 6c 65 20 57 48  TE FROM vfile WH
3a10: 45 52 45 20 28 76 69 64 21 3d 25 64 20 4f 52 20  ERE (vid!=%d OR 
3a20: 64 65 6c 65 74 65 64 29 20 41 4e 44 20 66 69 6c  deleted) AND fil
3a30: 65 5f 69 73 5f 73 65 6c 65 63 74 65 64 28 69 64  e_is_selected(id
3a40: 29 3b 22 0a 20 20 20 20 22 44 45 4c 45 54 45 20  );".    "DELETE 
3a50: 46 52 4f 4d 20 76 6d 65 72 67 65 20 57 48 45 52  FROM vmerge WHER
3a60: 45 20 66 69 6c 65 5f 69 73 5f 73 65 6c 65 63 74  E file_is_select
3a70: 65 64 28 69 64 29 20 4f 52 20 69 64 3d 30 3b 22  ed(id) OR id=0;"
3a80: 0a 20 20 20 20 22 55 50 44 41 54 45 20 76 66 69  .    "UPDATE vfi
3a90: 6c 65 20 53 45 54 20 76 69 64 3d 25 64 3b 22 0a  le SET vid=%d;".
3aa0: 20 20 20 20 22 55 50 44 41 54 45 20 76 66 69 6c      "UPDATE vfil
3ab0: 65 20 53 45 54 20 72 69 64 3d 6d 72 69 64 2c 20  e SET rid=mrid, 
3ac0: 63 68 6e 67 65 64 3d 30 2c 20 64 65 6c 65 74 65  chnged=0, delete
3ad0: 64 3d 30 20 57 48 45 52 45 20 66 69 6c 65 5f 69  d=0 WHERE file_i
3ae0: 73 5f 73 65 6c 65 63 74 65 64 28 69 64 29 3b 22  s_selected(id);"
3af0: 0a 20 20 20 20 2c 20 76 69 64 2c 20 6e 76 69 64  .    , vid, nvid
3b00: 0a 20 20 29 3b 0a 20 20 64 62 5f 6c 73 65 74 5f  .  );.  db_lset_
3b10: 69 6e 74 28 22 63 68 65 63 6b 6f 75 74 22 2c 20  int("checkout", 
3b20: 6e 76 69 64 29 3b 0a 0a 20 20 2f 2a 20 56 65 72  nvid);..  /* Ver
3b30: 69 66 79 20 74 68 61 74 20 74 68 65 20 72 65 70  ify that the rep
3b40: 6f 73 69 74 6f 72 79 20 63 68 65 63 6b 73 75 6d  ository checksum
3b50: 20 6d 61 74 63 68 65 73 20 74 68 65 20 65 78 70   matches the exp
3b60: 65 63 74 65 64 20 63 68 65 63 6b 73 75 6d 0a 20  ected checksum. 
3b70: 20 2a 2a 20 63 61 6c 63 75 6c 61 74 65 64 20 62   ** calculated b
3b80: 65 66 6f 72 65 20 74 68 65 20 63 68 65 63 6b 69  efore the checki
3b90: 6e 20 73 74 61 72 74 65 64 20 28 61 6e 64 20 73  n started (and s
3ba0: 74 6f 72 65 64 20 61 73 20 74 68 65 20 52 20 72  tored as the R r
3bb0: 65 63 6f 72 64 0a 20 20 2a 2a 20 6f 66 20 74 68  ecord.  ** of th
3bc0: 65 20 6d 61 6e 69 66 65 73 74 20 66 69 6c 65 29  e manifest file)
3bd0: 2e 0a 20 20 2a 2f 0a 20 20 76 66 69 6c 65 5f 61  ..  */.  vfile_a
3be0: 67 67 72 65 67 61 74 65 5f 63 68 65 63 6b 73 75  ggregate_checksu
3bf0: 6d 5f 72 65 70 6f 73 69 74 6f 72 79 28 6e 76 69  m_repository(nvi
3c00: 64 2c 20 26 63 6b 73 75 6d 32 29 3b 0a 20 20 69  d, &cksum2);.  i
3c10: 66 28 20 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 28  f( blob_compare(
3c20: 26 63 6b 73 75 6d 31 2c 20 26 63 6b 73 75 6d 32  &cksum1, &cksum2
3c30: 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f  ) ){.    fossil_
3c40: 70 61 6e 69 63 28 22 74 72 65 65 20 63 68 65 63  panic("tree chec
3c50: 6b 73 75 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61  ksum does not ma
3c60: 74 63 68 20 72 65 70 6f 73 69 74 6f 72 79 20 61  tch repository a
3c70: 66 74 65 72 20 63 6f 6d 6d 69 74 22 29 3b 0a 20  fter commit");. 
3c80: 20 7d 0a 0a 20 20 2f 2a 20 56 65 72 69 66 79 20   }..  /* Verify 
3c90: 74 68 61 74 20 74 68 65 20 6d 61 6e 69 66 65 73  that the manifes
3ca0: 74 20 63 68 65 63 6b 73 75 6d 20 6d 61 74 63 68  t checksum match
3cb0: 65 73 20 74 68 65 20 65 78 70 65 63 74 65 64 20  es the expected 
3cc0: 63 68 65 63 6b 73 75 6d 20 2a 2f 0a 20 20 76 66  checksum */.  vf
3cd0: 69 6c 65 5f 61 67 67 72 65 67 61 74 65 5f 63 68  ile_aggregate_ch
3ce0: 65 63 6b 73 75 6d 5f 6d 61 6e 69 66 65 73 74 28  ecksum_manifest(
3cf0: 6e 76 69 64 2c 20 26 63 6b 73 75 6d 32 2c 20 26  nvid, &cksum2, &
3d00: 63 6b 73 75 6d 31 62 29 3b 0a 20 20 69 66 28 20  cksum1b);.  if( 
3d10: 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 28 26 63 6b  blob_compare(&ck
3d20: 73 75 6d 31 2c 20 26 63 6b 73 75 6d 31 62 29 20  sum1, &cksum1b) 
3d30: 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 61  ){.    fossil_pa
3d40: 6e 69 63 28 22 6d 61 6e 69 66 65 73 74 20 63 68  nic("manifest ch
3d50: 65 63 6b 73 75 6d 20 64 6f 65 73 20 6e 6f 74 20  ecksum does not 
3d60: 61 67 72 65 65 20 77 69 74 68 20 6d 61 6e 69 66  agree with manif
3d70: 65 73 74 3a 20 22 0a 20 20 20 20 20 20 20 20 20  est: ".         
3d80: 20 20 20 20 20 20 20 20 22 25 62 20 76 65 72 73          "%b vers
3d90: 75 73 20 25 62 22 2c 20 26 63 6b 73 75 6d 31 2c  us %b", &cksum1,
3da0: 20 26 63 6b 73 75 6d 31 62 29 3b 0a 20 20 7d 0a   &cksum1b);.  }.
3db0: 20 20 69 66 28 20 62 6c 6f 62 5f 63 6f 6d 70 61    if( blob_compa
3dc0: 72 65 28 26 63 6b 73 75 6d 31 2c 20 26 63 6b 73  re(&cksum1, &cks
3dd0: 75 6d 32 29 20 29 7b 0a 20 20 20 20 66 6f 73 73  um2) ){.    foss
3de0: 69 6c 5f 70 61 6e 69 63 28 22 74 72 65 65 20 63  il_panic("tree c
3df0: 68 65 63 6b 73 75 6d 20 64 6f 65 73 20 6e 6f 74  hecksum does not
3e00: 20 6d 61 74 63 68 20 6d 61 6e 69 66 65 73 74 20   match manifest 
3e10: 61 66 74 65 72 20 63 6f 6d 6d 69 74 3a 20 22 0a  after commit: ".
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 20 22 25 62 20 76 65 72 73 75 73 20 25 62 22 2c   "%b versus %b",
3e40: 20 26 63 6b 73 75 6d 31 2c 20 26 63 6b 73 75 6d   &cksum1, &cksum
3e50: 32 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 56 65  2);.  }..  /* Ve
3e60: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f  rify that the co
3e70: 6d 6d 69 74 20 64 69 64 20 6e 6f 74 20 6d 6f 64  mmit did not mod
3e80: 69 66 79 20 61 6e 79 20 64 69 73 6b 20 69 6d 61  ify any disk ima
3e90: 67 65 73 2e 20 2a 2f 0a 20 20 76 66 69 6c 65 5f  ges. */.  vfile_
3ea0: 61 67 67 72 65 67 61 74 65 5f 63 68 65 63 6b 73  aggregate_checks
3eb0: 75 6d 5f 64 69 73 6b 28 6e 76 69 64 2c 20 26 63  um_disk(nvid, &c
3ec0: 6b 73 75 6d 32 29 3b 0a 20 20 69 66 28 20 62 6c  ksum2);.  if( bl
3ed0: 6f 62 5f 63 6f 6d 70 61 72 65 28 26 63 6b 73 75  ob_compare(&cksu
3ee0: 6d 31 2c 20 26 63 6b 73 75 6d 32 29 20 29 7b 0a  m1, &cksum2) ){.
3ef0: 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63      fossil_panic
3f00: 28 22 74 72 65 65 20 63 68 65 63 6b 73 75 6d 73  ("tree checksums
3f10: 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
3f20: 72 20 63 6f 6d 6d 69 74 20 64 6f 20 6e 6f 74 20  r commit do not 
3f30: 6d 61 74 63 68 22 29 3b 0a 20 20 7d 0a 0a 20 20  match");.  }..  
3f40: 2f 2a 20 43 6c 65 61 72 20 74 68 65 20 75 6e 64  /* Clear the und
3f50: 6f 2f 72 65 64 6f 20 73 74 61 63 6b 20 2a 2f 0a  o/redo stack */.
3f60: 20 20 75 6e 64 6f 5f 72 65 73 65 74 28 29 3b 0a    undo_reset();.
3f70: 0a 20 20 2f 2a 20 43 6f 6d 6d 69 74 20 2a 2f 0a  .  /* Commit */.
3f80: 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63    db_end_transac
3f90: 74 69 6f 6e 28 30 29 3b 20 20 0a 7d 0a           tion(0);  .}.