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 0a cular check-in..
1c00: 2a 2f 0a 76 6f 69 64 20 63 69 5f 70 61 67 65 28 */.void ci_page(
1c10: 76 6f 69 64 29 7b 0a 20 20 53 74 6d 74 20 71 3b void){. Stmt q;
1c20: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 69 6e . int rid;. in
1c30: 74 20 69 73 4c 65 61 66 3b 0a 0a 20 20 6c 6f 67 t isLeaf;.. log
1c40: 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 in_check_credent
1c50: 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 ials();. if( !g
1c60: 2e 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e .okRead ){ login
1c70: 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 _needed(); retur
1c80: 6e 3b 20 7d 0a 20 20 72 69 64 20 3d 20 6e 61 6d n; }. rid = nam
1c90: 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d e_to_rid(PD("nam
1ca0: 65 22 2c 22 30 22 29 29 3b 0a 20 20 69 66 28 20 e","0"));. if(
1cb0: 72 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 rid==0 ){. st
1cc0: 79 6c 65 5f 68 65 61 64 65 72 28 22 43 68 65 63 yle_header("Chec
1cd0: 6b 2d 69 6e 20 49 6e 66 6f 72 6d 61 74 69 6f 6e k-in Information
1ce0: 20 45 72 72 6f 72 22 29 3b 0a 20 20 20 20 40 20 Error");. @
1cf0: 4e 6f 20 73 75 63 68 20 6f 62 6a 65 63 74 3a 20 No such object:
1d00: 25 68 28 67 2e 61 72 67 76 5b 32 5d 29 0a 20 20 %h(g.argv[2]).
1d10: 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 style_footer()
1d20: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 ;. return;.
1d30: 7d 0a 20 20 69 73 4c 65 61 66 20 3d 20 21 64 62 }. isLeaf = !db
1d40: 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 _exists("SELECT
1d50: 31 20 46 52 4f 4d 20 70 6c 69 6e 6b 20 57 48 45 1 FROM plink WHE
1d60: 52 45 20 70 69 64 3d 25 64 22 2c 20 72 69 64 29 RE pid=%d", rid)
1d70: 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 ;. db_prepare(&
1d80: 71 2c 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54 q, . "SELECT
1d90: 20 75 75 69 64 2c 20 64 61 74 65 74 69 6d 65 28 uuid, datetime(
1da0: 6d 74 69 6d 65 2c 20 27 6c 6f 63 61 6c 74 69 6d mtime, 'localtim
1db0: 65 27 29 2c 20 75 73 65 72 2c 20 63 6f 6d 6d 65 e'), user, comme
1dc0: 6e 74 22 0a 20 20 20 20 20 22 20 20 46 52 4f 4d nt". " FROM
1dd0: 20 62 6c 6f 62 2c 20 65 76 65 6e 74 22 0a 20 20 blob, event".
1de0: 20 20 20 22 20 57 48 45 52 45 20 62 6c 6f 62 2e " WHERE blob.
1df0: 72 69 64 3d 25 64 22 0a 20 20 20 20 20 22 20 20 rid=%d". "
1e00: 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 6a 69 64 AND event.objid
1e10: 3d 25 64 22 2c 0a 20 20 20 20 20 72 69 64 2c 20 =%d",. rid,
1e20: 72 69 64 0a 20 20 29 3b 0a 20 20 69 66 28 20 64 rid. );. if( d
1e30: 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 b_step(&q)==SQLI
1e40: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f TE_ROW ){. co
1e50: 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 20 nst char *zUuid
1e60: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
1e70: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 68 61 (&q, 0);. cha
1e80: 72 20 2a 7a 54 69 74 6c 65 20 3d 20 6d 70 72 69 r *zTitle = mpri
1e90: 6e 74 66 28 22 43 68 65 63 6b 2d 69 6e 20 5b 25 ntf("Check-in [%
1ea0: 2e 31 30 73 5d 22 2c 20 7a 55 75 69 64 29 3b 0a .10s]", zUuid);.
1eb0: 20 20 20 20 63 68 61 72 20 2a 7a 45 55 73 65 72 char *zEUser
1ec0: 2c 20 2a 7a 45 43 6f 6d 6d 65 6e 74 3b 0a 20 20 , *zEComment;.
1ed0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 const char *zU
1ee0: 73 65 72 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 ser;. const c
1ef0: 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 3b 0a 20 har *zComment;.
1f00: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
1f10: 44 61 74 65 3b 0a 20 20 20 20 73 74 79 6c 65 5f Date;. style_
1f20: 68 65 61 64 65 72 28 7a 54 69 74 6c 65 29 3b 0a header(zTitle);.
1f30: 20 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d login_anonym
1f40: 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 3b ous_available();
1f50: 0a 20 20 20 20 66 72 65 65 28 7a 54 69 74 6c 65 . free(zTitle
1f60: 29 3b 0a 20 20 20 20 7a 45 55 73 65 72 20 3d 20 );. zEUser =
1f70: 64 62 5f 74 65 78 74 28 30 2c 0a 20 20 20 20 20 db_text(0,.
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 "S
1f90: 45 4c 45 43 54 20 76 61 6c 75 65 20 46 52 4f 4d ELECT value FROM
1fa0: 20 74 61 67 78 72 65 66 20 57 48 45 52 45 20 74 tagxref WHERE t
1fb0: 61 67 69 64 3d 25 64 20 41 4e 44 20 72 69 64 3d agid=%d AND rid=
1fc0: 25 64 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 %d",.
1fd0: 20 20 20 20 20 20 20 20 20 54 41 47 5f 55 53 45 TAG_USE
1fe0: 52 2c 20 72 69 64 29 3b 0a 20 20 20 20 7a 45 43 R, rid);. zEC
1ff0: 6f 6d 6d 65 6e 74 20 3d 20 64 62 5f 74 65 78 74 omment = db_text
2000: 28 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 (0, .
2010: 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 "SELECT
2020: 76 61 6c 75 65 20 46 52 4f 4d 20 74 61 67 78 72 value FROM tagxr
2030: 65 66 20 57 48 45 52 45 20 74 61 67 69 64 3d 25 ef WHERE tagid=%
2040: 64 20 41 4e 44 20 72 69 64 3d 25 64 22 2c 0a 20 d AND rid=%d",.
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2060: 20 20 54 41 47 5f 43 4f 4d 4d 45 4e 54 2c 20 72 TAG_COMMENT, r
2070: 69 64 29 3b 0a 20 20 20 20 7a 55 73 65 72 20 3d id);. zUser =
2080: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
2090: 26 71 2c 20 32 29 3b 0a 20 20 20 20 7a 43 6f 6d &q, 2);. zCom
20a0: 6d 65 6e 74 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e ment = db_column
20b0: 5f 74 65 78 74 28 26 71 2c 20 33 29 3b 0a 20 20 _text(&q, 3);.
20c0: 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c zDate = db_col
20d0: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 31 29 3b 0a umn_text(&q,1);.
20e0: 20 20 20 20 40 20 3c 64 69 76 20 63 6c 61 73 73 @ <div class
20f0: 3d 22 73 65 63 74 69 6f 6e 22 3e 4f 76 65 72 76 ="section">Overv
2100: 69 65 77 3c 2f 64 69 76 3e 0a 20 20 20 20 40 20 iew</div>. @
2110: 3c 70 3e 3c 74 61 62 6c 65 20 63 6c 61 73 73 3d <p><table class=
2120: 22 6c 61 62 65 6c 2d 76 61 6c 75 65 22 3e 0a 20 "label-value">.
2130: 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 53 48 41 @ <tr><th>SHA
2140: 31 26 6e 62 73 70 3b 48 61 73 68 3a 3c 2f 74 68 1 Hash:</th
2150: 3e 3c 74 64 3e 25 73 28 7a 55 75 69 64 29 0a 20 ><td>%s(zUuid).
2160: 20 20 20 69 66 28 20 67 2e 6f 6b 53 65 74 75 70 if( g.okSetup
2170: 20 29 7b 0a 20 20 20 20 20 20 40 20 28 52 65 63 ){. @ (Rec
2180: 6f 72 64 20 49 44 3a 20 25 64 28 72 69 64 29 29 ord ID: %d(rid))
2190: 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 2f 74 . }. @ </t
21a0: 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 40 20 3c 74 d></tr>. @ <t
21b0: 72 3e 3c 74 68 3e 44 61 74 65 3a 3c 2f 74 68 3e r><th>Date:</th>
21c0: 3c 74 64 3e 0a 20 20 20 20 68 79 70 65 72 6c 69 <td>. hyperli
21d0: 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 61 74 65 nk_to_date(zDate
21e0: 2c 20 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b , "</td></tr>");
21f0: 0a 20 20 20 20 69 66 28 20 7a 45 55 73 65 72 20 . if( zEUser
2200: 29 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c ){. @ <tr><
2210: 74 68 3e 45 64 69 74 65 64 26 6e 62 73 70 3b 55 th>Edited U
2220: 73 65 72 3a 3c 2f 74 64 3e 3c 74 64 3e 0a 20 20 ser:</td><td>.
2230: 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f hyperlink_to
2240: 5f 75 73 65 72 28 7a 45 55 73 65 72 2c 7a 44 61 _user(zEUser,zDa
2250: 74 65 2c 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 te,"</td></tr>")
2260: 3b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 ;. @ <tr><t
2270: 68 3e 4f 72 69 67 69 6e 61 6c 26 6e 62 73 70 3b h>Original
2280: 55 73 65 72 3a 3c 2f 74 68 3e 3c 74 64 3e 0a 20 User:</th><td>.
2290: 20 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 hyperlink_t
22a0: 6f 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a 44 61 o_user(zUser,zDa
22b0: 74 65 2c 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 te,"</td></tr>")
22c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 ;. }else{.
22d0: 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 55 73 65 @ <tr><th>Use
22e0: 72 3a 3c 2f 74 64 3e 3c 74 64 3e 0a 20 20 20 20 r:</td><td>.
22f0: 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 hyperlink_to_u
2300: 73 65 72 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c ser(zUser,zDate,
2310: 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 "</td></tr>");.
2320: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 45 43 }. if( zEC
2330: 6f 6d 6d 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 omment ){.
2340: 40 20 3c 74 72 3e 3c 74 68 3e 45 64 69 74 65 64 @ <tr><th>Edited
2350: 26 6e 62 73 70 3b 43 6f 6d 6d 65 6e 74 3a 3c 2f Comment:</
2360: 74 68 3e 3c 74 64 3e 25 77 28 7a 45 43 6f 6d 6d th><td>%w(zEComm
2370: 65 6e 74 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 ent)</td></tr>.
2380: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 4f @ <tr><th>O
2390: 72 69 67 69 6e 61 6c 26 6e 62 73 70 3b 43 6f 6d riginal Com
23a0: 6d 65 6e 74 3a 3c 2f 74 68 3e 3c 74 64 3e 25 77 ment:</th><td>%w
23b0: 28 7a 43 6f 6d 6d 65 6e 74 29 3c 2f 74 64 3e 3c (zComment)</td><
23c0: 2f 74 72 3e 0a 20 20 20 20 7d 65 6c 73 65 7b 0a /tr>. }else{.
23d0: 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e @ <tr><th>
23e0: 43 6f 6d 6d 65 6e 74 3a 3c 2f 74 68 3e 3c 74 64 Comment:</th><td
23f0: 3e 25 77 28 7a 43 6f 6d 6d 65 6e 74 29 3c 2f 74 >%w(zComment)</t
2400: 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 7d 0a 20 20 d></tr>. }.
2410: 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 @ </td></tr>.
2420: 20 20 20 69 66 28 20 67 2e 6f 6b 41 64 6d 69 6e if( g.okAdmin
2430: 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 70 72 65 ){. db_pre
2440: 70 61 72 65 28 26 71 2c 20 0a 20 20 20 20 20 20 pare(&q, .
2450: 20 20 20 22 53 45 4c 45 43 54 20 72 63 76 66 72 "SELECT rcvfr
2460: 6f 6d 2e 69 70 61 64 64 72 2c 20 75 73 65 72 2e om.ipaddr, user.
2470: 6c 6f 67 69 6e 2c 20 64 61 74 65 74 69 6d 65 28 login, datetime(
2480: 72 63 76 66 72 6f 6d 2e 6d 74 69 6d 65 29 22 0a rcvfrom.mtime)".
2490: 20 20 20 20 20 20 20 20 20 22 20 20 46 52 4f 4d " FROM
24a0: 20 62 6c 6f 62 20 4a 4f 49 4e 20 72 63 76 66 72 blob JOIN rcvfr
24b0: 6f 6d 20 55 53 49 4e 47 28 72 63 76 69 64 29 20 om USING(rcvid)
24c0: 4c 45 46 54 20 4a 4f 49 4e 20 75 73 65 72 20 55 LEFT JOIN user U
24d0: 53 49 4e 47 28 75 69 64 29 22 0a 20 20 20 20 20 SING(uid)".
24e0: 20 20 20 20 22 20 57 48 45 52 45 20 62 6c 6f 62 " WHERE blob
24f0: 2e 72 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 20 .rid=%d",.
2500: 20 20 20 72 69 64 0a 20 20 20 20 20 20 29 3b 0a rid. );.
2510: 20 20 20 20 20 20 69 66 28 20 64 62 5f 73 74 65 if( db_ste
2520: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
2530: 57 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e W ){. con
2540: 73 74 20 63 68 61 72 20 2a 7a 49 70 41 64 64 72 st char *zIpAddr
2550: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
2560: 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 20 20 t(&q, 0);.
2570: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 const char *zU
2580: 73 65 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ser = db_column_
2590: 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 text(&q, 1);.
25a0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
25b0: 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 *zDate = db_colu
25c0: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 29 3b 0a mn_text(&q, 2);.
25d0: 20 20 20 20 20 20 20 20 69 66 28 20 7a 55 73 65 if( zUse
25e0: 72 3d 3d 30 20 7c 7c 20 7a 55 73 65 72 5b 30 5d r==0 || zUser[0]
25f0: 3d 3d 30 20 29 20 7a 55 73 65 72 20 3d 20 22 75 ==0 ) zUser = "u
2600: 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 20 nknown";.
2610: 20 40 20 3c 74 72 3e 3c 74 68 3e 52 65 63 65 69 @ <tr><th>Recei
2620: 76 65 64 26 6e 62 73 70 3b 46 72 6f 6d 3a 3c 2f ved From:</
2630: 74 68 3e 0a 20 20 20 20 20 20 20 20 40 20 3c 74 th>. @ <t
2640: 64 3e 25 68 28 7a 55 73 65 72 29 20 40 20 25 68 d>%h(zUser) @ %h
2650: 28 7a 49 70 41 64 64 72 29 20 6f 6e 20 25 73 28 (zIpAddr) on %s(
2660: 7a 44 61 74 65 29 3c 2f 74 64 3e 3c 2f 74 72 3e zDate)</td></tr>
2670: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 . }. d
2680: 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a b_finalize(&q);.
2690: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 67 2e }. if( g.
26a0: 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 okHistory ){.
26b0: 20 20 20 63 68 61 72 20 2a 7a 53 68 6f 72 74 55 char *zShortU
26c0: 75 69 64 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 uid = mprintf("%
26d0: 2e 31 30 73 22 2c 20 7a 55 75 69 64 29 3b 0a 20 .10s", zUuid);.
26e0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
26f0: 2a 7a 50 72 6f 6a 4e 61 6d 65 20 3d 20 64 62 5f *zProjName = db_
2700: 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 6e 61 6d get("project-nam
2710: 65 22 2c 20 22 75 6e 6e 61 6d 65 64 22 29 3b 0a e", "unnamed");.
2720: 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e @ <tr><th>
2730: 54 69 6d 65 6c 69 6e 65 73 3a 3c 2f 74 68 3e 3c Timelines:</th><
2740: 74 64 3e 0a 20 20 20 20 20 20 40 20 20 20 20 3c td>. @ <
2750: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
2760: 73 65 55 52 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f seURL)/timeline?
2770: 70 3d 25 64 28 72 69 64 29 22 3e 61 6e 63 65 73 p=%d(rid)">ances
2780: 74 6f 72 73 3c 2f 61 3e 0a 20 20 20 20 20 20 40 tors</a>. @
2790: 20 20 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 | <a href="%
27a0: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 74 69 s(g.zBaseURL)/ti
27b0: 6d 65 6c 69 6e 65 3f 64 3d 25 64 28 72 69 64 29 meline?d=%d(rid)
27c0: 22 3e 64 65 73 63 65 6e 64 61 6e 74 73 3c 2f 61 ">descendants</a
27d0: 3e 0a 20 20 20 20 20 20 40 20 20 20 20 7c 20 3c >. @ | <
27e0: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
27f0: 73 65 55 52 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f seURL)/timeline?
2800: 64 3d 25 64 28 72 69 64 29 26 70 3d 25 64 28 72 d=%d(rid)&p=%d(r
2810: 69 64 29 22 3e 62 6f 74 68 3c 2f 61 3e 0a 20 20 id)">both</a>.
2820: 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 db_prepare(&
2830: 71 2c 20 22 53 45 4c 45 43 54 20 73 75 62 73 74 q, "SELECT subst
2840: 72 28 74 61 67 2e 74 61 67 6e 61 6d 65 2c 35 29 r(tag.tagname,5)
2850: 20 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 FROM tagxref, t
2860: 61 67 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 ag ".
2870: 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 " WHER
2880: 45 20 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 E rid=%d AND tag
2890: 74 79 70 65 3e 30 20 22 0a 20 20 20 20 20 20 20 type>0 ".
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 "
28b0: 20 20 41 4e 44 20 74 61 67 2e 74 61 67 69 64 3d AND tag.tagid=
28c0: 74 61 67 78 72 65 66 2e 74 61 67 69 64 20 22 0a tagxref.tagid ".
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28e0: 20 20 20 20 20 22 20 20 20 41 4e 44 20 2b 74 61 " AND +ta
28f0: 67 2e 74 61 67 6e 61 6d 65 20 47 4c 4f 42 20 27 g.tagname GLOB '
2900: 73 79 6d 2d 2a 27 22 2c 20 72 69 64 29 3b 0a 20 sym-*'", rid);.
2910: 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 while( db_s
2920: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
2930: 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 63 ROW ){. c
2940: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 67 4e onst char *zTagN
2950: 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ame = db_column_
2960: 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 text(&q, 0);.
2970: 20 20 20 20 20 40 20 20 7c 20 3c 61 20 68 72 65 @ | <a hre
2980: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
2990: 29 2f 74 69 6d 65 6c 69 6e 65 3f 74 3d 25 54 28 )/timeline?t=%T(
29a0: 7a 54 61 67 4e 61 6d 65 29 22 3e 25 68 28 7a 54 zTagName)">%h(zT
29b0: 61 67 4e 61 6d 65 29 3c 2f 61 3e 0a 20 20 20 20 agName)</a>.
29c0: 20 20 7d 0a 20 20 20 20 20 20 64 62 5f 66 69 6e }. db_fin
29d0: 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 20 20 alize(&q);.
29e0: 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 @ </td></tr>.
29f0: 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 4f 74 @ <tr><th>Ot
2a00: 68 65 72 26 6e 62 73 70 3b 4c 69 6e 6b 73 3a 3c her Links:<
2a10: 2f 74 68 3e 0a 20 20 20 20 20 20 40 20 20 20 3c /th>. @ <
2a20: 74 64 3e 0a 20 20 20 20 20 20 40 20 20 20 20 20 td>. @
2a30: 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 <a href="%s(g.zB
2a40: 61 73 65 55 52 4c 29 2f 64 69 72 3f 63 69 3d 25 aseURL)/dir?ci=%
2a50: 73 28 7a 53 68 6f 72 74 55 75 69 64 29 22 3e 66 s(zShortUuid)">f
2a60: 69 6c 65 73 3c 2f 61 3e 0a 20 20 20 20 20 20 40 iles</a>. @
2a70: 20 20 20 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 | <a href="
2a80: 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 7a %s(g.zBaseURL)/z
2a90: 69 70 2f 25 73 28 7a 50 72 6f 6a 4e 61 6d 65 29 ip/%s(zProjName)
2aa0: 2d 25 73 28 7a 53 68 6f 72 74 55 75 69 64 29 2e -%s(zShortUuid).
2ab0: 7a 69 70 3f 75 75 69 64 3d 25 73 28 7a 55 75 69 zip?uuid=%s(zUui
2ac0: 64 29 22 3e 0a 20 20 20 20 20 20 40 20 20 20 20 d)">. @
2ad0: 20 20 20 20 20 5a 49 50 20 61 72 63 68 69 76 65 ZIP archive
2ae0: 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 20 20 </a>. @
2af0: 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 | <a href="%s(g
2b00: 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 69 66 .zBaseURL)/artif
2b10: 61 63 74 2f 25 64 28 72 69 64 29 22 3e 6d 61 6e act/%d(rid)">man
2b20: 69 66 65 73 74 3c 2f 61 3e 0a 20 20 20 20 20 20 ifest</a>.
2b30: 69 66 28 20 67 2e 6f 6b 57 72 69 74 65 20 29 7b if( g.okWrite ){
2b40: 0a 20 20 20 20 20 20 20 20 40 20 20 20 20 20 7c . @ |
2b50: 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a <a href="%s(g.z
2b60: 42 61 73 65 55 52 4c 29 2f 63 69 5f 65 64 69 74 BaseURL)/ci_edit
2b70: 3f 72 3d 25 64 28 72 69 64 29 22 3e 65 64 69 74 ?r=%d(rid)">edit
2b80: 3c 2f 61 3e 0a 20 20 20 20 20 20 7d 0a 20 20 20 </a>. }.
2b90: 20 20 20 40 20 20 20 3c 2f 74 64 3e 0a 20 20 20 @ </td>.
2ba0: 20 20 20 40 20 3c 2f 74 72 3e 0a 20 20 20 20 20 @ </tr>.
2bb0: 20 66 72 65 65 28 7a 53 68 6f 72 74 55 75 69 64 free(zShortUuid
2bc0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c );. }. @ <
2bd0: 2f 74 61 62 6c 65 3e 3c 2f 70 3e 0a 20 20 7d 65 /table></p>. }e
2be0: 6c 73 65 7b 0a 20 20 20 20 73 74 79 6c 65 5f 68 lse{. style_h
2bf0: 65 61 64 65 72 28 22 43 68 65 63 6b 2d 69 6e 20 eader("Check-in
2c00: 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 3b 0a 20 Information");.
2c10: 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f login_anonymo
2c20: 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 3b 0a us_available();.
2c30: 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a }. db_finaliz
2c40: 65 28 26 71 29 3b 0a 20 20 73 68 6f 77 54 61 67 e(&q);. showTag
2c50: 73 28 72 69 64 2c 20 22 22 29 3b 0a 20 20 40 20 s(rid, "");. @
2c60: 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 63 74 <div class="sect
2c70: 69 6f 6e 22 3e 43 68 61 6e 67 65 73 3c 2f 64 69 ion">Changes</di
2c80: 76 3e 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 v>. db_prepare(
2c90: 26 71 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 54 &q,. "SELECT
2ca0: 20 70 69 64 2c 20 66 69 64 2c 20 6e 61 6d 65 2c pid, fid, name,
2cb0: 20 73 75 62 73 74 72 28 61 2e 75 75 69 64 2c 31 substr(a.uuid,1
2cc0: 2c 31 30 29 2c 20 73 75 62 73 74 72 28 62 2e 75 ,10), substr(b.u
2cd0: 75 69 64 2c 31 2c 31 30 29 22 0a 20 20 20 20 20 uid,1,10)".
2ce0: 22 20 20 46 52 4f 4d 20 6d 6c 69 6e 6b 20 4a 4f " FROM mlink JO
2cf0: 49 4e 20 66 69 6c 65 6e 61 6d 65 20 4f 4e 20 66 IN filename ON f
2d00: 69 6c 65 6e 61 6d 65 2e 66 6e 69 64 3d 6d 6c 69 ilename.fnid=mli
2d10: 6e 6b 2e 66 6e 69 64 22 0a 20 20 20 20 20 22 20 nk.fnid". "
2d20: 20 20 20 20 20 20 20 20 4c 45 46 54 20 4a 4f 49 LEFT JOI
2d30: 4e 20 62 6c 6f 62 20 61 20 4f 4e 20 61 2e 72 69 N blob a ON a.ri
2d40: 64 3d 70 69 64 22 0a 20 20 20 20 20 22 20 20 20 d=pid". "
2d50: 20 20 20 20 20 20 4c 45 46 54 20 4a 4f 49 4e 20 LEFT JOIN
2d60: 62 6c 6f 62 20 62 20 4f 4e 20 62 2e 72 69 64 3d blob b ON b.rid=
2d70: 66 69 64 22 0a 20 20 20 20 20 22 20 57 48 45 52 fid". " WHER
2d80: 45 20 6d 6c 69 6e 6b 2e 6d 69 64 3d 25 64 22 0a E mlink.mid=%d".
2d90: 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 " ORDER BY
2da0: 6e 61 6d 65 22 2c 0a 20 20 20 20 20 72 69 64 0a name",. rid.
2db0: 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 );. while( db
2dc0: 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 _step(&q)==SQLIT
2dd0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74 E_ROW ){. int
2de0: 20 70 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e pid = db_column
2df0: 5f 69 6e 74 28 26 71 2c 30 29 3b 0a 20 20 20 20 _int(&q,0);.
2e00: 69 6e 74 20 66 69 64 20 3d 20 64 62 5f 63 6f 6c int fid = db_col
2e10: 75 6d 6e 5f 69 6e 74 28 26 71 2c 31 29 3b 0a 20 umn_int(&q,1);.
2e20: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
2e30: 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e Name = db_column
2e40: 5f 74 65 78 74 28 26 71 2c 32 29 3b 0a 20 20 20 _text(&q,2);.
2e50: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 6c const char *zOl
2e60: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 d = db_column_te
2e70: 78 74 28 26 71 2c 33 29 3b 0a 20 20 20 20 63 6f xt(&q,3);. co
2e80: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 20 3d nst char *zNew =
2e90: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
2ea0: 26 71 2c 34 29 3b 0a 20 20 20 20 69 66 28 20 21 &q,4);. if( !
2eb0: 67 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 g.okHistory ){.
2ec0: 20 20 20 20 20 69 66 28 20 7a 4e 65 77 3d 3d 30 if( zNew==0
2ed0: 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 3c 70 ){. @ <p
2ee0: 3e 44 65 6c 65 74 65 64 20 25 68 28 7a 4e 61 6d >Deleted %h(zNam
2ef0: 65 29 3c 2f 70 3e 0a 20 20 20 20 20 20 20 20 63 e)</p>. c
2f00: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d ontinue;. }
2f10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 40 20 else{. @
2f20: 3c 70 3e 43 68 61 6e 67 65 73 20 74 6f 20 25 68 <p>Changes to %h
2f30: 28 7a 4e 61 6d 65 29 3c 2f 70 3e 0a 20 20 20 20 (zName)</p>.
2f40: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 }. }else if
2f50: 28 20 7a 4f 6c 64 20 26 26 20 7a 4e 65 77 20 29 ( zOld && zNew )
2f60: 7b 0a 20 20 20 20 20 20 40 20 3c 70 3e 4d 6f 64 {. @ <p>Mod
2f70: 69 66 69 65 64 20 3c 61 20 68 72 65 66 3d 22 25 ified <a href="%
2f80: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 69 s(g.zBaseURL)/fi
2f90: 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 6d nfo?name=%T(zNam
2fa0: 65 29 22 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f 61 e)">%h(zName)</a
2fb0: 3e 0a 20 20 20 20 20 20 40 20 66 72 6f 6d 20 3c >. @ from <
2fc0: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
2fd0: 73 65 55 52 4c 29 2f 61 72 74 69 66 61 63 74 2f seURL)/artifact/
2fe0: 25 73 28 7a 4f 6c 64 29 22 3e 5b 25 73 28 7a 4f %s(zOld)">[%s(zO
2ff0: 6c 64 29 5d 3c 2f 61 3e 0a 20 20 20 20 20 20 40 ld)]</a>. @
3000: 20 74 6f 20 3c 61 20 68 72 65 66 3d 22 25 73 28 to <a href="%s(
3010: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 69 g.zBaseURL)/arti
3020: 66 61 63 74 2f 25 73 28 7a 4e 65 77 29 22 3e 5b fact/%s(zNew)">[
3030: 25 73 28 7a 4e 65 77 29 5d 3c 2f 61 3e 3c 2f 70 %s(zNew)]</a></p
3040: 3e 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 >. }else if(
3050: 7a 4f 6c 64 20 29 7b 0a 20 20 20 20 20 20 40 20 zOld ){. @
3060: 3c 70 3e 44 65 6c 65 74 65 64 20 3c 61 20 68 72 <p>Deleted <a hr
3070: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
3080: 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 L)/finfo?name=%T
3090: 28 7a 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 6d (zName)">%h(zNam
30a0: 65 29 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 76 e)</a>. @ v
30b0: 65 72 73 69 6f 6e 20 3c 61 20 68 72 65 66 3d 22 ersion <a href="
30c0: 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 %s(g.zBaseURL)/a
30d0: 72 74 69 66 61 63 74 2f 25 73 28 7a 4f 6c 64 29 rtifact/%s(zOld)
30e0: 22 3e 5b 25 73 28 7a 4f 6c 64 29 5d 3c 2f 61 3e ">[%s(zOld)]</a>
30f0: 3c 2f 70 3e 0a 20 20 20 20 20 20 63 6f 6e 74 69 </p>. conti
3100: 6e 75 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a nue;. }else{.
3110: 20 20 20 20 20 20 40 20 3c 70 3e 41 64 64 65 64 @ <p>Added
3120: 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a <a href="%s(g.z
3130: 42 61 73 65 55 52 4c 29 2f 66 69 6e 66 6f 3f 6e BaseURL)/finfo?n
3140: 61 6d 65 3d 25 54 28 7a 4e 61 6d 65 29 22 3e 25 ame=%T(zName)">%
3150: 68 28 7a 4e 61 6d 65 29 3c 2f 61 3e 0a 20 20 20 h(zName)</a>.
3160: 20 20 20 40 20 76 65 72 73 69 6f 6e 20 3c 61 20 @ version <a
3170: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
3180: 55 52 4c 29 2f 61 72 74 69 66 61 63 74 2f 25 73 URL)/artifact/%s
3190: 28 7a 4e 65 77 29 22 3e 5b 25 73 28 7a 4e 65 77 (zNew)">[%s(zNew
31a0: 29 5d 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 20 20 7d )]</a></p>. }
31b0: 0a 20 20 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f . @ <blockquo
31c0: 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 61 70 70 te><pre>. app
31d0: 65 6e 64 5f 64 69 66 66 28 70 69 64 2c 20 66 69 end_diff(pid, fi
31e0: 64 29 3b 0a 20 20 20 20 40 20 3c 2f 70 72 65 3e d);. @ </pre>
31f0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 </blockquote>.
3200: 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 }. db_finalize(
3210: 26 71 29 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f &q);. style_foo
3220: 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 ter();.}../*.**
3230: 57 45 42 50 41 47 45 3a 20 77 69 6e 66 6f 0a 2a WEBPAGE: winfo.*
3240: 2a 20 55 52 4c 3a 20 20 2f 77 69 6e 66 6f 3f 6e * URL: /winfo?n
3250: 61 6d 65 3d 52 49 44 0a 2a 2a 0a 2a 2a 20 52 65 ame=RID.**.** Re
3260: 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e turn information
3270: 20 61 62 6f 75 74 20 61 20 77 69 6b 69 20 70 61 about a wiki pa
3280: 67 65 2e 0a 2a 2f 0a 76 6f 69 64 20 77 69 6e 66 ge..*/.void winf
3290: 6f 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 o_page(void){.
32a0: 53 74 6d 74 20 71 3b 0a 20 20 69 6e 74 20 72 69 Stmt q;. int ri
32b0: 64 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 d;.. login_chec
32c0: 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b k_credentials();
32d0: 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 64 57 69 . if( !g.okRdWi
32e0: 6b 69 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 ki ){ login_need
32f0: 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a ed(); return; }.
3300: 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f rid = name_to_
3310: 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c 22 30 rid(PD("name","0
3320: 22 29 29 3b 0a 20 20 69 66 28 20 72 69 64 3d 3d "));. if( rid==
3330: 30 20 29 7b 0a 20 20 20 20 73 74 79 6c 65 5f 68 0 ){. style_h
3340: 65 61 64 65 72 28 22 57 69 6b 69 20 50 61 67 65 eader("Wiki Page
3350: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 45 72 72 Information Err
3360: 6f 72 22 29 3b 0a 20 20 20 20 40 20 4e 6f 20 73 or");. @ No s
3370: 75 63 68 20 6f 62 6a 65 63 74 3a 20 25 68 28 67 uch object: %h(g
3380: 2e 61 72 67 76 5b 32 5d 29 0a 20 20 20 20 73 74 .argv[2]). st
3390: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 20 20 yle_footer();.
33a0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 return;. }.
33b0: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 0a db_prepare(&q, .
33c0: 20 20 20 20 20 22 53 45 4c 45 43 54 20 73 75 62 "SELECT sub
33d0: 73 74 72 28 74 61 67 6e 61 6d 65 2c 20 36 2c 20 str(tagname, 6,
33e0: 31 30 30 30 29 2c 20 75 75 69 64 2c 22 0a 20 20 1000), uuid,".
33f0: 20 20 20 22 20 20 20 20 20 20 20 64 61 74 65 74 " datet
3400: 69 6d 65 28 65 76 65 6e 74 2e 6d 74 69 6d 65 2c ime(event.mtime,
3410: 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 2c 20 75 'localtime'), u
3420: 73 65 72 22 0a 20 20 20 20 20 22 20 20 46 52 4f ser". " FRO
3430: 4d 20 74 61 67 78 72 65 66 2c 20 74 61 67 2c 20 M tagxref, tag,
3440: 62 6c 6f 62 2c 20 65 76 65 6e 74 22 0a 20 20 20 blob, event".
3450: 20 20 22 20 57 48 45 52 45 20 74 61 67 78 72 65 " WHERE tagxre
3460: 66 2e 72 69 64 3d 25 64 22 0a 20 20 20 20 20 22 f.rid=%d". "
3470: 20 20 20 41 4e 44 20 74 61 67 2e 74 61 67 69 64 AND tag.tagid
3480: 3d 74 61 67 78 72 65 66 2e 74 61 67 69 64 22 0a =tagxref.tagid".
3490: 20 20 20 20 20 22 20 20 20 41 4e 44 20 74 61 67 " AND tag
34a0: 2e 74 61 67 6e 61 6d 65 20 4c 49 4b 45 20 27 77 .tagname LIKE 'w
34b0: 69 6b 69 2d 25 25 27 22 0a 20 20 20 20 20 22 20 iki-%%'". "
34c0: 20 20 41 4e 44 20 62 6c 6f 62 2e 72 69 64 3d 25 AND blob.rid=%
34d0: 64 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 20 d". " AND
34e0: 65 76 65 6e 74 2e 6f 62 6a 69 64 3d 25 64 22 2c event.objid=%d",
34f0: 0a 20 20 20 20 20 72 69 64 2c 20 72 69 64 2c 20 . rid, rid,
3500: 72 69 64 0a 20 20 29 3b 0a 20 20 69 66 28 20 64 rid. );. if( d
3510: 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 b_step(&q)==SQLI
3520: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f TE_ROW ){. co
3530: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 nst char *zName
3540: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
3550: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e (&q, 0);. con
3560: 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 20 3d st char *zUuid =
3570: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
3580: 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 68 61 72 &q, 1);. char
3590: 20 2a 7a 54 69 74 6c 65 20 3d 20 6d 70 72 69 6e *zTitle = mprin
35a0: 74 66 28 22 57 69 6b 69 20 50 61 67 65 20 25 73 tf("Wiki Page %s
35b0: 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 63 ", zName);. c
35c0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 onst char *zDate
35d0: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
35e0: 74 28 26 71 2c 32 29 3b 0a 20 20 20 20 63 6f 6e t(&q,2);. con
35f0: 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 3d st char *zUser =
3600: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
3610: 26 71 2c 33 29 3b 0a 20 20 20 20 73 74 79 6c 65 &q,3);. style
3620: 5f 68 65 61 64 65 72 28 7a 54 69 74 6c 65 29 3b _header(zTitle);
3630: 0a 20 20 20 20 66 72 65 65 28 7a 54 69 74 6c 65 . free(zTitle
3640: 29 3b 0a 20 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f );. login_ano
3650: 6e 79 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 nymous_available
3660: 28 29 3b 0a 20 20 20 20 40 20 3c 64 69 76 20 63 ();. @ <div c
3670: 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 3e 4f lass="section">O
3680: 76 65 72 76 69 65 77 3c 2f 64 69 76 3e 0a 20 20 verview</div>.
3690: 20 20 40 20 3c 70 3e 3c 74 61 62 6c 65 20 63 6c @ <p><table cl
36a0: 61 73 73 3d 22 6c 61 62 65 6c 2d 76 61 6c 75 65 ass="label-value
36b0: 22 3e 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 ">. @ <tr><th
36c0: 3e 56 65 72 73 69 6f 6e 3a 3c 2f 74 68 3e 3c 74 >Version:</th><t
36d0: 64 3e 25 73 28 7a 55 75 69 64 29 3c 2f 74 64 3e d>%s(zUuid)</td>
36e0: 3c 2f 74 72 3e 0a 20 20 20 20 40 20 3c 74 72 3e </tr>. @ <tr>
36f0: 3c 74 68 3e 44 61 74 65 3a 3c 2f 74 68 3e 3c 74 <th>Date:</th><t
3700: 64 3e 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b d>. hyperlink
3710: 5f 74 6f 5f 64 61 74 65 28 7a 44 61 74 65 2c 20 _to_date(zDate,
3720: 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 "</td></tr>");.
3730: 20 20 20 69 66 28 20 67 2e 6f 6b 53 65 74 75 70 if( g.okSetup
3740: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e ){. @ <tr>
3750: 3c 74 68 3e 52 65 63 6f 72 64 20 49 44 3a 3c 2f <th>Record ID:</
3760: 74 68 3e 3c 74 64 3e 25 64 28 72 69 64 29 3c 2f th><td>%d(rid)</
3770: 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 7d 0a 20 td></tr>. }.
3780: 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 4f 72 69 @ <tr><th>Ori
3790: 67 69 6e 61 6c 26 6e 62 73 70 3b 55 73 65 72 3a ginal User:
37a0: 3c 2f 74 68 3e 3c 74 64 3e 0a 20 20 20 20 68 79 </th><td>. hy
37b0: 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 28 perlink_to_user(
37c0: 7a 55 73 65 72 2c 20 7a 44 61 74 65 2c 20 22 3c zUser, zDate, "<
37d0: 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 20 /td></tr>");.
37e0: 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 if( g.okHistory
37f0: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e ){. @ <tr>
3800: 3c 74 68 3e 43 6f 6d 6d 61 6e 64 73 3a 3c 2f 74 <th>Commands:</t
3810: 68 3e 0a 20 20 20 20 20 20 40 20 20 20 3c 74 64 h>. @ <td
3820: 3e 0a 20 20 20 20 20 20 2f 2a 20 40 20 20 20 20 >. /* @
3830: 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a <a href="%s(g.z
3840: 42 61 73 65 55 52 4c 29 2f 77 64 69 66 66 2f 25 BaseURL)/wdiff/%
3850: 64 28 72 69 64 29 22 3e 64 69 66 66 3c 2f 61 3e d(rid)">diff</a>
3860: 20 7c 20 2a 2f 0a 20 20 20 20 20 20 40 20 20 20 | */. @
3870: 20 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e <a href="%s(g.
3880: 7a 42 61 73 65 55 52 4c 29 2f 77 68 69 73 74 6f zBaseURL)/whisto
3890: 72 79 3f 6e 61 6d 65 3d 25 74 28 7a 4e 61 6d 65 ry?name=%t(zName
38a0: 29 22 3e 68 69 73 74 6f 72 79 3c 2f 61 3e 0a 20 )">history</a>.
38b0: 20 20 20 20 20 40 20 20 20 20 20 7c 20 3c 61 20 @ | <a
38c0: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
38d0: 55 52 4c 29 2f 61 72 74 69 66 61 63 74 2f 25 64 URL)/artifact/%d
38e0: 28 72 69 64 29 22 3e 72 61 77 2d 74 65 78 74 3c (rid)">raw-text<
38f0: 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 20 3c 2f /a>. @ </
3900: 74 64 3e 0a 20 20 20 20 20 20 40 20 3c 2f 74 72 td>. @ </tr
3910: 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 2f >. }. @ </
3920: 74 61 62 6c 65 3e 3c 2f 70 3e 0a 20 20 7d 65 6c table></p>. }el
3930: 73 65 7b 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 se{. style_he
3940: 61 64 65 72 28 22 57 69 6b 69 20 49 6e 66 6f 72 ader("Wiki Infor
3950: 6d 61 74 69 6f 6e 22 29 3b 0a 20 20 20 20 72 69 mation");. ri
3960: 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 64 62 5f d = 0;. }. db_
3970: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
3980: 73 68 6f 77 54 61 67 73 28 72 69 64 2c 20 22 77 showTags(rid, "w
3990: 69 6b 69 2d 2a 22 29 3b 0a 20 20 69 66 28 20 72 iki-*");. if( r
39a0: 69 64 20 29 7b 0a 20 20 20 20 42 6c 6f 62 20 63 id ){. Blob c
39b0: 6f 6e 74 65 6e 74 3b 0a 20 20 20 20 4d 61 6e 69 ontent;. Mani
39c0: 66 65 73 74 20 6d 3b 0a 20 20 20 20 6d 65 6d 73 fest m;. mems
39d0: 65 74 28 26 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 et(&m, 0, sizeof
39e0: 28 6d 29 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a (m));. blob_z
39f0: 65 72 6f 28 26 6d 2e 63 6f 6e 74 65 6e 74 29 3b ero(&m.content);
3a00: 0a 20 20 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 . content_get
3a10: 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 29 3b (rid, &content);
3a20: 0a 20 20 20 20 6d 61 6e 69 66 65 73 74 5f 70 61 . manifest_pa
3a30: 72 73 65 28 26 6d 2c 20 26 63 6f 6e 74 65 6e 74 rse(&m, &content
3a40: 29 3b 0a 20 20 20 20 69 66 28 20 6d 2e 74 79 70 );. if( m.typ
3a50: 65 3d 3d 43 46 54 59 50 45 5f 57 49 4b 49 20 29 e==CFTYPE_WIKI )
3a60: 7b 0a 20 20 20 20 20 20 42 6c 6f 62 20 77 69 6b {. Blob wik
3a70: 69 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 69 6e i;. blob_in
3a80: 69 74 28 26 77 69 6b 69 2c 20 6d 2e 7a 57 69 6b it(&wiki, m.zWik
3a90: 69 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 40 20 i, -1);. @
3aa0: 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 63 74 <div class="sect
3ab0: 69 6f 6e 22 3e 43 6f 6e 74 65 6e 74 3c 2f 64 69 ion">Content</di
3ac0: 76 3e 0a 20 20 20 20 20 20 77 69 6b 69 5f 63 6f v>. wiki_co
3ad0: 6e 76 65 72 74 28 26 77 69 6b 69 2c 20 30 2c 20 nvert(&wiki, 0,
3ae0: 30 29 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 72 0);. blob_r
3af0: 65 73 65 74 28 26 77 69 6b 69 29 3b 0a 20 20 20 eset(&wiki);.
3b00: 20 7d 0a 20 20 20 20 6d 61 6e 69 66 65 73 74 5f }. manifest_
3b10: 63 6c 65 61 72 28 26 6d 29 3b 0a 20 20 7d 0a 20 clear(&m);. }.
3b20: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
3b30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 .}../*.** WEBPAG
3b40: 45 3a 20 76 64 69 66 66 0a 2a 2a 20 55 52 4c 3a E: vdiff.** URL:
3b50: 20 2f 76 64 69 66 66 3f 6e 61 6d 65 3d 52 49 44 /vdiff?name=RID
3b60: 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 20 61 6c 6c 20 .**.** Show all
3b70: 64 69 66 66 65 72 65 6e 63 65 73 20 66 6f 72 20 differences for
3b80: 61 20 70 61 72 74 69 63 75 6c 61 72 20 63 68 65 a particular che
3b90: 63 6b 2d 69 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 76 ck-in..*/.void v
3ba0: 64 69 66 66 5f 70 61 67 65 28 76 6f 69 64 29 7b diff_page(void){
3bb0: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 53 74 . int rid;. St
3bc0: 6d 74 20 71 3b 0a 20 20 63 68 61 72 20 2a 7a 55 mt q;. char *zU
3bd0: 75 69 64 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 uid;.. login_ch
3be0: 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 eck_credentials(
3bf0: 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 65 );. if( !g.okRe
3c00: 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 ad ){ login_need
3c10: 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a ed(); return; }.
3c20: 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f 75 login_anonymou
3c30: 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 3b 0a 0a s_available();..
3c40: 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f rid = name_to_
3c50: 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c 22 22 rid(PD("name",""
3c60: 29 29 3b 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 ));. if( rid==0
3c70: 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 72 ){. fossil_r
3c80: 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a edirect_home();.
3c90: 20 20 7d 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 }. zUuid = db
3ca0: 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 _text(0, "SELECT
3cb0: 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 uuid FROM blob
3cc0: 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 72 WHERE rid=%d", r
3cd0: 69 64 29 3b 0a 20 20 73 74 79 6c 65 5f 68 65 61 id);. style_hea
3ce0: 64 65 72 28 22 43 68 65 63 6b 2d 69 6e 20 5b 25 der("Check-in [%
3cf0: 2e 31 30 73 5d 22 2c 20 7a 55 75 69 64 29 3b 0a .10s]", zUuid);.
3d00: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c db_prepare(&q,
3d10: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 64 61 74 . "SELECT dat
3d20: 65 74 69 6d 65 28 6d 74 69 6d 65 29 2c 20 22 0a etime(mtime), ".
3d30: 20 20 20 20 22 20 20 20 20 20 20 20 63 6f 61 6c " coal
3d40: 65 73 63 65 28 65 76 65 6e 74 2e 65 63 6f 6d 6d esce(event.ecomm
3d50: 65 6e 74 2c 65 76 65 6e 74 2e 63 6f 6d 6d 65 6e ent,event.commen
3d60: 74 29 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 t),". "
3d70: 20 63 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 2e coalesce(event.
3d80: 65 75 73 65 72 2c 65 76 65 6e 74 2e 75 73 65 72 euser,event.user
3d90: 29 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20 65 )". " FROM e
3da0: 76 65 6e 74 20 57 48 45 52 45 20 74 79 70 65 3d vent WHERE type=
3db0: 27 63 69 27 20 41 4e 44 20 6f 62 6a 69 64 3d 25 'ci' AND objid=%
3dc0: 64 22 2c 0a 20 20 20 20 72 69 64 0a 20 20 29 3b d",. rid. );
3dd0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 . while( db_ste
3de0: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
3df0: 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 W ){. const c
3e00: 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f har *zDate = db_
3e10: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
3e20: 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 0);. const ch
3e30: 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 ar *zUser = db_c
3e40: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 olumn_text(&q, 2
3e50: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
3e60: 72 20 2a 7a 43 6f 6d 6d 65 6e 74 20 3d 20 64 62 r *zComment = db
3e70: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
3e80: 20 31 29 3b 0a 20 20 20 20 40 20 3c 68 32 3e 43 1);. @ <h2>C
3e90: 68 65 63 6b 2d 69 6e 20 25 73 28 7a 55 75 69 64 heck-in %s(zUuid
3ea0: 29 3c 2f 68 32 3e 0a 20 20 20 20 40 20 3c 70 3e )</h2>. @ <p>
3eb0: 4d 61 64 65 20 62 79 0a 20 20 20 20 68 79 70 65 Made by. hype
3ec0: 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 28 7a 55 rlink_to_user(zU
3ed0: 73 65 72 2c 7a 44 61 74 65 2c 22 20 6f 6e 22 29 ser,zDate," on")
3ee0: 3b 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f ;. hyperlink_
3ef0: 74 6f 5f 64 61 74 65 28 7a 44 61 74 65 2c 20 22 to_date(zDate, "
3f00: 3a 22 29 3b 0a 20 20 20 20 40 20 25 77 28 7a 43 :");. @ %w(zC
3f10: 6f 6d 6d 65 6e 74 29 2e 20 0a 20 20 20 20 69 66 omment). . if
3f20: 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b ( g.okHistory ){
3f30: 0a 20 20 20 20 20 20 40 20 3c 61 20 68 72 65 66 . @ <a href
3f40: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
3f50: 2f 63 69 2f 25 73 28 7a 55 75 69 64 29 22 3e 5b /ci/%s(zUuid)">[
3f60: 64 65 74 61 69 6c 73 5d 3c 2f 61 3e 0a 20 20 20 details]</a>.
3f70: 20 7d 0a 20 20 20 20 40 20 3c 2f 70 3e 3c 68 72 }. @ </p><hr
3f80: 3e 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c >. }. db_final
3f90: 69 7a 65 28 26 71 29 3b 0a 20 20 64 62 5f 70 72 ize(&q);. db_pr
3fa0: 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 20 22 epare(&q,. "
3fb0: 53 45 4c 45 43 54 20 70 69 64 2c 20 66 69 64 2c SELECT pid, fid,
3fc0: 20 6e 61 6d 65 22 0a 20 20 20 20 20 22 20 20 46 name". " F
3fd0: 52 4f 4d 20 6d 6c 69 6e 6b 2c 20 66 69 6c 65 6e ROM mlink, filen
3fe0: 61 6d 65 22 0a 20 20 20 20 20 22 20 57 48 45 52 ame". " WHER
3ff0: 45 20 6d 6c 69 6e 6b 2e 6d 69 64 3d 25 64 22 0a E mlink.mid=%d".
4000: 20 20 20 20 20 22 20 20 20 41 4e 44 20 66 69 6c " AND fil
4010: 65 6e 61 6d 65 2e 66 6e 69 64 3d 6d 6c 69 6e 6b ename.fnid=mlink
4020: 2e 66 6e 69 64 22 0a 20 20 20 20 20 22 20 4f 52 .fnid". " OR
4030: 44 45 52 20 42 59 20 6e 61 6d 65 22 2c 0a 20 20 DER BY name",.
4040: 20 20 20 72 69 64 0a 20 20 29 3b 0a 20 20 77 68 rid. );. wh
4050: 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 ile( db_step(&q)
4060: 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a ==SQLITE_ROW ){.
4070: 20 20 20 20 69 6e 74 20 70 69 64 20 3d 20 64 62 int pid = db
4080: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 30 _column_int(&q,0
4090: 29 3b 0a 20 20 20 20 69 6e 74 20 66 69 64 20 3d );. int fid =
40a0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 db_column_int(&
40b0: 71 2c 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 q,1);. const
40c0: 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 char *zName = db
40d0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
40e0: 32 29 3b 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 2);. if( g.ok
40f0: 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 History ){.
4100: 20 40 20 3c 70 3e 3c 61 20 68 72 65 66 3d 22 25 @ <p><a href="%
4110: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 69 s(g.zBaseURL)/fi
4120: 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 6d nfo?name=%T(zNam
4130: 65 29 22 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f 61 e)">%h(zName)</a
4140: 3e 3c 2f 70 3e 0a 20 20 20 20 7d 65 6c 73 65 7b ></p>. }else{
4150: 0a 20 20 20 20 20 20 40 20 3c 70 3e 25 68 28 7a . @ <p>%h(z
4160: 4e 61 6d 65 29 3c 2f 70 3e 0a 20 20 20 20 7d 0a Name)</p>. }.
4170: 20 20 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 @ <blockquot
4180: 65 3e 3c 70 72 65 3e 0a 20 20 20 20 61 70 70 65 e><pre>. appe
4190: 6e 64 5f 64 69 66 66 28 70 69 64 2c 20 66 69 64 nd_diff(pid, fid
41a0: 29 3b 0a 20 20 20 20 40 20 3c 2f 70 72 65 3e 3c );. @ </pre><
41b0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 7d /blockquote>. }
41c0: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 . db_finalize(&
41d0: 71 29 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 q);. style_foot
41e0: 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 er();.}../*.** W
41f0: 72 69 74 65 20 61 20 64 65 73 63 72 69 70 74 69 rite a descripti
4200: 6f 6e 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 on of an object
4210: 74 6f 20 74 68 65 20 77 77 77 20 72 65 70 6c 79 to the www reply
4220: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6f ..**.** If the o
4230: 62 6a 65 63 74 20 69 73 20 61 20 66 69 6c 65 20 bject is a file
4240: 74 68 65 6e 20 6d 65 6e 74 69 6f 6e 3a 0a 2a 2a then mention:.**
4250: 0a 2a 2a 20 20 20 20 20 2a 20 49 74 27 73 20 61 .** * It's a
4260: 72 74 69 66 61 63 74 20 49 44 0a 2a 2a 20 20 20 rtifact ID.**
4270: 20 20 2a 20 41 6c 6c 20 69 74 73 20 66 69 6c 65 * All its file
4280: 6e 61 6d 65 73 0a 2a 2a 20 20 20 20 20 2a 20 54 names.** * T
4290: 68 65 20 63 68 65 63 6b 2d 69 6e 20 69 74 20 77 he check-in it w
42a0: 61 73 20 70 61 72 74 20 6f 66 2c 20 77 69 74 68 as part of, with
42b0: 20 74 69 6d 65 73 20 61 6e 64 20 75 73 65 72 73 times and users
42c0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6f 62 .**.** If the ob
42d0: 6a 65 63 74 20 69 73 20 61 20 6d 61 6e 69 66 65 ject is a manife
42e0: 73 74 2c 20 74 68 65 6e 20 6d 65 6e 74 69 6f 6e st, then mention
42f0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 49 74 :.**.** * It
4300: 27 73 20 61 72 74 69 66 61 63 74 20 49 44 0a 2a 's artifact ID.*
4310: 2a 20 20 20 20 20 2a 20 64 61 74 65 20 6f 66 20 * * date of
4320: 63 68 65 63 6b 2d 69 6e 0a 2a 2a 20 20 20 20 20 check-in.**
4330: 2a 20 43 6f 6d 6d 65 6e 74 20 26 20 75 73 65 72 * Comment & user
4340: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 .*/.static void
4350: 6f 62 6a 65 63 74 5f 64 65 73 63 72 69 70 74 69 object_descripti
4360: 6f 6e 28 0a 20 20 69 6e 74 20 72 69 64 2c 20 20 on(. int rid,
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
4380: 2a 20 54 68 65 20 61 72 74 69 66 61 63 74 20 49 * The artifact I
4390: 44 20 2a 2f 0a 20 20 69 6e 74 20 6c 69 6e 6b 54 D */. int linkT
43a0: 6f 56 69 65 77 2c 20 20 20 20 20 20 20 20 20 20 oView,
43b0: 2f 2a 20 41 64 64 20 76 69 65 77 65 72 20 6c 69 /* Add viewer li
43c0: 6e 6b 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 nk if true */.
43d0: 42 6c 6f 62 20 2a 70 44 6f 77 6e 6c 6f 61 64 4e Blob *pDownloadN
43e0: 61 6d 65 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c ame /* Fill
43f0: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 with an appropr
4400: 69 61 74 65 20 64 6f 77 6e 6c 6f 61 64 20 6e 61 iate download na
4410: 6d 65 20 2a 2f 0a 29 7b 0a 20 20 53 74 6d 74 20 me */.){. Stmt
4420: 71 3b 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 q;. int cnt = 0
4430: 3b 0a 20 20 69 6e 74 20 6e 57 69 6b 69 20 3d 20 ;. int nWiki =
4440: 30 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 0;. db_prepare(
4450: 26 71 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 20 &q,. "SELECT
4460: 66 69 6c 65 6e 61 6d 65 2e 6e 61 6d 65 2c 20 64 filename.name, d
4470: 61 74 65 74 69 6d 65 28 65 76 65 6e 74 2e 6d 74 atetime(event.mt
4480: 69 6d 65 29 2c 22 0a 20 20 20 20 22 20 20 20 20 ime),". "
4490: 20 20 20 63 6f 61 6c 65 73 63 65 28 65 76 65 6e coalesce(even
44a0: 74 2e 65 63 6f 6d 6d 65 6e 74 2c 65 76 65 6e 74 t.ecomment,event
44b0: 2e 63 6f 6d 6d 65 6e 74 29 2c 22 0a 20 20 20 20 .comment),".
44c0: 22 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 " coalesce
44d0: 28 65 76 65 6e 74 2e 65 75 73 65 72 2c 65 76 65 (event.euser,eve
44e0: 6e 74 2e 75 73 65 72 29 2c 22 0a 20 20 20 20 22 nt.user),". "
44f0: 20 20 20 20 20 20 20 62 2e 75 75 69 64 22 0a 20 b.uuid".
4500: 20 20 20 22 20 20 46 52 4f 4d 20 6d 6c 69 6e 6b " FROM mlink
4510: 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 65 76 65 6e , filename, even
4520: 74 2c 20 62 6c 6f 62 20 61 2c 20 62 6c 6f 62 20 t, blob a, blob
4530: 62 22 0a 20 20 20 20 22 20 57 48 45 52 45 20 66 b". " WHERE f
4540: 69 6c 65 6e 61 6d 65 2e 66 6e 69 64 3d 6d 6c 69 ilename.fnid=mli
4550: 6e 6b 2e 66 6e 69 64 22 0a 20 20 20 20 22 20 20 nk.fnid". "
4560: 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 6a 69 64 AND event.objid
4570: 3d 6d 6c 69 6e 6b 2e 6d 69 64 22 0a 20 20 20 20 =mlink.mid".
4580: 22 20 20 20 41 4e 44 20 61 2e 72 69 64 3d 6d 6c " AND a.rid=ml
4590: 69 6e 6b 2e 66 69 64 22 0a 20 20 20 20 22 20 20 ink.fid". "
45a0: 20 41 4e 44 20 62 2e 72 69 64 3d 6d 6c 69 6e 6b AND b.rid=mlink
45b0: 2e 6d 69 64 22 0a 20 20 20 20 22 20 20 20 41 4e .mid". " AN
45c0: 44 20 6d 6c 69 6e 6b 2e 66 69 64 3d 25 64 22 2c D mlink.fid=%d",
45d0: 0a 20 20 20 20 72 69 64 0a 20 20 29 3b 0a 20 20 . rid. );.
45e0: 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 while( db_step(&
45f0: 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 q)==SQLITE_ROW )
4600: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 {. const char
4610: 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c *zName = db_col
4620: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b umn_text(&q, 0);
4630: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
4640: 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 *zDate = db_colu
4650: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a mn_text(&q, 1);.
4660: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
4670: 7a 43 6f 6d 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e zCom = db_column
4680: 5f 74 65 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 _text(&q, 2);.
4690: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 const char *zU
46a0: 73 65 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ser = db_column_
46b0: 74 65 78 74 28 26 71 2c 20 33 29 3b 0a 20 20 20 text(&q, 3);.
46c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 65 const char *zVe
46d0: 72 73 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 rs = db_column_t
46e0: 65 78 74 28 26 71 2c 20 34 29 3b 0a 20 20 20 20 ext(&q, 4);.
46f0: 69 66 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 if( cnt>0 ){.
4700: 20 20 20 40 20 41 6c 73 6f 20 66 69 6c 65 0a 20 @ Also file.
4710: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
4720: 40 20 46 69 6c 65 0a 20 20 20 20 7d 0a 20 20 20 @ File. }.
4730: 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 if( g.okHistory
4740: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 61 20 68 ){. @ <a h
4750: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
4760: 52 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 RL)/finfo?name=%
4770: 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 T(zName)">%h(zNa
4780: 6d 65 29 3c 2f 61 3e 0a 20 20 20 20 7d 65 6c 73 me)</a>. }els
4790: 65 7b 0a 20 20 20 20 20 20 40 20 25 68 28 7a 4e e{. @ %h(zN
47a0: 61 6d 65 29 0a 20 20 20 20 7d 0a 20 20 20 20 40 ame). }. @
47b0: 20 70 61 72 74 20 6f 66 20 63 68 65 63 6b 2d 69 part of check-i
47c0: 6e 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f n. hyperlink_
47d0: 74 6f 5f 75 75 69 64 28 7a 56 65 72 73 29 3b 0a to_uuid(zVers);.
47e0: 20 20 20 20 40 20 2d 20 25 77 28 7a 43 6f 6d 29 @ - %w(zCom)
47f0: 20 62 79 20 0a 20 20 20 20 68 79 70 65 72 6c 69 by . hyperli
4800: 6e 6b 5f 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 nk_to_user(zUser
4810: 2c 7a 44 61 74 65 2c 22 20 6f 6e 22 29 3b 0a 20 ,zDate," on");.
4820: 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f hyperlink_to_
4830: 64 61 74 65 28 7a 44 61 74 65 2c 22 2e 22 29 3b date(zDate,".");
4840: 0a 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 . cnt++;.
4850: 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d if( pDownloadNam
4860: 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a 65 28 70 e && blob_size(p
4870: 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3d 3d 30 DownloadName)==0
4880: 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 ){. blob_a
4890: 70 70 65 6e 64 28 70 44 6f 77 6e 6c 6f 61 64 4e ppend(pDownloadN
48a0: 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 2d 31 29 3b ame, zName, -1);
48b0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f . }. }. db_
48c0: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
48d0: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 0a db_prepare(&q, .
48e0: 20 20 20 20 22 53 45 4c 45 43 54 20 73 75 62 73 "SELECT subs
48f0: 74 72 28 74 61 67 6e 61 6d 65 2c 20 36 2c 20 31 tr(tagname, 6, 1
4900: 30 30 30 30 29 2c 20 64 61 74 65 74 69 6d 65 28 0000), datetime(
4910: 65 76 65 6e 74 2e 6d 74 69 6d 65 29 2c 22 0a 20 event.mtime),".
4920: 20 20 20 22 20 20 20 20 20 20 20 63 6f 61 6c 65 " coale
4930: 73 63 65 28 65 76 65 6e 74 2e 65 75 73 65 72 2c sce(event.euser,
4940: 20 65 76 65 6e 74 2e 75 73 65 72 29 22 0a 20 20 event.user)".
4950: 20 20 22 20 20 46 52 4f 4d 20 74 61 67 78 72 65 " FROM tagxre
4960: 66 2c 20 74 61 67 2c 20 65 76 65 6e 74 22 0a 20 f, tag, event".
4970: 20 20 20 22 20 57 48 45 52 45 20 74 61 67 78 72 " WHERE tagxr
4980: 65 66 2e 72 69 64 3d 25 64 22 0a 20 20 20 20 22 ef.rid=%d". "
4990: 20 20 20 41 4e 44 20 74 61 67 2e 74 61 67 69 64 AND tag.tagid
49a0: 3d 74 61 67 78 72 65 66 2e 74 61 67 69 64 22 20 =tagxref.tagid"
49b0: 0a 20 20 20 20 22 20 20 20 41 4e 44 20 74 61 67 . " AND tag
49c0: 2e 74 61 67 6e 61 6d 65 20 4c 49 4b 45 20 27 77 .tagname LIKE 'w
49d0: 69 6b 69 2d 25 25 27 22 0a 20 20 20 20 22 20 20 iki-%%'". "
49e0: 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 6a 69 64 AND event.objid
49f0: 3d 74 61 67 78 72 65 66 2e 72 69 64 22 2c 0a 20 =tagxref.rid",.
4a00: 20 20 20 72 69 64 0a 20 20 29 3b 0a 20 20 77 68 rid. );. wh
4a10: 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 ile( db_step(&q)
4a20: 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a ==SQLITE_ROW ){.
4a30: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
4a40: 7a 50 61 67 65 6e 61 6d 65 20 3d 20 64 62 5f 63 zPagename = db_c
4a50: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 olumn_text(&q, 0
4a60: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
4a70: 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f r *zDate = db_co
4a80: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 lumn_text(&q, 1)
4a90: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
4aa0: 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c *zUser = db_col
4ab0: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 29 3b umn_text(&q, 2);
4ac0: 0a 20 20 20 20 69 66 28 20 63 6e 74 3e 30 20 29 . if( cnt>0 )
4ad0: 7b 0a 20 20 20 20 20 20 40 20 41 6c 73 6f 20 77 {. @ Also w
4ae0: 69 6b 69 20 70 61 67 65 0a 20 20 20 20 7d 65 6c iki page. }el
4af0: 73 65 7b 0a 20 20 20 20 20 20 40 20 57 69 6b 69 se{. @ Wiki
4b00: 20 70 61 67 65 0a 20 20 20 20 7d 0a 20 20 20 20 page. }.
4b10: 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 if( g.okHistory
4b20: 29 7b 0a 20 20 20 20 20 20 40 20 5b 3c 61 20 68 ){. @ [<a h
4b30: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
4b40: 52 4c 29 2f 77 69 6b 69 3f 6e 61 6d 65 3d 25 74 RL)/wiki?name=%t
4b50: 28 7a 50 61 67 65 6e 61 6d 65 29 22 3e 25 68 28 (zPagename)">%h(
4b60: 7a 50 61 67 65 6e 61 6d 65 29 3c 2f 61 3e 5d 0a zPagename)</a>].
4b70: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
4b80: 20 40 20 5b 25 68 28 7a 50 61 67 65 6e 61 6d 65 @ [%h(zPagename
4b90: 29 5d 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 62 )]. }. @ b
4ba0: 79 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f y. hyperlink_
4bb0: 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a 44 to_user(zUser,zD
4bc0: 61 74 65 2c 22 20 6f 6e 22 29 3b 0a 20 20 20 20 ate," on");.
4bd0: 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 hyperlink_to_dat
4be0: 65 28 7a 44 61 74 65 2c 22 2e 22 29 3b 0a 20 20 e(zDate,".");.
4bf0: 20 20 6e 57 69 6b 69 2b 2b 3b 0a 20 20 20 20 63 nWiki++;. c
4c00: 6e 74 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 44 nt++;. if( pD
4c10: 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 26 26 20 62 ownloadName && b
4c20: 6c 6f 62 5f 73 69 7a 65 28 70 44 6f 77 6e 6c 6f lob_size(pDownlo
4c30: 61 64 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 adName)==0 ){.
4c40: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 blob_append(
4c50: 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 2c 20 7a pDownloadName, z
4c60: 50 61 67 65 6e 61 6d 65 2c 20 2d 31 29 3b 0a 20 Pagename, -1);.
4c70: 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 }. }. db_fi
4c80: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 69 66 nalize(&q);. if
4c90: 28 20 6e 57 69 6b 69 3d 3d 30 20 29 7b 0a 20 20 ( nWiki==0 ){.
4ca0: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c db_prepare(&q,
4cb0: 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 64 . "SELECT d
4cc0: 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 2c 20 atetime(mtime),
4cd0: 75 73 65 72 2c 20 63 6f 6d 6d 65 6e 74 2c 20 74 user, comment, t
4ce0: 79 70 65 2c 20 75 75 69 64 22 0a 20 20 20 20 20 ype, uuid".
4cf0: 20 22 20 20 46 52 4f 4d 20 65 76 65 6e 74 2c 20 " FROM event,
4d00: 62 6c 6f 62 22 0a 20 20 20 20 20 20 22 20 57 48 blob". " WH
4d10: 45 52 45 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d ERE event.objid=
4d20: 25 64 22 0a 20 20 20 20 20 20 22 20 20 20 41 4e %d". " AN
4d30: 44 20 62 6c 6f 62 2e 72 69 64 3d 25 64 22 2c 0a D blob.rid=%d",.
4d40: 20 20 20 20 20 20 72 69 64 2c 20 72 69 64 0a 20 rid, rid.
4d50: 20 20 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 );. while(
4d60: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
4d70: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
4d80: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 const char *zD
4d90: 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ate = db_column_
4da0: 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 text(&q, 0);.
4db0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
4dc0: 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e User = db_column
4dd0: 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 _text(&q, 1);.
4de0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
4df0: 7a 43 6f 6d 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e zCom = db_column
4e00: 5f 74 65 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 _text(&q, 2);.
4e10: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
4e20: 7a 54 79 70 65 20 3d 20 64 62 5f 63 6f 6c 75 6d zType = db_colum
4e30: 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 3b 0a 20 n_text(&q, 3);.
4e40: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
4e50: 2a 7a 55 75 69 64 20 3d 20 64 62 5f 63 6f 6c 75 *zUuid = db_colu
4e60: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 34 29 3b 0a mn_text(&q, 4);.
4e70: 20 20 20 20 20 20 69 66 28 20 63 6e 74 3e 30 20 if( cnt>0
4e80: 29 7b 0a 20 20 20 20 20 20 20 20 40 20 41 6c 73 ){. @ Als
4e90: 6f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 o. }.
4ea0: 69 66 28 20 7a 54 79 70 65 5b 30 5d 3d 3d 27 77 if( zType[0]=='w
4eb0: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 57 ' ){. @ W
4ec0: 69 6b 69 20 65 64 69 74 0a 20 20 20 20 20 20 7d iki edit. }
4ed0: 65 6c 73 65 20 69 66 28 20 7a 54 79 70 65 5b 30 else if( zType[0
4ee0: 5d 3d 3d 27 74 27 20 29 7b 0a 20 20 20 20 20 20 ]=='t' ){.
4ef0: 20 20 40 20 54 69 63 6b 65 74 20 63 68 61 6e 67 @ Ticket chang
4f00: 65 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 e. }else if
4f10: 28 20 7a 54 79 70 65 5b 30 5d 3d 3d 27 63 27 20 ( zType[0]=='c'
4f20: 29 7b 0a 20 20 20 20 20 20 20 20 40 20 4d 61 6e ){. @ Man
4f30: 69 66 65 73 74 20 6f 66 20 63 68 65 63 6b 2d 69 ifest of check-i
4f40: 6e 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 n. }else{.
4f50: 20 20 20 20 20 20 20 40 20 43 6f 6e 74 72 6f 6c @ Control
4f60: 20 66 69 6c 65 20 72 65 66 65 72 65 6e 63 69 6e file referencin
4f70: 67 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 g. }.
4f80: 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 75 69 hyperlink_to_uui
4f90: 64 28 7a 55 75 69 64 29 3b 0a 20 20 20 20 20 20 d(zUuid);.
4fa0: 40 20 2d 20 25 77 28 7a 43 6f 6d 29 20 62 79 0a @ - %w(zCom) by.
4fb0: 20 20 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f hyperlink_
4fc0: 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a 44 to_user(zUser,zD
4fd0: 61 74 65 2c 22 20 6f 6e 22 29 3b 0a 20 20 20 20 ate," on");.
4fe0: 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 64 hyperlink_to_d
4ff0: 61 74 65 28 7a 44 61 74 65 2c 20 22 2e 22 29 3b ate(zDate, ".");
5000: 0a 20 20 20 20 20 20 69 66 28 20 70 44 6f 77 6e . if( pDown
5010: 6c 6f 61 64 4e 61 6d 65 20 26 26 20 62 6c 6f 62 loadName && blob
5020: 5f 73 69 7a 65 28 70 44 6f 77 6e 6c 6f 61 64 4e _size(pDownloadN
5030: 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 ame)==0 ){.
5040: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 blob_append(p
5050: 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 2c 20 7a 55 DownloadName, zU
5060: 75 69 64 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 uid, -1);.
5070: 7d 0a 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 }. cnt++;.
5080: 20 20 20 7d 0a 20 20 20 20 64 62 5f 66 69 6e 61 }. db_fina
5090: 6c 69 7a 65 28 26 71 29 3b 0a 20 20 7d 0a 20 20 lize(&q);. }.
50a0: 69 66 28 20 63 6e 74 3d 3d 30 20 29 7b 0a 20 20 if( cnt==0 ){.
50b0: 20 20 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 char *zUuid =
50c0: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 db_text(0, "SELE
50d0: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f CT uuid FROM blo
50e0: 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c b WHERE rid=%d",
50f0: 20 72 69 64 29 3b 0a 20 20 20 20 40 20 43 6f 6e rid);. @ Con
5100: 74 72 6f 6c 20 61 72 74 69 66 61 63 74 2e 0a 20 trol artifact..
5110: 20 20 20 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 if( pDownload
5120: 4e 61 6d 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a Name && blob_siz
5130: 65 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 e(pDownloadName)
5140: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f ==0 ){. blo
5150: 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c 6f b_append(pDownlo
5160: 61 64 4e 61 6d 65 2c 20 7a 55 75 69 64 2c 20 2d adName, zUuid, -
5170: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 1);. }. }els
5180: 65 20 69 66 28 20 6c 69 6e 6b 54 6f 56 69 65 77 e if( linkToView
5190: 20 26 26 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 && g.okHistory
51a0: 29 7b 0a 20 20 20 20 40 20 3c 61 20 68 72 65 66 ){. @ <a href
51b0: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
51c0: 2f 61 72 74 69 66 61 63 74 2f 25 64 28 72 69 64 /artifact/%d(rid
51d0: 29 22 3e 5b 76 69 65 77 5d 3c 2f 61 3e 0a 20 20 )">[view]</a>.
51e0: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 }.}.../*.** WEBP
51f0: 41 47 45 3a 20 66 64 69 66 66 0a 2a 2a 0a 2a 2a AGE: fdiff.**.**
5200: 20 54 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20 Two arguments,
5210: 76 31 20 61 6e 64 20 76 32 2c 20 61 72 65 20 69 v1 and v2, are i
5220: 6e 74 65 67 65 72 73 2e 20 20 53 68 6f 77 20 74 ntegers. Show t
5230: 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 he difference be
5240: 74 77 65 65 6e 0a 2a 2a 20 74 68 65 20 74 77 6f tween.** the two
5250: 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 76 6f 69 records..*/.voi
5260: 64 20 64 69 66 66 5f 70 61 67 65 28 76 6f 69 64 d diff_page(void
5270: 29 7b 0a 20 20 69 6e 74 20 76 31 20 3d 20 6e 61 ){. int v1 = na
5280: 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 76 31 me_to_rid(PD("v1
5290: 22 2c 22 30 22 29 29 3b 0a 20 20 69 6e 74 20 76 ","0"));. int v
52a0: 32 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 2 = name_to_rid(
52b0: 50 44 28 22 76 32 22 2c 22 30 22 29 29 3b 0a 20 PD("v2","0"));.
52c0: 20 42 6c 6f 62 20 63 31 2c 20 63 32 2c 20 64 69 Blob c1, c2, di
52d0: 66 66 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 ff;.. login_che
52e0: 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 ck_credentials()
52f0: 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 65 61 ;. if( !g.okRea
5300: 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 d ){ login_neede
5310: 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 d(); return; }.
5320: 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 44 style_header("D
5330: 69 66 66 22 29 3b 0a 20 20 40 20 3c 68 32 3e 44 iff");. @ <h2>D
5340: 69 66 66 65 72 65 6e 63 65 73 20 46 72 6f 6d 3a ifferences From:
5350: 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 6c 6f 63 6b </h2>. @ <block
5360: 71 75 6f 74 65 3e 0a 20 20 6f 62 6a 65 63 74 5f quote>. object_
5370: 64 65 73 63 72 69 70 74 69 6f 6e 28 76 31 2c 20 description(v1,
5380: 31 2c 20 30 29 3b 0a 20 20 40 20 3c 2f 62 6c 6f 1, 0);. @ </blo
5390: 63 6b 71 75 6f 74 65 3e 0a 20 20 40 20 3c 68 32 ckquote>. @ <h2
53a0: 3e 54 6f 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 >To:</h2>. @ <b
53b0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 6f 62 6a lockquote>. obj
53c0: 65 63 74 5f 64 65 73 63 72 69 70 74 69 6f 6e 28 ect_description(
53d0: 76 32 2c 20 31 2c 20 30 29 3b 0a 20 20 40 20 3c v2, 1, 0);. @ <
53e0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 /blockquote>. @
53f0: 20 3c 68 72 3e 0a 20 20 40 20 3c 62 6c 6f 63 6b <hr>. @ <block
5400: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 63 6f quote><pre>. co
5410: 6e 74 65 6e 74 5f 67 65 74 28 76 31 2c 20 26 63 ntent_get(v1, &c
5420: 31 29 3b 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 1);. content_ge
5430: 74 28 76 32 2c 20 26 63 32 29 3b 0a 20 20 62 6c t(v2, &c2);. bl
5440: 6f 62 5f 7a 65 72 6f 28 26 64 69 66 66 29 3b 0a ob_zero(&diff);.
5450: 20 20 74 65 78 74 5f 64 69 66 66 28 26 63 31 2c text_diff(&c1,
5460: 20 26 63 32 2c 20 26 64 69 66 66 2c 20 34 29 3b &c2, &diff, 4);
5470: 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 63 . blob_reset(&c
5480: 31 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 1);. blob_reset
5490: 28 26 63 32 29 3b 0a 20 20 40 20 25 68 28 62 6c (&c2);. @ %h(bl
54a0: 6f 62 5f 73 74 72 28 26 64 69 66 66 29 29 0a 20 ob_str(&diff)).
54b0: 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b @ </pre></block
54c0: 71 75 6f 74 65 3e 0a 20 20 62 6c 6f 62 5f 72 65 quote>. blob_re
54d0: 73 65 74 28 26 64 69 66 66 29 3b 0a 20 20 73 74 set(&diff);. st
54e0: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a yle_footer();.}.
54f0: 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 ./*.** WEBPAGE:
5500: 72 61 77 0a 2a 2a 20 55 52 4c 3a 20 2f 72 61 77 raw.** URL: /raw
5510: 3f 6e 61 6d 65 3d 41 52 54 49 46 41 43 54 49 44 ?name=ARTIFACTID
5520: 26 6d 3d 54 59 50 45 0a 2a 2a 20 0a 2a 2a 20 52 &m=TYPE.** .** R
5530: 65 74 75 72 6e 20 74 68 65 20 75 6e 69 6e 74 65 eturn the uninte
5540: 72 70 72 65 74 65 64 20 63 6f 6e 74 65 6e 74 20 rpreted content
5550: 6f 66 20 61 6e 20 61 72 74 69 66 61 63 74 2e 20 of an artifact.
5560: 20 55 73 65 64 20 70 72 69 6d 61 72 69 6c 79 0a Used primarily.
5570: 2a 2a 20 74 6f 20 76 69 65 77 20 61 72 74 69 66 ** to view artif
5580: 61 63 74 73 20 74 68 61 74 20 61 72 65 20 69 6d acts that are im
5590: 61 67 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 72 61 ages..*/.void ra
55a0: 77 61 72 74 69 66 61 63 74 5f 70 61 67 65 28 76 wartifact_page(v
55b0: 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 3b oid){. int rid;
55c0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
55d0: 4d 69 6d 65 3b 0a 20 20 42 6c 6f 62 20 63 6f 6e Mime;. Blob con
55e0: 74 65 6e 74 3b 0a 0a 20 20 72 69 64 20 3d 20 6e tent;.. rid = n
55f0: 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e ame_to_rid(PD("n
5600: 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 20 7a 4d ame","0"));. zM
5610: 69 6d 65 20 3d 20 50 44 28 22 6d 22 2c 22 61 70 ime = PD("m","ap
5620: 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 66 6f 73 73 plication/x-foss
5630: 69 6c 2d 61 72 74 69 66 61 63 74 22 29 3b 0a 20 il-artifact");.
5640: 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 login_check_cre
5650: 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 dentials();. if
5660: 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b 20 6c ( !g.okRead ){ l
5670: 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 ogin_needed(); r
5680: 65 74 75 72 6e 3b 20 7d 0a 20 20 69 66 28 20 72 eturn; }. if( r
5690: 69 64 3d 3d 30 20 29 7b 20 63 67 69 5f 72 65 64 id==0 ){ cgi_red
56a0: 69 72 65 63 74 28 22 2f 68 6f 6d 65 22 29 3b 20 irect("/home");
56b0: 7d 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 }. content_get(
56c0: 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a rid, &content);.
56d0: 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65 6e cgi_set_conten
56e0: 74 5f 74 79 70 65 28 7a 4d 69 6d 65 29 3b 0a 20 t_type(zMime);.
56f0: 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65 6e 74 cgi_set_content
5700: 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 7d 0a 0a 2f (&content);.}../
5710: 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 61 20 68 65 *.** Render a he
5720: 78 20 64 75 6d 70 20 6f 66 20 61 20 66 69 6c 65 x dump of a file
5730: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 ..*/.static void
5740: 20 68 65 78 64 75 6d 70 28 42 6c 6f 62 20 2a 70 hexdump(Blob *p
5750: 42 6c 6f 62 29 7b 0a 20 20 63 6f 6e 73 74 20 75 Blob){. const u
5760: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 78 3b nsigned char *x;
5770: 0a 20 20 69 6e 74 20 6e 2c 20 69 2c 20 6a 2c 20 . int n, i, j,
5780: 6b 3b 0a 20 20 63 68 61 72 20 7a 4c 69 6e 65 5b k;. char zLine[
5790: 31 30 30 5d 3b 0a 20 20 73 74 61 74 69 63 20 63 100];. static c
57a0: 6f 6e 73 74 20 63 68 61 72 20 7a 48 65 78 5b 5d onst char zHex[]
57b0: 20 3d 20 22 30 31 32 33 34 35 36 37 38 39 61 62 = "0123456789ab
57c0: 63 64 65 66 22 3b 0a 0a 20 20 78 20 3d 20 28 63 cdef";.. x = (c
57d0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 onst unsigned ch
57e0: 61 72 2a 29 62 6c 6f 62 5f 62 75 66 66 65 72 28 ar*)blob_buffer(
57f0: 70 42 6c 6f 62 29 3b 0a 20 20 6e 20 3d 20 62 6c pBlob);. n = bl
5800: 6f 62 5f 73 69 7a 65 28 70 42 6c 6f 62 29 3b 0a ob_size(pBlob);.
5810: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 for(i=0; i<n;
5820: 69 2b 3d 31 36 29 7b 0a 20 20 20 20 6a 20 3d 20 i+=16){. j =
5830: 30 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 30 5d 20 0;. zLine[0]
5840: 3d 20 7a 48 65 78 5b 28 69 3e 3e 32 34 29 26 30 = zHex[(i>>24)&0
5850: 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 31 xf];. zLine[1
5860: 5d 20 3d 20 7a 48 65 78 5b 28 69 3e 3e 31 36 29 ] = zHex[(i>>16)
5870: 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 &0xf];. zLine
5880: 5b 32 5d 20 3d 20 7a 48 65 78 5b 28 69 3e 3e 38 [2] = zHex[(i>>8
5890: 29 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e )&0xf];. zLin
58a0: 65 5b 33 5d 20 3d 20 7a 48 65 78 5b 69 26 30 78 e[3] = zHex[i&0x
58b0: 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 34 5d f];. zLine[4]
58c0: 20 3d 20 27 3a 27 3b 0a 20 20 20 20 73 70 72 69 = ':';. spri
58d0: 6e 74 66 28 7a 4c 69 6e 65 2c 20 22 25 30 34 78 ntf(zLine, "%04x
58e0: 3a 20 22 2c 20 69 29 3b 0a 20 20 20 20 66 6f 72 : ", i);. for
58f0: 28 6a 3d 30 3b 20 6a 3c 31 36 3b 20 6a 2b 2b 29 (j=0; j<16; j++)
5900: 7b 0a 20 20 20 20 20 20 6b 20 3d 20 35 2b 6a 2a {. k = 5+j*
5910: 33 3b 0a 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 3;. zLine[k
5920: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 69 ] = ' ';. i
5930: 66 28 20 69 2b 6a 3c 6e 20 29 7b 0a 20 20 20 20 f( i+j<n ){.
5940: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 unsigned cha
5950: 72 20 63 20 3d 20 78 5b 69 2b 6a 5d 3b 0a 20 20 r c = x[i+j];.
5960: 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 2b 31 5d zLine[k+1]
5970: 20 3d 20 7a 48 65 78 5b 63 3e 3e 34 5d 3b 0a 20 = zHex[c>>4];.
5980: 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 2b 32 zLine[k+2
5990: 5d 20 3d 20 7a 48 65 78 5b 63 26 30 78 66 5d 3b ] = zHex[c&0xf];
59a0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 . }else{.
59b0: 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 2b 31 5d zLine[k+1]
59c0: 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 = ' ';.
59d0: 7a 4c 69 6e 65 5b 6b 2b 32 5d 20 3d 20 27 20 27 zLine[k+2] = ' '
59e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
59f0: 20 20 20 20 7a 4c 69 6e 65 5b 35 33 5d 20 3d 20 zLine[53] =
5a00: 27 20 27 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 35 ' ';. zLine[5
5a10: 34 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 66 6f 4] = ' ';. fo
5a20: 72 28 6a 3d 30 3b 20 6a 3c 31 36 3b 20 6a 2b 2b r(j=0; j<16; j++
5a30: 29 7b 0a 20 20 20 20 20 20 6b 20 3d 20 6a 2b 35 ){. k = j+5
5a40: 35 3b 0a 20 20 20 20 20 20 69 66 28 20 69 2b 6a 5;. if( i+j
5a50: 3c 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 75 6e <n ){. un
5a60: 73 69 67 6e 65 64 20 63 68 61 72 20 63 20 3d 20 signed char c =
5a70: 78 5b 69 2b 6a 5d 3b 0a 20 20 20 20 20 20 20 20 x[i+j];.
5a80: 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 if( c>=0x20 && c
5a90: 3c 3d 30 78 37 65 20 29 7b 0a 20 20 20 20 20 20 <=0x7e ){.
5aa0: 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 3d 20 63 zLine[k] = c
5ab0: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b ;. }else{
5ac0: 0a 20 20 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 . zLine
5ad0: 5b 6b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 [k] = '.';.
5ae0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 }. }else
5af0: 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b {. zLine[
5b00: 6b 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a k] = 0;. }.
5b10: 20 20 20 20 7d 0a 20 20 20 20 7a 4c 69 6e 65 5b }. zLine[
5b20: 37 31 5d 20 3d 20 30 3b 0a 20 20 20 20 40 20 25 71] = 0;. @ %
5b30: 68 28 7a 4c 69 6e 65 29 0a 20 20 7d 0a 7d 0a 0a h(zLine). }.}..
5b40: 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 68 /*.** WEBPAGE: h
5b50: 65 78 64 75 6d 70 0a 2a 2a 20 55 52 4c 3a 20 2f exdump.** URL: /
5b60: 68 65 78 64 75 6d 70 3f 6e 61 6d 65 3d 41 52 54 hexdump?name=ART
5b70: 49 46 41 43 54 49 44 0a 2a 2a 20 0a 2a 2a 20 53 IFACTID.** .** S
5b80: 68 6f 77 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 how the complete
5b90: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 content of a fi
5ba0: 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 le identified by
5bb0: 20 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 20 61 ARTIFACTID.** a
5bc0: 73 20 70 72 65 66 6f 72 6d 61 74 74 65 64 20 74 s preformatted t
5bd0: 65 78 74 2e 0a 2a 2f 0a 76 6f 69 64 20 68 65 78 ext..*/.void hex
5be0: 64 75 6d 70 5f 70 61 67 65 28 76 6f 69 64 29 7b dump_page(void){
5bf0: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 42 6c . int rid;. Bl
5c00: 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 42 6c ob content;. Bl
5c10: 6f 62 20 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 3b ob downloadName;
5c20: 0a 20 20 63 68 61 72 20 2a 7a 55 75 69 64 3b 0a . char *zUuid;.
5c30: 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f . rid = name_to
5c40: 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c 22 _rid(PD("name","
5c50: 30 22 29 29 3b 0a 20 20 6c 6f 67 69 6e 5f 63 68 0"));. login_ch
5c60: 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 eck_credentials(
5c70: 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 65 );. if( !g.okRe
5c80: 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 ad ){ login_need
5c90: 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a ed(); return; }.
5ca0: 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 20 if( rid==0 ){
5cb0: 63 67 69 5f 72 65 64 69 72 65 63 74 28 22 2f 68 cgi_redirect("/h
5cc0: 6f 6d 65 22 29 3b 20 7d 0a 20 20 69 66 28 20 67 ome"); }. if( g
5cd0: 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 20 20 20 .okAdmin ){.
5ce0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 const char *zUui
5cf0: 64 20 3d 20 64 62 5f 74 65 78 74 28 22 22 2c 20 d = db_text("",
5d00: 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f "SELECT uuid FRO
5d10: 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 M blob WHERE rid
5d20: 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 20 20 =%d", rid);.
5d30: 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 53 if( db_exists("S
5d40: 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 73 68 75 ELECT 1 FROM shu
5d50: 6e 20 57 48 45 52 45 20 75 75 69 64 3d 27 25 73 n WHERE uuid='%s
5d60: 27 22 2c 20 7a 55 75 69 64 29 20 29 7b 0a 20 20 '", zUuid) ){.
5d70: 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e style_submen
5d80: 75 5f 65 6c 65 6d 65 6e 74 28 22 55 6e 73 68 75 u_element("Unshu
5d90: 6e 22 2c 22 55 6e 73 68 75 6e 22 2c 20 22 25 73 n","Unshun", "%s
5da0: 2f 73 68 75 6e 3f 75 75 69 64 3d 25 73 26 73 75 /shun?uuid=%s&su
5db0: 62 3d 31 22 2c 0a 20 20 20 20 20 20 20 20 20 20 b=1",.
5dc0: 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 g.zTop, zUuid)
5dd0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 ;. }else{.
5de0: 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 style_submenu
5df0: 5f 65 6c 65 6d 65 6e 74 28 22 53 68 75 6e 22 2c _element("Shun",
5e00: 22 53 68 75 6e 22 2c 20 22 25 73 2f 73 68 75 6e "Shun", "%s/shun
5e10: 3f 73 68 75 6e 3d 25 73 23 61 64 64 73 68 75 6e ?shun=%s#addshun
5e20: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 ",. g
5e30: 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 3b 0a 20 .zTop, zUuid);.
5e40: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 74 79 6c 65 }. }. style
5e50: 5f 68 65 61 64 65 72 28 22 48 65 78 20 41 72 74 _header("Hex Art
5e60: 69 66 61 63 74 20 43 6f 6e 74 65 6e 74 22 29 3b ifact Content");
5e70: 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 . zUuid = db_te
5e80: 78 74 28 22 3f 22 2c 22 53 45 4c 45 43 54 20 75 xt("?","SELECT u
5e90: 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 uid FROM blob WH
5ea0: 45 52 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 ERE rid=%d", rid
5eb0: 29 3b 0a 20 20 40 20 3c 68 32 3e 41 72 74 69 66 );. @ <h2>Artif
5ec0: 61 63 74 20 25 73 28 7a 55 75 69 64 29 3a 3c 2f act %s(zUuid):</
5ed0: 68 32 3e 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 h2>. @ <blockqu
5ee0: 6f 74 65 3e 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f ote>. blob_zero
5ef0: 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3b (&downloadName);
5f00: 0a 20 20 6f 62 6a 65 63 74 5f 64 65 73 63 72 69 . object_descri
5f10: 70 74 69 6f 6e 28 72 69 64 2c 20 30 2c 20 26 64 ption(rid, 0, &d
5f20: 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3b 0a 20 20 ownloadName);.
5f30: 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c style_submenu_el
5f40: 65 6d 65 6e 74 28 22 44 6f 77 6e 6c 6f 61 64 22 ement("Download"
5f50: 2c 20 22 44 6f 77 6e 6c 6f 61 64 22 2c 20 0a 20 , "Download", .
5f60: 20 20 20 20 20 20 20 22 25 73 2f 72 61 77 2f 25 "%s/raw/%
5f70: 54 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 2e 7a 42 T?name=%d", g.zB
5f80: 61 73 65 55 52 4c 2c 20 62 6c 6f 62 5f 73 74 72 aseURL, blob_str
5f90: 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 2c (&downloadName),
5fa0: 20 72 69 64 29 3b 0a 20 20 40 20 3c 2f 62 6c 6f rid);. @ </blo
5fb0: 63 6b 71 75 6f 74 65 3e 0a 20 20 40 20 3c 68 72 ckquote>. @ <hr
5fc0: 3e 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 >. content_get(
5fd0: 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a rid, &content);.
5fe0: 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e @ <blockquote>
5ff0: 3c 70 72 65 3e 0a 20 20 68 65 78 64 75 6d 70 28 <pre>. hexdump(
6000: 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 40 20 3c &content);. @ <
6010: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 /pre></blockquot
6020: 65 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 e>. style_foote
6030: 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 r();.}../*.** WE
6040: 42 50 41 47 45 3a 20 61 72 74 69 66 61 63 74 0a BPAGE: artifact.
6050: 2a 2a 20 55 52 4c 3a 20 2f 61 72 74 69 66 61 63 ** URL: /artifac
6060: 74 3f 6e 61 6d 65 3d 41 52 54 49 46 41 43 54 49 t?name=ARTIFACTI
6070: 44 0a 2a 2a 20 0a 2a 2a 20 53 68 6f 77 20 74 68 D.** .** Show th
6080: 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65 e complete conte
6090: 6e 74 20 6f 66 20 61 20 66 69 6c 65 20 69 64 65 nt of a file ide
60a0: 6e 74 69 66 69 65 64 20 62 79 20 41 52 54 49 46 ntified by ARTIF
60b0: 41 43 54 49 44 0a 2a 2a 20 61 73 20 70 72 65 66 ACTID.** as pref
60c0: 6f 72 6d 61 74 74 65 64 20 74 65 78 74 2e 0a 2a ormatted text..*
60d0: 2f 0a 76 6f 69 64 20 61 72 74 69 66 61 63 74 5f /.void artifact_
60e0: 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 69 6e page(void){. in
60f0: 74 20 72 69 64 3b 0a 20 20 42 6c 6f 62 20 63 6f t rid;. Blob co
6100: 6e 74 65 6e 74 3b 0a 20 20 63 6f 6e 73 74 20 63 ntent;. const c
6110: 68 61 72 20 2a 7a 4d 69 6d 65 3b 0a 20 20 42 6c har *zMime;. Bl
6120: 6f 62 20 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 3b ob downloadName;
6130: 0a 20 20 69 6e 74 20 72 65 6e 64 65 72 41 73 57 . int renderAsW
6140: 69 6b 69 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 iki = 0;. int r
6150: 65 6e 64 65 72 41 73 48 74 6d 6c 20 3d 20 30 3b enderAsHtml = 0;
6160: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
6170: 55 75 69 64 3b 0a 0a 20 20 72 69 64 20 3d 20 6e Uuid;.. rid = n
6180: 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e ame_to_rid(PD("n
6190: 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 20 6c 6f ame","0"));. lo
61a0: 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e gin_check_creden
61b0: 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 tials();. if( !
61c0: 67 2e 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 g.okRead ){ logi
61d0: 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 n_needed(); retu
61e0: 72 6e 3b 20 7d 0a 20 20 69 66 28 20 72 69 64 3d rn; }. if( rid=
61f0: 3d 30 20 29 7b 20 63 67 69 5f 72 65 64 69 72 65 =0 ){ cgi_redire
6200: 63 74 28 22 2f 68 6f 6d 65 22 29 3b 20 7d 0a 20 ct("/home"); }.
6210: 20 69 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 if( g.okAdmin )
6220: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 {. const char
6230: 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 *zUuid = db_tex
6240: 74 28 22 22 2c 20 22 53 45 4c 45 43 54 20 75 75 t("", "SELECT uu
6250: 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 id FROM blob WHE
6260: 52 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 RE rid=%d", rid)
6270: 3b 0a 20 20 20 20 69 66 28 20 64 62 5f 65 78 69 ;. if( db_exi
6280: 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 sts("SELECT 1 FR
6290: 4f 4d 20 73 68 75 6e 20 57 48 45 52 45 20 75 75 OM shun WHERE uu
62a0: 69 64 3d 27 25 73 27 22 2c 20 7a 55 75 69 64 29 id='%s'", zUuid)
62b0: 20 29 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f ){. style_
62c0: 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 submenu_element(
62d0: 22 55 6e 73 68 75 6e 22 2c 22 55 6e 73 68 75 6e "Unshun","Unshun
62e0: 22 2c 20 22 25 73 2f 73 68 75 6e 3f 75 75 69 64 ", "%s/shun?uuid
62f0: 3d 25 73 26 73 75 62 3d 31 22 2c 0a 20 20 20 20 =%s&sub=1",.
6300: 20 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 g.zTop,
6310: 7a 55 75 69 64 29 3b 0a 20 20 20 20 7d 65 6c 73 zUuid);. }els
6320: 65 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 e{. style_s
6330: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
6340: 53 68 75 6e 22 2c 22 53 68 75 6e 22 2c 20 22 25 Shun","Shun", "%
6350: 73 2f 73 68 75 6e 3f 73 68 75 6e 3d 25 73 23 61 s/shun?shun=%s#a
6360: 64 64 73 68 75 6e 22 2c 0a 20 20 20 20 20 20 20 ddshun",.
6370: 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 g.zTop, zUu
6380: 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 id);. }. }.
6390: 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 41 style_header("A
63a0: 72 74 69 66 61 63 74 20 43 6f 6e 74 65 6e 74 22 rtifact Content"
63b0: 29 3b 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 5f );. zUuid = db_
63c0: 74 65 78 74 28 22 3f 22 2c 20 22 53 45 4c 45 43 text("?", "SELEC
63d0: 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 T uuid FROM blob
63e0: 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 WHERE rid=%d",
63f0: 72 69 64 29 3b 0a 20 20 40 20 3c 68 32 3e 41 72 rid);. @ <h2>Ar
6400: 74 69 66 61 63 74 20 25 73 28 7a 55 75 69 64 29 tifact %s(zUuid)
6410: 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 6c 6f 63 6b </h2>. @ <block
6420: 71 75 6f 74 65 3e 0a 20 20 62 6c 6f 62 5f 7a 65 quote>. blob_ze
6430: 72 6f 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 ro(&downloadName
6440: 29 3b 0a 20 20 6f 62 6a 65 63 74 5f 64 65 73 63 );. object_desc
6450: 72 69 70 74 69 6f 6e 28 72 69 64 2c 20 30 2c 20 ription(rid, 0,
6460: 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3b 0a &downloadName);.
6470: 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f style_submenu_
6480: 65 6c 65 6d 65 6e 74 28 22 44 6f 77 6e 6c 6f 61 element("Downloa
6490: 64 22 2c 20 22 44 6f 77 6e 6c 6f 61 64 22 2c 20 d", "Download",
64a0: 0a 20 20 20 20 20 20 20 20 20 20 22 25 73 2f 72 . "%s/r
64b0: 61 77 2f 25 54 3f 6e 61 6d 65 3d 25 64 22 2c 20 aw/%T?name=%d",
64c0: 67 2e 7a 54 6f 70 2c 20 62 6c 6f 62 5f 73 74 72 g.zTop, blob_str
64d0: 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 2c (&downloadName),
64e0: 20 72 69 64 29 3b 0a 20 20 7a 4d 69 6d 65 20 3d rid);. zMime =
64f0: 20 6d 69 6d 65 74 79 70 65 5f 66 72 6f 6d 5f 6e mimetype_from_n
6500: 61 6d 65 28 62 6c 6f 62 5f 73 74 72 28 26 64 6f ame(blob_str(&do
6510: 77 6e 6c 6f 61 64 4e 61 6d 65 29 29 3b 0a 20 20 wnloadName));.
6520: 69 66 28 20 7a 4d 69 6d 65 20 29 7b 0a 20 20 20 if( zMime ){.
6530: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4d 69 6d if( strcmp(zMim
6540: 65 2c 20 22 74 65 78 74 2f 68 74 6d 6c 22 29 3d e, "text/html")=
6550: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 =0 ){. if(
6560: 50 28 22 74 78 74 22 29 20 29 7b 0a 20 20 20 20 P("txt") ){.
6570: 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e style_submen
6580: 75 5f 65 6c 65 6d 65 6e 74 28 22 48 74 6d 6c 22 u_element("Html"
6590: 2c 20 22 48 74 6d 6c 22 2c 0a 20 20 20 20 20 20 , "Html",.
65a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
65b0: 20 20 20 20 20 20 20 20 22 25 73 2f 61 72 74 69 "%s/arti
65c0: 66 61 63 74 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 fact?name=%d", g
65d0: 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 .zTop, rid);.
65e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
65f0: 20 20 72 65 6e 64 65 72 41 73 48 74 6d 6c 20 3d renderAsHtml =
6600: 20 31 3b 0a 20 20 20 20 20 20 20 20 73 74 79 6c 1;. styl
6610: 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e e_submenu_elemen
6620: 74 28 22 54 65 78 74 22 2c 20 22 54 65 78 74 22 t("Text", "Text"
6630: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
6640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6650: 22 25 73 2f 61 72 74 69 66 61 63 74 3f 6e 61 6d "%s/artifact?nam
6660: 65 3d 25 64 26 74 78 74 3d 31 22 2c 20 67 2e 7a e=%d&txt=1", g.z
6670: 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 Top, rid);.
6680: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 }. }else if(
6690: 20 73 74 72 63 6d 70 28 7a 4d 69 6d 65 2c 20 22 strcmp(zMime, "
66a0: 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 66 6f application/x-fo
66b0: 73 73 69 6c 2d 77 69 6b 69 22 29 3d 3d 30 20 29 ssil-wiki")==0 )
66c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 50 28 22 74 {. if( P("t
66d0: 78 74 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 xt") ){.
66e0: 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c style_submenu_el
66f0: 65 6d 65 6e 74 28 22 57 69 6b 69 22 2c 20 22 57 ement("Wiki", "W
6700: 69 6b 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 iki",.
6710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6720: 20 20 20 20 22 25 73 2f 61 72 74 69 66 61 63 74 "%s/artifact
6730: 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 2e 7a 54 6f ?name=%d", g.zTo
6740: 70 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 20 7d p, rid);. }
6750: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 else{. re
6760: 6e 64 65 72 41 73 57 69 6b 69 20 3d 20 31 3b 0a nderAsWiki = 1;.
6770: 20 20 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 style_su
6780: 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 54 bmenu_element("T
6790: 65 78 74 22 2c 20 22 54 65 78 74 22 2c 0a 20 20 ext", "Text",.
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 2f "%s/
67c0: 61 72 74 69 66 61 63 74 3f 6e 61 6d 65 3d 25 64 artifact?name=%d
67d0: 26 74 78 74 3d 31 22 2c 20 67 2e 7a 54 6f 70 2c &txt=1", g.zTop,
67e0: 20 72 69 64 29 3b 0a 20 20 20 20 20 20 7d 0a 20 rid);. }.
67f0: 20 20 20 7d 0a 20 20 7d 0a 20 20 40 20 3c 2f 62 }. }. @ </b
6800: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 20 3c lockquote>. @ <
6810: 68 72 3e 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 hr>. content_ge
6820: 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 29 t(rid, &content)
6830: 3b 0a 20 20 69 66 28 20 72 65 6e 64 65 72 41 73 ;. if( renderAs
6840: 57 69 6b 69 20 29 7b 0a 20 20 20 20 77 69 6b 69 Wiki ){. wiki
6850: 5f 63 6f 6e 76 65 72 74 28 26 63 6f 6e 74 65 6e _convert(&conten
6860: 74 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 t, 0, 0);. }els
6870: 65 20 69 66 28 20 72 65 6e 64 65 72 41 73 48 74 e if( renderAsHt
6880: 6d 6c 20 29 7b 0a 20 20 20 20 40 20 3c 64 69 76 ml ){. @ <div
6890: 3e 0a 20 20 20 20 63 67 69 5f 61 70 70 65 6e 64 >. cgi_append
68a0: 5f 63 6f 6e 74 65 6e 74 28 62 6c 6f 62 5f 62 75 _content(blob_bu
68b0: 66 66 65 72 28 26 63 6f 6e 74 65 6e 74 29 2c 20 ffer(&content),
68c0: 62 6c 6f 62 5f 73 69 7a 65 28 26 63 6f 6e 74 65 blob_size(&conte
68d0: 6e 74 29 29 3b 0a 20 20 20 20 40 20 3c 2f 64 69 nt));. @ </di
68e0: 76 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 v>. }else{.
68f0: 7a 4d 69 6d 65 20 3d 20 6d 69 6d 65 74 79 70 65 zMime = mimetype
6900: 5f 66 72 6f 6d 5f 63 6f 6e 74 65 6e 74 28 26 63 _from_content(&c
6910: 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 40 20 3c ontent);. @ <
6920: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 blockquote>.
6930: 69 66 28 20 7a 4d 69 6d 65 3d 3d 30 20 29 7b 0a if( zMime==0 ){.
6940: 20 20 20 20 20 20 40 20 3c 70 72 65 3e 0a 20 20 @ <pre>.
6950: 20 20 20 20 40 20 25 68 28 62 6c 6f 62 5f 73 74 @ %h(blob_st
6960: 72 28 26 63 6f 6e 74 65 6e 74 29 29 0a 20 20 20 r(&content)).
6970: 20 20 20 40 20 3c 2f 70 72 65 3e 0a 20 20 20 20 @ </pre>.
6980: 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f style_submenu_
6990: 65 6c 65 6d 65 6e 74 28 22 48 65 78 22 2c 22 48 element("Hex","H
69a0: 65 78 22 2c 20 22 25 73 2f 68 65 78 64 75 6d 70 ex", "%s/hexdump
69b0: 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 2e 7a 54 6f ?name=%d", g.zTo
69c0: 70 2c 20 72 69 64 29 3b 0a 20 20 20 20 7d 65 6c p, rid);. }el
69d0: 73 65 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a se if( strncmp(z
69e0: 4d 69 6d 65 2c 20 22 69 6d 61 67 65 2f 22 2c 20 Mime, "image/",
69f0: 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 40 6)==0 ){. @
6a00: 20 3c 69 6d 67 20 73 72 63 3d 22 25 73 28 67 2e <img src="%s(g.
6a10: 7a 42 61 73 65 55 52 4c 29 2f 72 61 77 3f 6e 61 zBaseURL)/raw?na
6a20: 6d 65 3d 25 64 28 72 69 64 29 26 6d 3d 25 73 28 me=%d(rid)&m=%s(
6a30: 7a 4d 69 6d 65 29 22 3e 3c 2f 69 6d 67 3e 0a 20 zMime)"></img>.
6a40: 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 style_subme
6a50: 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 48 65 78 22 nu_element("Hex"
6a60: 2c 22 48 65 78 22 2c 20 22 25 73 2f 68 65 78 64 ,"Hex", "%s/hexd
6a70: 75 6d 70 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 2e ump?name=%d", g.
6a80: 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 20 zTop, rid);.
6a90: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 3c }else{. @ <
6aa0: 70 72 65 3e 0a 20 20 20 20 20 20 68 65 78 64 75 pre>. hexdu
6ab0: 6d 70 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 mp(&content);.
6ac0: 20 20 20 20 40 20 3c 2f 70 72 65 3e 0a 20 20 20 @ </pre>.
6ad0: 20 7d 0a 20 20 20 20 40 20 3c 2f 62 6c 6f 63 6b }. @ </block
6ae0: 71 75 6f 74 65 3e 0a 20 20 7d 0a 20 20 73 74 79 quote>. }. sty
6af0: 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 20 20 le_footer();.}
6b00: 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a ../*.** WEBPAGE:
6b10: 20 74 69 6e 66 6f 0a 2a 2a 20 55 52 4c 3a 20 2f tinfo.** URL: /
6b20: 74 69 6e 66 6f 3f 6e 61 6d 65 3d 41 52 54 49 46 tinfo?name=ARTIF
6b30: 41 43 54 49 44 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 ACTID.**.** Show
6b40: 20 74 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 the details of
6b50: 61 20 74 69 63 6b 65 74 20 63 68 61 6e 67 65 20 a ticket change
6b60: 63 6f 6e 74 72 6f 6c 20 61 72 74 69 66 61 63 74 control artifact
6b70: 2e 0a 2a 2f 0a 76 6f 69 64 20 74 69 6e 66 6f 5f ..*/.void tinfo_
6b80: 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 69 6e page(void){. in
6b90: 74 20 72 69 64 3b 0a 20 20 42 6c 6f 62 20 63 6f t rid;. Blob co
6ba0: 6e 74 65 6e 74 3b 0a 20 20 63 68 61 72 20 2a 7a ntent;. char *z
6bb0: 44 61 74 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 Date;. const ch
6bc0: 61 72 20 2a 7a 55 75 69 64 3b 0a 20 20 63 68 61 ar *zUuid;. cha
6bd0: 72 20 7a 54 6b 74 4e 61 6d 65 5b 32 30 5d 3b 0a r zTktName[20];.
6be0: 20 20 4d 61 6e 69 66 65 73 74 20 6d 3b 0a 0a 20 Manifest m;..
6bf0: 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 login_check_cre
6c00: 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 dentials();. if
6c10: 28 20 21 67 2e 6f 6b 52 64 54 6b 74 20 29 7b 20 ( !g.okRdTkt ){
6c20: 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 login_needed();
6c30: 72 65 74 75 72 6e 3b 20 7d 0a 20 20 72 69 64 20 return; }. rid
6c40: 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 = name_to_rid(PD
6c50: 28 22 6e 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 ("name","0"));.
6c60: 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 20 66 if( rid==0 ){ f
6c70: 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 ossil_redirect_h
6c80: 6f 6d 65 28 29 3b 20 7d 0a 20 20 7a 55 75 69 64 ome(); }. zUuid
6c90: 20 3d 20 64 62 5f 74 65 78 74 28 22 22 2c 20 22 = db_text("", "
6ca0: 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d SELECT uuid FROM
6cb0: 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d blob WHERE rid=
6cc0: 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 69 66 28 %d", rid);. if(
6cd0: 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 20 g.okAdmin ){.
6ce0: 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 if( db_exists(
6cf0: 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 73 "SELECT 1 FROM s
6d00: 68 75 6e 20 57 48 45 52 45 20 75 75 69 64 3d 27 hun WHERE uuid='
6d10: 25 73 27 22 2c 20 7a 55 75 69 64 29 20 29 7b 0a %s'", zUuid) ){.
6d20: 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d style_subm
6d30: 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 55 6e 73 enu_element("Uns
6d40: 68 75 6e 22 2c 22 55 6e 73 68 75 6e 22 2c 20 22 hun","Unshun", "
6d50: 25 73 2f 73 68 75 6e 3f 75 75 69 64 3d 25 73 26 %s/shun?uuid=%s&
6d60: 73 75 62 3d 31 22 2c 0a 20 20 20 20 20 20 20 20 sub=1",.
6d70: 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 g.zTop, zUui
6d80: 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 d);. }else{.
6d90: 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 style_subme
6da0: 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 53 68 75 6e nu_element("Shun
6db0: 22 2c 22 53 68 75 6e 22 2c 20 22 25 73 2f 73 68 ","Shun", "%s/sh
6dc0: 75 6e 3f 73 68 75 6e 3d 25 73 23 61 64 64 73 68 un?shun=%s#addsh
6dd0: 75 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 un",.
6de0: 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 3b g.zTop, zUuid);
6df0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 63 6f 6e . }. }. con
6e00: 74 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 26 63 tent_get(rid, &c
6e10: 6f 6e 74 65 6e 74 29 3b 0a 20 20 69 66 28 20 6d ontent);. if( m
6e20: 61 6e 69 66 65 73 74 5f 70 61 72 73 65 28 26 6d anifest_parse(&m
6e30: 2c 20 26 63 6f 6e 74 65 6e 74 29 3d 3d 30 20 29 , &content)==0 )
6e40: 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 72 65 64 {. fossil_red
6e50: 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 irect_home();.
6e60: 7d 0a 20 20 69 66 28 20 6d 2e 74 79 70 65 21 3d }. if( m.type!=
6e70: 43 46 54 59 50 45 5f 54 49 43 4b 45 54 20 29 7b CFTYPE_TICKET ){
6e80: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 72 65 64 69 . fossil_redi
6e90: 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 7d rect_home();. }
6ea0: 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 . style_header(
6eb0: 22 54 69 63 6b 65 74 20 43 68 61 6e 67 65 20 44 "Ticket Change D
6ec0: 65 74 61 69 6c 73 22 29 3b 0a 20 20 7a 44 61 74 etails");. zDat
6ed0: 65 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 e = db_text(0, "
6ee0: 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 SELECT datetime(
6ef0: 25 2e 31 32 66 29 22 2c 20 6d 2e 72 44 61 74 65 %.12f)", m.rDate
6f00: 29 3b 0a 20 20 6d 65 6d 63 70 79 28 7a 54 6b 74 );. memcpy(zTkt
6f10: 4e 61 6d 65 2c 20 6d 2e 7a 54 69 63 6b 65 74 55 Name, m.zTicketU
6f20: 75 69 64 2c 20 31 30 29 3b 0a 20 20 7a 54 6b 74 uid, 10);. zTkt
6f30: 4e 61 6d 65 5b 31 30 5d 20 3d 20 30 3b 0a 20 20 Name[10] = 0;.
6f40: 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 if( g.okHistory
6f50: 29 7b 0a 20 20 20 20 40 20 3c 68 32 3e 43 68 61 ){. @ <h2>Cha
6f60: 6e 67 65 73 20 74 6f 20 74 69 63 6b 65 74 20 3c nges to ticket <
6f70: 61 20 68 72 65 66 3d 22 25 73 28 6d 2e 7a 54 69 a href="%s(m.zTi
6f80: 63 6b 65 74 55 75 69 64 29 22 3e 25 73 28 7a 54 cketUuid)">%s(zT
6f90: 6b 74 4e 61 6d 65 29 3c 2f 61 3e 3c 2f 68 32 3e ktName)</a></h2>
6fa0: 0a 20 20 20 20 40 0a 20 20 20 20 40 20 3c 70 3e . @. @ <p>
6fb0: 42 79 20 25 68 28 6d 2e 7a 55 73 65 72 29 20 6f By %h(m.zUser) o
6fc0: 6e 20 25 73 28 7a 44 61 74 65 29 2e 20 20 53 65 n %s(zDate). Se
6fd0: 65 20 61 6c 73 6f 3a 0a 20 20 20 20 40 20 3c 61 e also:. @ <a
6fe0: 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 54 6f 70 href="%s(g.zTop
6ff0: 29 2f 61 72 74 69 66 61 63 74 2f 25 54 28 7a 55 )/artifact/%T(zU
7000: 75 69 64 29 22 3e 61 72 74 69 66 61 63 74 20 63 uid)">artifact c
7010: 6f 6e 74 65 6e 74 3c 2f 61 3e 2c 20 61 6e 64 0a ontent</a>, and.
7020: 20 20 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 @ <a href="%
7030: 73 28 67 2e 7a 54 6f 70 29 2f 74 6b 74 68 69 73 s(g.zTop)/tkthis
7040: 74 6f 72 79 2f 25 73 28 6d 2e 7a 54 69 63 6b 65 tory/%s(m.zTicke
7050: 74 55 75 69 64 29 22 3e 74 69 63 6b 65 74 20 68 tUuid)">ticket h
7060: 69 73 74 6f 72 79 3c 2f 61 3e 0a 20 20 20 20 40 istory</a>. @
7070: 20 3c 2f 70 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 </p>. }else{.
7080: 20 20 20 40 20 3c 68 32 3e 43 68 61 6e 67 65 73 @ <h2>Changes
7090: 20 74 6f 20 74 69 63 6b 65 74 20 25 73 28 7a 54 to ticket %s(zT
70a0: 6b 74 4e 61 6d 65 29 3c 2f 68 32 3e 0a 20 20 20 ktName)</h2>.
70b0: 20 40 0a 20 20 20 20 40 20 3c 70 3e 42 79 20 25 @. @ <p>By %
70c0: 68 28 6d 2e 7a 55 73 65 72 29 20 6f 6e 20 25 73 h(m.zUser) on %s
70d0: 28 7a 44 61 74 65 29 2e 0a 20 20 20 20 40 20 3c (zDate).. @ <
70e0: 2f 70 3e 0a 20 20 7d 0a 20 20 40 0a 20 20 40 20 /p>. }. @. @
70f0: 3c 6f 6c 3e 0a 20 20 66 72 65 65 28 7a 44 61 74 <ol>. free(zDat
7100: 65 29 3b 0a 20 20 74 69 63 6b 65 74 5f 6f 75 74 e);. ticket_out
7110: 70 75 74 5f 63 68 61 6e 67 65 5f 61 72 74 69 66 put_change_artif
7120: 61 63 74 28 26 6d 29 3b 0a 20 20 6d 61 6e 69 66 act(&m);. manif
7130: 65 73 74 5f 63 6c 65 61 72 28 26 6d 29 3b 0a 20 est_clear(&m);.
7140: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
7150: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 .}.../*.** WEBPA
7160: 47 45 3a 20 69 6e 66 6f 0a 2a 2a 20 55 52 4c 3a GE: info.** URL:
7170: 20 69 6e 66 6f 2f 41 52 54 49 46 41 43 54 49 44 info/ARTIFACTID
7180: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 72 67 75 6d .**.** The argum
7190: 65 6e 74 20 69 73 20 61 20 61 72 74 69 66 61 63 ent is a artifac
71a0: 74 20 49 44 20 77 68 69 63 68 20 6d 69 67 68 74 t ID which might
71b0: 20 62 65 20 61 20 62 61 73 65 6c 69 6e 65 20 6f be a baseline o
71c0: 72 20 61 20 66 69 6c 65 20 6f 72 0a 2a 2a 20 61 r a file or.** a
71d0: 20 74 69 63 6b 65 74 20 63 68 61 6e 67 65 73 20 ticket changes
71e0: 6f 72 20 61 20 77 69 6b 69 20 65 64 69 74 6f 72 or a wiki editor
71f0: 20 6f 72 20 73 6f 6d 65 74 68 69 6e 67 20 65 6c or something el
7200: 73 65 2e 20 0a 2a 2a 0a 2a 2a 20 46 69 67 75 72 se. .**.** Figur
7210: 65 20 6f 75 74 20 77 68 61 74 20 74 68 65 20 61 e out what the a
7220: 72 74 69 66 61 63 74 20 49 44 20 69 73 20 61 6e rtifact ID is an
7230: 64 20 6a 75 6d 70 20 74 6f 20 69 74 2e 0a 2a 2f d jump to it..*/
7240: 0a 76 6f 69 64 20 69 6e 66 6f 5f 70 61 67 65 28 .void info_page(
7250: 76 6f 69 64 29 7b 0a 20 20 63 6f 6e 73 74 20 63 void){. const c
7260: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 42 6c har *zName;. Bl
7270: 6f 62 20 75 75 69 64 3b 0a 20 20 69 6e 74 20 72 ob uuid;. int r
7280: 69 64 2c 20 6e 4e 61 6d 65 3b 0a 20 20 0a 20 20 id, nName;. .
7290: 7a 4e 61 6d 65 20 3d 20 50 28 22 6e 61 6d 65 22 zName = P("name"
72a0: 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d );. if( zName==
72b0: 30 20 29 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 0 ) fossil_redir
72c0: 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 6e 4e ect_home();. nN
72d0: 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 4e 61 ame = strlen(zNa
72e0: 6d 65 29 3b 0a 20 20 69 66 28 20 6e 4e 61 6d 65 me);. if( nName
72f0: 3c 34 20 7c 7c 20 6e 4e 61 6d 65 3e 55 55 49 44 <4 || nName>UUID
7300: 5f 53 49 5a 45 20 7c 7c 20 21 76 61 6c 69 64 61 _SIZE || !valida
7310: 74 65 31 36 28 7a 4e 61 6d 65 2c 20 6e 4e 61 6d te16(zName, nNam
7320: 65 29 20 29 7b 0a 20 20 20 20 73 77 69 74 63 68 e) ){. switch
7330: 28 20 73 79 6d 5f 74 61 67 5f 74 6f 5f 75 75 69 ( sym_tag_to_uui
7340: 64 28 7a 4e 61 6d 65 2c 20 26 75 75 69 64 29 20 d(zName, &uuid)
7350: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 31 3a ){. case 1:
7360: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 67 6f {. /* go
7370: 74 20 6f 6e 65 20 55 55 49 44 2c 20 75 73 65 20 t one UUID, use
7380: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 7a 4e it */. zN
7390: 61 6d 65 20 3d 20 62 6c 6f 62 5f 73 74 72 28 26 ame = blob_str(&
73a0: 75 75 69 64 29 3b 0a 20 20 20 20 20 20 20 20 62 uuid);. b
73b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 reak;. }.
73c0: 20 20 20 20 63 61 73 65 20 32 3a 20 7b 0a 20 20 case 2: {.
73d0: 20 20 20 20 20 20 2f 2a 20 67 6f 20 73 6f 6d 65 /* go some
73e0: 77 68 65 72 65 20 74 6f 20 73 68 6f 77 20 74 68 where to show th
73f0: 65 20 6d 75 6c 74 69 70 6c 65 20 55 55 49 44 73 e multiple UUIDs
7400: 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 74 75 */. retu
7410: 72 6e 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 rn;. brea
7420: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 k;. }.
7430: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 default: {.
7440: 20 20 20 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 fossil_redir
7450: 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 20 20 ect_home();.
7460: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 break;.
7470: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 }. }. }. i
7480: 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 f( db_exists("SE
7490: 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 69 63 6b LECT 1 FROM tick
74a0: 65 74 20 57 48 45 52 45 20 74 6b 74 5f 75 75 69 et WHERE tkt_uui
74b0: 64 20 47 4c 4f 42 20 27 25 73 2a 27 22 2c 20 7a d GLOB '%s*'", z
74c0: 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 74 6b 74 Name) ){. tkt
74d0: 76 69 65 77 5f 70 61 67 65 28 29 3b 0a 20 20 20 view_page();.
74e0: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 72 return;. }. r
74f0: 69 64 20 3d 20 64 62 5f 69 6e 74 28 30 2c 20 22 id = db_int(0, "
7500: 53 45 4c 45 43 54 20 72 69 64 20 46 52 4f 4d 20 SELECT rid FROM
7510: 62 6c 6f 62 20 57 48 45 52 45 20 75 75 69 64 20 blob WHERE uuid
7520: 47 4c 4f 42 20 27 25 73 2a 27 22 2c 20 7a 4e 61 GLOB '%s*'", zNa
7530: 6d 65 29 3b 0a 20 20 69 66 28 20 72 69 64 3d 3d me);. if( rid==
7540: 30 20 29 7b 0a 20 20 20 20 73 74 79 6c 65 5f 68 0 ){. style_h
7550: 65 61 64 65 72 28 22 42 72 6f 6b 65 6e 20 4c 69 eader("Broken Li
7560: 6e 6b 22 29 3b 0a 20 20 20 20 40 20 3c 70 3e 4e nk");. @ <p>N
7570: 6f 20 73 75 63 68 20 6f 62 6a 65 63 74 3a 20 25 o such object: %
7580: 68 28 7a 4e 61 6d 65 29 3c 2f 70 3e 0a 20 20 20 h(zName)</p>.
7590: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
75a0: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d . return;. }
75b0: 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 . if( db_exists
75c0: 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 ("SELECT 1 FROM
75d0: 6d 6c 69 6e 6b 20 57 48 45 52 45 20 6d 69 64 3d mlink WHERE mid=
75e0: 25 64 22 2c 20 72 69 64 29 20 29 7b 0a 20 20 20 %d", rid) ){.
75f0: 20 63 69 5f 70 61 67 65 28 29 3b 0a 20 20 7d 65 ci_page();. }e
7600: 6c 73 65 0a 20 20 69 66 28 20 64 62 5f 65 78 69 lse. if( db_exi
7610: 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 sts("SELECT 1 FR
7620: 4f 4d 20 74 61 67 78 72 65 66 20 4a 4f 49 4e 20 OM tagxref JOIN
7630: 74 61 67 20 55 53 49 4e 47 28 74 61 67 69 64 29 tag USING(tagid)
7640: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
7650: 20 20 22 20 57 48 45 52 45 20 72 69 64 3d 25 64 " WHERE rid=%d
7660: 20 41 4e 44 20 74 61 67 6e 61 6d 65 20 4c 49 4b AND tagname LIK
7670: 45 20 27 77 69 6b 69 2d 25 25 27 22 2c 20 72 69 E 'wiki-%%'", ri
7680: 64 29 20 29 7b 0a 20 20 20 20 77 69 6e 66 6f 5f d) ){. winfo_
7690: 70 61 67 65 28 29 3b 0a 20 20 7d 65 6c 73 65 0a page();. }else.
76a0: 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 if( db_exists(
76b0: 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 "SELECT 1 FROM t
76c0: 61 67 78 72 65 66 20 4a 4f 49 4e 20 74 61 67 20 agxref JOIN tag
76d0: 55 53 49 4e 47 28 74 61 67 69 64 29 22 0a 20 20 USING(tagid)".
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 "
76f0: 57 48 45 52 45 20 72 69 64 3d 25 64 20 41 4e 44 WHERE rid=%d AND
7700: 20 74 61 67 6e 61 6d 65 20 4c 49 4b 45 20 27 74 tagname LIKE 't
7710: 6b 74 2d 25 25 27 22 2c 20 72 69 64 29 20 29 7b kt-%%'", rid) ){
7720: 0a 20 20 20 20 74 69 6e 66 6f 5f 70 61 67 65 28 . tinfo_page(
7730: 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 69 66 28 );. }else. if(
7740: 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 db_exists("SELE
7750: 43 54 20 31 20 46 52 4f 4d 20 70 6c 69 6e 6b 20 CT 1 FROM plink
7760: 57 48 45 52 45 20 63 69 64 3d 25 64 22 2c 20 72 WHERE cid=%d", r
7770: 69 64 29 20 29 7b 0a 20 20 20 20 63 69 5f 70 61 id) ){. ci_pa
7780: 67 65 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 ge();. }else.
7790: 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 53 if( db_exists("S
77a0: 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 6c 69 ELECT 1 FROM pli
77b0: 6e 6b 20 57 48 45 52 45 20 70 69 64 3d 25 64 22 nk WHERE pid=%d"
77c0: 2c 20 72 69 64 29 20 29 7b 0a 20 20 20 20 63 69 , rid) ){. ci
77d0: 5f 70 61 67 65 28 29 3b 0a 20 20 7d 65 6c 73 65 _page();. }else
77e0: 0a 20 20 7b 0a 20 20 20 20 61 72 74 69 66 61 63 . {. artifac
77f0: 74 5f 70 61 67 65 28 29 3b 0a 20 20 7d 0a 7d 0a t_page();. }.}.
7800: 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 ./*.** WEBPAGE:
7810: 63 69 5f 65 64 69 74 0a 2a 2a 20 55 52 4c 3a 20 ci_edit.** URL:
7820: 20 63 69 5f 65 64 69 74 3f 72 3d 52 49 44 26 63 ci_edit?r=RID&c
7830: 3d 4e 45 57 43 4f 4d 4d 45 4e 54 26 75 3d 4e 45 =NEWCOMMENT&u=NE
7840: 57 55 53 45 52 0a 2a 2a 0a 2a 2a 20 50 72 65 73 WUSER.**.** Pres
7850: 65 6e 74 20 61 20 64 69 61 6c 6f 67 20 66 6f 72 ent a dialog for
7860: 20 75 70 64 61 74 69 6e 67 20 70 72 6f 70 65 72 updating proper
7870: 74 69 65 73 20 6f 66 20 61 20 62 61 73 65 6c 69 ties of a baseli
7880: 6e 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 ne:.**.** *
7890: 20 54 68 65 20 63 68 65 63 6b 2d 69 6e 20 75 73 The check-in us
78a0: 65 72 0a 2a 2a 20 20 20 20 20 2a 20 20 54 68 65 er.** * The
78b0: 20 63 68 65 63 6b 2d 69 6e 20 63 6f 6d 6d 65 6e check-in commen
78c0: 74 0a 2a 2a 20 20 20 20 20 2a 20 20 54 68 65 20 t.** * The
78d0: 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f 6c 6f 72 background color
78e0: 2e 0a 2a 2f 0a 76 6f 69 64 20 63 69 5f 65 64 69 ..*/.void ci_edi
78f0: 74 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 t_page(void){.
7900: 69 6e 74 20 72 69 64 3b 0a 20 20 63 6f 6e 73 74 int rid;. const
7910: 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 3b char *zComment;
7920: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 /* Curr
7930: 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 ent comment on t
7940: 68 65 20 63 68 65 63 6b 2d 69 6e 20 2a 2f 0a 20 he check-in */.
7950: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 const char *zNe
7960: 77 43 6f 6d 6d 65 6e 74 3b 20 20 20 20 20 20 2f wComment; /
7970: 2a 20 52 65 76 69 73 65 64 20 63 68 65 63 6b 2d * Revised check-
7980: 69 6e 20 63 6f 6d 6d 65 6e 74 20 2a 2f 0a 20 20 in comment */.
7990: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 const char *zUse
79a0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a r; /*
79b0: 20 43 75 72 72 65 6e 74 20 75 73 65 72 20 66 6f Current user fo
79c0: 72 20 74 68 65 20 63 68 65 63 6b 2d 69 6e 20 2a r the check-in *
79d0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a /. const char *
79e0: 7a 4e 65 77 55 73 65 72 3b 20 20 20 20 20 20 20 zNewUser;
79f0: 20 20 2f 2a 20 52 65 76 69 73 65 64 20 75 73 65 /* Revised use
7a00: 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 r */. const cha
7a10: 72 20 2a 7a 44 61 74 65 3b 20 20 20 20 20 20 20 r *zDate;
7a20: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 /* Current
7a30: 64 61 74 65 20 6f 66 20 74 68 65 20 63 68 65 63 date of the chec
7a40: 6b 2d 69 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 k-in */. const
7a50: 63 68 61 72 20 2a 7a 4e 65 77 44 61 74 65 3b 20 char *zNewDate;
7a60: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 76 69 73 /* Revis
7a70: 65 64 20 63 68 65 63 6b 2d 69 6e 20 64 61 74 65 ed check-in date
7a80: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 */. const char
7a90: 20 2a 7a 43 6f 6c 6f 72 3b 20 20 20 20 20 20 20 *zColor;
7aa0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
7ab0: 4e 65 77 43 6f 6c 6f 72 3b 0a 20 20 63 6f 6e 73 NewColor;. cons
7ac0: 74 20 63 68 61 72 20 2a 7a 4e 65 77 54 61 67 46 t char *zNewTagF
7ad0: 6c 61 67 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 lag;. const cha
7ae0: 72 20 2a 7a 4e 65 77 54 61 67 3b 0a 20 20 63 6f r *zNewTag;. co
7af0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 42 72 nst char *zNewBr
7b00: 46 6c 61 67 3b 0a 20 20 63 6f 6e 73 74 20 63 68 Flag;. const ch
7b10: 61 72 20 2a 7a 4e 65 77 42 72 61 6e 63 68 3b 0a ar *zNewBranch;.
7b20: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 const char *zC
7b30: 6c 6f 73 65 46 6c 61 67 3b 0a 20 20 69 6e 74 20 loseFlag;. int
7b40: 66 50 72 6f 70 61 67 61 74 65 43 6f 6c 6f 72 3b fPropagateColor;
7b50: 0a 20 20 63 68 61 72 20 2a 7a 55 75 69 64 3b 0a . char *zUuid;.
7b60: 20 20 42 6c 6f 62 20 63 6f 6d 6d 65 6e 74 3b 0a Blob comment;.
7b70: 20 20 53 74 6d 74 20 71 3b 0a 20 20 73 74 61 74 Stmt q;. stat
7b80: 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 ic const struct
7b90: 53 61 6d 70 6c 65 43 6f 6c 6f 72 73 20 7b 0a 20 SampleColors {.
7ba0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
7bb0: 7a 43 4e 61 6d 65 3b 0a 20 20 20 20 20 63 6f 6e zCName;. con
7bc0: 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 6f 72 3b st char *zColor;
7bd0: 0a 20 20 7d 20 61 43 6f 6c 6f 72 5b 5d 20 3d 20 . } aColor[] =
7be0: 7b 0a 20 20 20 20 20 7b 20 22 28 6e 6f 6e 65 29 {. { "(none)
7bf0: 22 2c 20 20 22 22 20 7d 2c 0a 20 20 20 20 20 7b ", "" },. {
7c00: 20 22 23 66 32 64 63 64 63 22 2c 20 22 23 66 32 "#f2dcdc", "#f2
7c10: 64 63 64 63 22 20 7d 2c 0a 20 20 20 20 20 7b 20 dcdc" },. {
7c20: 22 23 66 30 66 66 63 30 22 2c 20 22 23 66 30 66 "#f0ffc0", "#f0f
7c30: 66 63 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 fc0" },. { "
7c40: 23 62 64 65 35 64 36 22 2c 20 22 23 62 64 65 35 #bde5d6", "#bde5
7c50: 64 36 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 d6" },. { "#
7c60: 63 30 66 66 63 30 22 2c 20 22 23 63 30 66 66 63 c0ffc0", "#c0ffc
7c70: 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 63 0" },. { "#c
7c80: 30 66 66 66 30 22 2c 20 22 23 63 30 66 66 66 30 0fff0", "#c0fff0
7c90: 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 63 30 " },. { "#c0
7ca0: 66 30 66 66 22 2c 20 22 23 63 30 66 30 66 66 22 f0ff", "#c0f0ff"
7cb0: 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 64 30 63 },. { "#d0c
7cc0: 30 66 66 22 2c 20 22 23 64 30 63 30 66 66 22 20 0ff", "#d0c0ff"
7cd0: 7d 2c 0a 20 20 20 20 20 7b 20 22 23 66 66 63 30 },. { "#ffc0
7ce0: 66 66 22 2c 20 22 23 66 66 63 30 66 66 22 20 7d ff", "#ffc0ff" }
7cf0: 2c 0a 20 20 20 20 20 7b 20 22 23 66 66 63 30 64 ,. { "#ffc0d
7d00: 30 22 2c 20 22 23 66 66 63 30 64 30 22 20 7d 2c 0", "#ffc0d0" },
7d10: 0a 20 20 20 20 20 7b 20 22 23 66 66 66 30 63 30 . { "#fff0c0
7d20: 22 2c 20 22 23 66 66 66 30 63 30 22 20 7d 2c 0a ", "#fff0c0" },.
7d30: 20 20 20 20 20 7b 20 22 23 63 30 63 30 63 30 22 { "#c0c0c0"
7d40: 2c 20 22 23 63 30 63 30 63 30 22 20 7d 2c 0a 20 , "#c0c0c0" },.
7d50: 20 7d 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 6f 72 };. int nColor
7d60: 20 3d 20 73 69 7a 65 6f 66 28 61 43 6f 6c 6f 72 = sizeof(aColor
7d70: 29 2f 73 69 7a 65 6f 66 28 61 43 6f 6c 6f 72 5b )/sizeof(aColor[
7d80: 30 5d 29 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 0]);. int i;.
7d90: 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 . login_check_c
7da0: 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 redentials();.
7db0: 69 66 28 20 21 67 2e 6f 6b 57 72 69 74 65 20 29 if( !g.okWrite )
7dc0: 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 { login_needed()
7dd0: 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 72 69 ; return; }. ri
7de0: 64 20 3d 20 61 74 6f 69 28 50 44 28 22 72 22 2c d = atoi(PD("r",
7df0: 22 30 22 29 29 3b 0a 20 20 7a 55 75 69 64 20 3d "0"));. zUuid =
7e00: 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c db_text(0, "SEL
7e10: 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c ECT uuid FROM bl
7e20: 6f 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 ob WHERE rid=%d"
7e30: 2c 20 72 69 64 29 3b 0a 20 20 7a 43 6f 6d 6d 65 , rid);. zComme
7e40: 6e 74 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 nt = db_text(0,
7e50: 22 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 "SELECT coalesce
7e60: 28 65 63 6f 6d 6d 65 6e 74 2c 63 6f 6d 6d 65 6e (ecomment,commen
7e70: 74 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 t)".
7e80: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 46 " F
7e90: 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 45 20 ROM event WHERE
7ea0: 6f 62 6a 69 64 3d 25 64 22 2c 20 72 69 64 29 3b objid=%d", rid);
7eb0: 0a 20 20 69 66 28 20 7a 43 6f 6d 6d 65 6e 74 3d . if( zComment=
7ec0: 3d 30 20 29 20 66 6f 73 73 69 6c 5f 72 65 64 69 =0 ) fossil_redi
7ed0: 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 69 rect_home();. i
7ee0: 66 28 20 50 28 22 63 61 6e 63 65 6c 22 29 20 29 f( P("cancel") )
7ef0: 7b 0a 20 20 20 20 63 67 69 5f 72 65 64 69 72 65 {. cgi_redire
7f00: 63 74 66 28 22 63 69 3f 6e 61 6d 65 3d 25 64 22 ctf("ci?name=%d"
7f10: 2c 20 72 69 64 29 3b 0a 20 20 7d 0a 20 20 7a 4e , rid);. }. zN
7f20: 65 77 43 6f 6d 6d 65 6e 74 20 3d 20 50 44 28 22 ewComment = PD("
7f30: 63 22 2c 7a 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 c",zComment);.
7f40: 7a 55 73 65 72 20 3d 20 64 62 5f 74 65 78 74 28 zUser = db_text(
7f50: 30 2c 20 22 53 45 4c 45 43 54 20 63 6f 61 6c 65 0, "SELECT coale
7f60: 73 63 65 28 65 75 73 65 72 2c 75 73 65 72 29 22 sce(euser,user)"
7f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7f80: 20 20 20 20 20 20 22 20 20 46 52 4f 4d 20 65 76 " FROM ev
7f90: 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 64 3d ent WHERE objid=
7fa0: 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 69 66 28 %d", rid);. if(
7fb0: 20 7a 55 73 65 72 3d 3d 30 20 29 20 66 6f 73 73 zUser==0 ) foss
7fc0: 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 il_redirect_home
7fd0: 28 29 3b 0a 20 20 7a 4e 65 77 55 73 65 72 20 3d ();. zNewUser =
7fe0: 20 50 44 28 22 75 22 2c 7a 55 73 65 72 29 3b 0a PD("u",zUser);.
7ff0: 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 74 65 78 zDate = db_tex
8000: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61 74 t(0, "SELECT dat
8010: 65 74 69 6d 65 28 6d 74 69 6d 65 29 22 0a 20 20 etime(mtime)".
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8030: 20 20 20 22 20 20 46 52 4f 4d 20 65 76 65 6e 74 " FROM event
8040: 20 57 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 22 WHERE objid=%d"
8050: 2c 20 72 69 64 29 3b 0a 20 20 69 66 28 20 7a 44 , rid);. if( zD
8060: 61 74 65 3d 3d 30 20 29 20 66 6f 73 73 69 6c 5f ate==0 ) fossil_
8070: 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b redirect_home();
8080: 0a 20 20 7a 4e 65 77 44 61 74 65 20 3d 20 50 44 . zNewDate = PD
8090: 28 22 64 74 22 2c 7a 44 61 74 65 29 3b 0a 20 20 ("dt",zDate);.
80a0: 7a 43 6f 6c 6f 72 20 3d 20 64 62 5f 74 65 78 74 zColor = db_text
80b0: 28 22 22 2c 20 22 53 45 4c 45 43 54 20 62 67 63 ("", "SELECT bgc
80c0: 6f 6c 6f 72 22 0a 20 20 20 20 20 20 20 20 20 20 olor".
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 "
80e0: 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 FROM event WHER
80f0: 45 20 6f 62 6a 69 64 3d 25 64 22 2c 20 72 69 64 E objid=%d", rid
8100: 29 3b 0a 20 20 7a 4e 65 77 43 6f 6c 6f 72 20 3d );. zNewColor =
8110: 20 50 44 28 22 63 6c 72 22 2c 7a 43 6f 6c 6f 72 PD("clr",zColor
8120: 29 3b 0a 20 20 66 50 72 6f 70 61 67 61 74 65 43 );. fPropagateC
8130: 6f 6c 6f 72 20 3d 20 50 28 22 70 63 6c 72 22 29 olor = P("pclr")
8140: 21 3d 30 3b 0a 20 20 7a 4e 65 77 54 61 67 46 6c !=0;. zNewTagFl
8150: 61 67 20 3d 20 50 28 22 6e 65 77 74 61 67 22 29 ag = P("newtag")
8160: 20 3f 20 22 20 63 68 65 63 6b 65 64 22 20 3a 20 ? " checked" :
8170: 22 22 3b 0a 20 20 7a 4e 65 77 54 61 67 20 3d 20 "";. zNewTag =
8180: 50 44 28 22 74 61 67 6e 61 6d 65 22 2c 22 22 29 PD("tagname","")
8190: 3b 0a 20 20 7a 4e 65 77 42 72 46 6c 61 67 20 3d ;. zNewBrFlag =
81a0: 20 50 28 22 6e 65 77 62 72 22 29 20 3f 20 22 20 P("newbr") ? "
81b0: 63 68 65 63 6b 65 64 22 20 3a 20 22 22 3b 0a 20 checked" : "";.
81c0: 20 7a 4e 65 77 42 72 61 6e 63 68 20 3d 20 50 44 zNewBranch = PD
81d0: 28 22 62 72 6e 61 6d 65 22 2c 22 22 29 3b 0a 20 ("brname","");.
81e0: 20 7a 43 6c 6f 73 65 46 6c 61 67 20 3d 20 50 28 zCloseFlag = P(
81f0: 22 63 6c 6f 73 65 22 29 20 3f 20 22 20 63 68 65 "close") ? " che
8200: 63 6b 65 64 22 20 3a 20 22 22 3b 0a 20 20 69 66 cked" : "";. if
8210: 28 20 50 28 22 61 70 70 6c 79 22 29 20 29 7b 0a ( P("apply") ){.
8220: 20 20 20 20 42 6c 6f 62 20 63 74 72 6c 3b 0a 20 Blob ctrl;.
8230: 20 20 20 63 68 61 72 20 2a 7a 44 61 74 65 3b 0a char *zDate;.
8240: 20 20 20 20 69 6e 74 20 6e 43 68 6e 67 20 3d 20 int nChng =
8250: 30 3b 0a 0a 20 20 20 20 6c 6f 67 69 6e 5f 76 65 0;.. login_ve
8260: 72 69 66 79 5f 63 73 72 66 5f 73 65 63 72 65 74 rify_csrf_secret
8270: 28 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 ();. blob_zer
8280: 6f 28 26 63 74 72 6c 29 3b 0a 20 20 20 20 7a 44 o(&ctrl);. zD
8290: 61 74 65 20 3d 20 64 62 5f 74 65 78 74 28 30 2c ate = db_text(0,
82a0: 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d "SELECT datetim
82b0: 65 28 27 6e 6f 77 27 29 22 29 3b 0a 20 20 20 20 e('now')");.
82c0: 7a 44 61 74 65 5b 31 30 5d 20 3d 20 27 54 27 3b zDate[10] = 'T';
82d0: 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 . blob_append
82e0: 66 28 26 63 74 72 6c 2c 20 22 44 20 25 73 5c 6e f(&ctrl, "D %s\n
82f0: 22 2c 20 7a 44 61 74 65 29 3b 0a 20 20 20 20 64 ", zDate);. d
8300: 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 43 52 b_multi_exec("CR
8310: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 EATE TEMP TABLE
8320: 6e 65 77 74 61 67 73 28 74 61 67 20 55 4e 49 51 newtags(tag UNIQ
8330: 55 45 2c 20 70 72 65 66 69 78 2c 20 76 61 6c 75 UE, prefix, valu
8340: 65 29 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 4e e)");. if( zN
8350: 65 77 43 6f 6c 6f 72 5b 30 5d 20 26 26 20 73 74 ewColor[0] && st
8360: 72 63 6d 70 28 7a 43 6f 6c 6f 72 2c 7a 4e 65 77 rcmp(zColor,zNew
8370: 43 6f 6c 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 Color)!=0 ){.
8380: 20 20 20 63 68 61 72 20 2a 7a 50 72 65 66 69 78 char *zPrefix
8390: 20 3d 20 22 2b 22 3b 0a 20 20 20 20 20 20 69 66 = "+";. if
83a0: 28 20 66 50 72 6f 70 61 67 61 74 65 43 6f 6c 6f ( fPropagateColo
83b0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 50 72 r ){. zPr
83c0: 65 66 69 78 20 3d 20 22 2a 22 3b 0a 20 20 20 20 efix = "*";.
83d0: 20 20 7d 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c }. db_mul
83e0: 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 ti_exec("REPLACE
83f0: 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 INTO newtags VA
8400: 4c 55 45 53 28 27 62 67 63 6f 6c 6f 72 27 2c 25 LUES('bgcolor',%
8410: 51 2c 25 51 29 22 2c 0a 20 20 20 20 20 20 20 20 Q,%Q)",.
8420: 20 20 20 20 20 20 20 20 20 20 20 20 7a 50 72 65 zPre
8430: 66 69 78 2c 20 7a 4e 65 77 43 6f 6c 6f 72 29 3b fix, zNewColor);
8440: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a . }. if( z
8450: 4e 65 77 43 6f 6c 6f 72 5b 30 5d 3d 3d 30 20 26 NewColor[0]==0 &
8460: 26 20 7a 43 6f 6c 6f 72 5b 30 5d 21 3d 30 20 29 & zColor[0]!=0 )
8470: 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 {. db_multi
8480: 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 _exec("REPLACE I
8490: 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 NTO newtags VALU
84a0: 45 53 28 27 62 67 63 6f 6c 6f 72 27 2c 27 2d 27 ES('bgcolor','-'
84b0: 2c 4e 55 4c 4c 29 22 29 3b 0a 20 20 20 20 7d 0a ,NULL)");. }.
84c0: 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a if( strcmp(z
84d0: 43 6f 6d 6d 65 6e 74 2c 7a 4e 65 77 43 6f 6d 6d Comment,zNewComm
84e0: 65 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 ent)!=0 ){.
84f0: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 db_multi_exec("
8500: 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 REPLACE INTO new
8510: 74 61 67 73 20 56 41 4c 55 45 53 28 27 63 6f 6d tags VALUES('com
8520: 6d 65 6e 74 27 2c 27 2b 27 2c 25 51 29 22 2c 0a ment','+',%Q)",.
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8540: 20 20 20 20 7a 4e 65 77 43 6f 6d 6d 65 6e 74 29 zNewComment)
8550: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 ;. }. if(
8560: 73 74 72 63 6d 70 28 7a 44 61 74 65 2c 7a 4e 65 strcmp(zDate,zNe
8570: 77 44 61 74 65 29 21 3d 30 20 29 7b 0a 20 20 20 wDate)!=0 ){.
8580: 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 db_multi_exec
8590: 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e ("REPLACE INTO n
85a0: 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 64 ewtags VALUES('d
85b0: 61 74 65 27 2c 27 2b 27 2c 25 51 29 22 2c 0a 20 ate','+',%Q)",.
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
85d0: 20 20 20 7a 4e 65 77 44 61 74 65 29 3b 0a 20 20 zNewDate);.
85e0: 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 63 }. if( strc
85f0: 6d 70 28 7a 55 73 65 72 2c 7a 4e 65 77 55 73 65 mp(zUser,zNewUse
8600: 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 r)!=0 ){. d
8610: 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 b_multi_exec("RE
8620: 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 PLACE INTO newta
8630: 67 73 20 56 41 4c 55 45 53 28 27 75 73 65 72 27 gs VALUES('user'
8640: 2c 27 2b 27 2c 25 51 29 22 2c 20 7a 4e 65 77 55 ,'+',%Q)", zNewU
8650: 73 65 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 ser);. }.
8660: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 db_prepare(&q,.
8670: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 74 61 "SELECT ta
8680: 67 2e 74 61 67 69 64 2c 20 74 61 67 6e 61 6d 65 g.tagid, tagname
8690: 20 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 FROM tagxref, t
86a0: 61 67 22 0a 20 20 20 20 20 20 20 22 20 57 48 45 ag". " WHE
86b0: 52 45 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 RE tagxref.rid=%
86c0: 64 20 41 4e 44 20 74 61 67 74 79 70 65 3e 30 20 d AND tagtype>0
86d0: 41 4e 44 20 74 61 67 78 72 65 66 2e 74 61 67 69 AND tagxref.tagi
86e0: 64 3d 74 61 67 2e 74 61 67 69 64 22 2c 0a 20 20 d=tag.tagid",.
86f0: 20 20 20 20 20 72 69 64 0a 20 20 20 20 29 3b 0a rid. );.
8700: 20 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 while( db_st
8710: 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 ep(&q)==SQLITE_R
8720: 4f 57 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 OW ){. int
8730: 74 61 67 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d tagid = db_colum
8740: 6e 5f 69 6e 74 28 26 71 2c 20 30 29 3b 0a 20 20 n_int(&q, 0);.
8750: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
8760: 7a 54 61 67 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e zTag = db_column
8770: 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 _text(&q, 1);.
8780: 20 20 20 20 63 68 61 72 20 7a 4c 61 62 65 6c 5b char zLabel[
8790: 33 30 5d 3b 0a 20 20 20 20 20 20 73 70 72 69 6e 30];. sprin
87a0: 74 66 28 7a 4c 61 62 65 6c 2c 20 22 63 25 64 22 tf(zLabel, "c%d"
87b0: 2c 20 74 61 67 69 64 29 3b 0a 20 20 20 20 20 20 , tagid);.
87c0: 69 66 28 20 50 28 7a 4c 61 62 65 6c 29 20 29 7b if( P(zLabel) ){
87d0: 0a 20 20 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 . db_mult
87e0: 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 i_exec("REPLACE
87f0: 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c INTO newtags VAL
8800: 55 45 53 28 25 51 2c 27 2d 27 2c 4e 55 4c 4c 29 UES(%Q,'-',NULL)
8810: 22 2c 20 7a 54 61 67 29 3b 0a 20 20 20 20 20 20 ", zTag);.
8820: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f 66 }. }. db_f
8830: 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 inalize(&q);.
8840: 20 69 66 28 20 7a 43 6c 6f 73 65 46 6c 61 67 5b if( zCloseFlag[
8850: 30 5d 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 6d 0] ){. db_m
8860: 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 ulti_exec("REPLA
8870: 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 CE INTO newtags
8880: 56 41 4c 55 45 53 28 27 63 6c 6f 73 65 64 27 2c VALUES('closed',
8890: 27 2b 27 2c 4e 55 4c 4c 29 22 29 3b 0a 20 20 20 '+',NULL)");.
88a0: 20 7d 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 54 }. if( zNewT
88b0: 61 67 46 6c 61 67 5b 30 5d 20 29 7b 0a 20 20 20 agFlag[0] ){.
88c0: 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 db_multi_exec
88d0: 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e ("REPLACE INTO n
88e0: 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 73 ewtags VALUES('s
88f0: 79 6d 2d 25 71 27 2c 27 2b 27 2c 4e 55 4c 4c 29 ym-%q','+',NULL)
8900: 22 2c 20 7a 4e 65 77 54 61 67 29 3b 0a 20 20 20 ", zNewTag);.
8910: 20 7d 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 42 }. if( zNewB
8920: 72 46 6c 61 67 5b 30 5d 20 29 7b 0a 20 20 20 20 rFlag[0] ){.
8930: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 db_multi_exec(
8940: 0a 20 20 20 20 20 20 20 20 22 52 45 50 4c 41 43 . "REPLAC
8950: 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 22 E INTO newtags "
8960: 0a 20 20 20 20 20 20 20 20 22 20 53 45 4c 45 43 . " SELEC
8970: 54 20 74 61 67 6e 61 6d 65 2c 20 27 2d 27 2c 20 T tagname, '-',
8980: 4e 55 4c 4c 20 46 52 4f 4d 20 74 61 67 78 72 65 NULL FROM tagxre
8990: 66 2c 20 74 61 67 22 0a 20 20 20 20 20 20 20 20 f, tag".
89a0: 22 20 20 57 48 45 52 45 20 74 61 67 78 72 65 66 " WHERE tagxref
89b0: 2e 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 74 .rid=%d AND tagt
89c0: 79 70 65 3d 3d 32 22 0a 20 20 20 20 20 20 20 20 ype==2".
89d0: 22 20 20 20 20 41 4e 44 20 74 61 67 6e 61 6d 65 " AND tagname
89e0: 20 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 22 0a 20 GLOB 'sym-*'".
89f0: 20 20 20 20 20 20 20 22 20 20 20 20 41 4e 44 20 " AND
8a00: 74 61 67 2e 74 61 67 69 64 3d 74 61 67 78 72 65 tag.tagid=tagxre
8a10: 66 2e 74 61 67 69 64 22 2c 0a 20 20 20 20 20 20 f.tagid",.
8a20: 20 20 72 69 64 0a 20 20 20 20 20 20 29 3b 0a 20 rid. );.
8a30: 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 db_multi_ex
8a40: 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f ec("REPLACE INTO
8a50: 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 newtags VALUES(
8a60: 27 62 72 61 6e 63 68 27 2c 27 2a 27 2c 25 51 29 'branch','*',%Q)
8a70: 22 2c 20 7a 4e 65 77 42 72 61 6e 63 68 29 3b 0a ", zNewBranch);.
8a80: 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 db_multi_e
8a90: 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 xec("REPLACE INT
8aa0: 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 O newtags VALUES
8ab0: 28 27 73 79 6d 2d 25 71 27 2c 27 2a 27 2c 4e 55 ('sym-%q','*',NU
8ac0: 4c 4c 29 22 2c 0a 20 20 20 20 20 20 20 20 20 20 LL)",.
8ad0: 20 20 20 20 20 20 20 20 20 20 7a 4e 65 77 42 72 zNewBr
8ae0: 61 6e 63 68 29 3b 0a 20 20 20 20 7d 0a 20 20 20 anch);. }.
8af0: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 db_prepare(&q,
8b00: 22 53 45 4c 45 43 54 20 74 61 67 2c 20 70 72 65 "SELECT tag, pre
8b10: 66 69 78 2c 20 76 61 6c 75 65 20 46 52 4f 4d 20 fix, value FROM
8b20: 6e 65 77 74 61 67 73 22 0a 20 20 20 20 20 20 20 newtags".
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 " OR
8b40: 44 45 52 20 42 59 20 70 72 65 66 69 78 20 7c 7c DER BY prefix ||
8b50: 20 74 61 67 22 29 3b 0a 20 20 20 20 77 68 69 6c tag");. whil
8b60: 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d e( db_step(&q)==
8b70: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 SQLITE_ROW ){.
8b80: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
8b90: 7a 54 61 67 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e zTag = db_column
8ba0: 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 _text(&q, 0);.
8bb0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
8bc0: 7a 50 72 65 66 69 78 20 3d 20 64 62 5f 63 6f 6c zPrefix = db_col
8bd0: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b umn_text(&q, 1);
8be0: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 . const cha
8bf0: 72 20 2a 7a 56 61 6c 75 65 20 3d 20 64 62 5f 63 r *zValue = db_c
8c00: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 olumn_text(&q, 2
8c10: 29 3b 0a 20 20 20 20 20 20 6e 43 68 6e 67 2b 2b );. nChng++
8c20: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 56 61 6c ;. if( zVal
8c30: 75 65 20 29 7b 0a 20 20 20 20 20 20 20 20 62 6c ue ){. bl
8c40: 6f 62 5f 61 70 70 65 6e 64 66 28 26 63 74 72 6c ob_appendf(&ctrl
8c50: 2c 20 22 54 20 25 73 25 46 20 25 73 20 25 46 5c , "T %s%F %s %F\
8c60: 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 7a 54 61 n", zPrefix, zTa
8c70: 67 2c 20 7a 55 75 69 64 2c 20 7a 56 61 6c 75 65 g, zUuid, zValue
8c80: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a );. }else{.
8c90: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 blob_app
8ca0: 65 6e 64 66 28 26 63 74 72 6c 2c 20 22 54 20 25 endf(&ctrl, "T %
8cb0: 73 25 46 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66 s%F %s\n", zPref
8cc0: 69 78 2c 20 7a 54 61 67 2c 20 7a 55 75 69 64 29 ix, zTag, zUuid)
8cd0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
8ce0: 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 db_finalize(
8cf0: 26 71 29 3b 0a 20 20 20 20 69 66 28 20 6e 43 68 &q);. if( nCh
8d00: 6e 67 3e 30 20 29 7b 0a 20 20 20 20 20 20 69 6e ng>0 ){. in
8d10: 74 20 6e 72 69 64 3b 0a 20 20 20 20 20 20 42 6c t nrid;. Bl
8d20: 6f 62 20 63 6b 73 75 6d 3b 0a 20 20 20 20 20 20 ob cksum;.
8d30: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 63 74 blob_appendf(&ct
8d40: 72 6c 2c 20 22 55 20 25 46 5c 6e 22 2c 20 67 2e rl, "U %F\n", g.
8d50: 7a 4c 6f 67 69 6e 29 3b 0a 20 20 20 20 20 20 6d zLogin);. m
8d60: 64 35 73 75 6d 5f 62 6c 6f 62 28 26 63 74 72 6c d5sum_blob(&ctrl
8d70: 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 20 20 20 , &cksum);.
8d80: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 63 blob_appendf(&c
8d90: 74 72 6c 2c 20 22 5a 20 25 62 5c 6e 22 2c 20 26 trl, "Z %b\n", &
8da0: 63 6b 73 75 6d 29 3b 0a 20 20 20 20 20 20 64 62 cksum);. db
8db0: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 _begin_transacti
8dc0: 6f 6e 28 29 3b 0a 20 20 20 20 20 20 67 2e 6d 61 on();. g.ma
8dd0: 72 6b 50 72 69 76 61 74 65 20 3d 20 63 6f 6e 74 rkPrivate = cont
8de0: 65 6e 74 5f 69 73 5f 70 72 69 76 61 74 65 28 72 ent_is_private(r
8df0: 69 64 29 3b 0a 20 20 20 20 20 20 6e 72 69 64 20 id);. nrid
8e00: 3d 20 63 6f 6e 74 65 6e 74 5f 70 75 74 28 26 63 = content_put(&c
8e10: 74 72 6c 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 trl, 0, 0);.
8e20: 20 20 6d 61 6e 69 66 65 73 74 5f 63 72 6f 73 73 manifest_cross
8e30: 6c 69 6e 6b 28 6e 72 69 64 2c 20 26 63 74 72 6c link(nrid, &ctrl
8e40: 29 3b 0a 20 20 20 20 20 20 64 62 5f 65 6e 64 5f );. db_end_
8e50: 74 72 61 6e 73 61 63 74 69 6f 6e 28 30 29 3b 0a transaction(0);.
8e60: 20 20 20 20 7d 0a 20 20 20 20 63 67 69 5f 72 65 }. cgi_re
8e70: 64 69 72 65 63 74 66 28 22 63 69 3f 6e 61 6d 65 directf("ci?name
8e80: 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 7d 0a =%d", rid);. }.
8e90: 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 63 6f 6d blob_zero(&com
8ea0: 6d 65 6e 74 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 ment);. blob_ap
8eb0: 70 65 6e 64 28 26 63 6f 6d 6d 65 6e 74 2c 20 7a pend(&comment, z
8ec0: 4e 65 77 43 6f 6d 6d 65 6e 74 2c 20 2d 31 29 3b NewComment, -1);
8ed0: 0a 20 20 7a 55 75 69 64 5b 31 30 5d 20 3d 20 30 . zUuid[10] = 0
8ee0: 3b 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 ;. style_header
8ef0: 28 22 45 64 69 74 20 43 68 65 63 6b 2d 69 6e 20 ("Edit Check-in
8f00: 5b 25 73 5d 22 2c 20 7a 55 75 69 64 29 3b 0a 20 [%s]", zUuid);.
8f10: 20 69 66 28 20 50 28 22 70 72 65 76 69 65 77 22 if( P("preview"
8f20: 29 20 29 7b 0a 20 20 20 20 42 6c 6f 62 20 73 75 ) ){. Blob su
8f30: 66 66 69 78 3b 0a 20 20 20 20 69 6e 74 20 6e 54 ffix;. int nT
8f40: 61 67 20 3d 20 30 3b 0a 20 20 20 20 40 20 3c 62 ag = 0;. @ <b
8f50: 3e 50 72 65 76 69 65 77 3a 3c 2f 62 3e 0a 20 20 >Preview:</b>.
8f60: 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e @ <blockquote>
8f70: 0a 20 20 20 20 40 20 3c 74 61 62 6c 65 20 62 6f . @ <table bo
8f80: 72 64 65 72 3d 30 3e 0a 20 20 20 20 69 66 28 20 rder=0>. if(
8f90: 7a 4e 65 77 43 6f 6c 6f 72 20 26 26 20 7a 4e 65 zNewColor && zNe
8fa0: 77 43 6f 6c 6f 72 5b 30 5d 20 29 7b 0a 20 20 20 wColor[0] ){.
8fb0: 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 62 67 63 @ <tr><td bgc
8fc0: 6f 6c 6f 72 3d 22 25 68 28 7a 4e 65 77 43 6f 6c olor="%h(zNewCol
8fd0: 6f 72 29 22 3e 0a 20 20 20 20 7d 65 6c 73 65 7b or)">. }else{
8fe0: 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 . @ <tr><td
8ff0: 3e 0a 20 20 20 20 7d 0a 20 20 20 20 77 69 6b 69 >. }. wiki
9000: 5f 63 6f 6e 76 65 72 74 28 26 63 6f 6d 6d 65 6e _convert(&commen
9010: 74 2c 20 30 2c 20 57 49 4b 49 5f 49 4e 4c 49 4e t, 0, WIKI_INLIN
9020: 45 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 E);. blob_zer
9030: 6f 28 26 73 75 66 66 69 78 29 3b 0a 20 20 20 20 o(&suffix);.
9040: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 73 75 blob_appendf(&su
9050: 66 66 69 78 2c 20 22 28 75 73 65 72 3a 20 25 68 ffix, "(user: %h
9060: 22 2c 20 7a 4e 65 77 55 73 65 72 29 3b 0a 20 20 ", zNewUser);.
9070: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c db_prepare(&q,
9080: 20 22 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 "SELECT substr(
9090: 74 61 67 6e 61 6d 65 2c 35 29 20 46 52 4f 4d 20 tagname,5) FROM
90a0: 74 61 67 78 72 65 66 2c 20 74 61 67 22 0a 20 20 tagxref, tag".
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90c0: 20 22 20 57 48 45 52 45 20 74 61 67 6e 61 6d 65 " WHERE tagname
90d0: 20 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 20 41 4e GLOB 'sym-*' AN
90e0: 44 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 64 D tagxref.rid=%d
90f0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
9100: 20 20 20 20 20 22 20 20 20 41 4e 44 20 74 61 67 " AND tag
9110: 74 79 70 65 3e 31 20 41 4e 44 20 74 61 67 2e 74 type>1 AND tag.t
9120: 61 67 69 64 3d 74 61 67 78 72 65 66 2e 74 61 67 agid=tagxref.tag
9130: 69 64 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 id",.
9140: 20 20 20 20 20 20 20 20 72 69 64 29 3b 0a 20 20 rid);.
9150: 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 while( db_step
9160: 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 (&q)==SQLITE_ROW
9170: 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 ){. const
9180: 63 68 61 72 20 2a 7a 54 61 67 20 3d 20 64 62 5f char *zTag = db_
9190: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
91a0: 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 54 0);. if( nT
91b0: 61 67 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 ag==0 ){.
91c0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 73 blob_appendf(&s
91d0: 75 66 66 69 78 2c 20 22 2c 20 74 61 67 73 3a 20 uffix, ", tags:
91e0: 25 68 22 2c 20 7a 54 61 67 29 3b 0a 20 20 20 20 %h", zTag);.
91f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
9200: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 73 blob_appendf(&s
9210: 75 66 66 69 78 2c 20 22 2c 20 25 68 22 2c 20 7a uffix, ", %h", z
9220: 54 61 67 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 Tag);. }.
9230: 20 20 20 20 6e 54 61 67 2b 2b 3b 0a 20 20 20 20 nTag++;.
9240: 7d 0a 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a }. db_finaliz
9250: 65 28 26 71 29 3b 0a 20 20 20 20 62 6c 6f 62 5f e(&q);. blob_
9260: 61 70 70 65 6e 64 66 28 26 73 75 66 66 69 78 2c appendf(&suffix,
9270: 20 22 29 22 29 3b 0a 20 20 20 20 40 20 25 73 28 ")");. @ %s(
9280: 62 6c 6f 62 5f 73 74 72 28 26 73 75 66 66 69 78 blob_str(&suffix
9290: 29 29 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f )). @ </td></
92a0: 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20 20 20 20 tr></table>.
92b0: 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a @ </blockquote>.
92c0: 20 20 20 20 40 20 3c 68 72 3e 0a 20 20 20 20 62 @ <hr>. b
92d0: 6c 6f 62 5f 72 65 73 65 74 28 26 73 75 66 66 69 lob_reset(&suffi
92e0: 78 29 3b 0a 20 20 7d 0a 20 20 40 20 3c 70 3e 4d x);. }. @ <p>M
92f0: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 61 ake changes to a
9300: 74 74 72 69 62 75 74 65 73 20 6f 66 20 63 68 65 ttributes of che
9310: 63 6b 2d 69 6e 0a 20 20 40 20 5b 3c 61 20 68 72 ck-in. @ [<a hr
9320: 65 66 3d 22 63 69 3f 6e 61 6d 65 3d 25 64 28 72 ef="ci?name=%d(r
9330: 69 64 29 22 3e 25 73 28 7a 55 75 69 64 29 3c 2f id)">%s(zUuid)</
9340: 61 3e 5d 3a 3c 2f 70 3e 0a 20 20 40 20 3c 66 6f a>]:</p>. @ <fo
9350: 72 6d 20 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e rm action="%s(g.
9360: 7a 42 61 73 65 55 52 4c 29 2f 63 69 5f 65 64 69 zBaseURL)/ci_edi
9370: 74 22 20 6d 65 74 68 6f 64 3d 22 50 4f 53 54 22 t" method="POST"
9380: 3e 0a 20 20 6c 6f 67 69 6e 5f 69 6e 73 65 72 74 >. login_insert
9390: 5f 63 73 72 66 5f 73 65 63 72 65 74 28 29 3b 0a _csrf_secret();.
93a0: 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
93b0: 22 68 69 64 64 65 6e 22 20 6e 61 6d 65 3d 22 72 "hidden" name="r
93c0: 22 20 76 61 6c 75 65 3d 22 25 64 28 72 69 64 29 " value="%d(rid)
93d0: 22 3e 0a 20 20 40 20 3c 74 61 62 6c 65 20 62 6f ">. @ <table bo
93e0: 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 73 70 61 rder="0" cellspa
93f0: 63 69 6e 67 3d 22 31 30 22 3e 0a 0a 20 20 40 20 cing="10">.. @
9400: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 <tr><td align="r
9410: 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f ight" valign="to
9420: 70 22 3e 3c 62 3e 55 73 65 72 3a 3c 2f 62 3e 3c p"><b>User:</b><
9430: 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 61 6c /td>. @ <td val
9440: 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 20 ign="top">. @
9450: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 <input type="te
9460: 78 74 22 20 6e 61 6d 65 3d 22 75 22 20 73 69 7a xt" name="u" siz
9470: 65 3d 22 32 30 22 20 76 61 6c 75 65 3d 22 25 68 e="20" value="%h
9480: 28 7a 4e 65 77 55 73 65 72 29 22 3e 0a 20 20 40 (zNewUser)">. @
9490: 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 20 40 </td></tr>.. @
94a0: 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 <tr><td align="
94b0: 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 right" valign="t
94c0: 6f 70 22 3e 3c 62 3e 43 6f 6d 6d 65 6e 74 3a 3c op"><b>Comment:<
94d0: 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 /b></td>. @ <td
94e0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 valign="top">.
94f0: 20 40 20 3c 74 65 78 74 61 72 65 61 20 6e 61 6d @ <textarea nam
9500: 65 3d 22 63 22 20 72 6f 77 73 3d 22 31 30 22 20 e="c" rows="10"
9510: 63 6f 6c 73 3d 22 38 30 22 3e 25 68 28 7a 4e 65 cols="80">%h(zNe
9520: 77 43 6f 6d 6d 65 6e 74 29 3c 2f 74 65 78 74 61 wComment)</texta
9530: 72 65 61 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f rea>. @ </td></
9540: 74 72 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 tr>.. @ <tr><td
9550: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 align="right" v
9560: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 43 align="top"><b>C
9570: 68 65 63 6b 2d 69 6e 20 54 69 6d 65 3a 3c 2f 62 heck-in Time:</b
9580: 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 ></td>. @ <td v
9590: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 align="top">. @
95a0: 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 <input type="
95b0: 74 65 78 74 22 20 6e 61 6d 65 3d 22 64 74 22 20 text" name="dt"
95c0: 73 69 7a 65 3d 22 32 30 22 20 76 61 6c 75 65 3d size="20" value=
95d0: 22 25 68 28 7a 4e 65 77 44 61 74 65 29 22 3e 0a "%h(zNewDate)">.
95e0: 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a @ </td></tr>..
95f0: 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 @ <tr><td alig
9600: 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e n="right" valign
9610: 3d 22 74 6f 70 22 3e 3c 62 3e 42 61 63 6b 67 72 ="top"><b>Backgr
9620: 6f 75 6e 64 20 43 6f 6c 6f 72 3a 3c 2f 62 3e 3c ound Color:</b><
9630: 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 61 6c /td>. @ <td val
9640: 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 3c ign="top">. @ <
9650: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 table border=0 c
9660: 65 6c 6c 70 61 64 64 69 6e 67 3d 30 20 63 65 6c ellpadding=0 cel
9670: 6c 73 70 61 63 69 6e 67 3d 31 3e 0a 20 20 40 20 lspacing=1>. @
9680: 3c 74 72 3e 3c 74 64 20 63 6f 6c 73 70 61 6e 3d <tr><td colspan=
9690: 22 36 22 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 "6" align="left"
96a0: 3e 0a 20 20 69 66 28 20 66 50 72 6f 70 61 67 61 >. if( fPropaga
96b0: 74 65 43 6f 6c 6f 72 20 29 7b 0a 20 20 20 20 40 teColor ){. @
96c0: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 <input type="ch
96d0: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 70 63 eckbox" name="pc
96e0: 6c 72 22 20 63 68 65 63 6b 65 64 3e 0a 20 20 7d lr" checked>. }
96f0: 65 6c 73 65 7b 0a 20 20 20 20 40 20 3c 69 6e 70 else{. @ <inp
9700: 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f ut type="checkbo
9710: 78 22 20 6e 61 6d 65 3d 22 70 63 6c 72 22 3e 0a x" name="pclr">.
9720: 20 20 7d 0a 20 20 40 20 50 72 6f 70 61 67 61 74 }. @ Propagat
9730: 65 20 63 6f 6c 6f 72 20 74 6f 20 64 65 73 63 65 e color to desce
9740: 6e 64 61 6e 74 73 3c 2f 69 6e 70 75 74 3e 3c 2f ndants</input></
9750: 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 72 td></tr>. @ <tr
9760: 3e 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e >. for(i=0; i<n
9770: 43 6f 6c 6f 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 Color; i++){.
9780: 20 69 66 28 20 61 43 6f 6c 6f 72 5b 69 5d 2e 7a if( aColor[i].z
9790: 43 6f 6c 6f 72 5b 30 5d 20 29 7b 0a 20 20 20 20 Color[0] ){.
97a0: 20 20 40 20 3c 74 64 20 62 67 63 6f 6c 6f 72 3d @ <td bgcolor=
97b0: 22 25 68 28 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 "%h(aColor[i].zC
97c0: 6f 6c 6f 72 29 22 3e 0a 20 20 20 20 7d 65 6c 73 olor)">. }els
97d0: 65 7b 0a 20 20 20 20 20 20 40 20 3c 74 64 3e 0a e{. @ <td>.
97e0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 }. if( st
97f0: 72 63 6d 70 28 7a 4e 65 77 43 6f 6c 6f 72 2c 20 rcmp(zNewColor,
9800: 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f 72 aColor[i].zColor
9810: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 40 20 )==0 ){. @
9820: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 72 61 64 <input type="rad
9830: 69 6f 22 20 6e 61 6d 65 3d 22 63 6c 72 22 20 76 io" name="clr" v
9840: 61 6c 75 65 3d 22 25 68 28 61 43 6f 6c 6f 72 5b alue="%h(aColor[
9850: 69 5d 2e 7a 43 6f 6c 6f 72 29 22 20 63 68 65 63 i].zColor)" chec
9860: 6b 65 64 3e 0a 20 20 20 20 7d 65 6c 73 65 7b 0a ked>. }else{.
9870: 20 20 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 @ <input t
9880: 79 70 65 3d 22 72 61 64 69 6f 22 20 6e 61 6d 65 ype="radio" name
9890: 3d 22 63 6c 72 22 20 76 61 6c 75 65 3d 22 25 68 ="clr" value="%h
98a0: 28 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f (aColor[i].zColo
98b0: 72 29 22 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 r)">. }. @
98c0: 20 25 68 28 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 %h(aColor[i].zC
98d0: 4e 61 6d 65 29 3c 2f 69 6e 70 75 74 3e 3c 2f 74 Name)</input></t
98e0: 64 3e 0a 20 20 20 20 69 66 28 20 28 69 25 36 29 d>. if( (i%6)
98f0: 3d 3d 35 20 26 26 20 69 2b 31 3c 6e 43 6f 6c 6f ==5 && i+1<nColo
9900: 72 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 2f 74 r ){. @ </t
9910: 72 3e 3c 74 72 3e 0a 20 20 20 20 7d 0a 20 20 7d r><tr>. }. }
9920: 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 40 20 3c . @ </tr>. @ <
9930: 2f 74 61 62 6c 65 3e 0a 20 20 40 20 3c 2f 74 64 /table>. @ </td
9940: 3e 3c 2f 74 72 3e 0a 0a 20 20 40 20 3c 74 72 3e ></tr>.. @ <tr>
9950: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 <td align="right
9960: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c " valign="top"><
9970: 62 3e 54 61 67 73 3a 3c 2f 62 3e 3c 2f 74 64 3e b>Tags:</b></td>
9980: 0a 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d . @ <td valign=
9990: 22 74 6f 70 22 3e 0a 20 20 40 20 3c 69 6e 70 75 "top">. @ <inpu
99a0: 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 t type="checkbox
99b0: 22 20 6e 61 6d 65 3d 22 6e 65 77 74 61 67 22 25 " name="newtag"%
99c0: 73 28 7a 4e 65 77 54 61 67 46 6c 61 67 29 3e 0a s(zNewTagFlag)>.
99d0: 20 20 40 20 41 64 64 20 74 68 65 20 66 6f 6c 6c @ Add the foll
99e0: 6f 77 69 6e 67 20 6e 65 77 20 74 61 67 20 6e 61 owing new tag na
99f0: 6d 65 20 74 6f 20 74 68 69 73 20 63 68 65 63 6b me to this check
9a00: 2d 69 6e 3a 0a 20 20 40 20 3c 69 6e 70 75 74 20 -in:. @ <input
9a10: 74 79 70 65 3d 22 74 65 78 74 22 20 77 69 64 74 type="text" widt
9a20: 68 3d 22 31 35 22 20 6e 61 6d 65 3d 22 74 61 67 h="15" name="tag
9a30: 6e 61 6d 65 22 20 76 61 6c 75 65 3d 22 25 68 28 name" value="%h(
9a40: 7a 4e 65 77 54 61 67 29 22 3e 0a 20 20 64 62 5f zNewTag)">. db_
9a50: 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 prepare(&q,.
9a60: 20 22 53 45 4c 45 43 54 20 74 61 67 2e 74 61 67 "SELECT tag.tag
9a70: 69 64 2c 20 74 61 67 6e 61 6d 65 20 46 52 4f 4d id, tagname FROM
9a80: 20 74 61 67 78 72 65 66 2c 20 74 61 67 22 0a 20 tagxref, tag".
9a90: 20 20 20 20 22 20 57 48 45 52 45 20 74 61 67 78 " WHERE tagx
9aa0: 72 65 66 2e 72 69 64 3d 25 64 20 41 4e 44 20 74 ref.rid=%d AND t
9ab0: 61 67 74 79 70 65 3e 30 20 41 4e 44 20 74 61 67 agtype>0 AND tag
9ac0: 78 72 65 66 2e 74 61 67 69 64 3d 74 61 67 2e 74 xref.tagid=tag.t
9ad0: 61 67 69 64 22 0a 20 20 20 20 20 22 20 4f 52 44 agid". " ORD
9ae0: 45 52 20 42 59 20 43 41 53 45 20 57 48 45 4e 20 ER BY CASE WHEN
9af0: 74 61 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 79 tagname GLOB 'sy
9b00: 6d 2d 2a 27 20 54 48 45 4e 20 73 75 62 73 74 72 m-*' THEN substr
9b10: 28 74 61 67 6e 61 6d 65 2c 35 29 22 0a 20 20 20 (tagname,5)".
9b20: 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 "
9b30: 20 20 45 4c 53 45 20 74 61 67 6e 61 6d 65 20 45 ELSE tagname E
9b40: 4e 44 22 2c 0a 20 20 20 20 20 72 69 64 0a 20 20 ND",. rid.
9b50: 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 );. while( db_s
9b60: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
9b70: 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74 20 74 ROW ){. int t
9b80: 61 67 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e agid = db_column
9b90: 5f 69 6e 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 _int(&q, 0);.
9ba0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 const char *zTa
9bb0: 67 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d gName = db_colum
9bc0: 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 n_text(&q, 1);.
9bd0: 20 20 20 63 68 61 72 20 7a 4c 61 62 65 6c 5b 33 char zLabel[3
9be0: 30 5d 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 0];. sprintf(
9bf0: 7a 4c 61 62 65 6c 2c 20 22 63 25 64 22 2c 20 74 zLabel, "c%d", t
9c00: 61 67 69 64 29 3b 0a 20 20 20 20 69 66 28 20 50 agid);. if( P
9c10: 28 7a 4c 61 62 65 6c 29 20 29 7b 0a 20 20 20 20 (zLabel) ){.
9c20: 20 20 40 20 3c 62 72 3e 3c 69 6e 70 75 74 20 74 @ <br><input t
9c30: 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e ype="checkbox" n
9c40: 61 6d 65 3d 22 63 25 64 28 74 61 67 69 64 29 22 ame="c%d(tagid)"
9c50: 20 63 68 65 63 6b 65 64 3e 0a 20 20 20 20 7d 65 checked>. }e
9c60: 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 62 72 lse{. @ <br
9c70: 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 ><input type="ch
9c80: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 63 25 eckbox" name="c%
9c90: 64 28 74 61 67 69 64 29 22 3e 0a 20 20 20 20 7d d(tagid)">. }
9ca0: 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 . if( strncmp
9cb0: 28 7a 54 61 67 4e 61 6d 65 2c 20 22 73 79 6d 2d (zTagName, "sym-
9cc0: 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 ", 4)==0 ){.
9cd0: 20 20 40 20 43 61 6e 63 65 6c 20 74 61 67 20 3c @ Cancel tag <
9ce0: 62 3e 25 68 28 26 7a 54 61 67 4e 61 6d 65 5b 34 b>%h(&zTagName[4
9cf0: 5d 29 3c 2f 62 3e 0a 20 20 20 20 7d 65 6c 73 65 ])</b>. }else
9d00: 7b 0a 20 20 20 20 20 20 40 20 43 61 6e 63 65 6c {. @ Cancel
9d10: 20 73 70 65 63 69 61 6c 20 74 61 67 20 3c 62 3e special tag <b>
9d20: 25 68 28 7a 54 61 67 4e 61 6d 65 29 3c 2f 62 3e %h(zTagName)</b>
9d30: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f . }. }. db_
9d40: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
9d50: 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 20 @ </td></tr>..
9d60: 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 53 if( db_exists("S
9d70: 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 61 67 ELECT 1 FROM tag
9d80: 78 72 65 66 20 57 48 45 52 45 20 72 69 64 3d 25 xref WHERE rid=%
9d90: 64 20 41 4e 44 20 74 61 67 69 64 3d 25 64 20 41 d AND tagid=%d A
9da0: 4e 44 20 73 72 63 69 64 3e 30 22 2c 0a 20 20 20 ND srcid>0",.
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 69 64 rid
9dc0: 2c 20 54 41 47 5f 42 52 41 4e 43 48 29 3d 3d 30 , TAG_BRANCH)==0
9dd0: 20 29 7b 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 ){. @ <tr><t
9de0: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 d align="right"
9df0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e valign="top"><b>
9e00: 42 72 61 6e 63 68 69 6e 67 3a 3c 2f 62 3e 3c 2f Branching:</b></
9e10: 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 20 76 61 td>. @ <td va
9e20: 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 20 20 lign="top">.
9e30: 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 @ <input type="c
9e40: 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 6e heckbox" name="n
9e50: 65 77 62 72 22 25 73 28 7a 4e 65 77 42 72 46 6c ewbr"%s(zNewBrFl
9e60: 61 67 29 3e 0a 20 20 20 20 40 20 4d 61 6b 65 20 ag)>. @ Make
9e70: 74 68 69 73 20 63 68 65 63 6b 2d 69 6e 20 74 68 this check-in th
9e80: 65 20 73 74 61 72 74 20 6f 66 20 61 20 6e 65 77 e start of a new
9e90: 20 62 72 61 6e 63 68 20 6e 61 6d 65 64 3a 0a 20 branch named:.
9ea0: 20 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 @ <input type
9eb0: 3d 22 74 65 78 74 22 20 77 69 64 74 68 3d 22 31 ="text" width="1
9ec0: 35 22 20 6e 61 6d 65 3d 22 62 72 6e 61 6d 65 22 5" name="brname"
9ed0: 20 76 61 6c 75 65 3d 22 25 68 28 7a 4e 65 77 42 value="%h(zNewB
9ee0: 72 61 6e 63 68 29 22 3e 0a 20 20 20 20 40 20 3c ranch)">. @ <
9ef0: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 7d 0a 0a 20 /td></tr>. }..
9f00: 20 69 66 28 20 69 73 5f 61 5f 6c 65 61 66 28 72 if( is_a_leaf(r
9f10: 69 64 29 0a 20 20 20 26 26 20 21 64 62 5f 65 78 id). && !db_ex
9f20: 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 ists("SELECT 1 F
9f30: 52 4f 4d 20 74 61 67 78 72 65 66 20 22 0a 20 20 ROM tagxref ".
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
9f50: 20 57 48 45 52 45 20 74 61 67 69 64 3d 25 64 20 WHERE tagid=%d
9f60: 41 4e 44 20 72 69 64 3d 25 64 20 41 4e 44 20 74 AND rid=%d AND t
9f70: 61 67 74 79 70 65 3e 30 22 2c 0a 20 20 20 20 20 agtype>0",.
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 54 41 47 5f TAG_
9f90: 43 4c 4f 53 45 44 2c 20 72 69 64 29 0a 20 20 29 CLOSED, rid). )
9fa0: 7b 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 {. @ <tr><td
9fb0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 align="right" va
9fc0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 4c 65 lign="top"><b>Le
9fd0: 61 66 20 43 6c 6f 73 75 72 65 3a 3c 2f 62 3e 3c af Closure:</b><
9fe0: 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 20 76 /td>. @ <td v
9ff0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 20 align="top">.
a000: 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 @ <input type="
a010: 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 checkbox" name="
a020: 63 6c 6f 73 65 22 25 73 28 7a 43 6c 6f 73 65 46 close"%s(zCloseF
a030: 6c 61 67 29 3e 0a 20 20 20 20 40 20 4d 61 72 6b lag)>. @ Mark
a040: 20 74 68 69 73 20 6c 65 61 66 20 61 73 20 22 63 this leaf as "c
a050: 6c 6f 73 65 64 22 20 73 6f 20 74 68 61 74 20 69 losed" so that i
a060: 74 20 6e 6f 20 6c 6f 6e 67 65 72 20 61 70 70 65 t no longer appe
a070: 61 72 73 20 6f 6e 20 74 68 65 0a 20 20 20 20 40 ars on the. @
a080: 20 22 6c 65 61 76 65 73 22 20 70 61 67 65 20 61 "leaves" page a
a090: 6e 64 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 nd is no longer
a0a0: 6c 61 62 65 6c 65 64 20 61 73 20 61 20 22 3c 62 labeled as a "<b
a0b0: 3e 4c 65 61 66 3c 2f 62 3e 22 2e 0a 20 20 20 20 >Leaf</b>"..
a0c0: 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 7d @ </td></tr>. }
a0d0: 0a 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 63 ... @ <tr><td c
a0e0: 6f 6c 73 70 61 6e 3d 22 32 22 3e 0a 20 20 40 20 olspan="2">. @
a0f0: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75 62 <input type="sub
a100: 6d 69 74 22 20 6e 61 6d 65 3d 22 70 72 65 76 69 mit" name="previ
a110: 65 77 22 20 76 61 6c 75 65 3d 22 50 72 65 76 69 ew" value="Previ
a120: 65 77 22 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 ew">. @ <input
a130: 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 type="submit" na
a140: 6d 65 3d 22 61 70 70 6c 79 22 20 76 61 6c 75 65 me="apply" value
a150: 3d 22 41 70 70 6c 79 20 43 68 61 6e 67 65 73 22 ="Apply Changes"
a160: 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 >. @ <input typ
a170: 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 6d 65 3d e="submit" name=
a180: 22 63 61 6e 63 65 6c 22 20 76 61 6c 75 65 3d 22 "cancel" value="
a190: 43 61 6e 63 65 6c 22 3e 0a 20 20 40 20 3c 2f 74 Cancel">. @ </t
a1a0: 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c 2f 74 61 d></tr>. @ </ta
a1b0: 62 6c 65 3e 0a 20 20 40 20 3c 2f 66 6f 72 6d 3e ble>. @ </form>
a1c0: 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 . style_footer(
a1d0: 29 3b 0a 7d 0a );.}.