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 74 contains code t
0380: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 o implement the
0390: 22 69 6e 66 6f 22 20 63 6f 6d 6d 61 6e 64 2e 20 "info" command.
03a0: 20 54 68 65 0a 2a 2a 20 22 69 6e 66 6f 22 20 63 The.** "info" c
03b0: 6f 6d 6d 61 6e 64 20 67 69 76 65 73 20 63 6f 6d ommand gives com
03c0: 6d 61 6e 64 2d 6c 69 6e 65 20 61 63 63 65 73 73 mand-line access
03d0: 20 74 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 to information
03e0: 61 62 6f 75 74 0a 2a 2a 20 74 68 65 20 63 75 72 about.** the cur
03f0: 72 65 6e 74 20 74 72 65 65 2c 20 6f 72 20 61 20 rent tree, or a
0400: 70 61 72 74 69 63 75 6c 61 72 20 61 72 74 69 66 particular artif
0410: 61 63 74 20 6f 72 20 63 68 65 63 6b 2d 69 6e 2e act or check-in.
0420: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f .*/.#include "co
0430: 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 64 65 nfig.h".#include
0440: 20 22 69 6e 66 6f 2e 68 22 0a 23 69 6e 63 6c 75 "info.h".#inclu
0450: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 0a 2f de <assert.h>../
0460: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 74 *.** Return a st
0470: 72 69 6e 67 20 28 69 6e 20 6d 65 6d 6f 72 79 20 ring (in memory
0480: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 obtained from ma
0490: 6c 6c 6f 63 29 20 68 6f 6c 64 69 6e 67 20 61 20 lloc) holding a
04a0: 0a 2a 2a 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 .** comma-separa
04b0: 74 65 64 20 6c 69 73 74 20 6f 66 20 74 61 67 73 ted list of tags
04c0: 20 74 68 61 74 20 61 70 70 6c 79 20 74 6f 20 63 that apply to c
04d0: 68 65 63 6b 2d 69 6e 20 77 69 74 68 20 0a 2a 2a heck-in with .**
04e0: 20 72 65 63 6f 72 64 2d 69 64 20 72 69 64 2e 0a record-id rid..
04f0: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 4e 55 4c **.** Return NUL
0500: 4c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e L if there are n
0510: 6f 20 73 75 63 68 20 74 61 67 73 2e 0a 2a 2f 0a o such tags..*/.
0520: 63 68 61 72 20 2a 69 6e 66 6f 5f 74 61 67 73 5f char *info_tags_
0530: 6f 66 5f 63 68 65 63 6b 69 6e 28 69 6e 74 20 72 of_checkin(int r
0540: 69 64 29 7b 0a 20 20 63 68 61 72 20 2a 7a 54 61 id){. char *zTa
0550: 67 73 3b 0a 20 20 7a 54 61 67 73 20 3d 20 64 62 gs;. zTags = db
0560: 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 _text(0, "SELECT
0570: 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 73 75 group_concat(su
0580: 62 73 74 72 28 74 61 67 6e 61 6d 65 2c 20 35 29 bstr(tagname, 5)
0590: 2c 20 27 2c 20 27 29 22 0a 20 20 20 20 20 20 20 , ', ')".
05a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 "
05b0: 20 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 FROM tagxref, t
05c0: 61 67 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 ag".
05d0: 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 " WHERE
05e0: 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 64 20 tagxref.rid=%d
05f0: 41 4e 44 20 74 61 67 78 72 65 66 2e 74 61 67 74 AND tagxref.tagt
0600: 79 70 65 3e 30 22 0a 20 20 20 20 20 20 20 20 20 ype>0".
0610: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 20 "
0620: 41 4e 44 20 74 61 67 2e 74 61 67 69 64 3d 74 61 AND tag.tagid=ta
0630: 67 78 72 65 66 2e 74 61 67 69 64 22 0a 20 20 20 gxref.tagid".
0640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0650: 20 20 22 20 20 20 41 4e 44 20 74 61 67 2e 74 61 " AND tag.ta
0660: 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 79 6d 2d gname GLOB 'sym-
0670: 2a 27 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 *'",.
0680: 20 20 20 20 20 20 20 20 20 20 72 69 64 29 3b 0a rid);.
0690: 20 20 72 65 74 75 72 6e 20 7a 54 61 67 73 3b 0a return zTags;.
06a0: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 }.../*.** Print
06b0: 63 6f 6d 6d 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 common informati
06c0: 6f 6e 20 61 62 6f 75 74 20 61 20 70 61 72 74 69 on about a parti
06d0: 63 75 6c 61 72 20 72 65 63 6f 72 64 2e 0a 2a 2a cular record..**
06e0: 0a 2a 2a 20 20 20 20 20 2a 20 20 54 68 65 20 55 .** * The U
06f0: 55 49 44 0a 2a 2a 20 20 20 20 20 2a 20 20 54 68 UID.** * Th
0700: 65 20 72 65 63 6f 72 64 20 49 44 0a 2a 2a 20 20 e record ID.**
0710: 20 20 20 2a 20 20 6d 74 69 6d 65 20 61 6e 64 20 * mtime and
0720: 63 74 69 6d 65 0a 2a 2a 20 20 20 20 20 2a 20 20 ctime.** *
0730: 77 68 6f 20 73 69 67 6e 65 64 20 69 74 0a 2a 2f who signed it.*/
0740: 0a 76 6f 69 64 20 73 68 6f 77 5f 63 6f 6d 6d 6f .void show_commo
0750: 6e 5f 69 6e 66 6f 28 69 6e 74 20 72 69 64 2c 20 n_info(int rid,
0760: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 const char *zUui
0770: 64 4e 61 6d 65 2c 20 69 6e 74 20 73 68 6f 77 43 dName, int showC
0780: 6f 6d 6d 65 6e 74 29 7b 0a 20 20 53 74 6d 74 20 omment){. Stmt
0790: 71 3b 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6d 6d q;. char *zComm
07a0: 65 6e 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 ent = 0;. char
07b0: 2a 7a 54 61 67 73 3b 0a 20 20 63 68 61 72 20 2a *zTags;. char *
07c0: 7a 44 61 74 65 3b 0a 20 20 63 68 61 72 20 2a 7a zDate;. char *z
07d0: 55 75 69 64 3b 0a 20 20 7a 55 75 69 64 20 3d 20 Uuid;. zUuid =
07e0: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 db_text(0, "SELE
07f0: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f CT uuid FROM blo
0800: 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c b WHERE rid=%d",
0810: 20 72 69 64 29 3b 0a 20 20 69 66 28 20 7a 55 75 rid);. if( zUu
0820: 69 64 20 29 7b 0a 20 20 20 20 7a 44 61 74 65 20 id ){. zDate
0830: 3d 20 64 62 5f 74 65 78 74 28 22 22 2c 20 0a 20 = db_text("", .
0840: 20 20 20 20 20 22 53 45 4c 45 43 54 20 64 61 74 "SELECT dat
0850: 65 74 69 6d 65 28 6d 74 69 6d 65 29 20 7c 7c 20 etime(mtime) ||
0860: 27 20 55 54 43 27 20 46 52 4f 4d 20 65 76 65 6e ' UTC' FROM even
0870: 74 20 57 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 t WHERE objid=%d
0880: 22 2c 0a 20 20 20 20 20 20 72 69 64 0a 20 20 20 ",. rid.
0890: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 2f 2a 20 );. /*
08a0: 30 31 32 33 34 35 36 37 38 39 30 31 32 33 20 2a 01234567890123 *
08b0: 2f 0a 20 20 20 20 70 72 69 6e 74 66 28 22 25 2d /. printf("%-
08c0: 31 33 73 20 25 73 20 25 73 5c 6e 22 2c 20 7a 55 13s %s %s\n", zU
08d0: 75 69 64 4e 61 6d 65 2c 20 7a 55 75 69 64 2c 20 uidName, zUuid,
08e0: 7a 44 61 74 65 29 3b 0a 20 20 20 20 66 72 65 65 zDate);. free
08f0: 28 7a 55 75 69 64 29 3b 0a 20 20 20 20 66 72 65 (zUuid);. fre
0900: 65 28 7a 44 61 74 65 29 3b 0a 20 20 7d 0a 20 20 e(zDate);. }.
0910: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 22 db_prepare(&q, "
0920: 53 45 4c 45 43 54 20 75 75 69 64 2c 20 70 69 64 SELECT uuid, pid
0930: 20 46 52 4f 4d 20 70 6c 69 6e 6b 20 4a 4f 49 4e FROM plink JOIN
0940: 20 62 6c 6f 62 20 4f 4e 20 70 69 64 3d 72 69 64 blob ON pid=rid
0950: 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
0960: 20 20 20 20 22 20 57 48 45 52 45 20 63 69 64 3d " WHERE cid=
0970: 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 77 68 69 %d", rid);. whi
0980: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d le( db_step(&q)=
0990: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
09a0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
09b0: 55 75 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e Uuid = db_column
09c0: 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 _text(&q, 0);.
09d0: 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 74 65 78 zDate = db_tex
09e0: 74 28 22 22 2c 20 0a 20 20 20 20 20 20 22 53 45 t("", . "SE
09f0: 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 6d 74 LECT datetime(mt
0a00: 69 6d 65 29 20 7c 7c 20 27 20 55 54 43 27 20 46 ime) || ' UTC' F
0a10: 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 45 20 ROM event WHERE
0a20: 6f 62 6a 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 objid=%d",.
0a30: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 db_column_int(&
0a40: 71 2c 20 31 29 0a 20 20 20 20 29 3b 0a 20 20 20 q, 1). );.
0a50: 20 70 72 69 6e 74 66 28 22 70 61 72 65 6e 74 3a printf("parent:
0a60: 20 20 20 20 20 20 20 25 73 20 25 73 5c 6e 22 2c %s %s\n",
0a70: 20 7a 55 75 69 64 2c 20 7a 44 61 74 65 29 3b 0a zUuid, zDate);.
0a80: 20 20 20 20 66 72 65 65 28 7a 44 61 74 65 29 3b free(zDate);
0a90: 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 . }. db_finali
0aa0: 7a 65 28 26 71 29 3b 0a 20 20 64 62 5f 70 72 65 ze(&q);. db_pre
0ab0: 70 61 72 65 28 26 71 2c 20 22 53 45 4c 45 43 54 pare(&q, "SELECT
0ac0: 20 75 75 69 64 2c 20 63 69 64 20 46 52 4f 4d 20 uuid, cid FROM
0ad0: 70 6c 69 6e 6b 20 4a 4f 49 4e 20 62 6c 6f 62 20 plink JOIN blob
0ae0: 4f 4e 20 63 69 64 3d 72 69 64 20 22 0a 20 20 20 ON cid=rid ".
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 "
0b00: 57 48 45 52 45 20 70 69 64 3d 25 64 22 2c 20 72 WHERE pid=%d", r
0b10: 69 64 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 id);. while( db
0b20: 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 _step(&q)==SQLIT
0b30: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e E_ROW ){. con
0b40: 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 20 3d st char *zUuid =
0b50: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
0b60: 26 71 2c 20 30 29 3b 0a 20 20 20 20 7a 44 61 74 &q, 0);. zDat
0b70: 65 20 3d 20 64 62 5f 74 65 78 74 28 22 22 2c 20 e = db_text("",
0b80: 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 64 . "SELECT d
0b90: 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 20 7c atetime(mtime) |
0ba0: 7c 20 27 20 55 54 43 27 20 46 52 4f 4d 20 65 76 | ' UTC' FROM ev
0bb0: 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 64 3d ent WHERE objid=
0bc0: 25 64 22 2c 0a 20 20 20 20 20 20 64 62 5f 63 6f %d",. db_co
0bd0: 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 31 29 0a lumn_int(&q, 1).
0be0: 20 20 20 20 29 3b 0a 20 20 20 20 70 72 69 6e 74 );. print
0bf0: 66 28 22 63 68 69 6c 64 3a 20 20 20 20 20 20 20 f("child:
0c00: 20 25 73 20 25 73 5c 6e 22 2c 20 7a 55 75 69 64 %s %s\n", zUuid
0c10: 2c 20 7a 44 61 74 65 29 3b 0a 20 20 20 20 66 72 , zDate);. fr
0c20: 65 65 28 7a 44 61 74 65 29 3b 0a 20 20 7d 0a 20 ee(zDate);. }.
0c30: 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 db_finalize(&q)
0c40: 3b 0a 20 20 7a 54 61 67 73 20 3d 20 69 6e 66 6f ;. zTags = info
0c50: 5f 74 61 67 73 5f 6f 66 5f 63 68 65 63 6b 69 6e _tags_of_checkin
0c60: 28 72 69 64 29 3b 0a 20 20 69 66 28 20 7a 54 61 (rid);. if( zTa
0c70: 67 73 20 26 26 20 7a 54 61 67 73 5b 30 5d 20 29 gs && zTags[0] )
0c80: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 74 61 {. printf("ta
0c90: 67 73 3a 20 20 20 20 20 20 20 20 20 25 73 5c 6e gs: %s\n
0ca0: 22 2c 20 7a 54 61 67 73 29 3b 0a 20 20 7d 0a 20 ", zTags);. }.
0cb0: 20 66 72 65 65 28 7a 54 61 67 73 29 3b 0a 20 20 free(zTags);.
0cc0: 69 66 28 20 7a 43 6f 6d 6d 65 6e 74 20 29 7b 0a if( zComment ){.
0cd0: 20 20 20 20 70 72 69 6e 74 66 28 22 63 6f 6d 6d printf("comm
0ce0: 65 6e 74 3a 5c 6e 25 73 5c 6e 22 2c 20 7a 43 6f ent:\n%s\n", zCo
0cf0: 6d 6d 65 6e 74 29 3b 0a 20 20 20 20 66 72 65 65 mment);. free
0d00: 28 7a 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 7d 0a (zComment);. }.
0d10: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e }.../*.** COMMAN
0d20: 44 3a 20 69 6e 66 6f 0a 2a 2a 0a 2a 2a 20 55 73 D: info.**.** Us
0d30: 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 69 6e 66 age: %fossil inf
0d40: 6f 20 3f 41 52 54 49 46 41 43 54 2d 49 44 7c 46 o ?ARTIFACT-ID|F
0d50: 49 4c 45 4e 41 4d 45 3f 0a 2a 2a 0a 2a 2a 20 57 ILENAME?.**.** W
0d60: 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 ith no arguments
0d70: 2c 20 70 72 6f 76 69 64 65 20 69 6e 66 6f 72 6d , provide inform
0d80: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 ation about the
0d90: 63 75 72 72 65 6e 74 20 74 72 65 65 2e 0a 2a 2a current tree..**
0da0: 20 49 66 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 If an argument
0db0: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 70 72 is specified, pr
0dc0: 6f 76 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f ovide informatio
0dd0: 6e 20 61 62 6f 75 74 20 74 68 65 20 6f 62 6a 65 n about the obje
0de0: 63 74 0a 2a 2a 20 69 6e 20 74 68 65 20 72 65 73 ct.** in the res
0df0: 70 6f 73 69 74 6f 72 79 20 6f 66 20 74 68 65 20 pository of the
0e00: 63 75 72 72 65 6e 74 20 74 72 65 65 20 74 68 61 current tree tha
0e10: 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 72 t the argument r
0e20: 65 66 65 72 73 0a 2a 2a 20 74 6f 2e 20 20 4f 72 efers.** to. Or
0e30: 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 if the argument
0e40: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 is the name of
0e50: 61 20 72 65 70 6f 73 69 74 6f 72 79 2c 20 73 68 a repository, sh
0e60: 6f 77 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f ow.** informatio
0e70: 6e 20 61 62 6f 75 74 20 74 68 61 74 20 72 65 70 n about that rep
0e80: 6f 73 69 74 6f 72 79 2e 0a 2a 2f 0a 76 6f 69 64 ository..*/.void
0e90: 20 69 6e 66 6f 5f 63 6d 64 28 76 6f 69 64 29 7b info_cmd(void){
0ea0: 0a 20 20 69 36 34 20 66 73 69 7a 65 3b 0a 20 20 . i64 fsize;.
0eb0: 69 66 28 20 67 2e 61 72 67 63 21 3d 32 20 26 26 if( g.argc!=2 &&
0ec0: 20 67 2e 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 g.argc!=3 ){.
0ed0: 20 20 75 73 61 67 65 28 22 3f 46 49 4c 45 4e 41 usage("?FILENA
0ee0: 4d 45 7c 41 52 54 49 46 41 43 54 2d 49 44 3f 22 ME|ARTIFACT-ID?"
0ef0: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 2e 61 );. }. if( g.a
0f00: 72 67 63 3d 3d 33 20 26 26 20 28 66 73 69 7a 65 rgc==3 && (fsize
0f10: 20 3d 20 66 69 6c 65 5f 73 69 7a 65 28 67 2e 61 = file_size(g.a
0f20: 72 67 76 5b 32 5d 29 29 3e 30 20 26 26 20 28 66 rgv[2]))>0 && (f
0f30: 73 69 7a 65 26 30 78 31 66 66 29 3d 3d 30 20 29 size&0x1ff)==0 )
0f40: 7b 0a 20 20 20 20 64 62 5f 6f 70 65 6e 5f 63 6f {. db_open_co
0f50: 6e 66 69 67 28 30 29 3b 0a 20 20 20 20 64 62 5f nfig(0);. db_
0f60: 72 65 63 6f 72 64 5f 72 65 70 6f 73 69 74 6f 72 record_repositor
0f70: 79 5f 66 69 6c 65 6e 61 6d 65 28 67 2e 61 72 67 y_filename(g.arg
0f80: 76 5b 32 5d 29 3b 0a 20 20 20 20 64 62 5f 6f 70 v[2]);. db_op
0f90: 65 6e 5f 72 65 70 6f 73 69 74 6f 72 79 28 67 2e en_repository(g.
0fa0: 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 70 72 argv[2]);. pr
0fb0: 69 6e 74 66 28 22 70 72 6f 6a 65 63 74 2d 6e 61 intf("project-na
0fc0: 6d 65 3a 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 me: %s\n", db_ge
0fd0: 74 28 22 70 72 6f 6a 65 63 74 2d 6e 61 6d 65 22 t("project-name"
0fe0: 2c 20 22 3c 75 6e 6e 61 6d 65 64 3e 22 29 29 3b , "<unnamed>"));
0ff0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 70 72 6f . printf("pro
1000: 6a 65 63 74 2d 63 6f 64 65 3a 20 25 73 5c 6e 22 ject-code: %s\n"
1010: 2c 20 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 , db_get("projec
1020: 74 2d 63 6f 64 65 22 2c 20 22 3c 6e 6f 6e 65 3e t-code", "<none>
1030: 22 29 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 "));. printf(
1040: 22 73 65 72 76 65 72 2d 63 6f 64 65 3a 20 20 25 "server-code: %
1050: 73 5c 6e 22 2c 20 64 62 5f 67 65 74 28 22 73 65 s\n", db_get("se
1060: 72 76 65 72 2d 63 6f 64 65 22 2c 20 22 3c 6e 6f rver-code", "<no
1070: 6e 65 3e 22 29 29 3b 0a 20 20 20 20 72 65 74 75 ne>"));. retu
1080: 72 6e 3b 0a 20 20 7d 0a 20 20 64 62 5f 6d 75 73 rn;. }. db_mus
1090: 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65 65 t_be_within_tree
10a0: 28 29 3b 0a 20 20 69 66 28 20 67 2e 61 72 67 63 ();. if( g.argc
10b0: 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e 74 20 76 ==2 ){. int v
10c0: 69 64 3b 0a 20 20 20 20 20 20 20 20 20 2f 2a 20 id;. /*
10d0: 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 20 012345678901234
10e0: 2a 2f 0a 20 20 20 20 64 62 5f 72 65 63 6f 72 64 */. db_record
10f0: 5f 72 65 70 6f 73 69 74 6f 72 79 5f 66 69 6c 65 _repository_file
1100: 6e 61 6d 65 28 30 29 3b 0a 20 20 20 20 70 72 69 name(0);. pri
1110: 6e 74 66 28 22 70 72 6f 6a 65 63 74 2d 6e 61 6d ntf("project-nam
1120: 65 3a 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 e: %s\n", db_get
1130: 28 22 70 72 6f 6a 65 63 74 2d 6e 61 6d 65 22 2c ("project-name",
1140: 20 22 3c 75 6e 6e 61 6d 65 64 3e 22 29 29 3b 0a "<unnamed>"));.
1150: 20 20 20 20 70 72 69 6e 74 66 28 22 72 65 70 6f printf("repo
1160: 73 69 74 6f 72 79 3a 20 20 20 25 73 5c 6e 22 2c sitory: %s\n",
1170: 20 64 62 5f 6c 67 65 74 28 22 72 65 70 6f 73 69 db_lget("reposi
1180: 74 6f 72 79 22 2c 20 22 22 29 29 3b 0a 20 20 20 tory", ""));.
1190: 20 70 72 69 6e 74 66 28 22 6c 6f 63 61 6c 2d 72 printf("local-r
11a0: 6f 6f 74 3a 20 20 20 25 73 5c 6e 22 2c 20 67 2e oot: %s\n", g.
11b0: 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a 23 69 66 zLocalRoot);.#if
11c0: 64 65 66 20 5f 5f 4d 49 4e 47 57 33 32 5f 5f 0a def __MINGW32__.
11d0: 20 20 20 20 69 66 28 20 67 2e 7a 48 6f 6d 65 20 if( g.zHome
11e0: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 ){. printf(
11f0: 22 75 73 65 72 2d 68 6f 6d 65 3a 20 20 3a 20 25 "user-home: : %
1200: 73 5c 6e 22 2c 20 67 2e 7a 48 6f 6d 65 29 3b 0a s\n", g.zHome);.
1210: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 }.#endif.
1220: 20 70 72 69 6e 74 66 28 22 70 72 6f 6a 65 63 74 printf("project
1230: 2d 63 6f 64 65 3a 20 25 73 5c 6e 22 2c 20 64 62 -code: %s\n", db
1240: 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 63 6f _get("project-co
1250: 64 65 22 2c 20 22 22 29 29 3b 0a 20 20 20 20 70 de", ""));. p
1260: 72 69 6e 74 66 28 22 73 65 72 76 65 72 2d 63 6f rintf("server-co
1270: 64 65 3a 20 20 25 73 5c 6e 22 2c 20 64 62 5f 67 de: %s\n", db_g
1280: 65 74 28 22 73 65 72 76 65 72 2d 63 6f 64 65 22 et("server-code"
1290: 2c 20 22 22 29 29 3b 0a 20 20 20 20 76 69 64 20 , ""));. vid
12a0: 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74 28 22 63 = db_lget_int("c
12b0: 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b 0a 20 20 heckout", 0);.
12c0: 20 20 69 66 28 20 76 69 64 3d 3d 30 20 29 7b 0a if( vid==0 ){.
12d0: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 63 68 printf("ch
12e0: 65 63 6b 6f 75 74 3a 20 20 20 20 20 6e 69 6c 5c eckout: nil\
12f0: 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a n");. }else{.
1300: 20 20 20 20 20 20 73 68 6f 77 5f 63 6f 6d 6d 6f show_commo
1310: 6e 5f 69 6e 66 6f 28 76 69 64 2c 20 22 63 68 65 n_info(vid, "che
1320: 63 6b 6f 75 74 3a 22 2c 20 31 29 3b 0a 20 20 20 ckout:", 1);.
1330: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 }. }else{.
1340: 69 6e 74 20 72 69 64 3b 0a 20 20 20 20 72 69 64 int rid;. rid
1350: 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 67 = name_to_rid(g
1360: 2e 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 69 .argv[2]);. i
1370: 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20 20 20 f( rid==0 ){.
1380: 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 fossil_panic(
1390: 22 6e 6f 20 73 75 63 68 20 6f 62 6a 65 63 74 3a "no such object:
13a0: 20 25 73 5c 6e 22 2c 20 67 2e 61 72 67 76 5b 32 %s\n", g.argv[2
13b0: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 68 ]);. }. sh
13c0: 6f 77 5f 63 6f 6d 6d 6f 6e 5f 69 6e 66 6f 28 72 ow_common_info(r
13d0: 69 64 2c 20 22 75 75 69 64 3a 22 2c 20 31 29 3b id, "uuid:", 1);
13e0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 68 . }.}../*.** Sh
13f0: 6f 77 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 ow information a
1400: 62 6f 75 74 20 61 6c 6c 20 74 61 67 73 20 6f 6e bout all tags on
1410: 20 61 20 67 69 76 65 6e 20 6e 6f 64 65 2e 0a 2a a given node..*
1420: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 68 /.static void sh
1430: 6f 77 54 61 67 73 28 69 6e 74 20 72 69 64 2c 20 owTags(int rid,
1440: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 6f 74 const char *zNot
1450: 47 6c 6f 62 29 7b 0a 20 20 53 74 6d 74 20 71 3b Glob){. Stmt q;
1460: 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a . int cnt = 0;.
1470: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c db_prepare(&q,
1480: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 74 61 67 . "SELECT tag
1490: 2e 74 61 67 69 64 2c 20 74 61 67 6e 61 6d 65 2c .tagid, tagname,
14a0: 20 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 28 ". " (
14b0: 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d SELECT uuid FROM
14c0: 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d blob WHERE rid=
14d0: 74 61 67 78 72 65 66 2e 73 72 63 69 64 20 41 4e tagxref.srcid AN
14e0: 44 20 72 69 64 21 3d 25 64 29 2c 22 0a 20 20 20 D rid!=%d),".
14f0: 20 22 20 20 20 20 20 20 20 76 61 6c 75 65 2c 20 " value,
1500: 64 61 74 65 74 69 6d 65 28 74 61 67 78 72 65 66 datetime(tagxref
1510: 2e 6d 74 69 6d 65 2c 27 6c 6f 63 61 6c 74 69 6d .mtime,'localtim
1520: 65 27 29 2c 20 74 61 67 74 79 70 65 2c 22 0a 20 e'), tagtype,".
1530: 20 20 20 22 20 20 20 20 20 20 20 28 53 45 4c 45 " (SELE
1540: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f CT uuid FROM blo
1550: 62 20 57 48 45 52 45 20 72 69 64 3d 74 61 67 78 b WHERE rid=tagx
1560: 72 65 66 2e 6f 72 69 67 69 64 20 41 4e 44 20 72 ref.origid AND r
1570: 69 64 21 3d 25 64 29 22 0a 20 20 20 20 22 20 20 id!=%d)". "
1580: 46 52 4f 4d 20 74 61 67 78 72 65 66 20 4a 4f 49 FROM tagxref JOI
1590: 4e 20 74 61 67 20 4f 4e 20 74 61 67 78 72 65 66 N tag ON tagxref
15a0: 2e 74 61 67 69 64 3d 74 61 67 2e 74 61 67 69 64 .tagid=tag.tagid
15b0: 22 0a 20 20 20 20 22 20 57 48 45 52 45 20 74 61 ". " WHERE ta
15c0: 67 78 72 65 66 2e 72 69 64 3d 25 64 20 41 4e 44 gxref.rid=%d AND
15d0: 20 74 61 67 6e 61 6d 65 20 4e 4f 54 20 47 4c 4f tagname NOT GLO
15e0: 42 20 27 25 73 27 22 0a 20 20 20 20 22 20 4f 52 B '%s'". " OR
15f0: 44 45 52 20 42 59 20 74 61 67 6e 61 6d 65 22 2c DER BY tagname",
1600: 20 72 69 64 2c 20 72 69 64 2c 20 72 69 64 2c 20 rid, rid, rid,
1610: 7a 4e 6f 74 47 6c 6f 62 0a 20 20 29 3b 0a 20 20 zNotGlob. );.
1620: 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 while( db_step(&
1630: 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 q)==SQLITE_ROW )
1640: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 {. const char
1650: 20 2a 7a 54 61 67 6e 61 6d 65 20 3d 20 64 62 5f *zTagname = db_
1660: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
1670: 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 1);. const ch
1680: 61 72 20 2a 7a 53 72 63 55 75 69 64 20 3d 20 64 ar *zSrcUuid = d
1690: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
16a0: 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 2);. const
16b0: 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 3d 20 64 char *zValue = d
16c0: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
16d0: 2c 20 33 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 3);. const
16e0: 63 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 char *zDate = db
16f0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
1700: 20 34 29 3b 0a 20 20 20 20 69 6e 74 20 74 61 67 4);. int tag
1710: 74 79 70 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e type = db_column
1720: 5f 69 6e 74 28 26 71 2c 20 35 29 3b 0a 20 20 20 _int(&q, 5);.
1730: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 72 const char *zOr
1740: 69 67 55 75 69 64 20 3d 20 64 62 5f 63 6f 6c 75 igUuid = db_colu
1750: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 36 29 3b 0a mn_text(&q, 6);.
1760: 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 69 cnt++;. i
1770: 66 28 20 63 6e 74 3d 3d 31 20 29 7b 0a 20 20 20 f( cnt==1 ){.
1780: 20 20 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d @ <div class=
1790: 22 73 65 63 74 69 6f 6e 22 3e 54 61 67 73 20 41 "section">Tags A
17a0: 6e 64 20 50 72 6f 70 65 72 74 69 65 73 3c 2f 64 nd Properties</d
17b0: 69 76 3e 0a 20 20 20 20 20 20 40 20 3c 75 6c 3e iv>. @ <ul>
17c0: 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 6c 69 . }. @ <li
17d0: 3e 0a 20 20 20 20 69 66 28 20 74 61 67 74 79 70 >. if( tagtyp
17e0: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 40 20 e==0 ){. @
17f0: 3c 62 3e 3c 73 3e 25 68 28 7a 54 61 67 6e 61 6d <b><s>%h(zTagnam
1800: 65 29 3c 2f 73 3e 3c 2f 62 3e 20 63 61 6e 63 65 e)</s></b> cance
1810: 6c 6c 65 64 0a 20 20 20 20 7d 65 6c 73 65 20 69 lled. }else i
1820: 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a 20 20 20 f( zValue ){.
1830: 20 20 20 40 20 3c 62 3e 25 68 28 7a 54 61 67 6e @ <b>%h(zTagn
1840: 61 6d 65 29 3d 25 68 28 7a 56 61 6c 75 65 29 3c ame)=%h(zValue)<
1850: 2f 62 3e 0a 20 20 20 20 7d 65 6c 73 65 20 7b 0a /b>. }else {.
1860: 20 20 20 20 20 20 40 20 3c 62 3e 25 68 28 7a 54 @ <b>%h(zT
1870: 61 67 6e 61 6d 65 29 3c 2f 62 3e 0a 20 20 20 20 agname)</b>.
1880: 7d 0a 20 20 20 20 69 66 28 20 74 61 67 74 79 70 }. if( tagtyp
1890: 65 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 69 66 e==2 ){. if
18a0: 28 20 7a 4f 72 69 67 55 75 69 64 20 26 26 20 7a ( zOrigUuid && z
18b0: 4f 72 69 67 55 75 69 64 5b 30 5d 20 29 7b 0a 20 OrigUuid[0] ){.
18c0: 20 20 20 20 20 20 20 40 20 69 6e 68 65 72 69 74 @ inherit
18d0: 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 ed from.
18e0: 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 75 69 hyperlink_to_uui
18f0: 64 28 7a 4f 72 69 67 55 75 69 64 29 3b 0a 20 20 d(zOrigUuid);.
1900: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
1910: 20 20 20 40 20 70 72 6f 70 61 67 61 74 65 73 20 @ propagates
1920: 74 6f 20 64 65 73 63 65 6e 64 61 6e 74 73 0a 20 to descendants.
1930: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 }. }.
1940: 20 69 66 28 20 7a 53 72 63 55 75 69 64 20 26 26 if( zSrcUuid &&
1950: 20 7a 53 72 63 55 75 69 64 5b 30 5d 20 29 7b 0a zSrcUuid[0] ){.
1960: 20 20 20 20 20 20 69 66 28 20 74 61 67 74 79 70 if( tagtyp
1970: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 e==0 ){.
1980: 40 20 62 79 0a 20 20 20 20 20 20 7d 65 6c 73 65 @ by. }else
1990: 7b 0a 20 20 20 20 20 20 20 20 40 20 61 64 64 65 {. @ adde
19a0: 64 20 62 79 0a 20 20 20 20 20 20 7d 0a 20 20 20 d by. }.
19b0: 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f hyperlink_to_
19c0: 75 75 69 64 28 7a 53 72 63 55 75 69 64 29 3b 0a uuid(zSrcUuid);.
19d0: 20 20 20 20 20 20 40 20 6f 6e 0a 20 20 20 20 20 @ on.
19e0: 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 hyperlink_to_da
19f0: 74 65 28 7a 44 61 74 65 2c 30 29 3b 0a 20 20 20 te(zDate,0);.
1a00: 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 }. }. db_fina
1a10: 6c 69 7a 65 28 26 71 29 3b 0a 20 20 69 66 28 20 lize(&q);. if(
1a20: 63 6e 74 20 29 7b 0a 20 20 20 20 40 20 3c 2f 75 cnt ){. @ </u
1a30: 6c 3e 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a l>. }.}.../*.**
1a40: 20 41 70 70 65 6e 64 20 74 68 65 20 64 69 66 66 Append the diff
1a50: 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 erence between t
1a60: 77 6f 20 52 49 44 73 20 74 6f 20 74 68 65 20 6f wo RIDs to the o
1a70: 75 74 70 75 74 0a 2a 2f 0a 73 74 61 74 69 63 20 utput.*/.static
1a80: 76 6f 69 64 20 61 70 70 65 6e 64 5f 64 69 66 66 void append_diff
1a90: 28 69 6e 74 20 66 72 6f 6d 69 64 2c 20 69 6e 74 (int fromid, int
1aa0: 20 74 6f 69 64 29 7b 0a 20 20 42 6c 6f 62 20 66 toid){. Blob f
1ab0: 72 6f 6d 2c 20 74 6f 2c 20 6f 75 74 3b 0a 20 20 rom, to, out;.
1ac0: 63 6f 6e 74 65 6e 74 5f 67 65 74 28 66 72 6f 6d content_get(from
1ad0: 69 64 2c 20 26 66 72 6f 6d 29 3b 0a 20 20 63 6f id, &from);. co
1ae0: 6e 74 65 6e 74 5f 67 65 74 28 74 6f 69 64 2c 20 ntent_get(toid,
1af0: 26 74 6f 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65 72 &to);. blob_zer
1b00: 6f 28 26 6f 75 74 29 3b 0a 20 20 74 65 78 74 5f o(&out);. text_
1b10: 64 69 66 66 28 26 66 72 6f 6d 2c 20 26 74 6f 2c diff(&from, &to,
1b20: 20 26 6f 75 74 2c 20 35 29 3b 0a 20 20 40 20 25 &out, 5);. @ %
1b30: 68 28 62 6c 6f 62 5f 73 74 72 28 26 6f 75 74 29 h(blob_str(&out)
1b40: 29 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 ). blob_reset(&
1b50: 66 72 6f 6d 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 from);. blob_re
1b60: 73 65 74 28 26 74 6f 29 3b 0a 20 20 62 6c 6f 62 set(&to);. blob
1b70: 5f 72 65 73 65 74 28 26 6f 75 74 29 3b 20 20 0a _reset(&out); .
1b80: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 }.../*.** WEBPAG
1b90: 45 3a 20 76 69 6e 66 6f 0a 2a 2a 20 57 45 42 50 E: vinfo.** WEBP
1ba0: 41 47 45 3a 20 63 69 0a 2a 2a 20 55 52 4c 3a 20 AGE: ci.** URL:
1bb0: 20 2f 63 69 3f 6e 61 6d 65 3d 52 49 44 7c 41 52 /ci?name=RID|AR
1bc0: 54 49 46 41 43 54 49 44 0a 2a 2a 0a 2a 2a 20 44 TIFACTID.**.** D
1bd0: 69 73 70 6c 61 79 20 69 6e 66 6f 72 6d 61 74 69 isplay informati
1be0: 6f 6e 20 61 62 6f 75 74 20 61 20 70 61 72 74 69 on about a parti
1bf0: 63 75 6c 61 72 20 63 68 65 63 6b 2d 69 6e 2e 20 cular check-in.
1c00: 0a 2a 2a 0a 2a 2a 20 57 65 20 61 6c 73 6f 20 6a .**.** We also j
1c10: 75 6d 70 20 68 65 72 65 20 66 72 6f 6d 20 2f 69 ump here from /i
1c20: 6e 66 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 20 nfo if the name
1c30: 69 73 20 61 20 76 65 72 73 69 6f 6e 2e 0a 2a 2a is a version..**
1c40: 0a 2a 2a 20 49 66 20 74 68 65 20 2f 63 69 20 70 .** If the /ci p
1c50: 61 67 65 20 69 73 20 75 73 65 64 20 28 69 6e 73 age is used (ins
1c60: 74 65 61 64 20 6f 66 20 2f 76 69 6e 66 6f 20 6f tead of /vinfo o
1c70: 72 20 2f 69 6e 66 6f 29 20 74 68 65 6e 20 74 68 r /info) then th
1c80: 65 0a 2a 2a 20 64 65 66 61 75 6c 74 20 62 65 68 e.** default beh
1c90: 61 76 69 6f 72 20 69 73 20 74 6f 20 73 68 6f 77 avior is to show
1ca0: 20 75 6e 69 66 69 65 64 20 64 69 66 66 73 20 6f unified diffs o
1cb0: 66 20 61 6c 6c 20 66 69 6c 65 20 63 68 61 6e 67 f all file chang
1cc0: 65 73 2e 0a 2a 2a 20 57 69 74 68 20 2f 76 69 6e es..** With /vin
1cd0: 66 6f 20 61 6e 64 20 2f 69 6e 66 6f 2c 20 6f 6e fo and /info, on
1ce0: 6c 79 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 ly a list of the
1cf0: 20 63 68 61 6e 67 65 64 20 66 69 6c 65 73 20 61 changed files a
1d00: 72 65 0a 2a 2a 20 73 68 6f 77 6e 2c 20 77 69 74 re.** shown, wit
1d10: 68 6f 75 74 20 64 69 66 66 73 2e 20 20 54 68 69 hout diffs. Thi
1d20: 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 69 6e s behavior is in
1d30: 76 65 72 74 65 64 20 69 66 20 74 68 65 0a 2a 2a verted if the.**
1d40: 20 22 73 68 6f 77 2d 76 65 72 73 69 6f 6e 2d 64 "show-version-d
1d50: 69 66 66 73 22 20 73 65 74 74 69 6e 67 20 69 73 iffs" setting is
1d60: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 76 turned on..*/.v
1d70: 6f 69 64 20 63 69 5f 70 61 67 65 28 76 6f 69 64 oid ci_page(void
1d80: 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 69 ){. Stmt q;. i
1d90: 6e 74 20 72 69 64 3b 0a 20 20 69 6e 74 20 69 73 nt rid;. int is
1da0: 4c 65 61 66 3b 0a 20 20 69 6e 74 20 73 68 6f 77 Leaf;. int show
1db0: 44 69 66 66 3b 0a 20 20 63 6f 6e 73 74 20 63 68 Diff;. const ch
1dc0: 61 72 20 2a 7a 4e 61 6d 65 3b 0a 0a 20 20 6c 6f ar *zName;.. lo
1dd0: 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e gin_check_creden
1de0: 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 tials();. if( !
1df0: 67 2e 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 g.okRead ){ logi
1e00: 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 n_needed(); retu
1e10: 72 6e 3b 20 7d 0a 20 20 7a 4e 61 6d 65 20 3d 20 rn; }. zName =
1e20: 50 44 28 22 6e 61 6d 65 22 2c 22 30 22 29 3b 0a PD("name","0");.
1e30: 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f rid = name_to_
1e40: 72 69 64 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 rid(zName);. if
1e50: 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 ( rid==0 ){.
1e60: 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 43 68 style_header("Ch
1e70: 65 63 6b 2d 69 6e 20 49 6e 66 6f 72 6d 61 74 69 eck-in Informati
1e80: 6f 6e 20 45 72 72 6f 72 22 29 3b 0a 20 20 20 20 on Error");.
1e90: 40 20 4e 6f 20 73 75 63 68 20 6f 62 6a 65 63 74 @ No such object
1ea0: 3a 20 25 68 28 67 2e 61 72 67 76 5b 32 5d 29 0a : %h(g.argv[2]).
1eb0: 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 style_footer
1ec0: 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a ();. return;.
1ed0: 20 20 7d 0a 20 20 69 73 4c 65 61 66 20 3d 20 21 }. isLeaf = !
1ee0: 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 db_exists("SELEC
1ef0: 54 20 31 20 46 52 4f 4d 20 70 6c 69 6e 6b 20 57 T 1 FROM plink W
1f00: 48 45 52 45 20 70 69 64 3d 25 64 22 2c 20 72 69 HERE pid=%d", ri
1f10: 64 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 d);. db_prepare
1f20: 28 26 71 2c 20 0a 20 20 20 20 20 22 53 45 4c 45 (&q, . "SELE
1f30: 43 54 20 75 75 69 64 2c 20 64 61 74 65 74 69 6d CT uuid, datetim
1f40: 65 28 6d 74 69 6d 65 2c 20 27 6c 6f 63 61 6c 74 e(mtime, 'localt
1f50: 69 6d 65 27 29 2c 20 75 73 65 72 2c 20 63 6f 6d ime'), user, com
1f60: 6d 65 6e 74 22 0a 20 20 20 20 20 22 20 20 46 52 ment". " FR
1f70: 4f 4d 20 62 6c 6f 62 2c 20 65 76 65 6e 74 22 0a OM blob, event".
1f80: 20 20 20 20 20 22 20 57 48 45 52 45 20 62 6c 6f " WHERE blo
1f90: 62 2e 72 69 64 3d 25 64 22 0a 20 20 20 20 20 22 b.rid=%d". "
1fa0: 20 20 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 6a AND event.obj
1fb0: 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 72 69 64 id=%d",. rid
1fc0: 2c 20 72 69 64 0a 20 20 29 3b 0a 20 20 69 66 28 , rid. );. if(
1fd0: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
1fe0: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
1ff0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 const char *zUui
2000: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 d = db_column_te
2010: 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 xt(&q, 0);. c
2020: 68 61 72 20 2a 7a 54 69 74 6c 65 20 3d 20 6d 70 har *zTitle = mp
2030: 72 69 6e 74 66 28 22 43 68 65 63 6b 2d 69 6e 20 rintf("Check-in
2040: 5b 25 2e 31 30 73 5d 22 2c 20 7a 55 75 69 64 29 [%.10s]", zUuid)
2050: 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 55 73 ;. char *zEUs
2060: 65 72 2c 20 2a 7a 45 43 6f 6d 6d 65 6e 74 3b 0a er, *zEComment;.
2070: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
2080: 7a 55 73 65 72 3b 0a 20 20 20 20 63 6f 6e 73 74 zUser;. const
2090: 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 3b char *zComment;
20a0: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
20b0: 2a 7a 44 61 74 65 3b 0a 20 20 20 20 73 74 79 6c *zDate;. styl
20c0: 65 5f 68 65 61 64 65 72 28 7a 54 69 74 6c 65 29 e_header(zTitle)
20d0: 3b 0a 20 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e ;. login_anon
20e0: 79 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 ymous_available(
20f0: 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 54 69 74 );. free(zTit
2100: 6c 65 29 3b 0a 20 20 20 20 7a 45 55 73 65 72 20 le);. zEUser
2110: 3d 20 64 62 5f 74 65 78 74 28 30 2c 0a 20 20 20 = db_text(0,.
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2130: 22 53 45 4c 45 43 54 20 76 61 6c 75 65 20 46 52 "SELECT value FR
2140: 4f 4d 20 74 61 67 78 72 65 66 20 57 48 45 52 45 OM tagxref WHERE
2150: 20 74 61 67 69 64 3d 25 64 20 41 4e 44 20 72 69 tagid=%d AND ri
2160: 64 3d 25 64 22 2c 0a 20 20 20 20 20 20 20 20 20 d=%d",.
2170: 20 20 20 20 20 20 20 20 20 20 20 54 41 47 5f 55 TAG_U
2180: 53 45 52 2c 20 72 69 64 29 3b 0a 20 20 20 20 7a SER, rid);. z
2190: 45 43 6f 6d 6d 65 6e 74 20 3d 20 64 62 5f 74 65 EComment = db_te
21a0: 78 74 28 30 2c 20 0a 20 20 20 20 20 20 20 20 20 xt(0, .
21b0: 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 "SELEC
21c0: 54 20 76 61 6c 75 65 20 46 52 4f 4d 20 74 61 67 T value FROM tag
21d0: 78 72 65 66 20 57 48 45 52 45 20 74 61 67 69 64 xref WHERE tagid
21e0: 3d 25 64 20 41 4e 44 20 72 69 64 3d 25 64 22 2c =%d AND rid=%d",
21f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2200: 20 20 20 20 54 41 47 5f 43 4f 4d 4d 45 4e 54 2c TAG_COMMENT,
2210: 20 72 69 64 29 3b 0a 20 20 20 20 7a 55 73 65 72 rid);. zUser
2220: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
2230: 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 7a 43 t(&q, 2);. zC
2240: 6f 6d 6d 65 6e 74 20 3d 20 64 62 5f 63 6f 6c 75 omment = db_colu
2250: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 3b 0a mn_text(&q, 3);.
2260: 20 20 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 63 zDate = db_c
2270: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 31 29 olumn_text(&q,1)
2280: 3b 0a 20 20 20 20 40 20 3c 64 69 76 20 63 6c 61 ;. @ <div cla
2290: 73 73 3d 22 73 65 63 74 69 6f 6e 22 3e 4f 76 65 ss="section">Ove
22a0: 72 76 69 65 77 3c 2f 64 69 76 3e 0a 20 20 20 20 rview</div>.
22b0: 40 20 3c 70 3e 3c 74 61 62 6c 65 20 63 6c 61 73 @ <p><table clas
22c0: 73 3d 22 6c 61 62 65 6c 2d 76 61 6c 75 65 22 3e s="label-value">
22d0: 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 53 . @ <tr><th>S
22e0: 48 41 31 26 6e 62 73 70 3b 48 61 73 68 3a 3c 2f HA1 Hash:</
22f0: 74 68 3e 3c 74 64 3e 25 73 28 7a 55 75 69 64 29 th><td>%s(zUuid)
2300: 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 53 65 74 . if( g.okSet
2310: 75 70 20 29 7b 0a 20 20 20 20 20 20 40 20 28 52 up ){. @ (R
2320: 65 63 6f 72 64 20 49 44 3a 20 25 64 28 72 69 64 ecord ID: %d(rid
2330: 29 29 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c )). }. @ <
2340: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 40 20 /td></tr>. @
2350: 3c 74 72 3e 3c 74 68 3e 44 61 74 65 3a 3c 2f 74 <tr><th>Date:</t
2360: 68 3e 3c 74 64 3e 0a 20 20 20 20 68 79 70 65 72 h><td>. hyper
2370: 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 61 link_to_date(zDa
2380: 74 65 2c 20 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 te, "</td></tr>"
2390: 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 55 73 65 );. if( zEUse
23a0: 72 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 r ){. @ <tr
23b0: 3e 3c 74 68 3e 45 64 69 74 65 64 26 6e 62 73 70 ><th>Edited 
23c0: 3b 55 73 65 72 3a 3c 2f 74 68 3e 3c 74 64 3e 0a ;User:</th><td>.
23d0: 20 20 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f hyperlink_
23e0: 74 6f 5f 75 73 65 72 28 7a 45 55 73 65 72 2c 7a to_user(zEUser,z
23f0: 44 61 74 65 2c 22 3c 2f 74 64 3e 3c 2f 74 72 3e Date,"</td></tr>
2400: 22 29 3b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e ");. @ <tr>
2410: 3c 74 68 3e 4f 72 69 67 69 6e 61 6c 26 6e 62 73 <th>Original&nbs
2420: 70 3b 55 73 65 72 3a 3c 2f 74 68 3e 3c 74 64 3e p;User:</th><td>
2430: 0a 20 20 20 20 20 20 68 79 70 65 72 6c 69 6e 6b . hyperlink
2440: 5f 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a _to_user(zUser,z
2450: 44 61 74 65 2c 22 3c 2f 74 64 3e 3c 2f 74 72 3e Date,"</td></tr>
2460: 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 ");. }else{.
2470: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 55 @ <tr><th>U
2480: 73 65 72 3a 3c 2f 74 68 3e 3c 74 64 3e 0a 20 20 ser:</th><td>.
2490: 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f hyperlink_to
24a0: 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a 44 61 74 _user(zUser,zDat
24b0: 65 2c 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b e,"</td></tr>");
24c0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a . }. if( z
24d0: 45 43 6f 6d 6d 65 6e 74 20 29 7b 0a 20 20 20 20 EComment ){.
24e0: 20 20 40 20 3c 74 72 3e 3c 74 68 3e 45 64 69 74 @ <tr><th>Edit
24f0: 65 64 26 6e 62 73 70 3b 43 6f 6d 6d 65 6e 74 3a ed Comment:
2500: 3c 2f 74 68 3e 3c 74 64 3e 25 77 28 7a 45 43 6f </th><td>%w(zECo
2510: 6d 6d 65 6e 74 29 3c 2f 74 64 3e 3c 2f 74 72 3e mment)</td></tr>
2520: 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 . @ <tr><th
2530: 3e 4f 72 69 67 69 6e 61 6c 26 6e 62 73 70 3b 43 >Original C
2540: 6f 6d 6d 65 6e 74 3a 3c 2f 74 68 3e 3c 74 64 3e omment:</th><td>
2550: 25 77 28 7a 43 6f 6d 6d 65 6e 74 29 3c 2f 74 64 %w(zComment)</td
2560: 3e 3c 2f 74 72 3e 0a 20 20 20 20 7d 65 6c 73 65 ></tr>. }else
2570: 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 {. @ <tr><t
2580: 68 3e 43 6f 6d 6d 65 6e 74 3a 3c 2f 74 68 3e 3c h>Comment:</th><
2590: 74 64 3e 25 77 28 7a 43 6f 6d 6d 65 6e 74 29 3c td>%w(zComment)<
25a0: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 7d 0a /td></tr>. }.
25b0: 20 20 20 20 69 66 28 20 67 2e 6f 6b 41 64 6d 69 if( g.okAdmi
25c0: 6e 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 70 72 n ){. db_pr
25d0: 65 70 61 72 65 28 26 71 2c 20 0a 20 20 20 20 20 epare(&q, .
25e0: 20 20 20 20 22 53 45 4c 45 43 54 20 72 63 76 66 "SELECT rcvf
25f0: 72 6f 6d 2e 69 70 61 64 64 72 2c 20 75 73 65 72 rom.ipaddr, user
2600: 2e 6c 6f 67 69 6e 2c 20 64 61 74 65 74 69 6d 65 .login, datetime
2610: 28 72 63 76 66 72 6f 6d 2e 6d 74 69 6d 65 29 22 (rcvfrom.mtime)"
2620: 0a 20 20 20 20 20 20 20 20 20 22 20 20 46 52 4f . " FRO
2630: 4d 20 62 6c 6f 62 20 4a 4f 49 4e 20 72 63 76 66 M blob JOIN rcvf
2640: 72 6f 6d 20 55 53 49 4e 47 28 72 63 76 69 64 29 rom USING(rcvid)
2650: 20 4c 45 46 54 20 4a 4f 49 4e 20 75 73 65 72 20 LEFT JOIN user
2660: 55 53 49 4e 47 28 75 69 64 29 22 0a 20 20 20 20 USING(uid)".
2670: 20 20 20 20 20 22 20 57 48 45 52 45 20 62 6c 6f " WHERE blo
2680: 62 2e 72 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 b.rid=%d",.
2690: 20 20 20 20 72 69 64 0a 20 20 20 20 20 20 29 3b rid. );
26a0: 0a 20 20 20 20 20 20 69 66 28 20 64 62 5f 73 74 . if( db_st
26b0: 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 ep(&q)==SQLITE_R
26c0: 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f OW ){. co
26d0: 6e 73 74 20 63 68 61 72 20 2a 7a 49 70 41 64 64 nst char *zIpAdd
26e0: 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 r = db_column_te
26f0: 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 20 xt(&q, 0);.
2700: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
2710: 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e User = db_column
2720: 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 _text(&q, 1);.
2730: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 const char
2740: 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c *zDate = db_col
2750: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 29 3b umn_text(&q, 2);
2760: 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 55 73 . if( zUs
2770: 65 72 3d 3d 30 20 7c 7c 20 7a 55 73 65 72 5b 30 er==0 || zUser[0
2780: 5d 3d 3d 30 20 29 20 7a 55 73 65 72 20 3d 20 22 ]==0 ) zUser = "
2790: 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 unknown";.
27a0: 20 20 40 20 3c 74 72 3e 3c 74 68 3e 52 65 63 65 @ <tr><th>Rece
27b0: 69 76 65 64 26 6e 62 73 70 3b 46 72 6f 6d 3a 3c ived From:<
27c0: 2f 74 68 3e 0a 20 20 20 20 20 20 20 20 40 20 3c /th>. @ <
27d0: 74 64 3e 25 68 28 7a 55 73 65 72 29 20 40 20 25 td>%h(zUser) @ %
27e0: 68 28 7a 49 70 41 64 64 72 29 20 6f 6e 20 25 73 h(zIpAddr) on %s
27f0: 28 7a 44 61 74 65 29 3c 2f 74 64 3e 3c 2f 74 72 (zDate)</td></tr
2800: 3e 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 >. }.
2810: 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b db_finalize(&q);
2820: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 67 . }. if( g
2830: 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 .okHistory ){.
2840: 20 20 20 20 63 68 61 72 20 2a 7a 53 68 6f 72 74 char *zShort
2850: 55 75 69 64 20 3d 20 6d 70 72 69 6e 74 66 28 22 Uuid = mprintf("
2860: 25 2e 31 30 73 22 2c 20 7a 55 75 69 64 29 3b 0a %.10s", zUuid);.
2870: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 const char
2880: 20 2a 7a 50 72 6f 6a 4e 61 6d 65 20 3d 20 64 62 *zProjName = db
2890: 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 6e 61 _get("project-na
28a0: 6d 65 22 2c 20 22 75 6e 6e 61 6d 65 64 22 29 3b me", "unnamed");
28b0: 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 . @ <tr><th
28c0: 3e 54 69 6d 65 6c 69 6e 65 73 3a 3c 2f 74 68 3e >Timelines:</th>
28d0: 3c 74 64 3e 0a 20 20 20 20 20 20 40 20 20 20 20 <td>. @
28e0: 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 <a href="%s(g.zB
28f0: 61 73 65 55 52 4c 29 2f 74 69 6d 65 6c 69 6e 65 aseURL)/timeline
2900: 3f 70 3d 25 64 28 72 69 64 29 22 3e 61 6e 63 65 ?p=%d(rid)">ance
2910: 73 74 6f 72 73 3c 2f 61 3e 0a 20 20 20 20 20 20 stors</a>.
2920: 40 20 20 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 @ | <a href="
2930: 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 74 %s(g.zBaseURL)/t
2940: 69 6d 65 6c 69 6e 65 3f 64 3d 25 64 28 72 69 64 imeline?d=%d(rid
2950: 29 22 3e 64 65 73 63 65 6e 64 61 6e 74 73 3c 2f )">descendants</
2960: 61 3e 0a 20 20 20 20 20 20 40 20 20 20 20 7c 20 a>. @ |
2970: 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 <a href="%s(g.zB
2980: 61 73 65 55 52 4c 29 2f 74 69 6d 65 6c 69 6e 65 aseURL)/timeline
2990: 3f 64 3d 25 64 28 72 69 64 29 26 70 3d 25 64 28 ?d=%d(rid)&p=%d(
29a0: 72 69 64 29 22 3e 62 6f 74 68 3c 2f 61 3e 0a 20 rid)">both</a>.
29b0: 20 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 db_prepare(
29c0: 26 71 2c 20 22 53 45 4c 45 43 54 20 73 75 62 73 &q, "SELECT subs
29d0: 74 72 28 74 61 67 2e 74 61 67 6e 61 6d 65 2c 35 tr(tag.tagname,5
29e0: 29 20 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 ) FROM tagxref,
29f0: 74 61 67 20 22 0a 20 20 20 20 20 20 20 20 20 20 tag ".
2a00: 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 " WHE
2a10: 52 45 20 72 69 64 3d 25 64 20 41 4e 44 20 74 61 RE rid=%d AND ta
2a20: 67 74 79 70 65 3e 30 20 22 0a 20 20 20 20 20 20 gtype>0 ".
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
2a40: 20 20 20 41 4e 44 20 74 61 67 2e 74 61 67 69 64 AND tag.tagid
2a50: 3d 74 61 67 78 72 65 66 2e 74 61 67 69 64 20 22 =tagxref.tagid "
2a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2a70: 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 2b 74 " AND +t
2a80: 61 67 2e 74 61 67 6e 61 6d 65 20 47 4c 4f 42 20 ag.tagname GLOB
2a90: 27 73 79 6d 2d 2a 27 22 2c 20 72 69 64 29 3b 0a 'sym-*'", rid);.
2aa0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 5f while( db_
2ab0: 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 step(&q)==SQLITE
2ac0: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 _ROW ){.
2ad0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 67 const char *zTag
2ae0: 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e Name = db_column
2af0: 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 _text(&q, 0);.
2b00: 20 20 20 20 20 20 40 20 20 7c 20 3c 61 20 68 72 @ | <a hr
2b10: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
2b20: 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f 74 3d 25 54 L)/timeline?t=%T
2b30: 28 7a 54 61 67 4e 61 6d 65 29 22 3e 25 68 28 7a (zTagName)">%h(z
2b40: 54 61 67 4e 61 6d 65 29 3c 2f 61 3e 0a 20 20 20 TagName)</a>.
2b50: 20 20 20 7d 0a 20 20 20 20 20 20 64 62 5f 66 69 }. db_fi
2b60: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 20 nalize(&q);.
2b70: 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 @ </td></tr>.
2b80: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 4f @ <tr><th>O
2b90: 74 68 65 72 26 6e 62 73 70 3b 4c 69 6e 6b 73 3a ther Links:
2ba0: 3c 2f 74 68 3e 0a 20 20 20 20 20 20 40 20 20 20 </th>. @
2bb0: 3c 74 64 3e 0a 20 20 20 20 20 20 40 20 20 20 20 <td>. @
2bc0: 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a <a href="%s(g.z
2bd0: 42 61 73 65 55 52 4c 29 2f 64 69 72 3f 63 69 3d BaseURL)/dir?ci=
2be0: 25 73 28 7a 53 68 6f 72 74 55 75 69 64 29 22 3e %s(zShortUuid)">
2bf0: 66 69 6c 65 73 3c 2f 61 3e 0a 20 20 20 20 20 20 files</a>.
2c00: 40 20 20 20 20 20 7c 20 3c 61 20 68 72 65 66 3d @ | <a href=
2c10: 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f "%s(g.zBaseURL)/
2c20: 7a 69 70 2f 25 73 28 7a 50 72 6f 6a 4e 61 6d 65 zip/%s(zProjName
2c30: 29 2d 25 73 28 7a 53 68 6f 72 74 55 75 69 64 29 )-%s(zShortUuid)
2c40: 2e 7a 69 70 3f 75 75 69 64 3d 25 73 28 7a 55 75 .zip?uuid=%s(zUu
2c50: 69 64 29 22 3e 0a 20 20 20 20 20 20 40 20 20 20 id)">. @
2c60: 20 20 20 20 20 20 5a 49 50 20 61 72 63 68 69 76 ZIP archiv
2c70: 65 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 20 e</a>. @
2c80: 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 | <a href="%s(
2c90: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 69 g.zBaseURL)/arti
2ca0: 66 61 63 74 2f 25 64 28 72 69 64 29 22 3e 6d 61 fact/%d(rid)">ma
2cb0: 6e 69 66 65 73 74 3c 2f 61 3e 0a 20 20 20 20 20 nifest</a>.
2cc0: 20 69 66 28 20 67 2e 6f 6b 57 72 69 74 65 20 29 if( g.okWrite )
2cd0: 7b 0a 20 20 20 20 20 20 20 20 40 20 20 20 20 20 {. @
2ce0: 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e | <a href="%s(g.
2cf0: 7a 42 61 73 65 55 52 4c 29 2f 63 69 5f 65 64 69 zBaseURL)/ci_edi
2d00: 74 3f 72 3d 25 64 28 72 69 64 29 22 3e 65 64 69 t?r=%d(rid)">edi
2d10: 74 3c 2f 61 3e 0a 20 20 20 20 20 20 7d 0a 20 20 t</a>. }.
2d20: 20 20 20 20 40 20 20 20 3c 2f 74 64 3e 0a 20 20 @ </td>.
2d30: 20 20 20 20 40 20 3c 2f 74 72 3e 0a 20 20 20 20 @ </tr>.
2d40: 20 20 66 72 65 65 28 7a 53 68 6f 72 74 55 75 69 free(zShortUui
2d50: 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 d);. }. @
2d60: 3c 2f 74 61 62 6c 65 3e 3c 2f 70 3e 0a 20 20 7d </table></p>. }
2d70: 65 6c 73 65 7b 0a 20 20 20 20 73 74 79 6c 65 5f else{. style_
2d80: 68 65 61 64 65 72 28 22 43 68 65 63 6b 2d 69 6e header("Check-in
2d90: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 3b 0a Information");.
2da0: 20 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d login_anonym
2db0: 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 3b ous_available();
2dc0: 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 . }. db_finali
2dd0: 7a 65 28 26 71 29 3b 0a 20 20 73 68 6f 77 54 61 ze(&q);. showTa
2de0: 67 73 28 72 69 64 2c 20 22 22 29 3b 0a 20 20 40 gs(rid, "");. @
2df0: 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 63 <div class="sec
2e00: 74 69 6f 6e 22 3e 43 68 61 6e 67 65 73 3c 2f 64 tion">Changes</d
2e10: 69 76 3e 0a 20 20 73 68 6f 77 44 69 66 66 20 3d iv>. showDiff =
2e20: 20 67 2e 7a 50 61 74 68 5b 30 5d 21 3d 27 63 27 g.zPath[0]!='c'
2e30: 3b 0a 20 20 69 66 28 20 64 62 5f 67 65 74 5f 62 ;. if( db_get_b
2e40: 6f 6f 6c 65 61 6e 28 22 73 68 6f 77 2d 76 65 72 oolean("show-ver
2e50: 73 69 6f 6e 2d 64 69 66 66 73 22 2c 20 30 29 3d sion-diffs", 0)=
2e60: 3d 30 20 29 7b 0a 20 20 20 20 73 68 6f 77 44 69 =0 ){. showDi
2e70: 66 66 20 3d 20 21 73 68 6f 77 44 69 66 66 3b 0a ff = !showDiff;.
2e80: 20 20 20 20 69 66 28 20 73 68 6f 77 44 69 66 66 if( showDiff
2e90: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 61 20 68 ){. @ <a h
2ea0: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
2eb0: 52 4c 29 2f 76 69 6e 66 6f 2f 25 54 28 7a 4e 61 RL)/vinfo/%T(zNa
2ec0: 6d 65 29 22 3e 5b 68 69 64 65 26 6e 62 73 70 3b me)">[hide
2ed0: 64 69 66 66 73 5d 3c 2f 61 3e 3c 62 72 2f 3e 0a diffs]</a><br/>.
2ee0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
2ef0: 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 @ <a href="%s(g
2f00: 2e 7a 42 61 73 65 55 52 4c 29 2f 63 69 2f 25 54 .zBaseURL)/ci/%T
2f10: 28 7a 4e 61 6d 65 29 22 3e 5b 73 68 6f 77 26 6e (zName)">[show&n
2f20: 62 73 70 3b 64 69 66 66 73 5d 3c 2f 61 3e 3c 62 bsp;diffs]</a><b
2f30: 72 2f 3e 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 r/>. }. }els
2f40: 65 7b 0a 20 20 20 20 69 66 28 20 73 68 6f 77 44 e{. if( showD
2f50: 69 66 66 20 29 7b 0a 20 20 20 20 20 20 40 20 3c iff ){. @ <
2f60: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
2f70: 73 65 55 52 4c 29 2f 63 69 2f 25 54 28 7a 4e 61 seURL)/ci/%T(zNa
2f80: 6d 65 29 22 3e 5b 68 69 64 65 26 6e 62 73 70 3b me)">[hide
2f90: 64 69 66 66 73 5d 3c 2f 61 3e 3c 62 72 2f 3e 0a diffs]</a><br/>.
2fa0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
2fb0: 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 @ <a href="%s(g
2fc0: 2e 7a 42 61 73 65 55 52 4c 29 2f 76 69 6e 66 6f .zBaseURL)/vinfo
2fd0: 2f 25 54 28 7a 4e 61 6d 65 29 22 3e 5b 73 68 6f /%T(zName)">[sho
2fe0: 77 26 6e 62 73 70 3b 64 69 66 66 73 5d 3c 2f 61 w diffs]</a
2ff0: 3e 3c 62 72 2f 3e 0a 20 20 20 20 7d 0a 20 20 7d ><br/>. }. }
3000: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 . db_prepare(&q
3010: 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 70 ,. "SELECT p
3020: 69 64 2c 20 66 69 64 2c 20 6e 61 6d 65 2c 20 73 id, fid, name, s
3030: 75 62 73 74 72 28 61 2e 75 75 69 64 2c 31 2c 31 ubstr(a.uuid,1,1
3040: 30 29 2c 20 73 75 62 73 74 72 28 62 2e 75 75 69 0), substr(b.uui
3050: 64 2c 31 2c 31 30 29 22 0a 20 20 20 20 20 22 20 d,1,10)". "
3060: 20 46 52 4f 4d 20 6d 6c 69 6e 6b 20 4a 4f 49 4e FROM mlink JOIN
3070: 20 66 69 6c 65 6e 61 6d 65 20 4f 4e 20 66 69 6c filename ON fil
3080: 65 6e 61 6d 65 2e 66 6e 69 64 3d 6d 6c 69 6e 6b ename.fnid=mlink
3090: 2e 66 6e 69 64 22 0a 20 20 20 20 20 22 20 20 20 .fnid". "
30a0: 20 20 20 20 20 20 4c 45 46 54 20 4a 4f 49 4e 20 LEFT JOIN
30b0: 62 6c 6f 62 20 61 20 4f 4e 20 61 2e 72 69 64 3d blob a ON a.rid=
30c0: 70 69 64 22 0a 20 20 20 20 20 22 20 20 20 20 20 pid". "
30d0: 20 20 20 20 4c 45 46 54 20 4a 4f 49 4e 20 62 6c LEFT JOIN bl
30e0: 6f 62 20 62 20 4f 4e 20 62 2e 72 69 64 3d 66 69 ob b ON b.rid=fi
30f0: 64 22 0a 20 20 20 20 20 22 20 57 48 45 52 45 20 d". " WHERE
3100: 6d 6c 69 6e 6b 2e 6d 69 64 3d 25 64 22 0a 20 20 mlink.mid=%d".
3110: 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 6e 61 " ORDER BY na
3120: 6d 65 22 2c 0a 20 20 20 20 20 72 69 64 0a 20 20 me",. rid.
3130: 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 );. while( db_s
3140: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
3150: 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 ROW ){. int p
3160: 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 id = db_column_i
3170: 6e 74 28 26 71 2c 30 29 3b 0a 20 20 20 20 69 6e nt(&q,0);. in
3180: 74 20 66 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d t fid = db_colum
3190: 6e 5f 69 6e 74 28 26 71 2c 31 29 3b 0a 20 20 20 n_int(&q,1);.
31a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 const char *zNa
31b0: 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 me = db_column_t
31c0: 65 78 74 28 26 71 2c 32 29 3b 0a 20 20 20 20 63 ext(&q,2);. c
31d0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 6c 64 20 onst char *zOld
31e0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
31f0: 28 26 71 2c 33 29 3b 0a 20 20 20 20 63 6f 6e 73 (&q,3);. cons
3200: 74 20 63 68 61 72 20 2a 7a 4e 65 77 20 3d 20 64 t char *zNew = d
3210: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
3220: 2c 34 29 3b 0a 20 20 20 20 69 66 28 20 21 67 2e ,4);. if( !g.
3230: 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 okHistory ){.
3240: 20 20 20 69 66 28 20 7a 4e 65 77 3d 3d 30 20 29 if( zNew==0 )
3250: 7b 0a 20 20 20 20 20 20 20 20 40 20 3c 70 3e 44 {. @ <p>D
3260: 65 6c 65 74 65 64 20 25 68 28 7a 4e 61 6d 65 29 eleted %h(zName)
3270: 3c 2f 70 3e 0a 20 20 20 20 20 20 20 20 63 6f 6e </p>. con
3280: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d 65 6c tinue;. }el
3290: 73 65 7b 0a 20 20 20 20 20 20 20 20 40 20 3c 70 se{. @ <p
32a0: 3e 43 68 61 6e 67 65 73 20 74 6f 20 25 68 28 7a >Changes to %h(z
32b0: 4e 61 6d 65 29 3c 2f 70 3e 0a 20 20 20 20 20 20 Name)</p>.
32c0: 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 }. }else if(
32d0: 7a 4f 6c 64 20 26 26 20 7a 4e 65 77 20 29 7b 0a zOld && zNew ){.
32e0: 20 20 20 20 20 20 40 20 3c 70 3e 4d 6f 64 69 66 @ <p>Modif
32f0: 69 65 64 20 3c 61 20 68 72 65 66 3d 22 25 73 28 ied <a href="%s(
3300: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 69 6e 66 g.zBaseURL)/finf
3310: 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 6d 65 29 o?name=%T(zName)
3320: 22 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f 61 3e 0a ">%h(zName)</a>.
3330: 20 20 20 20 20 20 40 20 66 72 6f 6d 20 3c 61 20 @ from <a
3340: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
3350: 55 52 4c 29 2f 61 72 74 69 66 61 63 74 2f 25 73 URL)/artifact/%s
3360: 28 7a 4f 6c 64 29 22 3e 5b 25 73 28 7a 4f 6c 64 (zOld)">[%s(zOld
3370: 29 5d 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 74 )]</a>. @ t
3380: 6f 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e o <a href="%s(g.
3390: 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 69 66 61 zBaseURL)/artifa
33a0: 63 74 2f 25 73 28 7a 4e 65 77 29 22 3e 5b 25 73 ct/%s(zNew)">[%s
33b0: 28 7a 4e 65 77 29 5d 2e 3c 2f 61 3e 0a 20 20 20 (zNew)].</a>.
33c0: 20 20 20 69 66 28 20 21 73 68 6f 77 44 69 66 66 if( !showDiff
33d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 26 6e ){. @ &n
33e0: 62 73 70 3b 26 6e 62 73 70 3b 0a 20 20 20 20 20 bsp; .
33f0: 20 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 @ <a href="%s
3400: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 64 69 (g.zBaseURL)/fdi
3410: 66 66 3f 76 31 3d 25 64 28 70 69 64 29 26 76 32 ff?v1=%d(pid)&v2
3420: 3d 25 64 28 66 69 64 29 22 3e 5b 64 69 66 66 5d =%d(fid)">[diff]
3430: 3c 2f 61 3e 0a 20 20 20 20 20 20 7d 0a 20 20 20 </a>. }.
3440: 20 7d 65 6c 73 65 20 69 66 28 20 7a 4f 6c 64 20 }else if( zOld
3450: 29 7b 0a 20 20 20 20 20 20 40 20 3c 70 3e 44 65 ){. @ <p>De
3460: 6c 65 74 65 64 20 3c 61 20 68 72 65 66 3d 22 25 leted <a href="%
3470: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 69 s(g.zBaseURL)/fi
3480: 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 6d nfo?name=%T(zNam
3490: 65 29 22 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f 61 e)">%h(zName)</a
34a0: 3e 0a 20 20 20 20 20 20 40 20 76 65 72 73 69 6f >. @ versio
34b0: 6e 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e n <a href="%s(g.
34c0: 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 69 66 61 zBaseURL)/artifa
34d0: 63 74 2f 25 73 28 7a 4f 6c 64 29 22 3e 5b 25 73 ct/%s(zOld)">[%s
34e0: 28 7a 4f 6c 64 29 5d 3c 2f 61 3e 3c 2f 70 3e 0a (zOld)]</a></p>.
34f0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a continue;.
3500: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
3510: 20 40 20 3c 70 3e 41 64 64 65 64 20 3c 61 20 68 @ <p>Added <a h
3520: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
3530: 52 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 RL)/finfo?name=%
3540: 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 T(zName)">%h(zNa
3550: 6d 65 29 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 me)</a>. @
3560: 76 65 72 73 69 6f 6e 20 3c 61 20 68 72 65 66 3d version <a href=
3570: 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f "%s(g.zBaseURL)/
3580: 61 72 74 69 66 61 63 74 2f 25 73 28 7a 4e 65 77 artifact/%s(zNew
3590: 29 22 3e 5b 25 73 28 7a 4e 65 77 29 5d 3c 2f 61 )">[%s(zNew)]</a
35a0: 3e 3c 2f 70 3e 0a 20 20 20 20 7d 0a 20 20 20 20 ></p>. }.
35b0: 69 66 28 20 73 68 6f 77 44 69 66 66 20 29 7b 0a if( showDiff ){.
35c0: 20 20 20 20 20 20 40 20 3c 62 6c 6f 63 6b 71 75 @ <blockqu
35d0: 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20 ote><pre>.
35e0: 61 70 70 65 6e 64 5f 64 69 66 66 28 70 69 64 2c append_diff(pid,
35f0: 20 66 69 64 29 3b 0a 20 20 20 20 20 20 40 20 3c fid);. @ <
3600: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 /pre></blockquot
3610: 65 3e 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 e>. }. }. d
3620: 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a b_finalize(&q);.
3630: 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 style_footer()
3640: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 ;.}../*.** WEBPA
3650: 47 45 3a 20 77 69 6e 66 6f 0a 2a 2a 20 55 52 4c GE: winfo.** URL
3660: 3a 20 20 2f 77 69 6e 66 6f 3f 6e 61 6d 65 3d 52 : /winfo?name=R
3670: 49 44 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 ID.**.** Return
3680: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 information abou
3690: 74 20 61 20 77 69 6b 69 20 70 61 67 65 2e 0a 2a t a wiki page..*
36a0: 2f 0a 76 6f 69 64 20 77 69 6e 66 6f 5f 70 61 67 /.void winfo_pag
36b0: 65 28 76 6f 69 64 29 7b 0a 20 20 53 74 6d 74 20 e(void){. Stmt
36c0: 71 3b 0a 20 20 69 6e 74 20 72 69 64 3b 0a 0a 20 q;. int rid;..
36d0: 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 login_check_cre
36e0: 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 dentials();. if
36f0: 28 20 21 67 2e 6f 6b 52 64 57 69 6b 69 20 29 7b ( !g.okRdWiki ){
3700: 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b login_needed();
3710: 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 72 69 64 return; }. rid
3720: 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 = name_to_rid(P
3730: 44 28 22 6e 61 6d 65 22 2c 22 30 22 29 29 3b 0a D("name","0"));.
3740: 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a if( rid==0 ){.
3750: 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 style_header
3760: 28 22 57 69 6b 69 20 50 61 67 65 20 49 6e 66 6f ("Wiki Page Info
3770: 72 6d 61 74 69 6f 6e 20 45 72 72 6f 72 22 29 3b rmation Error");
3780: 0a 20 20 20 20 40 20 4e 6f 20 73 75 63 68 20 6f . @ No such o
3790: 62 6a 65 63 74 3a 20 25 68 28 67 2e 61 72 67 76 bject: %h(g.argv
37a0: 5b 32 5d 29 0a 20 20 20 20 73 74 79 6c 65 5f 66 [2]). style_f
37b0: 6f 6f 74 65 72 28 29 3b 0a 20 20 20 20 72 65 74 ooter();. ret
37c0: 75 72 6e 3b 0a 20 20 7d 0a 20 20 64 62 5f 70 72 urn;. }. db_pr
37d0: 65 70 61 72 65 28 26 71 2c 20 0a 20 20 20 20 20 epare(&q, .
37e0: 22 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 "SELECT substr(t
37f0: 61 67 6e 61 6d 65 2c 20 36 2c 20 31 30 30 30 29 agname, 6, 1000)
3800: 2c 20 75 75 69 64 2c 22 0a 20 20 20 20 20 22 20 , uuid,". "
3810: 20 20 20 20 20 20 64 61 74 65 74 69 6d 65 28 65 datetime(e
3820: 76 65 6e 74 2e 6d 74 69 6d 65 2c 20 27 6c 6f 63 vent.mtime, 'loc
3830: 61 6c 74 69 6d 65 27 29 2c 20 75 73 65 72 22 0a altime'), user".
3840: 20 20 20 20 20 22 20 20 46 52 4f 4d 20 74 61 67 " FROM tag
3850: 78 72 65 66 2c 20 74 61 67 2c 20 62 6c 6f 62 2c xref, tag, blob,
3860: 20 65 76 65 6e 74 22 0a 20 20 20 20 20 22 20 57 event". " W
3870: 48 45 52 45 20 74 61 67 78 72 65 66 2e 72 69 64 HERE tagxref.rid
3880: 3d 25 64 22 0a 20 20 20 20 20 22 20 20 20 41 4e =%d". " AN
3890: 44 20 74 61 67 2e 74 61 67 69 64 3d 74 61 67 78 D tag.tagid=tagx
38a0: 72 65 66 2e 74 61 67 69 64 22 0a 20 20 20 20 20 ref.tagid".
38b0: 22 20 20 20 41 4e 44 20 74 61 67 2e 74 61 67 6e " AND tag.tagn
38c0: 61 6d 65 20 4c 49 4b 45 20 27 77 69 6b 69 2d 25 ame LIKE 'wiki-%
38d0: 25 27 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 %'". " AND
38e0: 20 62 6c 6f 62 2e 72 69 64 3d 25 64 22 0a 20 20 blob.rid=%d".
38f0: 20 20 20 22 20 20 20 41 4e 44 20 65 76 65 6e 74 " AND event
3900: 2e 6f 62 6a 69 64 3d 25 64 22 2c 0a 20 20 20 20 .objid=%d",.
3910: 20 72 69 64 2c 20 72 69 64 2c 20 72 69 64 0a 20 rid, rid, rid.
3920: 20 29 3b 0a 20 20 69 66 28 20 64 62 5f 73 74 65 );. if( db_ste
3930: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
3940: 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 W ){. const c
3950: 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f har *zName = db_
3960: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
3970: 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 0);. const ch
3980: 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 63 ar *zUuid = db_c
3990: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 olumn_text(&q, 1
39a0: 29 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 69 );. char *zTi
39b0: 74 6c 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 57 tle = mprintf("W
39c0: 69 6b 69 20 50 61 67 65 20 25 73 22 2c 20 7a 4e iki Page %s", zN
39d0: 61 6d 65 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 ame);. const
39e0: 63 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 char *zDate = db
39f0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
3a00: 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 2);. const ch
3a10: 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 ar *zUser = db_c
3a20: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 33 29 olumn_text(&q,3)
3a30: 3b 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 ;. style_head
3a40: 65 72 28 7a 54 69 74 6c 65 29 3b 0a 20 20 20 20 er(zTitle);.
3a50: 66 72 65 65 28 7a 54 69 74 6c 65 29 3b 0a 20 20 free(zTitle);.
3a60: 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f 75 login_anonymou
3a70: 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 3b 0a 20 s_available();.
3a80: 20 20 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d @ <div class=
3a90: 22 73 65 63 74 69 6f 6e 22 3e 4f 76 65 72 76 69 "section">Overvi
3aa0: 65 77 3c 2f 64 69 76 3e 0a 20 20 20 20 40 20 3c ew</div>. @ <
3ab0: 70 3e 3c 74 61 62 6c 65 20 63 6c 61 73 73 3d 22 p><table class="
3ac0: 6c 61 62 65 6c 2d 76 61 6c 75 65 22 3e 0a 20 20 label-value">.
3ad0: 20 20 40 20 3c 74 72 3e 3c 74 68 3e 56 65 72 73 @ <tr><th>Vers
3ae0: 69 6f 6e 3a 3c 2f 74 68 3e 3c 74 64 3e 25 73 28 ion:</th><td>%s(
3af0: 7a 55 75 69 64 29 3c 2f 74 64 3e 3c 2f 74 72 3e zUuid)</td></tr>
3b00: 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 44 . @ <tr><th>D
3b10: 61 74 65 3a 3c 2f 74 68 3e 3c 74 64 3e 0a 20 20 ate:</th><td>.
3b20: 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 64 hyperlink_to_d
3b30: 61 74 65 28 7a 44 61 74 65 2c 20 22 3c 2f 74 64 ate(zDate, "</td
3b40: 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 20 20 69 66 ></tr>");. if
3b50: 28 20 67 2e 6f 6b 53 65 74 75 70 20 29 7b 0a 20 ( g.okSetup ){.
3b60: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 52 @ <tr><th>R
3b70: 65 63 6f 72 64 20 49 44 3a 3c 2f 74 68 3e 3c 74 ecord ID:</th><t
3b80: 64 3e 25 64 28 72 69 64 29 3c 2f 74 64 3e 3c 2f d>%d(rid)</td></
3b90: 74 72 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 tr>. }. @
3ba0: 3c 74 72 3e 3c 74 68 3e 4f 72 69 67 69 6e 61 6c <tr><th>Original
3bb0: 26 6e 62 73 70 3b 55 73 65 72 3a 3c 2f 74 68 3e User:</th>
3bc0: 3c 74 64 3e 0a 20 20 20 20 68 79 70 65 72 6c 69 <td>. hyperli
3bd0: 6e 6b 5f 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 nk_to_user(zUser
3be0: 2c 20 7a 44 61 74 65 2c 20 22 3c 2f 74 64 3e 3c , zDate, "</td><
3bf0: 2f 74 72 3e 22 29 3b 0a 20 20 20 20 69 66 28 20 /tr>");. if(
3c00: 67 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 g.okHistory ){.
3c10: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 43 @ <tr><th>C
3c20: 6f 6d 6d 61 6e 64 73 3a 3c 2f 74 68 3e 0a 20 20 ommands:</th>.
3c30: 20 20 20 20 40 20 20 20 3c 74 64 3e 0a 20 20 20 @ <td>.
3c40: 20 20 20 2f 2a 20 40 20 20 20 20 20 3c 61 20 68 /* @ <a h
3c50: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
3c60: 52 4c 29 2f 77 64 69 66 66 2f 25 64 28 72 69 64 RL)/wdiff/%d(rid
3c70: 29 22 3e 64 69 66 66 3c 2f 61 3e 20 7c 20 2a 2f )">diff</a> | */
3c80: 0a 20 20 20 20 20 20 40 20 20 20 20 20 3c 61 20 . @ <a
3c90: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
3ca0: 55 52 4c 29 2f 77 68 69 73 74 6f 72 79 3f 6e 61 URL)/whistory?na
3cb0: 6d 65 3d 25 74 28 7a 4e 61 6d 65 29 22 3e 68 69 me=%t(zName)">hi
3cc0: 73 74 6f 72 79 3c 2f 61 3e 0a 20 20 20 20 20 20 story</a>.
3cd0: 40 20 20 20 20 20 7c 20 3c 61 20 68 72 65 66 3d @ | <a href=
3ce0: 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f "%s(g.zBaseURL)/
3cf0: 61 72 74 69 66 61 63 74 2f 25 64 28 72 69 64 29 artifact/%d(rid)
3d00: 22 3e 72 61 77 2d 74 65 78 74 3c 2f 61 3e 0a 20 ">raw-text</a>.
3d10: 20 20 20 20 20 40 20 20 20 3c 2f 74 64 3e 0a 20 @ </td>.
3d20: 20 20 20 20 20 40 20 3c 2f 74 72 3e 0a 20 20 20 @ </tr>.
3d30: 20 7d 0a 20 20 20 20 40 20 3c 2f 74 61 62 6c 65 }. @ </table
3d40: 3e 3c 2f 70 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 ></p>. }else{.
3d50: 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 style_header(
3d60: 22 57 69 6b 69 20 49 6e 66 6f 72 6d 61 74 69 6f "Wiki Informatio
3d70: 6e 22 29 3b 0a 20 20 20 20 72 69 64 20 3d 20 30 n");. rid = 0
3d80: 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c ;. }. db_final
3d90: 69 7a 65 28 26 71 29 3b 0a 20 20 73 68 6f 77 54 ize(&q);. showT
3da0: 61 67 73 28 72 69 64 2c 20 22 77 69 6b 69 2d 2a ags(rid, "wiki-*
3db0: 22 29 3b 0a 20 20 69 66 28 20 72 69 64 20 29 7b ");. if( rid ){
3dc0: 0a 20 20 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e . Blob conten
3dd0: 74 3b 0a 20 20 20 20 4d 61 6e 69 66 65 73 74 20 t;. Manifest
3de0: 6d 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 6d m;. memset(&m
3df0: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6d 29 29 3b , 0, sizeof(m));
3e00: 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 . blob_zero(&
3e10: 6d 2e 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 m.content);.
3e20: 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c content_get(rid,
3e30: 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 &content);.
3e40: 6d 61 6e 69 66 65 73 74 5f 70 61 72 73 65 28 26 manifest_parse(&
3e50: 6d 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 m, &content);.
3e60: 20 20 69 66 28 20 6d 2e 74 79 70 65 3d 3d 43 46 if( m.type==CF
3e70: 54 59 50 45 5f 57 49 4b 49 20 29 7b 0a 20 20 20 TYPE_WIKI ){.
3e80: 20 20 20 42 6c 6f 62 20 77 69 6b 69 3b 0a 20 20 Blob wiki;.
3e90: 20 20 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 77 blob_init(&w
3ea0: 69 6b 69 2c 20 6d 2e 7a 57 69 6b 69 2c 20 2d 31 iki, m.zWiki, -1
3eb0: 29 3b 0a 20 20 20 20 20 20 40 20 3c 64 69 76 20 );. @ <div
3ec0: 63 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 3e class="section">
3ed0: 43 6f 6e 74 65 6e 74 3c 2f 64 69 76 3e 0a 20 20 Content</div>.
3ee0: 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 wiki_convert
3ef0: 28 26 77 69 6b 69 2c 20 30 2c 20 30 29 3b 0a 20 (&wiki, 0, 0);.
3f00: 20 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 blob_reset(
3f10: 26 77 69 6b 69 29 3b 0a 20 20 20 20 7d 0a 20 20 &wiki);. }.
3f20: 20 20 6d 61 6e 69 66 65 73 74 5f 63 6c 65 61 72 manifest_clear
3f30: 28 26 6d 29 3b 0a 20 20 7d 0a 20 20 73 74 79 6c (&m);. }. styl
3f40: 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f e_footer();.}../
3f50: 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 76 64 *.** WEBPAGE: vd
3f60: 69 66 66 0a 2a 2a 20 55 52 4c 3a 20 2f 76 64 69 iff.** URL: /vdi
3f70: 66 66 3f 6e 61 6d 65 3d 52 49 44 0a 2a 2a 0a 2a ff?name=RID.**.*
3f80: 2a 20 53 68 6f 77 20 61 6c 6c 20 64 69 66 66 65 * Show all diffe
3f90: 72 65 6e 63 65 73 20 66 6f 72 20 61 20 70 61 72 rences for a par
3fa0: 74 69 63 75 6c 61 72 20 63 68 65 63 6b 2d 69 6e ticular check-in
3fb0: 2e 0a 2a 2f 0a 76 6f 69 64 20 76 64 69 66 66 5f ..*/.void vdiff_
3fc0: 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 69 6e page(void){. in
3fd0: 74 20 72 69 64 3b 0a 20 20 53 74 6d 74 20 71 3b t rid;. Stmt q;
3fe0: 0a 20 20 63 68 61 72 20 2a 7a 55 75 69 64 3b 0a . char *zUuid;.
3ff0: 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 . login_check_c
4000: 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 redentials();.
4010: 69 66 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b if( !g.okRead ){
4020: 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b login_needed();
4030: 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 6c 6f 67 return; }. log
4040: 69 6e 5f 61 6e 6f 6e 79 6d 6f 75 73 5f 61 76 61 in_anonymous_ava
4050: 69 6c 61 62 6c 65 28 29 3b 0a 0a 20 20 72 69 64 ilable();.. rid
4060: 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 = name_to_rid(P
4070: 44 28 22 6e 61 6d 65 22 2c 22 22 29 29 3b 0a 20 D("name",""));.
4080: 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20 if( rid==0 ){.
4090: 20 20 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 fossil_redire
40a0: 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 7d 0a 20 ct_home();. }.
40b0: 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 zUuid = db_text
40c0: 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 (0, "SELECT uuid
40d0: 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 FROM blob WHERE
40e0: 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a rid=%d", rid);.
40f0: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 style_header("
4100: 43 68 65 63 6b 2d 69 6e 20 5b 25 2e 31 30 73 5d Check-in [%.10s]
4110: 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 64 62 5f ", zUuid);. db_
4120: 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 prepare(&q,.
4130: 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 "SELECT datetime
4140: 28 6d 74 69 6d 65 29 2c 20 22 0a 20 20 20 20 22 (mtime), ". "
4150: 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 coalesce(
4160: 65 76 65 6e 74 2e 65 63 6f 6d 6d 65 6e 74 2c 65 event.ecomment,e
4170: 76 65 6e 74 2e 63 6f 6d 6d 65 6e 74 29 2c 22 0a vent.comment),".
4180: 20 20 20 20 22 20 20 20 20 20 20 20 63 6f 61 6c " coal
4190: 65 73 63 65 28 65 76 65 6e 74 2e 65 75 73 65 72 esce(event.euser
41a0: 2c 65 76 65 6e 74 2e 75 73 65 72 29 22 0a 20 20 ,event.user)".
41b0: 20 20 22 20 20 46 52 4f 4d 20 65 76 65 6e 74 20 " FROM event
41c0: 57 48 45 52 45 20 74 79 70 65 3d 27 63 69 27 20 WHERE type='ci'
41d0: 41 4e 44 20 6f 62 6a 69 64 3d 25 64 22 2c 0a 20 AND objid=%d",.
41e0: 20 20 20 72 69 64 0a 20 20 29 3b 0a 20 20 77 68 rid. );. wh
41f0: 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 ile( db_step(&q)
4200: 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a ==SQLITE_ROW ){.
4210: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
4220: 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 6d zDate = db_colum
4230: 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 n_text(&q, 0);.
4240: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
4250: 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e User = db_column
4260: 5f 74 65 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 _text(&q, 2);.
4270: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 const char *zC
4280: 6f 6d 6d 65 6e 74 20 3d 20 64 62 5f 63 6f 6c 75 omment = db_colu
4290: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a mn_text(&q, 1);.
42a0: 20 20 20 20 40 20 3c 68 32 3e 43 68 65 63 6b 2d @ <h2>Check-
42b0: 69 6e 20 25 73 28 7a 55 75 69 64 29 3c 2f 68 32 in %s(zUuid)</h2
42c0: 3e 0a 20 20 20 20 40 20 3c 70 3e 4d 61 64 65 20 >. @ <p>Made
42d0: 62 79 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b by. hyperlink
42e0: 5f 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a _to_user(zUser,z
42f0: 44 61 74 65 2c 22 20 6f 6e 22 29 3b 0a 20 20 20 Date," on");.
4300: 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 hyperlink_to_da
4310: 74 65 28 7a 44 61 74 65 2c 20 22 3a 22 29 3b 0a te(zDate, ":");.
4320: 20 20 20 20 40 20 25 77 28 7a 43 6f 6d 6d 65 6e @ %w(zCommen
4330: 74 29 2e 20 0a 20 20 20 20 69 66 28 20 67 2e 6f t). . if( g.o
4340: 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 20 kHistory ){.
4350: 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 @ <a href="%s(
4360: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 63 69 2f 25 g.zBaseURL)/ci/%
4370: 73 28 7a 55 75 69 64 29 22 3e 5b 64 65 74 61 69 s(zUuid)">[detai
4380: 6c 73 5d 3c 2f 61 3e 0a 20 20 20 20 7d 0a 20 20 ls]</a>. }.
4390: 20 20 40 20 3c 2f 70 3e 3c 68 72 3e 0a 20 20 7d @ </p><hr>. }
43a0: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 . db_finalize(&
43b0: 71 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 q);. db_prepare
43c0: 28 26 71 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 (&q,. "SELEC
43d0: 54 20 70 69 64 2c 20 66 69 64 2c 20 6e 61 6d 65 T pid, fid, name
43e0: 22 0a 20 20 20 20 20 22 20 20 46 52 4f 4d 20 6d ". " FROM m
43f0: 6c 69 6e 6b 2c 20 66 69 6c 65 6e 61 6d 65 22 0a link, filename".
4400: 20 20 20 20 20 22 20 57 48 45 52 45 20 6d 6c 69 " WHERE mli
4410: 6e 6b 2e 6d 69 64 3d 25 64 22 0a 20 20 20 20 20 nk.mid=%d".
4420: 22 20 20 20 41 4e 44 20 66 69 6c 65 6e 61 6d 65 " AND filename
4430: 2e 66 6e 69 64 3d 6d 6c 69 6e 6b 2e 66 6e 69 64 .fnid=mlink.fnid
4440: 22 0a 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 ". " ORDER B
4450: 59 20 6e 61 6d 65 22 2c 0a 20 20 20 20 20 72 69 Y name",. ri
4460: 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 d. );. while(
4470: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c db_step(&q)==SQL
4480: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 ITE_ROW ){. i
4490: 6e 74 20 70 69 64 20 3d 20 64 62 5f 63 6f 6c 75 nt pid = db_colu
44a0: 6d 6e 5f 69 6e 74 28 26 71 2c 30 29 3b 0a 20 20 mn_int(&q,0);.
44b0: 20 20 69 6e 74 20 66 69 64 20 3d 20 64 62 5f 63 int fid = db_c
44c0: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 31 29 3b olumn_int(&q,1);
44d0: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
44e0: 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 *zName = db_colu
44f0: 6d 6e 5f 74 65 78 74 28 26 71 2c 32 29 3b 0a 20 mn_text(&q,2);.
4500: 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f if( g.okHisto
4510: 72 79 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 70 ry ){. @ <p
4520: 3e 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a ><a href="%s(g.z
4530: 42 61 73 65 55 52 4c 29 2f 66 69 6e 66 6f 3f 6e BaseURL)/finfo?n
4540: 61 6d 65 3d 25 54 28 7a 4e 61 6d 65 29 22 3e 25 ame=%T(zName)">%
4550: 68 28 7a 4e 61 6d 65 29 3c 2f 61 3e 3c 2f 70 3e h(zName)</a></p>
4560: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
4570: 20 20 40 20 3c 70 3e 25 68 28 7a 4e 61 6d 65 29 @ <p>%h(zName)
4580: 3c 2f 70 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 </p>. }. @
4590: 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 <blockquote><pr
45a0: 65 3e 0a 20 20 20 20 61 70 70 65 6e 64 5f 64 69 e>. append_di
45b0: 66 66 28 70 69 64 2c 20 66 69 64 29 3b 0a 20 20 ff(pid, fid);.
45c0: 20 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 @ </pre></bloc
45d0: 6b 71 75 6f 74 65 3e 0a 20 20 7d 0a 20 20 64 62 kquote>. }. db
45e0: 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 _finalize(&q);.
45f0: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
4600: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 .}../*.** Write
4610: 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 a description of
4620: 20 61 6e 20 6f 62 6a 65 63 74 20 74 6f 20 74 68 an object to th
4630: 65 20 77 77 77 20 72 65 70 6c 79 2e 0a 2a 2a 0a e www reply..**.
4640: 2a 2a 20 49 66 20 74 68 65 20 6f 62 6a 65 63 74 ** If the object
4650: 20 69 73 20 61 20 66 69 6c 65 20 74 68 65 6e 20 is a file then
4660: 6d 65 6e 74 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20 mention:.**.**
4670: 20 20 20 2a 20 49 74 27 73 20 61 72 74 69 66 61 * It's artifa
4680: 63 74 20 49 44 0a 2a 2a 20 20 20 20 20 2a 20 41 ct ID.** * A
4690: 6c 6c 20 69 74 73 20 66 69 6c 65 6e 61 6d 65 73 ll its filenames
46a0: 0a 2a 2a 20 20 20 20 20 2a 20 54 68 65 20 63 68 .** * The ch
46b0: 65 63 6b 2d 69 6e 20 69 74 20 77 61 73 20 70 61 eck-in it was pa
46c0: 72 74 20 6f 66 2c 20 77 69 74 68 20 74 69 6d 65 rt of, with time
46d0: 73 20 61 6e 64 20 75 73 65 72 73 0a 2a 2a 0a 2a s and users.**.*
46e0: 2a 20 49 66 20 74 68 65 20 6f 62 6a 65 63 74 20 * If the object
46f0: 69 73 20 61 20 6d 61 6e 69 66 65 73 74 2c 20 74 is a manifest, t
4700: 68 65 6e 20 6d 65 6e 74 69 6f 6e 3a 0a 2a 2a 0a hen mention:.**.
4710: 2a 2a 20 20 20 20 20 2a 20 49 74 27 73 20 61 72 ** * It's ar
4720: 74 69 66 61 63 74 20 49 44 0a 2a 2a 20 20 20 20 tifact ID.**
4730: 20 2a 20 64 61 74 65 20 6f 66 20 63 68 65 63 6b * date of check
4740: 2d 69 6e 0a 2a 2a 20 20 20 20 20 2a 20 43 6f 6d -in.** * Com
4750: 6d 65 6e 74 20 26 20 75 73 65 72 0a 2a 2f 0a 73 ment & user.*/.s
4760: 74 61 74 69 63 20 76 6f 69 64 20 6f 62 6a 65 63 tatic void objec
4770: 74 5f 64 65 73 63 72 69 70 74 69 6f 6e 28 0a 20 t_description(.
4780: 20 69 6e 74 20 72 69 64 2c 20 20 20 20 20 20 20 int rid,
4790: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 /* The
47a0: 20 61 72 74 69 66 61 63 74 20 49 44 20 2a 2f 0a artifact ID */.
47b0: 20 20 69 6e 74 20 6c 69 6e 6b 54 6f 56 69 65 77 int linkToView
47c0: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 , /* Ad
47d0: 64 20 76 69 65 77 65 72 20 6c 69 6e 6b 20 69 66 d viewer link if
47e0: 20 74 72 75 65 20 2a 2f 0a 20 20 42 6c 6f 62 20 true */. Blob
47f0: 2a 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 20 *pDownloadName
4800: 20 20 20 20 2f 2a 20 46 69 6c 6c 20 77 69 74 68 /* Fill with
4810: 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 an appropriate
4820: 64 6f 77 6e 6c 6f 61 64 20 6e 61 6d 65 20 2a 2f download name */
4830: 0a 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 .){. Stmt q;.
4840: 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 20 20 69 int cnt = 0;. i
4850: 6e 74 20 6e 57 69 6b 69 20 3d 20 30 3b 0a 20 20 nt nWiki = 0;.
4860: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 db_prepare(&q,.
4870: 20 20 20 22 53 45 4c 45 43 54 20 66 69 6c 65 6e "SELECT filen
4880: 61 6d 65 2e 6e 61 6d 65 2c 20 64 61 74 65 74 69 ame.name, dateti
4890: 6d 65 28 65 76 65 6e 74 2e 6d 74 69 6d 65 29 2c me(event.mtime),
48a0: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 63 6f ". " co
48b0: 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 63 6f alesce(event.eco
48c0: 6d 6d 65 6e 74 2c 65 76 65 6e 74 2e 63 6f 6d 6d mment,event.comm
48d0: 65 6e 74 29 2c 22 0a 20 20 20 20 22 20 20 20 20 ent),". "
48e0: 20 20 20 63 6f 61 6c 65 73 63 65 28 65 76 65 6e coalesce(even
48f0: 74 2e 65 75 73 65 72 2c 65 76 65 6e 74 2e 75 73 t.euser,event.us
4900: 65 72 29 2c 22 0a 20 20 20 20 22 20 20 20 20 20 er),". "
4910: 20 20 62 2e 75 75 69 64 22 0a 20 20 20 20 22 20 b.uuid". "
4920: 20 46 52 4f 4d 20 6d 6c 69 6e 6b 2c 20 66 69 6c FROM mlink, fil
4930: 65 6e 61 6d 65 2c 20 65 76 65 6e 74 2c 20 62 6c ename, event, bl
4940: 6f 62 20 61 2c 20 62 6c 6f 62 20 62 22 0a 20 20 ob a, blob b".
4950: 20 20 22 20 57 48 45 52 45 20 66 69 6c 65 6e 61 " WHERE filena
4960: 6d 65 2e 66 6e 69 64 3d 6d 6c 69 6e 6b 2e 66 6e me.fnid=mlink.fn
4970: 69 64 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 id". " AND
4980: 65 76 65 6e 74 2e 6f 62 6a 69 64 3d 6d 6c 69 6e event.objid=mlin
4990: 6b 2e 6d 69 64 22 0a 20 20 20 20 22 20 20 20 41 k.mid". " A
49a0: 4e 44 20 61 2e 72 69 64 3d 6d 6c 69 6e 6b 2e 66 ND a.rid=mlink.f
49b0: 69 64 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 id". " AND
49c0: 62 2e 72 69 64 3d 6d 6c 69 6e 6b 2e 6d 69 64 22 b.rid=mlink.mid"
49d0: 0a 20 20 20 20 22 20 20 20 41 4e 44 20 6d 6c 69 . " AND mli
49e0: 6e 6b 2e 66 69 64 3d 25 64 22 2c 0a 20 20 20 20 nk.fid=%d",.
49f0: 72 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 rid. );. while
4a00: 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 ( db_step(&q)==S
4a10: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 QLITE_ROW ){.
4a20: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 const char *zNa
4a30: 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 me = db_column_t
4a40: 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 ext(&q, 0);.
4a50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 const char *zDat
4a60: 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 e = db_column_te
4a70: 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 xt(&q, 1);. c
4a80: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 20 onst char *zCom
4a90: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
4aa0: 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e (&q, 2);. con
4ab0: 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 3d st char *zUser =
4ac0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
4ad0: 26 71 2c 20 33 29 3b 0a 20 20 20 20 63 6f 6e 73 &q, 3);. cons
4ae0: 74 20 63 68 61 72 20 2a 7a 56 65 72 73 20 3d 20 t char *zVers =
4af0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
4b00: 71 2c 20 34 29 3b 0a 20 20 20 20 69 66 28 20 63 q, 4);. if( c
4b10: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 40 20 nt>0 ){. @
4b20: 41 6c 73 6f 20 66 69 6c 65 0a 20 20 20 20 7d 65 Also file. }e
4b30: 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 46 69 6c lse{. @ Fil
4b40: 65 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 e. }. if(
4b50: 67 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 g.okHistory ){.
4b60: 20 20 20 20 20 40 20 3c 61 20 68 72 65 66 3d 22 @ <a href="
4b70: 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 %s(g.zBaseURL)/f
4b80: 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 info?name=%T(zNa
4b90: 6d 65 29 22 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f me)">%h(zName)</
4ba0: 61 3e 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 a>. }else{.
4bb0: 20 20 20 20 40 20 25 68 28 7a 4e 61 6d 65 29 0a @ %h(zName).
4bc0: 20 20 20 20 7d 0a 20 20 20 20 40 20 70 61 72 74 }. @ part
4bd0: 20 6f 66 20 63 68 65 63 6b 2d 69 6e 0a 20 20 20 of check-in.
4be0: 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 75 hyperlink_to_uu
4bf0: 69 64 28 7a 56 65 72 73 29 3b 0a 20 20 20 20 40 id(zVers);. @
4c00: 20 2d 20 25 77 28 7a 43 6f 6d 29 20 62 79 20 0a - %w(zCom) by .
4c10: 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f hyperlink_to
4c20: 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a 44 61 74 _user(zUser,zDat
4c30: 65 2c 22 20 6f 6e 22 29 3b 0a 20 20 20 20 68 79 e," on");. hy
4c40: 70 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 perlink_to_date(
4c50: 7a 44 61 74 65 2c 22 2e 22 29 3b 0a 20 20 20 20 zDate,".");.
4c60: 63 6e 74 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 cnt++;. if( p
4c70: 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 26 26 20 DownloadName &&
4c80: 62 6c 6f 62 5f 73 69 7a 65 28 70 44 6f 77 6e 6c blob_size(pDownl
4c90: 6f 61 64 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 oadName)==0 ){.
4ca0: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 blob_append
4cb0: 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 2c 20 (pDownloadName,
4cc0: 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 zName, -1);.
4cd0: 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c }. }. db_final
4ce0: 69 7a 65 28 26 71 29 3b 0a 20 20 64 62 5f 70 72 ize(&q);. db_pr
4cf0: 65 70 61 72 65 28 26 71 2c 20 0a 20 20 20 20 22 epare(&q, . "
4d00: 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 61 SELECT substr(ta
4d10: 67 6e 61 6d 65 2c 20 36 2c 20 31 30 30 30 30 29 gname, 6, 10000)
4d20: 2c 20 64 61 74 65 74 69 6d 65 28 65 76 65 6e 74 , datetime(event
4d30: 2e 6d 74 69 6d 65 29 2c 22 0a 20 20 20 20 22 20 .mtime),". "
4d40: 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65 coalesce(e
4d50: 76 65 6e 74 2e 65 75 73 65 72 2c 20 65 76 65 6e vent.euser, even
4d60: 74 2e 75 73 65 72 29 22 0a 20 20 20 20 22 20 20 t.user)". "
4d70: 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 61 FROM tagxref, ta
4d80: 67 2c 20 65 76 65 6e 74 22 0a 20 20 20 20 22 20 g, event". "
4d90: 57 48 45 52 45 20 74 61 67 78 72 65 66 2e 72 69 WHERE tagxref.ri
4da0: 64 3d 25 64 22 0a 20 20 20 20 22 20 20 20 41 4e d=%d". " AN
4db0: 44 20 74 61 67 2e 74 61 67 69 64 3d 74 61 67 78 D tag.tagid=tagx
4dc0: 72 65 66 2e 74 61 67 69 64 22 20 0a 20 20 20 20 ref.tagid" .
4dd0: 22 20 20 20 41 4e 44 20 74 61 67 2e 74 61 67 6e " AND tag.tagn
4de0: 61 6d 65 20 4c 49 4b 45 20 27 77 69 6b 69 2d 25 ame LIKE 'wiki-%
4df0: 25 27 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 %'". " AND
4e00: 65 76 65 6e 74 2e 6f 62 6a 69 64 3d 74 61 67 78 event.objid=tagx
4e10: 72 65 66 2e 72 69 64 22 2c 0a 20 20 20 20 72 69 ref.rid",. ri
4e20: 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 d. );. while(
4e30: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c db_step(&q)==SQL
4e40: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 ITE_ROW ){. c
4e50: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 67 65 onst char *zPage
4e60: 6e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e name = db_column
4e70: 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 _text(&q, 0);.
4e80: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 const char *zD
4e90: 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ate = db_column_
4ea0: 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 text(&q, 1);.
4eb0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 const char *zUs
4ec0: 65 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 er = db_column_t
4ed0: 65 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 ext(&q, 2);.
4ee0: 69 66 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 if( cnt>0 ){.
4ef0: 20 20 20 40 20 41 6c 73 6f 20 77 69 6b 69 20 70 @ Also wiki p
4f00: 61 67 65 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 age. }else{.
4f10: 20 20 20 20 20 40 20 57 69 6b 69 20 70 61 67 65 @ Wiki page
4f20: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 67 . }. if( g
4f30: 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 .okHistory ){.
4f40: 20 20 20 20 40 20 5b 3c 61 20 68 72 65 66 3d 22 @ [<a href="
4f50: 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 77 %s(g.zBaseURL)/w
4f60: 69 6b 69 3f 6e 61 6d 65 3d 25 74 28 7a 50 61 67 iki?name=%t(zPag
4f70: 65 6e 61 6d 65 29 22 3e 25 68 28 7a 50 61 67 65 ename)">%h(zPage
4f80: 6e 61 6d 65 29 3c 2f 61 3e 5d 0a 20 20 20 20 7d name)</a>]. }
4f90: 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 5b 25 else{. @ [%
4fa0: 68 28 7a 50 61 67 65 6e 61 6d 65 29 5d 0a 20 20 h(zPagename)].
4fb0: 20 20 7d 0a 20 20 20 20 40 20 62 79 0a 20 20 20 }. @ by.
4fc0: 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 hyperlink_to_us
4fd0: 65 72 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 er(zUser,zDate,"
4fe0: 20 6f 6e 22 29 3b 0a 20 20 20 20 68 79 70 65 72 on");. hyper
4ff0: 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 61 link_to_date(zDa
5000: 74 65 2c 22 2e 22 29 3b 0a 20 20 20 20 6e 57 69 te,".");. nWi
5010: 6b 69 2b 2b 3b 0a 20 20 20 20 63 6e 74 2b 2b 3b ki++;. cnt++;
5020: 0a 20 20 20 20 69 66 28 20 70 44 6f 77 6e 6c 6f . if( pDownlo
5030: 61 64 4e 61 6d 65 20 26 26 20 62 6c 6f 62 5f 73 adName && blob_s
5040: 69 7a 65 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d ize(pDownloadNam
5050: 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 e)==0 ){. b
5060: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e lob_append(pDown
5070: 6c 6f 61 64 4e 61 6d 65 2c 20 7a 50 61 67 65 6e loadName, zPagen
5080: 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a ame, -1);. }.
5090: 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a }. db_finaliz
50a0: 65 28 26 71 29 3b 0a 20 20 69 66 28 20 6e 57 69 e(&q);. if( nWi
50b0: 6b 69 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 5f ki==0 ){. db_
50c0: 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 prepare(&q,.
50d0: 20 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 "SELECT dateti
50e0: 6d 65 28 6d 74 69 6d 65 29 2c 20 75 73 65 72 2c me(mtime), user,
50f0: 20 63 6f 6d 6d 65 6e 74 2c 20 74 79 70 65 2c 20 comment, type,
5100: 75 75 69 64 22 0a 20 20 20 20 20 20 22 20 20 46 uuid". " F
5110: 52 4f 4d 20 65 76 65 6e 74 2c 20 62 6c 6f 62 22 ROM event, blob"
5120: 0a 20 20 20 20 20 20 22 20 57 48 45 52 45 20 65 . " WHERE e
5130: 76 65 6e 74 2e 6f 62 6a 69 64 3d 25 64 22 0a 20 vent.objid=%d".
5140: 20 20 20 20 20 22 20 20 20 41 4e 44 20 62 6c 6f " AND blo
5150: 62 2e 72 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 b.rid=%d",.
5160: 20 72 69 64 2c 20 72 69 64 0a 20 20 20 20 29 3b rid, rid. );
5170: 0a 20 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 . while( db_s
5180: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
5190: 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e ROW ){. con
51a0: 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 3d st char *zDate =
51b0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
51c0: 26 71 2c 20 30 29 3b 0a 20 20 20 20 20 20 63 6f &q, 0);. co
51d0: 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 nst char *zUser
51e0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
51f0: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 20 20 63 (&q, 1);. c
5200: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 20 onst char *zCom
5210: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
5220: 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 20 20 63 (&q, 2);. c
5230: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 onst char *zType
5240: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
5250: 74 28 26 71 2c 20 33 29 3b 0a 20 20 20 20 20 20 t(&q, 3);.
5260: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 const char *zUui
5270: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 d = db_column_te
5280: 78 74 28 26 71 2c 20 34 29 3b 0a 20 20 20 20 20 xt(&q, 4);.
5290: 20 69 66 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 if( cnt>0 ){.
52a0: 20 20 20 20 20 20 40 20 41 6c 73 6f 0a 20 20 20 @ Also.
52b0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a }. if( z
52c0: 54 79 70 65 5b 30 5d 3d 3d 27 77 27 20 29 7b 0a Type[0]=='w' ){.
52d0: 20 20 20 20 20 20 20 20 40 20 57 69 6b 69 20 65 @ Wiki e
52e0: 64 69 74 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 dit. }else
52f0: 69 66 28 20 7a 54 79 70 65 5b 30 5d 3d 3d 27 74 if( zType[0]=='t
5300: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 54 ' ){. @ T
5310: 69 63 6b 65 74 20 63 68 61 6e 67 65 0a 20 20 20 icket change.
5320: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 54 79 }else if( zTy
5330: 70 65 5b 30 5d 3d 3d 27 63 27 20 29 7b 0a 20 20 pe[0]=='c' ){.
5340: 20 20 20 20 20 20 40 20 4d 61 6e 69 66 65 73 74 @ Manifest
5350: 20 6f 66 20 63 68 65 63 6b 2d 69 6e 0a 20 20 20 of check-in.
5360: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
5370: 20 20 40 20 43 6f 6e 74 72 6f 6c 20 66 69 6c 65 @ Control file
5380: 20 72 65 66 65 72 65 6e 63 69 6e 67 0a 20 20 20 referencing.
5390: 20 20 20 7d 0a 20 20 20 20 20 20 68 79 70 65 72 }. hyper
53a0: 6c 69 6e 6b 5f 74 6f 5f 75 75 69 64 28 7a 55 75 link_to_uuid(zUu
53b0: 69 64 29 3b 0a 20 20 20 20 20 20 40 20 2d 20 25 id);. @ - %
53c0: 77 28 7a 43 6f 6d 29 20 62 79 0a 20 20 20 20 20 w(zCom) by.
53d0: 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 hyperlink_to_us
53e0: 65 72 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 er(zUser,zDate,"
53f0: 20 6f 6e 22 29 3b 0a 20 20 20 20 20 20 68 79 70 on");. hyp
5400: 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a erlink_to_date(z
5410: 44 61 74 65 2c 20 22 2e 22 29 3b 0a 20 20 20 20 Date, ".");.
5420: 20 20 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 4e if( pDownloadN
5430: 61 6d 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a 65 ame && blob_size
5440: 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3d (pDownloadName)=
5450: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 62 6c =0 ){. bl
5460: 6f 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c ob_append(pDownl
5470: 6f 61 64 4e 61 6d 65 2c 20 7a 55 75 69 64 2c 20 oadName, zUuid,
5480: 2d 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 -1);. }.
5490: 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a cnt++;. }.
54a0: 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 db_finalize(
54b0: 26 71 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 &q);. }. if( c
54c0: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 nt==0 ){. cha
54d0: 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 r *zUuid = db_te
54e0: 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 xt(0, "SELECT uu
54f0: 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 id FROM blob WHE
5500: 52 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 RE rid=%d", rid)
5510: 3b 0a 20 20 20 20 40 20 43 6f 6e 74 72 6f 6c 20 ;. @ Control
5520: 61 72 74 69 66 61 63 74 2e 0a 20 20 20 20 69 66 artifact.. if
5530: 28 20 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 ( pDownloadName
5540: 26 26 20 62 6c 6f 62 5f 73 69 7a 65 28 70 44 6f && blob_size(pDo
5550: 77 6e 6c 6f 61 64 4e 61 6d 65 29 3d 3d 30 20 29 wnloadName)==0 )
5560: 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 {. blob_app
5570: 65 6e 64 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d end(pDownloadNam
5580: 65 2c 20 7a 55 75 69 64 2c 20 2d 31 29 3b 0a 20 e, zUuid, -1);.
5590: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 }. }else if(
55a0: 20 6c 69 6e 6b 54 6f 56 69 65 77 20 26 26 20 67 linkToView && g
55b0: 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 .okHistory ){.
55c0: 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 @ <a href="%s(
55d0: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 69 g.zBaseURL)/arti
55e0: 66 61 63 74 2f 25 64 28 72 69 64 29 22 3e 5b 76 fact/%d(rid)">[v
55f0: 69 65 77 5d 3c 2f 61 3e 0a 20 20 7d 0a 7d 0a 0a iew]</a>. }.}..
5600: 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 ./*.** WEBPAGE:
5610: 66 64 69 66 66 0a 2a 2a 0a 2a 2a 20 54 77 6f 20 fdiff.**.** Two
5620: 61 72 67 75 6d 65 6e 74 73 2c 20 76 31 20 61 6e arguments, v1 an
5630: 64 20 76 32 2c 20 61 72 65 20 69 6e 74 65 67 65 d v2, are intege
5640: 72 73 2e 20 20 53 68 6f 77 20 74 68 65 20 64 69 rs. Show the di
5650: 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e fference between
5660: 0a 2a 2a 20 74 68 65 20 74 77 6f 20 72 65 63 6f .** the two reco
5670: 72 64 73 2e 0a 2a 2f 0a 76 6f 69 64 20 64 69 66 rds..*/.void dif
5680: 66 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 f_page(void){.
5690: 69 6e 74 20 76 31 20 3d 20 6e 61 6d 65 5f 74 6f int v1 = name_to
56a0: 5f 72 69 64 28 50 44 28 22 76 31 22 2c 22 30 22 _rid(PD("v1","0"
56b0: 29 29 3b 0a 20 20 69 6e 74 20 76 32 20 3d 20 6e ));. int v2 = n
56c0: 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 76 ame_to_rid(PD("v
56d0: 32 22 2c 22 30 22 29 29 3b 0a 20 20 42 6c 6f 62 2","0"));. Blob
56e0: 20 63 31 2c 20 63 32 2c 20 64 69 66 66 3b 0a 0a c1, c2, diff;..
56f0: 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 login_check_cr
5700: 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 edentials();. i
5710: 66 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b 20 f( !g.okRead ){
5720: 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 login_needed();
5730: 72 65 74 75 72 6e 3b 20 7d 0a 20 20 73 74 79 6c return; }. styl
5740: 65 5f 68 65 61 64 65 72 28 22 44 69 66 66 22 29 e_header("Diff")
5750: 3b 0a 20 20 40 20 3c 68 32 3e 44 69 66 66 65 72 ;. @ <h2>Differ
5760: 65 6e 63 65 73 20 46 72 6f 6d 3a 3c 2f 68 32 3e ences From:</h2>
5770: 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 . @ <blockquote
5780: 3e 0a 20 20 6f 62 6a 65 63 74 5f 64 65 73 63 72 >. object_descr
5790: 69 70 74 69 6f 6e 28 76 31 2c 20 31 2c 20 30 29 iption(v1, 1, 0)
57a0: 3b 0a 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f ;. @ </blockquo
57b0: 74 65 3e 0a 20 20 40 20 3c 68 32 3e 54 6f 3a 3c te>. @ <h2>To:<
57c0: 2f 68 32 3e 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 /h2>. @ <blockq
57d0: 75 6f 74 65 3e 0a 20 20 6f 62 6a 65 63 74 5f 64 uote>. object_d
57e0: 65 73 63 72 69 70 74 69 6f 6e 28 76 32 2c 20 31 escription(v2, 1
57f0: 2c 20 30 29 3b 0a 20 20 40 20 3c 2f 62 6c 6f 63 , 0);. @ </bloc
5800: 6b 71 75 6f 74 65 3e 0a 20 20 40 20 3c 68 72 3e kquote>. @ <hr>
5810: 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 . @ <blockquote
5820: 3e 3c 70 72 65 3e 0a 20 20 63 6f 6e 74 65 6e 74 ><pre>. content
5830: 5f 67 65 74 28 76 31 2c 20 26 63 31 29 3b 0a 20 _get(v1, &c1);.
5840: 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 76 32 2c content_get(v2,
5850: 20 26 63 32 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65 &c2);. blob_ze
5860: 72 6f 28 26 64 69 66 66 29 3b 0a 20 20 74 65 78 ro(&diff);. tex
5870: 74 5f 64 69 66 66 28 26 63 31 2c 20 26 63 32 2c t_diff(&c1, &c2,
5880: 20 26 64 69 66 66 2c 20 34 29 3b 0a 20 20 62 6c &diff, 4);. bl
5890: 6f 62 5f 72 65 73 65 74 28 26 63 31 29 3b 0a 20 ob_reset(&c1);.
58a0: 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 63 32 29 blob_reset(&c2)
58b0: 3b 0a 20 20 40 20 25 68 28 62 6c 6f 62 5f 73 74 ;. @ %h(blob_st
58c0: 72 28 26 64 69 66 66 29 29 0a 20 20 40 20 3c 2f r(&diff)). @ </
58d0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 pre></blockquote
58e0: 3e 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 >. blob_reset(&
58f0: 64 69 66 66 29 3b 0a 20 20 73 74 79 6c 65 5f 66 diff);. style_f
5900: 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a ooter();.}../*.*
5910: 2a 20 57 45 42 50 41 47 45 3a 20 72 61 77 0a 2a * WEBPAGE: raw.*
5920: 2a 20 55 52 4c 3a 20 2f 72 61 77 3f 6e 61 6d 65 * URL: /raw?name
5930: 3d 41 52 54 49 46 41 43 54 49 44 26 6d 3d 54 59 =ARTIFACTID&m=TY
5940: 50 45 0a 2a 2a 20 0a 2a 2a 20 52 65 74 75 72 6e PE.** .** Return
5950: 20 74 68 65 20 75 6e 69 6e 74 65 72 70 72 65 74 the uninterpret
5960: 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6e ed content of an
5970: 20 61 72 74 69 66 61 63 74 2e 20 20 55 73 65 64 artifact. Used
5980: 20 70 72 69 6d 61 72 69 6c 79 0a 2a 2a 20 74 6f primarily.** to
5990: 20 76 69 65 77 20 61 72 74 69 66 61 63 74 73 20 view artifacts
59a0: 74 68 61 74 20 61 72 65 20 69 6d 61 67 65 73 2e that are images.
59b0: 0a 2a 2f 0a 76 6f 69 64 20 72 61 77 61 72 74 69 .*/.void rawarti
59c0: 66 61 63 74 5f 70 61 67 65 28 76 6f 69 64 29 7b fact_page(void){
59d0: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 63 6f . int rid;. co
59e0: 6e 73 74 20 63 68 61 72 20 2a 7a 4d 69 6d 65 3b nst char *zMime;
59f0: 0a 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 3b . Blob content;
5a00: 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 .. rid = name_t
5a10: 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c o_rid(PD("name",
5a20: 22 30 22 29 29 3b 0a 20 20 7a 4d 69 6d 65 20 3d "0"));. zMime =
5a30: 20 50 44 28 22 6d 22 2c 22 61 70 70 6c 69 63 61 PD("m","applica
5a40: 74 69 6f 6e 2f 78 2d 66 6f 73 73 69 6c 2d 61 72 tion/x-fossil-ar
5a50: 74 69 66 61 63 74 22 29 3b 0a 20 20 6c 6f 67 69 tifact");. logi
5a60: 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 n_check_credenti
5a70: 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e als();. if( !g.
5a80: 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f okRead ){ login_
5a90: 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e needed(); return
5aa0: 3b 20 7d 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 ; }. if( rid==0
5ab0: 20 29 7b 20 63 67 69 5f 72 65 64 69 72 65 63 74 ){ cgi_redirect
5ac0: 28 22 2f 68 6f 6d 65 22 29 3b 20 7d 0a 20 20 63 ("/home"); }. c
5ad0: 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 ontent_get(rid,
5ae0: 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 63 67 69 &content);. cgi
5af0: 5f 73 65 74 5f 63 6f 6e 74 65 6e 74 5f 74 79 70 _set_content_typ
5b00: 65 28 7a 4d 69 6d 65 29 3b 0a 20 20 63 67 69 5f e(zMime);. cgi_
5b10: 73 65 74 5f 63 6f 6e 74 65 6e 74 28 26 63 6f 6e set_content(&con
5b20: 74 65 6e 74 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 tent);.}../*.**
5b30: 52 65 6e 64 65 72 20 61 20 68 65 78 20 64 75 6d Render a hex dum
5b40: 70 20 6f 66 20 61 20 66 69 6c 65 2e 0a 2a 2f 0a p of a file..*/.
5b50: 73 74 61 74 69 63 20 76 6f 69 64 20 68 65 78 64 static void hexd
5b60: 75 6d 70 28 42 6c 6f 62 20 2a 70 42 6c 6f 62 29 ump(Blob *pBlob)
5b70: 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e {. const unsign
5b80: 65 64 20 63 68 61 72 20 2a 78 3b 0a 20 20 69 6e ed char *x;. in
5b90: 74 20 6e 2c 20 69 2c 20 6a 2c 20 6b 3b 0a 20 20 t n, i, j, k;.
5ba0: 63 68 61 72 20 7a 4c 69 6e 65 5b 31 30 30 5d 3b char zLine[100];
5bb0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 . static const
5bc0: 63 68 61 72 20 7a 48 65 78 5b 5d 20 3d 20 22 30 char zHex[] = "0
5bd0: 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 22 123456789abcdef"
5be0: 3b 0a 0a 20 20 78 20 3d 20 28 63 6f 6e 73 74 20 ;.. x = (const
5bf0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 62 unsigned char*)b
5c00: 6c 6f 62 5f 62 75 66 66 65 72 28 70 42 6c 6f 62 lob_buffer(pBlob
5c10: 29 3b 0a 20 20 6e 20 3d 20 62 6c 6f 62 5f 73 69 );. n = blob_si
5c20: 7a 65 28 70 42 6c 6f 62 29 3b 0a 20 20 66 6f 72 ze(pBlob);. for
5c30: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 3d 31 36 (i=0; i<n; i+=16
5c40: 29 7b 0a 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 ){. j = 0;.
5c50: 20 20 7a 4c 69 6e 65 5b 30 5d 20 3d 20 7a 48 65 zLine[0] = zHe
5c60: 78 5b 28 69 3e 3e 32 34 29 26 30 78 66 5d 3b 0a x[(i>>24)&0xf];.
5c70: 20 20 20 20 7a 4c 69 6e 65 5b 31 5d 20 3d 20 7a zLine[1] = z
5c80: 48 65 78 5b 28 69 3e 3e 31 36 29 26 30 78 66 5d Hex[(i>>16)&0xf]
5c90: 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 32 5d 20 3d ;. zLine[2] =
5ca0: 20 7a 48 65 78 5b 28 69 3e 3e 38 29 26 30 78 66 zHex[(i>>8)&0xf
5cb0: 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 33 5d 20 ];. zLine[3]
5cc0: 3d 20 7a 48 65 78 5b 69 26 30 78 66 5d 3b 0a 20 = zHex[i&0xf];.
5cd0: 20 20 20 7a 4c 69 6e 65 5b 34 5d 20 3d 20 27 3a zLine[4] = ':
5ce0: 27 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a ';. sprintf(z
5cf0: 4c 69 6e 65 2c 20 22 25 30 34 78 3a 20 22 2c 20 Line, "%04x: ",
5d00: 69 29 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b i);. for(j=0;
5d10: 20 6a 3c 31 36 3b 20 6a 2b 2b 29 7b 0a 20 20 20 j<16; j++){.
5d20: 20 20 20 6b 20 3d 20 35 2b 6a 2a 33 3b 0a 20 20 k = 5+j*3;.
5d30: 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 3d 20 27 zLine[k] = '
5d40: 20 27 3b 0a 20 20 20 20 20 20 69 66 28 20 69 2b ';. if( i+
5d50: 6a 3c 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 75 j<n ){. u
5d60: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 20 3d nsigned char c =
5d70: 20 78 5b 69 2b 6a 5d 3b 0a 20 20 20 20 20 20 20 x[i+j];.
5d80: 20 7a 4c 69 6e 65 5b 6b 2b 31 5d 20 3d 20 7a 48 zLine[k+1] = zH
5d90: 65 78 5b 63 3e 3e 34 5d 3b 0a 20 20 20 20 20 20 ex[c>>4];.
5da0: 20 20 7a 4c 69 6e 65 5b 6b 2b 32 5d 20 3d 20 7a zLine[k+2] = z
5db0: 48 65 78 5b 63 26 30 78 66 5d 3b 0a 20 20 20 20 Hex[c&0xf];.
5dc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
5dd0: 20 7a 4c 69 6e 65 5b 6b 2b 31 5d 20 3d 20 27 20 zLine[k+1] = '
5de0: 27 3b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 ';. zLine
5df0: 5b 6b 2b 32 5d 20 3d 20 27 20 27 3b 0a 20 20 20 [k+2] = ' ';.
5e00: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a }. }. z
5e10: 4c 69 6e 65 5b 35 33 5d 20 3d 20 27 20 27 3b 0a Line[53] = ' ';.
5e20: 20 20 20 20 7a 4c 69 6e 65 5b 35 34 5d 20 3d 20 zLine[54] =
5e30: 27 20 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 ' ';. for(j=0
5e40: 3b 20 6a 3c 31 36 3b 20 6a 2b 2b 29 7b 0a 20 20 ; j<16; j++){.
5e50: 20 20 20 20 6b 20 3d 20 6a 2b 35 35 3b 0a 20 20 k = j+55;.
5e60: 20 20 20 20 69 66 28 20 69 2b 6a 3c 6e 20 29 7b if( i+j<n ){
5e70: 0a 20 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 . unsigne
5e80: 64 20 63 68 61 72 20 63 20 3d 20 78 5b 69 2b 6a d char c = x[i+j
5e90: 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 ];. if( c
5ea0: 3e 3d 30 78 32 30 20 26 26 20 63 3c 3d 30 78 37 >=0x20 && c<=0x7
5eb0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 7a e ){. z
5ec0: 4c 69 6e 65 5b 6b 5d 20 3d 20 63 3b 0a 20 20 20 Line[k] = c;.
5ed0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 }else{.
5ee0: 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 3d zLine[k] =
5ef0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a '.';. }.
5f00: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
5f10: 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 3d 20 zLine[k] =
5f20: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0;. }. }
5f30: 0a 20 20 20 20 7a 4c 69 6e 65 5b 37 31 5d 20 3d . zLine[71] =
5f40: 20 30 3b 0a 20 20 20 20 40 20 25 68 28 7a 4c 69 0;. @ %h(zLi
5f50: 6e 65 29 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a ne). }.}../*.**
5f60: 20 57 45 42 50 41 47 45 3a 20 68 65 78 64 75 6d WEBPAGE: hexdum
5f70: 70 0a 2a 2a 20 55 52 4c 3a 20 2f 68 65 78 64 75 p.** URL: /hexdu
5f80: 6d 70 3f 6e 61 6d 65 3d 41 52 54 49 46 41 43 54 mp?name=ARTIFACT
5f90: 49 44 0a 2a 2a 20 0a 2a 2a 20 53 68 6f 77 20 74 ID.** .** Show t
5fa0: 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 he complete cont
5fb0: 65 6e 74 20 6f 66 20 61 20 66 69 6c 65 20 69 64 ent of a file id
5fc0: 65 6e 74 69 66 69 65 64 20 62 79 20 41 52 54 49 entified by ARTI
5fd0: 46 41 43 54 49 44 0a 2a 2a 20 61 73 20 70 72 65 FACTID.** as pre
5fe0: 66 6f 72 6d 61 74 74 65 64 20 74 65 78 74 2e 0a formatted text..
5ff0: 2a 2f 0a 76 6f 69 64 20 68 65 78 64 75 6d 70 5f */.void hexdump_
6000: 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 69 6e page(void){. in
6010: 74 20 72 69 64 3b 0a 20 20 42 6c 6f 62 20 63 6f t rid;. Blob co
6020: 6e 74 65 6e 74 3b 0a 20 20 42 6c 6f 62 20 64 6f ntent;. Blob do
6030: 77 6e 6c 6f 61 64 4e 61 6d 65 3b 0a 20 20 63 68 wnloadName;. ch
6040: 61 72 20 2a 7a 55 75 69 64 3b 0a 0a 20 20 72 69 ar *zUuid;.. ri
6050: 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 d = name_to_rid(
6060: 50 44 28 22 6e 61 6d 65 22 2c 22 30 22 29 29 3b PD("name","0"));
6070: 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 . login_check_c
6080: 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 redentials();.
6090: 69 66 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b if( !g.okRead ){
60a0: 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b login_needed();
60b0: 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 69 66 28 return; }. if(
60c0: 20 72 69 64 3d 3d 30 20 29 7b 20 63 67 69 5f 72 rid==0 ){ cgi_r
60d0: 65 64 69 72 65 63 74 28 22 2f 68 6f 6d 65 22 29 edirect("/home")
60e0: 3b 20 7d 0a 20 20 69 66 28 20 67 2e 6f 6b 41 64 ; }. if( g.okAd
60f0: 6d 69 6e 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 min ){. const
6100: 20 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 char *zUuid = d
6110: 62 5f 74 65 78 74 28 22 22 2c 20 22 53 45 4c 45 b_text("", "SELE
6120: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f CT uuid FROM blo
6130: 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c b WHERE rid=%d",
6140: 20 72 69 64 29 3b 0a 20 20 20 20 69 66 28 20 64 rid);. if( d
6150: 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 b_exists("SELECT
6160: 20 31 20 46 52 4f 4d 20 73 68 75 6e 20 57 48 45 1 FROM shun WHE
6170: 52 45 20 75 75 69 64 3d 27 25 73 27 22 2c 20 7a RE uuid='%s'", z
6180: 55 75 69 64 29 20 29 7b 0a 20 20 20 20 20 20 73 Uuid) ){. s
6190: 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 tyle_submenu_ele
61a0: 6d 65 6e 74 28 22 55 6e 73 68 75 6e 22 2c 22 55 ment("Unshun","U
61b0: 6e 73 68 75 6e 22 2c 20 22 25 73 2f 73 68 75 6e nshun", "%s/shun
61c0: 3f 75 75 69 64 3d 25 73 26 73 75 62 3d 31 22 2c ?uuid=%s&sub=1",
61d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 2e 7a . g.z
61e0: 54 6f 70 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 Top, zUuid);.
61f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 74 }else{. st
6200: 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d yle_submenu_elem
6210: 65 6e 74 28 22 53 68 75 6e 22 2c 22 53 68 75 6e ent("Shun","Shun
6220: 22 2c 20 22 25 73 2f 73 68 75 6e 3f 73 68 75 6e ", "%s/shun?shun
6230: 3d 25 73 23 61 64 64 73 68 75 6e 22 2c 0a 20 20 =%s#addshun",.
6240: 20 20 20 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 g.zTop
6250: 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 7d 0a , zUuid);. }.
6260: 20 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 }. style_head
6270: 65 72 28 22 48 65 78 20 41 72 74 69 66 61 63 74 er("Hex Artifact
6280: 20 43 6f 6e 74 65 6e 74 22 29 3b 0a 20 20 7a 55 Content");. zU
6290: 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 22 3f uid = db_text("?
62a0: 22 2c 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 ","SELECT uuid F
62b0: 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 ROM blob WHERE r
62c0: 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 id=%d", rid);.
62d0: 40 20 3c 68 32 3e 41 72 74 69 66 61 63 74 20 25 @ <h2>Artifact %
62e0: 73 28 7a 55 75 69 64 29 3a 3c 2f 68 32 3e 0a 20 s(zUuid):</h2>.
62f0: 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a @ <blockquote>.
6300: 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 64 6f 77 blob_zero(&dow
6310: 6e 6c 6f 61 64 4e 61 6d 65 29 3b 0a 20 20 6f 62 nloadName);. ob
6320: 6a 65 63 74 5f 64 65 73 63 72 69 70 74 69 6f 6e ject_description
6330: 28 72 69 64 2c 20 30 2c 20 26 64 6f 77 6e 6c 6f (rid, 0, &downlo
6340: 61 64 4e 61 6d 65 29 3b 0a 20 20 73 74 79 6c 65 adName);. style
6350: 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 _submenu_element
6360: 28 22 44 6f 77 6e 6c 6f 61 64 22 2c 20 22 44 6f ("Download", "Do
6370: 77 6e 6c 6f 61 64 22 2c 20 0a 20 20 20 20 20 20 wnload", .
6380: 20 20 22 25 73 2f 72 61 77 2f 25 54 3f 6e 61 6d "%s/raw/%T?nam
6390: 65 3d 25 64 22 2c 20 67 2e 7a 42 61 73 65 55 52 e=%d", g.zBaseUR
63a0: 4c 2c 20 62 6c 6f 62 5f 73 74 72 28 26 64 6f 77 L, blob_str(&dow
63b0: 6e 6c 6f 61 64 4e 61 6d 65 29 2c 20 72 69 64 29 nloadName), rid)
63c0: 3b 0a 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f ;. @ </blockquo
63d0: 74 65 3e 0a 20 20 40 20 3c 68 72 3e 0a 20 20 63 te>. @ <hr>. c
63e0: 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 ontent_get(rid,
63f0: 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 40 20 3c &content);. @ <
6400: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e blockquote><pre>
6410: 0a 20 20 68 65 78 64 75 6d 70 28 26 63 6f 6e 74 . hexdump(&cont
6420: 65 6e 74 29 3b 0a 20 20 40 20 3c 2f 70 72 65 3e ent);. @ </pre>
6430: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 </blockquote>.
6440: 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a style_footer();.
6450: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 }../*.** WEBPAGE
6460: 3a 20 61 72 74 69 66 61 63 74 0a 2a 2a 20 55 52 : artifact.** UR
6470: 4c 3a 20 2f 61 72 74 69 66 61 63 74 3f 6e 61 6d L: /artifact?nam
6480: 65 3d 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 20 e=ARTIFACTID.**
6490: 0a 2a 2a 20 53 68 6f 77 20 74 68 65 20 63 6f 6d .** Show the com
64a0: 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66 plete content of
64b0: 20 61 20 66 69 6c 65 20 69 64 65 6e 74 69 66 69 a file identifi
64c0: 65 64 20 62 79 20 41 52 54 49 46 41 43 54 49 44 ed by ARTIFACTID
64d0: 0a 2a 2a 20 61 73 20 70 72 65 66 6f 72 6d 61 74 .** as preformat
64e0: 74 65 64 20 74 65 78 74 2e 0a 2a 2f 0a 76 6f 69 ted text..*/.voi
64f0: 64 20 61 72 74 69 66 61 63 74 5f 70 61 67 65 28 d artifact_page(
6500: 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 void){. int rid
6510: 3b 0a 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 ;. Blob content
6520: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a ;. const char *
6530: 7a 4d 69 6d 65 3b 0a 20 20 42 6c 6f 62 20 64 6f zMime;. Blob do
6540: 77 6e 6c 6f 61 64 4e 61 6d 65 3b 0a 20 20 69 6e wnloadName;. in
6550: 74 20 72 65 6e 64 65 72 41 73 57 69 6b 69 20 3d t renderAsWiki =
6560: 20 30 3b 0a 20 20 69 6e 74 20 72 65 6e 64 65 72 0;. int render
6570: 41 73 48 74 6d 6c 20 3d 20 30 3b 0a 20 20 63 6f AsHtml = 0;. co
6580: 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 3b nst char *zUuid;
6590: 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 .. rid = name_t
65a0: 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c o_rid(PD("name",
65b0: 22 30 22 29 29 3b 0a 20 20 6c 6f 67 69 6e 5f 63 "0"));. login_c
65c0: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 heck_credentials
65d0: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 ();. if( !g.okR
65e0: 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 ead ){ login_nee
65f0: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
6600: 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b . if( rid==0 ){
6610: 20 63 67 69 5f 72 65 64 69 72 65 63 74 28 22 2f cgi_redirect("/
6620: 68 6f 6d 65 22 29 3b 20 7d 0a 20 20 69 66 28 20 home"); }. if(
6630: 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 20 20 g.okAdmin ){.
6640: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 const char *zUu
6650: 69 64 20 3d 20 64 62 5f 74 65 78 74 28 22 22 2c id = db_text("",
6660: 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 "SELECT uuid FR
6670: 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 OM blob WHERE ri
6680: 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 20 d=%d", rid);.
6690: 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 if( db_exists("
66a0: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 73 68 SELECT 1 FROM sh
66b0: 75 6e 20 57 48 45 52 45 20 75 75 69 64 3d 27 25 un WHERE uuid='%
66c0: 73 27 22 2c 20 7a 55 75 69 64 29 20 29 7b 0a 20 s'", zUuid) ){.
66d0: 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 style_subme
66e0: 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 55 6e 73 68 nu_element("Unsh
66f0: 75 6e 22 2c 22 55 6e 73 68 75 6e 22 2c 20 22 25 un","Unshun", "%
6700: 73 2f 73 68 75 6e 3f 75 75 69 64 3d 25 73 26 73 s/shun?uuid=%s&s
6710: 75 62 3d 31 22 2c 0a 20 20 20 20 20 20 20 20 20 ub=1",.
6720: 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 g.zTop, zUuid
6730: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 );. }else{.
6740: 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e style_submen
6750: 75 5f 65 6c 65 6d 65 6e 74 28 22 53 68 75 6e 22 u_element("Shun"
6760: 2c 22 53 68 75 6e 22 2c 20 22 25 73 2f 73 68 75 ,"Shun", "%s/shu
6770: 6e 3f 73 68 75 6e 3d 25 73 23 61 64 64 73 68 75 n?shun=%s#addshu
6780: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 n",.
6790: 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 3b 0a g.zTop, zUuid);.
67a0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 74 79 6c }. }. styl
67b0: 65 5f 68 65 61 64 65 72 28 22 41 72 74 69 66 61 e_header("Artifa
67c0: 63 74 20 43 6f 6e 74 65 6e 74 22 29 3b 0a 20 20 ct Content");.
67d0: 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 zUuid = db_text(
67e0: 22 3f 22 2c 20 22 53 45 4c 45 43 54 20 75 75 69 "?", "SELECT uui
67f0: 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 d FROM blob WHER
6800: 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b E rid=%d", rid);
6810: 0a 20 20 40 20 3c 68 32 3e 41 72 74 69 66 61 63 . @ <h2>Artifac
6820: 74 20 25 73 28 7a 55 75 69 64 29 3c 2f 68 32 3e t %s(zUuid)</h2>
6830: 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 . @ <blockquote
6840: 3e 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 64 >. blob_zero(&d
6850: 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3b 0a 20 20 ownloadName);.
6860: 6f 62 6a 65 63 74 5f 64 65 73 63 72 69 70 74 69 object_descripti
6870: 6f 6e 28 72 69 64 2c 20 30 2c 20 26 64 6f 77 6e on(rid, 0, &down
6880: 6c 6f 61 64 4e 61 6d 65 29 3b 0a 20 20 73 74 79 loadName);. sty
6890: 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 le_submenu_eleme
68a0: 6e 74 28 22 44 6f 77 6e 6c 6f 61 64 22 2c 20 22 nt("Download", "
68b0: 44 6f 77 6e 6c 6f 61 64 22 2c 20 0a 20 20 20 20 Download", .
68c0: 20 20 20 20 20 20 22 25 73 2f 72 61 77 2f 25 54 "%s/raw/%T
68d0: 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 2e 7a 54 6f ?name=%d", g.zTo
68e0: 70 2c 20 62 6c 6f 62 5f 73 74 72 28 26 64 6f 77 p, blob_str(&dow
68f0: 6e 6c 6f 61 64 4e 61 6d 65 29 2c 20 72 69 64 29 nloadName), rid)
6900: 3b 0a 20 20 7a 4d 69 6d 65 20 3d 20 6d 69 6d 65 ;. zMime = mime
6910: 74 79 70 65 5f 66 72 6f 6d 5f 6e 61 6d 65 28 62 type_from_name(b
6920: 6c 6f 62 5f 73 74 72 28 26 64 6f 77 6e 6c 6f 61 lob_str(&downloa
6930: 64 4e 61 6d 65 29 29 3b 0a 20 20 69 66 28 20 7a dName));. if( z
6940: 4d 69 6d 65 20 29 7b 0a 20 20 20 20 69 66 28 20 Mime ){. if(
6950: 73 74 72 63 6d 70 28 7a 4d 69 6d 65 2c 20 22 74 strcmp(zMime, "t
6960: 65 78 74 2f 68 74 6d 6c 22 29 3d 3d 30 20 29 7b ext/html")==0 ){
6970: 0a 20 20 20 20 20 20 69 66 28 20 50 28 22 74 78 . if( P("tx
6980: 74 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 t") ){. s
6990: 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 tyle_submenu_ele
69a0: 6d 65 6e 74 28 22 48 74 6d 6c 22 2c 20 22 48 74 ment("Html", "Ht
69b0: 6d 6c 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 ml",.
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
69d0: 20 20 20 22 25 73 2f 61 72 74 69 66 61 63 74 3f "%s/artifact?
69e0: 6e 61 6d 65 3d 25 64 22 2c 20 67 2e 7a 54 6f 70 name=%d", g.zTop
69f0: 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 20 7d 65 , rid);. }e
6a00: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 6e lse{. ren
6a10: 64 65 72 41 73 48 74 6d 6c 20 3d 20 31 3b 0a 20 derAsHtml = 1;.
6a20: 20 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 style_sub
6a30: 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 54 65 menu_element("Te
6a40: 78 74 22 2c 20 22 54 65 78 74 22 2c 0a 20 20 20 xt", "Text",.
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a60: 20 20 20 20 20 20 20 20 20 20 20 22 25 73 2f 61 "%s/a
6a70: 72 74 69 66 61 63 74 3f 6e 61 6d 65 3d 25 64 26 rtifact?name=%d&
6a80: 74 78 74 3d 31 22 2c 20 67 2e 7a 54 6f 70 2c 20 txt=1", g.zTop,
6a90: 72 69 64 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 rid);. }.
6aa0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 }else if( strc
6ab0: 6d 70 28 7a 4d 69 6d 65 2c 20 22 61 70 70 6c 69 mp(zMime, "appli
6ac0: 63 61 74 69 6f 6e 2f 78 2d 66 6f 73 73 69 6c 2d cation/x-fossil-
6ad0: 77 69 6b 69 22 29 3d 3d 30 20 29 7b 0a 20 20 20 wiki")==0 ){.
6ae0: 20 20 20 69 66 28 20 50 28 22 74 78 74 22 29 20 if( P("txt")
6af0: 29 7b 0a 20 20 20 20 20 20 20 20 73 74 79 6c 65 ){. style
6b00: 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 _submenu_element
6b10: 28 22 57 69 6b 69 22 2c 20 22 57 69 6b 69 22 2c ("Wiki", "Wiki",
6b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
6b40: 25 73 2f 61 72 74 69 66 61 63 74 3f 6e 61 6d 65 %s/artifact?name
6b50: 3d 25 64 22 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 =%d", g.zTop, ri
6b60: 64 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b d);. }else{
6b70: 0a 20 20 20 20 20 20 20 20 72 65 6e 64 65 72 41 . renderA
6b80: 73 57 69 6b 69 20 3d 20 31 3b 0a 20 20 20 20 20 sWiki = 1;.
6b90: 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 style_submenu
6ba0: 5f 65 6c 65 6d 65 6e 74 28 22 54 65 78 74 22 2c _element("Text",
6bb0: 20 22 54 65 78 74 22 2c 0a 20 20 20 20 20 20 20 "Text",.
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6bd0: 20 20 20 20 20 20 20 22 25 73 2f 61 72 74 69 66 "%s/artif
6be0: 61 63 74 3f 6e 61 6d 65 3d 25 64 26 74 78 74 3d act?name=%d&txt=
6bf0: 31 22 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 1", g.zTop, rid)
6c00: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
6c10: 20 20 7d 0a 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 }. @ </blockq
6c20: 75 6f 74 65 3e 0a 20 20 40 20 3c 68 72 3e 0a 20 uote>. @ <hr>.
6c30: 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 content_get(rid
6c40: 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 69 , &content);. i
6c50: 66 28 20 72 65 6e 64 65 72 41 73 57 69 6b 69 20 f( renderAsWiki
6c60: 29 7b 0a 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76 ){. wiki_conv
6c70: 65 72 74 28 26 63 6f 6e 74 65 6e 74 2c 20 30 2c ert(&content, 0,
6c80: 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 0);. }else if(
6c90: 20 72 65 6e 64 65 72 41 73 48 74 6d 6c 20 29 7b renderAsHtml ){
6ca0: 0a 20 20 20 20 40 20 3c 64 69 76 3e 0a 20 20 20 . @ <div>.
6cb0: 20 63 67 69 5f 61 70 70 65 6e 64 5f 63 6f 6e 74 cgi_append_cont
6cc0: 65 6e 74 28 62 6c 6f 62 5f 62 75 66 66 65 72 28 ent(blob_buffer(
6cd0: 26 63 6f 6e 74 65 6e 74 29 2c 20 62 6c 6f 62 5f &content), blob_
6ce0: 73 69 7a 65 28 26 63 6f 6e 74 65 6e 74 29 29 3b size(&content));
6cf0: 0a 20 20 20 20 40 20 3c 2f 64 69 76 3e 0a 20 20 . @ </div>.
6d00: 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 4d 69 6d 65 }else{. zMime
6d10: 20 3d 20 6d 69 6d 65 74 79 70 65 5f 66 72 6f 6d = mimetype_from
6d20: 5f 63 6f 6e 74 65 6e 74 28 26 63 6f 6e 74 65 6e _content(&conten
6d30: 74 29 3b 0a 20 20 20 20 40 20 3c 62 6c 6f 63 6b t);. @ <block
6d40: 71 75 6f 74 65 3e 0a 20 20 20 20 69 66 28 20 7a quote>. if( z
6d50: 4d 69 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 Mime==0 ){.
6d60: 20 40 20 3c 70 72 65 3e 0a 20 20 20 20 20 20 40 @ <pre>. @
6d70: 20 25 68 28 62 6c 6f 62 5f 73 74 72 28 26 63 6f %h(blob_str(&co
6d80: 6e 74 65 6e 74 29 29 0a 20 20 20 20 20 20 40 20 ntent)). @
6d90: 3c 2f 70 72 65 3e 0a 20 20 20 20 20 20 73 74 79 </pre>. sty
6da0: 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 le_submenu_eleme
6db0: 6e 74 28 22 48 65 78 22 2c 22 48 65 78 22 2c 20 nt("Hex","Hex",
6dc0: 22 25 73 2f 68 65 78 64 75 6d 70 3f 6e 61 6d 65 "%s/hexdump?name
6dd0: 3d 25 64 22 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 =%d", g.zTop, ri
6de0: 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 d);. }else if
6df0: 28 20 73 74 72 6e 63 6d 70 28 7a 4d 69 6d 65 2c ( strncmp(zMime,
6e00: 20 22 69 6d 61 67 65 2f 22 2c 20 36 29 3d 3d 30 "image/", 6)==0
6e10: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 69 6d 67 ){. @ <img
6e20: 20 73 72 63 3d 22 25 73 28 67 2e 7a 42 61 73 65 src="%s(g.zBase
6e30: 55 52 4c 29 2f 72 61 77 3f 6e 61 6d 65 3d 25 64 URL)/raw?name=%d
6e40: 28 72 69 64 29 26 6d 3d 25 73 28 7a 4d 69 6d 65 (rid)&m=%s(zMime
6e50: 29 22 3e 3c 2f 69 6d 67 3e 0a 20 20 20 20 20 20 )"></img>.
6e60: 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c style_submenu_el
6e70: 65 6d 65 6e 74 28 22 48 65 78 22 2c 22 48 65 78 ement("Hex","Hex
6e80: 22 2c 20 22 25 73 2f 68 65 78 64 75 6d 70 3f 6e ", "%s/hexdump?n
6e90: 61 6d 65 3d 25 64 22 2c 20 67 2e 7a 54 6f 70 2c ame=%d", g.zTop,
6ea0: 20 72 69 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 rid);. }else
6eb0: 7b 0a 20 20 20 20 20 20 40 20 3c 70 72 65 3e 0a {. @ <pre>.
6ec0: 20 20 20 20 20 20 68 65 78 64 75 6d 70 28 26 63 hexdump(&c
6ed0: 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 20 20 40 ontent);. @
6ee0: 20 3c 2f 70 72 65 3e 0a 20 20 20 20 7d 0a 20 20 </pre>. }.
6ef0: 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 @ </blockquote
6f00: 3e 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f 66 6f >. }. style_fo
6f10: 6f 74 65 72 28 29 3b 0a 7d 20 20 0a 0a 2f 2a 0a oter();.} ../*.
6f20: 2a 2a 20 57 45 42 50 41 47 45 3a 20 74 69 6e 66 ** WEBPAGE: tinf
6f30: 6f 0a 2a 2a 20 55 52 4c 3a 20 2f 74 69 6e 66 6f o.** URL: /tinfo
6f40: 3f 6e 61 6d 65 3d 41 52 54 49 46 41 43 54 49 44 ?name=ARTIFACTID
6f50: 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 20 74 68 65 20 .**.** Show the
6f60: 64 65 74 61 69 6c 73 20 6f 66 20 61 20 74 69 63 details of a tic
6f70: 6b 65 74 20 63 68 61 6e 67 65 20 63 6f 6e 74 72 ket change contr
6f80: 6f 6c 20 61 72 74 69 66 61 63 74 2e 0a 2a 2f 0a ol artifact..*/.
6f90: 76 6f 69 64 20 74 69 6e 66 6f 5f 70 61 67 65 28 void tinfo_page(
6fa0: 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 void){. int rid
6fb0: 3b 0a 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 ;. Blob content
6fc0: 3b 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 65 3b ;. char *zDate;
6fd0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
6fe0: 55 75 69 64 3b 0a 20 20 63 68 61 72 20 7a 54 6b Uuid;. char zTk
6ff0: 74 4e 61 6d 65 5b 32 30 5d 3b 0a 20 20 4d 61 6e tName[20];. Man
7000: 69 66 65 73 74 20 6d 3b 0a 0a 20 20 6c 6f 67 69 ifest m;.. logi
7010: 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 n_check_credenti
7020: 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e als();. if( !g.
7030: 6f 6b 52 64 54 6b 74 20 29 7b 20 6c 6f 67 69 6e okRdTkt ){ login
7040: 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 _needed(); retur
7050: 6e 3b 20 7d 0a 20 20 72 69 64 20 3d 20 6e 61 6d n; }. rid = nam
7060: 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d e_to_rid(PD("nam
7070: 65 22 2c 22 30 22 29 29 3b 0a 20 20 69 66 28 20 e","0"));. if(
7080: 72 69 64 3d 3d 30 20 29 7b 20 66 6f 73 73 69 6c rid==0 ){ fossil
7090: 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 _redirect_home()
70a0: 3b 20 7d 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 ; }. zUuid = db
70b0: 5f 74 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 _text("", "SELEC
70c0: 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 T uuid FROM blob
70d0: 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 WHERE rid=%d",
70e0: 72 69 64 29 3b 0a 20 20 69 66 28 20 67 2e 6f 6b rid);. if( g.ok
70f0: 41 64 6d 69 6e 20 29 7b 0a 20 20 20 20 69 66 28 Admin ){. if(
7100: 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 db_exists("SELE
7110: 43 54 20 31 20 46 52 4f 4d 20 73 68 75 6e 20 57 CT 1 FROM shun W
7120: 48 45 52 45 20 75 75 69 64 3d 27 25 73 27 22 2c HERE uuid='%s'",
7130: 20 7a 55 75 69 64 29 20 29 7b 0a 20 20 20 20 20 zUuid) ){.
7140: 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 style_submenu_e
7150: 6c 65 6d 65 6e 74 28 22 55 6e 73 68 75 6e 22 2c lement("Unshun",
7160: 22 55 6e 73 68 75 6e 22 2c 20 22 25 73 2f 73 68 "Unshun", "%s/sh
7170: 75 6e 3f 75 75 69 64 3d 25 73 26 73 75 62 3d 31 un?uuid=%s&sub=1
7180: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 ",. g
7190: 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 3b 0a 20 .zTop, zUuid);.
71a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
71b0: 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c style_submenu_el
71c0: 65 6d 65 6e 74 28 22 53 68 75 6e 22 2c 22 53 68 ement("Shun","Sh
71d0: 75 6e 22 2c 20 22 25 73 2f 73 68 75 6e 3f 73 68 un", "%s/shun?sh
71e0: 75 6e 3d 25 73 23 61 64 64 73 68 75 6e 22 2c 0a un=%s#addshun",.
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 67 2e 7a 54 g.zT
7200: 6f 70 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 op, zUuid);.
7210: 7d 0a 20 20 7d 0a 20 20 63 6f 6e 74 65 6e 74 5f }. }. content_
7220: 67 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e get(rid, &conten
7230: 74 29 3b 0a 20 20 69 66 28 20 6d 61 6e 69 66 65 t);. if( manife
7240: 73 74 5f 70 61 72 73 65 28 26 6d 2c 20 26 63 6f st_parse(&m, &co
7250: 6e 74 65 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 ntent)==0 ){.
7260: 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 fossil_redirect
7270: 5f 68 6f 6d 65 28 29 3b 0a 20 20 7d 0a 20 20 69 _home();. }. i
7280: 66 28 20 6d 2e 74 79 70 65 21 3d 43 46 54 59 50 f( m.type!=CFTYP
7290: 45 5f 54 49 43 4b 45 54 20 29 7b 0a 20 20 20 20 E_TICKET ){.
72a0: 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f fossil_redirect_
72b0: 68 6f 6d 65 28 29 3b 0a 20 20 7d 0a 20 20 73 74 home();. }. st
72c0: 79 6c 65 5f 68 65 61 64 65 72 28 22 54 69 63 6b yle_header("Tick
72d0: 65 74 20 43 68 61 6e 67 65 20 44 65 74 61 69 6c et Change Detail
72e0: 73 22 29 3b 0a 20 20 7a 44 61 74 65 20 3d 20 64 s");. zDate = d
72f0: 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 b_text(0, "SELEC
7300: 54 20 64 61 74 65 74 69 6d 65 28 25 2e 31 32 66 T datetime(%.12f
7310: 29 22 2c 20 6d 2e 72 44 61 74 65 29 3b 0a 20 20 )", m.rDate);.
7320: 6d 65 6d 63 70 79 28 7a 54 6b 74 4e 61 6d 65 2c memcpy(zTktName,
7330: 20 6d 2e 7a 54 69 63 6b 65 74 55 75 69 64 2c 20 m.zTicketUuid,
7340: 31 30 29 3b 0a 20 20 7a 54 6b 74 4e 61 6d 65 5b 10);. zTktName[
7350: 31 30 5d 20 3d 20 30 3b 0a 20 20 69 66 28 20 67 10] = 0;. if( g
7360: 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 .okHistory ){.
7370: 20 20 40 20 3c 68 32 3e 43 68 61 6e 67 65 73 20 @ <h2>Changes
7380: 74 6f 20 74 69 63 6b 65 74 20 3c 61 20 68 72 65 to ticket <a hre
7390: 66 3d 22 25 73 28 6d 2e 7a 54 69 63 6b 65 74 55 f="%s(m.zTicketU
73a0: 75 69 64 29 22 3e 25 73 28 7a 54 6b 74 4e 61 6d uid)">%s(zTktNam
73b0: 65 29 3c 2f 61 3e 3c 2f 68 32 3e 0a 20 20 20 20 e)</a></h2>.
73c0: 40 0a 20 20 20 20 40 20 3c 70 3e 42 79 20 25 68 @. @ <p>By %h
73d0: 28 6d 2e 7a 55 73 65 72 29 20 6f 6e 20 25 73 28 (m.zUser) on %s(
73e0: 7a 44 61 74 65 29 2e 20 20 53 65 65 20 61 6c 73 zDate). See als
73f0: 6f 3a 0a 20 20 20 20 40 20 3c 61 20 68 72 65 66 o:. @ <a href
7400: 3d 22 25 73 28 67 2e 7a 54 6f 70 29 2f 61 72 74 ="%s(g.zTop)/art
7410: 69 66 61 63 74 2f 25 54 28 7a 55 75 69 64 29 22 ifact/%T(zUuid)"
7420: 3e 61 72 74 69 66 61 63 74 20 63 6f 6e 74 65 6e >artifact conten
7430: 74 3c 2f 61 3e 2c 20 61 6e 64 0a 20 20 20 20 40 t</a>, and. @
7440: 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a <a href="%s(g.z
7450: 54 6f 70 29 2f 74 6b 74 68 69 73 74 6f 72 79 2f Top)/tkthistory/
7460: 25 73 28 6d 2e 7a 54 69 63 6b 65 74 55 75 69 64 %s(m.zTicketUuid
7470: 29 22 3e 74 69 63 6b 65 74 20 68 69 73 74 6f 72 )">ticket histor
7480: 79 3c 2f 61 3e 0a 20 20 20 20 40 20 3c 2f 70 3e y</a>. @ </p>
7490: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 40 20 . }else{. @
74a0: 3c 68 32 3e 43 68 61 6e 67 65 73 20 74 6f 20 74 <h2>Changes to t
74b0: 69 63 6b 65 74 20 25 73 28 7a 54 6b 74 4e 61 6d icket %s(zTktNam
74c0: 65 29 3c 2f 68 32 3e 0a 20 20 20 20 40 0a 20 20 e)</h2>. @.
74d0: 20 20 40 20 3c 70 3e 42 79 20 25 68 28 6d 2e 7a @ <p>By %h(m.z
74e0: 55 73 65 72 29 20 6f 6e 20 25 73 28 7a 44 61 74 User) on %s(zDat
74f0: 65 29 2e 0a 20 20 20 20 40 20 3c 2f 70 3e 0a 20 e).. @ </p>.
7500: 20 7d 0a 20 20 40 0a 20 20 40 20 3c 6f 6c 3e 0a }. @. @ <ol>.
7510: 20 20 66 72 65 65 28 7a 44 61 74 65 29 3b 0a 20 free(zDate);.
7520: 20 74 69 63 6b 65 74 5f 6f 75 74 70 75 74 5f 63 ticket_output_c
7530: 68 61 6e 67 65 5f 61 72 74 69 66 61 63 74 28 26 hange_artifact(&
7540: 6d 29 3b 0a 20 20 6d 61 6e 69 66 65 73 74 5f 63 m);. manifest_c
7550: 6c 65 61 72 28 26 6d 29 3b 0a 20 20 73 74 79 6c lear(&m);. styl
7560: 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 0a e_footer();.}...
7570: 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 69 /*.** WEBPAGE: i
7580: 6e 66 6f 0a 2a 2a 20 55 52 4c 3a 20 69 6e 66 6f nfo.** URL: info
7590: 2f 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 0a 2a /ARTIFACTID.**.*
75a0: 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 * The argument i
75b0: 73 20 61 20 61 72 74 69 66 61 63 74 20 49 44 20 s a artifact ID
75c0: 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 61 which might be a
75d0: 20 62 61 73 65 6c 69 6e 65 20 6f 72 20 61 20 66 baseline or a f
75e0: 69 6c 65 20 6f 72 0a 2a 2a 20 61 20 74 69 63 6b ile or.** a tick
75f0: 65 74 20 63 68 61 6e 67 65 73 20 6f 72 20 61 20 et changes or a
7600: 77 69 6b 69 20 65 64 69 74 6f 72 20 6f 72 20 73 wiki editor or s
7610: 6f 6d 65 74 68 69 6e 67 20 65 6c 73 65 2e 20 0a omething else. .
7620: 2a 2a 0a 2a 2a 20 46 69 67 75 72 65 20 6f 75 74 **.** Figure out
7630: 20 77 68 61 74 20 74 68 65 20 61 72 74 69 66 61 what the artifa
7640: 63 74 20 49 44 20 69 73 20 61 6e 64 20 6a 75 6d ct ID is and jum
7650: 70 20 74 6f 20 69 74 2e 0a 2a 2f 0a 76 6f 69 64 p to it..*/.void
7660: 20 69 6e 66 6f 5f 70 61 67 65 28 76 6f 69 64 29 info_page(void)
7670: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a {. const char *
7680: 7a 4e 61 6d 65 3b 0a 20 20 42 6c 6f 62 20 75 75 zName;. Blob uu
7690: 69 64 3b 0a 20 20 69 6e 74 20 72 69 64 2c 20 6e id;. int rid, n
76a0: 4e 61 6d 65 3b 0a 20 20 0a 20 20 7a 4e 61 6d 65 Name;. . zName
76b0: 20 3d 20 50 28 22 6e 61 6d 65 22 29 3b 0a 20 20 = P("name");.
76c0: 69 66 28 20 7a 4e 61 6d 65 3d 3d 30 20 29 20 66 if( zName==0 ) f
76d0: 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 ossil_redirect_h
76e0: 6f 6d 65 28 29 3b 0a 20 20 6e 4e 61 6d 65 20 3d ome();. nName =
76f0: 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 3b 0a strlen(zName);.
7700: 20 20 69 66 28 20 6e 4e 61 6d 65 3c 34 20 7c 7c if( nName<4 ||
7710: 20 6e 4e 61 6d 65 3e 55 55 49 44 5f 53 49 5a 45 nName>UUID_SIZE
7720: 20 7c 7c 20 21 76 61 6c 69 64 61 74 65 31 36 28 || !validate16(
7730: 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 29 20 29 7b zName, nName) ){
7740: 0a 20 20 20 20 73 77 69 74 63 68 28 20 73 79 6d . switch( sym
7750: 5f 74 61 67 5f 74 6f 5f 75 75 69 64 28 7a 4e 61 _tag_to_uuid(zNa
7760: 6d 65 2c 20 26 75 75 69 64 29 20 29 7b 0a 20 20 me, &uuid) ){.
7770: 20 20 20 20 63 61 73 65 20 31 3a 20 7b 0a 20 20 case 1: {.
7780: 20 20 20 20 20 20 2f 2a 20 67 6f 74 20 6f 6e 65 /* got one
7790: 20 55 55 49 44 2c 20 75 73 65 20 69 74 20 2a 2f UUID, use it */
77a0: 0a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d . zName =
77b0: 20 62 6c 6f 62 5f 73 74 72 28 26 75 75 69 64 29 blob_str(&uuid)
77c0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b ;. break;
77d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 . }. c
77e0: 61 73 65 20 32 3a 20 7b 0a 20 20 20 20 20 20 20 ase 2: {.
77f0: 20 2f 2a 20 67 6f 20 73 6f 6d 65 77 68 65 72 65 /* go somewhere
7800: 20 74 6f 20 73 68 6f 77 20 74 68 65 20 6d 75 6c to show the mul
7810: 74 69 70 6c 65 20 55 55 49 44 73 20 2a 2f 0a 20 tiple UUIDs */.
7820: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 return;.
7830: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 break;.
7840: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 }. defa
7850: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 66 ult: {. f
7860: 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 ossil_redirect_h
7870: 6f 6d 65 28 29 3b 0a 20 20 20 20 20 20 20 20 62 ome();. b
7880: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 reak;. }.
7890: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 }. }. if( db
78a0: 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 _exists("SELECT
78b0: 31 20 46 52 4f 4d 20 74 69 63 6b 65 74 20 57 48 1 FROM ticket WH
78c0: 45 52 45 20 74 6b 74 5f 75 75 69 64 20 47 4c 4f ERE tkt_uuid GLO
78d0: 42 20 27 25 73 2a 27 22 2c 20 7a 4e 61 6d 65 29 B '%s*'", zName)
78e0: 20 29 7b 0a 20 20 20 20 74 6b 74 76 69 65 77 5f ){. tktview_
78f0: 70 61 67 65 28 29 3b 0a 20 20 20 20 72 65 74 75 page();. retu
7900: 72 6e 3b 0a 20 20 7d 0a 20 20 72 69 64 20 3d 20 rn;. }. rid =
7910: 64 62 5f 69 6e 74 28 30 2c 20 22 53 45 4c 45 43 db_int(0, "SELEC
7920: 54 20 72 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 T rid FROM blob
7930: 57 48 45 52 45 20 75 75 69 64 20 47 4c 4f 42 20 WHERE uuid GLOB
7940: 27 25 73 2a 27 22 2c 20 7a 4e 61 6d 65 29 3b 0a '%s*'", zName);.
7950: 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a if( rid==0 ){.
7960: 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 style_header
7970: 28 22 42 72 6f 6b 65 6e 20 4c 69 6e 6b 22 29 3b ("Broken Link");
7980: 0a 20 20 20 20 40 20 3c 70 3e 4e 6f 20 73 75 63 . @ <p>No suc
7990: 68 20 6f 62 6a 65 63 74 3a 20 25 68 28 7a 4e 61 h object: %h(zNa
79a0: 6d 65 29 3c 2f 70 3e 0a 20 20 20 20 73 74 79 6c me)</p>. styl
79b0: 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 20 20 20 20 e_footer();.
79c0: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 return;. }. if
79d0: 28 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c ( db_exists("SEL
79e0: 45 43 54 20 31 20 46 52 4f 4d 20 6d 6c 69 6e 6b ECT 1 FROM mlink
79f0: 20 57 48 45 52 45 20 6d 69 64 3d 25 64 22 2c 20 WHERE mid=%d",
7a00: 72 69 64 29 20 29 7b 0a 20 20 20 20 63 69 5f 70 rid) ){. ci_p
7a10: 61 67 65 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 age();. }else.
7a20: 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 if( db_exists("
7a30: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 61 SELECT 1 FROM ta
7a40: 67 78 72 65 66 20 4a 4f 49 4e 20 74 61 67 20 55 gxref JOIN tag U
7a50: 53 49 4e 47 28 74 61 67 69 64 29 22 0a 20 20 20 SING(tagid)".
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 " W
7a70: 48 45 52 45 20 72 69 64 3d 25 64 20 41 4e 44 20 HERE rid=%d AND
7a80: 74 61 67 6e 61 6d 65 20 4c 49 4b 45 20 27 77 69 tagname LIKE 'wi
7a90: 6b 69 2d 25 25 27 22 2c 20 72 69 64 29 20 29 7b ki-%%'", rid) ){
7aa0: 0a 20 20 20 20 77 69 6e 66 6f 5f 70 61 67 65 28 . winfo_page(
7ab0: 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 69 66 28 );. }else. if(
7ac0: 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 db_exists("SELE
7ad0: 43 54 20 31 20 46 52 4f 4d 20 74 61 67 78 72 65 CT 1 FROM tagxre
7ae0: 66 20 4a 4f 49 4e 20 74 61 67 20 55 53 49 4e 47 f JOIN tag USING
7af0: 28 74 61 67 69 64 29 22 0a 20 20 20 20 20 20 20 (tagid)".
7b00: 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 " WHERE
7b10: 20 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 6e rid=%d AND tagn
7b20: 61 6d 65 20 4c 49 4b 45 20 27 74 6b 74 2d 25 25 ame LIKE 'tkt-%%
7b30: 27 22 2c 20 72 69 64 29 20 29 7b 0a 20 20 20 20 '", rid) ){.
7b40: 74 69 6e 66 6f 5f 70 61 67 65 28 29 3b 0a 20 20 tinfo_page();.
7b50: 7d 65 6c 73 65 0a 20 20 69 66 28 20 64 62 5f 65 }else. if( db_e
7b60: 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 xists("SELECT 1
7b70: 46 52 4f 4d 20 70 6c 69 6e 6b 20 57 48 45 52 45 FROM plink WHERE
7b80: 20 63 69 64 3d 25 64 22 2c 20 72 69 64 29 20 29 cid=%d", rid) )
7b90: 7b 0a 20 20 20 20 63 69 5f 70 61 67 65 28 29 3b {. ci_page();
7ba0: 0a 20 20 7d 65 6c 73 65 0a 20 20 69 66 28 20 64 . }else. if( d
7bb0: 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 b_exists("SELECT
7bc0: 20 31 20 46 52 4f 4d 20 70 6c 69 6e 6b 20 57 48 1 FROM plink WH
7bd0: 45 52 45 20 70 69 64 3d 25 64 22 2c 20 72 69 64 ERE pid=%d", rid
7be0: 29 20 29 7b 0a 20 20 20 20 63 69 5f 70 61 67 65 ) ){. ci_page
7bf0: 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 7b 0a ();. }else. {.
7c00: 20 20 20 20 61 72 74 69 66 61 63 74 5f 70 61 67 artifact_pag
7c10: 65 28 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a e();. }.}../*.*
7c20: 2a 20 57 45 42 50 41 47 45 3a 20 63 69 5f 65 64 * WEBPAGE: ci_ed
7c30: 69 74 0a 2a 2a 20 55 52 4c 3a 20 20 63 69 5f 65 it.** URL: ci_e
7c40: 64 69 74 3f 72 3d 52 49 44 26 63 3d 4e 45 57 43 dit?r=RID&c=NEWC
7c50: 4f 4d 4d 45 4e 54 26 75 3d 4e 45 57 55 53 45 52 OMMENT&u=NEWUSER
7c60: 0a 2a 2a 0a 2a 2a 20 50 72 65 73 65 6e 74 20 61 .**.** Present a
7c70: 20 64 69 61 6c 6f 67 20 66 6f 72 20 75 70 64 61 dialog for upda
7c80: 74 69 6e 67 20 70 72 6f 70 65 72 74 69 65 73 20 ting properties
7c90: 6f 66 20 61 20 62 61 73 65 6c 69 6e 65 3a 0a 2a of a baseline:.*
7ca0: 2a 0a 2a 2a 20 20 20 20 20 2a 20 20 54 68 65 20 *.** * The
7cb0: 63 68 65 63 6b 2d 69 6e 20 75 73 65 72 0a 2a 2a check-in user.**
7cc0: 20 20 20 20 20 2a 20 20 54 68 65 20 63 68 65 63 * The chec
7cd0: 6b 2d 69 6e 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 k-in comment.**
7ce0: 20 20 20 20 2a 20 20 54 68 65 20 62 61 63 6b 67 * The backg
7cf0: 72 6f 75 6e 64 20 63 6f 6c 6f 72 2e 0a 2a 2f 0a round color..*/.
7d00: 76 6f 69 64 20 63 69 5f 65 64 69 74 5f 70 61 67 void ci_edit_pag
7d10: 65 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 e(void){. int r
7d20: 69 64 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 id;. const char
7d30: 20 2a 7a 43 6f 6d 6d 65 6e 74 3b 20 20 20 20 20 *zComment;
7d40: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 63 /* Current c
7d50: 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63 68 omment on the ch
7d60: 65 63 6b 2d 69 6e 20 2a 2f 0a 20 20 63 6f 6e 73 eck-in */. cons
7d70: 74 20 63 68 61 72 20 2a 7a 4e 65 77 43 6f 6d 6d t char *zNewComm
7d80: 65 6e 74 3b 20 20 20 20 20 20 2f 2a 20 52 65 76 ent; /* Rev
7d90: 69 73 65 64 20 63 68 65 63 6b 2d 69 6e 20 63 6f ised check-in co
7da0: 6d 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 mment */. const
7db0: 20 63 68 61 72 20 2a 7a 55 73 65 72 3b 20 20 20 char *zUser;
7dc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 /* Curr
7dd0: 65 6e 74 20 75 73 65 72 20 66 6f 72 20 74 68 65 ent user for the
7de0: 20 63 68 65 63 6b 2d 69 6e 20 2a 2f 0a 20 20 63 check-in */. c
7df0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 55 onst char *zNewU
7e00: 73 65 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 ser; /*
7e10: 52 65 76 69 73 65 64 20 75 73 65 72 20 2a 2f 0a Revised user */.
7e20: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 const char *zD
7e30: 61 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 ate;
7e40: 2f 2a 20 43 75 72 72 65 6e 74 20 64 61 74 65 20 /* Current date
7e50: 6f 66 20 74 68 65 20 63 68 65 63 6b 2d 69 6e 20 of the check-in
7e60: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 */. const char
7e70: 2a 7a 4e 65 77 44 61 74 65 3b 20 20 20 20 20 20 *zNewDate;
7e80: 20 20 20 2f 2a 20 52 65 76 69 73 65 64 20 63 68 /* Revised ch
7e90: 65 63 6b 2d 69 6e 20 64 61 74 65 20 2a 2f 0a 20 eck-in date */.
7ea0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f const char *zCo
7eb0: 6c 6f 72 3b 20 20 20 20 20 20 20 0a 20 20 63 6f lor; . co
7ec0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 43 6f nst char *zNewCo
7ed0: 6c 6f 72 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 lor;. const cha
7ee0: 72 20 2a 7a 4e 65 77 54 61 67 46 6c 61 67 3b 0a r *zNewTagFlag;.
7ef0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e const char *zN
7f00: 65 77 54 61 67 3b 0a 20 20 63 6f 6e 73 74 20 63 ewTag;. const c
7f10: 68 61 72 20 2a 7a 4e 65 77 42 72 46 6c 61 67 3b har *zNewBrFlag;
7f20: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
7f30: 4e 65 77 42 72 61 6e 63 68 3b 0a 20 20 63 6f 6e NewBranch;. con
7f40: 73 74 20 63 68 61 72 20 2a 7a 43 6c 6f 73 65 46 st char *zCloseF
7f50: 6c 61 67 3b 0a 20 20 69 6e 74 20 66 50 72 6f 70 lag;. int fProp
7f60: 61 67 61 74 65 43 6f 6c 6f 72 3b 0a 20 20 63 68 agateColor;. ch
7f70: 61 72 20 2a 7a 55 75 69 64 3b 0a 20 20 42 6c 6f ar *zUuid;. Blo
7f80: 62 20 63 6f 6d 6d 65 6e 74 3b 0a 20 20 53 74 6d b comment;. Stm
7f90: 74 20 71 3b 0a 20 20 73 74 61 74 69 63 20 63 6f t q;. static co
7fa0: 6e 73 74 20 73 74 72 75 63 74 20 53 61 6d 70 6c nst struct Sampl
7fb0: 65 43 6f 6c 6f 72 73 20 7b 0a 20 20 20 20 20 63 eColors {. c
7fc0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 4e 61 6d onst char *zCNam
7fd0: 65 3b 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 e;. const ch
7fe0: 61 72 20 2a 7a 43 6f 6c 6f 72 3b 0a 20 20 7d 20 ar *zColor;. }
7ff0: 61 43 6f 6c 6f 72 5b 5d 20 3d 20 7b 0a 20 20 20 aColor[] = {.
8000: 20 20 7b 20 22 28 6e 6f 6e 65 29 22 2c 20 20 22 { "(none)", "
8010: 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 66 32 " },. { "#f2
8020: 64 63 64 63 22 2c 20 22 23 66 32 64 63 64 63 22 dcdc", "#f2dcdc"
8030: 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 66 30 66 },. { "#f0f
8040: 66 63 30 22 2c 20 22 23 66 30 66 66 63 30 22 20 fc0", "#f0ffc0"
8050: 7d 2c 0a 20 20 20 20 20 7b 20 22 23 62 64 65 35 },. { "#bde5
8060: 64 36 22 2c 20 22 23 62 64 65 35 64 36 22 20 7d d6", "#bde5d6" }
8070: 2c 0a 20 20 20 20 20 7b 20 22 23 63 30 66 66 63 ,. { "#c0ffc
8080: 30 22 2c 20 22 23 63 30 66 66 63 30 22 20 7d 2c 0", "#c0ffc0" },
8090: 0a 20 20 20 20 20 7b 20 22 23 63 30 66 66 66 30 . { "#c0fff0
80a0: 22 2c 20 22 23 63 30 66 66 66 30 22 20 7d 2c 0a ", "#c0fff0" },.
80b0: 20 20 20 20 20 7b 20 22 23 63 30 66 30 66 66 22 { "#c0f0ff"
80c0: 2c 20 22 23 63 30 66 30 66 66 22 20 7d 2c 0a 20 , "#c0f0ff" },.
80d0: 20 20 20 20 7b 20 22 23 64 30 63 30 66 66 22 2c { "#d0c0ff",
80e0: 20 22 23 64 30 63 30 66 66 22 20 7d 2c 0a 20 20 "#d0c0ff" },.
80f0: 20 20 20 7b 20 22 23 66 66 63 30 66 66 22 2c 20 { "#ffc0ff",
8100: 22 23 66 66 63 30 66 66 22 20 7d 2c 0a 20 20 20 "#ffc0ff" },.
8110: 20 20 7b 20 22 23 66 66 63 30 64 30 22 2c 20 22 { "#ffc0d0", "
8120: 23 66 66 63 30 64 30 22 20 7d 2c 0a 20 20 20 20 #ffc0d0" },.
8130: 20 7b 20 22 23 66 66 66 30 63 30 22 2c 20 22 23 { "#fff0c0", "#
8140: 66 66 66 30 63 30 22 20 7d 2c 0a 20 20 20 20 20 fff0c0" },.
8150: 7b 20 22 23 63 30 63 30 63 30 22 2c 20 22 23 63 { "#c0c0c0", "#c
8160: 30 63 30 63 30 22 20 7d 2c 0a 20 20 7d 3b 0a 20 0c0c0" },. };.
8170: 20 69 6e 74 20 6e 43 6f 6c 6f 72 20 3d 20 73 69 int nColor = si
8180: 7a 65 6f 66 28 61 43 6f 6c 6f 72 29 2f 73 69 7a zeof(aColor)/siz
8190: 65 6f 66 28 61 43 6f 6c 6f 72 5b 30 5d 29 3b 0a eof(aColor[0]);.
81a0: 20 20 69 6e 74 20 69 3b 0a 20 20 0a 20 20 6c 6f int i;. . lo
81b0: 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e gin_check_creden
81c0: 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 tials();. if( !
81d0: 67 2e 6f 6b 57 72 69 74 65 20 29 7b 20 6c 6f 67 g.okWrite ){ log
81e0: 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 in_needed(); ret
81f0: 75 72 6e 3b 20 7d 0a 20 20 72 69 64 20 3d 20 61 urn; }. rid = a
8200: 74 6f 69 28 50 44 28 22 72 22 2c 22 30 22 29 29 toi(PD("r","0"))
8210: 3b 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 ;. zUuid = db_t
8220: 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 ext(0, "SELECT u
8230: 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 uid FROM blob WH
8240: 45 52 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 ERE rid=%d", rid
8250: 29 3b 0a 20 20 7a 43 6f 6d 6d 65 6e 74 20 3d 20 );. zComment =
8260: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 db_text(0, "SELE
8270: 43 54 20 63 6f 61 6c 65 73 63 65 28 65 63 6f 6d CT coalesce(ecom
8280: 6d 65 6e 74 2c 63 6f 6d 6d 65 6e 74 29 22 0a 20 ment,comment)".
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
82a0: 20 20 20 20 20 20 20 22 20 20 46 52 4f 4d 20 65 " FROM e
82b0: 76 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 64 vent WHERE objid
82c0: 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 69 66 =%d", rid);. if
82d0: 28 20 7a 43 6f 6d 6d 65 6e 74 3d 3d 30 20 29 20 ( zComment==0 )
82e0: 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f fossil_redirect_
82f0: 68 6f 6d 65 28 29 3b 0a 20 20 69 66 28 20 50 28 home();. if( P(
8300: 22 63 61 6e 63 65 6c 22 29 20 29 7b 0a 20 20 20 "cancel") ){.
8310: 20 63 67 69 5f 72 65 64 69 72 65 63 74 66 28 22 cgi_redirectf("
8320: 63 69 3f 6e 61 6d 65 3d 25 64 22 2c 20 72 69 64 ci?name=%d", rid
8330: 29 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 43 6f 6d );. }. zNewCom
8340: 6d 65 6e 74 20 3d 20 50 44 28 22 63 22 2c 7a 43 ment = PD("c",zC
8350: 6f 6d 6d 65 6e 74 29 3b 0a 20 20 7a 55 73 65 72 omment);. zUser
8360: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 = db_text(0, "S
8370: 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 65 ELECT coalesce(e
8380: 75 73 65 72 2c 75 73 65 72 29 22 0a 20 20 20 20 user,user)".
8390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
83a0: 20 22 20 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 " FROM event W
83b0: 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 22 2c 20 HERE objid=%d",
83c0: 72 69 64 29 3b 0a 20 20 69 66 28 20 7a 55 73 65 rid);. if( zUse
83d0: 72 3d 3d 30 20 29 20 66 6f 73 73 69 6c 5f 72 65 r==0 ) fossil_re
83e0: 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 direct_home();.
83f0: 20 7a 4e 65 77 55 73 65 72 20 3d 20 50 44 28 22 zNewUser = PD("
8400: 75 22 2c 7a 55 73 65 72 29 3b 0a 20 20 7a 44 61 u",zUser);. zDa
8410: 74 65 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 te = db_text(0,
8420: 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 "SELECT datetime
8430: 28 6d 74 69 6d 65 29 22 0a 20 20 20 20 20 20 20 (mtime)".
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 "
8450: 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 FROM event WHER
8460: 45 20 6f 62 6a 69 64 3d 25 64 22 2c 20 72 69 64 E objid=%d", rid
8470: 29 3b 0a 20 20 69 66 28 20 7a 44 61 74 65 3d 3d );. if( zDate==
8480: 30 20 29 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 0 ) fossil_redir
8490: 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 7a 4e ect_home();. zN
84a0: 65 77 44 61 74 65 20 3d 20 50 44 28 22 64 74 22 ewDate = PD("dt"
84b0: 2c 7a 44 61 74 65 29 3b 0a 20 20 7a 43 6f 6c 6f ,zDate);. zColo
84c0: 72 20 3d 20 64 62 5f 74 65 78 74 28 22 22 2c 20 r = db_text("",
84d0: 22 53 45 4c 45 43 54 20 62 67 63 6f 6c 6f 72 22 "SELECT bgcolor"
84e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
84f0: 20 20 20 20 20 20 20 20 20 22 20 20 46 52 4f 4d " FROM
8500: 20 65 76 65 6e 74 20 57 48 45 52 45 20 6f 62 6a event WHERE obj
8510: 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 id=%d", rid);.
8520: 7a 4e 65 77 43 6f 6c 6f 72 20 3d 20 50 44 28 22 zNewColor = PD("
8530: 63 6c 72 22 2c 7a 43 6f 6c 6f 72 29 3b 0a 20 20 clr",zColor);.
8540: 66 50 72 6f 70 61 67 61 74 65 43 6f 6c 6f 72 20 fPropagateColor
8550: 3d 20 50 28 22 70 63 6c 72 22 29 21 3d 30 3b 0a = P("pclr")!=0;.
8560: 20 20 7a 4e 65 77 54 61 67 46 6c 61 67 20 3d 20 zNewTagFlag =
8570: 50 28 22 6e 65 77 74 61 67 22 29 20 3f 20 22 20 P("newtag") ? "
8580: 63 68 65 63 6b 65 64 22 20 3a 20 22 22 3b 0a 20 checked" : "";.
8590: 20 7a 4e 65 77 54 61 67 20 3d 20 50 44 28 22 74 zNewTag = PD("t
85a0: 61 67 6e 61 6d 65 22 2c 22 22 29 3b 0a 20 20 7a agname","");. z
85b0: 4e 65 77 42 72 46 6c 61 67 20 3d 20 50 28 22 6e NewBrFlag = P("n
85c0: 65 77 62 72 22 29 20 3f 20 22 20 63 68 65 63 6b ewbr") ? " check
85d0: 65 64 22 20 3a 20 22 22 3b 0a 20 20 7a 4e 65 77 ed" : "";. zNew
85e0: 42 72 61 6e 63 68 20 3d 20 50 44 28 22 62 72 6e Branch = PD("brn
85f0: 61 6d 65 22 2c 22 22 29 3b 0a 20 20 7a 43 6c 6f ame","");. zClo
8600: 73 65 46 6c 61 67 20 3d 20 50 28 22 63 6c 6f 73 seFlag = P("clos
8610: 65 22 29 20 3f 20 22 20 63 68 65 63 6b 65 64 22 e") ? " checked"
8620: 20 3a 20 22 22 3b 0a 20 20 69 66 28 20 50 28 22 : "";. if( P("
8630: 61 70 70 6c 79 22 29 20 29 7b 0a 20 20 20 20 42 apply") ){. B
8640: 6c 6f 62 20 63 74 72 6c 3b 0a 20 20 20 20 63 68 lob ctrl;. ch
8650: 61 72 20 2a 7a 44 61 74 65 3b 0a 20 20 20 20 69 ar *zDate;. i
8660: 6e 74 20 6e 43 68 6e 67 20 3d 20 30 3b 0a 0a 20 nt nChng = 0;..
8670: 20 20 20 6c 6f 67 69 6e 5f 76 65 72 69 66 79 5f login_verify_
8680: 63 73 72 66 5f 73 65 63 72 65 74 28 29 3b 0a 20 csrf_secret();.
8690: 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 63 74 blob_zero(&ct
86a0: 72 6c 29 3b 0a 20 20 20 20 7a 44 61 74 65 20 3d rl);. zDate =
86b0: 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c db_text(0, "SEL
86c0: 45 43 54 20 64 61 74 65 74 69 6d 65 28 27 6e 6f ECT datetime('no
86d0: 77 27 29 22 29 3b 0a 20 20 20 20 7a 44 61 74 65 w')");. zDate
86e0: 5b 31 30 5d 20 3d 20 27 54 27 3b 0a 20 20 20 20 [10] = 'T';.
86f0: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 63 74 blob_appendf(&ct
8700: 72 6c 2c 20 22 44 20 25 73 5c 6e 22 2c 20 7a 44 rl, "D %s\n", zD
8710: 61 74 65 29 3b 0a 20 20 20 20 64 62 5f 6d 75 6c ate);. db_mul
8720: 74 69 5f 65 78 65 63 28 22 43 52 45 41 54 45 20 ti_exec("CREATE
8730: 54 45 4d 50 20 54 41 42 4c 45 20 6e 65 77 74 61 TEMP TABLE newta
8740: 67 73 28 74 61 67 20 55 4e 49 51 55 45 2c 20 70 gs(tag UNIQUE, p
8750: 72 65 66 69 78 2c 20 76 61 6c 75 65 29 22 29 3b refix, value)");
8760: 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 43 6f 6c . if( zNewCol
8770: 6f 72 5b 30 5d 20 26 26 20 73 74 72 63 6d 70 28 or[0] && strcmp(
8780: 7a 43 6f 6c 6f 72 2c 7a 4e 65 77 43 6f 6c 6f 72 zColor,zNewColor
8790: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 68 )!=0 ){. ch
87a0: 61 72 20 2a 7a 50 72 65 66 69 78 20 3d 20 22 2b ar *zPrefix = "+
87b0: 22 3b 0a 20 20 20 20 20 20 69 66 28 20 66 50 72 ";. if( fPr
87c0: 6f 70 61 67 61 74 65 43 6f 6c 6f 72 20 29 7b 0a opagateColor ){.
87d0: 20 20 20 20 20 20 20 20 7a 50 72 65 66 69 78 20 zPrefix
87e0: 3d 20 22 2a 22 3b 0a 20 20 20 20 20 20 7d 0a 20 = "*";. }.
87f0: 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 db_multi_ex
8800: 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f ec("REPLACE INTO
8810: 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 newtags VALUES(
8820: 27 62 67 63 6f 6c 6f 72 27 2c 25 51 2c 25 51 29 'bgcolor',%Q,%Q)
8830: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ",.
8840: 20 20 20 20 20 20 20 7a 50 72 65 66 69 78 2c 20 zPrefix,
8850: 7a 4e 65 77 43 6f 6c 6f 72 29 3b 0a 20 20 20 20 zNewColor);.
8860: 7d 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 43 6f }. if( zNewCo
8870: 6c 6f 72 5b 30 5d 3d 3d 30 20 26 26 20 7a 43 6f lor[0]==0 && zCo
8880: 6c 6f 72 5b 30 5d 21 3d 30 20 29 7b 0a 20 20 20 lor[0]!=0 ){.
8890: 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 db_multi_exec
88a0: 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e ("REPLACE INTO n
88b0: 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 62 ewtags VALUES('b
88c0: 67 63 6f 6c 6f 72 27 2c 27 2d 27 2c 4e 55 4c 4c gcolor','-',NULL
88d0: 29 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 )");. }. i
88e0: 66 28 20 73 74 72 63 6d 70 28 7a 43 6f 6d 6d 65 f( strcmp(zComme
88f0: 6e 74 2c 7a 4e 65 77 43 6f 6d 6d 65 6e 74 29 21 nt,zNewComment)!
8900: 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 6d =0 ){. db_m
8910: 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 ulti_exec("REPLA
8920: 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 CE INTO newtags
8930: 56 41 4c 55 45 53 28 27 63 6f 6d 6d 65 6e 74 27 VALUES('comment'
8940: 2c 27 2b 27 2c 25 51 29 22 2c 0a 20 20 20 20 20 ,'+',%Q)",.
8950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a z
8960: 4e 65 77 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 20 NewComment);.
8970: 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d }. if( strcm
8980: 70 28 7a 44 61 74 65 2c 7a 4e 65 77 44 61 74 65 p(zDate,zNewDate
8990: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62 )!=0 ){. db
89a0: 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 _multi_exec("REP
89b0: 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 LACE INTO newtag
89c0: 73 20 56 41 4c 55 45 53 28 27 64 61 74 65 27 2c s VALUES('date',
89d0: 27 2b 27 2c 25 51 29 22 2c 0a 20 20 20 20 20 20 '+',%Q)",.
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e zN
89f0: 65 77 44 61 74 65 29 3b 0a 20 20 20 20 7d 0a 20 ewDate);. }.
8a00: 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 55 if( strcmp(zU
8a10: 73 65 72 2c 7a 4e 65 77 55 73 65 72 29 21 3d 30 ser,zNewUser)!=0
8a20: 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c ){. db_mul
8a30: 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 ti_exec("REPLACE
8a40: 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 INTO newtags VA
8a50: 4c 55 45 53 28 27 75 73 65 72 27 2c 27 2b 27 2c LUES('user','+',
8a60: 25 51 29 22 2c 20 7a 4e 65 77 55 73 65 72 29 3b %Q)", zNewUser);
8a70: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f 70 72 . }. db_pr
8a80: 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 20 20 epare(&q,.
8a90: 20 22 53 45 4c 45 43 54 20 74 61 67 2e 74 61 67 "SELECT tag.tag
8aa0: 69 64 2c 20 74 61 67 6e 61 6d 65 20 46 52 4f 4d id, tagname FROM
8ab0: 20 74 61 67 78 72 65 66 2c 20 74 61 67 22 0a 20 tagxref, tag".
8ac0: 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74 61 " WHERE ta
8ad0: 67 78 72 65 66 2e 72 69 64 3d 25 64 20 41 4e 44 gxref.rid=%d AND
8ae0: 20 74 61 67 74 79 70 65 3e 30 20 41 4e 44 20 74 tagtype>0 AND t
8af0: 61 67 78 72 65 66 2e 74 61 67 69 64 3d 74 61 67 agxref.tagid=tag
8b00: 2e 74 61 67 69 64 22 2c 0a 20 20 20 20 20 20 20 .tagid",.
8b10: 72 69 64 0a 20 20 20 20 29 3b 0a 20 20 20 20 77 rid. );. w
8b20: 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 hile( db_step(&q
8b30: 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b )==SQLITE_ROW ){
8b40: 0a 20 20 20 20 20 20 69 6e 74 20 74 61 67 69 64 . int tagid
8b50: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 = db_column_int
8b60: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 20 20 63 (&q, 0);. c
8b70: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 67 20 onst char *zTag
8b80: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
8b90: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 20 20 63 (&q, 1);. c
8ba0: 68 61 72 20 7a 4c 61 62 65 6c 5b 33 30 5d 3b 0a har zLabel[30];.
8bb0: 20 20 20 20 20 20 73 70 72 69 6e 74 66 28 7a 4c sprintf(zL
8bc0: 61 62 65 6c 2c 20 22 63 25 64 22 2c 20 74 61 67 abel, "c%d", tag
8bd0: 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20 50 id);. if( P
8be0: 28 7a 4c 61 62 65 6c 29 20 29 7b 0a 20 20 20 20 (zLabel) ){.
8bf0: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 db_multi_exe
8c00: 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 c("REPLACE INTO
8c10: 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 25 newtags VALUES(%
8c20: 51 2c 27 2d 27 2c 4e 55 4c 4c 29 22 2c 20 7a 54 Q,'-',NULL)", zT
8c30: 61 67 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 ag);. }.
8c40: 20 7d 0a 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 }. db_finali
8c50: 7a 65 28 26 71 29 3b 0a 20 20 20 20 69 66 28 20 ze(&q);. if(
8c60: 7a 43 6c 6f 73 65 46 6c 61 67 5b 30 5d 20 29 7b zCloseFlag[0] ){
8c70: 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f . db_multi_
8c80: 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e exec("REPLACE IN
8c90: 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 TO newtags VALUE
8ca0: 53 28 27 63 6c 6f 73 65 64 27 2c 27 2b 27 2c 4e S('closed','+',N
8cb0: 55 4c 4c 29 22 29 3b 0a 20 20 20 20 7d 0a 20 20 ULL)");. }.
8cc0: 20 20 69 66 28 20 7a 4e 65 77 54 61 67 46 6c 61 if( zNewTagFla
8cd0: 67 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 64 62 g[0] ){. db
8ce0: 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 _multi_exec("REP
8cf0: 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 LACE INTO newtag
8d00: 73 20 56 41 4c 55 45 53 28 27 73 79 6d 2d 25 71 s VALUES('sym-%q
8d10: 27 2c 27 2b 27 2c 4e 55 4c 4c 29 22 2c 20 7a 4e ','+',NULL)", zN
8d20: 65 77 54 61 67 29 3b 0a 20 20 20 20 7d 0a 20 20 ewTag);. }.
8d30: 20 20 69 66 28 20 7a 4e 65 77 42 72 46 6c 61 67 if( zNewBrFlag
8d40: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 64 62 5f [0] ){. db_
8d50: 6d 75 6c 74 69 5f 65 78 65 63 28 0a 20 20 20 20 multi_exec(.
8d60: 20 20 20 20 22 52 45 50 4c 41 43 45 20 49 4e 54 "REPLACE INT
8d70: 4f 20 6e 65 77 74 61 67 73 20 22 0a 20 20 20 20 O newtags ".
8d80: 20 20 20 20 22 20 53 45 4c 45 43 54 20 74 61 67 " SELECT tag
8d90: 6e 61 6d 65 2c 20 27 2d 27 2c 20 4e 55 4c 4c 20 name, '-', NULL
8da0: 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 61 FROM tagxref, ta
8db0: 67 22 0a 20 20 20 20 20 20 20 20 22 20 20 57 48 g". " WH
8dc0: 45 52 45 20 74 61 67 78 72 65 66 2e 72 69 64 3d ERE tagxref.rid=
8dd0: 25 64 20 41 4e 44 20 74 61 67 74 79 70 65 3d 3d %d AND tagtype==
8de0: 32 22 0a 20 20 20 20 20 20 20 20 22 20 20 20 20 2". "
8df0: 41 4e 44 20 74 61 67 6e 61 6d 65 20 47 4c 4f 42 AND tagname GLOB
8e00: 20 27 73 79 6d 2d 2a 27 22 0a 20 20 20 20 20 20 'sym-*'".
8e10: 20 20 22 20 20 20 20 41 4e 44 20 74 61 67 2e 74 " AND tag.t
8e20: 61 67 69 64 3d 74 61 67 78 72 65 66 2e 74 61 67 agid=tagxref.tag
8e30: 69 64 22 2c 0a 20 20 20 20 20 20 20 20 72 69 64 id",. rid
8e40: 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 . );.
8e50: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 db_multi_exec("R
8e60: 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 EPLACE INTO newt
8e70: 61 67 73 20 56 41 4c 55 45 53 28 27 62 72 61 6e ags VALUES('bran
8e80: 63 68 27 2c 27 2a 27 2c 25 51 29 22 2c 20 7a 4e ch','*',%Q)", zN
8e90: 65 77 42 72 61 6e 63 68 29 3b 0a 20 20 20 20 20 ewBranch);.
8ea0: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 db_multi_exec("
8eb0: 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 REPLACE INTO new
8ec0: 74 61 67 73 20 56 41 4c 55 45 53 28 27 73 79 6d tags VALUES('sym
8ed0: 2d 25 71 27 2c 27 2a 27 2c 4e 55 4c 4c 29 22 2c -%q','*',NULL)",
8ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8ef0: 20 20 20 20 20 7a 4e 65 77 42 72 61 6e 63 68 29 zNewBranch)
8f00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f 70 ;. }. db_p
8f10: 72 65 70 61 72 65 28 26 71 2c 20 22 53 45 4c 45 repare(&q, "SELE
8f20: 43 54 20 74 61 67 2c 20 70 72 65 66 69 78 2c 20 CT tag, prefix,
8f30: 76 61 6c 75 65 20 46 52 4f 4d 20 6e 65 77 74 61 value FROM newta
8f40: 67 73 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 gs".
8f50: 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 " ORDER B
8f60: 59 20 70 72 65 66 69 78 20 7c 7c 20 74 61 67 22 Y prefix || tag"
8f70: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 64 62 );. while( db
8f80: 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 _step(&q)==SQLIT
8f90: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 E_ROW ){. c
8fa0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 67 20 onst char *zTag
8fb0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
8fc0: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 20 20 63 (&q, 0);. c
8fd0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 72 65 66 onst char *zPref
8fe0: 69 78 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 ix = db_column_t
8ff0: 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 ext(&q, 1);.
9000: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 const char *zV
9010: 61 6c 75 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e alue = db_column
9020: 5f 74 65 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 _text(&q, 2);.
9030: 20 20 20 20 6e 43 68 6e 67 2b 2b 3b 0a 20 20 20 nChng++;.
9040: 20 20 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b if( zValue ){
9050: 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 . blob_ap
9060: 70 65 6e 64 66 28 26 63 74 72 6c 2c 20 22 54 20 pendf(&ctrl, "T
9070: 25 73 25 46 20 25 73 20 25 46 5c 6e 22 2c 20 7a %s%F %s %F\n", z
9080: 50 72 65 66 69 78 2c 20 7a 54 61 67 2c 20 7a 55 Prefix, zTag, zU
9090: 75 69 64 2c 20 7a 56 61 6c 75 65 29 3b 0a 20 20 uid, zValue);.
90a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
90b0: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
90c0: 26 63 74 72 6c 2c 20 22 54 20 25 73 25 46 20 25 &ctrl, "T %s%F %
90d0: 73 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 7a s\n", zPrefix, z
90e0: 54 61 67 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 Tag, zUuid);.
90f0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 64 }. }. d
9100: 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a b_finalize(&q);.
9110: 20 20 20 20 69 66 28 20 6e 43 68 6e 67 3e 30 20 if( nChng>0
9120: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 72 69 ){. int nri
9130: 64 3b 0a 20 20 20 20 20 20 42 6c 6f 62 20 63 6b d;. Blob ck
9140: 73 75 6d 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f sum;. blob_
9150: 61 70 70 65 6e 64 66 28 26 63 74 72 6c 2c 20 22 appendf(&ctrl, "
9160: 55 20 25 46 5c 6e 22 2c 20 67 2e 7a 4c 6f 67 69 U %F\n", g.zLogi
9170: 6e 29 3b 0a 20 20 20 20 20 20 6d 64 35 73 75 6d n);. md5sum
9180: 5f 62 6c 6f 62 28 26 63 74 72 6c 2c 20 26 63 6b _blob(&ctrl, &ck
9190: 73 75 6d 29 3b 0a 20 20 20 20 20 20 62 6c 6f 62 sum);. blob
91a0: 5f 61 70 70 65 6e 64 66 28 26 63 74 72 6c 2c 20 _appendf(&ctrl,
91b0: 22 5a 20 25 62 5c 6e 22 2c 20 26 63 6b 73 75 6d "Z %b\n", &cksum
91c0: 29 3b 0a 20 20 20 20 20 20 64 62 5f 62 65 67 69 );. db_begi
91d0: 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b n_transaction();
91e0: 0a 20 20 20 20 20 20 67 2e 6d 61 72 6b 50 72 69 . g.markPri
91f0: 76 61 74 65 20 3d 20 63 6f 6e 74 65 6e 74 5f 69 vate = content_i
9200: 73 5f 70 72 69 76 61 74 65 28 72 69 64 29 3b 0a s_private(rid);.
9210: 20 20 20 20 20 20 6e 72 69 64 20 3d 20 63 6f 6e nrid = con
9220: 74 65 6e 74 5f 70 75 74 28 26 63 74 72 6c 2c 20 tent_put(&ctrl,
9230: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 6d 61 6e 0, 0);. man
9240: 69 66 65 73 74 5f 63 72 6f 73 73 6c 69 6e 6b 28 ifest_crosslink(
9250: 6e 72 69 64 2c 20 26 63 74 72 6c 29 3b 0a 20 20 nrid, &ctrl);.
9260: 20 20 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73 db_end_trans
9270: 61 63 74 69 6f 6e 28 30 29 3b 0a 20 20 20 20 7d action(0);. }
9280: 0a 20 20 20 20 63 67 69 5f 72 65 64 69 72 65 63 . cgi_redirec
9290: 74 66 28 22 63 69 3f 6e 61 6d 65 3d 25 64 22 2c tf("ci?name=%d",
92a0: 20 72 69 64 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f rid);. }. blo
92b0: 62 5f 7a 65 72 6f 28 26 63 6f 6d 6d 65 6e 74 29 b_zero(&comment)
92c0: 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 ;. blob_append(
92d0: 26 63 6f 6d 6d 65 6e 74 2c 20 7a 4e 65 77 43 6f &comment, zNewCo
92e0: 6d 6d 65 6e 74 2c 20 2d 31 29 3b 0a 20 20 7a 55 mment, -1);. zU
92f0: 75 69 64 5b 31 30 5d 20 3d 20 30 3b 0a 20 20 73 uid[10] = 0;. s
9300: 74 79 6c 65 5f 68 65 61 64 65 72 28 22 45 64 69 tyle_header("Edi
9310: 74 20 43 68 65 63 6b 2d 69 6e 20 5b 25 73 5d 22 t Check-in [%s]"
9320: 2c 20 7a 55 75 69 64 29 3b 0a 20 20 69 66 28 20 , zUuid);. if(
9330: 50 28 22 70 72 65 76 69 65 77 22 29 20 29 7b 0a P("preview") ){.
9340: 20 20 20 20 42 6c 6f 62 20 73 75 66 66 69 78 3b Blob suffix;
9350: 0a 20 20 20 20 69 6e 74 20 6e 54 61 67 20 3d 20 . int nTag =
9360: 30 3b 0a 20 20 20 20 40 20 3c 62 3e 50 72 65 76 0;. @ <b>Prev
9370: 69 65 77 3a 3c 2f 62 3e 0a 20 20 20 20 40 20 3c iew:</b>. @ <
9380: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 blockquote>.
9390: 40 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d @ <table border=
93a0: 30 3e 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 43 0>. if( zNewC
93b0: 6f 6c 6f 72 20 26 26 20 7a 4e 65 77 43 6f 6c 6f olor && zNewColo
93c0: 72 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 40 20 r[0] ){. @
93d0: 3c 74 72 3e 3c 74 64 20 62 67 63 6f 6c 6f 72 3d <tr><td bgcolor=
93e0: 22 25 68 28 7a 4e 65 77 43 6f 6c 6f 72 29 22 3e "%h(zNewColor)">
93f0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
9400: 20 20 40 20 3c 74 72 3e 3c 74 64 3e 0a 20 20 20 @ <tr><td>.
9410: 20 7d 0a 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76 }. wiki_conv
9420: 65 72 74 28 26 63 6f 6d 6d 65 6e 74 2c 20 30 2c ert(&comment, 0,
9430: 20 57 49 4b 49 5f 49 4e 4c 49 4e 45 29 3b 0a 20 WIKI_INLINE);.
9440: 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 73 75 blob_zero(&su
9450: 66 66 69 78 29 3b 0a 20 20 20 20 62 6c 6f 62 5f ffix);. blob_
9460: 61 70 70 65 6e 64 66 28 26 73 75 66 66 69 78 2c appendf(&suffix,
9470: 20 22 28 75 73 65 72 3a 20 25 68 22 2c 20 7a 4e "(user: %h", zN
9480: 65 77 55 73 65 72 29 3b 0a 20 20 20 20 64 62 5f ewUser);. db_
9490: 70 72 65 70 61 72 65 28 26 71 2c 20 22 53 45 4c prepare(&q, "SEL
94a0: 45 43 54 20 73 75 62 73 74 72 28 74 61 67 6e 61 ECT substr(tagna
94b0: 6d 65 2c 35 29 20 46 52 4f 4d 20 74 61 67 78 72 me,5) FROM tagxr
94c0: 65 66 2c 20 74 61 67 22 0a 20 20 20 20 20 20 20 ef, tag".
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48 " WH
94e0: 45 52 45 20 74 61 67 6e 61 6d 65 20 47 4c 4f 42 ERE tagname GLOB
94f0: 20 27 73 79 6d 2d 2a 27 20 41 4e 44 20 74 61 67 'sym-*' AND tag
9500: 78 72 65 66 2e 72 69 64 3d 25 64 22 0a 20 20 20 xref.rid=%d".
9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9520: 22 20 20 20 41 4e 44 20 74 61 67 74 79 70 65 3e " AND tagtype>
9530: 31 20 41 4e 44 20 74 61 67 2e 74 61 67 69 64 3d 1 AND tag.tagid=
9540: 74 61 67 78 72 65 66 2e 74 61 67 69 64 22 2c 0a tagxref.tagid",.
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9560: 20 20 20 72 69 64 29 3b 0a 20 20 20 20 77 68 69 rid);. whi
9570: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d le( db_step(&q)=
9580: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
9590: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
95a0: 2a 7a 54 61 67 20 3d 20 64 62 5f 63 6f 6c 75 6d *zTag = db_colum
95b0: 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 n_text(&q, 0);.
95c0: 20 20 20 20 20 69 66 28 20 6e 54 61 67 3d 3d 30 if( nTag==0
95d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 ){. blob
95e0: 5f 61 70 70 65 6e 64 66 28 26 73 75 66 66 69 78 _appendf(&suffix
95f0: 2c 20 22 2c 20 74 61 67 73 3a 20 25 68 22 2c 20 , ", tags: %h",
9600: 7a 54 61 67 29 3b 0a 20 20 20 20 20 20 7d 65 6c zTag);. }el
9610: 73 65 7b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 se{. blob
9620: 5f 61 70 70 65 6e 64 66 28 26 73 75 66 66 69 78 _appendf(&suffix
9630: 2c 20 22 2c 20 25 68 22 2c 20 7a 54 61 67 29 3b , ", %h", zTag);
9640: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e . }. n
9650: 54 61 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 Tag++;. }.
9660: 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 db_finalize(&q)
9670: 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e ;. blob_appen
9680: 64 66 28 26 73 75 66 66 69 78 2c 20 22 29 22 29 df(&suffix, ")")
9690: 3b 0a 20 20 20 20 40 20 25 73 28 62 6c 6f 62 5f ;. @ %s(blob_
96a0: 73 74 72 28 26 73 75 66 66 69 78 29 29 0a 20 20 str(&suffix)).
96b0: 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f @ </td></tr></
96c0: 74 61 62 6c 65 3e 0a 20 20 20 20 40 20 3c 2f 62 table>. @ </b
96d0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 40 lockquote>. @
96e0: 20 3c 68 72 3e 0a 20 20 20 20 62 6c 6f 62 5f 72 <hr>. blob_r
96f0: 65 73 65 74 28 26 73 75 66 66 69 78 29 3b 0a 20 eset(&suffix);.
9700: 20 7d 0a 20 20 40 20 3c 70 3e 4d 61 6b 65 20 63 }. @ <p>Make c
9710: 68 61 6e 67 65 73 20 74 6f 20 61 74 74 72 69 62 hanges to attrib
9720: 75 74 65 73 20 6f 66 20 63 68 65 63 6b 2d 69 6e utes of check-in
9730: 0a 20 20 40 20 5b 3c 61 20 68 72 65 66 3d 22 63 . @ [<a href="c
9740: 69 3f 6e 61 6d 65 3d 25 64 28 72 69 64 29 22 3e i?name=%d(rid)">
9750: 25 73 28 7a 55 75 69 64 29 3c 2f 61 3e 5d 3a 3c %s(zUuid)</a>]:<
9760: 2f 70 3e 0a 20 20 40 20 3c 66 6f 72 6d 20 61 63 /p>. @ <form ac
9770: 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 42 61 73 65 tion="%s(g.zBase
9780: 55 52 4c 29 2f 63 69 5f 65 64 69 74 22 20 6d 65 URL)/ci_edit" me
9790: 74 68 6f 64 3d 22 50 4f 53 54 22 3e 0a 20 20 6c thod="POST">. l
97a0: 6f 67 69 6e 5f 69 6e 73 65 72 74 5f 63 73 72 66 ogin_insert_csrf
97b0: 5f 73 65 63 72 65 74 28 29 3b 0a 20 20 40 20 3c _secret();. @ <
97c0: 69 6e 70 75 74 20 74 79 70 65 3d 22 68 69 64 64 input type="hidd
97d0: 65 6e 22 20 6e 61 6d 65 3d 22 72 22 20 76 61 6c en" name="r" val
97e0: 75 65 3d 22 25 64 28 72 69 64 29 22 3e 0a 20 20 ue="%d(rid)">.
97f0: 40 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d @ <table border=
9800: 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d "0" cellspacing=
9810: 22 31 30 22 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c "10">.. @ <tr><
9820: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 td align="right"
9830: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 valign="top"><b
9840: 3e 55 73 65 72 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a >User:</b></td>.
9850: 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 @ <td valign="
9860: 74 6f 70 22 3e 0a 20 20 40 20 20 20 3c 69 6e 70 top">. @ <inp
9870: 75 74 20 74 79 70 65 3d 22 74 65 78 74 22 20 6e ut type="text" n
9880: 61 6d 65 3d 22 75 22 20 73 69 7a 65 3d 22 32 30 ame="u" size="20
9890: 22 20 76 61 6c 75 65 3d 22 25 68 28 7a 4e 65 77 " value="%h(zNew
98a0: 55 73 65 72 29 22 3e 0a 20 20 40 20 3c 2f 74 64 User)">. @ </td
98b0: 3e 3c 2f 74 72 3e 0a 0a 20 20 40 20 3c 74 72 3e ></tr>.. @ <tr>
98c0: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 <td align="right
98d0: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c " valign="top"><
98e0: 62 3e 43 6f 6d 6d 65 6e 74 3a 3c 2f 62 3e 3c 2f b>Comment:</b></
98f0: 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 61 6c 69 td>. @ <td vali
9900: 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 3c 74 gn="top">. @ <t
9910: 65 78 74 61 72 65 61 20 6e 61 6d 65 3d 22 63 22 extarea name="c"
9920: 20 72 6f 77 73 3d 22 31 30 22 20 63 6f 6c 73 3d rows="10" cols=
9930: 22 38 30 22 3e 25 68 28 7a 4e 65 77 43 6f 6d 6d "80">%h(zNewComm
9940: 65 6e 74 29 3c 2f 74 65 78 74 61 72 65 61 3e 0a ent)</textarea>.
9950: 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a @ </td></tr>..
9960: 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 @ <tr><td alig
9970: 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e n="right" valign
9980: 3d 22 74 6f 70 22 3e 3c 62 3e 43 68 65 63 6b 2d ="top"><b>Check-
9990: 69 6e 20 54 69 6d 65 3a 3c 2f 62 3e 3c 2f 74 64 in Time:</b></td
99a0: 3e 0a 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e >. @ <td valign
99b0: 3d 22 74 6f 70 22 3e 0a 20 20 40 20 20 20 3c 69 ="top">. @ <i
99c0: 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 74 22 nput type="text"
99d0: 20 6e 61 6d 65 3d 22 64 74 22 20 73 69 7a 65 3d name="dt" size=
99e0: 22 32 30 22 20 76 61 6c 75 65 3d 22 25 68 28 7a "20" value="%h(z
99f0: 4e 65 77 44 61 74 65 29 22 3e 0a 20 20 40 20 3c NewDate)">. @ <
9a00: 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 20 40 20 3c /td></tr>.. @ <
9a10: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 tr><td align="ri
9a20: 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 ght" valign="top
9a30: 22 3e 3c 62 3e 42 61 63 6b 67 72 6f 75 6e 64 20 "><b>Background
9a40: 43 6f 6c 6f 72 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a Color:</b></td>.
9a50: 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 @ <td valign="
9a60: 74 6f 70 22 3e 0a 20 20 40 20 3c 74 61 62 6c 65 top">. @ <table
9a70: 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 border=0 cellpa
9a80: 64 64 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 dding=0 cellspac
9a90: 69 6e 67 3d 31 3e 0a 20 20 40 20 3c 74 72 3e 3c ing=1>. @ <tr><
9aa0: 74 64 20 63 6f 6c 73 70 61 6e 3d 22 36 22 20 61 td colspan="6" a
9ab0: 6c 69 67 6e 3d 22 6c 65 66 74 22 3e 0a 20 20 69 lign="left">. i
9ac0: 66 28 20 66 50 72 6f 70 61 67 61 74 65 43 6f 6c f( fPropagateCol
9ad0: 6f 72 20 29 7b 0a 20 20 20 20 40 20 3c 69 6e 70 or ){. @ <inp
9ae0: 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f ut type="checkbo
9af0: 78 22 20 6e 61 6d 65 3d 22 70 63 6c 72 22 20 63 x" name="pclr" c
9b00: 68 65 63 6b 65 64 3e 0a 20 20 7d 65 6c 73 65 7b hecked>. }else{
9b10: 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 79 . @ <input ty
9b20: 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 pe="checkbox" na
9b30: 6d 65 3d 22 70 63 6c 72 22 3e 0a 20 20 7d 0a 20 me="pclr">. }.
9b40: 20 40 20 50 72 6f 70 61 67 61 74 65 20 63 6f 6c @ Propagate col
9b50: 6f 72 20 74 6f 20 64 65 73 63 65 6e 64 61 6e 74 or to descendant
9b60: 73 3c 2f 69 6e 70 75 74 3e 3c 2f 74 64 3e 3c 2f s</input></td></
9b70: 74 72 3e 0a 20 20 40 20 3c 74 72 3e 0a 20 20 66 tr>. @ <tr>. f
9b80: 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 6f 72 or(i=0; i<nColor
9b90: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 ; i++){. if(
9ba0: 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f 72 aColor[i].zColor
9bb0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 40 20 3c [0] ){. @ <
9bc0: 74 64 20 62 67 63 6f 6c 6f 72 3d 22 25 68 28 61 td bgcolor="%h(a
9bd0: 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f 72 29 Color[i].zColor)
9be0: 22 3e 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 ">. }else{.
9bf0: 20 20 20 20 40 20 3c 74 64 3e 0a 20 20 20 20 7d @ <td>. }
9c00: 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 . if( strcmp(
9c10: 7a 4e 65 77 43 6f 6c 6f 72 2c 20 61 43 6f 6c 6f zNewColor, aColo
9c20: 72 5b 69 5d 2e 7a 43 6f 6c 6f 72 29 3d 3d 30 20 r[i].zColor)==0
9c30: 29 7b 0a 20 20 20 20 20 20 40 20 3c 69 6e 70 75 ){. @ <inpu
9c40: 74 20 74 79 70 65 3d 22 72 61 64 69 6f 22 20 6e t type="radio" n
9c50: 61 6d 65 3d 22 63 6c 72 22 20 76 61 6c 75 65 3d ame="clr" value=
9c60: 22 25 68 28 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 "%h(aColor[i].zC
9c70: 6f 6c 6f 72 29 22 20 63 68 65 63 6b 65 64 3e 0a olor)" checked>.
9c80: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
9c90: 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 @ <input type="
9ca0: 72 61 64 69 6f 22 20 6e 61 6d 65 3d 22 63 6c 72 radio" name="clr
9cb0: 22 20 76 61 6c 75 65 3d 22 25 68 28 61 43 6f 6c " value="%h(aCol
9cc0: 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f 72 29 22 3e 0a or[i].zColor)">.
9cd0: 20 20 20 20 7d 0a 20 20 20 20 40 20 25 68 28 61 }. @ %h(a
9ce0: 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 4e 61 6d 65 29 Color[i].zCName)
9cf0: 3c 2f 69 6e 70 75 74 3e 3c 2f 74 64 3e 0a 20 20 </input></td>.
9d00: 20 20 69 66 28 20 28 69 25 36 29 3d 3d 35 20 26 if( (i%6)==5 &
9d10: 26 20 69 2b 31 3c 6e 43 6f 6c 6f 72 20 29 7b 0a & i+1<nColor ){.
9d20: 20 20 20 20 20 20 40 20 3c 2f 74 72 3e 3c 74 72 @ </tr><tr
9d30: 3e 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 40 20 >. }. }. @
9d40: 3c 2f 74 72 3e 0a 20 20 40 20 3c 2f 74 61 62 6c </tr>. @ </tabl
9d50: 65 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 e>. @ </td></tr
9d60: 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 >.. @ <tr><td a
9d70: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c lign="right" val
9d80: 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 54 61 67 ign="top"><b>Tag
9d90: 73 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 s:</b></td>. @
9da0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 <td valign="top"
9db0: 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 >. @ <input typ
9dc0: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d e="checkbox" nam
9dd0: 65 3d 22 6e 65 77 74 61 67 22 25 73 28 7a 4e 65 e="newtag"%s(zNe
9de0: 77 54 61 67 46 6c 61 67 29 3e 0a 20 20 40 20 41 wTagFlag)>. @ A
9df0: 64 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 dd the following
9e00: 20 6e 65 77 20 74 61 67 20 6e 61 6d 65 20 74 6f new tag name to
9e10: 20 74 68 69 73 20 63 68 65 63 6b 2d 69 6e 3a 0a this check-in:.
9e20: 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
9e30: 22 74 65 78 74 22 20 77 69 64 74 68 3d 22 31 35 "text" width="15
9e40: 22 20 6e 61 6d 65 3d 22 74 61 67 6e 61 6d 65 22 " name="tagname"
9e50: 20 76 61 6c 75 65 3d 22 25 68 28 7a 4e 65 77 54 value="%h(zNewT
9e60: 61 67 29 22 3e 0a 20 20 64 62 5f 70 72 65 70 61 ag)">. db_prepa
9e70: 72 65 28 26 71 2c 0a 20 20 20 20 20 22 53 45 4c re(&q,. "SEL
9e80: 45 43 54 20 74 61 67 2e 74 61 67 69 64 2c 20 74 ECT tag.tagid, t
9e90: 61 67 6e 61 6d 65 20 46 52 4f 4d 20 74 61 67 78 agname FROM tagx
9ea0: 72 65 66 2c 20 74 61 67 22 0a 20 20 20 20 20 22 ref, tag". "
9eb0: 20 57 48 45 52 45 20 74 61 67 78 72 65 66 2e 72 WHERE tagxref.r
9ec0: 69 64 3d 25 64 20 41 4e 44 20 74 61 67 74 79 70 id=%d AND tagtyp
9ed0: 65 3e 30 20 41 4e 44 20 74 61 67 78 72 65 66 2e e>0 AND tagxref.
9ee0: 74 61 67 69 64 3d 74 61 67 2e 74 61 67 69 64 22 tagid=tag.tagid"
9ef0: 0a 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 . " ORDER BY
9f00: 20 43 41 53 45 20 57 48 45 4e 20 74 61 67 6e 61 CASE WHEN tagna
9f10: 6d 65 20 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 20 me GLOB 'sym-*'
9f20: 54 48 45 4e 20 73 75 62 73 74 72 28 74 61 67 6e THEN substr(tagn
9f30: 61 6d 65 2c 35 29 22 0a 20 20 20 20 20 22 20 20 ame,5)". "
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4c 53 ELS
9f50: 45 20 74 61 67 6e 61 6d 65 20 45 4e 44 22 2c 0a E tagname END",.
9f60: 20 20 20 20 20 72 69 64 0a 20 20 29 3b 0a 20 20 rid. );.
9f70: 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 while( db_step(&
9f80: 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 q)==SQLITE_ROW )
9f90: 7b 0a 20 20 20 20 69 6e 74 20 74 61 67 69 64 20 {. int tagid
9fa0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 = db_column_int(
9fb0: 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 &q, 0);. cons
9fc0: 74 20 63 68 61 72 20 2a 7a 54 61 67 4e 61 6d 65 t char *zTagName
9fd0: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
9fe0: 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 68 t(&q, 1);. ch
9ff0: 61 72 20 7a 4c 61 62 65 6c 5b 33 30 5d 3b 0a 20 ar zLabel[30];.
a000: 20 20 20 73 70 72 69 6e 74 66 28 7a 4c 61 62 65 sprintf(zLabe
a010: 6c 2c 20 22 63 25 64 22 2c 20 74 61 67 69 64 29 l, "c%d", tagid)
a020: 3b 0a 20 20 20 20 69 66 28 20 50 28 7a 4c 61 62 ;. if( P(zLab
a030: 65 6c 29 20 29 7b 0a 20 20 20 20 20 20 40 20 3c el) ){. @ <
a040: 62 72 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 br><input type="
a050: 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 checkbox" name="
a060: 63 25 64 28 74 61 67 69 64 29 22 20 63 68 65 63 c%d(tagid)" chec
a070: 6b 65 64 3e 0a 20 20 20 20 7d 65 6c 73 65 7b 0a ked>. }else{.
a080: 20 20 20 20 20 20 40 20 3c 62 72 3e 3c 69 6e 70 @ <br><inp
a090: 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f ut type="checkbo
a0a0: 78 22 20 6e 61 6d 65 3d 22 63 25 64 28 74 61 67 x" name="c%d(tag
a0b0: 69 64 29 22 3e 0a 20 20 20 20 7d 0a 20 20 20 20 id)">. }.
a0c0: 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 54 61 67 if( strncmp(zTag
a0d0: 4e 61 6d 65 2c 20 22 73 79 6d 2d 22 2c 20 34 29 Name, "sym-", 4)
a0e0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 40 20 43 ==0 ){. @ C
a0f0: 61 6e 63 65 6c 20 74 61 67 20 3c 62 3e 25 68 28 ancel tag <b>%h(
a100: 26 7a 54 61 67 4e 61 6d 65 5b 34 5d 29 3c 2f 62 &zTagName[4])</b
a110: 3e 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 >. }else{.
a120: 20 20 20 40 20 43 61 6e 63 65 6c 20 73 70 65 63 @ Cancel spec
a130: 69 61 6c 20 74 61 67 20 3c 62 3e 25 68 28 7a 54 ial tag <b>%h(zT
a140: 61 67 4e 61 6d 65 29 3c 2f 62 3e 0a 20 20 20 20 agName)</b>.
a150: 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c }. }. db_final
a160: 69 7a 65 28 26 71 29 3b 0a 20 20 40 20 3c 2f 74 ize(&q);. @ </t
a170: 64 3e 3c 2f 74 72 3e 0a 0a 20 20 69 66 28 20 64 d></tr>.. if( d
a180: 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 b_exists("SELECT
a190: 20 31 20 46 52 4f 4d 20 74 61 67 78 72 65 66 20 1 FROM tagxref
a1a0: 57 48 45 52 45 20 72 69 64 3d 25 64 20 41 4e 44 WHERE rid=%d AND
a1b0: 20 74 61 67 69 64 3d 25 64 20 41 4e 44 20 73 72 tagid=%d AND sr
a1c0: 63 69 64 3e 30 22 2c 0a 20 20 20 20 20 20 20 20 cid>0",.
a1d0: 20 20 20 20 20 20 20 20 72 69 64 2c 20 54 41 47 rid, TAG
a1e0: 5f 42 52 41 4e 43 48 29 3d 3d 30 20 29 7b 0a 20 _BRANCH)==0 ){.
a1f0: 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 @ <tr><td ali
a200: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 gn="right" valig
a210: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 42 72 61 6e 63 n="top"><b>Branc
a220: 68 69 6e 67 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 hing:</b></td>.
a230: 20 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d @ <td valign=
a240: 22 74 6f 70 22 3e 0a 20 20 20 20 40 20 3c 69 6e "top">. @ <in
a250: 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 put type="checkb
a260: 6f 78 22 20 6e 61 6d 65 3d 22 6e 65 77 62 72 22 ox" name="newbr"
a270: 25 73 28 7a 4e 65 77 42 72 46 6c 61 67 29 3e 0a %s(zNewBrFlag)>.
a280: 20 20 20 20 40 20 4d 61 6b 65 20 74 68 69 73 20 @ Make this
a290: 63 68 65 63 6b 2d 69 6e 20 74 68 65 20 73 74 61 check-in the sta
a2a0: 72 74 20 6f 66 20 61 20 6e 65 77 20 62 72 61 6e rt of a new bran
a2b0: 63 68 20 6e 61 6d 65 64 3a 0a 20 20 20 20 40 20 ch named:. @
a2c0: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 <input type="tex
a2d0: 74 22 20 77 69 64 74 68 3d 22 31 35 22 20 6e 61 t" width="15" na
a2e0: 6d 65 3d 22 62 72 6e 61 6d 65 22 20 76 61 6c 75 me="brname" valu
a2f0: 65 3d 22 25 68 28 7a 4e 65 77 42 72 61 6e 63 68 e="%h(zNewBranch
a300: 29 22 3e 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c )">. @ </td><
a310: 2f 74 72 3e 0a 20 20 7d 0a 0a 20 20 69 66 28 20 /tr>. }.. if(
a320: 69 73 5f 61 5f 6c 65 61 66 28 72 69 64 29 0a 20 is_a_leaf(rid).
a330: 20 20 26 26 20 21 64 62 5f 65 78 69 73 74 73 28 && !db_exists(
a340: 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 "SELECT 1 FROM t
a350: 61 67 78 72 65 66 20 22 0a 20 20 20 20 20 20 20 agxref ".
a360: 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 " WHER
a370: 45 20 74 61 67 69 64 3d 25 64 20 41 4e 44 20 72 E tagid=%d AND r
a380: 69 64 3d 25 64 20 41 4e 44 20 74 61 67 74 79 70 id=%d AND tagtyp
a390: 65 3e 30 22 2c 0a 20 20 20 20 20 20 20 20 20 20 e>0",.
a3a0: 20 20 20 20 20 20 20 54 41 47 5f 43 4c 4f 53 45 TAG_CLOSE
a3b0: 44 2c 20 72 69 64 29 0a 20 20 29 7b 0a 20 20 20 D, rid). ){.
a3c0: 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e @ <tr><td align
a3d0: 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d ="right" valign=
a3e0: 22 74 6f 70 22 3e 3c 62 3e 4c 65 61 66 20 43 6c "top"><b>Leaf Cl
a3f0: 6f 73 75 72 65 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a osure:</b></td>.
a400: 20 20 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e @ <td valign
a410: 3d 22 74 6f 70 22 3e 0a 20 20 20 20 40 20 3c 69 ="top">. @ <i
a420: 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b nput type="check
a430: 62 6f 78 22 20 6e 61 6d 65 3d 22 63 6c 6f 73 65 box" name="close
a440: 22 25 73 28 7a 43 6c 6f 73 65 46 6c 61 67 29 3e "%s(zCloseFlag)>
a450: 0a 20 20 20 20 40 20 4d 61 72 6b 20 74 68 69 73 . @ Mark this
a460: 20 6c 65 61 66 20 61 73 20 22 63 6c 6f 73 65 64 leaf as "closed
a470: 22 20 73 6f 20 74 68 61 74 20 69 74 20 6e 6f 20 " so that it no
a480: 6c 6f 6e 67 65 72 20 61 70 70 65 61 72 73 20 6f longer appears o
a490: 6e 20 74 68 65 0a 20 20 20 20 40 20 22 6c 65 61 n the. @ "lea
a4a0: 76 65 73 22 20 70 61 67 65 20 61 6e 64 20 69 73 ves" page and is
a4b0: 20 6e 6f 20 6c 6f 6e 67 65 72 20 6c 61 62 65 6c no longer label
a4c0: 65 64 20 61 73 20 61 20 22 3c 62 3e 4c 65 61 66 ed as a "<b>Leaf
a4d0: 3c 2f 62 3e 22 2e 0a 20 20 20 20 40 20 3c 2f 74 </b>".. @ </t
a4e0: 64 3e 3c 2f 74 72 3e 0a 20 20 7d 0a 0a 0a 20 20 d></tr>. }...
a4f0: 40 20 3c 74 72 3e 3c 74 64 20 63 6f 6c 73 70 61 @ <tr><td colspa
a500: 6e 3d 22 32 22 3e 0a 20 20 40 20 3c 69 6e 70 75 n="2">. @ <inpu
a510: 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 t type="submit"
a520: 6e 61 6d 65 3d 22 70 72 65 76 69 65 77 22 20 76 name="preview" v
a530: 61 6c 75 65 3d 22 50 72 65 76 69 65 77 22 3e 0a alue="Preview">.
a540: 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
a550: 22 73 75 62 6d 69 74 22 20 6e 61 6d 65 3d 22 61 "submit" name="a
a560: 70 70 6c 79 22 20 76 61 6c 75 65 3d 22 41 70 70 pply" value="App
a570: 6c 79 20 43 68 61 6e 67 65 73 22 3e 0a 20 20 40 ly Changes">. @
a580: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75 <input type="su
a590: 62 6d 69 74 22 20 6e 61 6d 65 3d 22 63 61 6e 63 bmit" name="canc
a5a0: 65 6c 22 20 76 61 6c 75 65 3d 22 43 61 6e 63 65 el" value="Cance
a5b0: 6c 22 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 l">. @ </td></t
a5c0: 72 3e 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e 0a r>. @ </table>.
a5d0: 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 73 74 @ </form>. st
a5e0: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a yle_footer();.}.