0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20 /*.** Copyright
0010: 28 63 29 20 32 30 30 37 20 44 2e 20 52 69 63 68 (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54 ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20 te it and/or.**
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20 modify it under
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 the terms of the
0090: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76 lic.** License v
00b0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c ersion 2 as publ
00c0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65 ished by the Fre
00d0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
00e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 ation..**.** Thi
00f0: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 s program is dis
0100: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 tributed in the
0110: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c hope that it wil
0120: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 l be useful,.**
0130: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 but WITHOUT ANY
0140: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 WARRANTY; withou
0150: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 t even the impli
0160: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a ed warranty of.*
0170: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 * MERCHANTABILIT
0180: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 Y or FITNESS FOR
0190: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 A PARTICULAR PU
01a0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20 RPOSE. See the
01b0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50 GNU.** General P
01c0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f ublic License fo
01d0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a r more details..
01e0: 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c ** .** You shoul
01f0: 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 d have received
0200: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e a copy of the GN
0210: 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 U General Public
0220: 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e .** License alon
0230: 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72 g with this libr
0240: 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69 ary; if not, wri
0250: 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65 te to the.** Fre
0260: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
0270: 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20 ation, Inc., 59
0280: 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53 Temple Place - S
0290: 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73 uite 330,.** Bos
02a0: 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31 ton, MA 02111-1
02b0: 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20 307, USA..**.**
02c0: 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69 Author contact i
02d0: 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 nformation:.**
02e0: 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a drh@hwaci.com.*
02f0: 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68 * http://www.h
0300: 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a waci.com/drh/.**
0310: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .***************
0320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0360: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 .**.** This file
0370: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 contains code u
0380: 73 65 64 20 74 6f 20 63 68 65 63 6b 2d 69 6e 20 sed to check-in
0390: 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 versions of the
03a0: 70 72 6f 6a 65 63 74 0a 2a 2a 20 66 72 6f 6d 20 project.** from
03b0: 74 68 65 20 6c 6f 63 61 6c 20 72 65 70 6f 73 69 the local reposi
03c0: 74 6f 72 79 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 tory..*/.#includ
03d0: 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e e "config.h".#in
03e0: 63 6c 75 64 65 20 22 63 68 65 63 6b 69 6e 2e 68 clude "checkin.h
03f0: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 ".#include <asse
0400: 72 74 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e rt.h>../*.** Gen
0410: 65 72 61 74 65 20 74 65 78 74 20 64 65 73 63 72 erate text descr
0420: 69 62 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 ibing all change
0430: 73 2e 20 20 50 72 65 70 65 6e 64 20 7a 50 72 65 s. Prepend zPre
0440: 66 69 78 20 74 6f 20 65 61 63 68 20 6c 69 6e 65 fix to each line
0450: 0a 2a 2a 20 6f 66 20 6f 75 74 70 75 74 2e 0a 2a .** of output..*
0460: 2a 0a 2a 2a 20 57 65 20 61 73 73 75 6d 65 20 74 *.** We assume t
0470: 68 61 74 20 76 66 69 6c 65 5f 63 68 65 63 6b 5f hat vfile_check_
0480: 73 69 67 6e 61 74 75 72 65 20 68 61 73 20 62 65 signature has be
0490: 65 6e 20 72 75 6e 2e 0a 2a 2f 0a 73 74 61 74 69 en run..*/.stati
04a0: 63 20 76 6f 69 64 20 73 74 61 74 75 73 5f 72 65 c void status_re
04b0: 70 6f 72 74 28 42 6c 6f 62 20 2a 72 65 70 6f 72 port(Blob *repor
04c0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a t, const char *z
04d0: 50 72 65 66 69 78 29 7b 0a 20 20 53 74 6d 74 20 Prefix){. Stmt
04e0: 71 3b 0a 20 20 69 6e 74 20 6e 50 72 65 66 69 78 q;. int nPrefix
04f0: 20 3d 20 73 74 72 6c 65 6e 28 7a 50 72 65 66 69 = strlen(zPrefi
0500: 78 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 x);. db_prepare
0510: 28 26 71 2c 20 0a 20 20 20 20 22 53 45 4c 45 43 (&q, . "SELEC
0520: 54 20 70 61 74 68 6e 61 6d 65 2c 20 64 65 6c 65 T pathname, dele
0530: 74 65 64 2c 20 63 68 6e 67 65 64 2c 20 72 69 64 ted, chnged, rid
0540: 20 46 52 4f 4d 20 76 66 69 6c 65 20 22 0a 20 20 FROM vfile ".
0550: 20 20 22 57 48 45 52 45 20 66 69 6c 65 5f 69 73 "WHERE file_is
0560: 5f 73 65 6c 65 63 74 65 64 28 69 64 29 20 41 4e _selected(id) AN
0570: 44 20 28 63 68 6e 67 65 64 20 4f 52 20 64 65 6c D (chnged OR del
0580: 65 74 65 64 20 4f 52 20 72 69 64 3d 30 29 20 4f eted OR rid=0) O
0590: 52 44 45 52 20 42 59 20 31 22 0a 20 20 29 3b 0a RDER BY 1". );.
05a0: 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 while( db_step
05b0: 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 (&q)==SQLITE_ROW
05c0: 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 ){. const ch
05d0: 61 72 20 2a 7a 50 61 74 68 6e 61 6d 65 20 3d 20 ar *zPathname =
05e0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
05f0: 71 2c 30 29 3b 0a 20 20 20 20 69 6e 74 20 69 73 q,0);. int is
0600: 44 65 6c 65 74 65 64 20 3d 20 64 62 5f 63 6f 6c Deleted = db_col
0610: 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 31 29 3b 0a umn_int(&q, 1);.
0620: 20 20 20 20 69 6e 74 20 69 73 43 68 6e 67 65 64 int isChnged
0630: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 = db_column_int
0640: 28 26 71 2c 32 29 3b 0a 20 20 20 20 69 6e 74 20 (&q,2);. int
0650: 69 73 4e 65 77 20 3d 20 64 62 5f 63 6f 6c 75 6d isNew = db_colum
0660: 6e 5f 69 6e 74 28 26 71 2c 33 29 3d 3d 30 3b 0a n_int(&q,3)==0;.
0670: 20 20 20 20 63 68 61 72 20 2a 7a 46 75 6c 6c 4e char *zFullN
0680: 61 6d 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 ame = mprintf("%
0690: 73 2f 25 73 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 s/%s", g.zLocalR
06a0: 6f 6f 74 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b oot, zPathname);
06b0: 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 . blob_append
06c0: 28 72 65 70 6f 72 74 2c 20 7a 50 72 65 66 69 78 (report, zPrefix
06d0: 2c 20 6e 50 72 65 66 69 78 29 3b 0a 20 20 20 20 , nPrefix);.
06e0: 69 66 28 20 69 73 44 65 6c 65 74 65 64 20 29 7b if( isDeleted ){
06f0: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
0700: 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 44 45 4c ndf(report, "DEL
0710: 45 54 45 44 20 20 25 73 5c 6e 22 2c 20 7a 50 61 ETED %s\n", zPa
0720: 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c thname);. }el
0730: 73 65 20 69 66 28 20 61 63 63 65 73 73 28 7a 46 se if( access(zF
0740: 75 6c 6c 4e 61 6d 65 2c 20 30 29 20 29 7b 0a 20 ullName, 0) ){.
0750: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 blob_append
0760: 66 28 72 65 70 6f 72 74 2c 20 22 4d 49 53 53 49 f(report, "MISSI
0770: 4e 47 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 NG %s\n", zPath
0780: 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 name);. }else
0790: 20 69 66 28 20 69 73 4e 65 77 20 29 7b 0a 20 20 if( isNew ){.
07a0: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 blob_appendf
07b0: 28 72 65 70 6f 72 74 2c 20 22 41 44 44 45 44 20 (report, "ADDED
07c0: 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e %s\n", zPathn
07d0: 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 ame);. }else
07e0: 69 66 28 20 69 73 44 65 6c 65 74 65 64 20 29 7b if( isDeleted ){
07f0: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
0800: 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 44 45 4c ndf(report, "DEL
0810: 45 54 45 44 20 20 25 73 5c 6e 22 2c 20 7a 50 61 ETED %s\n", zPa
0820: 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c thname);. }el
0830: 73 65 20 69 66 28 20 69 73 43 68 6e 67 65 64 3d se if( isChnged=
0840: 3d 32 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 =2 ){. blob
0850: 5f 61 70 70 65 6e 64 66 28 72 65 70 6f 72 74 2c _appendf(report,
0860: 20 22 55 50 44 41 54 45 44 5f 42 59 5f 4d 45 52 "UPDATED_BY_MER
0870: 47 45 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e GE %s\n", zPathn
0880: 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 ame);. }else
0890: 69 66 28 20 69 73 43 68 6e 67 65 64 3d 3d 33 20 if( isChnged==3
08a0: 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 ){. blob_ap
08b0: 70 65 6e 64 66 28 72 65 70 6f 72 74 2c 20 22 41 pendf(report, "A
08c0: 44 44 45 44 5f 42 59 5f 4d 45 52 47 45 20 25 73 DDED_BY_MERGE %s
08d0: 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b \n", zPathname);
08e0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
08f0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 72 blob_appendf(r
0900: 65 70 6f 72 74 2c 20 22 45 44 49 54 45 44 20 20 eport, "EDITED
0910: 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 6d %s\n", zPathnam
0920: 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 e);. }. fr
0930: 65 65 28 7a 46 75 6c 6c 4e 61 6d 65 29 3b 0a 20 ee(zFullName);.
0940: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
0950: 28 26 71 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 (&q);. db_prepa
0960: 72 65 28 26 71 2c 20 22 53 45 4c 45 43 54 20 75 re(&q, "SELECT u
0970: 75 69 64 20 46 52 4f 4d 20 76 6d 65 72 67 65 20 uid FROM vmerge
0980: 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e 20 6d 65 72 JOIN blob ON mer
0990: 67 65 3d 72 69 64 22 0a 20 20 20 20 20 20 20 20 ge=rid".
09a0: 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 " WHERE
09b0: 20 69 64 3d 30 22 29 3b 0a 20 20 77 68 69 6c 65 id=0");. while
09c0: 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 ( db_step(&q)==S
09d0: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 QLITE_ROW ){.
09e0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 72 65 70 blob_append(rep
09f0: 6f 72 74 2c 20 7a 50 72 65 66 69 78 2c 20 6e 50 ort, zPrefix, nP
0a00: 72 65 66 69 78 29 3b 0a 20 20 20 20 62 6c 6f 62 refix);. blob
0a10: 5f 61 70 70 65 6e 64 66 28 72 65 70 6f 72 74 2c _appendf(report,
0a20: 20 22 4d 45 52 47 45 44 5f 57 49 54 48 20 25 73 "MERGED_WITH %s
0a30: 5c 6e 22 2c 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 \n", db_column_t
0a40: 65 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 20 7d ext(&q, 0));. }
0a50: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 . db_finalize(&
0a60: 71 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d q);.}../*.** COM
0a70: 4d 41 4e 44 3a 20 63 68 61 6e 67 65 73 0a 2a 2a MAND: changes.**
0a80: 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66 6f 73 73 .** Usage: %foss
0a90: 69 6c 20 63 68 61 6e 67 65 73 0a 2a 2a 0a 2a 2a il changes.**.**
0aa0: 20 52 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 65 Report on the e
0ab0: 64 69 74 20 73 74 61 74 75 73 20 6f 66 20 61 6c dit status of al
0ac0: 6c 20 66 69 6c 65 73 20 69 6e 20 74 68 65 20 63 l files in the c
0ad0: 75 72 72 65 6e 74 20 63 68 65 63 6b 6f 75 74 2e urrent checkout.
0ae0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 74 68 65 .** See also the
0af0: 20 22 73 74 61 74 75 73 22 20 61 6e 64 20 22 65 "status" and "e
0b00: 78 74 72 61 22 20 63 6f 6d 6d 61 6e 64 73 2e 0a xtra" commands..
0b10: 2a 2f 0a 76 6f 69 64 20 63 68 61 6e 67 65 73 5f */.void changes_
0b20: 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20 42 6c 6f cmd(void){. Blo
0b30: 62 20 72 65 70 6f 72 74 3b 0a 20 20 69 6e 74 20 b report;. int
0b40: 76 69 64 3b 0a 20 20 64 62 5f 6d 75 73 74 5f 62 vid;. db_must_b
0b50: 65 5f 77 69 74 68 69 6e 5f 74 72 65 65 28 29 3b e_within_tree();
0b60: 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 72 65 . blob_zero(&re
0b70: 70 6f 72 74 29 3b 0a 20 20 76 69 64 20 3d 20 64 port);. vid = d
0b80: 62 5f 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63 b_lget_int("chec
0b90: 6b 6f 75 74 22 2c 20 30 29 3b 0a 20 20 76 66 69 kout", 0);. vfi
0ba0: 6c 65 5f 63 68 65 63 6b 5f 73 69 67 6e 61 74 75 le_check_signatu
0bb0: 72 65 28 76 69 64 29 3b 0a 20 20 73 74 61 74 75 re(vid);. statu
0bc0: 73 5f 72 65 70 6f 72 74 28 26 72 65 70 6f 72 74 s_report(&report
0bd0: 2c 20 22 22 29 3b 0a 20 20 62 6c 6f 62 5f 77 72 , "");. blob_wr
0be0: 69 74 65 5f 74 6f 5f 66 69 6c 65 28 26 72 65 70 ite_to_file(&rep
0bf0: 6f 72 74 2c 20 22 2d 22 29 3b 0a 7d 0a 0a 2f 2a ort, "-");.}../*
0c00: 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 73 74 61 .** COMMAND: sta
0c10: 74 75 73 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a tus.**.** Usage:
0c20: 20 25 66 6f 73 73 69 6c 20 73 74 61 74 75 73 0a %fossil status.
0c30: 2a 2a 0a 2a 2a 20 52 65 70 6f 72 74 20 6f 6e 20 **.** Report on
0c40: 74 68 65 20 73 74 61 74 75 73 20 6f 66 20 74 68 the status of th
0c50: 65 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b 6f e current checko
0c60: 75 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 74 61 74 ut..*/.void stat
0c70: 75 73 5f 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20 us_cmd(void){.
0c80: 69 6e 74 20 76 69 64 3b 0a 20 20 64 62 5f 6d 75 int vid;. db_mu
0c90: 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65 st_be_within_tre
0ca0: 65 28 29 3b 0a 20 20 20 20 20 20 20 2f 2a 20 30 e();. /* 0
0cb0: 31 32 33 34 35 36 37 38 39 30 31 32 33 34 20 2a 12345678901234 *
0cc0: 2f 0a 20 20 70 72 69 6e 74 66 28 22 72 65 70 6f /. printf("repo
0cd0: 73 69 74 6f 72 79 3a 20 20 20 25 73 5c 6e 22 2c sitory: %s\n",
0ce0: 20 64 62 5f 6c 67 65 74 28 22 72 65 70 6f 73 69 db_lget("reposi
0cf0: 74 6f 72 79 22 2c 22 22 29 29 3b 0a 20 20 70 72 tory",""));. pr
0d00: 69 6e 74 66 28 22 6c 6f 63 61 6c 2d 72 6f 6f 74 intf("local-root
0d10: 3a 20 20 20 25 73 5c 6e 22 2c 20 67 2e 7a 4c 6f : %s\n", g.zLo
0d20: 63 61 6c 52 6f 6f 74 29 3b 0a 20 20 70 72 69 6e calRoot);. prin
0d30: 74 66 28 22 73 65 72 76 65 72 2d 63 6f 64 65 3a tf("server-code:
0d40: 20 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 28 %s\n", db_get(
0d50: 22 73 65 72 76 65 72 2d 63 6f 64 65 22 2c 20 22 "server-code", "
0d60: 22 29 29 3b 0a 20 20 76 69 64 20 3d 20 64 62 5f "));. vid = db_
0d70: 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63 6b 6f lget_int("checko
0d80: 75 74 22 2c 20 30 29 3b 0a 20 20 69 66 28 20 76 ut", 0);. if( v
0d90: 69 64 20 29 7b 0a 20 20 20 20 73 68 6f 77 5f 63 id ){. show_c
0da0: 6f 6d 6d 6f 6e 5f 69 6e 66 6f 28 76 69 64 2c 20 ommon_info(vid,
0db0: 22 63 68 65 63 6b 6f 75 74 3a 22 2c 20 30 29 3b "checkout:", 0);
0dc0: 0a 20 20 7d 0a 20 20 63 68 61 6e 67 65 73 5f 63 . }. changes_c
0dd0: 6d 64 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 md();.}../*.** C
0de0: 4f 4d 4d 41 4e 44 3a 20 6c 73 0a 2a 2a 0a 2a 2a OMMAND: ls.**.**
0df0: 20 55 73 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 Usage: %fossil
0e00: 6c 73 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 20 74 68 ls.**.** Show th
0e10: 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 66 e names of all f
0e20: 69 6c 65 73 20 69 6e 20 74 68 65 20 63 75 72 72 iles in the curr
0e30: 65 6e 74 20 63 68 65 63 6b 6f 75 74 0a 2a 2f 0a ent checkout.*/.
0e40: 76 6f 69 64 20 6c 73 5f 63 6d 64 28 76 6f 69 64 void ls_cmd(void
0e50: 29 7b 0a 20 20 69 6e 74 20 76 69 64 3b 0a 20 20 ){. int vid;.
0e60: 53 74 6d 74 20 71 3b 0a 0a 20 20 64 62 5f 6d 75 Stmt q;.. db_mu
0e70: 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65 st_be_within_tre
0e80: 65 28 29 3b 0a 20 20 76 69 64 20 3d 20 64 62 5f e();. vid = db_
0e90: 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63 6b 6f lget_int("checko
0ea0: 75 74 22 2c 20 30 29 3b 0a 20 20 76 66 69 6c 65 ut", 0);. vfile
0eb0: 5f 63 68 65 63 6b 5f 73 69 67 6e 61 74 75 72 65 _check_signature
0ec0: 28 76 69 64 29 3b 0a 20 20 64 62 5f 70 72 65 70 (vid);. db_prep
0ed0: 61 72 65 28 26 71 2c 20 22 53 45 4c 45 43 54 20 are(&q, "SELECT
0ee0: 70 61 74 68 6e 61 6d 65 2c 20 64 65 6c 65 74 65 pathname, delete
0ef0: 64 2c 20 72 69 64 2c 20 63 68 6e 67 65 64 20 46 d, rid, chnged F
0f00: 52 4f 4d 20 76 66 69 6c 65 22 0a 20 20 20 20 20 ROM vfile".
0f10: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 " OR
0f20: 44 45 52 20 42 59 20 31 22 29 3b 0a 20 20 77 68 DER BY 1");. wh
0f30: 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 ile( db_step(&q)
0f40: 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a ==SQLITE_ROW ){.
0f50: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
0f60: 7a 50 61 74 68 6e 61 6d 65 20 3d 20 64 62 5f 63 zPathname = db_c
0f70: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 30 29 olumn_text(&q,0)
0f80: 3b 0a 20 20 20 20 69 6e 74 20 69 73 44 65 6c 65 ;. int isDele
0f90: 74 65 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ted = db_column_
0fa0: 69 6e 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 int(&q, 1);.
0fb0: 69 6e 74 20 69 73 4e 65 77 20 3d 20 64 62 5f 63 int isNew = db_c
0fc0: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 32 29 3d olumn_int(&q,2)=
0fd0: 3d 30 3b 0a 20 20 20 20 69 6e 74 20 63 68 6e 67 =0;. int chng
0fe0: 65 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 ed = db_column_i
0ff0: 6e 74 28 26 71 2c 33 29 3b 0a 20 20 20 20 69 66 nt(&q,3);. if
1000: 28 20 69 73 4e 65 77 20 29 7b 0a 20 20 20 20 20 ( isNew ){.
1010: 20 70 72 69 6e 74 66 28 22 41 44 44 45 44 20 20 printf("ADDED
1020: 20 20 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e %s\n", zPathn
1030: 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 ame);. }else
1040: 69 66 28 20 69 73 44 65 6c 65 74 65 64 20 29 7b if( isDeleted ){
1050: 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 44 . printf("D
1060: 45 4c 45 54 45 44 20 20 20 25 73 5c 6e 22 2c 20 ELETED %s\n",
1070: 7a 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 zPathname);.
1080: 7d 65 6c 73 65 20 69 66 28 20 63 68 6e 67 65 64 }else if( chnged
1090: 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 ){. printf
10a0: 28 22 45 44 49 54 45 44 20 20 20 20 25 73 5c 6e ("EDITED %s\n
10b0: 22 2c 20 7a 50 61 74 68 6e 61 6d 65 29 3b 0a 20 ", zPathname);.
10c0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
10d0: 70 72 69 6e 74 66 28 22 55 4e 43 48 41 4e 47 45 printf("UNCHANGE
10e0: 44 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68 6e 61 D %s\n", zPathna
10f0: 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 me);. }. }.
1100: 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 db_finalize(&q)
1110: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 ;.}../*.** COMMA
1120: 4e 44 3a 20 65 78 74 72 61 0a 2a 2a 20 55 73 61 ND: extra.** Usa
1130: 67 65 3a 20 25 66 6f 73 73 69 6c 20 65 78 74 72 ge: %fossil extr
1140: 61 0a 2a 2a 0a 2a 2a 20 50 72 69 6e 74 20 61 20 a.**.** Print a
1150: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 69 6c 65 list of all file
1160: 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 s in the source
1170: 74 72 65 65 20 74 68 61 74 20 61 72 65 20 6e 6f tree that are no
1180: 74 20 70 61 72 74 20 6f 66 0a 2a 2a 20 74 68 65 t part of.** the
1190: 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b 6f 75 current checkou
11a0: 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65 t. See also the
11b0: 20 22 63 6c 65 61 6e 22 20 63 6f 6d 6d 61 6e 64 "clean" command
11c0: 2e 0a 2a 2f 0a 76 6f 69 64 20 65 78 74 72 61 5f ..*/.void extra_
11d0: 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20 42 6c 6f cmd(void){. Blo
11e0: 62 20 70 61 74 68 3b 0a 20 20 42 6c 6f 62 20 72 b path;. Blob r
11f0: 65 70 6f 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 epo;. Stmt q;.
1200: 20 69 6e 74 20 6e 3b 0a 20 20 64 62 5f 6d 75 73 int n;. db_mus
1210: 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65 65 t_be_within_tree
1220: 28 29 3b 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65 ();. db_multi_e
1230: 78 65 63 28 22 43 52 45 41 54 45 20 54 45 4d 50 xec("CREATE TEMP
1240: 20 54 41 42 4c 45 20 73 66 69 6c 65 28 78 20 54 TABLE sfile(x T
1250: 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 29 EXT PRIMARY KEY)
1260: 22 29 3b 0a 20 20 6e 20 3d 20 73 74 72 6c 65 6e ");. n = strlen
1270: 28 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a (g.zLocalRoot);.
1280: 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 70 61 74 blob_init(&pat
1290: 68 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 2c h, g.zLocalRoot,
12a0: 20 6e 2d 31 29 3b 0a 20 20 76 66 69 6c 65 5f 73 n-1);. vfile_s
12b0: 63 61 6e 28 30 2c 20 26 70 61 74 68 2c 20 62 6c can(0, &path, bl
12c0: 6f 62 5f 73 69 7a 65 28 26 70 61 74 68 29 29 3b ob_size(&path));
12d0: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 . db_prepare(&q
12e0: 2c 20 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 , . "SELECT
12f0: 20 78 20 46 52 4f 4d 20 73 66 69 6c 65 22 0a 20 x FROM sfile".
1300: 20 20 20 20 20 22 20 57 48 45 52 45 20 78 20 4e " WHERE x N
1310: 4f 54 20 49 4e 20 28 27 6d 61 6e 69 66 65 73 74 OT IN ('manifest
1320: 27 2c 27 6d 61 6e 69 66 65 73 74 2e 75 75 69 64 ','manifest.uuid
1330: 27 2c 27 5f 46 4f 53 53 49 4c 5f 27 29 22 0a 20 ','_FOSSIL_')".
1340: 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 " ORDER BY
1350: 31 22 29 3b 0a 20 20 69 66 28 20 66 69 6c 65 5f 1");. if( file_
1360: 74 72 65 65 5f 6e 61 6d 65 28 67 2e 7a 52 65 70 tree_name(g.zRep
1370: 6f 73 69 74 6f 72 79 4e 61 6d 65 2c 20 26 72 65 ositoryName, &re
1380: 70 6f 2c 20 30 29 20 29 7b 0a 20 20 20 20 64 62 po, 0) ){. db
1390: 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 44 45 4c _multi_exec("DEL
13a0: 45 54 45 20 46 52 4f 4d 20 73 66 69 6c 65 20 57 ETE FROM sfile W
13b0: 48 45 52 45 20 78 3d 25 42 22 2c 20 26 72 65 70 HERE x=%B", &rep
13c0: 6f 29 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 o);. }. while(
13d0: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
13e0: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
13f0: 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 64 printf("%s\n", d
1400: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
1410: 2c 20 30 29 29 3b 0a 20 20 7d 0a 20 20 64 62 5f , 0));. }. db_
1420: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 7d 0a finalize(&q);.}.
1430: 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 ./*.** COMMAND:
1440: 63 6c 65 61 6e 0a 2a 2a 20 55 73 61 67 65 3a 20 clean.** Usage:
1450: 25 66 6f 73 73 69 6c 20 63 6c 65 61 6e 20 3f 2d %fossil clean ?-
1460: 61 6c 6c 3f 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 all?.**.** Delet
1470: 65 20 61 6c 6c 20 22 65 78 74 72 61 22 20 66 69 e all "extra" fi
1480: 6c 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 les in the sourc
1490: 65 20 74 72 65 65 2e 20 20 22 45 78 74 72 61 22 e tree. "Extra"
14a0: 20 66 69 6c 65 73 20 61 72 65 0a 2a 2a 20 66 69 files are.** fi
14b0: 6c 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 les that are not
14c0: 20 6f 66 66 69 63 69 61 6c 6c 79 20 70 61 72 74 officially part
14d0: 20 6f 66 20 74 68 65 20 63 68 65 63 6b 6f 75 74 of the checkout
14e0: 2e 20 20 53 65 65 20 61 6c 73 6f 0a 2a 2a 20 74 . See also.** t
14f0: 68 65 20 22 65 78 74 72 61 22 20 63 6f 6d 6d 61 he "extra" comma
1500: 6e 64 2e 20 54 68 69 73 20 6f 70 65 72 61 74 69 nd. This operati
1510: 6f 6e 20 63 61 6e 6e 6f 74 20 62 65 20 75 6e 64 on cannot be und
1520: 6f 6e 65 2e 20 0a 2a 2a 0a 2a 2a 20 59 6f 75 20 one. .**.** You
1530: 77 69 6c 6c 20 62 65 20 70 72 6f 6d 70 74 65 64 will be prompted
1540: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67 before removing
1550: 20 65 61 63 68 20 66 69 6c 65 2e 20 49 66 20 79 each file. If y
1560: 6f 75 20 61 72 65 0a 2a 2a 20 73 75 72 65 20 79 ou are.** sure y
1570: 6f 75 20 77 69 73 68 20 74 6f 20 72 65 6d 6f 76 ou wish to remov
1580: 65 20 61 6c 6c 20 22 65 78 74 72 61 22 20 66 69 e all "extra" fi
1590: 6c 65 73 20 79 6f 75 20 63 61 6e 20 73 70 65 63 les you can spec
15a0: 69 66 79 20 74 68 65 0a 2a 2a 20 6f 70 74 69 6f ify the.** optio
15b0: 6e 61 6c 20 2d 61 6c 6c 20 66 6c 61 67 2e 0a 2a nal -all flag..*
15c0: 2f 0a 76 6f 69 64 20 63 6c 65 61 6e 5f 63 6d 64 /.void clean_cmd
15d0: 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 61 6c (void){. int al
15e0: 6c 46 6c 61 67 3b 0a 20 20 42 6c 6f 62 20 70 61 lFlag;. Blob pa
15f0: 74 68 2c 20 72 65 70 6f 3b 0a 20 20 53 74 6d 74 th, repo;. Stmt
1600: 20 71 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 61 q;. int n;. a
1610: 6c 6c 46 6c 61 67 20 3d 20 66 69 6e 64 5f 6f 70 llFlag = find_op
1620: 74 69 6f 6e 28 22 61 6c 6c 22 2c 22 61 22 2c 30 tion("all","a",0
1630: 29 21 3d 30 3b 0a 20 20 64 62 5f 6d 75 73 74 5f )!=0;. db_must_
1640: 62 65 5f 77 69 74 68 69 6e 5f 74 72 65 65 28 29 be_within_tree()
1650: 3b 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 ;. db_multi_exe
1660: 63 28 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 c("CREATE TEMP T
1670: 41 42 4c 45 20 73 66 69 6c 65 28 78 20 54 45 58 ABLE sfile(x TEX
1680: 54 20 50 52 49 4d 41 52 59 20 4b 45 59 29 22 29 T PRIMARY KEY)")
1690: 3b 0a 20 20 6e 20 3d 20 73 74 72 6c 65 6e 28 67 ;. n = strlen(g
16a0: 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20 20 .zLocalRoot);.
16b0: 62 6c 6f 62 5f 69 6e 69 74 28 26 70 61 74 68 2c blob_init(&path,
16c0: 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 2c 20 6e g.zLocalRoot, n
16d0: 2d 31 29 3b 0a 20 20 76 66 69 6c 65 5f 73 63 61 -1);. vfile_sca
16e0: 6e 28 30 2c 20 26 70 61 74 68 2c 20 62 6c 6f 62 n(0, &path, blob
16f0: 5f 73 69 7a 65 28 26 70 61 74 68 29 29 3b 0a 20 _size(&path));.
1700: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 db_prepare(&q,
1710: 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 25 . "SELECT %
1720: 51 20 7c 7c 20 78 20 46 52 4f 4d 20 73 66 69 6c Q || x FROM sfil
1730: 65 22 0a 20 20 20 20 20 20 22 20 57 48 45 52 45 e". " WHERE
1740: 20 78 20 4e 4f 54 20 49 4e 20 28 27 6d 61 6e 69 x NOT IN ('mani
1750: 66 65 73 74 27 2c 27 6d 61 6e 69 66 65 73 74 2e fest','manifest.
1760: 75 75 69 64 27 2c 27 5f 46 4f 53 53 49 4c 5f 27 uuid','_FOSSIL_'
1770: 29 22 0a 20 20 20 20 20 20 22 20 4f 52 44 45 52 )". " ORDER
1780: 20 42 59 20 31 22 2c 20 67 2e 7a 4c 6f 63 61 6c BY 1", g.zLocal
1790: 52 6f 6f 74 29 3b 0a 20 20 69 66 28 20 66 69 6c Root);. if( fil
17a0: 65 5f 74 72 65 65 5f 6e 61 6d 65 28 67 2e 7a 52 e_tree_name(g.zR
17b0: 65 70 6f 73 69 74 6f 72 79 4e 61 6d 65 2c 20 26 epositoryName, &
17c0: 72 65 70 6f 2c 20 30 29 20 29 7b 0a 20 20 20 20 repo, 0) ){.
17d0: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 44 db_multi_exec("D
17e0: 45 4c 45 54 45 20 46 52 4f 4d 20 73 66 69 6c 65 ELETE FROM sfile
17f0: 20 57 48 45 52 45 20 78 3d 25 42 22 2c 20 26 72 WHERE x=%B", &r
1800: 65 70 6f 29 3b 0a 20 20 7d 0a 20 20 77 68 69 6c epo);. }. whil
1810: 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d e( db_step(&q)==
1820: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 SQLITE_ROW ){.
1830: 20 20 69 66 28 20 61 6c 6c 46 6c 61 67 20 29 7b if( allFlag ){
1840: 0a 20 20 20 20 20 20 75 6e 6c 69 6e 6b 28 64 62 . unlink(db
1850: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
1860: 20 30 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0));. }else{
1870: 0a 20 20 20 20 20 20 42 6c 6f 62 20 61 6e 73 3b . Blob ans;
1880: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f . char *pro
1890: 6d 70 74 20 3d 20 6d 70 72 69 6e 74 66 28 22 72 mpt = mprintf("r
18a0: 65 6d 6f 76 65 20 75 6e 6d 61 6e 61 67 65 64 20 emove unmanaged
18b0: 66 69 6c 65 20 5c 22 25 73 5c 22 20 5b 79 2f 4e file \"%s\" [y/N
18c0: 5d 3f 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20 ]? ",.
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e0: 20 20 20 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 db_column_te
18f0: 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 20 20 20 xt(&q, 0));.
1900: 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 61 6e 73 blob_zero(&ans
1910: 29 3b 0a 20 20 20 20 20 20 70 72 6f 6d 70 74 5f );. prompt_
1920: 75 73 65 72 28 70 72 6f 6d 70 74 2c 20 26 61 6e user(prompt, &an
1930: 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 62 6c s);. if( bl
1940: 6f 62 5f 73 74 72 28 26 61 6e 73 29 5b 30 5d 3d ob_str(&ans)[0]=
1950: 3d 27 79 27 20 29 7b 0a 20 20 20 20 20 20 20 20 ='y' ){.
1960: 75 6e 6c 69 6e 6b 28 64 62 5f 63 6f 6c 75 6d 6e unlink(db_column
1970: 5f 74 65 78 74 28 26 71 2c 20 30 29 29 3b 0a 20 _text(&q, 0));.
1980: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d }. }. }
1990: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 . db_finalize(&
19a0: 71 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 65 q);.}../*.** Pre
19b0: 70 61 72 65 20 61 20 63 6f 6d 6d 69 74 20 63 6f pare a commit co
19c0: 6d 6d 65 6e 74 2e 20 20 4c 65 74 20 74 68 65 20 mment. Let the
19d0: 75 73 65 72 20 6d 6f 64 69 66 79 20 69 74 20 75 user modify it u
19e0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 64 69 74 sing the.** edit
19f0: 6f 72 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 or specified in
1a00: 74 68 65 20 67 6c 6f 62 61 6c 5f 63 6f 6e 66 69 the global_confi
1a10: 67 20 74 61 62 6c 65 20 6f 72 20 65 69 74 68 65 g table or eithe
1a20: 72 0a 2a 2a 20 74 68 65 20 56 49 53 55 41 4c 20 r.** the VISUAL
1a30: 6f 72 20 45 44 49 54 4f 52 20 65 6e 76 69 72 6f or EDITOR enviro
1a40: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2e 0a nment variable..
1a50: 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 **.** Store the
1a60: 66 69 6e 61 6c 20 63 6f 6d 6d 69 74 20 63 6f 6d final commit com
1a70: 6d 65 6e 74 20 69 6e 20 70 43 6f 6d 6d 65 6e 74 ment in pComment
1a80: 2e 20 20 70 43 6f 6d 6d 65 6e 74 20 69 73 20 61 . pComment is a
1a90: 73 73 75 6d 65 64 0a 2a 2a 20 74 6f 20 62 65 20 ssumed.** to be
1aa0: 75 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 2d 20 uninitialized -
1ab0: 61 6e 79 20 70 72 69 6f 72 20 63 6f 6e 74 65 6e any prior conten
1ac0: 74 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e t is overwritten
1ad0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 ..*/.static void
1ae0: 20 70 72 65 70 61 72 65 5f 63 6f 6d 6d 69 74 5f prepare_commit_
1af0: 63 6f 6d 6d 65 6e 74 28 42 6c 6f 62 20 2a 70 43 comment(Blob *pC
1b00: 6f 6d 6d 65 6e 74 29 7b 0a 20 20 63 6f 6e 73 74 omment){. const
1b10: 20 63 68 61 72 20 2a 7a 45 64 69 74 6f 72 3b 0a char *zEditor;.
1b20: 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a 20 20 char *zCmd;.
1b30: 63 68 61 72 20 2a 7a 46 69 6c 65 3b 0a 20 20 42 char *zFile;. B
1b40: 6c 6f 62 20 74 65 78 74 2c 20 6c 69 6e 65 3b 0a lob text, line;.
1b50: 20 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 char *zComment
1b60: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 62 6c 6f ;. int i;. blo
1b70: 62 5f 73 65 74 28 26 74 65 78 74 2c 0a 20 20 20 b_set(&text,.
1b80: 20 22 5c 6e 23 20 45 6e 74 65 72 20 63 6f 6d 6d "\n# Enter comm
1b90: 65 6e 74 73 20 6f 6e 20 74 68 69 73 20 63 6f 6d ents on this com
1ba0: 6d 69 74 2e 20 20 4c 69 6e 65 73 20 62 65 67 69 mit. Lines begi
1bb0: 6e 6e 69 6e 67 20 77 69 74 68 20 23 20 61 72 65 nning with # are
1bc0: 20 69 67 6e 6f 72 65 64 5c 6e 22 0a 20 20 20 20 ignored\n".
1bd0: 22 23 5c 6e 22 0a 20 20 29 3b 0a 20 20 73 74 61 "#\n". );. sta
1be0: 74 75 73 5f 72 65 70 6f 72 74 28 26 74 65 78 74 tus_report(&text
1bf0: 2c 20 22 23 20 22 29 3b 0a 20 20 7a 45 64 69 74 , "# ");. zEdit
1c00: 6f 72 20 3d 20 64 62 5f 67 65 74 28 22 65 64 69 or = db_get("edi
1c10: 74 6f 72 22 2c 20 30 29 3b 0a 20 20 69 66 28 20 tor", 0);. if(
1c20: 7a 45 64 69 74 6f 72 3d 3d 30 20 29 7b 0a 20 20 zEditor==0 ){.
1c30: 20 20 7a 45 64 69 74 6f 72 20 3d 20 67 65 74 65 zEditor = gete
1c40: 6e 76 28 22 56 49 53 55 41 4c 22 29 3b 0a 20 20 nv("VISUAL");.
1c50: 7d 0a 20 20 69 66 28 20 7a 45 64 69 74 6f 72 3d }. if( zEditor=
1c60: 3d 30 20 29 7b 0a 20 20 20 20 7a 45 64 69 74 6f =0 ){. zEdito
1c70: 72 20 3d 20 67 65 74 65 6e 76 28 22 45 44 49 54 r = getenv("EDIT
1c80: 4f 52 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 OR");. }. if(
1c90: 7a 45 64 69 74 6f 72 3d 3d 30 20 29 7b 0a 23 69 zEditor==0 ){.#i
1ca0: 66 64 65 66 20 5f 5f 4d 49 4e 47 57 33 32 5f 5f fdef __MINGW32__
1cb0: 0a 20 20 20 20 7a 45 64 69 74 6f 72 20 3d 20 22 . zEditor = "
1cc0: 6e 6f 74 65 70 61 64 22 3b 0a 23 65 6c 73 65 0a notepad";.#else.
1cd0: 20 20 20 20 7a 45 64 69 74 6f 72 20 3d 20 22 65 zEditor = "e
1ce0: 64 22 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 d";.#endif. }.
1cf0: 20 7a 46 69 6c 65 20 3d 20 64 62 5f 74 65 78 74 zFile = db_text
1d00: 28 30 2c 20 22 53 45 4c 45 43 54 20 27 25 71 63 (0, "SELECT '%qc
1d10: 69 2d 63 6f 6d 6d 65 6e 74 2d 27 20 7c 7c 20 68 i-comment-' || h
1d20: 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 36 29 ex(randomblob(6)
1d30: 29 20 7c 7c 20 27 2e 74 78 74 27 22 2c 0a 20 20 ) || '.txt'",.
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d50: 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a g.zLocalRoot);.
1d60: 23 69 66 64 65 66 20 5f 5f 4d 49 4e 47 57 33 32 #ifdef __MINGW32
1d70: 5f 5f 0a 20 20 62 6c 6f 62 5f 61 64 64 5f 63 72 __. blob_add_cr
1d80: 28 26 74 65 78 74 29 3b 0a 23 65 6e 64 69 66 0a (&text);.#endif.
1d90: 20 20 62 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f blob_write_to_
1da0: 66 69 6c 65 28 26 74 65 78 74 2c 20 7a 46 69 6c file(&text, zFil
1db0: 65 29 3b 0a 20 20 7a 43 6d 64 20 3d 20 6d 70 72 e);. zCmd = mpr
1dc0: 69 6e 74 66 28 22 25 73 20 5c 22 25 73 5c 22 22 intf("%s \"%s\""
1dd0: 2c 20 7a 45 64 69 74 6f 72 2c 20 7a 46 69 6c 65 , zEditor, zFile
1de0: 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 25 73 5c );. printf("%s\
1df0: 6e 22 2c 20 7a 43 6d 64 29 3b 0a 20 20 69 66 28 n", zCmd);. if(
1e00: 20 73 79 73 74 65 6d 28 7a 43 6d 64 29 20 29 7b system(zCmd) ){
1e10: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 . fossil_pani
1e20: 63 28 22 65 64 69 74 6f 72 20 61 62 6f 72 74 65 c("editor aborte
1e30: 64 22 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f d");. }. blob_
1e40: 72 65 73 65 74 28 26 74 65 78 74 29 3b 0a 20 20 reset(&text);.
1e50: 62 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d 5f 66 blob_read_from_f
1e60: 69 6c 65 28 26 74 65 78 74 2c 20 7a 46 69 6c 65 ile(&text, zFile
1e70: 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 6d 6f 76 65 );. blob_remove
1e80: 5f 63 72 28 26 74 65 78 74 29 3b 0a 20 20 75 6e _cr(&text);. un
1e90: 6c 69 6e 6b 28 7a 46 69 6c 65 29 3b 0a 20 20 66 link(zFile);. f
1ea0: 72 65 65 28 7a 46 69 6c 65 29 3b 0a 20 20 62 6c ree(zFile);. bl
1eb0: 6f 62 5f 7a 65 72 6f 28 70 43 6f 6d 6d 65 6e 74 ob_zero(pComment
1ec0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 62 6c 6f 62 );. while( blob
1ed0: 5f 6c 69 6e 65 28 26 74 65 78 74 2c 20 26 6c 69 _line(&text, &li
1ee0: 6e 65 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 ne) ){. int i
1ef0: 2c 20 6e 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a , n;. char *z
1f00: 3b 0a 20 20 20 20 6e 20 3d 20 62 6c 6f 62 5f 73 ;. n = blob_s
1f10: 69 7a 65 28 26 6c 69 6e 65 29 3b 0a 20 20 20 20 ize(&line);.
1f20: 7a 20 3d 20 62 6c 6f 62 5f 62 75 66 66 65 72 28 z = blob_buffer(
1f30: 26 6c 69 6e 65 29 3b 0a 20 20 20 20 66 6f 72 28 &line);. for(
1f40: 69 3d 30 3b 20 69 3c 6e 20 26 26 20 69 73 73 70 i=0; i<n && issp
1f50: 61 63 65 28 7a 5b 69 5d 29 3b 20 20 69 2b 2b 29 ace(z[i]); i++)
1f60: 7b 7d 0a 20 20 20 20 69 66 28 20 69 3c 6e 20 26 {}. if( i<n &
1f70: 26 20 7a 5b 69 5d 3d 3d 27 23 27 20 29 20 63 6f & z[i]=='#' ) co
1f80: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 69 66 28 20 ntinue;. if(
1f90: 69 3c 6e 20 7c 7c 20 62 6c 6f 62 5f 73 69 7a 65 i<n || blob_size
1fa0: 28 70 43 6f 6d 6d 65 6e 74 29 3e 30 20 29 7b 0a (pComment)>0 ){.
1fb0: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
1fc0: 64 66 28 70 43 6f 6d 6d 65 6e 74 2c 20 22 25 62 df(pComment, "%b
1fd0: 22 2c 20 26 6c 69 6e 65 29 3b 0a 20 20 20 20 7d ", &line);. }
1fe0: 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 72 65 73 65 . }. blob_rese
1ff0: 74 28 26 74 65 78 74 29 3b 0a 20 20 7a 43 6f 6d t(&text);. zCom
2000: 6d 65 6e 74 20 3d 20 62 6c 6f 62 5f 73 74 72 28 ment = blob_str(
2010: 70 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 69 20 3d pComment);. i =
2020: 20 73 74 72 6c 65 6e 28 7a 43 6f 6d 6d 65 6e 74 strlen(zComment
2030: 29 3b 0a 20 20 77 68 69 6c 65 28 20 69 3e 30 20 );. while( i>0
2040: 26 26 20 69 73 73 70 61 63 65 28 7a 43 6f 6d 6d && isspace(zComm
2050: 65 6e 74 5b 69 2d 31 5d 29 20 29 7b 20 69 2d 2d ent[i-1]) ){ i--
2060: 3b 20 7d 0a 20 20 62 6c 6f 62 5f 72 65 73 69 7a ; }. blob_resiz
2070: 65 28 70 43 6f 6d 6d 65 6e 74 2c 20 69 29 3b 0a e(pComment, i);.
2080: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 6f 70 75 6c 61 74 }../*.** Populat
2090: 65 20 74 68 65 20 47 6c 6f 62 61 6c 2e 61 43 6f e the Global.aCo
20a0: 6d 6d 69 74 46 69 6c 65 5b 5d 20 62 61 73 65 64 mmitFile[] based
20b0: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 on the command
20c0: 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a line arguments.*
20d0: 2a 20 74 6f 20 61 20 5b 63 6f 6d 6d 69 74 5d 20 * to a [commit]
20e0: 63 6f 6d 6d 61 6e 64 2e 20 47 6c 6f 62 61 6c 2e command. Global.
20f0: 61 43 6f 6d 6d 69 74 46 69 6c 65 20 69 73 20 61 aCommitFile is a
2100: 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 n array of integ
2110: 65 72 73 0a 2a 2a 20 73 69 7a 65 64 20 61 74 20 ers.** sized at
2120: 28 4e 2b 31 29 2c 20 77 68 65 72 65 20 4e 20 69 (N+1), where N i
2130: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 s the number of
2140: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 arguments passed
2150: 20 74 6f 20 5b 63 6f 6d 6d 69 74 5d 2e 0a 2a 2a to [commit]..**
2160: 20 54 68 65 20 63 6f 6e 74 65 6e 74 73 20 61 72 The contents ar
2170: 65 20 74 68 65 20 5b 69 64 5d 20 76 61 6c 75 65 e the [id] value
2180: 73 20 66 72 6f 6d 20 74 68 65 20 76 66 69 6c 65 s from the vfile
2190: 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e table correspon
21a0: 64 69 6e 67 0a 2a 2a 20 74 6f 20 74 68 65 20 66 ding.** to the f
21b0: 69 6c 65 6e 61 6d 65 73 20 70 61 73 73 65 64 20 ilenames passed
21c0: 61 73 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a as arguments..**
21d0: 0a 2a 2a 20 54 68 65 20 6c 61 73 74 20 65 6c 65 .** The last ele
21e0: 6d 65 6e 74 20 6f 66 20 61 43 6f 6d 6d 69 74 46 ment of aCommitF
21f0: 69 6c 65 5b 5d 20 69 73 20 61 6c 77 61 79 73 20 ile[] is always
2200: 30 20 2d 20 69 6e 64 69 63 61 74 69 6e 67 20 74 0 - indicating t
2210: 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 he end.** of the
2220: 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 array..**.** If
2230: 20 74 68 65 72 65 20 77 65 72 65 20 6e 6f 20 61 there were no a
2240: 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 rguments passed
2250: 74 6f 20 5b 63 6f 6d 6d 69 74 5d 2c 20 61 43 6f to [commit], aCo
2260: 6d 6d 69 74 46 69 6c 65 20 69 73 20 6e 6f 74 0a mmitFile is not.
2270: 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 ** allocated and
2280: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 20 4f remains NULL. O
2290: 74 68 65 72 20 70 61 72 74 73 20 6f 66 20 74 68 ther parts of th
22a0: 65 20 63 6f 64 65 20 69 6e 74 65 72 70 72 65 74 e code interpret
22b0: 20 74 68 69 73 0a 2a 2a 20 74 6f 20 6d 65 61 6e this.** to mean
22c0: 20 22 61 6c 6c 20 66 69 6c 65 73 22 2e 0a 2a 2f "all files"..*/
22d0: 0a 76 6f 69 64 20 73 65 6c 65 63 74 5f 63 6f 6d .void select_com
22e0: 6d 69 74 5f 66 69 6c 65 73 28 76 6f 69 64 29 7b mit_files(void){
22f0: 0a 20 20 69 66 28 20 67 2e 61 72 67 63 3e 32 20 . if( g.argc>2
2300: 29 7b 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 ){. int ii;.
2310: 20 20 20 42 6c 6f 62 20 62 3b 0a 20 20 20 20 62 Blob b;. b
2320: 6c 6f 62 5f 7a 65 72 6f 28 26 62 29 3b 0a 20 20 lob_zero(&b);.
2330: 20 20 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 20 g.aCommitFile
2340: 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 = malloc(sizeof(
2350: 69 6e 74 29 2a 28 67 2e 61 72 67 63 2d 31 29 29 int)*(g.argc-1))
2360: 3b 0a 0a 20 20 20 20 66 6f 72 28 69 69 3d 32 3b ;.. for(ii=2;
2370: 20 69 69 3c 67 2e 61 72 67 63 3b 20 69 69 2b 2b ii<g.argc; ii++
2380: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 49 64 ){. int iId
2390: 3b 0a 20 20 20 20 20 20 66 69 6c 65 5f 74 72 65 ;. file_tre
23a0: 65 5f 6e 61 6d 65 28 67 2e 61 72 67 76 5b 69 69 e_name(g.argv[ii
23b0: 5d 2c 20 26 62 2c 20 31 29 3b 0a 20 20 20 20 20 ], &b, 1);.
23c0: 20 69 49 64 20 3d 20 64 62 5f 69 6e 74 28 2d 31 iId = db_int(-1
23d0: 2c 20 22 53 45 4c 45 43 54 20 69 64 20 46 52 4f , "SELECT id FRO
23e0: 4d 20 76 66 69 6c 65 20 57 48 45 52 45 20 70 61 M vfile WHERE pa
23f0: 74 68 6e 61 6d 65 3d 25 51 22 2c 20 62 6c 6f 62 thname=%Q", blob
2400: 5f 73 74 72 28 26 62 29 29 3b 0a 20 20 20 20 20 _str(&b));.
2410: 20 69 66 28 20 69 49 64 3c 30 20 29 7b 0a 20 20 if( iId<0 ){.
2420: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 fossil_fat
2430: 61 6c 28 22 66 6f 73 73 69 6c 20 6b 6e 6f 77 73 al("fossil knows
2440: 20 6e 6f 74 68 69 6e 67 20 61 62 6f 75 74 3a 20 nothing about:
2450: 25 73 22 2c 20 67 2e 61 72 67 76 5b 69 69 5d 29 %s", g.argv[ii])
2460: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 ;. }.
2470: 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 5b 69 69 g.aCommitFile[ii
2480: 2d 32 5d 20 3d 20 69 49 64 3b 0a 20 20 20 20 20 -2] = iId;.
2490: 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 62 29 3b blob_reset(&b);
24a0: 0a 20 20 20 20 7d 0a 20 20 20 20 67 2e 61 43 6f . }. g.aCo
24b0: 6d 6d 69 74 46 69 6c 65 5b 69 69 2d 32 5d 20 3d mmitFile[ii-2] =
24c0: 20 30 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 0;. }.}../*.**
24d0: 20 43 4f 4d 4d 41 4e 44 3a 20 63 6f 6d 6d 69 74 COMMAND: commit
24e0: 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66 .**.** Usage: %f
24f0: 6f 73 73 69 6c 20 63 6f 6d 6d 69 74 20 3f 2d 6d ossil commit ?-m
2500: 20 43 4f 4d 4d 45 4e 54 3f 20 3f 2d 2d 6e 6f 73 COMMENT? ?--nos
2510: 69 67 6e 3f 20 3f 46 49 4c 45 2e 2e 2e 3f 0a 2a ign? ?FILE...?.*
2520: 2a 0a 2a 2a 20 43 72 65 61 74 65 20 61 20 6e 65 *.** Create a ne
2530: 77 20 76 65 72 73 69 6f 6e 20 63 6f 6e 74 61 69 w version contai
2540: 6e 69 6e 67 20 61 6c 6c 20 6f 66 20 74 68 65 20 ning all of the
2550: 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 changes in the c
2560: 75 72 72 65 6e 74 0a 2a 2a 20 63 68 65 63 6b 6f urrent.** checko
2570: 75 74 2e 20 20 59 6f 75 20 77 69 6c 6c 20 62 65 ut. You will be
2580: 20 70 72 6f 6d 70 74 65 64 20 74 6f 20 65 6e 74 prompted to ent
2590: 65 72 20 61 20 63 68 65 63 6b 2d 69 6e 20 63 6f er a check-in co
25a0: 6d 6d 65 6e 74 20 75 6e 6c 65 73 73 0a 2a 2a 20 mment unless.**
25b0: 74 68 65 20 22 2d 6d 22 20 6f 70 74 69 6f 6e 20 the "-m" option
25c0: 69 73 20 75 73 65 64 20 74 6f 20 73 70 65 63 69 is used to speci
25d0: 66 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e fy a comment lin
25e0: 65 2e 20 20 59 6f 75 20 77 69 6c 6c 20 62 65 0a e. You will be.
25f0: 2a 2a 20 70 72 6f 6d 70 74 65 64 20 66 6f 72 20 ** prompted for
2600: 79 6f 75 72 20 47 50 47 20 70 61 73 73 70 68 72 your GPG passphr
2610: 61 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 ase in order to
2620: 73 69 67 6e 20 74 68 65 20 6e 65 77 20 6d 61 6e sign the new man
2630: 69 66 65 73 74 0a 2a 2a 20 75 6e 6c 65 73 73 20 ifest.** unless
2640: 74 68 65 20 22 2d 2d 6e 6f 73 69 67 6e 22 20 6f the "--nosign" o
2650: 70 74 69 6f 6e 73 20 69 73 20 75 73 65 64 2e 20 ptions is used.
2660: 20 41 6c 6c 20 66 69 6c 65 73 20 74 68 61 74 20 All files that
2670: 68 61 76 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 have.** changed
2680: 77 69 6c 6c 20 62 65 20 63 6f 6d 6d 69 74 74 65 will be committe
2690: 64 20 75 6e 6c 65 73 73 20 73 6f 6d 65 20 73 75 d unless some su
26a0: 62 73 65 74 20 6f 66 20 66 69 6c 65 73 20 69 73 bset of files is
26b0: 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e specified.** on
26c0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin
26d0: 65 2e 0a 2a 2f 0a 76 6f 69 64 20 63 6f 6d 6d 69 e..*/.void commi
26e0: 74 5f 63 6d 64 28 76 6f 69 64 29 7b 0a 20 20 69 t_cmd(void){. i
26f0: 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 76 69 64 nt rc;. int vid
2700: 2c 20 6e 72 69 64 2c 20 6e 76 69 64 2c 20 77 6f , nrid, nvid, wo
2710: 75 6c 64 46 6f 72 6b 3d 30 3b 0a 20 20 42 6c 6f uldFork=0;. Blo
2720: 62 20 63 6f 6d 6d 65 6e 74 3b 0a 20 20 63 6f 6e b comment;. con
2730: 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e st char *zCommen
2740: 74 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 53 t;. Stmt q;. S
2750: 74 6d 74 20 71 32 3b 0a 20 20 63 68 61 72 20 2a tmt q2;. char *
2760: 7a 55 75 69 64 2c 20 2a 7a 44 61 74 65 3b 0a 20 zUuid, *zDate;.
2770: 20 69 6e 74 20 6e 6f 53 69 67 6e 20 3d 20 30 3b int noSign = 0;
2780: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 /* True
2790: 74 6f 20 6f 6d 69 74 20 73 69 67 6e 69 6e 67 20 to omit signing
27a0: 74 68 65 20 6d 61 6e 69 66 65 73 74 20 75 73 69 the manifest usi
27b0: 6e 67 20 47 50 47 20 2a 2f 0a 20 20 69 6e 74 20 ng GPG */. int
27c0: 69 73 41 4d 65 72 67 65 20 3d 20 30 3b 20 20 20 isAMerge = 0;
27d0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 68 /* True if ch
27e0: 65 63 6b 69 6e 67 20 69 6e 20 61 20 6d 65 72 67 ecking in a merg
27f0: 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6f 72 63 65 e */. int force
2800: 46 6c 61 67 20 3d 20 30 3b 20 20 20 20 20 2f 2a Flag = 0; /*
2810: 20 46 6f 72 63 65 20 61 20 66 6f 72 6b 20 2a 2f Force a fork */
2820: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6e 69 66 65 . char *zManife
2830: 73 74 46 69 6c 65 3b 20 20 20 2f 2a 20 4e 61 6d stFile; /* Nam
2840: 65 20 6f 66 20 74 68 65 20 6d 61 6e 69 66 65 73 e of the manifes
2850: 74 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 t file */. int
2860: 6e 42 61 73 65 6e 61 6d 65 3b 20 20 20 20 20 20 nBasename;
2870: 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 /* Length of
2880: 22 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 2f 22 20 "g.zLocalRoot/"
2890: 2a 2f 0a 20 20 42 6c 6f 62 20 66 69 6c 65 6e 61 */. Blob filena
28a0: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 63 me; /* c
28b0: 6f 6d 70 6c 65 74 65 20 66 69 6c 65 6e 61 6d 65 omplete filename
28c0: 20 2a 2f 0a 20 20 42 6c 6f 62 20 6d 61 6e 69 66 */. Blob manif
28d0: 65 73 74 3b 0a 20 20 42 6c 6f 62 20 6d 75 75 69 est;. Blob muui
28e0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a d; /*
28f0: 20 4d 61 6e 69 66 65 73 74 20 75 75 69 64 20 2a Manifest uuid *
2900: 2f 0a 20 20 42 6c 6f 62 20 6d 63 6b 73 75 6d 3b /. Blob mcksum;
2910: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 /* Se
2920: 6c 66 2d 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 lf-checksum on t
2930: 68 65 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 20 he manifest */.
2940: 20 42 6c 6f 62 20 63 6b 73 75 6d 31 2c 20 63 6b Blob cksum1, ck
2950: 73 75 6d 32 3b 20 20 20 2f 2a 20 42 65 66 6f 72 sum2; /* Befor
2960: 65 20 61 6e 64 20 61 66 74 65 72 20 63 6f 6d 6d e and after comm
2970: 69 74 20 63 68 65 63 6b 73 75 6d 73 20 2a 2f 0a it checksums */.
2980: 20 20 42 6c 6f 62 20 63 6b 73 75 6d 31 62 3b 20 Blob cksum1b;
2990: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 /* Chec
29a0: 6b 73 75 6d 20 72 65 63 6f 72 64 65 64 20 69 6e ksum recorded in
29b0: 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 2a 2f the manifest */
29c0: 0a 20 0a 20 20 75 72 6c 5f 70 72 6f 78 79 5f 6f . . url_proxy_o
29d0: 70 74 69 6f 6e 73 28 29 3b 0a 20 20 6e 6f 53 69 ptions();. noSi
29e0: 67 6e 20 3d 20 66 69 6e 64 5f 6f 70 74 69 6f 6e gn = find_option
29f0: 28 22 6e 6f 73 69 67 6e 22 2c 22 22 2c 30 29 21 ("nosign","",0)!
2a00: 3d 30 3b 0a 20 20 7a 43 6f 6d 6d 65 6e 74 20 3d =0;. zComment =
2a10: 20 66 69 6e 64 5f 6f 70 74 69 6f 6e 28 22 63 6f find_option("co
2a20: 6d 6d 65 6e 74 22 2c 22 6d 22 2c 31 29 3b 0a 20 mment","m",1);.
2a30: 20 66 6f 72 63 65 46 6c 61 67 20 3d 20 66 69 6e forceFlag = fin
2a40: 64 5f 6f 70 74 69 6f 6e 28 22 66 6f 72 63 65 22 d_option("force"
2a50: 2c 20 22 66 22 2c 20 30 29 21 3d 30 3b 0a 20 20 , "f", 0)!=0;.
2a60: 64 62 5f 6d 75 73 74 5f 62 65 5f 77 69 74 68 69 db_must_be_withi
2a70: 6e 5f 74 72 65 65 28 29 3b 0a 20 20 6e 6f 53 69 n_tree();. noSi
2a80: 67 6e 20 3d 20 64 62 5f 67 65 74 5f 62 6f 6f 6c gn = db_get_bool
2a90: 65 61 6e 28 22 6f 6d 69 74 73 69 67 6e 22 2c 20 ean("omitsign",
2aa0: 30 29 7c 6e 6f 53 69 67 6e 3b 0a 20 20 69 66 28 0)|noSign;. if(
2ab0: 20 64 62 5f 67 65 74 5f 62 6f 6f 6c 65 61 6e 28 db_get_boolean(
2ac0: 22 63 6c 65 61 72 73 69 67 6e 22 2c 20 31 29 3d "clearsign", 1)=
2ad0: 3d 30 20 29 7b 20 6e 6f 53 69 67 6e 20 3d 20 31 =0 ){ noSign = 1
2ae0: 3b 20 7d 0a 20 20 76 65 72 69 66 79 5f 61 6c 6c ; }. verify_all
2af0: 5f 6f 70 74 69 6f 6e 73 28 29 3b 0a 0a 20 20 2f _options();.. /
2b00: 2a 0a 20 20 2a 2a 20 41 75 74 6f 73 79 6e 63 20 *. ** Autosync
2b10: 69 66 20 72 65 71 75 65 73 74 65 64 2e 0a 20 20 if requested..
2b20: 2a 2f 0a 20 20 61 75 74 6f 73 79 6e 63 28 41 55 */. autosync(AU
2b30: 54 4f 53 59 4e 43 5f 50 55 4c 4c 29 3b 0a 20 20 TOSYNC_PULL);.
2b40: 0a 20 20 2f 2a 20 54 68 65 72 65 20 61 72 65 20 . /* There are
2b50: 74 77 6f 20 77 61 79 73 20 74 68 69 73 20 63 6f two ways this co
2b60: 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 65 78 65 mmand may be exe
2b70: 63 75 74 65 64 2e 20 49 66 20 74 68 65 72 65 20 cuted. If there
2b80: 61 72 65 0a 20 20 2a 2a 20 6e 6f 20 61 72 67 75 are. ** no argu
2b90: 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 ments following
2ba0: 74 68 65 20 77 6f 72 64 20 22 63 6f 6d 6d 69 74 the word "commit
2bb0: 22 2c 20 74 68 65 6e 20 61 6c 6c 20 6d 6f 64 69 ", then all modi
2bc0: 66 69 65 64 20 66 69 6c 65 73 0a 20 20 2a 2a 20 fied files. **
2bd0: 69 6e 20 74 68 65 20 63 68 65 63 6b 65 64 20 6f in the checked o
2be0: 75 74 20 64 69 72 65 63 74 6f 72 79 20 61 72 65 ut directory are
2bf0: 20 63 6f 6d 6d 69 74 74 65 64 2e 20 49 66 20 6f committed. If o
2c00: 6e 65 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d ne or more argum
2c10: 65 6e 74 73 0a 20 20 2a 2a 20 66 6f 6c 6c 6f 77 ents. ** follow
2c20: 73 20 22 63 6f 6d 6d 69 74 22 2c 20 74 68 65 6e s "commit", then
2c30: 20 6f 6e 6c 79 20 74 68 6f 73 65 20 66 69 6c 65 only those file
2c40: 73 20 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 2e s are committed.
2c50: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 66 74 65 72 . **. ** After
2c60: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 the following f
2c70: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 68 61 73 unction call has
2c80: 20 72 65 74 75 72 6e 65 64 2c 20 74 68 65 20 47 returned, the G
2c90: 6c 6f 62 61 6c 2e 61 43 6f 6d 6d 69 74 46 69 6c lobal.aCommitFil
2ca0: 65 5b 5d 0a 20 20 2a 2a 20 61 72 72 61 79 20 69 e[]. ** array i
2cb0: 73 20 61 6c 6c 6f 63 61 74 65 64 20 74 6f 20 63 s allocated to c
2cc0: 6f 6e 74 61 69 6e 20 74 68 65 20 22 69 64 22 20 ontain the "id"
2cd0: 66 69 65 6c 64 20 66 72 6f 6d 20 74 68 65 20 76 field from the v
2ce0: 66 69 6c 65 20 74 61 62 6c 65 0a 20 20 2a 2a 20 file table. **
2cf0: 66 6f 72 20 65 61 63 68 20 66 69 6c 65 20 74 6f for each file to
2d00: 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 2e 20 4f be committed. O
2d10: 72 2c 20 69 66 20 61 43 6f 6d 6d 69 74 46 69 6c r, if aCommitFil
2d20: 65 20 69 73 20 4e 55 4c 4c 2c 20 61 6c 6c 20 66 e is NULL, all f
2d30: 69 6c 65 73 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 iles. ** should
2d40: 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 2e 0a 20 be committed..
2d50: 20 2a 2f 0a 20 20 73 65 6c 65 63 74 5f 63 6f 6d */. select_com
2d60: 6d 69 74 5f 66 69 6c 65 73 28 29 3b 0a 20 20 69 mit_files();. i
2d70: 73 41 4d 65 72 67 65 20 3d 20 64 62 5f 65 78 69 sAMerge = db_exi
2d80: 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 sts("SELECT 1 FR
2d90: 4f 4d 20 76 6d 65 72 67 65 22 29 3b 0a 20 20 69 OM vmerge");. i
2da0: 66 28 20 67 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 f( g.aCommitFile
2db0: 20 26 26 20 69 73 41 4d 65 72 67 65 20 29 7b 0a && isAMerge ){.
2dc0: 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c fossil_fatal
2dd0: 28 22 63 61 6e 6e 6f 74 20 64 6f 20 61 20 70 61 ("cannot do a pa
2de0: 72 74 69 61 6c 20 63 6f 6d 6d 69 74 20 6f 66 20 rtial commit of
2df0: 61 20 6d 65 72 67 65 22 29 3b 0a 20 20 7d 0a 0a a merge");. }..
2e00: 20 20 75 73 65 72 5f 73 65 6c 65 63 74 28 29 3b user_select();
2e10: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 43 68 65 63 6b . /*. ** Check
2e20: 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20 65 that the user e
2e30: 78 69 73 74 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 xists.. */. if
2e40: 28 20 21 64 62 5f 65 78 69 73 74 73 28 22 53 45 ( !db_exists("SE
2e50: 4c 45 43 54 20 31 20 46 52 4f 4d 20 75 73 65 72 LECT 1 FROM user
2e60: 20 57 48 45 52 45 20 6c 6f 67 69 6e 3d 25 51 22 WHERE login=%Q"
2e70: 2c 20 67 2e 7a 4c 6f 67 69 6e 29 20 29 7b 0a 20 , g.zLogin) ){.
2e80: 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28 fossil_fatal(
2e90: 22 6e 6f 20 73 75 63 68 20 75 73 65 72 3a 20 25 "no such user: %
2ea0: 73 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 s", g.zLogin);.
2eb0: 20 7d 0a 20 20 0a 20 20 64 62 5f 62 65 67 69 6e }. . db_begin
2ec0: 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b 0a _transaction();.
2ed0: 20 20 64 62 5f 72 65 63 6f 72 64 5f 72 65 70 6f db_record_repo
2ee0: 73 69 74 6f 72 79 5f 66 69 6c 65 6e 61 6d 65 28 sitory_filename(
2ef0: 30 29 3b 0a 20 20 72 63 20 3d 20 75 6e 73 61 76 0);. rc = unsav
2f00: 65 64 5f 63 68 61 6e 67 65 73 28 29 3b 0a 20 20 ed_changes();.
2f10: 69 66 28 20 72 63 3d 3d 30 20 26 26 20 21 69 73 if( rc==0 && !is
2f20: 41 4d 65 72 67 65 20 26 26 20 21 66 6f 72 63 65 AMerge && !force
2f30: 46 6c 61 67 20 29 7b 0a 20 20 20 20 66 6f 73 73 Flag ){. foss
2f40: 69 6c 5f 70 61 6e 69 63 28 22 6e 6f 74 68 69 6e il_panic("nothin
2f50: 67 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b g has changed");
2f60: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 6f 6e . }.. /* If on
2f70: 65 20 6f 72 20 6d 6f 72 65 20 66 69 6c 65 73 20 e or more files
2f80: 74 68 61 74 20 77 65 72 65 20 6e 61 6d 65 64 20 that were named
2f90: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c on the command l
2fa0: 69 6e 65 20 68 61 76 65 20 6e 6f 74 0a 20 20 2a ine have not. *
2fb0: 2a 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2c * been modified,
2fc0: 20 62 61 69 6c 20 6f 75 74 20 6e 6f 77 2e 0a 20 bail out now..
2fd0: 20 2a 2f 0a 20 20 69 66 28 20 67 2e 61 43 6f 6d */. if( g.aCom
2fe0: 6d 69 74 46 69 6c 65 20 29 7b 0a 20 20 20 20 42 mitFile ){. B
2ff0: 6c 6f 62 20 75 6e 6d 6f 64 69 66 69 65 64 3b 0a lob unmodified;.
3000: 20 20 20 20 6d 65 6d 73 65 74 28 26 75 6e 6d 6f memset(&unmo
3010: 64 69 66 69 65 64 2c 20 30 2c 20 73 69 7a 65 6f dified, 0, sizeo
3020: 66 28 42 6c 6f 62 29 29 3b 0a 20 20 20 20 62 6c f(Blob));. bl
3030: 6f 62 5f 69 6e 69 74 28 26 75 6e 6d 6f 64 69 66 ob_init(&unmodif
3040: 69 65 64 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 ied, 0, 0);.
3050: 64 62 5f 62 6c 6f 62 28 26 75 6e 6d 6f 64 69 66 db_blob(&unmodif
3060: 69 65 64 2c 20 0a 20 20 20 20 20 20 22 53 45 4c ied, . "SEL
3070: 45 43 54 20 70 61 74 68 6e 61 6d 65 20 46 52 4f ECT pathname FRO
3080: 4d 20 76 66 69 6c 65 20 57 48 45 52 45 20 63 68 M vfile WHERE ch
3090: 6e 67 65 64 20 3d 20 30 20 41 4e 44 20 66 69 6c nged = 0 AND fil
30a0: 65 5f 69 73 5f 73 65 6c 65 63 74 65 64 28 69 64 e_is_selected(id
30b0: 29 22 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66 )". );. if
30c0: 28 20 73 74 72 6c 65 6e 28 62 6c 6f 62 5f 73 74 ( strlen(blob_st
30d0: 72 28 26 75 6e 6d 6f 64 69 66 69 65 64 29 29 20 r(&unmodified))
30e0: 29 7b 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f ){. fossil_
30f0: 70 61 6e 69 63 28 22 66 69 6c 65 20 25 73 20 68 panic("file %s h
3100: 61 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 22 2c as not changed",
3110: 20 62 6c 6f 62 5f 73 74 72 28 26 75 6e 6d 6f 64 blob_str(&unmod
3120: 69 66 69 65 64 29 29 3b 0a 20 20 20 20 7d 0a 20 ified));. }.
3130: 20 7d 0a 0a 20 20 76 69 64 20 3d 20 64 62 5f 6c }.. vid = db_l
3140: 67 65 74 5f 69 6e 74 28 22 63 68 65 63 6b 6f 75 get_int("checkou
3150: 74 22 2c 20 30 29 3b 0a 20 20 69 66 28 20 64 62 t", 0);. if( db
3160: 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 _exists("SELECT
3170: 31 20 46 52 4f 4d 20 70 6c 69 6e 6b 20 57 48 45 1 FROM plink WHE
3180: 52 45 20 70 69 64 3d 25 64 22 2c 20 76 69 64 29 RE pid=%d", vid)
3190: 20 29 7b 0a 20 20 20 20 77 6f 75 6c 64 46 6f 72 ){. wouldFor
31a0: 6b 3d 31 3b 0a 20 20 20 20 69 66 28 20 66 6f 72 k=1;. if( for
31b0: 63 65 46 6c 61 67 3d 3d 30 20 29 7b 0a 20 20 20 ceFlag==0 ){.
31c0: 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28 fossil_fatal(
31d0: 22 77 6f 75 6c 64 20 66 6f 72 6b 2e 20 20 75 73 "would fork. us
31e0: 65 20 2d 66 20 6f 72 20 2d 2d 66 6f 72 63 65 22 e -f or --force"
31f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 76 );. }. }. v
3200: 66 69 6c 65 5f 61 67 67 72 65 67 61 74 65 5f 63 file_aggregate_c
3210: 68 65 63 6b 73 75 6d 5f 64 69 73 6b 28 76 69 64 hecksum_disk(vid
3220: 2c 20 26 63 6b 73 75 6d 31 29 3b 0a 20 20 69 66 , &cksum1);. if
3230: 28 20 7a 43 6f 6d 6d 65 6e 74 20 29 7b 0a 20 20 ( zComment ){.
3240: 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 63 6f 6d blob_zero(&com
3250: 6d 65 6e 74 29 3b 0a 20 20 20 20 62 6c 6f 62 5f ment);. blob_
3260: 61 70 70 65 6e 64 28 26 63 6f 6d 6d 65 6e 74 2c append(&comment,
3270: 20 7a 43 6f 6d 6d 65 6e 74 2c 20 2d 31 29 3b 0a zComment, -1);.
3280: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 72 65 }else{. pre
3290: 70 61 72 65 5f 63 6f 6d 6d 69 74 5f 63 6f 6d 6d pare_commit_comm
32a0: 65 6e 74 28 26 63 6f 6d 6d 65 6e 74 29 3b 0a 20 ent(&comment);.
32b0: 20 7d 0a 0a 20 20 2f 2a 20 53 74 65 70 20 31 3a }.. /* Step 1:
32c0: 20 49 6e 73 65 72 74 20 72 65 63 6f 72 64 73 20 Insert records
32d0: 66 6f 72 20 61 6c 6c 20 6d 6f 64 69 66 69 65 64 for all modified
32e0: 20 66 69 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 files into the
32f0: 62 6c 6f 62 20 0a 20 20 2a 2a 20 74 61 62 6c 65 blob . ** table
3300: 2e 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20 . If there were
3310: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 arguments passed
3320: 20 74 6f 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 to this command
3330: 2c 20 6f 6e 6c 79 0a 20 20 2a 2a 20 74 68 65 20 , only. ** the
3340: 69 64 65 6e 74 69 66 69 65 64 20 66 69 6c 73 20 identified fils
3350: 61 72 65 20 69 6e 73 65 72 74 65 64 20 28 69 66 are inserted (if
3360: 20 74 68 65 79 20 68 61 76 65 20 62 65 65 6e 20 they have been
3370: 6d 6f 64 69 66 69 65 64 29 2e 0a 20 20 2a 2f 0a modified).. */.
3380: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c db_prepare(&q,
3390: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 69 64 2c . "SELECT id,
33a0: 20 25 51 20 7c 7c 20 70 61 74 68 6e 61 6d 65 2c %Q || pathname,
33b0: 20 6d 72 69 64 20 46 52 4f 4d 20 76 66 69 6c 65 mrid FROM vfile
33c0: 20 22 0a 20 20 20 20 22 57 48 45 52 45 20 63 68 ". "WHERE ch
33d0: 6e 67 65 64 3d 3d 31 20 41 4e 44 20 4e 4f 54 20 nged==1 AND NOT
33e0: 64 65 6c 65 74 65 64 20 41 4e 44 20 66 69 6c 65 deleted AND file
33f0: 5f 69 73 5f 73 65 6c 65 63 74 65 64 28 69 64 29 _is_selected(id)
3400: 22 0a 20 20 20 20 2c 20 67 2e 7a 4c 6f 63 61 6c ". , g.zLocal
3410: 52 6f 6f 74 0a 20 20 29 3b 0a 20 20 77 68 69 6c Root. );. whil
3420: 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d e( db_step(&q)==
3430: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 SQLITE_ROW ){.
3440: 20 20 69 6e 74 20 69 64 2c 20 72 69 64 3b 0a 20 int id, rid;.
3450: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
3460: 46 75 6c 6c 6e 61 6d 65 3b 0a 20 20 20 20 42 6c Fullname;. Bl
3470: 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a 0a 20 20 20 ob content;..
3480: 20 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f id = db_column_
3490: 69 6e 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 int(&q, 0);.
34a0: 7a 46 75 6c 6c 6e 61 6d 65 20 3d 20 64 62 5f 63 zFullname = db_c
34b0: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 olumn_text(&q, 1
34c0: 29 3b 0a 20 20 20 20 72 69 64 20 3d 20 64 62 5f );. rid = db_
34d0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 32 column_int(&q, 2
34e0: 29 3b 0a 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 );.. blob_zer
34f0: 6f 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 o(&content);.
3500: 20 62 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d 5f blob_read_from_
3510: 66 69 6c 65 28 26 63 6f 6e 74 65 6e 74 2c 20 7a file(&content, z
3520: 46 75 6c 6c 6e 61 6d 65 29 3b 0a 20 20 20 20 6e Fullname);. n
3530: 72 69 64 20 3d 20 63 6f 6e 74 65 6e 74 5f 70 75 rid = content_pu
3540: 74 28 26 63 6f 6e 74 65 6e 74 2c 20 30 2c 20 30 t(&content, 0, 0
3550: 29 3b 0a 20 20 20 20 69 66 28 20 72 69 64 3e 30 );. if( rid>0
3560: 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 74 65 6e ){. conten
3570: 74 5f 64 65 6c 74 69 66 79 28 72 69 64 2c 20 6e t_deltify(rid, n
3580: 72 69 64 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 rid, 0);. }.
3590: 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 db_multi_exec
35a0: 28 22 55 50 44 41 54 45 20 76 66 69 6c 65 20 53 ("UPDATE vfile S
35b0: 45 54 20 6d 72 69 64 3d 25 64 2c 20 72 69 64 3d ET mrid=%d, rid=
35c0: 25 64 20 57 48 45 52 45 20 69 64 3d 25 64 22 2c %d WHERE id=%d",
35d0: 20 6e 72 69 64 2c 6e 72 69 64 2c 69 64 29 3b 0a nrid,nrid,id);.
35e0: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 db_multi_exe
35f0: 63 28 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e c("INSERT OR IGN
3600: 4f 52 45 20 49 4e 54 4f 20 75 6e 73 65 6e 74 20 ORE INTO unsent
3610: 56 41 4c 55 45 53 28 25 64 29 22 2c 20 6e 72 69 VALUES(%d)", nri
3620: 64 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e d);. }. db_fin
3630: 61 6c 69 7a 65 28 26 71 29 3b 0a 0a 20 20 2f 2a alize(&q);.. /*
3640: 20 43 72 65 61 74 65 20 74 68 65 20 6d 61 6e 69 Create the mani
3650: 66 65 73 74 20 2a 2f 0a 20 20 62 6c 6f 62 5f 7a fest */. blob_z
3660: 65 72 6f 28 26 6d 61 6e 69 66 65 73 74 29 3b 0a ero(&manifest);.
3670: 20 20 69 66 28 20 62 6c 6f 62 5f 73 69 7a 65 28 if( blob_size(
3680: 26 63 6f 6d 6d 65 6e 74 29 3d 3d 30 20 29 7b 0a &comment)==0 ){.
3690: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 blob_append(
36a0: 26 63 6f 6d 6d 65 6e 74 2c 20 22 28 6e 6f 20 63 &comment, "(no c
36b0: 6f 6d 6d 65 6e 74 29 22 2c 20 2d 31 29 3b 0a 20 omment)", -1);.
36c0: 20 7d 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 }. blob_append
36d0: 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 43 20 f(&manifest, "C
36e0: 25 46 5c 6e 22 2c 20 62 6c 6f 62 5f 73 74 72 28 %F\n", blob_str(
36f0: 26 63 6f 6d 6d 65 6e 74 29 29 3b 0a 20 20 7a 44 &comment));. zD
3700: 61 74 65 20 3d 20 64 62 5f 74 65 78 74 28 30 2c ate = db_text(0,
3710: 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d "SELECT datetim
3720: 65 28 27 6e 6f 77 27 29 22 29 3b 0a 20 20 7a 44 e('now')");. zD
3730: 61 74 65 5b 31 30 5d 20 3d 20 27 54 27 3b 0a 20 ate[10] = 'T';.
3740: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d blob_appendf(&m
3750: 61 6e 69 66 65 73 74 2c 20 22 44 20 25 73 5c 6e anifest, "D %s\n
3760: 22 2c 20 7a 44 61 74 65 29 3b 0a 20 20 64 62 5f ", zDate);. db_
3770: 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 prepare(&q,.
3780: 22 53 45 4c 45 43 54 20 70 61 74 68 6e 61 6d 65 "SELECT pathname
3790: 2c 20 75 75 69 64 20 46 52 4f 4d 20 76 66 69 6c , uuid FROM vfil
37a0: 65 20 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e 20 76 e JOIN blob ON v
37b0: 66 69 6c 65 2e 6d 72 69 64 3d 62 6c 6f 62 2e 72 file.mrid=blob.r
37c0: 69 64 22 0a 20 20 20 20 22 20 57 48 45 52 45 20 id". " WHERE
37d0: 4e 4f 54 20 64 65 6c 65 74 65 64 20 41 4e 44 20 NOT deleted AND
37e0: 76 66 69 6c 65 2e 76 69 64 3d 25 64 22 0a 20 20 vfile.vid=%d".
37f0: 20 20 22 20 4f 52 44 45 52 20 42 59 20 31 22 2c " ORDER BY 1",
3800: 20 76 69 64 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65 vid);. blob_ze
3810: 72 6f 28 26 66 69 6c 65 6e 61 6d 65 29 3b 0a 20 ro(&filename);.
3820: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 66 blob_appendf(&f
3830: 69 6c 65 6e 61 6d 65 2c 20 22 25 73 2f 22 2c 20 ilename, "%s/",
3840: 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a 20 g.zLocalRoot);.
3850: 20 6e 42 61 73 65 6e 61 6d 65 20 3d 20 62 6c 6f nBasename = blo
3860: 62 5f 73 69 7a 65 28 26 66 69 6c 65 6e 61 6d 65 b_size(&filename
3870: 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 );. while( db_s
3880: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
3890: 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 ROW ){. const
38a0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 char *zName = d
38b0: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
38c0: 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 0);. const
38d0: 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 char *zUuid = db
38e0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
38f0: 20 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 1);. const c
3900: 68 61 72 20 2a 7a 50 65 72 6d 3b 0a 20 20 20 20 har *zPerm;.
3910: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 66 69 6c blob_append(&fil
3920: 65 6e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 2d 31 ename, zName, -1
3930: 29 3b 0a 20 20 20 20 69 66 28 20 66 69 6c 65 5f );. if( file_
3940: 69 73 65 78 65 28 62 6c 6f 62 5f 73 74 72 28 26 isexe(blob_str(&
3950: 66 69 6c 65 6e 61 6d 65 29 29 20 29 7b 0a 20 20 filename)) ){.
3960: 20 20 20 20 7a 50 65 72 6d 20 3d 20 22 20 78 22 zPerm = " x"
3970: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 ;. }else{.
3980: 20 20 20 7a 50 65 72 6d 20 3d 20 22 22 3b 0a 20 zPerm = "";.
3990: 20 20 20 7d 0a 20 20 20 20 62 6c 6f 62 5f 72 65 }. blob_re
39a0: 73 69 7a 65 28 26 66 69 6c 65 6e 61 6d 65 2c 20 size(&filename,
39b0: 6e 42 61 73 65 6e 61 6d 65 29 3b 0a 20 20 20 20 nBasename);.
39c0: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 blob_appendf(&ma
39d0: 6e 69 66 65 73 74 2c 20 22 46 20 25 46 20 25 73 nifest, "F %F %s
39e0: 25 73 5c 6e 22 2c 20 7a 4e 61 6d 65 2c 20 7a 55 %s\n", zName, zU
39f0: 75 69 64 2c 20 7a 50 65 72 6d 29 3b 0a 20 20 7d uid, zPerm);. }
3a00: 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 66 . blob_reset(&f
3a10: 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 64 62 5f 66 ilename);. db_f
3a20: 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 7a inalize(&q);. z
3a30: 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 30 Uuid = db_text(0
3a40: 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 , "SELECT uuid F
3a50: 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 ROM blob WHERE r
3a60: 69 64 3d 25 64 22 2c 20 76 69 64 29 3b 0a 20 20 id=%d", vid);.
3a70: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 blob_appendf(&ma
3a80: 6e 69 66 65 73 74 2c 20 22 50 20 25 73 22 2c 20 nifest, "P %s",
3a90: 7a 55 75 69 64 29 3b 0a 0a 20 20 64 62 5f 70 72 zUuid);.. db_pr
3aa0: 65 70 61 72 65 28 26 71 32 2c 20 22 53 45 4c 45 epare(&q2, "SELE
3ab0: 43 54 20 6d 65 72 67 65 20 46 52 4f 4d 20 76 6d CT merge FROM vm
3ac0: 65 72 67 65 20 57 48 45 52 45 20 69 64 3d 3a 69 erge WHERE id=:i
3ad0: 64 22 29 3b 0a 20 20 64 62 5f 62 69 6e 64 5f 69 d");. db_bind_i
3ae0: 6e 74 28 26 71 32 2c 20 22 3a 69 64 22 2c 20 30 nt(&q2, ":id", 0
3af0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 );. while( db_s
3b00: 74 65 70 28 26 71 32 29 3d 3d 53 51 4c 49 54 45 tep(&q2)==SQLITE
3b10: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74 20 _ROW ){. int
3b20: 6d 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f mid = db_column_
3b30: 69 6e 74 28 26 71 32 2c 20 30 29 3b 0a 20 20 20 int(&q2, 0);.
3b40: 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 zUuid = db_text
3b50: 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 (0, "SELECT uuid
3b60: 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 FROM blob WHERE
3b70: 20 72 69 64 3d 25 64 22 2c 20 6d 69 64 29 3b 0a rid=%d", mid);.
3b80: 20 20 20 20 69 66 28 20 7a 55 75 69 64 20 29 7b if( zUuid ){
3b90: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
3ba0: 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 ndf(&manifest, "
3bb0: 20 25 73 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 %s", zUuid);.
3bc0: 20 20 20 20 66 72 65 65 28 7a 55 75 69 64 29 3b free(zUuid);
3bd0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f . }. }. db_
3be0: 72 65 73 65 74 28 26 71 32 29 3b 0a 0a 20 20 62 reset(&q2);.. b
3bf0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e lob_appendf(&man
3c00: 69 66 65 73 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 ifest, "\n");.
3c10: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 blob_appendf(&ma
3c20: 6e 69 66 65 73 74 2c 20 22 52 20 25 62 5c 6e 22 nifest, "R %b\n"
3c30: 2c 20 26 63 6b 73 75 6d 31 29 3b 0a 20 20 62 6c , &cksum1);. bl
3c40: 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 ob_appendf(&mani
3c50: 66 65 73 74 2c 20 22 55 20 25 46 5c 6e 22 2c 20 fest, "U %F\n",
3c60: 67 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 6d 64 35 g.zLogin);. md5
3c70: 73 75 6d 5f 62 6c 6f 62 28 26 6d 61 6e 69 66 65 sum_blob(&manife
3c80: 73 74 2c 20 26 6d 63 6b 73 75 6d 29 3b 0a 20 20 st, &mcksum);.
3c90: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 blob_appendf(&ma
3ca0: 6e 69 66 65 73 74 2c 20 22 5a 20 25 62 5c 6e 22 nifest, "Z %b\n"
3cb0: 2c 20 26 6d 63 6b 73 75 6d 29 3b 0a 20 20 7a 4d , &mcksum);. zM
3cc0: 61 6e 69 66 65 73 74 46 69 6c 65 20 3d 20 6d 70 anifestFile = mp
3cd0: 72 69 6e 74 66 28 22 25 73 6d 61 6e 69 66 65 73 rintf("%smanifes
3ce0: 74 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 t", g.zLocalRoot
3cf0: 29 3b 0a 20 20 69 66 28 20 21 6e 6f 53 69 67 6e );. if( !noSign
3d00: 20 26 26 20 63 6c 65 61 72 73 69 67 6e 28 26 6d && clearsign(&m
3d10: 61 6e 69 66 65 73 74 2c 20 26 6d 61 6e 69 66 65 anifest, &manife
3d20: 73 74 29 20 29 7b 0a 20 20 20 20 42 6c 6f 62 20 st) ){. Blob
3d30: 61 6e 73 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 ans;. blob_ze
3d40: 72 6f 28 26 61 6e 73 29 3b 0a 20 20 20 20 70 72 ro(&ans);. pr
3d50: 6f 6d 70 74 5f 75 73 65 72 28 22 75 6e 61 62 6c ompt_user("unabl
3d60: 65 20 74 6f 20 73 69 67 6e 20 6d 61 6e 69 66 65 e to sign manife
3d70: 73 74 2e 20 20 63 6f 6e 74 69 6e 75 65 20 5b 79 st. continue [y
3d80: 2f 4e 5d 3f 20 22 2c 20 26 61 6e 73 29 3b 0a 20 /N]? ", &ans);.
3d90: 20 20 20 69 66 28 20 62 6c 6f 62 5f 73 74 72 28 if( blob_str(
3da0: 26 61 6e 73 29 5b 30 5d 21 3d 27 79 27 20 29 7b &ans)[0]!='y' ){
3db0: 0a 20 20 20 20 20 20 64 62 5f 65 6e 64 5f 74 72 . db_end_tr
3dc0: 61 6e 73 61 63 74 69 6f 6e 28 31 29 3b 0a 20 20 ansaction(1);.
3dd0: 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 exit(1);.
3de0: 20 7d 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 77 72 }. }. blob_wr
3df0: 69 74 65 5f 74 6f 5f 66 69 6c 65 28 26 6d 61 6e ite_to_file(&man
3e00: 69 66 65 73 74 2c 20 7a 4d 61 6e 69 66 65 73 74 ifest, zManifest
3e10: 46 69 6c 65 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 File);. blob_re
3e20: 73 65 74 28 26 6d 61 6e 69 66 65 73 74 29 3b 0a set(&manifest);.
3e30: 20 20 62 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d blob_read_from
3e40: 5f 66 69 6c 65 28 26 6d 61 6e 69 66 65 73 74 2c _file(&manifest,
3e50: 20 7a 4d 61 6e 69 66 65 73 74 46 69 6c 65 29 3b zManifestFile);
3e60: 0a 20 20 66 72 65 65 28 7a 4d 61 6e 69 66 65 73 . free(zManifes
3e70: 74 46 69 6c 65 29 3b 0a 20 20 6e 76 69 64 20 3d tFile);. nvid =
3e80: 20 63 6f 6e 74 65 6e 74 5f 70 75 74 28 26 6d 61 content_put(&ma
3e90: 6e 69 66 65 73 74 2c 20 30 2c 20 30 29 3b 0a 20 nifest, 0, 0);.
3ea0: 20 69 66 28 20 6e 76 69 64 3d 3d 30 20 29 7b 0a if( nvid==0 ){.
3eb0: 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 fossil_panic
3ec0: 28 22 74 72 6f 75 62 6c 65 20 63 6f 6d 6d 69 74 ("trouble commit
3ed0: 74 69 6e 67 20 6d 61 6e 69 66 65 73 74 3a 20 25 ting manifest: %
3ee0: 73 22 2c 20 67 2e 7a 45 72 72 4d 73 67 29 3b 0a s", g.zErrMsg);.
3ef0: 20 20 7d 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65 }. db_multi_e
3f00: 78 65 63 28 22 49 4e 53 45 52 54 20 4f 52 20 49 xec("INSERT OR I
3f10: 47 4e 4f 52 45 20 49 4e 54 4f 20 75 6e 73 65 6e GNORE INTO unsen
3f20: 74 20 56 41 4c 55 45 53 28 25 64 29 22 2c 20 6e t VALUES(%d)", n
3f30: 76 69 64 29 3b 0a 20 20 6d 61 6e 69 66 65 73 74 vid);. manifest
3f40: 5f 63 72 6f 73 73 6c 69 6e 6b 28 6e 76 69 64 2c _crosslink(nvid,
3f50: 20 26 6d 61 6e 69 66 65 73 74 29 3b 0a 20 20 63 &manifest);. c
3f60: 6f 6e 74 65 6e 74 5f 64 65 6c 74 69 66 79 28 76 ontent_deltify(v
3f70: 69 64 2c 20 6e 76 69 64 2c 20 30 29 3b 0a 20 20 id, nvid, 0);.
3f80: 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 zUuid = db_text(
3f90: 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 0, "SELECT uuid
3fa0: 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 FROM blob WHERE
3fb0: 72 69 64 3d 25 64 22 2c 20 6e 76 69 64 29 3b 0a rid=%d", nvid);.
3fc0: 20 20 70 72 69 6e 74 66 28 22 4e 65 77 5f 56 65 printf("New_Ve
3fd0: 72 73 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 55 rsion: %s\n", zU
3fe0: 75 69 64 29 3b 0a 20 20 7a 4d 61 6e 69 66 65 73 uid);. zManifes
3ff0: 74 46 69 6c 65 20 3d 20 6d 70 72 69 6e 74 66 28 tFile = mprintf(
4000: 22 25 73 6d 61 6e 69 66 65 73 74 2e 75 75 69 64 "%smanifest.uuid
4010: 22 2c 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 ", g.zLocalRoot)
4020: 3b 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 6d ;. blob_zero(&m
4030: 75 75 69 64 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 uuid);. blob_ap
4040: 70 65 6e 64 66 28 26 6d 75 75 69 64 2c 20 22 25 pendf(&muuid, "%
4050: 73 5c 6e 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 s\n", zUuid);.
4060: 62 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69 blob_write_to_fi
4070: 6c 65 28 26 6d 75 75 69 64 2c 20 7a 4d 61 6e 69 le(&muuid, zMani
4080: 66 65 73 74 46 69 6c 65 29 3b 0a 20 20 66 72 65 festFile);. fre
4090: 65 28 7a 4d 61 6e 69 66 65 73 74 46 69 6c 65 29 e(zManifestFile)
40a0: 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 ;. blob_reset(&
40b0: 6d 75 75 69 64 29 3b 0a 0a 20 20 0a 20 20 2f 2a muuid);.. . /*
40c0: 20 55 70 64 61 74 65 20 74 68 65 20 76 66 69 6c Update the vfil
40d0: 65 20 61 6e 64 20 76 6d 65 72 67 65 20 74 61 62 e and vmerge tab
40e0: 6c 65 73 20 2a 2f 0a 20 20 64 62 5f 6d 75 6c 74 les */. db_mult
40f0: 69 5f 65 78 65 63 28 0a 20 20 20 20 22 44 45 4c i_exec(. "DEL
4100: 45 54 45 20 46 52 4f 4d 20 76 66 69 6c 65 20 57 ETE FROM vfile W
4110: 48 45 52 45 20 28 76 69 64 21 3d 25 64 20 4f 52 HERE (vid!=%d OR
4120: 20 64 65 6c 65 74 65 64 29 20 41 4e 44 20 66 69 deleted) AND fi
4130: 6c 65 5f 69 73 5f 73 65 6c 65 63 74 65 64 28 69 le_is_selected(i
4140: 64 29 3b 22 0a 20 20 20 20 22 44 45 4c 45 54 45 d);". "DELETE
4150: 20 46 52 4f 4d 20 76 6d 65 72 67 65 20 57 48 45 FROM vmerge WHE
4160: 52 45 20 66 69 6c 65 5f 69 73 5f 73 65 6c 65 63 RE file_is_selec
4170: 74 65 64 28 69 64 29 20 4f 52 20 69 64 3d 30 3b ted(id) OR id=0;
4180: 22 0a 20 20 20 20 22 55 50 44 41 54 45 20 76 66 ". "UPDATE vf
4190: 69 6c 65 20 53 45 54 20 76 69 64 3d 25 64 3b 22 ile SET vid=%d;"
41a0: 0a 20 20 20 20 22 55 50 44 41 54 45 20 76 66 69 . "UPDATE vfi
41b0: 6c 65 20 53 45 54 20 72 69 64 3d 6d 72 69 64 2c le SET rid=mrid,
41c0: 20 63 68 6e 67 65 64 3d 30 2c 20 64 65 6c 65 74 chnged=0, delet
41d0: 65 64 3d 30 20 57 48 45 52 45 20 66 69 6c 65 5f ed=0 WHERE file_
41e0: 69 73 5f 73 65 6c 65 63 74 65 64 28 69 64 29 3b is_selected(id);
41f0: 22 0a 20 20 20 20 2c 20 76 69 64 2c 20 6e 76 69 ". , vid, nvi
4200: 64 0a 20 20 29 3b 0a 20 20 64 62 5f 6c 73 65 74 d. );. db_lset
4210: 5f 69 6e 74 28 22 63 68 65 63 6b 6f 75 74 22 2c _int("checkout",
4220: 20 6e 76 69 64 29 3b 0a 0a 20 20 2f 2a 20 56 65 nvid);.. /* Ve
4230: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 72 65 rify that the re
4240: 70 6f 73 69 74 6f 72 79 20 63 68 65 63 6b 73 75 pository checksu
4250: 6d 20 6d 61 74 63 68 65 73 20 74 68 65 20 65 78 m matches the ex
4260: 70 65 63 74 65 64 20 63 68 65 63 6b 73 75 6d 0a pected checksum.
4270: 20 20 2a 2a 20 63 61 6c 63 75 6c 61 74 65 64 20 ** calculated
4280: 62 65 66 6f 72 65 20 74 68 65 20 63 68 65 63 6b before the check
4290: 69 6e 20 73 74 61 72 74 65 64 20 28 61 6e 64 20 in started (and
42a0: 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 52 20 stored as the R
42b0: 72 65 63 6f 72 64 0a 20 20 2a 2a 20 6f 66 20 74 record. ** of t
42c0: 68 65 20 6d 61 6e 69 66 65 73 74 20 66 69 6c 65 he manifest file
42d0: 29 2e 0a 20 20 2a 2f 0a 20 20 76 66 69 6c 65 5f ).. */. vfile_
42e0: 61 67 67 72 65 67 61 74 65 5f 63 68 65 63 6b 73 aggregate_checks
42f0: 75 6d 5f 72 65 70 6f 73 69 74 6f 72 79 28 6e 76 um_repository(nv
4300: 69 64 2c 20 26 63 6b 73 75 6d 32 29 3b 0a 20 20 id, &cksum2);.
4310: 69 66 28 20 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 if( blob_compare
4320: 28 26 63 6b 73 75 6d 31 2c 20 26 63 6b 73 75 6d (&cksum1, &cksum
4330: 32 29 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 2) ){. fossil
4340: 5f 70 61 6e 69 63 28 22 74 72 65 65 20 63 68 65 _panic("tree che
4350: 63 6b 73 75 6d 20 64 6f 65 73 20 6e 6f 74 20 6d cksum does not m
4360: 61 74 63 68 20 72 65 70 6f 73 69 74 6f 72 79 20 atch repository
4370: 61 66 74 65 72 20 63 6f 6d 6d 69 74 22 29 3b 0a after commit");.
4380: 20 20 7d 0a 0a 20 20 2f 2a 20 56 65 72 69 66 79 }.. /* Verify
4390: 20 74 68 61 74 20 74 68 65 20 6d 61 6e 69 66 65 that the manife
43a0: 73 74 20 63 68 65 63 6b 73 75 6d 20 6d 61 74 63 st checksum matc
43b0: 68 65 73 20 74 68 65 20 65 78 70 65 63 74 65 64 hes the expected
43c0: 20 63 68 65 63 6b 73 75 6d 20 2a 2f 0a 20 20 76 checksum */. v
43d0: 66 69 6c 65 5f 61 67 67 72 65 67 61 74 65 5f 63 file_aggregate_c
43e0: 68 65 63 6b 73 75 6d 5f 6d 61 6e 69 66 65 73 74 hecksum_manifest
43f0: 28 6e 76 69 64 2c 20 26 63 6b 73 75 6d 32 2c 20 (nvid, &cksum2,
4400: 26 63 6b 73 75 6d 31 62 29 3b 0a 20 20 69 66 28 &cksum1b);. if(
4410: 20 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 28 26 63 blob_compare(&c
4420: 6b 73 75 6d 31 2c 20 26 63 6b 73 75 6d 31 62 29 ksum1, &cksum1b)
4430: 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 ){. fossil_p
4440: 61 6e 69 63 28 22 6d 61 6e 69 66 65 73 74 20 63 anic("manifest c
4450: 68 65 63 6b 73 75 6d 20 64 6f 65 73 20 6e 6f 74 hecksum does not
4460: 20 61 67 72 65 65 20 77 69 74 68 20 6d 61 6e 69 agree with mani
4470: 66 65 73 74 3a 20 22 0a 20 20 20 20 20 20 20 20 fest: ".
4480: 20 20 20 20 20 20 20 20 20 22 25 62 20 76 65 72 "%b ver
4490: 73 75 73 20 25 62 22 2c 20 26 63 6b 73 75 6d 31 sus %b", &cksum1
44a0: 2c 20 26 63 6b 73 75 6d 31 62 29 3b 0a 20 20 7d , &cksum1b);. }
44b0: 0a 20 20 69 66 28 20 62 6c 6f 62 5f 63 6f 6d 70 . if( blob_comp
44c0: 61 72 65 28 26 63 6b 73 75 6d 31 2c 20 26 63 6b are(&cksum1, &ck
44d0: 73 75 6d 32 29 20 29 7b 0a 20 20 20 20 66 6f 73 sum2) ){. fos
44e0: 73 69 6c 5f 70 61 6e 69 63 28 22 74 72 65 65 20 sil_panic("tree
44f0: 63 68 65 63 6b 73 75 6d 20 64 6f 65 73 20 6e 6f checksum does no
4500: 74 20 6d 61 74 63 68 20 6d 61 6e 69 66 65 73 74 t match manifest
4510: 20 61 66 74 65 72 20 63 6f 6d 6d 69 74 3a 20 22 after commit: "
4520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4530: 20 20 22 25 62 20 76 65 72 73 75 73 20 25 62 22 "%b versus %b"
4540: 2c 20 26 63 6b 73 75 6d 31 2c 20 26 63 6b 73 75 , &cksum1, &cksu
4550: 6d 32 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 56 m2);. }.. /* V
4560: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63 erify that the c
4570: 6f 6d 6d 69 74 20 64 69 64 20 6e 6f 74 20 6d 6f ommit did not mo
4580: 64 69 66 79 20 61 6e 79 20 64 69 73 6b 20 69 6d dify any disk im
4590: 61 67 65 73 2e 20 2a 2f 0a 20 20 76 66 69 6c 65 ages. */. vfile
45a0: 5f 61 67 67 72 65 67 61 74 65 5f 63 68 65 63 6b _aggregate_check
45b0: 73 75 6d 5f 64 69 73 6b 28 6e 76 69 64 2c 20 26 sum_disk(nvid, &
45c0: 63 6b 73 75 6d 32 29 3b 0a 20 20 69 66 28 20 62 cksum2);. if( b
45d0: 6c 6f 62 5f 63 6f 6d 70 61 72 65 28 26 63 6b 73 lob_compare(&cks
45e0: 75 6d 31 2c 20 26 63 6b 73 75 6d 32 29 20 29 7b um1, &cksum2) ){
45f0: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 . fossil_pani
4600: 63 28 22 74 72 65 65 20 63 68 65 63 6b 73 75 6d c("tree checksum
4610: 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 s before and aft
4620: 65 72 20 63 6f 6d 6d 69 74 20 64 6f 20 6e 6f 74 er commit do not
4630: 20 6d 61 74 63 68 22 29 3b 0a 20 20 7d 0a 0a 20 match");. }..
4640: 20 2f 2a 20 43 6c 65 61 72 20 74 68 65 20 75 6e /* Clear the un
4650: 64 6f 2f 72 65 64 6f 20 73 74 61 63 6b 20 2a 2f do/redo stack */
4660: 0a 20 20 75 6e 64 6f 5f 72 65 73 65 74 28 29 3b . undo_reset();
4670: 0a 0a 20 20 2f 2a 20 43 6f 6d 6d 69 74 20 2a 2f .. /* Commit */
4680: 0a 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 . db_end_transa
4690: 63 74 69 6f 6e 28 30 29 3b 0a 0a 20 20 61 75 74 ction(0);.. aut
46a0: 6f 73 79 6e 63 28 41 55 54 4f 53 59 4e 43 5f 50 osync(AUTOSYNC_P
46b0: 55 53 48 29 3b 20 20 0a 20 20 69 66 28 20 64 62 USH); . if( db
46c0: 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 _exists("SELECT
46d0: 31 20 46 52 4f 4d 20 70 6c 69 6e 6b 20 57 48 45 1 FROM plink WHE
46e0: 52 45 20 70 69 64 3d 25 64 20 41 4e 44 20 63 69 RE pid=%d AND ci
46f0: 64 21 3d 25 64 22 2c 20 76 69 64 2c 20 6e 76 69 d!=%d", vid, nvi
4700: 64 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 d) ){. printf
4710: 28 22 2a 2a 2a 2a 20 77 61 72 6e 69 6e 67 3a 20 ("**** warning:
4720: 61 20 66 6f 72 6b 20 68 61 73 20 6f 63 63 75 72 a fork has occur
4730: 72 65 64 20 2a 2a 2a 2a 2a 5c 6e 22 29 3b 0a 20 red *****\n");.
4740: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d }.}../*.** COMM
4750: 41 4e 44 3a 20 74 65 73 74 2d 69 6d 70 6f 72 74 AND: test-import
4760: 2d 6d 61 6e 69 66 65 73 74 0a 2a 2a 0a 2a 2a 20 -manifest.**.**
4770: 55 73 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 74 Usage: %fossil t
4780: 65 73 74 2d 69 6d 70 6f 72 74 2d 6d 61 6e 69 66 est-import-manif
4790: 65 73 74 20 44 41 54 45 20 43 4f 4d 4d 45 4e 54 est DATE COMMENT
47a0: 20 3f 2d 70 20 50 41 52 45 4e 54 5f 52 45 43 4f ?-p PARENT_RECO
47b0: 52 44 49 44 3f 2e 2e 2e 20 3f 2d 66 20 28 46 49 RDID?... ?-f (FI
47c0: 4c 45 5f 52 45 43 4f 52 44 49 44 20 50 41 54 48 LE_RECORDID PATH
47d0: 29 3f 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 43 72 65 61 )?....**.** Crea
47e0: 74 65 20 61 20 6e 65 77 20 76 65 72 73 69 6f 6e te a new version
47f0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the
4800: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 0a 2a specified file.*
4810: 2a 20 72 65 76 69 73 69 6f 6e 73 20 28 69 66 20 * revisions (if
4820: 61 6e 79 29 2c 20 61 6e 64 20 63 68 69 6c 64 20 any), and child
4830: 6f 66 20 74 68 65 20 67 69 76 65 6e 20 50 41 52 of the given PAR
4840: 45 4e 54 20 76 65 72 73 69 6f 6e 2e 0a 2a 2f 0a ENT version..*/.
4850: 76 6f 69 64 20 69 6d 70 6f 72 74 5f 6d 61 6e 69 void import_mani
4860: 66 65 73 74 5f 63 6d 64 28 76 6f 69 64 29 7b 0a fest_cmd(void){.
4870: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 7a 44 const char* zD
4880: 61 74 65 3b 20 20 20 20 2f 2a 20 61 72 67 75 6d ate; /* argum
4890: 65 6e 74 20 2d 20 74 69 6d 65 73 74 61 6d 70 2c ent - timestamp,
48a0: 20 61 73 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 as seconds sinc
48b0: 65 20 65 70 6f 63 68 20 28 69 6e 74 29 20 2a 2f e epoch (int) */
48c0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 7a . const char* z
48d0: 43 6f 6d 6d 65 6e 74 3b 20 2f 2a 20 61 72 67 75 Comment; /* argu
48e0: 6d 65 6e 74 20 2d 20 6d 61 6e 69 66 65 73 74 20 ment - manifest
48f0: 63 6f 6d 6d 65 6e 74 20 2a 2f 0a 20 20 63 68 61 comment */. cha
4900: 72 2a 20 7a 44 61 74 65 46 6d 74 3b 20 20 20 20 r* zDateFmt;
4910: 20 20 20 2f 2a 20 74 69 6d 65 73 74 61 6d 70 20 /* timestamp
4920: 66 6f 72 6d 61 74 74 65 64 20 66 6f 72 20 74 68 formatted for th
4930: 65 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 20 20 e manifest */.
4940: 69 6e 74 2a 20 7a 50 61 72 65 6e 74 73 3b 20 20 int* zParents;
4950: 20 20 20 20 20 20 2f 2a 20 61 72 67 75 6d 65 6e /* argumen
4960: 74 73 20 2d 20 61 72 72 61 79 20 6f 66 20 70 61 ts - array of pa
4970: 72 65 6e 74 20 72 65 66 65 72 65 6e 63 65 73 20 rent references
4980: 2a 2f 0a 20 20 69 6e 74 20 7a 50 61 72 65 6e 74 */. int zParent
4990: 43 6f 75 6e 74 3b 20 20 20 20 20 2f 2a 20 6e 75 Count; /* nu
49a0: 6d 62 65 72 20 6f 66 20 66 6f 75 6e 64 20 70 61 mber of found pa
49b0: 72 65 6e 74 20 72 65 66 65 72 65 6e 63 65 73 20 rent references
49c0: 2a 2f 0a 20 20 42 6c 6f 62 20 6d 61 6e 69 66 65 */. Blob manife
49d0: 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 63 6f st; /* co
49e0: 6e 74 61 69 6e 65 72 20 66 6f 72 20 74 68 65 20 ntainer for the
49f0: 6d 61 6e 69 66 65 73 74 20 74 6f 20 62 65 20 67 manifest to be g
4a00: 65 6e 65 72 61 74 65 64 20 2a 2f 0a 20 20 42 6c enerated */. Bl
4a10: 6f 62 20 6d 63 6b 73 75 6d 3b 20 20 20 20 20 20 ob mcksum;
4a20: 20 20 20 20 2f 2a 20 53 65 6c 66 2d 63 68 65 63 /* Self-chec
4a30: 6b 73 75 6d 20 6f 6e 20 74 68 65 20 6d 61 6e 69 ksum on the mani
4a40: 66 65 73 74 20 2a 2f 0a 20 20 42 6c 6f 62 20 63 fest */. Blob c
4a50: 6b 73 75 6d 2c 20 63 6b 73 75 6d 32 3b 20 20 20 ksum, cksum2;
4a60: 2f 2a 20 42 65 66 6f 72 65 20 61 6e 64 20 61 66 /* Before and af
4a70: 74 65 72 20 63 6f 6d 6d 69 74 20 63 68 65 63 6b ter commit check
4a80: 73 75 6d 73 20 2a 2f 0a 20 20 42 6c 6f 62 20 63 sums */. Blob c
4a90: 6b 73 75 6d 31 62 3b 20 20 20 20 20 20 20 20 20 ksum1b;
4aa0: 2f 2a 20 43 68 65 63 6b 73 75 6d 20 72 65 63 6f /* Checksum reco
4ab0: 72 64 65 64 20 69 6e 20 74 68 65 20 6d 61 6e 69 rded in the mani
4ac0: 66 65 73 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 fest */. const
4ad0: 63 68 61 72 2a 20 70 61 72 65 6e 74 3b 20 20 20 char* parent;
4ae0: 2f 2a 20 6c 6f 6f 70 20 76 61 72 69 61 62 6c 65 /* loop variable
4af0: 20 77 68 65 6e 20 63 6f 6c 6c 65 63 74 69 6e 67 when collecting
4b00: 20 70 61 72 65 6e 74 20 72 65 66 65 72 65 6e 63 parent referenc
4b10: 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 2c 20 6d es */. int i, m
4b20: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a id; /*
4b30: 20 41 6e 6f 74 68 65 72 20 6c 6f 6f 70 20 69 6e Another loop in
4b40: 64 65 78 2c 20 61 6e 64 20 69 64 20 6f 66 20 6e dex, and id of n
4b50: 65 77 20 6d 61 6e 69 66 65 73 74 20 2a 2f 0a 20 ew manifest */.
4b60: 20 53 74 6d 74 20 71 3b 20 20 20 20 20 20 20 20 Stmt q;
4b70: 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 20 73 74 /* sql st
4b80: 61 74 65 6d 65 6e 74 20 74 6f 20 71 75 65 72 79 atement to query
4b90: 20 74 61 62 6c 65 20 6f 66 20 66 69 6c 65 73 20 table of files
4ba0: 2a 2f 0a 20 20 63 68 61 72 2a 20 7a 4d 69 64 55 */. char* zMidU
4bb0: 75 69 64 3b 20 20 20 20 20 20 20 2f 2a 20 55 75 uid; /* Uu
4bc0: 69 64 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 id for the newly
4bd0: 20 67 65 6e 65 72 61 74 65 64 20 6d 61 6e 69 66 generated manif
4be0: 65 73 74 20 2a 2f 0a 0a 0a 23 64 65 66 69 6e 65 est */...#define
4bf0: 20 55 53 41 47 45 20 28 22 44 41 54 45 20 43 4f USAGE ("DATE CO
4c00: 4d 4d 45 4e 54 20 3f 2d 70 7c 2d 70 61 72 65 6e MMENT ?-p|-paren
4c10: 74 20 50 41 52 45 4e 54 5f 52 49 44 2e 2e 2e 3f t PARENT_RID...?
4c20: 20 3f 2d 66 7c 2d 66 69 6c 65 20 28 46 49 4c 45 ?-f|-file (FILE
4c30: 5f 52 49 44 20 50 41 54 48 29 2e 2e 2e 3f 22 29 _RID PATH)...?")
4c40: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 56 61 6c 69 .. /*. ** Vali
4c50: 64 61 74 65 20 61 6e 64 20 70 72 6f 63 65 73 73 date and process
4c60: 20 61 72 67 75 6d 65 6e 74 73 2c 20 63 6f 6c 6c arguments, coll
4c70: 65 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e ect information.
4c80: 0a 20 20 2a 2f 0a 0a 20 20 64 62 5f 6d 75 73 74 . */.. db_must
4c90: 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65 65 28 _be_within_tree(
4ca0: 29 3b 0a 0a 20 20 2f 2a 20 4d 61 6e 64 61 74 6f );.. /* Mandato
4cb0: 72 79 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a ry arguments */.
4cc0: 20 20 69 66 20 28 67 2e 61 72 67 63 20 3c 20 34 if (g.argc < 4
4cd0: 29 20 7b 0a 20 20 20 20 75 73 61 67 65 20 28 55 ) {. usage (U
4ce0: 53 41 47 45 29 3b 0a 20 20 7d 0a 0a 20 20 7a 44 SAGE);. }.. zD
4cf0: 61 74 65 20 20 20 20 3d 20 67 2e 61 72 67 76 5b ate = g.argv[
4d00: 32 5d 3b 0a 20 20 7a 43 6f 6d 6d 65 6e 74 20 3d 2];. zComment =
4d10: 20 67 2e 61 72 67 76 5b 33 5d 3b 0a 0a 20 20 72 g.argv[3];.. r
4d20: 65 6d 6f 76 65 5f 66 72 6f 6d 5f 61 72 67 76 20 emove_from_argv
4d30: 28 32 2c 32 29 3b 0a 0a 20 20 2f 2a 20 50 75 6c (2,2);.. /* Pul
4d40: 6c 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 70 l the optional p
4d50: 61 72 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 0a arent arguments.
4d60: 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 3a 20 **. ** Note:
4d70: 49 6e 20 70 72 69 6e 63 69 70 6c 65 20 69 74 20 In principle it
4d80: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 is possible that
4d90: 20 74 68 65 20 6c 6f 6f 70 20 62 65 6c 6f 77 20 the loop below
4da0: 65 78 74 72 61 63 74 73 0a 20 20 2a 2a 20 74 68 extracts. ** th
4db0: 65 20 77 72 6f 6e 67 20 61 72 67 75 6d 65 6e 74 e wrong argument
4dc0: 73 2c 20 69 66 20 77 65 20 65 76 65 72 20 74 72 s, if we ever tr
4dd0: 79 20 74 6f 20 69 6d 70 6f 72 74 20 61 20 66 69 y to import a fi
4de0: 6c 65 20 77 68 6f 73 65 20 70 61 74 68 0a 20 20 le whose path.
4df0: 2a 2a 20 73 74 61 72 74 73 20 77 69 74 68 20 2d ** starts with -
4e00: 70 2f 2d 70 61 72 65 6e 74 2e 20 49 6e 20 74 68 p/-parent. In th
4e10: 61 74 20 63 61 73 65 20 68 6f 77 65 76 65 72 20 at case however
4e20: 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 the removal of t
4e30: 77 6f 0a 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 wo. ** argument
4e40: 73 20 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 s will leave the
4e50: 20 66 69 6c 65 20 62 65 72 65 66 74 20 6f 66 20 file bereft of
4e60: 61 6e 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 an argument and
4e70: 74 68 65 0a 20 20 2a 2a 20 72 65 63 68 65 63 6b the. ** recheck
4e80: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f of the number o
4e90: 66 20 61 72 67 75 6d 65 6e 74 73 20 62 65 6c 6f f arguments belo
4ea0: 77 20 73 68 6f 75 6c 64 20 63 61 74 63 68 20 74 w should catch t
4eb0: 68 61 74 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 46 hat.. **. ** F
4ec0: 6f 72 20 61 20 74 65 73 74 20 63 6f 6d 6d 61 6e or a test comman
4ed0: 64 20 74 68 69 73 20 69 73 20 61 63 63 65 70 74 d this is accept
4ee0: 61 62 6c 65 2c 20 69 74 20 77 6f 6e 27 74 20 68 able, it won't h
4ef0: 61 76 65 20 6c 6f 74 73 20 6f 66 0a 20 20 2a 2a ave lots of. **
4f00: 20 73 61 66 65 74 79 20 6e 65 74 73 2e 0a 20 20 safety nets..
4f10: 2a 2f 0a 0a 20 20 7a 50 61 72 65 6e 74 43 6f 75 */.. zParentCou
4f20: 6e 74 20 3d 20 30 3b 0a 20 20 7a 50 61 72 65 6e nt = 0;. zParen
4f30: 74 73 20 3d 20 28 69 6e 74 2a 29 6d 61 6c 6c 6f ts = (int*)mallo
4f40: 63 28 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 31 c(sizeof(int)*(1
4f50: 2b 67 2e 61 72 67 63 29 29 3b 0a 20 20 2f 2a 20 +g.argc));. /*
4f60: 31 2b 2c 20 74 6f 20 62 65 20 6f 6b 20 77 69 74 1+, to be ok wit
4f70: 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 65 76 h the default ev
4f80: 65 6e 20 69 66 20 6e 6f 20 61 72 67 75 6d 65 6e en if no argumen
4f90: 74 73 20 61 72 6f 75 6e 64 20 2a 2f 0a 0a 20 20 ts around */..
4fa0: 77 68 69 6c 65 20 28 28 70 61 72 65 6e 74 20 3d while ((parent =
4fb0: 20 66 69 6e 64 5f 6f 70 74 69 6f 6e 28 22 70 61 find_option("pa
4fc0: 72 65 6e 74 22 2c 22 70 22 2c 31 29 29 20 21 3d rent","p",1)) !=
4fd0: 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 2f 2a 20 NULL) {. /*
4fe0: 43 68 65 63 6b 20 61 6e 64 20 73 74 6f 72 65 20 Check and store
4ff0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 7a 50 61 72 65 ... */. zPare
5000: 6e 74 73 20 5b 7a 50 61 72 65 6e 74 43 6f 75 6e nts [zParentCoun
5010: 74 5d 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 t] = name_to_rid
5020: 20 28 70 61 72 65 6e 74 29 3b 0a 20 20 20 20 7a (parent);. z
5030: 50 61 72 65 6e 74 43 6f 75 6e 74 20 2b 2b 3b 0a ParentCount ++;.
5040: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 46 }.. /*. ** F
5050: 61 6c 6c 20 62 61 63 6b 20 74 6f 20 74 68 65 20 all back to the
5060: 72 6f 6f 74 20 6d 61 6e 69 66 65 73 74 20 61 73 root manifest as
5070: 20 70 61 72 65 6e 74 20 69 66 20 6e 6f 6e 65 20 parent if none
5080: 77 65 72 65 20 73 70 65 63 69 66 69 65 64 0a 20 were specified.
5090: 20 2a 2a 20 65 78 70 6c 69 63 69 74 6c 79 2e 0a ** explicitly..
50a0: 20 20 2a 2f 0a 0a 20 20 69 66 20 28 21 7a 50 61 */.. if (!zPa
50b0: 72 65 6e 74 43 6f 75 6e 74 29 20 7b 0a 20 20 20 rentCount) {.
50c0: 20 7a 50 61 72 65 6e 74 73 20 5b 7a 50 61 72 65 zParents [zPare
50d0: 6e 74 43 6f 75 6e 74 5d 20 3d 20 31 3b 20 2f 2a ntCount] = 1; /*
50e0: 20 48 41 43 4b 3a 20 72 69 64 20 31 20 69 73 20 HACK: rid 1 is
50f0: 74 68 65 20 62 61 73 65 6c 69 6e 65 20 6d 61 6e the baseline man
5100: 69 66 65 73 74 0a 09 09 09 09 20 2a 2a 20 77 68 ifest..... ** wh
5110: 69 63 68 20 77 61 73 20 65 6e 74 65 72 65 64 20 ich was entered
5120: 77 68 65 6e 20 74 68 65 20 72 65 70 6f 73 69 74 when the reposit
5130: 6f 72 79 0a 09 09 09 09 20 2a 2a 20 77 61 73 20 ory..... ** was
5140: 63 72 65 61 74 65 64 20 76 69 61 20 27 6e 65 77 created via 'new
5150: 27 2e 20 49 74 20 61 6c 77 61 79 73 20 68 61 73 '. It always has
5160: 0a 09 09 09 09 20 2a 2a 20 72 69 64 20 31 2e 0a ..... ** rid 1..
5170: 09 09 09 09 20 2a 2f 0a 20 20 20 20 7a 50 61 72 .... */. zPar
5180: 65 6e 74 43 6f 75 6e 74 20 2b 2b 3b 0a 20 20 7d entCount ++;. }
5190: 0a 0a 20 20 2f 2a 20 50 75 6c 6c 20 74 68 65 20 .. /* Pull the
51a0: 66 69 6c 65 20 61 72 67 75 6d 65 6e 74 73 2c 20 file arguments,
51b0: 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 68 61 73 at least one has
51c0: 20 74 6f 20 62 65 20 70 72 65 73 65 6e 74 2e 20 to be present.
51d0: 54 68 65 79 20 61 72 65 0a 20 20 2a 2a 20 74 68 They are. ** th
51e0: 65 20 6f 6e 6c 79 20 74 68 69 6e 67 73 20 77 65 e only things we
51f0: 20 63 61 6e 20 68 61 76 65 20 68 65 72 65 2c 20 can have here,
5200: 6e 6f 77 2c 20 61 6e 64 20 74 68 65 79 20 61 72 now, and they ar
5210: 65 20 74 72 69 70 6c 65 73 20 6f 66 0a 20 20 2a e triples of. *
5220: 2a 20 27 2d 66 20 46 49 44 20 50 41 54 48 27 2c * '-f FID PATH',
5230: 20 73 6f 20 75 73 65 20 6f 66 20 66 69 6e 64 5f so use of find_
5240: 6f 70 74 69 6f 6e 20 69 73 20 6f 75 74 2c 20 61 option is out, a
5250: 6e 64 20 77 65 20 63 61 6e 20 63 68 65 63 6b 20 nd we can check
5260: 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 the. ** number
5270: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 of arguments..
5280: 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 3a 20 57 65 **. ** Note: We
5290: 20 73 74 6f 72 65 20 74 68 65 20 64 61 74 61 20 store the data
52a0: 69 6e 20 61 20 74 65 6d 70 2e 20 74 61 62 6c 65 in a temp. table
52b0: 2c 20 73 6f 20 74 68 61 74 20 77 65 20 6c 61 74 , so that we lat
52c0: 65 72 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 er can. **
52d0: 20 20 70 75 6c 6c 20 69 74 20 73 6f 72 74 65 64 pull it sorted
52e0: 2c 20 61 6e 64 20 61 6c 73 6f 20 65 61 73 69 6c , and also easil
52f0: 79 20 67 65 74 20 74 68 65 20 61 73 73 6f 63 69 y get the associ
5300: 61 74 65 64 20 68 61 73 68 0a 20 20 2a 2a 20 20 ated hash. **
5310: 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 72 73 identifiers
5320: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 .. **. ** Note
5330: 20 32 3a 20 57 65 20 65 78 70 65 63 74 20 61 74 2: We expect at
5340: 20 6c 65 61 73 74 20 6f 6e 65 20 66 69 6c 65 2c least one file,
5350: 20 6f 74 68 65 72 77 69 73 65 20 74 68 65 20 6d otherwise the m
5360: 61 6e 69 66 65 73 74 20 77 6f 6e 27 74 0a 20 20 anifest won't.
5370: 2a 2a 20 62 65 20 72 65 63 6f 67 6e 69 7a 65 64 ** be recognized
5380: 20 61 73 20 61 20 62 61 73 65 6c 69 6e 65 20 62 as a baseline b
5390: 79 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 70 y the manifest p
53a0: 61 72 73 65 72 2e 0a 20 20 2a 2f 0a 0a 20 20 69 arser.. */.. i
53b0: 66 20 28 28 28 67 2e 61 72 67 63 2d 32 29 20 25 f (((g.argc-2) %
53c0: 20 33 20 21 3d 20 30 29 20 7c 7c 20 28 67 2e 61 3 != 0) || (g.a
53d0: 72 67 63 20 3c 20 35 29 29 20 7b 0a 20 20 20 20 rgc < 5)) {.
53e0: 75 73 61 67 65 20 28 55 53 41 47 45 29 3b 0a 20 usage (USAGE);.
53f0: 20 7d 0a 0a 20 20 64 62 5f 62 65 67 69 6e 5f 74 }.. db_begin_t
5400: 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 ransaction();.
5410: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 20 28 22 db_multi_exec ("
5420: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c CREATE TEMP TABL
5430: 45 20 5f 5f 69 6d 20 28 22 0a 09 09 20 22 72 69 E __im ("... "ri
5440: 64 20 20 20 20 20 20 49 4e 54 45 47 45 52 20 4e d INTEGER N
5450: 4f 54 20 4e 55 4c 4c 2c 22 0a 09 09 20 22 70 61 OT NULL,"... "pa
5460: 74 68 6e 61 6d 65 20 54 45 58 54 20 20 20 20 4e thname TEXT N
5470: 4f 54 20 4e 55 4c 4c 29 22 20 29 3b 0a 0a 20 20 OT NULL)" );..
5480: 77 68 69 6c 65 20 28 67 2e 61 72 67 63 20 3e 20 while (g.argc >
5490: 32 29 20 7b 0a 20 20 20 20 2f 2a 20 43 68 65 63 2) {. /* Chec
54a0: 6b 20 61 6e 64 20 73 74 6f 72 65 20 2e 2e 2e 20 k and store ...
54b0: 2a 2f 0a 20 20 20 20 69 66 20 28 73 74 72 63 6d */. if (strcm
54c0: 70 28 22 2d 66 22 2c 20 20 20 67 2e 61 72 67 76 p("-f", g.argv
54d0: 5b 32 5d 29 20 26 26 0a 09 73 74 72 63 6d 70 28 [2]) &&..strcmp(
54e0: 22 2d 66 69 6c 65 22 2c 67 2e 61 72 67 76 5b 32 "-file",g.argv[2
54f0: 5d 29 29 20 7b 0a 20 20 20 20 20 20 75 73 61 67 ])) {. usag
5500: 65 20 28 55 53 41 47 45 29 3b 0a 20 20 20 20 7d e (USAGE);. }
5510: 0a 0a 20 20 20 20 2f 2a 20 44 41 4e 47 45 52 20 .. /* DANGER
5520: 54 68 65 20 25 73 20 66 6f 72 20 74 68 65 20 70 The %s for the p
5530: 61 74 68 20 6d 69 67 68 74 20 6c 65 61 64 20 69 ath might lead i
5540: 74 73 65 6c 66 20 74 6f 20 61 6e 20 69 6e 6a 65 tself to an inje
5550: 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 61 74 74 ction. ** att
5560: 61 63 6b 2e 20 46 6f 72 20 6e 6f 77 20 28 69 2e ack. For now (i.
5570: 65 2e 20 74 65 73 74 69 6e 67 29 20 74 68 69 73 e. testing) this
5580: 20 69 73 20 6f 6b 2c 20 62 75 74 20 64 6f 20 73 is ok, but do s
5590: 6f 6d 65 74 68 69 6e 67 0a 20 20 20 20 2a 2a 20 omething. **
55a0: 62 65 74 74 65 72 20 69 6e 20 74 68 65 20 66 75 better in the fu
55b0: 74 75 72 65 2e 0a 20 20 20 20 2a 2f 0a 0a 20 20 ture.. */..
55c0: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 db_multi_exec(
55d0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5f 5f 69 "INSERT INTO __i
55e0: 6d 20 56 41 4c 55 45 53 28 25 64 2c 27 25 73 27 m VALUES(%d,'%s'
55f0: 29 22 2c 0a 09 09 20 20 6e 61 6d 65 5f 74 6f 5f )",... name_to_
5600: 72 69 64 20 28 67 2e 61 72 67 76 5b 33 5d 29 2c rid (g.argv[3]),
5610: 20 67 2e 61 72 67 76 5b 34 5d 20 29 3b 0a 20 20 g.argv[4] );.
5620: 20 20 72 65 6d 6f 76 65 5f 66 72 6f 6d 5f 61 72 remove_from_ar
5630: 67 76 20 28 32 2c 33 29 3b 0a 20 20 7d 0a 0a 20 gv (2,3);. }..
5640: 20 76 65 72 69 66 79 5f 61 6c 6c 5f 6f 70 74 69 verify_all_opti
5650: 6f 6e 73 28 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a ons();.. /*. *
5660: 2a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 * Determine the
5670: 75 73 65 72 20 74 68 65 20 6d 61 6e 69 66 65 73 user the manifes
5680: 74 20 77 69 6c 6c 20 62 65 6c 6f 6e 67 20 74 6f t will belong to
5690: 2c 20 61 6e 64 20 63 68 65 63 6b 20 74 68 61 74 , and check that
56a0: 0a 20 20 2a 2a 20 74 68 69 73 20 75 73 65 72 20 . ** this user
56b0: 65 78 69 73 74 73 2e 0a 20 20 2a 2f 0a 0a 20 20 exists.. */..
56c0: 75 73 65 72 5f 73 65 6c 65 63 74 28 29 3b 0a 20 user_select();.
56d0: 20 69 66 28 20 21 64 62 5f 65 78 69 73 74 73 28 if( !db_exists(
56e0: 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 75 "SELECT 1 FROM u
56f0: 73 65 72 20 57 48 45 52 45 20 6c 6f 67 69 6e 3d ser WHERE login=
5700: 25 51 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 20 29 %Q", g.zLogin) )
5710: 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 {. fossil_fat
5720: 61 6c 28 22 6e 6f 20 73 75 63 68 20 75 73 65 72 al("no such user
5730: 3a 20 25 73 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 : %s", g.zLogin)
5740: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a ;. }.. /*. **
5750: 20 4e 6f 77 20 67 65 6e 65 72 61 74 65 20 74 68 Now generate th
5760: 65 20 6d 61 6e 69 66 65 73 74 20 69 6e 20 6d 65 e manifest in me
5770: 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 mory.. **. **
5780: 53 74 61 72 74 20 77 69 74 68 20 63 6f 6d 6d 65 Start with comme
5790: 6e 74 20 61 6e 64 20 64 61 74 65 2e 20 54 68 65 nt and date. The
57a0: 20 6c 61 74 74 65 72 20 69 73 20 63 6f 6e 76 65 latter is conve
57b0: 72 74 65 64 20 74 6f 20 74 68 65 0a 20 20 2a 2a rted to the. **
57c0: 20 70 72 6f 70 65 72 20 66 6f 72 6d 61 74 20 62 proper format b
57d0: 65 66 6f 72 65 20 69 6e 73 65 72 74 69 6f 6e 2e efore insertion.
57e0: 0a 20 20 2a 2f 0a 0a 20 20 62 6c 6f 62 5f 7a 65 . */.. blob_ze
57f0: 72 6f 28 26 6d 61 6e 69 66 65 73 74 29 3b 0a 0a ro(&manifest);..
5800: 20 20 69 66 20 28 21 73 74 72 6c 65 6e 28 7a 43 if (!strlen(zC
5810: 6f 6d 6d 65 6e 74 29 29 20 7b 0a 20 20 20 20 62 omment)) {. b
5820: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e lob_appendf(&man
5830: 69 66 65 73 74 2c 20 22 43 20 25 46 5c 6e 22 2c ifest, "C %F\n",
5840: 20 22 28 6e 6f 20 63 6f 6d 6d 65 6e 74 29 22 29 "(no comment)")
5850: 3b 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 ;. } else {.
5860: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6d blob_appendf(&m
5870: 61 6e 69 66 65 73 74 2c 20 22 43 20 25 46 5c 6e anifest, "C %F\n
5880: 22 2c 20 7a 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 ", zComment);.
5890: 7d 0a 0a 20 20 7a 44 61 74 65 46 6d 74 20 3d 20 }.. zDateFmt =
58a0: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 db_text(0, "SELE
58b0: 43 54 20 64 61 74 65 74 69 6d 65 28 25 51 2c 27 CT datetime(%Q,'
58c0: 75 6e 69 78 65 70 6f 63 68 27 29 22 2c 7a 44 61 unixepoch')",zDa
58d0: 74 65 29 3b 0a 20 20 7a 44 61 74 65 46 6d 74 5b te);. zDateFmt[
58e0: 31 30 5d 20 3d 20 27 54 27 3b 0a 20 20 62 6c 6f 10] = 'T';. blo
58f0: 62 5f 61 70 70 65 6e 64 66 28 26 6d 61 6e 69 66 b_appendf(&manif
5900: 65 73 74 2c 20 22 44 20 25 73 5c 6e 22 2c 20 7a est, "D %s\n", z
5910: 44 61 74 65 46 6d 74 29 3b 0a 20 20 66 72 65 65 DateFmt);. free
5920: 28 7a 44 61 74 65 46 6d 74 29 3b 0a 0a 20 20 2f (zDateFmt);.. /
5930: 2a 0a 20 20 2a 2a 20 46 6f 6c 6c 6f 77 20 77 69 *. ** Follow wi
5940: 74 68 20 61 6c 6c 20 74 68 65 20 63 6f 6c 6c 65 th all the colle
5950: 63 74 65 64 20 66 69 6c 65 73 2c 20 70 72 6f 70 cted files, prop
5960: 65 72 6c 79 20 73 6f 72 74 65 64 2e 20 48 65 72 erly sorted. Her
5970: 65 20 77 65 72 65 0a 20 20 2a 2a 20 61 6c 73 6f e were. ** also
5980: 20 63 6f 6d 70 75 74 65 20 74 68 65 20 63 68 65 compute the che
5990: 63 6b 73 75 6d 20 6f 76 65 72 20 74 68 65 20 66 cksum over the f
59a0: 69 6c 65 73 20 28 70 61 74 68 73 2c 20 73 69 7a iles (paths, siz
59b0: 65 73 2c 0a 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 es,. ** content
59c0: 73 29 2c 20 73 69 6d 69 6c 61 72 20 74 6f 20 77 s), similar to w
59d0: 68 61 74 20 27 76 66 69 6c 65 5f 61 67 67 72 65 hat 'vfile_aggre
59e0: 67 61 74 65 5f 63 68 65 63 6b 73 75 6d 5f 72 65 gate_checksum_re
59f0: 70 6f 73 69 74 6f 72 79 27 0a 20 20 2a 2a 20 64 pository'. ** d
5a00: 6f 65 73 2e 0a 20 20 2a 2f 0a 0a 20 20 6d 64 35 oes.. */.. md5
5a10: 73 75 6d 5f 69 6e 69 74 28 29 3b 0a 20 20 64 62 sum_init();. db
5a20: 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 09 20 20 _prepare(&q,..
5a30: 20 20 20 22 53 45 4c 45 43 54 20 70 61 74 68 6e "SELECT pathn
5a40: 61 6d 65 2c 20 75 75 69 64 2c 20 5f 5f 69 6d 2e ame, uuid, __im.
5a50: 72 69 64 22 0a 09 20 20 20 20 20 22 20 46 52 4f rid".. " FRO
5a60: 4d 20 5f 5f 69 6d 20 4a 4f 49 4e 20 62 6c 6f 62 M __im JOIN blob
5a70: 20 4f 4e 20 5f 5f 69 6d 2e 72 69 64 3d 62 6c 6f ON __im.rid=blo
5a80: 62 2e 72 69 64 22 0a 09 20 20 20 20 20 22 20 4f b.rid".. " O
5a90: 52 44 45 52 20 42 59 20 31 22 29 3b 0a 0a 20 20 RDER BY 1");..
5aa0: 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 while( db_step(&
5ab0: 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 q)==SQLITE_ROW )
5ac0: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b {. char zBuf[
5ad0: 31 30 30 5d 3b 0a 20 20 20 20 42 6c 6f 62 20 66 100];. Blob f
5ae0: 69 6c 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 ile;. const c
5af0: 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f har *zName = db_
5b00: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
5b10: 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 0);. const ch
5b20: 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 63 ar *zUuid = db_c
5b30: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 olumn_text(&q, 1
5b40: 29 3b 0a 20 20 20 20 69 6e 74 20 20 20 20 20 20 );. int
5b50: 20 20 20 7a 52 69 64 20 20 3d 20 64 62 5f 63 6f zRid = db_co
5b60: 6c 75 6d 6e 5f 69 6e 74 20 28 26 71 2c 20 32 29 lumn_int (&q, 2)
5b70: 3b 0a 0a 20 20 20 20 2f 2a 20 45 78 74 65 6e 64 ;.. /* Extend
5b80: 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 2a 2f the manifest */
5b90: 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 . blob_append
5ba0: 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 46 20 f(&manifest, "F
5bb0: 25 46 20 25 73 5c 6e 22 2c 20 7a 4e 61 6d 65 2c %F %s\n", zName,
5bc0: 20 7a 55 75 69 64 29 3b 0a 0a 20 20 20 20 2f 2a zUuid);.. /*
5bd0: 20 55 70 64 61 74 65 20 74 68 65 20 63 68 65 63 Update the chec
5be0: 6b 73 75 6d 20 2a 2f 0a 20 20 20 20 6d 64 35 73 ksum */. md5s
5bf0: 75 6d 5f 73 74 65 70 5f 74 65 78 74 28 7a 4e 61 um_step_text(zNa
5c00: 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 62 6c 6f me, -1);. blo
5c10: 62 5f 7a 65 72 6f 28 26 66 69 6c 65 29 3b 0a 20 b_zero(&file);.
5c20: 20 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 7a content_get(z
5c30: 52 69 64 2c 20 26 66 69 6c 65 29 3b 0a 20 20 20 Rid, &file);.
5c40: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 sprintf(zBuf, "
5c50: 20 25 64 5c 6e 22 2c 20 62 6c 6f 62 5f 73 69 7a %d\n", blob_siz
5c60: 65 28 26 66 69 6c 65 29 29 3b 0a 20 20 20 20 6d e(&file));. m
5c70: 64 35 73 75 6d 5f 73 74 65 70 5f 74 65 78 74 28 d5sum_step_text(
5c80: 7a 42 75 66 2c 20 2d 31 29 3b 0a 20 20 20 20 6d zBuf, -1);. m
5c90: 64 35 73 75 6d 5f 73 74 65 70 5f 62 6c 6f 62 28 d5sum_step_blob(
5ca0: 26 66 69 6c 65 29 3b 0a 20 20 20 20 62 6c 6f 62 &file);. blob
5cb0: 5f 72 65 73 65 74 28 26 66 69 6c 65 29 3b 0a 20 _reset(&file);.
5cc0: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
5cd0: 28 26 71 29 3b 0a 20 20 6d 64 35 73 75 6d 5f 66 (&q);. md5sum_f
5ce0: 69 6e 69 73 68 20 28 26 63 6b 73 75 6d 29 3b 0a inish (&cksum);.
5cf0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 46 6f 6c 6c 6f . /*. ** Follo
5d00: 77 20 77 69 74 68 20 61 6c 6c 20 74 68 65 20 73 w with all the s
5d10: 70 65 63 69 66 69 65 64 20 70 61 72 65 6e 74 73 pecified parents
5d20: 2e 20 57 65 20 6b 6e 6f 77 20 74 68 61 74 20 74 . We know that t
5d30: 68 65 72 65 20 69 73 20 61 74 0a 20 20 2a 2a 20 here is at. **
5d40: 6c 65 61 73 74 20 6f 6e 65 2e 0a 20 20 2a 2f 0a least one.. */.
5d50: 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 . blob_appendf(
5d60: 26 6d 61 6e 69 66 65 73 74 2c 20 22 50 22 29 3b &manifest, "P");
5d70: 0a 20 20 66 6f 72 20 28 69 3d 30 3b 69 3c 7a 50 . for (i=0;i<zP
5d80: 61 72 65 6e 74 43 6f 75 6e 74 3b 69 2b 2b 29 20 arentCount;i++)
5d90: 7b 0a 20 20 20 20 63 68 61 72 2a 20 7a 55 75 69 {. char* zUui
5da0: 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 d = db_text(0, "
5db0: 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d SELECT uuid FROM
5dc0: 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d blob WHERE rid=
5dd0: 25 64 22 2c 20 7a 50 61 72 65 6e 74 73 20 5b 69 %d", zParents [i
5de0: 5d 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 ]);. blob_app
5df0: 65 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 endf(&manifest,
5e00: 22 20 25 73 22 2c 20 7a 55 75 69 64 29 3b 0a 20 " %s", zUuid);.
5e10: 20 20 20 66 72 65 65 28 7a 55 75 69 64 29 3b 0a free(zUuid);.
5e20: 20 20 7d 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e }. blob_appen
5e30: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 5c df(&manifest, "\
5e40: 6e 22 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 n");.. /*. **
5e50: 43 6f 6d 70 6c 65 74 65 20 74 68 65 20 6d 61 6e Complete the man
5e60: 69 66 65 73 74 20 77 69 74 68 20 75 73 65 72 20 ifest with user
5e70: 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 76 61 72 name and the var
5e80: 69 6f 75 73 20 63 68 65 63 6b 73 75 6d 73 0a 20 ious checksums.
5e90: 20 2a 2f 0a 0a 20 20 62 6c 6f 62 5f 61 70 70 65 */.. blob_appe
5ea0: 6e 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 ndf(&manifest, "
5eb0: 52 20 25 62 5c 6e 22 2c 20 26 63 6b 73 75 6d 29 R %b\n", &cksum)
5ec0: 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 ;. blob_appendf
5ed0: 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 55 20 25 (&manifest, "U %
5ee0: 46 5c 6e 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b F\n", g.zLogin);
5ef0: 0a 20 20 6d 64 35 73 75 6d 5f 62 6c 6f 62 28 26 . md5sum_blob(&
5f00: 6d 61 6e 69 66 65 73 74 2c 20 26 6d 63 6b 73 75 manifest, &mcksu
5f10: 6d 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e m);. blob_appen
5f20: 64 66 28 26 6d 61 6e 69 66 65 73 74 2c 20 22 5a df(&manifest, "Z
5f30: 20 25 62 5c 6e 22 2c 20 26 6d 63 6b 73 75 6d 29 %b\n", &mcksum)
5f40: 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 4e 6f 77 ;.. /*. ** Now
5f50: 20 69 6e 73 65 72 74 20 74 68 65 20 6e 65 77 20 insert the new
5f60: 6d 61 6e 69 66 65 73 74 2c 20 74 72 79 20 74 6f manifest, try to
5f70: 20 63 6f 6d 70 72 65 73 73 20 69 74 20 72 65 6c compress it rel
5f80: 61 74 69 76 65 20 74 6f 20 66 69 72 73 74 0a 20 ative to first.
5f90: 20 2a 2a 20 70 61 72 65 6e 74 20 28 70 72 69 6d ** parent (prim
5fa0: 61 72 79 29 2e 0a 20 20 20 2a 2f 0a 0a 20 20 2f ary).. */.. /
5fb0: 2a 62 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66 *blob_write_to_f
5fc0: 69 6c 65 20 28 26 6d 61 6e 69 66 65 73 74 2c 20 ile (&manifest,
5fd0: 22 54 45 53 54 5f 4d 41 4e 49 46 45 53 54 22 29 "TEST_MANIFEST")
5fe0: 3b 2a 2f 0a 0a 20 20 6d 69 64 20 3d 20 63 6f 6e ;*/.. mid = con
5ff0: 74 65 6e 74 5f 70 75 74 28 26 6d 61 6e 69 66 65 tent_put(&manife
6000: 73 74 2c 20 30 2c 20 30 29 3b 0a 20 20 69 66 28 st, 0, 0);. if(
6010: 20 6d 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 66 mid==0 ){. f
6020: 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 74 72 6f ossil_panic("tro
6030: 75 62 6c 65 20 63 6f 6d 6d 69 74 74 69 6e 67 20 uble committing
6040: 6d 61 6e 69 66 65 73 74 3a 20 25 73 22 2c 20 67 manifest: %s", g
6050: 2e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 0a .zErrMsg);. }..
6060: 20 20 63 6f 6e 74 65 6e 74 5f 64 65 6c 74 69 66 content_deltif
6070: 79 28 7a 50 61 72 65 6e 74 73 5b 30 5d 2c 20 6d y(zParents[0], m
6080: 69 64 2c 20 30 29 3b 0a 0a 20 20 2f 2a 20 56 65 id, 0);.. /* Ve
6090: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 72 65 rify that the re
60a0: 70 6f 73 69 74 6f 72 79 20 63 68 65 63 6b 73 75 pository checksu
60b0: 6d 20 6d 61 74 63 68 65 73 20 74 68 65 20 65 78 m matches the ex
60c0: 70 65 63 74 65 64 20 63 68 65 63 6b 73 75 6d 0a pected checksum.
60d0: 20 20 2a 2a 20 63 61 6c 63 75 6c 61 74 65 64 20 ** calculated
60e0: 62 65 66 6f 72 65 20 74 68 65 20 63 68 65 63 6b before the check
60f0: 69 6e 20 73 74 61 72 74 65 64 20 28 61 6e 64 20 in started (and
6100: 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 52 20 stored as the R
6110: 72 65 63 6f 72 64 0a 20 20 2a 2a 20 6f 66 20 74 record. ** of t
6120: 68 65 20 6d 61 6e 69 66 65 73 74 20 66 69 6c 65 he manifest file
6130: 29 2e 0a 20 20 2a 2f 0a 0a 20 20 76 66 69 6c 65 ).. */.. vfile
6140: 5f 61 67 67 72 65 67 61 74 65 5f 63 68 65 63 6b _aggregate_check
6150: 73 75 6d 5f 6d 61 6e 69 66 65 73 74 28 6d 69 64 sum_manifest(mid
6160: 2c 20 26 63 6b 73 75 6d 32 2c 20 26 63 6b 73 75 , &cksum2, &cksu
6170: 6d 31 62 29 3b 0a 20 20 69 66 28 20 62 6c 6f 62 m1b);. if( blob
6180: 5f 63 6f 6d 70 61 72 65 28 26 63 6b 73 75 6d 2c _compare(&cksum,
6190: 20 26 63 6b 73 75 6d 31 62 29 20 29 7b 0a 20 20 &cksum1b) ){.
61a0: 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 fossil_panic("
61b0: 6d 61 6e 69 66 65 73 74 20 63 68 65 63 6b 73 75 manifest checksu
61c0: 6d 20 64 6f 65 73 20 6e 6f 74 20 61 67 72 65 65 m does not agree
61d0: 20 77 69 74 68 20 6d 61 6e 69 66 65 73 74 3a 20 with manifest:
61e0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
61f0: 20 20 20 22 25 62 20 76 65 72 73 75 73 20 25 62 "%b versus %b
6200: 22 2c 20 26 63 6b 73 75 6d 2c 20 26 63 6b 73 75 ", &cksum, &cksu
6210: 6d 31 62 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 m1b);. }. if(
6220: 62 6c 6f 62 5f 63 6f 6d 70 61 72 65 28 26 63 6b blob_compare(&ck
6230: 73 75 6d 2c 20 26 63 6b 73 75 6d 32 29 20 29 7b sum, &cksum2) ){
6240: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 . fossil_pani
6250: 63 28 22 74 72 65 65 20 63 68 65 63 6b 73 75 6d c("tree checksum
6260: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 does not match
6270: 6d 61 6e 69 66 65 73 74 20 61 66 74 65 72 20 63 manifest after c
6280: 6f 6d 6d 69 74 3a 20 22 0a 20 20 20 20 20 20 20 ommit: ".
6290: 20 20 20 20 20 20 20 20 20 20 22 25 62 20 76 65 "%b ve
62a0: 72 73 75 73 20 25 62 22 2c 20 26 63 6b 73 75 6d rsus %b", &cksum
62b0: 2c 20 26 63 6b 73 75 6d 32 29 3b 0a 20 20 7d 0a , &cksum2);. }.
62c0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 41 74 20 6c 61 . /*. ** At la
62d0: 73 74 20 63 6f 6d 6d 69 74 20 61 6c 6c 20 63 68 st commit all ch
62e0: 61 6e 67 65 73 2c 20 61 66 74 65 72 20 67 65 74 anges, after get
62f0: 74 69 6e 67 20 72 69 64 20 6f 66 20 74 68 65 20 ting rid of the
6300: 74 65 6d 70 0a 20 20 2a 2a 20 68 6f 6c 64 65 72 temp. ** holder
6310: 20 66 6f 72 20 74 68 65 20 66 69 6c 65 73 2c 20 for the files,
6320: 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c 6c 6f and release allo
6330: 63 61 74 65 64 20 6d 65 6d 6f 72 79 2e 0a 20 20 cated memory..
6340: 2a 2f 0a 0a 20 20 64 62 5f 6d 75 6c 74 69 5f 65 */.. db_multi_e
6350: 78 65 63 28 22 44 52 4f 50 20 54 41 42 4c 45 20 xec("DROP TABLE
6360: 5f 5f 69 6d 22 29 3b 0a 20 20 7a 4d 69 64 55 75 __im");. zMidUu
6370: 69 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 id = db_text(0,
6380: 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f "SELECT uuid FRO
6390: 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 M blob WHERE rid
63a0: 3d 25 64 22 2c 20 6d 69 64 29 3b 0a 20 20 64 62 =%d", mid);. db
63b0: 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e _end_transaction
63c0: 28 30 29 3b 0a 20 20 66 72 65 65 28 7a 50 61 72 (0);. free(zPar
63d0: 65 6e 74 73 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a ents);.. /*. *
63e0: 2a 20 41 74 20 74 68 65 20 76 65 72 79 20 6c 61 * At the very la
63f0: 73 74 20 69 6e 66 6f 72 6d 20 74 68 65 20 63 61 st inform the ca
6400: 6c 6c 65 72 20 61 62 6f 75 74 20 74 68 65 20 69 ller about the i
6410: 64 20 61 6e 64 20 75 75 69 64 20 6f 66 20 74 68 d and uuid of th
6420: 65 0a 20 20 2a 2a 20 6e 65 77 20 6d 61 6e 69 66 e. ** new manif
6430: 65 73 74 2e 0a 20 20 2a 2f 0a 0a 0a 20 20 70 72 est.. */... pr
6440: 69 6e 74 66 28 22 69 6e 73 65 72 74 65 64 20 61 intf("inserted a
6450: 73 20 72 65 63 6f 72 64 20 25 64 2c 20 25 73 5c s record %d, %s\
6460: 6e 22 2c 20 6d 69 64 2c 20 7a 4d 69 64 55 75 69 n", mid, zMidUui
6470: 64 29 3b 0a 20 20 66 72 65 65 28 7a 4d 69 64 55 d);. free(zMidU
6480: 75 69 64 29 3b 0a 20 20 72 65 74 75 72 6e 3b 0a uid);. return;.
6490: 0a 23 75 6e 64 65 66 20 55 53 41 47 45 0a 7d 0a .#undef USAGE.}.