Hex Artifact Content
Not logged in

Artifact 46f9764a211b5ed12dcae17652c88d438bdd8b85:

File src/checkin.c part of check-in [95e17f4e3f] - Generate the "manifest.uuid" file containing the SHA1 hash of the "manifest" file whenever the manifest is generated. Makefiles can used the "manifest.uuid" to insert the version number into the executable. by drh on 2007-08-25 19:31:31.

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 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  an.** Delete all
12a0: 20 22 65 78 74 72 61 22 20 66 69 6c 65 73 20 69   "extra" files i
12b0: 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 72 65  n the source tre
12c0: 65 2e 20 20 22 45 78 74 72 61 22 20 66 69 6c 65  e.  "Extra" file
12d0: 73 20 61 72 65 0a 2a 2a 20 66 69 6c 65 73 20 74  s are.** files t
12e0: 68 61 74 20 61 72 65 20 6e 6f 74 20 6f 66 66 69  hat are not offi
12f0: 63 69 61 6c 6c 79 20 70 61 72 74 20 6f 66 20 74  cially part of t
1300: 68 65 20 63 68 65 63 6b 6f 75 74 2e 20 20 53 65  he checkout.  Se
1310: 65 20 61 6c 73 6f 0a 2a 2a 20 74 68 65 20 22 65  e also.** the "e
1320: 78 74 72 61 22 20 63 6f 6d 6d 61 6e 64 2e 0a 2a  xtra" command..*
1330: 2f 0a 76 6f 69 64 20 63 6c 65 61 6e 5f 63 6d 64  /.void clean_cmd
1340: 28 76 6f 69 64 29 7b 0a 20 20 42 6c 6f 62 20 70  (void){.  Blob p
1350: 61 74 68 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 20  ath;.  Stmt q;. 
1360: 20 64 62 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68   db_must_be_with
1370: 69 6e 5f 74 72 65 65 28 29 3b 0a 20 20 64 62 5f  in_tree();.  db_
1380: 6d 75 6c 74 69 5f 65 78 65 63 28 22 43 52 45 41  multi_exec("CREA
1390: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 73 66  TE TEMP TABLE sf
13a0: 69 6c 65 28 78 20 54 45 58 54 20 50 52 49 4d 41  ile(x TEXT PRIMA
13b0: 52 59 20 4b 45 59 29 22 29 3b 0a 20 20 63 68 64  RY KEY)");.  chd
13c0: 69 72 28 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29  ir(g.zLocalRoot)
13d0: 3b 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 70  ;.  blob_zero(&p
13e0: 61 74 68 29 3b 0a 20 20 76 66 69 6c 65 5f 73 63  ath);.  vfile_sc
13f0: 61 6e 28 30 2c 20 26 70 61 74 68 29 3b 0a 20 20  an(0, &path);.  
1400: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 0a  db_prepare(&q, .
1410: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 25 51        "SELECT %Q
1420: 20 7c 7c 20 78 20 46 52 4f 4d 20 73 66 69 6c 65   || x FROM sfile
1430: 22 0a 20 20 20 20 20 20 22 20 57 48 45 52 45 20  ".      " WHERE 
1440: 78 20 4e 4f 54 20 49 4e 20 28 27 6d 61 6e 69 66  x NOT IN ('manif
1450: 65 73 74 27 2c 27 6d 61 6e 69 66 65 73 74 2e 75  est','manifest.u
1460: 75 69 64 27 2c 27 5f 46 4f 53 53 49 4c 5f 27 29  uid','_FOSSIL_')
1470: 22 0a 20 20 20 20 20 20 22 20 4f 52 44 45 52 20  ".      " ORDER 
1480: 42 59 20 31 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52  BY 1", g.zLocalR
1490: 6f 6f 74 29 3b 0a 20 20 77 68 69 6c 65 28 20 64  oot);.  while( d
14a0: 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49  b_step(&q)==SQLI
14b0: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 75 6e  TE_ROW ){.    un
14c0: 6c 69 6e 6b 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74  link(db_column_t
14d0: 65 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 20 7d  ext(&q, 0));.  }
14e0: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26  .  db_finalize(&
14f0: 71 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 65  q);.}../*.** Pre
1500: 70 61 72 65 20 61 20 63 6f 6d 6d 69 74 20 63 6f  pare a commit co
1510: 6d 6d 65 6e 74 2e 20 20 4c 65 74 20 74 68 65 20  mment.  Let the 
1520: 75 73 65 72 20 6d 6f 64 69 66 79 20 69 74 20 75  user modify it u
1530: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 64 69 74  sing the.** edit
1540: 6f 72 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  or specified in 
1550: 74 68 65 20 67 6c 6f 62 61 6c 5f 63 6f 6e 66 69  the global_confi
1560: 67 20 74 61 62 6c 65 20 6f 72 20 65 69 74 68 65  g table or eithe
1570: 72 0a 2a 2a 20 74 68 65 20 56 49 53 55 41 4c 20  r.** the VISUAL 
1580: 6f 72 20 45 44 49 54 4f 52 20 65 6e 76 69 72 6f  or EDITOR enviro
1590: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2e 0a  nment variable..
15a0: 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
15b0: 66 69 6e 61 6c 20 63 6f 6d 6d 69 74 20 63 6f 6d  final commit com
15c0: 6d 65 6e 74 20 69 6e 20 70 43 6f 6d 6d 65 6e 74  ment in pComment
15d0: 2e 20 20 70 43 6f 6d 6d 65 6e 74 20 69 73 20 61  .  pComment is a
15e0: 73 73 75 6d 65 64 0a 2a 2a 20 74 6f 20 62 65 20  ssumed.** to be 
15f0: 75 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 2d 20  uninitialized - 
1600: 61 6e 79 20 70 72 69 6f 72 20 63 6f 6e 74 65 6e  any prior conten
1610: 74 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  t is overwritten
1620: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
1630: 20 70 72 65 70 61 72 65 5f 63 6f 6d 6d 69 74 5f   prepare_commit_
1640: 63 6f 6d 6d 65 6e 74 28 42 6c 6f 62 20 2a 70 43  comment(Blob *pC
1650: 6f 6d 6d 65 6e 74 29 7b 0a 20 20 63 6f 6e 73 74  omment){.  const
1660: 20 63 68 61 72 20 2a 7a 45 64 69 74 6f 72 3b 0a   char *zEditor;.
1670: 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a 20 20    char *zCmd;.  
1680: 63 68 61 72 20 2a 7a 46 69 6c 65 3b 0a 20 20 42  char *zFile;.  B
1690: 6c 6f 62 20 74 65 78 74 2c 20 6c 69 6e 65 3b 0a  lob text, line;.
16a0: 20 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74    char *zComment
16b0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 62 6c 6f  ;.  int i;.  blo
16c0: 62 5f 73 65 74 28 26 74 65 78 74 2c 0a 20 20 20  b_set(&text,.   
16d0: 20 22 5c 6e 23 20 45 6e 74 65 72 20 63 6f 6d 6d   "\n# Enter comm
16e0: 65 6e 74 73 20 6f 6e 20 74 68 69 73 20 63 6f 6d  ents on this com
16f0: 6d 69 74 2e 20 20 4c 69 6e 65 73 20 62 65 67 69  mit.  Lines begi
1700: 6e 6e 69 6e 67 20 77 69 74 68 20 23 20 61 72 65  nning with # are
1710: 20 69 67 6e 6f 72 65 64 5c 6e 22 0a 20 20 20 20   ignored\n".    
1720: 22 23 5c 6e 22 0a 20 20 29 3b 0a 20 20 73 74 61  "#\n".  );.  sta
1730: 74 75 73 5f 72 65 70 6f 72 74 28 26 74 65 78 74  tus_report(&text
1740: 2c 20 22 23 20 22 29 3b 0a 20 20 7a 45 64 69 74  , "# ");.  zEdit
1750: 6f 72 20 3d 20 64 62 5f 67 6c 6f 62 61 6c 5f 67  or = db_global_g
1760: 65 74 28 22 65 64 69 74 6f 72 22 2c 20 30 29 3b  et("editor", 0);
1770: 0a 20 20 69 66 28 20 7a 45 64 69 74 6f 72 3d 3d  .  if( zEditor==
1780: 30 20 29 7b 0a 20 20 20 20 7a 45 64 69 74 6f 72  0 ){.    zEditor
1790: 20 3d 20 67 65 74 65 6e 76 28 22 56 49 53 55 41   = getenv("VISUA
17a0: 4c 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  L");.  }.  if( z
17b0: 45 64 69 74 6f 72 3d 3d 30 20 29 7b 0a 20 20 20  Editor==0 ){.   
17c0: 20 7a 45 64 69 74 6f 72 20 3d 20 67 65 74 65 6e   zEditor = geten
17d0: 76 28 22 45 44 49 54 4f 52 22 29 3b 0a 20 20 7d  v("EDITOR");.  }
17e0: 0a 20 20 69 66 28 20 7a 45 64 69 74 6f 72 3d 3d  .  if( zEditor==
17f0: 30 20 29 7b 0a 20 20 20 20 7a 45 64 69 74 6f 72  0 ){.    zEditor
1800: 20 3d 20 22 65 64 22 3b 0a 20 20 7d 0a 20 20 7a   = "ed";.  }.  z
1810: 46 69 6c 65 20 3d 20 64 62 5f 74 65 78 74 28 30  File = db_text(0
1820: 2c 20 22 53 45 4c 45 43 54 20 27 25 71 63 69 2d  , "SELECT '%qci-
1830: 63 6f 6d 6d 65 6e 74 2d 27 20 7c 7c 20 68 65 78  comment-' || hex
1840: 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 36 29 29 20  (randomblob(6)) 
1850: 7c 7c 20 27 2e 74 78 74 27 22 2c 0a 20 20 20 20  || '.txt'",.    
1860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1870: 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20 20  .zLocalRoot);.  
1880: 62 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69  blob_write_to_fi
1890: 6c 65 28 26 74 65 78 74 2c 20 7a 46 69 6c 65 29  le(&text, zFile)
18a0: 3b 0a 20 20 7a 43 6d 64 20 3d 20 6d 70 72 69 6e  ;.  zCmd = mprin
18b0: 74 66 28 22 25 73 20 25 73 22 2c 20 7a 45 64 69  tf("%s %s", zEdi
18c0: 74 6f 72 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 70  tor, zFile);.  p
18d0: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 7a 43  rintf("%s\n", zC
18e0: 6d 64 29 3b 0a 20 20 69 66 28 20 73 79 73 74 65  md);.  if( syste
18f0: 6d 28 7a 43 6d 64 29 20 29 7b 0a 20 20 20 20 66  m(zCmd) ){.    f
1900: 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 65 64 69  ossil_panic("edi
1910: 74 6f 72 20 61 62 6f 72 74 65 64 22 29 3b 0a 20  tor aborted");. 
1920: 20 7d 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28   }.  blob_reset(
1930: 26 74 65 78 74 29 3b 0a 20 20 62 6c 6f 62 5f 72  &text);.  blob_r
1940: 65 61 64 5f 66 72 6f 6d 5f 66 69 6c 65 28 26 74  ead_from_file(&t
1950: 65 78 74 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 75  ext, zFile);.  u
1960: 6e 6c 69 6e 6b 28 7a 46 69 6c 65 29 3b 0a 20 20  nlink(zFile);.  
1970: 66 72 65 65 28 7a 46 69 6c 65 29 3b 0a 20 20 62  free(zFile);.  b
1980: 6c 6f 62 5f 7a 65 72 6f 28 70 43 6f 6d 6d 65 6e  lob_zero(pCommen
1990: 74 29 3b 0a 20 20 77 68 69 6c 65 28 20 62 6c 6f  t);.  while( blo
19a0: 62 5f 6c 69 6e 65 28 26 74 65 78 74 2c 20 26 6c  b_line(&text, &l
19b0: 69 6e 65 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ine) ){.    int 
19c0: 69 2c 20 6e 3b 0a 20 20 20 20 63 68 61 72 20 2a  i, n;.    char *
19d0: 7a 3b 0a 20 20 20 20 6e 20 3d 20 62 6c 6f 62 5f  z;.    n = blob_
19e0: 73 69 7a 65 28 26 6c 69 6e 65 29 3b 0a 20 20 20  size(&line);.   
19f0: 20 7a 20 3d 20 62 6c 6f 62 5f 62 75 66 66 65 72   z = blob_buffer
1a00: 28 26 6c 69 6e 65 29 3b 0a 20 20 20 20 66 6f 72  (&line);.    for
1a10: 28 69 3d 30 3b 20 69 3c 6e 20 26 26 20 69 73 73  (i=0; i<n && iss
1a20: 70 61 63 65 28 7a 5b 69 5d 29 3b 20 20 69 2b 2b  pace(z[i]);  i++
1a30: 29 7b 7d 0a 20 20 20 20 69 66 28 20 69 3c 6e 20  ){}.    if( i<n 
1a40: 26 26 20 7a 5b 69 5d 3d 3d 27 23 27 20 29 20 63  && z[i]=='#' ) c
1a50: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 62 6c 6f  ontinue;.    blo
1a60: 62 5f 61 70 70 65 6e 64 66 28 70 43 6f 6d 6d 65  b_appendf(pComme
1a70: 6e 74 2c 20 22 25 62 5c 6e 22 2c 20 26 6c 69 6e  nt, "%b\n", &lin
1a80: 65 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 72  e);.  }.  blob_r
1a90: 65 73 65 74 28 26 74 65 78 74 29 3b 0a 20 20 7a  eset(&text);.  z
1aa0: 43 6f 6d 6d 65 6e 74 20 3d 20 62 6c 6f 62 5f 73  Comment = blob_s
1ab0: 74 72 28 70 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20  tr(pComment);.  
1ac0: 69 20 3d 20 73 74 72 6c 65 6e 28 7a 43 6f 6d 6d  i = strlen(zComm
1ad0: 65 6e 74 29 3b 0a 20 20 77 68 69 6c 65 28 20 69  ent);.  while( i
1ae0: 3e 30 20 26 26 20 69 73 73 70 61 63 65 28 7a 43  >0 && isspace(zC
1af0: 6f 6d 6d 65 6e 74 5b 69 2d 31 5d 29 20 29 7b 20  omment[i-1]) ){ 
1b00: 69 2d 2d 3b 20 7d 0a 20 20 62 6c 6f 62 5f 72 65  i--; }.  blob_re
1b10: 73 69 7a 65 28 70 43 6f 6d 6d 65 6e 74 2c 20 69  size(pComment, i
1b20: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 6f 70 75  );.}../*.** Popu
1b30: 6c 61 74 65 20 74 68 65 20 47 6c 6f 62 61 6c 2e  late the Global.
1b40: 61 43 6f 6d 6d 69 74 46 69 6c 65 5b 5d 20 62 61  aCommitFile[] ba
1b50: 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61  sed on the comma
1b60: 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd line argument
1b70: 73 0a 2a 2a 20 74 6f 20 61 20 5b 63 6f 6d 6d 69  s.** to a [commi
1b80: 74 5d 20 63 6f 6d 6d 61 6e 64 2e 20 47 6c 6f 62  t] command. Glob
1b90: 61 6c 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 20 69  al.aCommitFile i
1ba0: 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e  s an array of in
1bb0: 74 65 67 65 72 73 0a 2a 2a 20 73 69 7a 65 64 20  tegers.** sized 
1bc0: 61 74 20 28 4e 2b 31 29 2c 20 77 68 65 72 65 20  at (N+1), where 
1bd0: 4e 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  N is the number 
1be0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
1bf0: 73 65 64 20 74 6f 20 5b 63 6f 6d 6d 69 74 5d 2e  sed to [commit].
1c00: 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 73  .** The contents
1c10: 20 61 72 65 20 74 68 65 20 5b 69 64 5d 20 76 61   are the [id] va
1c20: 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20 76 66  lues from the vf
1c30: 69 6c 65 20 74 61 62 6c 65 20 63 6f 72 72 65 73  ile table corres
1c40: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 6f 20 74 68  ponding.** to th
1c50: 65 20 66 69 6c 65 6e 61 6d 65 73 20 70 61 73 73  e filenames pass
1c60: 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 2e  ed as arguments.
1c70: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 61 73 74 20  .**.** The last 
1c80: 65 6c 65 6d 65 6e 74 20 6f 66 20 61 43 6f 6d 6d  element of aComm
1c90: 69 74 46 69 6c 65 5b 5d 20 69 73 20 61 6c 77 61  itFile[] is alwa
1ca0: 79 73 20 30 20 2d 20 69 6e 64 69 63 61 74 69 6e  ys 0 - indicatin
1cb0: 67 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20  g the end.** of 
1cc0: 74 68 65 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  the array..**.**
1cd0: 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20 6e   If there were n
1ce0: 6f 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73  o arguments pass
1cf0: 65 64 20 74 6f 20 5b 63 6f 6d 6d 69 74 5d 2c 20  ed to [commit], 
1d00: 61 43 6f 6d 6d 69 74 46 69 6c 65 20 69 73 20 6e  aCommitFile is n
1d10: 6f 74 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 20  ot.** allocated 
1d20: 61 6e 64 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c  and remains NULL
1d30: 2e 20 4f 74 68 65 72 20 70 61 72 74 73 20 6f 66  . Other parts of
1d40: 20 74 68 65 20 63 6f 64 65 20 69 6e 74 65 72 70   the code interp
1d50: 72 65 74 20 74 68 69 73 0a 2a 2a 20 74 6f 20 6d  ret this.** to m
1d60: 65 61 6e 20 22 61 6c 6c 20 66 69 6c 65 73 22 2e  ean "all files".
1d70: 0a 2a 2f 0a 76 6f 69 64 20 73 65 6c 65 63 74 5f  .*/.void select_
1d80: 63 6f 6d 6d 69 74 5f 66 69 6c 65 73 28 76 6f 69  commit_files(voi
1d90: 64 29 7b 0a 20 20 69 66 28 20 67 2e 61 72 67 63  d){.  if( g.argc
1da0: 3e 32 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 69  >2 ){.    int ii
1db0: 3b 0a 20 20 20 20 42 6c 6f 62 20 62 3b 0a 20 20  ;.    Blob b;.  
1dc0: 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 62 29 3b    blob_zero(&b);
1dd0: 0a 20 20 20 20 67 2e 61 43 6f 6d 6d 69 74 46 69  .    g.aCommitFi
1de0: 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65  le = malloc(size
1df0: 6f 66 28 69 6e 74 29 2a 28 67 2e 61 72 67 63 2d  of(int)*(g.argc-
1e00: 31 29 29 3b 0a 0a 20 20 20 20 66 6f 72 28 69 69  1));..    for(ii
1e10: 3d 32 3b 20 69 69 3c 67 2e 61 72 67 63 3b 20 69  =2; ii<g.argc; i
1e20: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  i++){.      int 
1e30: 69 49 64 3b 0a 20 20 20 20 20 20 69 66 28 20 21  iId;.      if( !
1e40: 66 69 6c 65 5f 74 72 65 65 5f 6e 61 6d 65 28 67  file_tree_name(g
1e50: 2e 61 72 67 76 5b 69 69 5d 2c 20 26 62 29 20 29  .argv[ii], &b) )
1e60: 7b 0a 20 20 20 20 20 20 20 20 66 6f 73 73 69 6c  {.        fossil
1e70: 5f 66 61 74 61 6c 28 22 66 69 6c 65 20 69 73 20  _fatal("file is 
1e80: 6e 6f 74 20 69 6e 20 74 72 65 65 3a 20 25 73 22  not in tree: %s"
1e90: 2c 20 67 2e 61 72 67 76 5b 69 69 5d 29 3b 0a 20  , g.argv[ii]);. 
1ea0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 49 64       }.      iId
1eb0: 20 3d 20 64 62 5f 69 6e 74 28 2d 31 2c 20 22 53   = db_int(-1, "S
1ec0: 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 76 66  ELECT id FROM vf
1ed0: 69 6c 65 20 57 48 45 52 45 20 70 61 74 68 6e 61  ile WHERE pathna
1ee0: 6d 65 3d 25 51 22 2c 20 62 6c 6f 62 5f 73 74 72  me=%Q", blob_str
1ef0: 28 26 62 29 29 3b 0a 20 20 20 20 20 20 69 66 28  (&b));.      if(
1f00: 20 69 49 64 3c 30 20 29 7b 0a 20 20 20 20 20 20   iId<0 ){.      
1f10: 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28 22    fossil_fatal("
1f20: 66 6f 73 73 69 6c 20 6b 6e 6f 77 73 20 6e 6f 74  fossil knows not
1f30: 68 69 6e 67 20 61 62 6f 75 74 3a 20 25 73 22 2c  hing about: %s",
1f40: 20 67 2e 61 72 67 76 5b 69 69 5d 29 3b 0a 20 20   g.argv[ii]);.  
1f50: 20 20 20 20 7d 0a 20 20 20 20 20 20 67 2e 61 43      }.      g.aC
1f60: 6f 6d 6d 69 74 46 69 6c 65 5b 69 69 2d 32 5d 20  ommitFile[ii-2] 
1f70: 3d 20 69 49 64 3b 0a 20 20 20 20 20 20 62 6c 6f  = iId;.      blo
1f80: 62 5f 72 65 73 65 74 28 26 62 29 3b 0a 20 20 20  b_reset(&b);.   
1f90: 20 7d 0a 20 20 20 20 67 2e 61 43 6f 6d 6d 69 74   }.    g.aCommit
1fa0: 46 69 6c 65 5b 69 69 2d 32 5d 20 3d 20 30 3b 0a  File[ii-2] = 0;.
1fb0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d    }.}../*.** COM
1fc0: 4d 41 4e 44 3a 20 63 6f 6d 6d 69 74 0a 2a 2a 0a  MAND: commit.**.
1fd0: 2a 2a 20 55 73 61 67 65 3a 20 25 66 6f 73 73 69  ** Usage: %fossi
1fe0: 6c 20 63 6f 6d 6d 69 74 20 3f 2d 6d 20 43 4f 4d  l commit ?-m COM
1ff0: 4d 45 4e 54 3f 20 3f 2d 2d 6e 6f 73 69 67 6e 3f  MENT? ?--nosign?
2000: 20 3f 46 49 4c 45 2e 2e 2e 3f 0a 2a 2a 0a 2a 2a   ?FILE...?.**.**
2010: 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 76 65   Create a new ve
2020: 72 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67  rsion containing
2030: 20 61 6c 6c 20 6f 66 20 74 68 65 20 63 68 61 6e   all of the chan
2040: 67 65 73 20 69 6e 20 74 68 65 20 63 75 72 72 65  ges in the curre
2050: 6e 74 0a 2a 2a 20 63 68 65 63 6b 6f 75 74 2e 20  nt.** checkout. 
2060: 20 59 6f 75 20 77 69 6c 6c 20 62 65 20 70 72 6f   You will be pro
2070: 6d 70 74 65 64 20 74 6f 20 65 6e 74 65 72 20 61  mpted to enter a
2080: 20 63 68 65 63 6b 2d 69 6e 20 63 6f 6d 6d 65 6e   check-in commen
2090: 74 20 75 6e 6c 65 73 73 0a 2a 2a 20 74 68 65 20  t unless.** the 
20a0: 22 2d 6d 22 20 6f 70 74 69 6f 6e 20 69 73 20 75  "-m" option is u
20b0: 73 65 64 20 74 6f 20 73 70 65 63 69 66 79 20 61  sed to specify a
20c0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
20d0: 59 6f 75 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 70  You will be.** p
20e0: 72 6f 6d 70 74 65 64 20 66 6f 72 20 79 6f 75 72  rompted for your
20f0: 20 47 50 47 20 70 61 73 73 70 68 72 61 73 65 20   GPG passphrase 
2100: 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 69 67 6e  in order to sign
2110: 20 74 68 65 20 6e 65 77 20 6d 61 6e 69 66 65 73   the new manifes
2120: 74 0a 2a 2a 20 75 6e 6c 65 73 73 20 74 68 65 20  t.** unless the 
2130: 22 2d 2d 6e 6f 73 69 67 6e 22 20 6f 70 74 69 6f  "--nosign" optio
2140: 6e 73 20 69 73 20 75 73 65 64 2e 20 20 41 6c 6c  ns is used.  All
2150: 20 66 69 6c 65 73 20 74 68 61 74 20 68 61 76 65   files that have
2160: 0a 2a 2a 20 63 68 61 6e 67 65 64 20 77 69 6c 6c  .** changed will
2170: 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 20 75 6e   be committed un
2180: 6c 65 73 73 20 73 6f 6d 65 20 73 75 62 73 65 74  less some subset
2190: 20 6f 66 20 66 69 6c 65 73 20 69 73 20 73 70 65   of files is spe
21a0: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
21b0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 0a 2a   command line..*
21c0: 2f 0a 76 6f 69 64 20 63 6f 6d 6d 69 74 5f 63 6d  /.void commit_cm
21d0: 64 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72  d(void){.  int r
21e0: 63 3b 0a 20 20 69 6e 74 20 76 69 64 2c 20 6e 72  c;.  int vid, nr
21f0: 69 64 2c 20 6e 76 69 64 3b 0a 20 20 42 6c 6f 62  id, nvid;.  Blob
2200: 20 63 6f 6d 6d 65 6e 74 3b 0a 20 20 63 6f 6e 73   comment;.  cons
2210: 74 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74  t char *zComment
2220: 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 53 74  ;.  Stmt q;.  St
2230: 6d 74 20 71 32 3b 0a 20 20 63 68 61 72 20 2a 7a  mt q2;.  char *z
2240: 55 75 69 64 2c 20 2a 7a 44 61 74 65 3b 0a 20 20  Uuid, *zDate;.  
2250: 69 6e 74 20 6e 6f 53 69 67 6e 20 3d 20 30 3b 20  int noSign = 0; 
2260: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
2270: 6f 20 6f 6d 69 74 20 73 69 67 6e 69 6e 67 20 74  o omit signing t
2280: 68 65 20 6d 61 6e 69 66 65 73 74 20 75 73 69 6e  he manifest usin
2290: 67 20 47 50 47 20 2a 2f 0a 20 20 63 68 61 72 20  g GPG */.  char 
22a0: 2a 7a 4d 61 6e 69 66 65 73 74 46 69 6c 65 3b 20  *zManifestFile; 
22b0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
22c0: 20 6d 61 6e 69 66 65 73 74 20 66 69 6c 65 20 2a   manifest file *
22d0: 2f 0a 20 20 42 6c 6f 62 20 6d 61 6e 69 66 65 73  /.  Blob manifes
22e0: 74 3b 0a 20 20 42 6c 6f 62 20 6d 63 6b 73 75 6d  t;.  Blob mcksum
22f0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ;           /* S
2300: 65 6c 66 2d 63 68 65 63 6b 73 75 6d 20 6f 6e 20  elf-checksum on 
2310: 74 68 65 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a  the manifest */.
2320: 20 20 42 6c 6f 62 20 63 6b 73 75 6d 31 2c 20 63    Blob cksum1, c
2330: 6b 73 75 6d 32 3b 20 20 20 2f 2a 20 42 65 66 6f  ksum2;   /* Befo
2340: 72 65 20 61 6e 64 20 61 66 74 65 72 20 63 6f 6d  re and after com
2350: 6d 69 74 20 63 68 65 63 6b 73 75 6d 73 20 2a 2f  mit checksums */
2360: 0a 20 20 42 6c 6f 62 20 63 6b 73 75 6d 31 62 3b  .  Blob cksum1b;
2370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65            /* Che
2380: 63 6b 73 75 6d 20 72 65 63 6f 72 64 65 64 20 69  cksum recorded i
2390: 6e 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 2a  n the manifest *
23a0: 2f 0a 20 0a 20 20 6e 6f 53 69 67 6e 20 3d 20 66  /. .  noSign = f
23b0: 69 6e 64 5f 6f 70 74 69 6f 6e 28 22 6e 6f 73 69  ind_option("nosi
23c0: 67 6e 22 2c 22 22 2c 30 29 21 3d 30 3b 0a 20 20  gn","",0)!=0;.  
23d0: 7a 43 6f 6d 6d 65 6e 74 20 3d 20 66 69 6e 64 5f  zComment = find_
23e0: 6f 70 74 69 6f 6e 28 22 63 6f 6d 6d 65 6e 74 22  option("comment"
23f0: 2c 22 6d 22 2c 31 29 3b 0a 20 20 64 62 5f 6d 75  ,"m",1);.  db_mu
2400: 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65  st_be_within_tre
2410: 65 28 29 3b 0a 20 20 6e 6f 53 69 67 6e 20 3d 20  e();.  noSign = 
2420: 64 62 5f 67 65 74 5f 69 6e 74 28 22 6f 6d 69 74  db_get_int("omit
2430: 2d 63 69 2d 73 69 67 22 2c 20 30 29 7c 6e 6f 53  -ci-sig", 0)|noS
2440: 69 67 6e 3b 0a 20 20 76 65 72 69 66 79 5f 61 6c  ign;.  verify_al
2450: 6c 5f 6f 70 74 69 6f 6e 73 28 29 3b 0a 0a 20 20  l_options();..  
2460: 2f 2a 20 54 68 65 72 65 20 61 72 65 20 74 77 6f  /* There are two
2470: 20 77 61 79 73 20 74 68 69 73 20 63 6f 6d 6d 61   ways this comma
2480: 6e 64 20 6d 61 79 20 62 65 20 65 78 65 63 75 74  nd may be execut
2490: 65 64 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ed. If there are
24a0: 0a 20 20 2a 2a 20 6e 6f 20 61 72 67 75 6d 65 6e  .  ** no argumen
24b0: 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
24c0: 20 77 6f 72 64 20 22 63 6f 6d 6d 69 74 22 2c 20   word "commit", 
24d0: 74 68 65 6e 20 61 6c 6c 20 6d 6f 64 69 66 69 65  then all modifie
24e0: 64 20 66 69 6c 65 73 0a 20 20 2a 2a 20 69 6e 20  d files.  ** in 
24f0: 74 68 65 20 63 68 65 63 6b 65 64 20 6f 75 74 20  the checked out 
2500: 64 69 72 65 63 74 6f 72 79 20 61 72 65 20 63 6f  directory are co
2510: 6d 6d 69 74 74 65 64 2e 20 49 66 20 6f 6e 65 20  mmitted. If one 
2520: 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
2530: 73 0a 20 20 2a 2a 20 66 6f 6c 6c 6f 77 73 20 22  s.  ** follows "
2540: 63 6f 6d 6d 69 74 22 2c 20 74 68 65 6e 20 6f 6e  commit", then on
2550: 6c 79 20 74 68 6f 73 65 20 66 69 6c 65 73 20 61  ly those files a
2560: 72 65 20 63 6f 6d 6d 69 74 74 65 64 2e 0a 20 20  re committed..  
2570: 2a 2a 0a 20 20 2a 2a 20 41 66 74 65 72 20 74 68  **.  ** After th
2580: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63  e following func
2590: 74 69 6f 6e 20 63 61 6c 6c 20 68 61 73 20 72 65  tion call has re
25a0: 74 75 72 6e 65 64 2c 20 74 68 65 20 47 6c 6f 62  turned, the Glob
25b0: 61 6c 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 5b 5d  al.aCommitFile[]
25c0: 0a 20 20 2a 2a 20 61 72 72 61 79 20 69 73 20 61  .  ** array is a
25d0: 6c 6c 6f 63 61 74 65 64 20 74 6f 20 63 6f 6e 74  llocated to cont
25e0: 61 69 6e 20 74 68 65 20 22 69 64 22 20 66 69 65  ain the "id" fie
25f0: 6c 64 20 66 72 6f 6d 20 74 68 65 20 76 66 69 6c  ld from the vfil
2600: 65 20 74 61 62 6c 65 0a 20 20 2a 2a 20 66 6f 72  e table.  ** for
2610: 20 65 61 63 68 20 66 69 6c 65 20 74 6f 20 62 65   each file to be
2620: 20 63 6f 6d 6d 69 74 74 65 64 2e 20 4f 72 2c 20   committed. Or, 
2630: 69 66 20 61 43 6f 6d 6d 69 74 46 69 6c 65 20 69  if aCommitFile i
2640: 73 20 4e 55 4c 4c 2c 20 61 6c 6c 20 66 69 6c 65  s NULL, all file
2650: 73 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 62 65  s.  ** should be
2660: 20 63 6f 6d 6d 69 74 74 65 64 2e 0a 20 20 2a 2f   committed..  */
2670: 0a 20 20 73 65 6c 65 63 74 5f 63 6f 6d 6d 69 74  .  select_commit
2680: 5f 66 69 6c 65 73 28 29 3b 0a 20 20 69 66 28 20  _files();.  if( 
2690: 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 20 26 26  g.aCommitFile &&
26a0: 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45   db_exists("SELE
26b0: 43 54 20 31 20 46 52 4f 4d 20 76 6d 65 72 67 65  CT 1 FROM vmerge
26c0: 22 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c  ") ){.    fossil
26d0: 5f 66 61 74 61 6c 28 22 63 61 6e 6e 6f 74 20 64  _fatal("cannot d
26e0: 6f 20 61 20 70 61 72 74 69 61 6c 20 63 6f 6d 6d  o a partial comm
26f0: 69 74 20 6f 66 20 61 20 6d 65 72 67 65 22 29 3b  it of a merge");
2700: 0a 20 20 7d 0a 0a 20 20 75 73 65 72 5f 73 65 6c  .  }..  user_sel
2710: 65 63 74 28 29 3b 0a 20 20 64 62 5f 62 65 67 69  ect();.  db_begi
2720: 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b  n_transaction();
2730: 0a 20 20 72 63 20 3d 20 75 6e 73 61 76 65 64 5f  .  rc = unsaved_
2740: 63 68 61 6e 67 65 73 28 29 3b 0a 20 20 69 66 28  changes();.  if(
2750: 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f   rc==0 ){.    fo
2760: 73 73 69 6c 5f 70 61 6e 69 63 28 22 6e 6f 74 68  ssil_panic("noth
2770: 69 6e 67 20 68 61 73 20 63 68 61 6e 67 65 64 22  ing has changed"
2780: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  );.  }..  /* If 
2790: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 6c 65  one or more file
27a0: 73 20 74 68 61 74 20 77 65 72 65 20 6e 61 6d 65  s that were name
27b0: 64 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  d on the command
27c0: 20 6c 69 6e 65 20 68 61 76 65 20 6e 6f 74 0a 20   line have not. 
27d0: 20 2a 2a 20 62 65 65 6e 20 6d 6f 64 69 66 69 65   ** been modifie
27e0: 64 2c 20 62 61 69 6c 20 6f 75 74 20 6e 6f 77 2e  d, bail out now.
27f0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 67 2e 61 43  .  */.  if( g.aC
2800: 6f 6d 6d 69 74 46 69 6c 65 20 29 7b 0a 20 20 20  ommitFile ){.   
2810: 20 42 6c 6f 62 20 75 6e 6d 6f 64 69 66 69 65 64   Blob unmodified
2820: 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 75 6e  ;.    memset(&un
2830: 6d 6f 64 69 66 69 65 64 2c 20 30 2c 20 73 69 7a  modified, 0, siz
2840: 65 6f 66 28 42 6c 6f 62 29 29 3b 0a 20 20 20 20  eof(Blob));.    
2850: 62 6c 6f 62 5f 69 6e 69 74 28 26 75 6e 6d 6f 64  blob_init(&unmod
2860: 69 66 69 65 64 2c 20 30 2c 20 30 29 3b 0a 20 20  ified, 0, 0);.  
2870: 20 20 64 62 5f 62 6c 6f 62 28 26 75 6e 6d 6f 64    db_blob(&unmod
2880: 69 66 69 65 64 2c 20 0a 20 20 20 20 20 20 22 53  ified, .      "S
2890: 45 4c 45 43 54 20 70 61 74 68 6e 61 6d 65 20 46  ELECT pathname F
28a0: 52 4f 4d 20 76 66 69 6c 65 20 57 48 45 52 45 20  ROM vfile WHERE 
28b0: 63 68 6e 67 65 64 20 3d 20 30 20 41 4e 44 20 66  chnged = 0 AND f
28c0: 69 6c 65 5f 69 73 5f 73 65 6c 65 63 74 65 64 28  ile_is_selected(
28d0: 69 64 29 22 0a 20 20 20 20 29 3b 0a 20 20 20 20  id)".    );.    
28e0: 69 66 28 20 73 74 72 6c 65 6e 28 62 6c 6f 62 5f  if( strlen(blob_
28f0: 73 74 72 28 26 75 6e 6d 6f 64 69 66 69 65 64 29  str(&unmodified)
2900: 29 20 29 7b 0a 20 20 20 20 20 20 66 6f 73 73 69  ) ){.      fossi
2910: 6c 5f 70 61 6e 69 63 28 22 66 69 6c 65 20 25 73  l_panic("file %s
2920: 20 68 61 73 20 6e 6f 74 20 63 68 61 6e 67 65 64   has not changed
2930: 22 2c 20 62 6c 6f 62 5f 73 74 72 28 26 75 6e 6d  ", blob_str(&unm
2940: 6f 64 69 66 69 65 64 29 29 3b 0a 20 20 20 20 7d  odified));.    }
2950: 0a 20 20 7d 0a 0a 20 20 76 69 64 20 3d 20 64 62  .  }..  vid = db
2960: 5f 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63 6b  _lget_int("check
2970: 6f 75 74 22 2c 20 30 29 3b 0a 20 20 76 66 69 6c  out", 0);.  vfil
2980: 65 5f 61 67 67 72 65 67 61 74 65 5f 63 68 65 63  e_aggregate_chec
2990: 6b 73 75 6d 5f 64 69 73 6b 28 76 69 64 2c 20 26  ksum_disk(vid, &
29a0: 63 6b 73 75 6d 31 29 3b 0a 20 20 69 66 28 20 7a  cksum1);.  if( z
29b0: 43 6f 6d 6d 65 6e 74 20 29 7b 0a 20 20 20 20 62  Comment ){.    b
29c0: 6c 6f 62 5f 7a 65 72 6f 28 26 63 6f 6d 6d 65 6e  lob_zero(&commen
29d0: 74 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70  t);.    blob_app
29e0: 65 6e 64 28 26 63 6f 6d 6d 65 6e 74 2c 20 7a 43  end(&comment, zC
29f0: 6f 6d 6d 65 6e 74 2c 20 2d 31 29 3b 0a 20 20 7d  omment, -1);.  }
2a00: 65 6c 73 65 7b 0a 20 20 20 20 70 72 65 70 61 72  else{.    prepar
2a10: 65 5f 63 6f 6d 6d 69 74 5f 63 6f 6d 6d 65 6e 74  e_commit_comment
2a20: 28 26 63 6f 6d 6d 65 6e 74 29 3b 0a 20 20 7d 0a  (&comment);.  }.
2a30: 0a 20 20 2f 2a 20 53 74 65 70 20 31 3a 20 49 6e  .  /* Step 1: In
2a40: 73 65 72 74 20 72 65 63 6f 72 64 73 20 66 6f 72  sert records for
2a50: 20 61 6c 6c 20 6d 6f 64 69 66 69 65 64 20 66 69   all modified fi
2a60: 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 62 6c 6f  les into the blo
2a70: 62 20 0a 20 20 2a 2a 20 74 61 62 6c 65 2e 20 49  b .  ** table. I
2a80: 66 20 74 68 65 72 65 20 77 65 72 65 20 61 72 67  f there were arg
2a90: 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f  uments passed to
2aa0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 2c 20 6f   this command, o
2ab0: 6e 6c 79 0a 20 20 2a 2a 20 74 68 65 20 69 64 65  nly.  ** the ide
2ac0: 6e 74 69 66 69 65 64 20 66 69 6c 73 20 61 72 65  ntified fils are
2ad0: 20 69 6e 73 65 72 74 65 64 20 28 69 66 20 74 68   inserted (if th
2ae0: 65 79 20 68 61 76 65 20 62 65 65 6e 20 6d 6f 64  ey have been mod
2af0: 69 66 69 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 64  ified)..  */.  d
2b00: 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20  b_prepare(&q,.  
2b10: 20 20 22 53 45 4c 45 43 54 20 69 64 2c 20 25 51    "SELECT id, %Q
2b20: 20 7c 7c 20 70 61 74 68 6e 61 6d 65 2c 20 6d 72   || pathname, mr
2b30: 69 64 20 46 52 4f 4d 20 76 66 69 6c 65 20 22 0a  id FROM vfile ".
2b40: 20 20 20 20 22 57 48 45 52 45 20 63 68 6e 67 65      "WHERE chnge
2b50: 64 3d 3d 31 20 41 4e 44 20 4e 4f 54 20 64 65 6c  d==1 AND NOT del
2b60: 65 74 65 64 20 41 4e 44 20 66 69 6c 65 5f 69 73  eted AND file_is
2b70: 5f 73 65 6c 65 63 74 65 64 28 69 64 29 22 0a 20  _selected(id)". 
2b80: 20 20 20 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f     , g.zLocalRoo
2b90: 74 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  t.  );.  while( 
2ba0: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c  db_step(&q)==SQL
2bb0: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69  ITE_ROW ){.    i
2bc0: 6e 74 20 69 64 2c 20 72 69 64 3b 0a 20 20 20 20  nt id, rid;.    
2bd0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6c  const char *zFul
2be0: 6c 6e 61 6d 65 3b 0a 20 20 20 20 42 6c 6f 62 20  lname;.    Blob 
2bf0: 63 6f 6e 74 65 6e 74 3b 0a 0a 20 20 20 20 69 64  content;..    id
2c00: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74   = db_column_int
2c10: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 7a 46 75  (&q, 0);.    zFu
2c20: 6c 6c 6e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75  llname = db_colu
2c30: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a  mn_text(&q, 1);.
2c40: 20 20 20 20 72 69 64 20 3d 20 64 62 5f 63 6f 6c      rid = db_col
2c50: 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 32 29 3b 0a  umn_int(&q, 2);.
2c60: 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26  .    blob_zero(&
2c70: 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 62 6c  content);.    bl
2c80: 6f 62 5f 72 65 61 64 5f 66 72 6f 6d 5f 66 69 6c  ob_read_from_fil
2c90: 65 28 26 63 6f 6e 74 65 6e 74 2c 20 7a 46 75 6c  e(&content, zFul
2ca0: 6c 6e 61 6d 65 29 3b 0a 20 20 20 20 6e 72 69 64  lname);.    nrid
2cb0: 20 3d 20 63 6f 6e 74 65 6e 74 5f 70 75 74 28 26   = content_put(&
2cc0: 63 6f 6e 74 65 6e 74 2c 20 30 2c 20 30 29 3b 0a  content, 0, 0);.
2cd0: 20 20 20 20 69 66 28 20 72 69 64 3e 30 20 29 7b      if( rid>0 ){
2ce0: 0a 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 5f 64  .      content_d
2cf0: 65 6c 74 69 66 79 28 72 69 64 2c 20 6e 72 69 64  eltify(rid, nrid
2d00: 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 0);.    }.    
2d10: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 55  db_multi_exec("U
2d20: 50 44 41 54 45 20 76 66 69 6c 65 20 53 45 54 20  PDATE vfile SET 
2d30: 6d 72 69 64 3d 25 64 2c 20 72 69 64 3d 25 64 20  mrid=%d, rid=%d 
2d40: 57 48 45 52 45 20 69 64 3d 25 64 22 2c 20 6e 72  WHERE id=%d", nr
2d50: 69 64 2c 6e 72 69 64 2c 69 64 29 3b 0a 20 20 7d  id,nrid,id);.  }
2d60: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26  .  db_finalize(&
2d70: 71 29 3b 0a 0a 20 20 2f 2a 20 43 72 65 61 74 65  q);..  /* Create
2d80: 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 2a 2f   the manifest */
2d90: 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 6d 61  .  blob_zero(&ma
2da0: 6e 69 66 65 73 74 29 3b 0a 20 20 62 6c 6f 62 5f  nifest);.  blob_
2db0: 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66 65 73  appendf(&manifes
2dc0: 74 2c 20 22 43 20 25 46 5c 6e 22 2c 20 62 6c 6f  t, "C %F\n", blo
2dd0: 62 5f 73 74 72 28 26 63 6f 6d 6d 65 6e 74 29 29  b_str(&comment))
2de0: 3b 0a 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 74  ;.  zDate = db_t
2df0: 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64  ext(0, "SELECT d
2e00: 61 74 65 74 69 6d 65 28 27 6e 6f 77 27 29 22 29  atetime('now')")
2e10: 3b 0a 20 20 7a 44 61 74 65 5b 31 30 5d 20 3d 20  ;.  zDate[10] = 
2e20: 27 54 27 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65  'T';.  blob_appe
2e30: 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22  ndf(&manifest, "
2e40: 44 20 25 73 5c 6e 22 2c 20 7a 44 61 74 65 29 3b  D %s\n", zDate);
2e50: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71  .  db_prepare(&q
2e60: 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 20 70 61  ,.    "SELECT pa
2e70: 74 68 6e 61 6d 65 2c 20 75 75 69 64 20 46 52 4f  thname, uuid FRO
2e80: 4d 20 76 66 69 6c 65 20 4a 4f 49 4e 20 62 6c 6f  M vfile JOIN blo
2e90: 62 20 4f 4e 20 76 66 69 6c 65 2e 6d 72 69 64 3d  b ON vfile.mrid=
2ea0: 62 6c 6f 62 2e 72 69 64 22 0a 20 20 20 20 22 20  blob.rid".    " 
2eb0: 57 48 45 52 45 20 4e 4f 54 20 64 65 6c 65 74 65  WHERE NOT delete
2ec0: 64 20 41 4e 44 20 76 66 69 6c 65 2e 76 69 64 3d  d AND vfile.vid=
2ed0: 25 64 22 0a 20 20 20 20 22 20 4f 52 44 45 52 20  %d".    " ORDER 
2ee0: 42 59 20 31 22 2c 20 76 69 64 29 3b 0a 20 20 77  BY 1", vid);.  w
2ef0: 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71  hile( db_step(&q
2f00: 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
2f10: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
2f20: 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75  *zName = db_colu
2f30: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a  mn_text(&q, 0);.
2f40: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2f50: 7a 55 75 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d  zUuid = db_colum
2f60: 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20  n_text(&q, 1);. 
2f70: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28     blob_appendf(
2f80: 26 6d 61 6e 69 66 65 73 74 2c 20 22 46 20 25 46  &manifest, "F %F
2f90: 20 25 73 5c 6e 22 2c 20 7a 4e 61 6d 65 2c 20 7a   %s\n", zName, z
2fa0: 55 75 69 64 29 3b 0a 20 20 7d 0a 20 20 64 62 5f  Uuid);.  }.  db_
2fb0: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20  finalize(&q);.  
2fc0: 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28  zUuid = db_text(
2fd0: 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20  0, "SELECT uuid 
2fe0: 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20  FROM blob WHERE 
2ff0: 72 69 64 3d 25 64 22 2c 20 76 69 64 29 3b 0a 20  rid=%d", vid);. 
3000: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d   blob_appendf(&m
3010: 61 6e 69 66 65 73 74 2c 20 22 50 20 25 73 22 2c  anifest, "P %s",
3020: 20 7a 55 75 69 64 29 3b 0a 0a 20 20 64 62 5f 70   zUuid);..  db_p
3030: 72 65 70 61 72 65 28 26 71 32 2c 20 22 53 45 4c  repare(&q2, "SEL
3040: 45 43 54 20 6d 65 72 67 65 20 46 52 4f 4d 20 76  ECT merge FROM v
3050: 6d 65 72 67 65 20 57 48 45 52 45 20 69 64 3d 3a  merge WHERE id=:
3060: 69 64 22 29 3b 0a 20 20 64 62 5f 62 69 6e 64 5f  id");.  db_bind_
3070: 69 6e 74 28 26 71 32 2c 20 22 3a 69 64 22 2c 20  int(&q2, ":id", 
3080: 30 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f  0);.  while( db_
3090: 73 74 65 70 28 26 71 32 29 3d 3d 53 51 4c 49 54  step(&q2)==SQLIT
30a0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74  E_ROW ){.    int
30b0: 20 6d 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e   mid = db_column
30c0: 5f 69 6e 74 28 26 71 32 2c 20 30 29 3b 0a 20 20  _int(&q2, 0);.  
30d0: 20 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78    zUuid = db_tex
30e0: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69  t(0, "SELECT uui
30f0: 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52  d FROM blob WHER
3100: 45 20 72 69 64 3d 25 64 22 2c 20 6d 69 64 29 3b  E rid=%d", mid);
3110: 0a 20 20 20 20 69 66 28 20 7a 55 75 69 64 20 29  .    if( zUuid )
3120: 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70  {.      blob_app
3130: 65 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20  endf(&manifest, 
3140: 22 20 25 73 22 2c 20 7a 55 75 69 64 29 3b 0a 20  " %s", zUuid);. 
3150: 20 20 20 20 20 66 72 65 65 28 7a 55 75 69 64 29       free(zUuid)
3160: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62  ;.    }.  }.  db
3170: 5f 72 65 73 65 74 28 26 71 32 29 3b 0a 0a 20 20  _reset(&q2);..  
3180: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61  blob_appendf(&ma
3190: 6e 69 66 65 73 74 2c 20 22 5c 6e 22 29 3b 0a 20  nifest, "\n");. 
31a0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d   blob_appendf(&m
31b0: 61 6e 69 66 65 73 74 2c 20 22 52 20 25 62 5c 6e  anifest, "R %b\n
31c0: 22 2c 20 26 63 6b 73 75 6d 31 29 3b 0a 20 20 62  ", &cksum1);.  b
31d0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e  lob_appendf(&man
31e0: 69 66 65 73 74 2c 20 22 55 20 25 46 5c 6e 22 2c  ifest, "U %F\n",
31f0: 20 67 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 6d 64   g.zLogin);.  md
3200: 35 73 75 6d 5f 62 6c 6f 62 28 26 6d 61 6e 69 66  5sum_blob(&manif
3210: 65 73 74 2c 20 26 6d 63 6b 73 75 6d 29 3b 0a 20  est, &mcksum);. 
3220: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d   blob_appendf(&m
3230: 61 6e 69 66 65 73 74 2c 20 22 5a 20 25 62 5c 6e  anifest, "Z %b\n
3240: 22 2c 20 26 6d 63 6b 73 75 6d 29 3b 0a 20 20 7a  ", &mcksum);.  z
3250: 4d 61 6e 69 66 65 73 74 46 69 6c 65 20 3d 20 6d  ManifestFile = m
3260: 70 72 69 6e 74 66 28 22 25 73 6d 61 6e 69 66 65  printf("%smanife
3270: 73 74 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f  st", g.zLocalRoo
3280: 74 29 3b 0a 20 20 69 66 28 20 21 6e 6f 53 69 67  t);.  if( !noSig
3290: 6e 20 26 26 20 63 6c 65 61 72 73 69 67 6e 28 26  n && clearsign(&
32a0: 6d 61 6e 69 66 65 73 74 2c 20 26 6d 61 6e 69 66  manifest, &manif
32b0: 65 73 74 29 20 29 7b 0a 20 20 20 20 42 6c 6f 62  est) ){.    Blob
32c0: 20 61 6e 73 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a   ans;.    blob_z
32d0: 65 72 6f 28 26 61 6e 73 29 3b 0a 20 20 20 20 70  ero(&ans);.    p
32e0: 72 6f 6d 70 74 5f 75 73 65 72 28 22 75 6e 61 62  rompt_user("unab
32f0: 6c 65 20 74 6f 20 73 69 67 6e 20 6d 61 6e 69 66  le to sign manif
3300: 65 73 74 2e 20 20 63 6f 6e 74 69 6e 75 65 20 5b  est.  continue [
3310: 79 2f 4e 5d 3f 20 22 2c 20 26 61 6e 73 29 3b 0a  y/N]? ", &ans);.
3320: 20 20 20 20 69 66 28 20 62 6c 6f 62 5f 73 74 72      if( blob_str
3330: 28 26 61 6e 73 29 5b 30 5d 21 3d 27 79 27 20 29  (&ans)[0]!='y' )
3340: 7b 0a 20 20 20 20 20 20 64 62 5f 65 6e 64 5f 74  {.      db_end_t
3350: 72 61 6e 73 61 63 74 69 6f 6e 28 31 29 3b 0a 20  ransaction(1);. 
3360: 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20       exit(1);.  
3370: 20 20 7d 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 77    }.  }.  blob_w
3380: 72 69 74 65 5f 74 6f 5f 66 69 6c 65 28 26 6d 61  rite_to_file(&ma
3390: 6e 69 66 65 73 74 2c 20 7a 4d 61 6e 69 66 65 73  nifest, zManifes
33a0: 74 46 69 6c 65 29 3b 0a 20 20 62 6c 6f 62 5f 72  tFile);.  blob_r
33b0: 65 73 65 74 28 26 6d 61 6e 69 66 65 73 74 29 3b  eset(&manifest);
33c0: 0a 20 20 62 6c 6f 62 5f 72 65 61 64 5f 66 72 6f  .  blob_read_fro
33d0: 6d 5f 66 69 6c 65 28 26 6d 61 6e 69 66 65 73 74  m_file(&manifest
33e0: 2c 20 7a 4d 61 6e 69 66 65 73 74 46 69 6c 65 29  , zManifestFile)
33f0: 3b 0a 20 20 66 72 65 65 28 7a 4d 61 6e 69 66 65  ;.  free(zManife
3400: 73 74 46 69 6c 65 29 3b 0a 20 20 6e 76 69 64 20  stFile);.  nvid 
3410: 3d 20 63 6f 6e 74 65 6e 74 5f 70 75 74 28 26 6d  = content_put(&m
3420: 61 6e 69 66 65 73 74 2c 20 30 2c 20 30 29 3b 0a  anifest, 0, 0);.
3430: 20 20 69 66 28 20 6e 76 69 64 3d 3d 30 20 29 7b    if( nvid==0 ){
3440: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69  .    fossil_pani
3450: 63 28 22 74 72 6f 75 62 6c 65 20 63 6f 6d 6d 69  c("trouble commi
3460: 74 74 69 6e 67 20 6d 61 6e 69 66 65 73 74 3a 20  tting manifest: 
3470: 25 73 22 2c 20 67 2e 7a 45 72 72 4d 73 67 29 3b  %s", g.zErrMsg);
3480: 0a 20 20 7d 0a 20 20 6d 61 6e 69 66 65 73 74 5f  .  }.  manifest_
3490: 63 72 6f 73 73 6c 69 6e 6b 28 6e 76 69 64 2c 20  crosslink(nvid, 
34a0: 26 6d 61 6e 69 66 65 73 74 29 3b 0a 20 20 63 6f  &manifest);.  co
34b0: 6e 74 65 6e 74 5f 64 65 6c 74 69 66 79 28 76 69  ntent_deltify(vi
34c0: 64 2c 20 6e 76 69 64 2c 20 30 29 3b 0a 20 20 7a  d, nvid, 0);.  z
34d0: 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 30  Uuid = db_text(0
34e0: 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46  , "SELECT uuid F
34f0: 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72  ROM blob WHERE r
3500: 69 64 3d 25 64 22 2c 20 6e 76 69 64 29 3b 0a 20  id=%d", nvid);. 
3510: 20 70 72 69 6e 74 66 28 22 4e 65 77 5f 56 65 72   printf("New_Ver
3520: 73 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 55 75  sion: %s\n", zUu
3530: 69 64 29 3b 0a 20 20 0a 20 20 2f 2a 20 55 70 64  id);.  .  /* Upd
3540: 61 74 65 20 74 68 65 20 76 66 69 6c 65 20 61 6e  ate the vfile an
3550: 64 20 76 6d 65 72 67 65 20 74 61 62 6c 65 73 20  d vmerge tables 
3560: 2a 2f 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78  */.  db_multi_ex
3570: 65 63 28 0a 20 20 20 20 22 44 45 4c 45 54 45 20  ec(.    "DELETE 
3580: 46 52 4f 4d 20 76 66 69 6c 65 20 57 48 45 52 45  FROM vfile WHERE
3590: 20 28 76 69 64 21 3d 25 64 20 4f 52 20 64 65 6c   (vid!=%d OR del
35a0: 65 74 65 64 29 20 41 4e 44 20 66 69 6c 65 5f 69  eted) AND file_i
35b0: 73 5f 73 65 6c 65 63 74 65 64 28 69 64 29 3b 22  s_selected(id);"
35c0: 0a 20 20 20 20 22 44 45 4c 45 54 45 20 46 52 4f  .    "DELETE FRO
35d0: 4d 20 76 6d 65 72 67 65 20 57 48 45 52 45 20 66  M vmerge WHERE f
35e0: 69 6c 65 5f 69 73 5f 73 65 6c 65 63 74 65 64 28  ile_is_selected(
35f0: 69 64 29 20 4f 52 20 69 64 3d 30 3b 22 0a 20 20  id) OR id=0;".  
3600: 20 20 22 55 50 44 41 54 45 20 76 66 69 6c 65 20    "UPDATE vfile 
3610: 53 45 54 20 76 69 64 3d 25 64 3b 22 0a 20 20 20  SET vid=%d;".   
3620: 20 22 55 50 44 41 54 45 20 76 66 69 6c 65 20 53   "UPDATE vfile S
3630: 45 54 20 72 69 64 3d 6d 72 69 64 2c 20 63 68 6e  ET rid=mrid, chn
3640: 67 65 64 3d 30 2c 20 64 65 6c 65 74 65 64 3d 30  ged=0, deleted=0
3650: 20 57 48 45 52 45 20 66 69 6c 65 5f 69 73 5f 73   WHERE file_is_s
3660: 65 6c 65 63 74 65 64 28 69 64 29 3b 22 0a 20 20  elected(id);".  
3670: 20 20 2c 20 76 69 64 2c 20 6e 76 69 64 0a 20 20    , vid, nvid.  
3680: 29 3b 0a 20 20 64 62 5f 6c 73 65 74 5f 69 6e 74  );.  db_lset_int
3690: 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 6e 76 69  ("checkout", nvi
36a0: 64 29 3b 0a 0a 20 20 2f 2a 20 56 65 72 69 66 79  d);..  /* Verify
36b0: 20 74 68 61 74 20 74 68 65 20 72 65 70 6f 73 69   that the reposi
36c0: 74 6f 72 79 20 63 68 65 63 6b 73 75 6d 20 6d 61  tory checksum ma
36d0: 74 63 68 65 73 20 74 68 65 20 65 78 70 65 63 74  tches the expect
36e0: 65 64 20 63 68 65 63 6b 73 75 6d 0a 20 20 2a 2a  ed checksum.  **
36f0: 20 63 61 6c 63 75 6c 61 74 65 64 20 62 65 66 6f   calculated befo
3700: 72 65 20 74 68 65 20 63 68 65 63 6b 69 6e 20 73  re the checkin s
3710: 74 61 72 74 65 64 20 28 61 6e 64 20 73 74 6f 72  tarted (and stor
3720: 65 64 20 61 73 20 74 68 65 20 52 20 72 65 63 6f  ed as the R reco
3730: 72 64 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 6d  rd.  ** of the m
3740: 61 6e 69 66 65 73 74 20 66 69 6c 65 29 2e 0a 20  anifest file).. 
3750: 20 2a 2f 0a 20 20 76 66 69 6c 65 5f 61 67 67 72   */.  vfile_aggr
3760: 65 67 61 74 65 5f 63 68 65 63 6b 73 75 6d 5f 72  egate_checksum_r
3770: 65 70 6f 73 69 74 6f 72 79 28 6e 76 69 64 2c 20  epository(nvid, 
3780: 26 63 6b 73 75 6d 32 29 3b 0a 20 20 69 66 28 20  &cksum2);.  if( 
3790: 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 28 26 63 6b  blob_compare(&ck
37a0: 73 75 6d 31 2c 20 26 63 6b 73 75 6d 32 29 20 29  sum1, &cksum2) )
37b0: 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e  {.    fossil_pan
37c0: 69 63 28 22 74 72 65 65 20 63 68 65 63 6b 73 75  ic("tree checksu
37d0: 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  m does not match
37e0: 20 72 65 70 6f 73 69 74 6f 72 79 20 61 66 74 65   repository afte
37f0: 72 20 63 6f 6d 6d 69 74 22 29 3b 0a 20 20 7d 0a  r commit");.  }.
3800: 0a 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61  .  /* Verify tha
3810: 74 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 63  t the manifest c
3820: 68 65 63 6b 73 75 6d 20 6d 61 74 63 68 65 73 20  hecksum matches 
3830: 74 68 65 20 65 78 70 65 63 74 65 64 20 63 68 65  the expected che
3840: 63 6b 73 75 6d 20 2a 2f 0a 20 20 76 66 69 6c 65  cksum */.  vfile
3850: 5f 61 67 67 72 65 67 61 74 65 5f 63 68 65 63 6b  _aggregate_check
3860: 73 75 6d 5f 6d 61 6e 69 66 65 73 74 28 6e 76 69  sum_manifest(nvi
3870: 64 2c 20 26 63 6b 73 75 6d 32 2c 20 26 63 6b 73  d, &cksum2, &cks
3880: 75 6d 31 62 29 3b 0a 20 20 69 66 28 20 62 6c 6f  um1b);.  if( blo
3890: 62 5f 63 6f 6d 70 61 72 65 28 26 63 6b 73 75 6d  b_compare(&cksum
38a0: 31 2c 20 26 63 6b 73 75 6d 31 62 29 20 29 7b 0a  1, &cksum1b) ){.
38b0: 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63      fossil_panic
38c0: 28 22 6d 61 6e 69 66 65 73 74 20 63 68 65 63 6b  ("manifest check
38d0: 73 75 6d 20 64 6f 65 73 20 6e 6f 74 20 61 67 72  sum does not agr
38e0: 65 65 20 77 69 74 68 20 6d 61 6e 69 66 65 73 74  ee with manifest
38f0: 3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  : ".            
3900: 20 20 20 20 20 22 25 62 20 76 65 72 73 75 73 20       "%b versus 
3910: 25 62 22 2c 20 26 63 6b 73 75 6d 31 2c 20 26 63  %b", &cksum1, &c
3920: 6b 73 75 6d 31 62 29 3b 0a 20 20 7d 0a 20 20 69  ksum1b);.  }.  i
3930: 66 28 20 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 28  f( blob_compare(
3940: 26 63 6b 73 75 6d 31 2c 20 26 63 6b 73 75 6d 32  &cksum1, &cksum2
3950: 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f  ) ){.    fossil_
3960: 70 61 6e 69 63 28 22 74 72 65 65 20 63 68 65 63  panic("tree chec
3970: 6b 73 75 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61  ksum does not ma
3980: 74 63 68 20 6d 61 6e 69 66 65 73 74 20 61 66 74  tch manifest aft
3990: 65 72 20 63 6f 6d 6d 69 74 3a 20 22 0a 20 20 20  er commit: ".   
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25                "%
39b0: 62 20 76 65 72 73 75 73 20 25 62 22 2c 20 26 63  b versus %b", &c
39c0: 6b 73 75 6d 31 2c 20 26 63 6b 73 75 6d 32 29 3b  ksum1, &cksum2);
39d0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 56 65 72 69 66  .  }..  /* Verif
39e0: 79 20 74 68 61 74 20 74 68 65 20 63 6f 6d 6d 69  y that the commi
39f0: 74 20 64 69 64 20 6e 6f 74 20 6d 6f 64 69 66 79  t did not modify
3a00: 20 61 6e 79 20 64 69 73 6b 20 69 6d 61 67 65 73   any disk images
3a10: 2e 20 2a 2f 0a 20 20 76 66 69 6c 65 5f 61 67 67  . */.  vfile_agg
3a20: 72 65 67 61 74 65 5f 63 68 65 63 6b 73 75 6d 5f  regate_checksum_
3a30: 64 69 73 6b 28 6e 76 69 64 2c 20 26 63 6b 73 75  disk(nvid, &cksu
3a40: 6d 32 29 3b 0a 20 20 69 66 28 20 62 6c 6f 62 5f  m2);.  if( blob_
3a50: 63 6f 6d 70 61 72 65 28 26 63 6b 73 75 6d 31 2c  compare(&cksum1,
3a60: 20 26 63 6b 73 75 6d 32 29 20 29 7b 0a 20 20 20   &cksum2) ){.   
3a70: 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 74   fossil_panic("t
3a80: 72 65 65 20 63 68 65 63 6b 73 75 6d 73 20 62 65  ree checksums be
3a90: 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 63  fore and after c
3aa0: 6f 6d 6d 69 74 20 64 6f 20 6e 6f 74 20 6d 61 74  ommit do not mat
3ab0: 63 68 22 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  ch");.  }..  /* 
3ac0: 43 6f 6d 6d 69 74 20 2a 2f 0a 20 20 64 62 5f 65  Commit */.  db_e
3ad0: 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 30  nd_transaction(0
3ae0: 29 3b 20 20 0a 7d 0a                             );  .}.