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 0a de <assert.h>...
0460: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 63 6f 6d 6d /*.** Print comm
0470: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 on information a
0480: 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61 bout a particula
0490: 72 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 r record..**.**
04a0: 20 20 20 20 2a 20 20 54 68 65 20 55 55 49 44 0a * The UUID.
04b0: 2a 2a 20 20 20 20 20 2a 20 20 54 68 65 20 72 65 ** * The re
04c0: 63 6f 72 64 20 49 44 0a 2a 2a 20 20 20 20 20 2a cord ID.** *
04d0: 20 20 6d 74 69 6d 65 20 61 6e 64 20 63 74 69 6d mtime and ctim
04e0: 65 0a 2a 2a 20 20 20 20 20 2a 20 20 77 68 6f 20 e.** * who
04f0: 73 69 67 6e 65 64 20 69 74 0a 2a 2f 0a 76 6f 69 signed it.*/.voi
0500: 64 20 73 68 6f 77 5f 63 6f 6d 6d 6f 6e 5f 69 6e d show_common_in
0510: 66 6f 28 69 6e 74 20 72 69 64 2c 20 63 6f 6e 73 fo(int rid, cons
0520: 74 20 63 68 61 72 20 2a 7a 55 75 69 64 4e 61 6d t char *zUuidNam
0530: 65 2c 20 69 6e 74 20 73 68 6f 77 43 6f 6d 6d 65 e, int showComme
0540: 6e 74 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 nt){. Stmt q;.
0550: 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 20 char *zComment
0560: 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 54 61 = 0;. char *zTa
0570: 67 73 3b 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 gs;. char *zDat
0580: 65 3b 0a 20 20 63 68 61 72 20 2a 7a 55 75 69 64 e;. char *zUuid
0590: 3b 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 ;. zUuid = db_t
05a0: 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 ext(0, "SELECT u
05b0: 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 uid FROM blob WH
05c0: 45 52 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 ERE rid=%d", rid
05d0: 29 3b 0a 20 20 69 66 28 20 7a 55 75 69 64 20 29 );. if( zUuid )
05e0: 7b 0a 20 20 20 20 7a 44 61 74 65 20 3d 20 64 62 {. zDate = db
05f0: 5f 74 65 78 74 28 22 22 2c 20 0a 20 20 20 20 20 _text("", .
0600: 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d "SELECT datetim
0610: 65 28 6d 74 69 6d 65 29 20 7c 7c 20 27 20 55 54 e(mtime) || ' UT
0620: 43 27 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 48 C' FROM event WH
0630: 45 52 45 20 6f 62 6a 69 64 3d 25 64 22 2c 0a 20 ERE objid=%d",.
0640: 20 20 20 20 20 72 69 64 0a 20 20 20 20 29 3b 0a rid. );.
0650: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 31 32 33 /* 0123
0660: 34 35 36 37 38 39 30 31 32 33 20 2a 2f 0a 20 20 4567890123 */.
0670: 20 20 70 72 69 6e 74 66 28 22 25 2d 31 33 73 20 printf("%-13s
0680: 25 73 20 25 73 5c 6e 22 2c 20 7a 55 75 69 64 4e %s %s\n", zUuidN
0690: 61 6d 65 2c 20 7a 55 75 69 64 2c 20 7a 44 61 74 ame, zUuid, zDat
06a0: 65 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 55 75 e);. free(zUu
06b0: 69 64 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 44 id);. free(zD
06c0: 61 74 65 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 70 ate);. }. db_p
06d0: 72 65 70 61 72 65 28 26 71 2c 20 22 53 45 4c 45 repare(&q, "SELE
06e0: 43 54 20 75 75 69 64 2c 20 70 69 64 20 46 52 4f CT uuid, pid FRO
06f0: 4d 20 70 6c 69 6e 6b 20 4a 4f 49 4e 20 62 6c 6f M plink JOIN blo
0700: 62 20 4f 4e 20 70 69 64 3d 72 69 64 20 22 0a 20 b ON pid=rid ".
0710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0720: 22 20 57 48 45 52 45 20 63 69 64 3d 25 64 22 2c " WHERE cid=%d",
0730: 20 72 69 64 29 3b 0a 20 20 77 68 69 6c 65 28 20 rid);. while(
0740: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c db_step(&q)==SQL
0750: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 ITE_ROW ){. c
0760: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 onst char *zUuid
0770: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
0780: 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 7a 44 t(&q, 0);. zD
0790: 61 74 65 20 3d 20 64 62 5f 74 65 78 74 28 22 22 ate = db_text(""
07a0: 2c 20 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 , . "SELECT
07b0: 20 64 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 datetime(mtime)
07c0: 20 7c 7c 20 27 20 55 54 43 27 20 46 52 4f 4d 20 || ' UTC' FROM
07d0: 65 76 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 event WHERE obji
07e0: 64 3d 25 64 22 2c 0a 20 20 20 20 20 20 64 62 5f d=%d",. db_
07f0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 31 column_int(&q, 1
0800: 29 0a 20 20 20 20 29 3b 0a 20 20 20 20 70 72 69 ). );. pri
0810: 6e 74 66 28 22 70 61 72 65 6e 74 3a 20 20 20 20 ntf("parent:
0820: 20 20 20 25 73 20 25 73 5c 6e 22 2c 20 7a 55 75 %s %s\n", zUu
0830: 69 64 2c 20 7a 44 61 74 65 29 3b 0a 20 20 20 20 id, zDate);.
0840: 66 72 65 65 28 7a 44 61 74 65 29 3b 0a 20 20 7d free(zDate);. }
0850: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 . db_finalize(&
0860: 71 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 q);. db_prepare
0870: 28 26 71 2c 20 22 53 45 4c 45 43 54 20 75 75 69 (&q, "SELECT uui
0880: 64 2c 20 63 69 64 20 46 52 4f 4d 20 70 6c 69 6e d, cid FROM plin
0890: 6b 20 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e 20 63 k JOIN blob ON c
08a0: 69 64 3d 72 69 64 20 22 0a 20 20 20 20 20 20 20 id=rid ".
08b0: 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 " WHER
08c0: 45 20 70 69 64 3d 25 64 22 2c 20 72 69 64 29 3b E pid=%d", rid);
08d0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 . while( db_ste
08e0: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
08f0: 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 W ){. const c
0900: 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f har *zUuid = db_
0910: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
0920: 30 29 3b 0a 20 20 20 20 7a 44 61 74 65 20 3d 20 0);. zDate =
0930: 64 62 5f 74 65 78 74 28 22 22 2c 20 0a 20 20 20 db_text("", .
0940: 20 20 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 "SELECT datet
0950: 69 6d 65 28 6d 74 69 6d 65 29 20 7c 7c 20 27 20 ime(mtime) || '
0960: 55 54 43 27 20 46 52 4f 4d 20 65 76 65 6e 74 20 UTC' FROM event
0970: 57 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 22 2c WHERE objid=%d",
0980: 0a 20 20 20 20 20 20 64 62 5f 63 6f 6c 75 6d 6e . db_column
0990: 5f 69 6e 74 28 26 71 2c 20 31 29 0a 20 20 20 20 _int(&q, 1).
09a0: 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 63 );. printf("c
09b0: 68 69 6c 64 3a 20 20 20 20 20 20 20 20 25 73 20 hild: %s
09c0: 25 73 5c 6e 22 2c 20 7a 55 75 69 64 2c 20 7a 44 %s\n", zUuid, zD
09d0: 61 74 65 29 3b 0a 20 20 20 20 66 72 65 65 28 7a ate);. free(z
09e0: 44 61 74 65 29 3b 0a 20 20 7d 0a 20 20 64 62 5f Date);. }. db_
09f0: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
0a00: 7a 54 61 67 73 20 3d 20 64 62 5f 74 65 78 74 28 zTags = db_text(
0a10: 30 2c 20 22 53 45 4c 45 43 54 20 67 72 6f 75 70 0, "SELECT group
0a20: 5f 63 6f 6e 63 61 74 28 73 75 62 73 74 72 28 74 _concat(substr(t
0a30: 61 67 6e 61 6d 65 2c 20 35 29 2c 20 27 2c 20 27 agname, 5), ', '
0a40: 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )".
0a50: 20 20 20 20 20 20 20 20 22 20 20 46 52 4f 4d 20 " FROM
0a60: 74 61 67 78 72 65 66 2c 20 74 61 67 22 0a 20 20 tagxref, tag".
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a80: 20 20 20 22 20 57 48 45 52 45 20 74 61 67 78 72 " WHERE tagxr
0a90: 65 66 2e 72 69 64 3d 25 64 20 41 4e 44 20 74 61 ef.rid=%d AND ta
0aa0: 67 78 72 65 66 2e 74 61 67 74 79 70 65 3e 30 22 gxref.tagtype>0"
0ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0ac0: 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 74 61 " AND ta
0ad0: 67 2e 74 61 67 69 64 3d 74 61 67 78 72 65 66 2e g.tagid=tagxref.
0ae0: 74 61 67 69 64 22 0a 20 20 20 20 20 20 20 20 20 tagid".
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 20 "
0b00: 41 4e 44 20 74 61 67 2e 74 61 67 6e 61 6d 65 20 AND tag.tagname
0b10: 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 22 2c 0a 20 GLOB 'sym-*'",.
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0b30: 20 20 20 20 72 69 64 29 3b 0a 20 20 69 66 28 20 rid);. if(
0b40: 7a 54 61 67 73 20 26 26 20 7a 54 61 67 73 5b 30 zTags && zTags[0
0b50: 5d 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 ] ){. printf(
0b60: 22 74 61 67 73 3a 20 20 20 20 20 20 20 20 20 25 "tags: %
0b70: 73 5c 6e 22 2c 20 7a 54 61 67 73 29 3b 0a 20 20 s\n", zTags);.
0b80: 7d 0a 20 20 66 72 65 65 28 7a 54 61 67 73 29 3b }. free(zTags);
0b90: 0a 20 20 69 66 28 20 7a 43 6f 6d 6d 65 6e 74 20 . if( zComment
0ba0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 63 ){. printf("c
0bb0: 6f 6d 6d 65 6e 74 3a 5c 6e 25 73 5c 6e 22 2c 20 omment:\n%s\n",
0bc0: 7a 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 20 20 66 zComment);. f
0bd0: 72 65 65 28 7a 43 6f 6d 6d 65 6e 74 29 3b 0a 20 ree(zComment);.
0be0: 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d }.}.../*.** COM
0bf0: 4d 41 4e 44 3a 20 69 6e 66 6f 0a 2a 2a 0a 2a 2a MAND: info.**.**
0c00: 20 55 73 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 Usage: %fossil
0c10: 69 6e 66 6f 20 3f 41 52 54 49 46 41 43 54 2d 49 info ?ARTIFACT-I
0c20: 44 7c 46 49 4c 45 4e 41 4d 45 3f 0a 2a 2a 0a 2a D|FILENAME?.**.*
0c30: 2a 20 57 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 * With no argume
0c40: 6e 74 73 2c 20 70 72 6f 76 69 64 65 20 69 6e 66 nts, provide inf
0c50: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 ormation about t
0c60: 68 65 20 63 75 72 72 65 6e 74 20 74 72 65 65 2e he current tree.
0c70: 0a 2a 2a 20 49 66 20 61 6e 20 61 72 67 75 6d 65 .** If an argume
0c80: 6e 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c nt is specified,
0c90: 20 70 72 6f 76 69 64 65 20 69 6e 66 6f 72 6d 61 provide informa
0ca0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 6f tion about the o
0cb0: 62 6a 65 63 74 0a 2a 2a 20 69 6e 20 74 68 65 20 bject.** in the
0cc0: 72 65 73 70 6f 73 69 74 6f 72 79 20 6f 66 20 74 respository of t
0cd0: 68 65 20 63 75 72 72 65 6e 74 20 74 72 65 65 20 he current tree
0ce0: 74 68 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e that the argumen
0cf0: 74 20 72 65 66 65 72 73 0a 2a 2a 20 74 6f 2e 20 t refers.** to.
0d00: 20 4f 72 20 69 66 20 74 68 65 20 61 72 67 75 6d Or if the argum
0d10: 65 6e 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 ent is the name
0d20: 6f 66 20 61 20 72 65 70 6f 73 69 74 6f 72 79 2c of a repository,
0d30: 20 73 68 6f 77 0a 2a 2a 20 69 6e 66 6f 72 6d 61 show.** informa
0d40: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 61 74 20 tion about that
0d50: 72 65 70 6f 73 69 74 6f 72 79 2e 0a 2a 2f 0a 76 repository..*/.v
0d60: 6f 69 64 20 69 6e 66 6f 5f 63 6d 64 28 76 6f 69 oid info_cmd(voi
0d70: 64 29 7b 0a 20 20 69 36 34 20 66 73 69 7a 65 3b d){. i64 fsize;
0d80: 0a 20 20 69 66 28 20 67 2e 61 72 67 63 21 3d 32 . if( g.argc!=2
0d90: 20 26 26 20 67 2e 61 72 67 63 21 3d 33 20 29 7b && g.argc!=3 ){
0da0: 0a 20 20 20 20 75 73 61 67 65 28 22 3f 46 49 4c . usage("?FIL
0db0: 45 4e 41 4d 45 7c 41 52 54 49 46 41 43 54 2d 49 ENAME|ARTIFACT-I
0dc0: 44 3f 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 D?");. }. if(
0dd0: 67 2e 61 72 67 63 3d 3d 33 20 26 26 20 28 66 73 g.argc==3 && (fs
0de0: 69 7a 65 20 3d 20 66 69 6c 65 5f 73 69 7a 65 28 ize = file_size(
0df0: 67 2e 61 72 67 76 5b 32 5d 29 29 3e 30 20 26 26 g.argv[2]))>0 &&
0e00: 20 28 66 73 69 7a 65 26 30 78 31 66 66 29 3d 3d (fsize&0x1ff)==
0e10: 30 20 29 7b 0a 20 20 20 20 64 62 5f 6f 70 65 6e 0 ){. db_open
0e20: 5f 63 6f 6e 66 69 67 28 30 29 3b 0a 20 20 20 20 _config(0);.
0e30: 64 62 5f 72 65 63 6f 72 64 5f 72 65 70 6f 73 69 db_record_reposi
0e40: 74 6f 72 79 5f 66 69 6c 65 6e 61 6d 65 28 67 2e tory_filename(g.
0e50: 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 64 62 argv[2]);. db
0e60: 5f 6f 70 65 6e 5f 72 65 70 6f 73 69 74 6f 72 79 _open_repository
0e70: 28 67 2e 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 (g.argv[2]);.
0e80: 20 70 72 69 6e 74 66 28 22 70 72 6f 6a 65 63 74 printf("project
0e90: 2d 63 6f 64 65 3a 20 25 73 5c 6e 22 2c 20 64 62 -code: %s\n", db
0ea0: 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 63 6f _get("project-co
0eb0: 64 65 22 2c 20 22 3c 6e 6f 6e 65 3e 22 29 29 3b de", "<none>"));
0ec0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 70 72 6f . printf("pro
0ed0: 6a 65 63 74 2d 6e 61 6d 65 3a 20 25 73 5c 6e 22 ject-name: %s\n"
0ee0: 2c 20 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 , db_get("projec
0ef0: 74 2d 6e 61 6d 65 22 2c 20 22 3c 75 6e 6e 61 6d t-name", "<unnam
0f00: 65 64 3e 22 29 29 3b 0a 20 20 20 20 70 72 69 6e ed>"));. prin
0f10: 74 66 28 22 73 65 72 76 65 72 2d 63 6f 64 65 3a tf("server-code:
0f20: 20 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 28 %s\n", db_get(
0f30: 22 73 65 72 76 65 72 2d 63 6f 64 65 22 2c 20 22 "server-code", "
0f40: 3c 6e 6f 6e 65 3e 22 29 29 3b 0a 20 20 20 20 72 <none>"));. r
0f50: 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 64 62 5f eturn;. }. db_
0f60: 6d 75 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 must_be_within_t
0f70: 72 65 65 28 29 3b 0a 20 20 69 66 28 20 67 2e 61 ree();. if( g.a
0f80: 72 67 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e rgc==2 ){. in
0f90: 74 20 76 69 64 3b 0a 20 20 20 20 20 20 20 20 20 t vid;.
0fa0: 2f 2a 20 30 31 32 33 34 35 36 37 38 39 30 31 32 /* 0123456789012
0fb0: 33 34 20 2a 2f 0a 20 20 20 20 64 62 5f 72 65 63 34 */. db_rec
0fc0: 6f 72 64 5f 72 65 70 6f 73 69 74 6f 72 79 5f 66 ord_repository_f
0fd0: 69 6c 65 6e 61 6d 65 28 30 29 3b 0a 20 20 20 20 ilename(0);.
0fe0: 70 72 69 6e 74 66 28 22 72 65 70 6f 73 69 74 6f printf("reposito
0ff0: 72 79 3a 20 20 20 25 73 5c 6e 22 2c 20 64 62 5f ry: %s\n", db_
1000: 6c 67 65 74 28 22 72 65 70 6f 73 69 74 6f 72 79 lget("repository
1010: 22 2c 20 22 22 29 29 3b 0a 20 20 20 20 70 72 69 ", ""));. pri
1020: 6e 74 66 28 22 6c 6f 63 61 6c 2d 72 6f 6f 74 3a ntf("local-root:
1030: 20 20 20 25 73 5c 6e 22 2c 20 67 2e 7a 4c 6f 63 %s\n", g.zLoc
1040: 61 6c 52 6f 6f 74 29 3b 0a 20 20 20 20 70 72 69 alRoot);. pri
1050: 6e 74 66 28 22 70 72 6f 6a 65 63 74 2d 63 6f 64 ntf("project-cod
1060: 65 3a 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 e: %s\n", db_get
1070: 28 22 70 72 6f 6a 65 63 74 2d 63 6f 64 65 22 2c ("project-code",
1080: 20 22 22 29 29 3b 0a 20 20 20 20 70 72 69 6e 74 ""));. print
1090: 66 28 22 73 65 72 76 65 72 2d 63 6f 64 65 3a 20 f("server-code:
10a0: 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 28 22 %s\n", db_get("
10b0: 73 65 72 76 65 72 2d 63 6f 64 65 22 2c 20 22 22 server-code", ""
10c0: 29 29 3b 0a 20 20 20 20 76 69 64 20 3d 20 64 62 ));. vid = db
10d0: 5f 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63 6b _lget_int("check
10e0: 6f 75 74 22 2c 20 30 29 3b 0a 20 20 20 20 69 66 out", 0);. if
10f0: 28 20 76 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 ( vid==0 ){.
1100: 20 20 70 72 69 6e 74 66 28 22 63 68 65 63 6b 6f printf("checko
1110: 75 74 3a 20 20 20 20 20 6e 69 6c 5c 6e 22 29 3b ut: nil\n");
1120: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
1130: 20 20 73 68 6f 77 5f 63 6f 6d 6d 6f 6e 5f 69 6e show_common_in
1140: 66 6f 28 76 69 64 2c 20 22 63 68 65 63 6b 6f 75 fo(vid, "checkou
1150: 74 3a 22 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 t:", 1);. }.
1160: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 }else{. int
1170: 72 69 64 3b 0a 20 20 20 20 72 69 64 20 3d 20 6e rid;. rid = n
1180: 61 6d 65 5f 74 6f 5f 72 69 64 28 67 2e 61 72 67 ame_to_rid(g.arg
1190: 76 5b 32 5d 29 3b 0a 20 20 20 20 69 66 28 20 72 v[2]);. if( r
11a0: 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 66 id==0 ){. f
11b0: 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 6e 6f 20 ossil_panic("no
11c0: 73 75 63 68 20 6f 62 6a 65 63 74 3a 20 25 73 5c such object: %s\
11d0: 6e 22 2c 20 67 2e 61 72 67 76 5b 32 5d 29 3b 0a n", g.argv[2]);.
11e0: 20 20 20 20 7d 0a 20 20 20 20 73 68 6f 77 5f 63 }. show_c
11f0: 6f 6d 6d 6f 6e 5f 69 6e 66 6f 28 72 69 64 2c 20 ommon_info(rid,
1200: 22 75 75 69 64 3a 22 2c 20 31 29 3b 0a 20 20 7d "uuid:", 1);. }
1210: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 68 6f 77 20 69 .}../*.** Show i
1220: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 nformation about
1230: 20 61 6c 6c 20 74 61 67 73 20 6f 6e 20 61 20 67 all tags on a g
1240: 69 76 65 6e 20 6e 6f 64 65 2e 0a 2a 2f 0a 73 74 iven node..*/.st
1250: 61 74 69 63 20 76 6f 69 64 20 73 68 6f 77 54 61 atic void showTa
1260: 67 73 28 69 6e 74 20 72 69 64 2c 20 63 6f 6e 73 gs(int rid, cons
1270: 74 20 63 68 61 72 20 2a 7a 4e 6f 74 47 6c 6f 62 t char *zNotGlob
1280: 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 69 ){. Stmt q;. i
1290: 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 20 20 64 62 nt cnt = 0;. db
12a0: 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 _prepare(&q,.
12b0: 20 22 53 45 4c 45 43 54 20 74 61 67 2e 74 61 67 "SELECT tag.tag
12c0: 69 64 2c 20 74 61 67 6e 61 6d 65 2c 20 22 0a 20 id, tagname, ".
12d0: 20 20 20 22 20 20 20 20 20 20 20 28 53 45 4c 45 " (SELE
12e0: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f CT uuid FROM blo
12f0: 62 20 57 48 45 52 45 20 72 69 64 3d 74 61 67 78 b WHERE rid=tagx
1300: 72 65 66 2e 73 72 63 69 64 20 41 4e 44 20 72 69 ref.srcid AND ri
1310: 64 21 3d 25 64 29 2c 22 0a 20 20 20 20 22 20 20 d!=%d),". "
1320: 20 20 20 20 20 76 61 6c 75 65 2c 20 64 61 74 65 value, date
1330: 74 69 6d 65 28 74 61 67 78 72 65 66 2e 6d 74 69 time(tagxref.mti
1340: 6d 65 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 2c me,'localtime'),
1350: 20 74 61 67 74 79 70 65 2c 22 0a 20 20 20 20 22 tagtype,". "
1360: 20 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 75 (SELECT u
1370: 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 uid FROM blob WH
1380: 45 52 45 20 72 69 64 3d 74 61 67 78 72 65 66 2e ERE rid=tagxref.
1390: 6f 72 69 67 69 64 20 41 4e 44 20 72 69 64 21 3d origid AND rid!=
13a0: 25 64 29 22 0a 20 20 20 20 22 20 20 46 52 4f 4d %d)". " FROM
13b0: 20 74 61 67 78 72 65 66 20 4a 4f 49 4e 20 74 61 tagxref JOIN ta
13c0: 67 20 4f 4e 20 74 61 67 78 72 65 66 2e 74 61 67 g ON tagxref.tag
13d0: 69 64 3d 74 61 67 2e 74 61 67 69 64 22 0a 20 20 id=tag.tagid".
13e0: 20 20 22 20 57 48 45 52 45 20 74 61 67 78 72 65 " WHERE tagxre
13f0: 66 2e 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 f.rid=%d AND tag
1400: 6e 61 6d 65 20 4e 4f 54 20 47 4c 4f 42 20 27 25 name NOT GLOB '%
1410: 73 27 22 0a 20 20 20 20 22 20 4f 52 44 45 52 20 s'". " ORDER
1420: 42 59 20 74 61 67 6e 61 6d 65 22 2c 20 72 69 64 BY tagname", rid
1430: 2c 20 72 69 64 2c 20 72 69 64 2c 20 7a 4e 6f 74 , rid, rid, zNot
1440: 47 6c 6f 62 0a 20 20 29 3b 0a 20 20 77 68 69 6c Glob. );. whil
1450: 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d e( db_step(&q)==
1460: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 SQLITE_ROW ){.
1470: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 const char *zT
1480: 61 67 6e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 agname = db_colu
1490: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a mn_text(&q, 1);.
14a0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
14b0: 7a 53 72 63 55 75 69 64 20 3d 20 64 62 5f 63 6f zSrcUuid = db_co
14c0: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 29 lumn_text(&q, 2)
14d0: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
14e0: 20 2a 7a 56 61 6c 75 65 20 3d 20 64 62 5f 63 6f *zValue = db_co
14f0: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 lumn_text(&q, 3)
1500: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
1510: 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c *zDate = db_col
1520: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 34 29 3b umn_text(&q, 4);
1530: 0a 20 20 20 20 69 6e 74 20 74 61 67 74 79 70 65 . int tagtype
1540: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 = db_column_int
1550: 28 26 71 2c 20 35 29 3b 0a 20 20 20 20 63 6f 6e (&q, 5);. con
1560: 73 74 20 63 68 61 72 20 2a 7a 4f 72 69 67 55 75 st char *zOrigUu
1570: 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 id = db_column_t
1580: 65 78 74 28 26 71 2c 20 36 29 3b 0a 20 20 20 20 ext(&q, 6);.
1590: 63 6e 74 2b 2b 3b 0a 20 20 20 20 69 66 28 20 63 cnt++;. if( c
15a0: 6e 74 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 40 nt==1 ){. @
15b0: 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 63 <div class="sec
15c0: 74 69 6f 6e 22 3e 54 61 67 73 20 41 6e 64 20 50 tion">Tags And P
15d0: 72 6f 70 65 72 74 69 65 73 3c 2f 64 69 76 3e 0a roperties</div>.
15e0: 20 20 20 20 20 20 40 20 3c 75 6c 3e 0a 20 20 20 @ <ul>.
15f0: 20 7d 0a 20 20 20 20 40 20 3c 6c 69 3e 0a 20 20 }. @ <li>.
1600: 20 20 69 66 28 20 74 61 67 74 79 70 65 3d 3d 30 if( tagtype==0
1610: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 62 3e 3c ){. @ <b><
1620: 73 3e 25 68 28 7a 54 61 67 6e 61 6d 65 29 3c 2f s>%h(zTagname)</
1630: 73 3e 3c 2f 62 3e 20 63 61 6e 63 65 6c 6c 65 64 s></b> cancelled
1640: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a . }else if( z
1650: 56 61 6c 75 65 20 29 7b 0a 20 20 20 20 20 20 40 Value ){. @
1660: 20 3c 62 3e 25 68 28 7a 54 61 67 6e 61 6d 65 29 <b>%h(zTagname)
1670: 3d 25 68 28 7a 56 61 6c 75 65 29 3c 2f 62 3e 0a =%h(zValue)</b>.
1680: 20 20 20 20 7d 65 6c 73 65 20 7b 0a 20 20 20 20 }else {.
1690: 20 20 40 20 3c 62 3e 25 68 28 7a 54 61 67 6e 61 @ <b>%h(zTagna
16a0: 6d 65 29 3c 2f 62 3e 0a 20 20 20 20 7d 0a 20 20 me)</b>. }.
16b0: 20 20 69 66 28 20 74 61 67 74 79 70 65 3d 3d 32 if( tagtype==2
16c0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 4f ){. if( zO
16d0: 72 69 67 55 75 69 64 20 26 26 20 7a 4f 72 69 67 rigUuid && zOrig
16e0: 55 75 69 64 5b 30 5d 20 29 7b 0a 20 20 20 20 20 Uuid[0] ){.
16f0: 20 20 20 40 20 69 6e 68 65 72 69 74 65 64 20 66 @ inherited f
1700: 72 6f 6d 0a 20 20 20 20 20 20 20 20 68 79 70 65 rom. hype
1710: 72 6c 69 6e 6b 5f 74 6f 5f 75 75 69 64 28 7a 4f rlink_to_uuid(zO
1720: 72 69 67 55 75 69 64 29 3b 0a 20 20 20 20 20 20 rigUuid);.
1730: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 40 }else{. @
1740: 20 70 72 6f 70 61 67 61 74 65 73 20 74 6f 20 64 propagates to d
1750: 65 73 63 65 6e 64 61 6e 74 73 0a 20 20 20 20 20 escendants.
1760: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 }. }. if(
1770: 20 7a 53 72 63 55 75 69 64 20 26 26 20 7a 53 72 zSrcUuid && zSr
1780: 63 55 75 69 64 5b 30 5d 20 29 7b 0a 20 20 20 20 cUuid[0] ){.
1790: 20 20 69 66 28 20 74 61 67 74 79 70 65 3d 3d 30 if( tagtype==0
17a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 62 79 ){. @ by
17b0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 . }else{.
17c0: 20 20 20 20 20 20 40 20 61 64 64 65 64 20 62 79 @ added by
17d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 68 . }. h
17e0: 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 75 69 64 yperlink_to_uuid
17f0: 28 7a 53 72 63 55 75 69 64 29 3b 0a 20 20 20 20 (zSrcUuid);.
1800: 20 20 40 20 6f 6e 0a 20 20 20 20 20 20 68 79 70 @ on. hyp
1810: 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a erlink_to_date(z
1820: 44 61 74 65 2c 30 29 3b 0a 20 20 20 20 7d 0a 20 Date,0);. }.
1830: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
1840: 28 26 71 29 3b 0a 20 20 69 66 28 20 63 6e 74 20 (&q);. if( cnt
1850: 29 7b 0a 20 20 20 20 40 20 3c 2f 75 6c 3e 0a 20 ){. @ </ul>.
1860: 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 }.}.../*.** App
1870: 65 6e 64 20 74 68 65 20 64 69 66 66 65 72 65 6e end the differen
1880: 63 65 20 62 65 74 77 65 65 6e 20 74 77 6f 20 52 ce between two R
1890: 49 44 73 20 74 6f 20 74 68 65 20 6f 75 74 70 75 IDs to the outpu
18a0: 74 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 t.*/.static void
18b0: 20 61 70 70 65 6e 64 5f 64 69 66 66 28 69 6e 74 append_diff(int
18c0: 20 66 72 6f 6d 69 64 2c 20 69 6e 74 20 74 6f 69 fromid, int toi
18d0: 64 29 7b 0a 20 20 42 6c 6f 62 20 66 72 6f 6d 2c d){. Blob from,
18e0: 20 74 6f 2c 20 6f 75 74 3b 0a 20 20 63 6f 6e 74 to, out;. cont
18f0: 65 6e 74 5f 67 65 74 28 66 72 6f 6d 69 64 2c 20 ent_get(fromid,
1900: 26 66 72 6f 6d 29 3b 0a 20 20 63 6f 6e 74 65 6e &from);. conten
1910: 74 5f 67 65 74 28 74 6f 69 64 2c 20 26 74 6f 29 t_get(toid, &to)
1920: 3b 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 6f ;. blob_zero(&o
1930: 75 74 29 3b 0a 20 20 74 65 78 74 5f 64 69 66 66 ut);. text_diff
1940: 28 26 66 72 6f 6d 2c 20 26 74 6f 2c 20 26 6f 75 (&from, &to, &ou
1950: 74 2c 20 35 29 3b 0a 20 20 40 20 25 68 28 62 6c t, 5);. @ %h(bl
1960: 6f 62 5f 73 74 72 28 26 6f 75 74 29 29 0a 20 20 ob_str(&out)).
1970: 62 6c 6f 62 5f 72 65 73 65 74 28 26 66 72 6f 6d blob_reset(&from
1980: 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 );. blob_reset(
1990: 26 74 6f 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 &to);. blob_res
19a0: 65 74 28 26 6f 75 74 29 3b 20 20 0a 7d 0a 0a 0a et(&out); .}...
19b0: 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 76 /*.** WEBPAGE: v
19c0: 69 6e 66 6f 0a 2a 2a 20 57 45 42 50 41 47 45 3a info.** WEBPAGE:
19d0: 20 63 69 0a 2a 2a 20 55 52 4c 3a 20 20 2f 63 69 ci.** URL: /ci
19e0: 3f 6e 61 6d 65 3d 52 49 44 7c 41 52 54 49 46 41 ?name=RID|ARTIFA
19f0: 43 54 49 44 0a 2a 2a 0a 2a 2a 20 44 69 73 70 6c CTID.**.** Displ
1a00: 61 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 ay information a
1a10: 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61 bout a particula
1a20: 72 20 63 68 65 63 6b 2d 69 6e 2e 0a 2a 2f 0a 76 r check-in..*/.v
1a30: 6f 69 64 20 63 69 5f 70 61 67 65 28 76 6f 69 64 oid ci_page(void
1a40: 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 69 ){. Stmt q;. i
1a50: 6e 74 20 72 69 64 3b 0a 20 20 69 6e 74 20 69 73 nt rid;. int is
1a60: 4c 65 61 66 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 Leaf;.. login_c
1a70: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 heck_credentials
1a80: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 ();. if( !g.okR
1a90: 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 ead ){ login_nee
1aa0: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
1ab0: 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f . rid = name_to
1ac0: 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c 22 _rid(PD("name","
1ad0: 30 22 29 29 3b 0a 20 20 69 66 28 20 72 69 64 3d 0"));. if( rid=
1ae0: 3d 30 20 29 7b 0a 20 20 20 20 73 74 79 6c 65 5f =0 ){. style_
1af0: 68 65 61 64 65 72 28 22 43 68 65 63 6b 2d 69 6e header("Check-in
1b00: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 45 72 72 Information Err
1b10: 6f 72 22 29 3b 0a 20 20 20 20 40 20 4e 6f 20 73 or");. @ No s
1b20: 75 63 68 20 6f 62 6a 65 63 74 3a 20 25 68 28 67 uch object: %h(g
1b30: 2e 61 72 67 76 5b 32 5d 29 0a 20 20 20 20 73 74 .argv[2]). st
1b40: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 20 20 yle_footer();.
1b50: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 return;. }.
1b60: 69 73 4c 65 61 66 20 3d 20 21 64 62 5f 65 78 69 isLeaf = !db_exi
1b70: 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 sts("SELECT 1 FR
1b80: 4f 4d 20 70 6c 69 6e 6b 20 57 48 45 52 45 20 70 OM plink WHERE p
1b90: 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 id=%d", rid);.
1ba0: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 0a db_prepare(&q, .
1bb0: 20 20 20 20 20 22 53 45 4c 45 43 54 20 75 75 69 "SELECT uui
1bc0: 64 2c 20 64 61 74 65 74 69 6d 65 28 6d 74 69 6d d, datetime(mtim
1bd0: 65 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 2c e, 'localtime'),
1be0: 20 75 73 65 72 2c 20 63 6f 6d 6d 65 6e 74 22 0a user, comment".
1bf0: 20 20 20 20 20 22 20 20 46 52 4f 4d 20 62 6c 6f " FROM blo
1c00: 62 2c 20 65 76 65 6e 74 22 0a 20 20 20 20 20 22 b, event". "
1c10: 20 57 48 45 52 45 20 62 6c 6f 62 2e 72 69 64 3d WHERE blob.rid=
1c20: 25 64 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 %d". " AND
1c30: 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d 25 64 22 event.objid=%d"
1c40: 2c 0a 20 20 20 20 20 72 69 64 2c 20 72 69 64 0a ,. rid, rid.
1c50: 20 20 29 3b 0a 20 20 69 66 28 20 64 62 5f 73 74 );. if( db_st
1c60: 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 ep(&q)==SQLITE_R
1c70: 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 OW ){. const
1c80: 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 char *zUuid = db
1c90: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
1ca0: 20 30 29 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 0);. char *z
1cb0: 54 69 74 6c 65 20 3d 20 6d 70 72 69 6e 74 66 28 Title = mprintf(
1cc0: 22 43 68 65 63 6b 2d 69 6e 20 5b 25 2e 31 30 73 "Check-in [%.10s
1cd0: 5d 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 ]", zUuid);.
1ce0: 63 68 61 72 20 2a 7a 45 55 73 65 72 2c 20 2a 7a char *zEUser, *z
1cf0: 45 43 6f 6d 6d 65 6e 74 3b 0a 20 20 20 20 63 6f EComment;. co
1d00: 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 3b nst char *zUser;
1d10: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
1d20: 2a 7a 43 6f 6d 6d 65 6e 74 3b 0a 20 20 20 20 63 *zComment;. c
1d30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 onst char *zDate
1d40: 3b 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 ;. style_head
1d50: 65 72 28 7a 54 69 74 6c 65 29 3b 0a 20 20 20 20 er(zTitle);.
1d60: 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f 75 73 5f login_anonymous_
1d70: 61 76 61 69 6c 61 62 6c 65 28 29 3b 0a 20 20 20 available();.
1d80: 20 66 72 65 65 28 7a 54 69 74 6c 65 29 3b 0a 20 free(zTitle);.
1d90: 20 20 20 7a 45 55 73 65 72 20 3d 20 64 62 5f 74 zEUser = db_t
1da0: 65 78 74 28 30 2c 0a 20 20 20 20 20 20 20 20 20 ext(0,.
1db0: 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 "SELEC
1dc0: 54 20 76 61 6c 75 65 20 46 52 4f 4d 20 74 61 67 T value FROM tag
1dd0: 78 72 65 66 20 57 48 45 52 45 20 74 61 67 69 64 xref WHERE tagid
1de0: 3d 25 64 20 41 4e 44 20 72 69 64 3d 25 64 22 2c =%d AND rid=%d",
1df0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1e00: 20 20 20 20 20 54 41 47 5f 55 53 45 52 2c 20 72 TAG_USER, r
1e10: 69 64 29 3b 0a 20 20 20 20 7a 45 43 6f 6d 6d 65 id);. zEComme
1e20: 6e 74 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 nt = db_text(0,
1e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1e40: 20 20 20 20 22 53 45 4c 45 43 54 20 76 61 6c 75 "SELECT valu
1e50: 65 20 46 52 4f 4d 20 74 61 67 78 72 65 66 20 57 e FROM tagxref W
1e60: 48 45 52 45 20 74 61 67 69 64 3d 25 64 20 41 4e HERE tagid=%d AN
1e70: 44 20 72 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 D rid=%d",.
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 TA
1e90: 47 5f 43 4f 4d 4d 45 4e 54 2c 20 72 69 64 29 3b G_COMMENT, rid);
1ea0: 0a 20 20 20 20 7a 55 73 65 72 20 3d 20 64 62 5f . zUser = db_
1eb0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
1ec0: 32 29 3b 0a 20 20 20 20 7a 43 6f 6d 6d 65 6e 74 2);. zComment
1ed0: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
1ee0: 74 28 26 71 2c 20 33 29 3b 0a 20 20 20 20 7a 44 t(&q, 3);. zD
1ef0: 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ate = db_column_
1f00: 74 65 78 74 28 26 71 2c 31 29 3b 0a 20 20 20 20 text(&q,1);.
1f10: 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 @ <div class="se
1f20: 63 74 69 6f 6e 22 3e 4f 76 65 72 76 69 65 77 3c ction">Overview<
1f30: 2f 64 69 76 3e 0a 20 20 20 20 40 20 3c 70 3e 3c /div>. @ <p><
1f40: 74 61 62 6c 65 20 63 6c 61 73 73 3d 22 6c 61 62 table class="lab
1f50: 65 6c 2d 76 61 6c 75 65 22 3e 0a 20 20 20 20 40 el-value">. @
1f60: 20 3c 74 72 3e 3c 74 68 3e 53 48 41 31 26 6e 62 <tr><th>SHA1&nb
1f70: 73 70 3b 48 61 73 68 3a 3c 2f 74 68 3e 3c 74 64 sp;Hash:</th><td
1f80: 3e 25 73 28 7a 55 75 69 64 29 0a 20 20 20 20 69 >%s(zUuid). i
1f90: 66 28 20 67 2e 6f 6b 53 65 74 75 70 20 29 7b 0a f( g.okSetup ){.
1fa0: 20 20 20 20 20 20 40 20 28 52 65 63 6f 72 64 20 @ (Record
1fb0: 49 44 3a 20 25 64 28 72 69 64 29 29 0a 20 20 20 ID: %d(rid)).
1fc0: 20 7d 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f }. @ </td></
1fd0: 74 72 3e 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 tr>. @ <tr><t
1fe0: 68 3e 44 61 74 65 3a 3c 2f 74 68 3e 3c 74 64 3e h>Date:</th><td>
1ff0: 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 . hyperlink_t
2000: 6f 5f 64 61 74 65 28 7a 44 61 74 65 2c 20 22 3c o_date(zDate, "<
2010: 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 20 /td></tr>");.
2020: 20 69 66 28 20 7a 45 55 73 65 72 20 29 7b 0a 20 if( zEUser ){.
2030: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 45 @ <tr><th>E
2040: 64 69 74 65 64 26 6e 62 73 70 3b 55 73 65 72 3a dited User:
2050: 3c 2f 74 64 3e 3c 74 64 3e 0a 20 20 20 20 20 20 </td><td>.
2060: 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 hyperlink_to_use
2070: 72 28 7a 45 55 73 65 72 2c 7a 44 61 74 65 2c 22 r(zEUser,zDate,"
2080: 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 </td></tr>");.
2090: 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 4f 72 @ <tr><th>Or
20a0: 69 67 69 6e 61 6c 26 6e 62 73 70 3b 55 73 65 72 iginal User
20b0: 3a 3c 2f 74 68 3e 3c 74 64 3e 0a 20 20 20 20 20 :</th><td>.
20c0: 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 hyperlink_to_us
20d0: 65 72 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 er(zUser,zDate,"
20e0: 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 </td></tr>");.
20f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 }else{. @
2100: 20 3c 74 72 3e 3c 74 68 3e 55 73 65 72 3a 3c 2f <tr><th>User:</
2110: 74 64 3e 3c 74 64 3e 0a 20 20 20 20 20 20 68 79 td><td>. hy
2120: 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 28 perlink_to_user(
2130: 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 3c 2f 74 zUser,zDate,"</t
2140: 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 20 20 7d d></tr>");. }
2150: 0a 20 20 20 20 69 66 28 20 7a 45 43 6f 6d 6d 65 . if( zEComme
2160: 6e 74 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 74 nt ){. @ <t
2170: 72 3e 3c 74 68 3e 45 64 69 74 65 64 26 6e 62 73 r><th>Edited&nbs
2180: 70 3b 43 6f 6d 6d 65 6e 74 3a 3c 2f 74 68 3e 3c p;Comment:</th><
2190: 74 64 3e 25 77 28 7a 45 43 6f 6d 6d 65 6e 74 29 td>%w(zEComment)
21a0: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 20 </td></tr>.
21b0: 20 40 20 3c 74 72 3e 3c 74 68 3e 4f 72 69 67 69 @ <tr><th>Origi
21c0: 6e 61 6c 26 6e 62 73 70 3b 43 6f 6d 6d 65 6e 74 nal Comment
21d0: 3a 3c 2f 74 68 3e 3c 74 64 3e 25 77 28 7a 43 6f :</th><td>%w(zCo
21e0: 6d 6d 65 6e 74 29 3c 2f 74 64 3e 3c 2f 74 72 3e mment)</td></tr>
21f0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
2200: 20 20 40 20 3c 74 72 3e 3c 74 68 3e 43 6f 6d 6d @ <tr><th>Comm
2210: 65 6e 74 3a 3c 2f 74 68 3e 3c 74 64 3e 25 77 28 ent:</th><td>%w(
2220: 7a 43 6f 6d 6d 65 6e 74 29 3c 2f 74 64 3e 3c 2f zComment)</td></
2230: 74 72 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 tr>. }. @
2240: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 69 </td></tr>. i
2250: 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a f( g.okAdmin ){.
2260: 20 20 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 db_prepare
2270: 28 26 71 2c 20 0a 20 20 20 20 20 20 20 20 20 22 (&q, . "
2280: 53 45 4c 45 43 54 20 72 63 76 66 72 6f 6d 2e 69 SELECT rcvfrom.i
2290: 70 61 64 64 72 2c 20 75 73 65 72 2e 6c 6f 67 69 paddr, user.logi
22a0: 6e 2c 20 64 61 74 65 74 69 6d 65 28 72 63 76 66 n, datetime(rcvf
22b0: 72 6f 6d 2e 6d 74 69 6d 65 29 22 0a 20 20 20 20 rom.mtime)".
22c0: 20 20 20 20 20 22 20 20 46 52 4f 4d 20 62 6c 6f " FROM blo
22d0: 62 20 4a 4f 49 4e 20 72 63 76 66 72 6f 6d 20 55 b JOIN rcvfrom U
22e0: 53 49 4e 47 28 72 63 76 69 64 29 20 4c 45 46 54 SING(rcvid) LEFT
22f0: 20 4a 4f 49 4e 20 75 73 65 72 20 55 53 49 4e 47 JOIN user USING
2300: 28 75 69 64 29 22 0a 20 20 20 20 20 20 20 20 20 (uid)".
2310: 22 20 57 48 45 52 45 20 62 6c 6f 62 2e 72 69 64 " WHERE blob.rid
2320: 3d 25 64 22 2c 0a 20 20 20 20 20 20 20 20 20 72 =%d",. r
2330: 69 64 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 id. );.
2340: 20 20 69 66 28 20 64 62 5f 73 74 65 70 28 26 71 if( db_step(&q
2350: 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b )==SQLITE_ROW ){
2360: 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 . const c
2370: 68 61 72 20 2a 7a 49 70 41 64 64 72 20 3d 20 64 har *zIpAddr = d
2380: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
2390: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 63 6f , 0);. co
23a0: 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 nst char *zUser
23b0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
23c0: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 (&q, 1);.
23d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 const char *zDa
23e0: 74 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 te = db_column_t
23f0: 65 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 ext(&q, 2);.
2400: 20 20 20 20 69 66 28 20 7a 55 73 65 72 3d 3d 30 if( zUser==0
2410: 20 7c 7c 20 7a 55 73 65 72 5b 30 5d 3d 3d 30 20 || zUser[0]==0
2420: 29 20 7a 55 73 65 72 20 3d 20 22 75 6e 6b 6e 6f ) zUser = "unkno
2430: 77 6e 22 3b 0a 20 20 20 20 20 20 20 20 40 20 3c wn";. @ <
2440: 74 72 3e 3c 74 68 3e 52 65 63 65 69 76 65 64 26 tr><th>Received&
2450: 6e 62 73 70 3b 46 72 6f 6d 3a 3c 2f 74 68 3e 0a nbsp;From:</th>.
2460: 20 20 20 20 20 20 20 20 40 20 3c 74 64 3e 25 68 @ <td>%h
2470: 28 7a 55 73 65 72 29 20 40 20 25 68 28 7a 49 70 (zUser) @ %h(zIp
2480: 41 64 64 72 29 20 6f 6e 20 25 73 28 7a 44 61 74 Addr) on %s(zDat
2490: 65 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 e)</td></tr>.
24a0: 20 20 20 7d 0a 20 20 20 20 20 20 64 62 5f 66 69 }. db_fi
24b0: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 20 nalize(&q);.
24c0: 7d 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 }. if( g.okHi
24d0: 73 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 63 story ){. c
24e0: 68 61 72 20 2a 7a 53 68 6f 72 74 55 75 69 64 20 har *zShortUuid
24f0: 3d 20 6d 70 72 69 6e 74 66 28 22 25 2e 31 30 73 = mprintf("%.10s
2500: 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 20 ", zUuid);.
2510: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 72 const char *zPr
2520: 6f 6a 4e 61 6d 65 20 3d 20 64 62 5f 67 65 74 28 ojName = db_get(
2530: 22 70 72 6f 6a 65 63 74 2d 6e 61 6d 65 22 2c 20 "project-name",
2540: 22 75 6e 6e 61 6d 65 64 22 29 3b 0a 20 20 20 20 "unnamed");.
2550: 20 20 40 20 3c 74 72 3e 3c 74 68 3e 54 69 6d 65 @ <tr><th>Time
2560: 6c 69 6e 65 73 3a 3c 2f 74 68 3e 3c 74 64 3e 0a lines:</th><td>.
2570: 20 20 20 20 20 20 40 20 20 20 20 3c 61 20 68 72 @ <a hr
2580: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
2590: 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 25 64 L)/timeline?p=%d
25a0: 28 72 69 64 29 22 3e 61 6e 63 65 73 74 6f 72 73 (rid)">ancestors
25b0: 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 20 20 </a>. @
25c0: 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e | <a href="%s(g.
25d0: 7a 42 61 73 65 55 52 4c 29 2f 74 69 6d 65 6c 69 zBaseURL)/timeli
25e0: 6e 65 3f 64 3d 25 64 28 72 69 64 29 22 3e 64 65 ne?d=%d(rid)">de
25f0: 73 63 65 6e 64 61 6e 74 73 3c 2f 61 3e 0a 20 20 scendants</a>.
2600: 20 20 20 20 40 20 20 20 20 7c 20 3c 61 20 68 72 @ | <a hr
2610: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
2620: 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f 64 3d 25 64 L)/timeline?d=%d
2630: 28 72 69 64 29 26 70 3d 25 64 28 72 69 64 29 22 (rid)&p=%d(rid)"
2640: 3e 62 6f 74 68 3c 2f 61 3e 0a 20 20 20 20 20 20 >both</a>.
2650: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 22 db_prepare(&q, "
2660: 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 61 SELECT substr(ta
2670: 67 2e 74 61 67 6e 61 6d 65 2c 35 29 20 46 52 4f g.tagname,5) FRO
2680: 4d 20 74 61 67 78 72 65 66 2c 20 74 61 67 20 22 M tagxref, tag "
2690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
26a0: 20 20 20 20 20 20 22 20 57 48 45 52 45 20 72 69 " WHERE ri
26b0: 64 3d 25 64 20 41 4e 44 20 74 61 67 74 79 70 65 d=%d AND tagtype
26c0: 3e 30 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 >0 ".
26d0: 20 20 20 20 20 20 20 20 20 20 22 20 20 20 41 4e " AN
26e0: 44 20 74 61 67 2e 74 61 67 69 64 3d 74 61 67 78 D tag.tagid=tagx
26f0: 72 65 66 2e 74 61 67 69 64 20 22 0a 20 20 20 20 ref.tagid ".
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2710: 20 22 20 20 20 41 4e 44 20 2b 74 61 67 2e 74 61 " AND +tag.ta
2720: 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 79 6d 2d gname GLOB 'sym-
2730: 2a 27 22 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 *'", rid);.
2740: 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 while( db_step(
2750: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 &q)==SQLITE_ROW
2760: 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 ){. const
2770: 20 63 68 61 72 20 2a 7a 54 61 67 4e 61 6d 65 20 char *zTagName
2780: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
2790: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 (&q, 0);.
27a0: 20 40 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 @ | <a href="%
27b0: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 74 69 s(g.zBaseURL)/ti
27c0: 6d 65 6c 69 6e 65 3f 74 3d 25 54 28 7a 54 61 67 meline?t=%T(zTag
27d0: 4e 61 6d 65 29 22 3e 25 68 28 7a 54 61 67 4e 61 Name)">%h(zTagNa
27e0: 6d 65 29 3c 2f 61 3e 0a 20 20 20 20 20 20 7d 0a me)</a>. }.
27f0: 20 20 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a db_finaliz
2800: 65 28 26 71 29 3b 0a 20 20 20 20 20 20 40 20 3c e(&q);. @ <
2810: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 20 20 /td></tr>.
2820: 40 20 3c 74 72 3e 3c 74 68 3e 4f 74 68 65 72 26 @ <tr><th>Other&
2830: 6e 62 73 70 3b 4c 69 6e 6b 73 3a 3c 2f 74 68 3e nbsp;Links:</th>
2840: 0a 20 20 20 20 20 20 40 20 20 20 3c 74 64 3e 0a . @ <td>.
2850: 20 20 20 20 20 20 40 20 20 20 20 20 3c 61 20 68 @ <a h
2860: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
2870: 52 4c 29 2f 64 69 72 3f 63 69 3d 25 73 28 7a 53 RL)/dir?ci=%s(zS
2880: 68 6f 72 74 55 75 69 64 29 22 3e 66 69 6c 65 73 hortUuid)">files
2890: 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 20 20 </a>. @
28a0: 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 | <a href="%s(g
28b0: 2e 7a 42 61 73 65 55 52 4c 29 2f 7a 69 70 2f 25 .zBaseURL)/zip/%
28c0: 73 28 7a 50 72 6f 6a 4e 61 6d 65 29 2d 25 73 28 s(zProjName)-%s(
28d0: 7a 53 68 6f 72 74 55 75 69 64 29 2e 7a 69 70 3f zShortUuid).zip?
28e0: 75 75 69 64 3d 25 73 28 7a 55 75 69 64 29 22 3e uuid=%s(zUuid)">
28f0: 0a 20 20 20 20 20 20 40 20 20 20 20 20 20 20 20 . @
2900: 20 5a 49 50 20 61 72 63 68 69 76 65 3c 2f 61 3e ZIP archive</a>
2910: 0a 20 20 20 20 20 20 40 20 20 20 20 20 7c 20 3c . @ | <
2920: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
2930: 73 65 55 52 4c 29 2f 61 72 74 69 66 61 63 74 2f seURL)/artifact/
2940: 25 64 28 72 69 64 29 22 3e 6d 61 6e 69 66 65 73 %d(rid)">manifes
2950: 74 3c 2f 61 3e 0a 20 20 20 20 20 20 69 66 28 20 t</a>. if(
2960: 67 2e 6f 6b 57 72 69 74 65 20 29 7b 0a 20 20 20 g.okWrite ){.
2970: 20 20 20 20 20 40 20 20 20 20 20 7c 20 3c 61 20 @ | <a
2980: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
2990: 55 52 4c 29 2f 63 69 5f 65 64 69 74 3f 72 3d 25 URL)/ci_edit?r=%
29a0: 64 28 72 69 64 29 22 3e 65 64 69 74 3c 2f 61 3e d(rid)">edit</a>
29b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 40 . }. @
29c0: 20 20 20 3c 2f 74 64 3e 0a 20 20 20 20 20 20 40 </td>. @
29d0: 20 3c 2f 74 72 3e 0a 20 20 20 20 20 20 66 72 65 </tr>. fre
29e0: 65 28 7a 53 68 6f 72 74 55 75 69 64 29 3b 0a 20 e(zShortUuid);.
29f0: 20 20 20 7d 0a 20 20 20 20 40 20 3c 2f 74 61 62 }. @ </tab
2a00: 6c 65 3e 3c 2f 70 3e 0a 20 20 7d 65 6c 73 65 7b le></p>. }else{
2a10: 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65 . style_heade
2a20: 72 28 22 43 68 65 63 6b 2d 69 6e 20 49 6e 66 6f r("Check-in Info
2a30: 72 6d 61 74 69 6f 6e 22 29 3b 0a 20 20 20 20 6c rmation");. l
2a40: 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f 75 73 5f 61 ogin_anonymous_a
2a50: 76 61 69 6c 61 62 6c 65 28 29 3b 0a 20 20 7d 0a vailable();. }.
2a60: 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 db_finalize(&q
2a70: 29 3b 0a 20 20 73 68 6f 77 54 61 67 73 28 72 69 );. showTags(ri
2a80: 64 2c 20 22 22 29 3b 0a 20 20 40 20 3c 64 69 76 d, "");. @ <div
2a90: 20 63 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 class="section"
2aa0: 3e 43 68 61 6e 67 65 73 3c 2f 64 69 76 3e 0a 20 >Changes</div>.
2ab0: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a db_prepare(&q,.
2ac0: 20 20 20 20 20 22 53 45 4c 45 43 54 20 70 69 64 "SELECT pid
2ad0: 2c 20 66 69 64 2c 20 6e 61 6d 65 2c 20 73 75 62 , fid, name, sub
2ae0: 73 74 72 28 61 2e 75 75 69 64 2c 31 2c 31 30 29 str(a.uuid,1,10)
2af0: 2c 20 73 75 62 73 74 72 28 62 2e 75 75 69 64 2c , substr(b.uuid,
2b00: 31 2c 31 30 29 22 0a 20 20 20 20 20 22 20 20 46 1,10)". " F
2b10: 52 4f 4d 20 6d 6c 69 6e 6b 20 4a 4f 49 4e 20 66 ROM mlink JOIN f
2b20: 69 6c 65 6e 61 6d 65 20 4f 4e 20 66 69 6c 65 6e ilename ON filen
2b30: 61 6d 65 2e 66 6e 69 64 3d 6d 6c 69 6e 6b 2e 66 ame.fnid=mlink.f
2b40: 6e 69 64 22 0a 20 20 20 20 20 22 20 20 20 20 20 nid". "
2b50: 20 20 20 20 4c 45 46 54 20 4a 4f 49 4e 20 62 6c LEFT JOIN bl
2b60: 6f 62 20 61 20 4f 4e 20 61 2e 72 69 64 3d 70 69 ob a ON a.rid=pi
2b70: 64 22 0a 20 20 20 20 20 22 20 20 20 20 20 20 20 d". "
2b80: 20 20 4c 45 46 54 20 4a 4f 49 4e 20 62 6c 6f 62 LEFT JOIN blob
2b90: 20 62 20 4f 4e 20 62 2e 72 69 64 3d 66 69 64 22 b ON b.rid=fid"
2ba0: 0a 20 20 20 20 20 22 20 57 48 45 52 45 20 6d 6c . " WHERE ml
2bb0: 69 6e 6b 2e 6d 69 64 3d 25 64 22 0a 20 20 20 20 ink.mid=%d".
2bc0: 20 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 " ORDER BY name
2bd0: 22 2c 0a 20 20 20 20 20 72 69 64 0a 20 20 29 3b ",. rid. );
2be0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 . while( db_ste
2bf0: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
2c00: 57 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 69 64 W ){. int pid
2c10: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 = db_column_int
2c20: 28 26 71 2c 30 29 3b 0a 20 20 20 20 69 6e 74 20 (&q,0);. int
2c30: 66 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f fid = db_column_
2c40: 69 6e 74 28 26 71 2c 31 29 3b 0a 20 20 20 20 63 int(&q,1);. c
2c50: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 onst char *zName
2c60: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
2c70: 74 28 26 71 2c 32 29 3b 0a 20 20 20 20 63 6f 6e t(&q,2);. con
2c80: 73 74 20 63 68 61 72 20 2a 7a 4f 6c 64 20 3d 20 st char *zOld =
2c90: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
2ca0: 71 2c 33 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 q,3);. const
2cb0: 63 68 61 72 20 2a 7a 4e 65 77 20 3d 20 64 62 5f char *zNew = db_
2cc0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 34 column_text(&q,4
2cd0: 29 3b 0a 20 20 20 20 69 66 28 20 7a 4f 6c 64 20 );. if( zOld
2ce0: 26 26 20 7a 4e 65 77 20 29 7b 0a 20 20 20 20 20 && zNew ){.
2cf0: 20 40 20 3c 70 3e 4d 6f 64 69 66 69 65 64 20 3c @ <p>Modified <
2d00: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
2d10: 73 65 55 52 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d seURL)/finfo?nam
2d20: 65 3d 25 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 e=%T(zName)">%h(
2d30: 7a 4e 61 6d 65 29 3c 2f 61 3e 0a 20 20 20 20 20 zName)</a>.
2d40: 20 40 20 66 72 6f 6d 20 3c 61 20 68 72 65 66 3d @ from <a href=
2d50: 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f "%s(g.zBaseURL)/
2d60: 61 72 74 69 66 61 63 74 2f 25 73 28 7a 4f 6c 64 artifact/%s(zOld
2d70: 29 22 3e 5b 25 73 28 7a 4f 6c 64 29 5d 3c 2f 61 )">[%s(zOld)]</a
2d80: 3e 0a 20 20 20 20 20 20 40 20 74 6f 20 3c 61 20 >. @ to <a
2d90: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
2da0: 55 52 4c 29 2f 61 72 74 69 66 61 63 74 2f 25 73 URL)/artifact/%s
2db0: 28 7a 4e 65 77 29 22 3e 5b 25 73 28 7a 4e 65 77 (zNew)">[%s(zNew
2dc0: 29 5d 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 20 20 7d )]</a></p>. }
2dd0: 65 6c 73 65 20 69 66 28 20 7a 4f 6c 64 20 29 7b else if( zOld ){
2de0: 0a 20 20 20 20 20 20 40 20 3c 70 3e 44 65 6c 65 . @ <p>Dele
2df0: 74 65 64 20 3c 61 20 68 72 65 66 3d 22 25 73 28 ted <a href="%s(
2e00: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 69 6e 66 g.zBaseURL)/finf
2e10: 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 6d 65 29 o?name=%T(zName)
2e20: 22 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f 61 3e 0a ">%h(zName)</a>.
2e30: 20 20 20 20 20 20 40 20 76 65 72 73 69 6f 6e 20 @ version
2e40: 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 <a href="%s(g.zB
2e50: 61 73 65 55 52 4c 29 2f 61 72 74 69 66 61 63 74 aseURL)/artifact
2e60: 2f 25 73 28 7a 4f 6c 64 29 22 3e 5b 25 73 28 7a /%s(zOld)">[%s(z
2e70: 4f 6c 64 29 5d 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 Old)]</a></p>.
2e80: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 continue;.
2e90: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 }else{. @
2ea0: 20 3c 70 3e 41 64 64 65 64 20 3c 61 20 68 72 65 <p>Added <a hre
2eb0: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
2ec0: 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 )/finfo?name=%T(
2ed0: 7a 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 6d 65 zName)">%h(zName
2ee0: 29 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 76 65 )</a>. @ ve
2ef0: 72 73 69 6f 6e 20 3c 61 20 68 72 65 66 3d 22 25 rsion <a href="%
2f00: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 s(g.zBaseURL)/ar
2f10: 74 69 66 61 63 74 2f 25 73 28 7a 4e 65 77 29 22 tifact/%s(zNew)"
2f20: 3e 5b 25 73 28 7a 4e 65 77 29 5d 3c 2f 61 3e 3c >[%s(zNew)]</a><
2f30: 2f 70 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 /p>. }. @
2f40: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 <blockquote><pre
2f50: 3e 0a 20 20 20 20 61 70 70 65 6e 64 5f 64 69 66 >. append_dif
2f60: 66 28 70 69 64 2c 20 66 69 64 29 3b 0a 20 20 20 f(pid, fid);.
2f70: 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b @ </pre></block
2f80: 71 75 6f 74 65 3e 0a 20 20 7d 0a 20 20 64 62 5f quote>. }. db_
2f90: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
2fa0: 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a style_footer();.
2fb0: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 }../*.** WEBPAGE
2fc0: 3a 20 77 69 6e 66 6f 0a 2a 2a 20 55 52 4c 3a 20 : winfo.** URL:
2fd0: 20 2f 77 69 6e 66 6f 3f 6e 61 6d 65 3d 52 49 44 /winfo?name=RID
2fe0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 69 6e .**.** Return in
2ff0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 formation about
3000: 61 20 77 69 6b 69 20 70 61 67 65 2e 0a 2a 2f 0a a wiki page..*/.
3010: 76 6f 69 64 20 77 69 6e 66 6f 5f 70 61 67 65 28 void winfo_page(
3020: 76 6f 69 64 29 7b 0a 20 20 53 74 6d 74 20 71 3b void){. Stmt q;
3030: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 0a 20 20 6c . int rid;.. l
3040: 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 ogin_check_crede
3050: 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 ntials();. if(
3060: 21 67 2e 6f 6b 52 64 57 69 6b 69 20 29 7b 20 6c !g.okRdWiki ){ l
3070: 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 ogin_needed(); r
3080: 65 74 75 72 6e 3b 20 7d 0a 20 20 72 69 64 20 3d eturn; }. rid =
3090: 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 name_to_rid(PD(
30a0: 22 6e 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 20 "name","0"));.
30b0: 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20 20 if( rid==0 ){.
30c0: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 style_header("
30d0: 57 69 6b 69 20 50 61 67 65 20 49 6e 66 6f 72 6d Wiki Page Inform
30e0: 61 74 69 6f 6e 20 45 72 72 6f 72 22 29 3b 0a 20 ation Error");.
30f0: 20 20 20 40 20 4e 6f 20 73 75 63 68 20 6f 62 6a @ No such obj
3100: 65 63 74 3a 20 25 68 28 67 2e 61 72 67 76 5b 32 ect: %h(g.argv[2
3110: 5d 29 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f ]). style_foo
3120: 74 65 72 28 29 3b 0a 20 20 20 20 72 65 74 75 72 ter();. retur
3130: 6e 3b 0a 20 20 7d 0a 20 20 64 62 5f 70 72 65 70 n;. }. db_prep
3140: 61 72 65 28 26 71 2c 20 0a 20 20 20 20 20 22 53 are(&q, . "S
3150: 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 61 67 ELECT substr(tag
3160: 6e 61 6d 65 2c 20 36 2c 20 31 30 30 30 29 2c 20 name, 6, 1000),
3170: 75 75 69 64 2c 22 0a 20 20 20 20 20 22 20 20 20 uuid,". "
3180: 20 20 20 20 64 61 74 65 74 69 6d 65 28 65 76 65 datetime(eve
3190: 6e 74 2e 6d 74 69 6d 65 2c 20 27 6c 6f 63 61 6c nt.mtime, 'local
31a0: 74 69 6d 65 27 29 2c 20 75 73 65 72 22 0a 20 20 time'), user".
31b0: 20 20 20 22 20 20 46 52 4f 4d 20 74 61 67 78 72 " FROM tagxr
31c0: 65 66 2c 20 74 61 67 2c 20 62 6c 6f 62 2c 20 65 ef, tag, blob, e
31d0: 76 65 6e 74 22 0a 20 20 20 20 20 22 20 57 48 45 vent". " WHE
31e0: 52 45 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 RE tagxref.rid=%
31f0: 64 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 20 d". " AND
3200: 74 61 67 2e 74 61 67 69 64 3d 74 61 67 78 72 65 tag.tagid=tagxre
3210: 66 2e 74 61 67 69 64 22 0a 20 20 20 20 20 22 20 f.tagid". "
3220: 20 20 41 4e 44 20 74 61 67 2e 74 61 67 6e 61 6d AND tag.tagnam
3230: 65 20 4c 49 4b 45 20 27 77 69 6b 69 2d 25 25 27 e LIKE 'wiki-%%'
3240: 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 20 62 ". " AND b
3250: 6c 6f 62 2e 72 69 64 3d 25 64 22 0a 20 20 20 20 lob.rid=%d".
3260: 20 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e 6f " AND event.o
3270: 62 6a 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 72 bjid=%d",. r
3280: 69 64 2c 20 72 69 64 2c 20 72 69 64 0a 20 20 29 id, rid, rid. )
3290: 3b 0a 20 20 69 66 28 20 64 62 5f 73 74 65 70 28 ;. if( db_step(
32a0: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 &q)==SQLITE_ROW
32b0: 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 ){. const cha
32c0: 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 6f r *zName = db_co
32d0: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 lumn_text(&q, 0)
32e0: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
32f0: 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 63 6f 6c *zUuid = db_col
3300: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b umn_text(&q, 1);
3310: 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 69 74 6c . char *zTitl
3320: 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 57 69 6b e = mprintf("Wik
3330: 69 20 50 61 67 65 20 25 73 22 2c 20 7a 4e 61 6d i Page %s", zNam
3340: 65 29 3b 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 e);. style_he
3350: 61 64 65 72 28 7a 54 69 74 6c 65 29 3b 0a 20 20 ader(zTitle);.
3360: 20 20 66 72 65 65 28 7a 54 69 74 6c 65 29 3b 0a free(zTitle);.
3370: 20 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d login_anonym
3380: 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 3b ous_available();
3390: 0a 20 20 20 20 40 20 3c 64 69 76 20 63 6c 61 73 . @ <div clas
33a0: 73 3d 22 73 65 63 74 69 6f 6e 22 3e 4f 76 65 72 s="section">Over
33b0: 76 69 65 77 3c 2f 64 69 76 3e 0a 20 20 20 20 40 view</div>. @
33c0: 20 3c 70 3e 3c 74 61 62 6c 65 20 63 6c 61 73 73 <p><table class
33d0: 3d 22 6c 61 62 65 6c 2d 76 61 6c 75 65 22 3e 0a ="label-value">.
33e0: 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 56 65 @ <tr><th>Ve
33f0: 72 73 69 6f 6e 3a 3c 2f 74 68 3e 3c 74 64 3e 25 rsion:</th><td>%
3400: 73 28 7a 55 75 69 64 29 3c 2f 74 64 3e 3c 2f 74 s(zUuid)</td></t
3410: 72 3e 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 r>. @ <tr><th
3420: 3e 44 61 74 65 3a 3c 2f 74 68 3e 3c 74 64 3e 25 >Date:</th><td>%
3430: 73 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 s(db_column_text
3440: 28 26 71 2c 20 32 29 29 3c 2f 74 64 3e 3c 2f 74 (&q, 2))</td></t
3450: 72 3e 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 53 r>. if( g.okS
3460: 65 74 75 70 20 29 7b 0a 20 20 20 20 20 20 40 20 etup ){. @
3470: 3c 74 72 3e 3c 74 68 3e 52 65 63 6f 72 64 20 49 <tr><th>Record I
3480: 44 3a 3c 2f 74 68 3e 3c 74 64 3e 25 64 28 72 69 D:</th><td>%d(ri
3490: 64 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 d)</td></tr>.
34a0: 20 7d 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 }. @ <tr><th
34b0: 3e 4f 72 69 67 69 6e 61 6c 26 6e 62 73 70 3b 55 >Original U
34c0: 73 65 72 3a 3c 2f 74 68 3e 3c 74 64 3e 25 73 28 ser:</th><td>%s(
34d0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
34e0: 71 2c 20 33 29 29 3c 2f 74 64 3e 3c 2f 74 72 3e q, 3))</td></tr>
34f0: 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 73 . if( g.okHis
3500: 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 40 20 tory ){. @
3510: 3c 74 72 3e 3c 74 68 3e 43 6f 6d 6d 61 6e 64 73 <tr><th>Commands
3520: 3a 3c 2f 74 68 3e 0a 20 20 20 20 20 20 40 20 20 :</th>. @
3530: 20 3c 74 64 3e 0a 20 20 20 20 20 20 2f 2a 20 40 <td>. /* @
3540: 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22 25 73 <a href="%s
3550: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 77 64 69 (g.zBaseURL)/wdi
3560: 66 66 2f 25 64 28 72 69 64 29 22 3e 64 69 66 66 ff/%d(rid)">diff
3570: 3c 2f 61 3e 20 7c 20 2a 2f 0a 20 20 20 20 20 20 </a> | */.
3580: 40 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22 25 @ <a href="%
3590: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 77 68 s(g.zBaseURL)/wh
35a0: 69 73 74 6f 72 79 3f 6e 61 6d 65 3d 25 74 28 7a istory?name=%t(z
35b0: 4e 61 6d 65 29 22 3e 68 69 73 74 6f 72 79 3c 2f Name)">history</
35c0: 61 3e 0a 20 20 20 20 20 20 40 20 20 20 20 20 7c a>. @ |
35d0: 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a <a href="%s(g.z
35e0: 42 61 73 65 55 52 4c 29 2f 61 72 74 69 66 61 63 BaseURL)/artifac
35f0: 74 2f 25 64 28 72 69 64 29 22 3e 72 61 77 2d 74 t/%d(rid)">raw-t
3600: 65 78 74 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 ext</a>. @
3610: 20 20 3c 2f 74 64 3e 0a 20 20 20 20 20 20 40 20 </td>. @
3620: 3c 2f 74 72 3e 0a 20 20 20 20 7d 0a 20 20 20 20 </tr>. }.
3630: 40 20 3c 2f 74 61 62 6c 65 3e 3c 2f 70 3e 0a 20 @ </table></p>.
3640: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 79 6c }else{. styl
3650: 65 5f 68 65 61 64 65 72 28 22 57 69 6b 69 20 49 e_header("Wiki I
3660: 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 3b 0a 20 20 nformation");.
3670: 20 20 72 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 rid = 0;. }.
3680: 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 db_finalize(&q)
3690: 3b 0a 20 20 73 68 6f 77 54 61 67 73 28 72 69 64 ;. showTags(rid
36a0: 2c 20 22 77 69 6b 69 2d 2a 22 29 3b 0a 20 20 69 , "wiki-*");. i
36b0: 66 28 20 72 69 64 20 29 7b 0a 20 20 20 20 42 6c f( rid ){. Bl
36c0: 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 20 20 ob content;.
36d0: 4d 61 6e 69 66 65 73 74 20 6d 3b 0a 20 20 20 20 Manifest m;.
36e0: 6d 65 6d 73 65 74 28 26 6d 2c 20 30 2c 20 73 69 memset(&m, 0, si
36f0: 7a 65 6f 66 28 6d 29 29 3b 0a 20 20 20 20 62 6c zeof(m));. bl
3700: 6f 62 5f 7a 65 72 6f 28 26 6d 2e 63 6f 6e 74 65 ob_zero(&m.conte
3710: 6e 74 29 3b 0a 20 20 20 20 63 6f 6e 74 65 6e 74 nt);. content
3720: 5f 67 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 _get(rid, &conte
3730: 6e 74 29 3b 0a 20 20 20 20 6d 61 6e 69 66 65 73 nt);. manifes
3740: 74 5f 70 61 72 73 65 28 26 6d 2c 20 26 63 6f 6e t_parse(&m, &con
3750: 74 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 6d tent);. if( m
3760: 2e 74 79 70 65 3d 3d 43 46 54 59 50 45 5f 57 49 .type==CFTYPE_WI
3770: 4b 49 20 29 7b 0a 20 20 20 20 20 20 42 6c 6f 62 KI ){. Blob
3780: 20 77 69 6b 69 3b 0a 20 20 20 20 20 20 62 6c 6f wiki;. blo
3790: 62 5f 69 6e 69 74 28 26 77 69 6b 69 2c 20 6d 2e b_init(&wiki, m.
37a0: 7a 57 69 6b 69 2c 20 2d 31 29 3b 0a 20 20 20 20 zWiki, -1);.
37b0: 20 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 @ <div class="
37c0: 73 65 63 74 69 6f 6e 22 3e 43 6f 6e 74 65 6e 74 section">Content
37d0: 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 77 69 6b </div>. wik
37e0: 69 5f 63 6f 6e 76 65 72 74 28 26 77 69 6b 69 2c i_convert(&wiki,
37f0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 6c 0, 0);. bl
3800: 6f 62 5f 72 65 73 65 74 28 26 77 69 6b 69 29 3b ob_reset(&wiki);
3810: 0a 20 20 20 20 7d 0a 20 20 20 20 6d 61 6e 69 66 . }. manif
3820: 65 73 74 5f 63 6c 65 61 72 28 26 6d 29 3b 0a 20 est_clear(&m);.
3830: 20 7d 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 }. style_foote
3840: 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 r();.}../*.** WE
3850: 42 50 41 47 45 3a 20 66 69 6e 66 6f 0a 2a 2a 20 BPAGE: finfo.**
3860: 55 52 4c 3a 20 2f 66 69 6e 66 6f 3f 6e 61 6d 65 URL: /finfo?name
3870: 3d 46 49 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 =FILENAME.**.**
3880: 53 68 6f 77 20 74 68 65 20 63 6f 6d 70 6c 65 74 Show the complet
3890: 65 20 63 68 61 6e 67 65 20 68 69 73 74 6f 72 79 e change history
38a0: 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 66 69 for a single fi
38b0: 6c 65 2e 20 0a 2a 2f 0a 76 6f 69 64 20 66 69 6e le. .*/.void fin
38c0: 66 6f 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 fo_page(void){.
38d0: 20 53 74 6d 74 20 71 3b 0a 20 20 63 6f 6e 73 74 Stmt q;. const
38e0: 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 char *zFilename
38f0: 3b 0a 20 20 63 68 61 72 20 7a 50 72 65 76 44 61 ;. char zPrevDa
3900: 74 65 5b 32 30 5d 3b 0a 20 20 42 6c 6f 62 20 74 te[20];. Blob t
3910: 69 74 6c 65 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 itle;.. login_c
3920: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 heck_credentials
3930: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 ();. if( !g.okR
3940: 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 ead ){ login_nee
3950: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
3960: 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 . style_header(
3970: 22 46 69 6c 65 20 48 69 73 74 6f 72 79 22 29 3b "File History");
3980: 0a 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f . login_anonymo
3990: 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 3b 0a us_available();.
39a0: 0a 20 20 7a 50 72 65 76 44 61 74 65 5b 30 5d 20 . zPrevDate[0]
39b0: 3d 20 30 3b 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 = 0;. zFilename
39c0: 20 3d 20 50 44 28 22 6e 61 6d 65 22 2c 22 22 29 = PD("name","")
39d0: 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 ;. db_prepare(&
39e0: 71 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 20 73 q,. "SELECT s
39f0: 75 62 73 74 72 28 62 2e 75 75 69 64 2c 31 2c 31 ubstr(b.uuid,1,1
3a00: 30 29 2c 20 64 61 74 65 74 69 6d 65 28 65 76 65 0), datetime(eve
3a10: 6e 74 2e 6d 74 69 6d 65 2c 27 6c 6f 63 61 6c 74 nt.mtime,'localt
3a20: 69 6d 65 27 29 2c 22 0a 20 20 20 20 22 20 20 20 ime'),". "
3a30: 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65 76 65 coalesce(eve
3a40: 6e 74 2e 65 63 6f 6d 6d 65 6e 74 2c 20 65 76 65 nt.ecomment, eve
3a50: 6e 74 2e 63 6f 6d 6d 65 6e 74 29 2c 22 0a 20 20 nt.comment),".
3a60: 20 20 22 20 20 20 20 20 20 20 63 6f 61 6c 65 73 " coales
3a70: 63 65 28 65 76 65 6e 74 2e 65 75 73 65 72 2c 20 ce(event.euser,
3a80: 65 76 65 6e 74 2e 75 73 65 72 29 2c 22 0a 20 20 event.user),".
3a90: 20 20 22 20 20 20 20 20 20 20 6d 6c 69 6e 6b 2e " mlink.
3aa0: 70 69 64 2c 20 6d 6c 69 6e 6b 2e 66 69 64 2c 20 pid, mlink.fid,
3ab0: 6d 6c 69 6e 6b 2e 6d 69 64 2c 20 6d 6c 69 6e 6b mlink.mid, mlink
3ac0: 2e 66 6e 69 64 22 0a 20 20 20 20 22 20 20 46 52 .fnid". " FR
3ad0: 4f 4d 20 6d 6c 69 6e 6b 2c 20 62 6c 6f 62 20 62 OM mlink, blob b
3ae0: 2c 20 65 76 65 6e 74 22 0a 20 20 20 20 22 20 57 , event". " W
3af0: 48 45 52 45 20 6d 6c 69 6e 6b 2e 66 6e 69 64 3d HERE mlink.fnid=
3b00: 28 53 45 4c 45 43 54 20 66 6e 69 64 20 46 52 4f (SELECT fnid FRO
3b10: 4d 20 66 69 6c 65 6e 61 6d 65 20 57 48 45 52 45 M filename WHERE
3b20: 20 6e 61 6d 65 3d 25 51 29 22 0a 20 20 20 20 22 name=%Q)". "
3b30: 20 20 20 41 4e 44 20 62 2e 72 69 64 3d 6d 6c 69 AND b.rid=mli
3b40: 6e 6b 2e 66 69 64 22 0a 20 20 20 20 22 20 20 20 nk.fid". "
3b50: 41 4e 44 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d AND event.objid=
3b60: 6d 6c 69 6e 6b 2e 6d 69 64 22 0a 20 20 20 20 22 mlink.mid". "
3b70: 20 4f 52 44 45 52 20 42 59 20 65 76 65 6e 74 2e ORDER BY event.
3b80: 6d 74 69 6d 65 20 44 45 53 43 22 2c 0a 20 20 20 mtime DESC",.
3b90: 20 7a 46 69 6c 65 6e 61 6d 65 0a 20 20 29 3b 0a zFilename. );.
3ba0: 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 74 69 74 blob_zero(&tit
3bb0: 6c 65 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 le);. blob_appe
3bc0: 6e 64 66 28 26 74 69 74 6c 65 2c 20 22 48 69 73 ndf(&title, "His
3bd0: 74 6f 72 79 20 6f 66 20 22 29 3b 0a 20 20 68 79 tory of ");. hy
3be0: 70 65 72 6c 69 6e 6b 65 64 5f 70 61 74 68 28 7a perlinked_path(z
3bf0: 46 69 6c 65 6e 61 6d 65 2c 20 26 74 69 74 6c 65 Filename, &title
3c00: 29 3b 0a 20 20 40 20 3c 68 32 3e 25 62 28 26 74 );. @ <h2>%b(&t
3c10: 69 74 6c 65 29 3c 2f 68 32 3e 0a 20 20 62 6c 6f itle)</h2>. blo
3c20: 62 5f 72 65 73 65 74 28 26 74 69 74 6c 65 29 3b b_reset(&title);
3c30: 0a 20 20 40 20 3c 74 61 62 6c 65 20 63 65 6c 6c . @ <table cell
3c40: 73 70 61 63 69 6e 67 3d 30 20 62 6f 72 64 65 72 spacing=0 border
3c50: 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 30 =0 cellpadding=0
3c60: 3e 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 >. while( db_st
3c70: 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 ep(&q)==SQLITE_R
3c80: 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 OW ){. const
3c90: 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 char *zUuid = db
3ca0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
3cb0: 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 0);. const c
3cc0: 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f har *zDate = db_
3cd0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
3ce0: 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 1);. const ch
3cf0: 61 72 20 2a 7a 43 6f 6d 20 3d 20 64 62 5f 63 6f ar *zCom = db_co
3d00: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 29 lumn_text(&q, 2)
3d10: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
3d20: 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c *zUser = db_col
3d30: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 3b umn_text(&q, 3);
3d40: 0a 20 20 20 20 69 6e 74 20 66 70 69 64 20 3d 20 . int fpid =
3d50: 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 db_column_int(&q
3d60: 2c 20 34 29 3b 0a 20 20 20 20 69 6e 74 20 66 72 , 4);. int fr
3d70: 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 id = db_column_i
3d80: 6e 74 28 26 71 2c 20 35 29 3b 0a 20 20 20 20 69 nt(&q, 5);. i
3d90: 6e 74 20 6d 69 64 20 3d 20 64 62 5f 63 6f 6c 75 nt mid = db_colu
3da0: 6d 6e 5f 69 6e 74 28 26 71 2c 20 36 29 3b 0a 20 mn_int(&q, 6);.
3db0: 20 20 20 69 6e 74 20 66 6e 69 64 20 3d 20 64 62 int fnid = db
3dc0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 _column_int(&q,
3dd0: 37 29 3b 0a 20 20 20 20 63 68 61 72 20 7a 53 68 7);. char zSh
3de0: 6f 72 74 5b 32 30 5d 3b 0a 20 20 20 20 69 66 28 ort[20];. if(
3df0: 20 6d 65 6d 63 6d 70 28 7a 44 61 74 65 2c 20 7a memcmp(zDate, z
3e00: 50 72 65 76 44 61 74 65 2c 20 31 30 29 20 29 7b PrevDate, 10) ){
3e10: 0a 20 20 20 20 20 20 73 70 72 69 6e 74 66 28 7a . sprintf(z
3e20: 50 72 65 76 44 61 74 65 2c 20 22 25 2e 31 30 73 PrevDate, "%.10s
3e30: 22 2c 20 7a 44 61 74 65 29 3b 0a 20 20 20 20 20 ", zDate);.
3e40: 20 40 20 3c 74 72 3e 3c 74 64 20 63 6f 6c 73 70 @ <tr><td colsp
3e50: 61 6e 3d 33 3e 0a 20 20 20 20 20 20 40 20 20 20 an=3>. @
3e60: 3c 64 69 76 20 63 6c 61 73 73 3d 22 64 69 76 69 <div class="divi
3e70: 64 65 72 22 3e 25 73 28 7a 50 72 65 76 44 61 74 der">%s(zPrevDat
3e80: 65 29 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 40 e)</div>. @
3e90: 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 </td></tr>.
3ea0: 7d 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 }. @ <tr><td
3eb0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 25 73 28 valign="top">%s(
3ec0: 26 7a 44 61 74 65 5b 31 31 5d 29 3c 2f 74 64 3e &zDate[11])</td>
3ed0: 0a 20 20 20 20 40 20 3c 74 64 20 77 69 64 74 68 . @ <td width
3ee0: 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 20 20 20 20 ="20"></td>.
3ef0: 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f @ <td valign="to
3f00: 70 22 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 3e p" align="left">
3f10: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 . sqlite3_snp
3f20: 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 53 68 rintf(sizeof(zSh
3f30: 6f 72 74 29 2c 20 7a 53 68 6f 72 74 2c 20 22 25 ort), zShort, "%
3f40: 2e 31 30 73 22 2c 20 7a 55 75 69 64 29 3b 0a 20 .10s", zUuid);.
3f50: 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f if( g.okHisto
3f60: 72 79 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 61 ry ){. @ <a
3f70: 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 54 6f 70 href="%s(g.zTop
3f80: 29 2f 61 72 74 69 66 61 63 74 2f 25 73 28 7a 55 )/artifact/%s(zU
3f90: 75 69 64 29 22 3e 5b 25 73 28 7a 53 68 6f 72 74 uid)">[%s(zShort
3fa0: 29 5d 3c 2f 61 3e 0a 20 20 20 20 7d 65 6c 73 65 )]</a>. }else
3fb0: 7b 0a 20 20 20 20 20 20 40 20 5b 25 73 28 7a 53 {. @ [%s(zS
3fc0: 68 6f 72 74 29 5d 0a 20 20 20 20 7d 0a 20 20 20 hort)]. }.
3fd0: 20 40 20 25 68 28 7a 43 6f 6d 29 20 28 42 79 3a @ %h(zCom) (By:
3fe0: 20 25 68 28 7a 55 73 65 72 29 29 0a 20 20 20 20 %h(zUser)).
3ff0: 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 if( g.okHistory
4000: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 66 70 69 ){. if( fpi
4010: 64 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 3c d ){. @ <
4020: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
4030: 73 65 55 52 4c 29 2f 66 64 69 66 66 3f 76 31 3d seURL)/fdiff?v1=
4040: 25 64 28 66 70 69 64 29 26 61 6d 70 3b 76 32 3d %d(fpid)&v2=
4050: 25 64 28 66 72 69 64 29 22 3e 5b 64 69 66 66 5d %d(frid)">[diff]
4060: 3c 2f 61 3e 0a 20 20 20 20 20 20 7d 0a 20 20 20 </a>. }.
4070: 20 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 @ <a href="%s
4080: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 6e 6e (g.zBaseURL)/ann
4090: 6f 74 61 74 65 3f 6d 69 64 3d 25 64 28 6d 69 64 otate?mid=%d(mid
40a0: 29 26 61 6d 70 3b 66 6e 69 64 3d 25 64 28 66 6e )&fnid=%d(fn
40b0: 69 64 29 22 3e 0a 20 20 20 20 20 20 40 20 5b 61 id)">. @ [a
40c0: 6e 6e 6f 74 61 74 65 5d 3c 2f 61 3e 0a 20 20 20 nnotate]</a>.
40d0: 20 20 20 40 20 3c 2f 74 64 3e 0a 20 20 20 20 7d @ </td>. }
40e0: 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 . }. db_finali
40f0: 7a 65 28 26 71 29 3b 0a 20 20 40 20 3c 2f 74 61 ze(&q);. @ </ta
4100: 62 6c 65 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f ble>. style_foo
4110: 74 65 72 28 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a ter();.}.../*.**
4120: 20 57 45 42 50 41 47 45 3a 20 76 64 69 66 66 0a WEBPAGE: vdiff.
4130: 2a 2a 20 55 52 4c 3a 20 2f 76 64 69 66 66 3f 6e ** URL: /vdiff?n
4140: 61 6d 65 3d 52 49 44 0a 2a 2a 0a 2a 2a 20 53 68 ame=RID.**.** Sh
4150: 6f 77 20 61 6c 6c 20 64 69 66 66 65 72 65 6e 63 ow all differenc
4160: 65 73 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 es for a particu
4170: 6c 61 72 20 63 68 65 63 6b 2d 69 6e 2e 0a 2a 2f lar check-in..*/
4180: 0a 76 6f 69 64 20 76 64 69 66 66 5f 70 61 67 65 .void vdiff_page
4190: 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 (void){. int ri
41a0: 64 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 63 d;. Stmt q;. c
41b0: 68 61 72 20 2a 7a 55 75 69 64 3b 0a 0a 20 20 6c har *zUuid;.. l
41c0: 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 ogin_check_crede
41d0: 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 ntials();. if(
41e0: 21 67 2e 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 !g.okRead ){ log
41f0: 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 in_needed(); ret
4200: 75 72 6e 3b 20 7d 0a 20 20 6c 6f 67 69 6e 5f 61 urn; }. login_a
4210: 6e 6f 6e 79 6d 6f 75 73 5f 61 76 61 69 6c 61 62 nonymous_availab
4220: 6c 65 28 29 3b 0a 0a 20 20 72 69 64 20 3d 20 6e le();.. rid = n
4230: 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e ame_to_rid(PD("n
4240: 61 6d 65 22 2c 22 22 29 29 3b 0a 20 20 69 66 28 ame",""));. if(
4250: 20 72 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 66 rid==0 ){. f
4260: 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 ossil_redirect_h
4270: 6f 6d 65 28 29 3b 0a 20 20 7d 0a 20 20 7a 55 75 ome();. }. zUu
4280: 69 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 id = db_text(0,
4290: 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f "SELECT uuid FRO
42a0: 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 M blob WHERE rid
42b0: 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 73 74 =%d", rid);. st
42c0: 79 6c 65 5f 68 65 61 64 65 72 28 22 43 68 65 63 yle_header("Chec
42d0: 6b 2d 69 6e 20 5b 25 2e 31 30 73 5d 22 2c 20 7a k-in [%.10s]", z
42e0: 55 75 69 64 29 3b 0a 20 20 64 62 5f 70 72 65 70 Uuid);. db_prep
42f0: 61 72 65 28 26 71 2c 0a 20 20 20 20 22 53 45 4c are(&q,. "SEL
4300: 45 43 54 20 64 61 74 65 74 69 6d 65 28 6d 74 69 ECT datetime(mti
4310: 6d 65 29 2c 20 22 0a 20 20 20 20 22 20 20 20 20 me), ". "
4320: 20 20 20 63 6f 61 6c 65 73 63 65 28 65 76 65 6e coalesce(even
4330: 74 2e 65 63 6f 6d 6d 65 6e 74 2c 65 76 65 6e 74 t.ecomment,event
4340: 2e 63 6f 6d 6d 65 6e 74 29 2c 22 0a 20 20 20 20 .comment),".
4350: 22 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 " coalesce
4360: 28 65 76 65 6e 74 2e 65 75 73 65 72 2c 65 76 65 (event.euser,eve
4370: 6e 74 2e 75 73 65 72 29 22 0a 20 20 20 20 22 20 nt.user)". "
4380: 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 FROM event WHER
4390: 45 20 74 79 70 65 3d 27 63 69 27 20 41 4e 44 20 E type='ci' AND
43a0: 6f 62 6a 69 64 3d 25 64 22 2c 0a 20 20 20 20 72 objid=%d",. r
43b0: 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 id. );. while(
43c0: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
43d0: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
43e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 const char *zDat
43f0: 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 e = db_column_te
4400: 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 xt(&q, 0);. c
4410: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 onst char *zUser
4420: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
4430: 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f t(&q, 2);. co
4440: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 nst char *zComme
4450: 6e 74 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 nt = db_column_t
4460: 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 ext(&q, 1);.
4470: 40 20 3c 68 32 3e 43 68 65 63 6b 2d 69 6e 20 25 @ <h2>Check-in %
4480: 73 28 7a 55 75 69 64 29 3c 2f 68 32 3e 0a 20 20 s(zUuid)</h2>.
4490: 20 20 40 20 3c 70 3e 4d 61 64 65 20 62 79 0a 20 @ <p>Made by.
44a0: 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f hyperlink_to_
44b0: 75 73 65 72 28 7a 55 73 65 72 2c 7a 44 61 74 65 user(zUser,zDate
44c0: 2c 22 20 6f 6e 22 29 3b 0a 20 20 20 20 68 79 70 ," on");. hyp
44d0: 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a erlink_to_date(z
44e0: 44 61 74 65 2c 20 22 3a 22 29 3b 0a 20 20 20 20 Date, ":");.
44f0: 40 20 25 77 28 7a 43 6f 6d 6d 65 6e 74 29 2e 20 @ %w(zComment).
4500: 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 <a href="%s(g.zB
4510: 61 73 65 55 52 4c 29 2f 63 69 2f 25 73 28 7a 55 aseURL)/ci/%s(zU
4520: 75 69 64 29 22 3e 5b 64 65 74 61 69 6c 73 5d 3c uid)">[details]<
4530: 2f 61 3e 3c 2f 70 3e 0a 20 20 20 20 40 20 3c 68 /a></p>. @ <h
4540: 72 3e 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 r>. }. db_fina
4550: 6c 69 7a 65 28 26 71 29 3b 0a 20 20 64 62 5f 70 lize(&q);. db_p
4560: 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 20 repare(&q,.
4570: 22 53 45 4c 45 43 54 20 70 69 64 2c 20 66 69 64 "SELECT pid, fid
4580: 2c 20 6e 61 6d 65 22 0a 20 20 20 20 20 22 20 20 , name". "
4590: 46 52 4f 4d 20 6d 6c 69 6e 6b 2c 20 66 69 6c 65 FROM mlink, file
45a0: 6e 61 6d 65 22 0a 20 20 20 20 20 22 20 57 48 45 name". " WHE
45b0: 52 45 20 6d 6c 69 6e 6b 2e 6d 69 64 3d 25 64 22 RE mlink.mid=%d"
45c0: 0a 20 20 20 20 20 22 20 20 20 41 4e 44 20 66 69 . " AND fi
45d0: 6c 65 6e 61 6d 65 2e 66 6e 69 64 3d 6d 6c 69 6e lename.fnid=mlin
45e0: 6b 2e 66 6e 69 64 22 0a 20 20 20 20 20 22 20 4f k.fnid". " O
45f0: 52 44 45 52 20 42 59 20 6e 61 6d 65 22 2c 0a 20 RDER BY name",.
4600: 20 20 20 20 72 69 64 0a 20 20 29 3b 0a 20 20 77 rid. );. w
4610: 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 hile( db_step(&q
4620: 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b )==SQLITE_ROW ){
4630: 0a 20 20 20 20 69 6e 74 20 70 69 64 20 3d 20 64 . int pid = d
4640: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c b_column_int(&q,
4650: 30 29 3b 0a 20 20 20 20 69 6e 74 20 66 69 64 20 0);. int fid
4660: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 = db_column_int(
4670: 26 71 2c 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 &q,1);. const
4680: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 char *zName = d
4690: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
46a0: 2c 32 29 3b 0a 20 20 20 20 40 20 3c 70 3e 3c 61 ,2);. @ <p><a
46b0: 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 href="%s(g.zBas
46c0: 65 55 52 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 eURL)/finfo?name
46d0: 3d 25 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 7a =%T(zName)">%h(z
46e0: 4e 61 6d 65 29 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 Name)</a></p>.
46f0: 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e @ <blockquote>
4700: 3c 70 72 65 3e 0a 20 20 20 20 61 70 70 65 6e 64 <pre>. append
4710: 5f 64 69 66 66 28 70 69 64 2c 20 66 69 64 29 3b _diff(pid, fid);
4720: 0a 20 20 20 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 . @ </pre></b
4730: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 7d 0a 20 lockquote>. }.
4740: 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 db_finalize(&q)
4750: 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 ;. style_footer
4760: 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 ();.}../*.** Wri
4770: 74 65 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e te a description
4780: 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 6f of an object to
4790: 20 74 68 65 20 77 77 77 20 72 65 70 6c 79 2e 0a the www reply..
47a0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6f 62 6a **.** If the obj
47b0: 65 63 74 20 69 73 20 61 20 66 69 6c 65 20 74 68 ect is a file th
47c0: 65 6e 20 6d 65 6e 74 69 6f 6e 3a 0a 2a 2a 0a 2a en mention:.**.*
47d0: 2a 20 20 20 20 20 2a 20 49 74 27 73 20 61 72 74 * * It's art
47e0: 69 66 61 63 74 20 49 44 0a 2a 2a 20 20 20 20 20 ifact ID.**
47f0: 2a 20 41 6c 6c 20 69 74 73 20 66 69 6c 65 6e 61 * All its filena
4800: 6d 65 73 0a 2a 2a 20 20 20 20 20 2a 20 54 68 65 mes.** * The
4810: 20 63 68 65 63 6b 2d 69 6e 20 69 74 20 77 61 73 check-in it was
4820: 20 70 61 72 74 20 6f 66 2c 20 77 69 74 68 20 74 part of, with t
4830: 69 6d 65 73 20 61 6e 64 20 75 73 65 72 73 0a 2a imes and users.*
4840: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6f 62 6a 65 *.** If the obje
4850: 63 74 20 69 73 20 61 20 6d 61 6e 69 66 65 73 74 ct is a manifest
4860: 2c 20 74 68 65 6e 20 6d 65 6e 74 69 6f 6e 3a 0a , then mention:.
4870: 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 49 74 27 73 **.** * It's
4880: 20 61 72 74 69 66 61 63 74 20 49 44 0a 2a 2a 20 artifact ID.**
4890: 20 20 20 20 2a 20 64 61 74 65 20 6f 66 20 63 68 * date of ch
48a0: 65 63 6b 2d 69 6e 0a 2a 2a 20 20 20 20 20 2a 20 eck-in.** *
48b0: 43 6f 6d 6d 65 6e 74 20 26 20 75 73 65 72 0a 2a Comment & user.*
48c0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 62 /.static void ob
48d0: 6a 65 63 74 5f 64 65 73 63 72 69 70 74 69 6f 6e ject_description
48e0: 28 0a 20 20 69 6e 74 20 72 69 64 2c 20 20 20 20 (. int rid,
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
4900: 54 68 65 20 61 72 74 69 66 61 63 74 20 49 44 20 The artifact ID
4910: 2a 2f 0a 20 20 69 6e 74 20 6c 69 6e 6b 54 6f 56 */. int linkToV
4920: 69 65 77 2c 20 20 20 20 20 20 20 20 20 20 2f 2a iew, /*
4930: 20 41 64 64 20 76 69 65 77 65 72 20 6c 69 6e 6b Add viewer link
4940: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 42 6c if true */. Bl
4950: 6f 62 20 2a 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d ob *pDownloadNam
4960: 65 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 77 e /* Fill w
4970: 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 ith an appropria
4980: 74 65 20 64 6f 77 6e 6c 6f 61 64 20 6e 61 6d 65 te download name
4990: 20 2a 2f 0a 29 7b 0a 20 20 53 74 6d 74 20 71 3b */.){. Stmt q;
49a0: 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a . int cnt = 0;.
49b0: 20 20 69 6e 74 20 6e 57 69 6b 69 20 3d 20 30 3b int nWiki = 0;
49c0: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 . db_prepare(&q
49d0: 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 20 66 69 ,. "SELECT fi
49e0: 6c 65 6e 61 6d 65 2e 6e 61 6d 65 2c 20 64 61 74 lename.name, dat
49f0: 65 74 69 6d 65 28 65 76 65 6e 74 2e 6d 74 69 6d etime(event.mtim
4a00: 65 29 2c 20 73 75 62 73 74 72 28 61 2e 75 75 69 e), substr(a.uui
4a10: 64 2c 31 2c 31 30 29 2c 22 0a 20 20 20 20 22 20 d,1,10),". "
4a20: 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65 coalesce(e
4a30: 76 65 6e 74 2e 65 63 6f 6d 6d 65 6e 74 2c 65 76 vent.ecomment,ev
4a40: 65 6e 74 2e 63 6f 6d 6d 65 6e 74 29 2c 22 0a 20 ent.comment),".
4a50: 20 20 20 22 20 20 20 20 20 20 20 63 6f 61 6c 65 " coale
4a60: 73 63 65 28 65 76 65 6e 74 2e 65 75 73 65 72 2c sce(event.euser,
4a70: 65 76 65 6e 74 2e 75 73 65 72 29 2c 22 0a 20 20 event.user),".
4a80: 20 20 22 20 20 20 20 20 20 20 62 2e 75 75 69 64 " b.uuid
4a90: 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20 6d 6c ". " FROM ml
4aa0: 69 6e 6b 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 65 ink, filename, e
4ab0: 76 65 6e 74 2c 20 62 6c 6f 62 20 61 2c 20 62 6c vent, blob a, bl
4ac0: 6f 62 20 62 22 0a 20 20 20 20 22 20 57 48 45 52 ob b". " WHER
4ad0: 45 20 66 69 6c 65 6e 61 6d 65 2e 66 6e 69 64 3d E filename.fnid=
4ae0: 6d 6c 69 6e 6b 2e 66 6e 69 64 22 0a 20 20 20 20 mlink.fnid".
4af0: 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 " AND event.ob
4b00: 6a 69 64 3d 6d 6c 69 6e 6b 2e 6d 69 64 22 0a 20 jid=mlink.mid".
4b10: 20 20 20 22 20 20 20 41 4e 44 20 61 2e 72 69 64 " AND a.rid
4b20: 3d 6d 6c 69 6e 6b 2e 66 69 64 22 0a 20 20 20 20 =mlink.fid".
4b30: 22 20 20 20 41 4e 44 20 62 2e 72 69 64 3d 6d 6c " AND b.rid=ml
4b40: 69 6e 6b 2e 6d 69 64 22 0a 20 20 20 20 22 20 20 ink.mid". "
4b50: 20 41 4e 44 20 6d 6c 69 6e 6b 2e 66 69 64 3d 25 AND mlink.fid=%
4b60: 64 22 2c 0a 20 20 20 20 72 69 64 0a 20 20 29 3b d",. rid. );
4b70: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 . while( db_ste
4b80: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
4b90: 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 W ){. const c
4ba0: 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f har *zName = db_
4bb0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
4bc0: 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 0);. const ch
4bd0: 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 ar *zDate = db_c
4be0: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 olumn_text(&q, 1
4bf0: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
4c00: 72 20 2a 7a 46 75 75 69 64 20 3d 20 64 62 5f 63 r *zFuuid = db_c
4c10: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 olumn_text(&q, 2
4c20: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
4c30: 72 20 2a 7a 43 6f 6d 20 3d 20 64 62 5f 63 6f 6c r *zCom = db_col
4c40: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 3b umn_text(&q, 3);
4c50: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
4c60: 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c 75 *zUser = db_colu
4c70: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 34 29 3b 0a mn_text(&q, 4);.
4c80: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
4c90: 7a 56 65 72 73 20 3d 20 64 62 5f 63 6f 6c 75 6d zVers = db_colum
4ca0: 6e 5f 74 65 78 74 28 26 71 2c 20 35 29 3b 0a 20 n_text(&q, 5);.
4cb0: 20 20 20 69 66 28 20 63 6e 74 3e 30 20 29 7b 0a if( cnt>0 ){.
4cc0: 20 20 20 20 20 20 40 20 41 6c 73 6f 20 66 69 6c @ Also fil
4cd0: 65 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 e. }else{.
4ce0: 20 20 20 40 20 46 69 6c 65 0a 20 20 20 20 7d 0a @ File. }.
4cf0: 20 20 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 @ <a href="%
4d00: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 69 s(g.zBaseURL)/fi
4d10: 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 6d nfo?name=%T(zNam
4d20: 65 29 22 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f 61 e)">%h(zName)</a
4d30: 3e 0a 20 20 20 20 40 20 61 72 74 69 66 61 63 74 >. @ artifact
4d40: 20 25 73 28 7a 46 75 75 69 64 29 20 70 61 72 74 %s(zFuuid) part
4d50: 20 6f 66 20 63 68 65 63 6b 2d 69 6e 0a 20 20 20 of check-in.
4d60: 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 75 hyperlink_to_uu
4d70: 69 64 28 7a 56 65 72 73 29 3b 0a 20 20 20 20 40 id(zVers);. @
4d80: 20 2d 20 25 77 28 7a 43 6f 6d 29 20 62 79 20 0a - %w(zCom) by .
4d90: 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f hyperlink_to
4da0: 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a 44 61 74 _user(zUser,zDat
4db0: 65 2c 22 20 6f 6e 22 29 3b 0a 20 20 20 20 68 79 e," on");. hy
4dc0: 70 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 perlink_to_date(
4dd0: 7a 44 61 74 65 2c 22 2e 22 29 3b 0a 20 20 20 20 zDate,".");.
4de0: 63 6e 74 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 cnt++;. if( p
4df0: 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 26 26 20 DownloadName &&
4e00: 62 6c 6f 62 5f 73 69 7a 65 28 70 44 6f 77 6e 6c blob_size(pDownl
4e10: 6f 61 64 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 oadName)==0 ){.
4e20: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 blob_append
4e30: 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 2c 20 (pDownloadName,
4e40: 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 zName, -1);.
4e50: 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c }. }. db_final
4e60: 69 7a 65 28 26 71 29 3b 0a 20 20 64 62 5f 70 72 ize(&q);. db_pr
4e70: 65 70 61 72 65 28 26 71 2c 20 0a 20 20 20 20 22 epare(&q, . "
4e80: 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 61 SELECT substr(ta
4e90: 67 6e 61 6d 65 2c 20 36 2c 20 31 30 30 30 30 29 gname, 6, 10000)
4ea0: 2c 20 64 61 74 65 74 69 6d 65 28 65 76 65 6e 74 , datetime(event
4eb0: 2e 6d 74 69 6d 65 29 2c 22 0a 20 20 20 20 22 20 .mtime),". "
4ec0: 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65 coalesce(e
4ed0: 76 65 6e 74 2e 65 75 73 65 72 2c 20 65 76 65 6e vent.euser, even
4ee0: 74 2e 75 73 65 72 29 2c 20 75 75 69 64 22 0a 20 t.user), uuid".
4ef0: 20 20 20 22 20 20 46 52 4f 4d 20 74 61 67 78 72 " FROM tagxr
4f00: 65 66 2c 20 74 61 67 2c 20 65 76 65 6e 74 2c 20 ef, tag, event,
4f10: 62 6c 6f 62 22 0a 20 20 20 20 22 20 57 48 45 52 blob". " WHER
4f20: 45 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 64 E tagxref.rid=%d
4f30: 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 74 61 ". " AND ta
4f40: 67 2e 74 61 67 69 64 3d 74 61 67 78 72 65 66 2e g.tagid=tagxref.
4f50: 74 61 67 69 64 22 20 0a 20 20 20 20 22 20 20 20 tagid" . "
4f60: 41 4e 44 20 74 61 67 2e 74 61 67 6e 61 6d 65 20 AND tag.tagname
4f70: 4c 49 4b 45 20 27 77 69 6b 69 2d 25 25 27 22 0a LIKE 'wiki-%%'".
4f80: 20 20 20 20 22 20 20 20 41 4e 44 20 65 76 65 6e " AND even
4f90: 74 2e 6f 62 6a 69 64 3d 74 61 67 78 72 65 66 2e t.objid=tagxref.
4fa0: 72 69 64 22 0a 20 20 20 20 22 20 20 20 41 4e 44 rid". " AND
4fb0: 20 62 6c 6f 62 2e 72 69 64 3d 74 61 67 78 72 65 blob.rid=tagxre
4fc0: 66 2e 72 69 64 22 2c 0a 20 20 20 20 72 69 64 0a f.rid",. rid.
4fd0: 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 );. while( db
4fe0: 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 _step(&q)==SQLIT
4ff0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e E_ROW ){. con
5000: 73 74 20 63 68 61 72 20 2a 7a 50 61 67 65 6e 61 st char *zPagena
5010: 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 me = db_column_t
5020: 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 ext(&q, 0);.
5030: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 const char *zDat
5040: 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 e = db_column_te
5050: 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 xt(&q, 1);. c
5060: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 onst char *zUser
5070: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
5080: 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f t(&q, 2);. co
5090: 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 20 nst char *zUuid
50a0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
50b0: 28 26 71 2c 20 33 29 3b 0a 20 20 20 20 69 66 28 (&q, 3);. if(
50c0: 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 cnt>0 ){.
50d0: 40 20 41 6c 73 6f 20 77 69 6b 69 20 70 61 67 65 @ Also wiki page
50e0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
50f0: 20 20 40 20 57 69 6b 69 20 70 61 67 65 0a 20 20 @ Wiki page.
5100: 20 20 7d 0a 20 20 20 20 40 20 5b 3c 61 20 68 72 }. @ [<a hr
5110: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
5120: 4c 29 2f 77 69 6b 69 3f 6e 61 6d 65 3d 25 74 28 L)/wiki?name=%t(
5130: 7a 50 61 67 65 6e 61 6d 65 29 22 3e 25 68 28 7a zPagename)">%h(z
5140: 50 61 67 65 6e 61 6d 65 29 3c 2f 61 3e 5d 0a 20 Pagename)</a>].
5150: 20 20 20 40 20 61 72 74 69 66 61 63 74 20 25 73 @ artifact %s
5160: 28 7a 55 75 69 64 29 20 62 79 0a 20 20 20 20 68 (zUuid) by. h
5170: 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 yperlink_to_user
5180: 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 20 6f (zUser,zDate," o
5190: 6e 22 29 3b 0a 20 20 20 20 68 79 70 65 72 6c 69 n");. hyperli
51a0: 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 61 74 65 nk_to_date(zDate
51b0: 2c 22 2e 22 29 3b 0a 20 20 20 20 6e 57 69 6b 69 ,".");. nWiki
51c0: 2b 2b 3b 0a 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 ++;. cnt++;.
51d0: 20 20 20 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 if( pDownload
51e0: 4e 61 6d 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a Name && blob_siz
51f0: 65 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 e(pDownloadName)
5200: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f ==0 ){. blo
5210: 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c 6f b_append(pDownlo
5220: 61 64 4e 61 6d 65 2c 20 7a 50 61 67 65 6e 61 6d adName, zPagenam
5230: 65 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20 e, -1);. }.
5240: 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 }. db_finalize(
5250: 26 71 29 3b 0a 20 20 69 66 28 20 6e 57 69 6b 69 &q);. if( nWiki
5260: 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 5f 70 72 ==0 ){. db_pr
5270: 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 20 20 epare(&q,.
5280: 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 "SELECT datetime
5290: 28 6d 74 69 6d 65 29 2c 20 75 73 65 72 2c 20 63 (mtime), user, c
52a0: 6f 6d 6d 65 6e 74 2c 20 75 75 69 64 2c 20 74 79 omment, uuid, ty
52b0: 70 65 22 0a 20 20 20 20 20 20 22 20 20 46 52 4f pe". " FRO
52c0: 4d 20 65 76 65 6e 74 2c 20 62 6c 6f 62 22 0a 20 M event, blob".
52d0: 20 20 20 20 20 22 20 57 48 45 52 45 20 65 76 65 " WHERE eve
52e0: 6e 74 2e 6f 62 6a 69 64 3d 25 64 22 0a 20 20 20 nt.objid=%d".
52f0: 20 20 20 22 20 20 20 41 4e 44 20 62 6c 6f 62 2e " AND blob.
5300: 72 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 20 72 rid=%d",. r
5310: 69 64 2c 20 72 69 64 0a 20 20 20 20 29 3b 0a 20 id, rid. );.
5320: 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 while( db_ste
5330: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
5340: 57 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 W ){. const
5350: 20 63 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 char *zDate = d
5360: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
5370: 2c 20 30 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 , 0);. cons
5380: 74 20 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 t char *zUuid =
5390: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
53a0: 71 2c 20 33 29 3b 0a 20 20 20 20 20 20 63 6f 6e q, 3);. con
53b0: 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 3d st char *zUser =
53c0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
53d0: 26 71 2c 20 31 29 3b 0a 20 20 20 20 20 20 63 6f &q, 1);. co
53e0: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 20 3d nst char *zCom =
53f0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
5400: 26 71 2c 20 32 29 3b 0a 20 20 20 20 20 20 63 6f &q, 2);. co
5410: 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 20 nst char *zType
5420: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
5430: 28 26 71 2c 20 34 29 3b 0a 20 20 20 20 20 20 69 (&q, 4);. i
5440: 66 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 f( cnt>0 ){.
5450: 20 20 20 20 40 20 41 6c 73 6f 0a 20 20 20 20 20 @ Also.
5460: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 54 79 }. if( zTy
5470: 70 65 5b 30 5d 3d 3d 27 77 27 20 29 7b 0a 20 20 pe[0]=='w' ){.
5480: 20 20 20 20 20 20 40 20 57 69 6b 69 20 65 64 69 @ Wiki edi
5490: 74 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 t. }else if
54a0: 28 20 7a 54 79 70 65 5b 30 5d 3d 3d 27 74 27 20 ( zType[0]=='t'
54b0: 29 7b 0a 20 20 20 20 20 20 20 20 40 20 54 69 63 ){. @ Tic
54c0: 6b 65 74 20 63 68 61 6e 67 65 0a 20 20 20 20 20 ket change.
54d0: 20 7d 65 6c 73 65 20 69 66 28 20 7a 54 79 70 65 }else if( zType
54e0: 5b 30 5d 3d 3d 27 63 27 20 29 7b 0a 20 20 20 20 [0]=='c' ){.
54f0: 20 20 20 20 40 20 4d 61 6e 69 66 65 73 74 20 6f @ Manifest o
5500: 66 20 63 68 65 63 6b 2d 69 6e 0a 20 20 20 20 20 f check-in.
5510: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 }else{.
5520: 40 20 43 6f 6e 74 72 6f 6c 20 66 69 6c 65 20 72 @ Control file r
5530: 65 66 65 72 65 6e 63 69 6e 67 0a 20 20 20 20 20 eferencing.
5540: 20 7d 0a 20 20 20 20 20 20 68 79 70 65 72 6c 69 }. hyperli
5550: 6e 6b 5f 74 6f 5f 75 75 69 64 28 7a 55 75 69 64 nk_to_uuid(zUuid
5560: 29 3b 0a 20 20 20 20 20 20 40 20 2d 20 25 77 28 );. @ - %w(
5570: 7a 43 6f 6d 29 20 62 79 0a 20 20 20 20 20 20 68 zCom) by. h
5580: 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 yperlink_to_user
5590: 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 20 6f (zUser,zDate," o
55a0: 6e 22 29 3b 0a 20 20 20 20 20 20 68 79 70 65 72 n");. hyper
55b0: 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 61 link_to_date(zDa
55c0: 74 65 2c 20 22 2e 22 29 3b 0a 20 20 20 20 20 20 te, ".");.
55d0: 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d if( pDownloadNam
55e0: 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a 65 28 70 e && blob_size(p
55f0: 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3d 3d 30 DownloadName)==0
5600: 20 29 7b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 ){. blob
5610: 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c 6f 61 _append(pDownloa
5620: 64 4e 61 6d 65 2c 20 7a 55 75 69 64 2c 20 2d 31 dName, zUuid, -1
5630: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 );. }.
5640: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 cnt++;. }.
5650: 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 db_finalize(&q
5660: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 6e 74 );. }. if( cnt
5670: 3d 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 72 20 ==0 ){. char
5680: 2a 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 *zUuid = db_text
5690: 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 (0, "SELECT uuid
56a0: 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 FROM blob WHERE
56b0: 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a rid=%d", rid);.
56c0: 20 20 20 20 40 20 43 6f 6e 74 72 6f 6c 20 66 69 @ Control fi
56d0: 6c 65 20 25 73 28 7a 55 75 69 64 29 2e 0a 20 20 le %s(zUuid)..
56e0: 20 20 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 4e if( pDownloadN
56f0: 61 6d 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a 65 ame && blob_size
5700: 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3d (pDownloadName)=
5710: 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 =0 ){. blob
5720: 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c 6f 61 _append(pDownloa
5730: 64 4e 61 6d 65 2c 20 7a 55 75 69 64 2c 20 2d 31 dName, zUuid, -1
5740: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 );. }. }else
5750: 20 69 66 28 20 6c 69 6e 6b 54 6f 56 69 65 77 20 if( linkToView
5760: 29 7b 0a 20 20 20 20 40 20 3c 61 20 68 72 65 66 ){. @ <a href
5770: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
5780: 2f 61 72 74 69 66 61 63 74 2f 25 64 28 72 69 64 /artifact/%d(rid
5790: 29 22 3e 5b 76 69 65 77 5d 3c 2f 61 3e 0a 20 20 )">[view]</a>.
57a0: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 }.}.../*.** WEBP
57b0: 41 47 45 3a 20 66 64 69 66 66 0a 2a 2a 0a 2a 2a AGE: fdiff.**.**
57c0: 20 54 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20 Two arguments,
57d0: 76 31 20 61 6e 64 20 76 32 2c 20 61 72 65 20 69 v1 and v2, are i
57e0: 6e 74 65 67 65 72 73 2e 20 20 53 68 6f 77 20 74 ntegers. Show t
57f0: 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 he difference be
5800: 74 77 65 65 6e 0a 2a 2a 20 74 68 65 20 74 77 6f tween.** the two
5810: 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 76 6f 69 records..*/.voi
5820: 64 20 64 69 66 66 5f 70 61 67 65 28 76 6f 69 64 d diff_page(void
5830: 29 7b 0a 20 20 69 6e 74 20 76 31 20 3d 20 6e 61 ){. int v1 = na
5840: 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 76 31 me_to_rid(PD("v1
5850: 22 2c 22 30 22 29 29 3b 0a 20 20 69 6e 74 20 76 ","0"));. int v
5860: 32 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 2 = name_to_rid(
5870: 50 44 28 22 76 32 22 2c 22 30 22 29 29 3b 0a 20 PD("v2","0"));.
5880: 20 42 6c 6f 62 20 63 31 2c 20 63 32 2c 20 64 69 Blob c1, c2, di
5890: 66 66 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 ff;.. login_che
58a0: 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 ck_credentials()
58b0: 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 65 61 ;. if( !g.okRea
58c0: 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 d ){ login_neede
58d0: 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 d(); return; }.
58e0: 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 44 style_header("D
58f0: 69 66 66 22 29 3b 0a 20 20 40 20 3c 68 32 3e 44 iff");. @ <h2>D
5900: 69 66 66 65 72 65 6e 63 65 73 20 46 72 6f 6d 3a ifferences From:
5910: 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 6c 6f 63 6b </h2>. @ <block
5920: 71 75 6f 74 65 3e 0a 20 20 6f 62 6a 65 63 74 5f quote>. object_
5930: 64 65 73 63 72 69 70 74 69 6f 6e 28 76 31 2c 20 description(v1,
5940: 31 2c 20 30 29 3b 0a 20 20 40 20 3c 2f 62 6c 6f 1, 0);. @ </blo
5950: 63 6b 71 75 6f 74 65 3e 0a 20 20 40 20 3c 68 32 ckquote>. @ <h2
5960: 3e 54 6f 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 >To:</h2>. @ <b
5970: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 6f 62 6a lockquote>. obj
5980: 65 63 74 5f 64 65 73 63 72 69 70 74 69 6f 6e 28 ect_description(
5990: 76 32 2c 20 31 2c 20 30 29 3b 0a 20 20 40 20 3c v2, 1, 0);. @ <
59a0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 /blockquote>. @
59b0: 20 3c 68 72 3e 0a 20 20 40 20 3c 62 6c 6f 63 6b <hr>. @ <block
59c0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 63 6f quote><pre>. co
59d0: 6e 74 65 6e 74 5f 67 65 74 28 76 31 2c 20 26 63 ntent_get(v1, &c
59e0: 31 29 3b 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 1);. content_ge
59f0: 74 28 76 32 2c 20 26 63 32 29 3b 0a 20 20 62 6c t(v2, &c2);. bl
5a00: 6f 62 5f 7a 65 72 6f 28 26 64 69 66 66 29 3b 0a ob_zero(&diff);.
5a10: 20 20 74 65 78 74 5f 64 69 66 66 28 26 63 31 2c text_diff(&c1,
5a20: 20 26 63 32 2c 20 26 64 69 66 66 2c 20 34 29 3b &c2, &diff, 4);
5a30: 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 63 . blob_reset(&c
5a40: 31 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 1);. blob_reset
5a50: 28 26 63 32 29 3b 0a 20 20 40 20 25 68 28 62 6c (&c2);. @ %h(bl
5a60: 6f 62 5f 73 74 72 28 26 64 69 66 66 29 29 0a 20 ob_str(&diff)).
5a70: 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b @ </pre></block
5a80: 71 75 6f 74 65 3e 0a 20 20 62 6c 6f 62 5f 72 65 quote>. blob_re
5a90: 73 65 74 28 26 64 69 66 66 29 3b 0a 20 20 73 74 set(&diff);. st
5aa0: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a yle_footer();.}.
5ab0: 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 ./*.** WEBPAGE:
5ac0: 72 61 77 0a 2a 2a 20 55 52 4c 3a 20 2f 72 61 77 raw.** URL: /raw
5ad0: 3f 6e 61 6d 65 3d 41 52 54 49 46 41 43 54 49 44 ?name=ARTIFACTID
5ae0: 26 6d 3d 54 59 50 45 0a 2a 2a 20 0a 2a 2a 20 52 &m=TYPE.** .** R
5af0: 65 74 75 72 6e 20 74 68 65 20 75 6e 69 6e 74 65 eturn the uninte
5b00: 72 70 72 65 74 65 64 20 63 6f 6e 74 65 6e 74 20 rpreted content
5b10: 6f 66 20 61 6e 20 61 72 74 69 66 61 63 74 2e 20 of an artifact.
5b20: 20 55 73 65 64 20 70 72 69 6d 61 72 69 6c 79 0a Used primarily.
5b30: 2a 2a 20 74 6f 20 76 69 65 77 20 61 72 74 69 66 ** to view artif
5b40: 61 63 74 73 20 74 68 61 74 20 61 72 65 20 69 6d acts that are im
5b50: 61 67 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 72 61 ages..*/.void ra
5b60: 77 61 72 74 69 66 61 63 74 5f 70 61 67 65 28 76 wartifact_page(v
5b70: 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 3b oid){. int rid;
5b80: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
5b90: 4d 69 6d 65 3b 0a 20 20 42 6c 6f 62 20 63 6f 6e Mime;. Blob con
5ba0: 74 65 6e 74 3b 0a 0a 20 20 72 69 64 20 3d 20 6e tent;.. rid = n
5bb0: 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e ame_to_rid(PD("n
5bc0: 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 20 7a 4d ame","0"));. zM
5bd0: 69 6d 65 20 3d 20 50 44 28 22 6d 22 2c 22 61 70 ime = PD("m","ap
5be0: 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 66 6f 73 73 plication/x-foss
5bf0: 69 6c 2d 61 72 74 69 66 61 63 74 22 29 3b 0a 20 il-artifact");.
5c00: 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 login_check_cre
5c10: 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 dentials();. if
5c20: 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b 20 6c ( !g.okRead ){ l
5c30: 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 ogin_needed(); r
5c40: 65 74 75 72 6e 3b 20 7d 0a 20 20 69 66 28 20 72 eturn; }. if( r
5c50: 69 64 3d 3d 30 20 29 7b 20 63 67 69 5f 72 65 64 id==0 ){ cgi_red
5c60: 69 72 65 63 74 28 22 2f 68 6f 6d 65 22 29 3b 20 irect("/home");
5c70: 7d 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 }. content_get(
5c80: 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a rid, &content);.
5c90: 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65 6e cgi_set_conten
5ca0: 74 5f 74 79 70 65 28 7a 4d 69 6d 65 29 3b 0a 20 t_type(zMime);.
5cb0: 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65 6e 74 cgi_set_content
5cc0: 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 7d 0a 0a 2f (&content);.}../
5cd0: 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 61 20 68 65 *.** Render a he
5ce0: 78 20 64 75 6d 70 20 6f 66 20 61 20 66 69 6c 65 x dump of a file
5cf0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 ..*/.static void
5d00: 20 68 65 78 64 75 6d 70 28 42 6c 6f 62 20 2a 70 hexdump(Blob *p
5d10: 42 6c 6f 62 29 7b 0a 20 20 63 6f 6e 73 74 20 75 Blob){. const u
5d20: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 78 3b nsigned char *x;
5d30: 0a 20 20 69 6e 74 20 6e 2c 20 69 2c 20 6a 2c 20 . int n, i, j,
5d40: 6b 3b 0a 20 20 63 68 61 72 20 7a 4c 69 6e 65 5b k;. char zLine[
5d50: 31 30 30 5d 3b 0a 20 20 73 74 61 74 69 63 20 63 100];. static c
5d60: 6f 6e 73 74 20 63 68 61 72 20 7a 48 65 78 5b 5d onst char zHex[]
5d70: 20 3d 20 22 30 31 32 33 34 35 36 37 38 39 61 62 = "0123456789ab
5d80: 63 64 65 66 22 3b 0a 0a 20 20 78 20 3d 20 28 63 cdef";.. x = (c
5d90: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 onst unsigned ch
5da0: 61 72 2a 29 62 6c 6f 62 5f 62 75 66 66 65 72 28 ar*)blob_buffer(
5db0: 70 42 6c 6f 62 29 3b 0a 20 20 6e 20 3d 20 62 6c pBlob);. n = bl
5dc0: 6f 62 5f 73 69 7a 65 28 70 42 6c 6f 62 29 3b 0a ob_size(pBlob);.
5dd0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 for(i=0; i<n;
5de0: 69 2b 3d 31 36 29 7b 0a 20 20 20 20 6a 20 3d 20 i+=16){. j =
5df0: 30 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 30 5d 20 0;. zLine[0]
5e00: 3d 20 7a 48 65 78 5b 28 69 3e 3e 32 34 29 26 30 = zHex[(i>>24)&0
5e10: 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 31 xf];. zLine[1
5e20: 5d 20 3d 20 7a 48 65 78 5b 28 69 3e 3e 31 36 29 ] = zHex[(i>>16)
5e30: 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 &0xf];. zLine
5e40: 5b 32 5d 20 3d 20 7a 48 65 78 5b 28 69 3e 3e 38 [2] = zHex[(i>>8
5e50: 29 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e )&0xf];. zLin
5e60: 65 5b 33 5d 20 3d 20 7a 48 65 78 5b 69 26 30 78 e[3] = zHex[i&0x
5e70: 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 34 5d f];. zLine[4]
5e80: 20 3d 20 27 3a 27 3b 0a 20 20 20 20 73 70 72 69 = ':';. spri
5e90: 6e 74 66 28 7a 4c 69 6e 65 2c 20 22 25 30 34 78 ntf(zLine, "%04x
5ea0: 3a 20 22 2c 20 69 29 3b 0a 20 20 20 20 66 6f 72 : ", i);. for
5eb0: 28 6a 3d 30 3b 20 6a 3c 31 36 3b 20 6a 2b 2b 29 (j=0; j<16; j++)
5ec0: 7b 0a 20 20 20 20 20 20 6b 20 3d 20 35 2b 6a 2a {. k = 5+j*
5ed0: 33 3b 0a 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 3;. zLine[k
5ee0: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 69 ] = ' ';. i
5ef0: 66 28 20 69 2b 6a 3c 6e 20 29 7b 0a 20 20 20 20 f( i+j<n ){.
5f00: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 unsigned cha
5f10: 72 20 63 20 3d 20 78 5b 69 2b 6a 5d 3b 0a 20 20 r c = x[i+j];.
5f20: 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 2b 31 5d zLine[k+1]
5f30: 20 3d 20 7a 48 65 78 5b 63 3e 3e 34 5d 3b 0a 20 = zHex[c>>4];.
5f40: 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 2b 32 zLine[k+2
5f50: 5d 20 3d 20 7a 48 65 78 5b 63 26 30 78 66 5d 3b ] = zHex[c&0xf];
5f60: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 . }else{.
5f70: 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 2b 31 5d zLine[k+1]
5f80: 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 = ' ';.
5f90: 7a 4c 69 6e 65 5b 6b 2b 32 5d 20 3d 20 27 20 27 zLine[k+2] = ' '
5fa0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
5fb0: 20 20 20 20 7a 4c 69 6e 65 5b 35 33 5d 20 3d 20 zLine[53] =
5fc0: 27 20 27 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 35 ' ';. zLine[5
5fd0: 34 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 66 6f 4] = ' ';. fo
5fe0: 72 28 6a 3d 30 3b 20 6a 3c 31 36 3b 20 6a 2b 2b r(j=0; j<16; j++
5ff0: 29 7b 0a 20 20 20 20 20 20 6b 20 3d 20 6a 2b 35 ){. k = j+5
6000: 35 3b 0a 20 20 20 20 20 20 69 66 28 20 69 2b 6a 5;. if( i+j
6010: 3c 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 75 6e <n ){. un
6020: 73 69 67 6e 65 64 20 63 68 61 72 20 63 20 3d 20 signed char c =
6030: 78 5b 69 2b 6a 5d 3b 0a 20 20 20 20 20 20 20 20 x[i+j];.
6040: 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 if( c>=0x20 && c
6050: 3c 3d 30 78 37 65 20 29 7b 0a 20 20 20 20 20 20 <=0x7e ){.
6060: 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 3d 20 63 zLine[k] = c
6070: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b ;. }else{
6080: 0a 20 20 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 . zLine
6090: 5b 6b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 [k] = '.';.
60a0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 }. }else
60b0: 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b {. zLine[
60c0: 6b 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a k] = 0;. }.
60d0: 20 20 20 20 7d 0a 20 20 20 20 7a 4c 69 6e 65 5b }. zLine[
60e0: 37 31 5d 20 3d 20 30 3b 0a 20 20 20 20 40 20 25 71] = 0;. @ %
60f0: 68 28 7a 4c 69 6e 65 29 0a 20 20 7d 0a 7d 0a 0a h(zLine). }.}..
6100: 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 68 /*.** WEBPAGE: h
6110: 65 78 64 75 6d 70 0a 2a 2a 20 55 52 4c 3a 20 2f exdump.** URL: /
6120: 68 65 78 64 75 6d 70 3f 6e 61 6d 65 3d 41 52 54 hexdump?name=ART
6130: 49 46 41 43 54 49 44 0a 2a 2a 20 0a 2a 2a 20 53 IFACTID.** .** S
6140: 68 6f 77 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 how the complete
6150: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 content of a fi
6160: 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 le identified by
6170: 20 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 20 61 ARTIFACTID.** a
6180: 73 20 70 72 65 66 6f 72 6d 61 74 74 65 64 20 74 s preformatted t
6190: 65 78 74 2e 0a 2a 2f 0a 76 6f 69 64 20 68 65 78 ext..*/.void hex
61a0: 64 75 6d 70 5f 70 61 67 65 28 76 6f 69 64 29 7b dump_page(void){
61b0: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 42 6c . int rid;. Bl
61c0: 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 42 6c ob content;. Bl
61d0: 6f 62 20 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 3b ob downloadName;
61e0: 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 .. rid = name_t
61f0: 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c o_rid(PD("name",
6200: 22 30 22 29 29 3b 0a 20 20 6c 6f 67 69 6e 5f 63 "0"));. login_c
6210: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 heck_credentials
6220: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 ();. if( !g.okR
6230: 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 ead ){ login_nee
6240: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
6250: 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b . if( rid==0 ){
6260: 20 63 67 69 5f 72 65 64 69 72 65 63 74 28 22 2f cgi_redirect("/
6270: 68 6f 6d 65 22 29 3b 20 7d 0a 20 20 69 66 28 20 home"); }. if(
6280: 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 20 20 g.okAdmin ){.
6290: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 const char *zUu
62a0: 69 64 20 3d 20 64 62 5f 74 65 78 74 28 22 22 2c id = db_text("",
62b0: 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 "SELECT uuid FR
62c0: 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 OM blob WHERE ri
62d0: 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 20 d=%d", rid);.
62e0: 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 if( db_exists("
62f0: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 73 68 SELECT 1 FROM sh
6300: 75 6e 20 57 48 45 52 45 20 75 75 69 64 3d 27 25 un WHERE uuid='%
6310: 73 27 22 2c 20 7a 55 75 69 64 29 20 29 7b 0a 20 s'", zUuid) ){.
6320: 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 style_subme
6330: 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 55 6e 73 68 nu_element("Unsh
6340: 75 6e 22 2c 22 55 6e 73 68 75 6e 22 2c 20 22 25 un","Unshun", "%
6350: 73 2f 73 68 75 6e 3f 75 75 69 64 3d 25 73 26 73 s/shun?uuid=%s&s
6360: 75 62 3d 31 22 2c 0a 20 20 20 20 20 20 20 20 20 ub=1",.
6370: 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 g.zTop, zUuid
6380: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 );. }else{.
6390: 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e style_submen
63a0: 75 5f 65 6c 65 6d 65 6e 74 28 22 53 68 75 6e 22 u_element("Shun"
63b0: 2c 22 53 68 75 6e 22 2c 20 22 25 73 2f 73 68 75 ,"Shun", "%s/shu
63c0: 6e 3f 73 68 75 6e 3d 25 73 23 61 64 64 73 68 75 n?shun=%s#addshu
63d0: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 n",.
63e0: 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 3b 0a g.zTop, zUuid);.
63f0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 74 79 6c }. }. styl
6400: 65 5f 68 65 61 64 65 72 28 22 48 65 78 20 41 72 e_header("Hex Ar
6410: 74 69 66 61 63 74 20 43 6f 6e 74 65 6e 74 22 29 tifact Content")
6420: 3b 0a 20 20 40 20 3c 68 32 3e 48 65 78 61 64 65 ;. @ <h2>Hexade
6430: 63 69 6d 61 6c 20 43 6f 6e 74 65 6e 74 20 4f 66 cimal Content Of
6440: 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 6c 6f 63 :</h2>. @ <bloc
6450: 6b 71 75 6f 74 65 3e 0a 20 20 62 6c 6f 62 5f 7a kquote>. blob_z
6460: 65 72 6f 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d ero(&downloadNam
6470: 65 29 3b 0a 20 20 6f 62 6a 65 63 74 5f 64 65 73 e);. object_des
6480: 63 72 69 70 74 69 6f 6e 28 72 69 64 2c 20 30 2c cription(rid, 0,
6490: 20 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3b &downloadName);
64a0: 0a 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 . style_submenu
64b0: 5f 65 6c 65 6d 65 6e 74 28 22 44 6f 77 6e 6c 6f _element("Downlo
64c0: 61 64 22 2c 20 22 44 6f 77 6e 6c 6f 61 64 22 2c ad", "Download",
64d0: 20 0a 20 20 20 20 20 20 20 20 22 25 73 2f 72 61 . "%s/ra
64e0: 77 2f 25 54 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 w/%T?name=%d", g
64f0: 2e 7a 42 61 73 65 55 52 4c 2c 20 62 6c 6f 62 5f .zBaseURL, blob_
6500: 73 74 72 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d str(&downloadNam
6510: 65 29 2c 20 72 69 64 29 3b 0a 20 20 40 20 3c 2f e), rid);. @ </
6520: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 20 blockquote>. @
6530: 3c 68 72 3e 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 <hr>. content_g
6540: 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 et(rid, &content
6550: 29 3b 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f );. @ <blockquo
6560: 74 65 3e 3c 70 72 65 3e 0a 20 20 68 65 78 64 75 te><pre>. hexdu
6570: 6d 70 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 mp(&content);.
6580: 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 @ </pre></blockq
6590: 75 6f 74 65 3e 0a 20 20 73 74 79 6c 65 5f 66 6f uote>. style_fo
65a0: 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a oter();.}../*.**
65b0: 20 57 45 42 50 41 47 45 3a 20 61 72 74 69 66 61 WEBPAGE: artifa
65c0: 63 74 0a 2a 2a 20 55 52 4c 3a 20 2f 61 72 74 69 ct.** URL: /arti
65d0: 66 61 63 74 3f 6e 61 6d 65 3d 41 52 54 49 46 41 fact?name=ARTIFA
65e0: 43 54 49 44 0a 2a 2a 20 0a 2a 2a 20 53 68 6f 77 CTID.** .** Show
65f0: 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f the complete co
6600: 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 6c 65 20 ntent of a file
6610: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 41 52 identified by AR
6620: 54 49 46 41 43 54 49 44 0a 2a 2a 20 61 73 20 70 TIFACTID.** as p
6630: 72 65 66 6f 72 6d 61 74 74 65 64 20 74 65 78 74 reformatted text
6640: 2e 0a 2a 2f 0a 76 6f 69 64 20 61 72 74 69 66 61 ..*/.void artifa
6650: 63 74 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 ct_page(void){.
6660: 20 69 6e 74 20 72 69 64 3b 0a 20 20 42 6c 6f 62 int rid;. Blob
6670: 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 63 6f 6e 73 content;. cons
6680: 74 20 63 68 61 72 20 2a 7a 4d 69 6d 65 3b 0a 20 t char *zMime;.
6690: 20 42 6c 6f 62 20 64 6f 77 6e 6c 6f 61 64 4e 61 Blob downloadNa
66a0: 6d 65 3b 0a 20 20 69 6e 74 20 72 65 6e 64 65 72 me;. int render
66b0: 41 73 57 69 6b 69 20 3d 20 30 3b 0a 20 20 69 6e AsWiki = 0;. in
66c0: 74 20 72 65 6e 64 65 72 41 73 48 74 6d 6c 20 3d t renderAsHtml =
66d0: 20 30 3b 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 0;.. rid = nam
66e0: 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d e_to_rid(PD("nam
66f0: 65 22 2c 22 30 22 29 29 3b 0a 20 20 6c 6f 67 69 e","0"));. logi
6700: 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 n_check_credenti
6710: 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e als();. if( !g.
6720: 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f okRead ){ login_
6730: 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e needed(); return
6740: 3b 20 7d 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 ; }. if( rid==0
6750: 20 29 7b 20 63 67 69 5f 72 65 64 69 72 65 63 74 ){ cgi_redirect
6760: 28 22 2f 68 6f 6d 65 22 29 3b 20 7d 0a 20 20 69 ("/home"); }. i
6770: 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a f( g.okAdmin ){.
6780: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
6790: 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 zUuid = db_text(
67a0: 22 22 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 "", "SELECT uuid
67b0: 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 FROM blob WHERE
67c0: 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a rid=%d", rid);.
67d0: 20 20 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 if( db_exist
67e0: 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d s("SELECT 1 FROM
67f0: 20 73 68 75 6e 20 57 48 45 52 45 20 75 75 69 64 shun WHERE uuid
6800: 3d 27 25 73 27 22 2c 20 7a 55 75 69 64 29 20 29 ='%s'", zUuid) )
6810: 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 {. style_su
6820: 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 55 bmenu_element("U
6830: 6e 73 68 75 6e 22 2c 22 55 6e 73 68 75 6e 22 2c nshun","Unshun",
6840: 20 22 25 73 2f 73 68 75 6e 3f 75 75 69 64 3d 25 "%s/shun?uuid=%
6850: 73 26 73 75 62 3d 31 22 2c 0a 20 20 20 20 20 20 s&sub=1",.
6860: 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 g.zTop, zU
6870: 75 69 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b uid);. }else{
6880: 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 . style_sub
6890: 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 53 68 menu_element("Sh
68a0: 75 6e 22 2c 22 53 68 75 6e 22 2c 20 22 25 73 2f un","Shun", "%s/
68b0: 73 68 75 6e 3f 73 68 75 6e 3d 25 73 23 61 64 64 shun?shun=%s#add
68c0: 73 68 75 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 shun",.
68d0: 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 g.zTop, zUuid
68e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 );. }. }. s
68f0: 74 79 6c 65 5f 68 65 61 64 65 72 28 22 41 72 74 tyle_header("Art
6900: 69 66 61 63 74 20 43 6f 6e 74 65 6e 74 22 29 3b ifact Content");
6910: 0a 20 20 40 20 3c 68 32 3e 43 6f 6e 74 65 6e 74 . @ <h2>Content
6920: 20 4f 66 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 Of:</h2>. @ <b
6930: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 62 6c 6f lockquote>. blo
6940: 62 5f 7a 65 72 6f 28 26 64 6f 77 6e 6c 6f 61 64 b_zero(&download
6950: 4e 61 6d 65 29 3b 0a 20 20 6f 62 6a 65 63 74 5f Name);. object_
6960: 64 65 73 63 72 69 70 74 69 6f 6e 28 72 69 64 2c description(rid,
6970: 20 30 2c 20 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 0, &downloadNam
6980: 65 29 3b 0a 20 20 73 74 79 6c 65 5f 73 75 62 6d e);. style_subm
6990: 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 44 6f 77 enu_element("Dow
69a0: 6e 6c 6f 61 64 22 2c 20 22 44 6f 77 6e 6c 6f 61 nload", "Downloa
69b0: 64 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 d", . "
69c0: 25 73 2f 72 61 77 2f 25 54 3f 6e 61 6d 65 3d 25 %s/raw/%T?name=%
69d0: 64 22 2c 20 67 2e 7a 54 6f 70 2c 20 62 6c 6f 62 d", g.zTop, blob
69e0: 5f 73 74 72 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 _str(&downloadNa
69f0: 6d 65 29 2c 20 72 69 64 29 3b 0a 20 20 7a 4d 69 me), rid);. zMi
6a00: 6d 65 20 3d 20 6d 69 6d 65 74 79 70 65 5f 66 72 me = mimetype_fr
6a10: 6f 6d 5f 6e 61 6d 65 28 62 6c 6f 62 5f 73 74 72 om_name(blob_str
6a20: 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 29 (&downloadName))
6a30: 3b 0a 20 20 69 66 28 20 7a 4d 69 6d 65 20 29 7b ;. if( zMime ){
6a40: 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 . if( strcmp(
6a50: 7a 4d 69 6d 65 2c 20 22 74 65 78 74 2f 68 74 6d zMime, "text/htm
6a60: 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 l")==0 ){.
6a70: 69 66 28 20 50 28 22 74 78 74 22 29 20 29 7b 0a if( P("txt") ){.
6a80: 20 20 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 style_su
6a90: 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 48 bmenu_element("H
6aa0: 74 6d 6c 22 2c 20 22 48 74 6d 6c 22 2c 0a 20 20 tml", "Html",.
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 2f "%s/
6ad0: 61 72 74 69 66 61 63 74 3f 6e 61 6d 65 3d 25 64 artifact?name=%d
6ae0: 22 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b ", g.zTop, rid);
6af0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 . }else{.
6b00: 20 20 20 20 20 20 72 65 6e 64 65 72 41 73 48 74 renderAsHt
6b10: 6d 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 ml = 1;.
6b20: 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c style_submenu_el
6b30: 65 6d 65 6e 74 28 22 54 65 78 74 22 2c 20 22 54 ement("Text", "T
6b40: 65 78 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20 ext",.
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b60: 20 20 20 20 22 25 73 2f 61 72 74 69 66 61 63 74 "%s/artifact
6b70: 3f 6e 61 6d 65 3d 25 64 26 74 78 74 3d 31 22 2c ?name=%d&txt=1",
6b80: 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 g.zTop, rid);.
6b90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 }. }else
6ba0: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4d 69 6d if( strcmp(zMim
6bb0: 65 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f e, "application/
6bc0: 78 2d 66 6f 73 73 69 6c 2d 77 69 6b 69 22 29 3d x-fossil-wiki")=
6bd0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 =0 ){. if(
6be0: 50 28 22 74 78 74 22 29 20 29 7b 0a 20 20 20 20 P("txt") ){.
6bf0: 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e style_submen
6c00: 75 5f 65 6c 65 6d 65 6e 74 28 22 57 69 6b 69 22 u_element("Wiki"
6c10: 2c 20 22 57 69 6b 69 22 2c 0a 20 20 20 20 20 20 , "Wiki",.
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c30: 20 20 20 20 20 20 20 20 22 25 73 2f 61 72 74 69 "%s/arti
6c40: 66 61 63 74 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 fact?name=%d", g
6c50: 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 .zTop, rid);.
6c60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
6c70: 20 20 72 65 6e 64 65 72 41 73 57 69 6b 69 20 3d renderAsWiki =
6c80: 20 31 3b 0a 20 20 20 20 20 20 20 20 73 74 79 6c 1;. styl
6c90: 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e e_submenu_elemen
6ca0: 74 28 22 54 65 78 74 22 2c 20 22 54 65 78 74 22 t("Text", "Text"
6cb0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6cd0: 22 25 73 2f 61 72 74 69 66 61 63 74 3f 6e 61 6d "%s/artifact?nam
6ce0: 65 3d 25 64 26 74 78 74 3d 31 22 2c 20 67 2e 7a e=%d&txt=1", g.z
6cf0: 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 Top, rid);.
6d00: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 40 }. }. }. @
6d10: 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 </blockquote>.
6d20: 20 40 20 3c 68 72 3e 0a 20 20 63 6f 6e 74 65 6e @ <hr>. conten
6d30: 74 5f 67 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 t_get(rid, &cont
6d40: 65 6e 74 29 3b 0a 20 20 69 66 28 20 72 65 6e 64 ent);. if( rend
6d50: 65 72 41 73 57 69 6b 69 20 29 7b 0a 20 20 20 20 erAsWiki ){.
6d60: 77 69 6b 69 5f 63 6f 6e 76 65 72 74 28 26 63 6f wiki_convert(&co
6d70: 6e 74 65 6e 74 2c 20 30 2c 20 30 29 3b 0a 20 20 ntent, 0, 0);.
6d80: 7d 65 6c 73 65 20 69 66 28 20 72 65 6e 64 65 72 }else if( render
6d90: 41 73 48 74 6d 6c 20 29 7b 0a 20 20 20 20 40 20 AsHtml ){. @
6da0: 3c 64 69 76 3e 0a 20 20 20 20 63 67 69 5f 61 70 <div>. cgi_ap
6db0: 70 65 6e 64 5f 63 6f 6e 74 65 6e 74 28 62 6c 6f pend_content(blo
6dc0: 62 5f 62 75 66 66 65 72 28 26 63 6f 6e 74 65 6e b_buffer(&conten
6dd0: 74 29 2c 20 62 6c 6f 62 5f 73 69 7a 65 28 26 63 t), blob_size(&c
6de0: 6f 6e 74 65 6e 74 29 29 3b 0a 20 20 20 20 40 20 ontent));. @
6df0: 3c 2f 64 69 76 3e 0a 20 20 7d 65 6c 73 65 7b 0a </div>. }else{.
6e00: 20 20 20 20 7a 4d 69 6d 65 20 3d 20 6d 69 6d 65 zMime = mime
6e10: 74 79 70 65 5f 66 72 6f 6d 5f 63 6f 6e 74 65 6e type_from_conten
6e20: 74 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 t(&content);.
6e30: 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a @ <blockquote>.
6e40: 20 20 20 20 69 66 28 20 7a 4d 69 6d 65 3d 3d 30 if( zMime==0
6e50: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 70 72 65 ){. @ <pre
6e60: 3e 0a 20 20 20 20 20 20 40 20 25 68 28 62 6c 6f >. @ %h(blo
6e70: 62 5f 73 74 72 28 26 63 6f 6e 74 65 6e 74 29 29 b_str(&content))
6e80: 0a 20 20 20 20 20 20 40 20 3c 2f 70 72 65 3e 0a . @ </pre>.
6e90: 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d style_subm
6ea0: 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 48 65 78 enu_element("Hex
6eb0: 22 2c 22 48 65 78 22 2c 20 22 25 73 2f 68 65 78 ","Hex", "%s/hex
6ec0: 64 75 6d 70 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 dump?name=%d", g
6ed0: 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 .zTop, rid);.
6ee0: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 6e 63 }else if( strnc
6ef0: 6d 70 28 7a 4d 69 6d 65 2c 20 22 69 6d 61 67 65 mp(zMime, "image
6f00: 2f 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20 /", 6)==0 ){.
6f10: 20 20 20 40 20 3c 69 6d 67 20 73 72 63 3d 22 25 @ <img src="%
6f20: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 72 61 s(g.zBaseURL)/ra
6f30: 77 3f 6e 61 6d 65 3d 25 64 28 72 69 64 29 26 6d w?name=%d(rid)&m
6f40: 3d 25 73 28 7a 4d 69 6d 65 29 22 3e 3c 2f 69 6d =%s(zMime)"></im
6f50: 67 3e 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 g>. style_s
6f60: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
6f70: 48 65 78 22 2c 22 48 65 78 22 2c 20 22 25 73 2f Hex","Hex", "%s/
6f80: 68 65 78 64 75 6d 70 3f 6e 61 6d 65 3d 25 64 22 hexdump?name=%d"
6f90: 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a , g.zTop, rid);.
6fa0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
6fb0: 20 40 20 3c 70 72 65 3e 0a 20 20 20 20 20 20 68 @ <pre>. h
6fc0: 65 78 64 75 6d 70 28 26 63 6f 6e 74 65 6e 74 29 exdump(&content)
6fd0: 3b 0a 20 20 20 20 20 20 40 20 3c 2f 70 72 65 3e ;. @ </pre>
6fe0: 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 2f 62 . }. @ </b
6ff0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 7d 0a 20 lockquote>. }.
7000: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
7010: 0a 7d 20 20 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 .} ../*.** WEBP
7020: 41 47 45 3a 20 74 69 6e 66 6f 0a 2a 2a 20 55 52 AGE: tinfo.** UR
7030: 4c 3a 20 2f 74 69 6e 66 6f 3f 6e 61 6d 65 3d 41 L: /tinfo?name=A
7040: 52 54 49 46 41 43 54 49 44 0a 2a 2a 0a 2a 2a 20 RTIFACTID.**.**
7050: 53 68 6f 77 20 74 68 65 20 64 65 74 61 69 6c 73 Show the details
7060: 20 6f 66 20 61 20 74 69 63 6b 65 74 20 63 68 61 of a ticket cha
7070: 6e 67 65 20 63 6f 6e 74 72 6f 6c 20 61 72 74 69 nge control arti
7080: 66 61 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20 74 69 fact..*/.void ti
7090: 6e 66 6f 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a nfo_page(void){.
70a0: 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 42 6c 6f int rid;. Blo
70b0: 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 63 68 61 b content;. cha
70c0: 72 20 2a 7a 44 61 74 65 3b 0a 20 20 63 6f 6e 73 r *zDate;. cons
70d0: 74 20 63 68 61 72 20 2a 7a 55 75 69 64 3b 0a 20 t char *zUuid;.
70e0: 20 63 68 61 72 20 7a 54 6b 74 4e 61 6d 65 5b 32 char zTktName[2
70f0: 30 5d 3b 0a 20 20 4d 61 6e 69 66 65 73 74 20 6d 0];. Manifest m
7100: 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b ;.. login_check
7110: 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a _credentials();.
7120: 20 20 69 66 28 20 21 67 2e 6f 6b 52 64 54 6b 74 if( !g.okRdTkt
7130: 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 ){ login_needed
7140: 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 (); return; }.
7150: 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 rid = name_to_ri
7160: 64 28 50 44 28 22 6e 61 6d 65 22 2c 22 30 22 29 d(PD("name","0")
7170: 29 3b 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 20 );. if( rid==0
7180: 29 7b 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 ){ fossil_redire
7190: 63 74 5f 68 6f 6d 65 28 29 3b 20 7d 0a 20 20 7a ct_home(); }. z
71a0: 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 22 Uuid = db_text("
71b0: 22 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 ", "SELECT uuid
71c0: 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 FROM blob WHERE
71d0: 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 rid=%d", rid);.
71e0: 20 69 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 if( g.okAdmin )
71f0: 7b 0a 20 20 20 20 69 66 28 20 64 62 5f 65 78 69 {. if( db_exi
7200: 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 sts("SELECT 1 FR
7210: 4f 4d 20 73 68 75 6e 20 57 48 45 52 45 20 75 75 OM shun WHERE uu
7220: 69 64 3d 27 25 73 27 22 2c 20 7a 55 75 69 64 29 id='%s'", zUuid)
7230: 20 29 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f ){. style_
7240: 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 submenu_element(
7250: 22 55 6e 73 68 75 6e 22 2c 22 55 6e 73 68 75 6e "Unshun","Unshun
7260: 22 2c 20 22 25 73 2f 73 68 75 6e 3f 75 75 69 64 ", "%s/shun?uuid
7270: 3d 25 73 26 73 75 62 3d 31 22 2c 0a 20 20 20 20 =%s&sub=1",.
7280: 20 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 g.zTop,
7290: 7a 55 75 69 64 29 3b 0a 20 20 20 20 7d 65 6c 73 zUuid);. }els
72a0: 65 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 e{. style_s
72b0: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
72c0: 53 68 75 6e 22 2c 22 53 68 75 6e 22 2c 20 22 25 Shun","Shun", "%
72d0: 73 2f 73 68 75 6e 3f 73 68 75 6e 3d 25 73 23 61 s/shun?shun=%s#a
72e0: 64 64 73 68 75 6e 22 2c 0a 20 20 20 20 20 20 20 ddshun",.
72f0: 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 g.zTop, zUu
7300: 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 id);. }. }.
7310: 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 content_get(rid
7320: 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 69 , &content);. i
7330: 66 28 20 6d 61 6e 69 66 65 73 74 5f 70 61 72 73 f( manifest_pars
7340: 65 28 26 6d 2c 20 26 63 6f 6e 74 65 6e 74 29 3d e(&m, &content)=
7350: 3d 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c =0 ){. fossil
7360: 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 _redirect_home()
7370: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6d 2e 74 79 ;. }. if( m.ty
7380: 70 65 21 3d 43 46 54 59 50 45 5f 54 49 43 4b 45 pe!=CFTYPE_TICKE
7390: 54 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f T ){. fossil_
73a0: 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b redirect_home();
73b0: 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65 61 . }. style_hea
73c0: 64 65 72 28 22 54 69 63 6b 65 74 20 43 68 61 6e der("Ticket Chan
73d0: 67 65 20 44 65 74 61 69 6c 73 22 29 3b 0a 20 20 ge Details");.
73e0: 7a 44 61 74 65 20 3d 20 64 62 5f 74 65 78 74 28 zDate = db_text(
73f0: 30 2c 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 0, "SELECT datet
7400: 69 6d 65 28 25 2e 31 32 66 29 22 2c 20 6d 2e 72 ime(%.12f)", m.r
7410: 44 61 74 65 29 3b 0a 20 20 6d 65 6d 63 70 79 28 Date);. memcpy(
7420: 7a 54 6b 74 4e 61 6d 65 2c 20 6d 2e 7a 54 69 63 zTktName, m.zTic
7430: 6b 65 74 55 75 69 64 2c 20 31 30 29 3b 0a 20 20 ketUuid, 10);.
7440: 7a 54 6b 74 4e 61 6d 65 5b 31 30 5d 20 3d 20 30 zTktName[10] = 0
7450: 3b 0a 20 20 40 20 3c 68 32 3e 43 68 61 6e 67 65 ;. @ <h2>Change
7460: 73 20 74 6f 20 74 69 63 6b 65 74 20 3c 61 20 68 s to ticket <a h
7470: 72 65 66 3d 22 25 73 28 6d 2e 7a 54 69 63 6b 65 ref="%s(m.zTicke
7480: 74 55 75 69 64 29 22 3e 25 73 28 7a 54 6b 74 4e tUuid)">%s(zTktN
7490: 61 6d 65 29 3c 2f 61 3e 3c 2f 68 32 3e 0a 20 20 ame)</a></h2>.
74a0: 40 0a 20 20 40 20 3c 70 3e 42 79 20 25 68 28 6d @. @ <p>By %h(m
74b0: 2e 7a 55 73 65 72 29 20 6f 6e 20 25 73 28 7a 44 .zUser) on %s(zD
74c0: 61 74 65 29 2e 20 20 53 65 65 20 61 6c 73 6f 3a ate). See also:
74d0: 0a 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 . @ <a href="%s
74e0: 28 67 2e 7a 54 6f 70 29 2f 61 72 74 69 66 61 63 (g.zTop)/artifac
74f0: 74 2f 25 54 28 7a 55 75 69 64 29 22 3e 61 72 74 t/%T(zUuid)">art
7500: 69 66 61 63 74 20 63 6f 6e 74 65 6e 74 3c 2f 61 ifact content</a
7510: 3e 2c 20 61 6e 64 0a 20 20 40 20 3c 61 20 68 72 >, and. @ <a hr
7520: 65 66 3d 22 25 73 28 67 2e 7a 54 6f 70 29 2f 74 ef="%s(g.zTop)/t
7530: 6b 74 68 69 73 74 6f 72 79 2f 25 73 28 6d 2e 7a kthistory/%s(m.z
7540: 54 69 63 6b 65 74 55 75 69 64 29 22 3e 74 69 63 TicketUuid)">tic
7550: 6b 65 74 20 68 69 73 74 6f 72 79 3c 2f 61 3e 0a ket history</a>.
7560: 20 20 40 20 3c 2f 70 3e 0a 20 20 40 0a 20 20 40 @ </p>. @. @
7570: 20 3c 6f 6c 3e 0a 20 20 66 72 65 65 28 7a 44 61 <ol>. free(zDa
7580: 74 65 29 3b 0a 20 20 74 69 63 6b 65 74 5f 6f 75 te);. ticket_ou
7590: 74 70 75 74 5f 63 68 61 6e 67 65 5f 61 72 74 69 tput_change_arti
75a0: 66 61 63 74 28 26 6d 29 3b 0a 20 20 6d 61 6e 69 fact(&m);. mani
75b0: 66 65 73 74 5f 63 6c 65 61 72 28 26 6d 29 3b 0a fest_clear(&m);.
75c0: 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 style_footer()
75d0: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 ;.}.../*.** WEBP
75e0: 41 47 45 3a 20 69 6e 66 6f 0a 2a 2a 20 55 52 4c AGE: info.** URL
75f0: 3a 20 69 6e 66 6f 2f 41 52 54 49 46 41 43 54 49 : info/ARTIFACTI
7600: 44 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 72 67 75 D.**.** The argu
7610: 6d 65 6e 74 20 69 73 20 61 20 61 72 74 69 66 61 ment is a artifa
7620: 63 74 20 49 44 20 77 68 69 63 68 20 6d 69 67 68 ct ID which migh
7630: 74 20 62 65 20 61 20 62 61 73 65 6c 69 6e 65 20 t be a baseline
7640: 6f 72 20 61 20 66 69 6c 65 20 6f 72 0a 2a 2a 20 or a file or.**
7650: 61 20 74 69 63 6b 65 74 20 63 68 61 6e 67 65 73 a ticket changes
7660: 20 6f 72 20 61 20 77 69 6b 69 20 65 64 69 74 6f or a wiki edito
7670: 72 20 6f 72 20 73 6f 6d 65 74 68 69 6e 67 20 65 r or something e
7680: 6c 73 65 2e 20 0a 2a 2a 0a 2a 2a 20 46 69 67 75 lse. .**.** Figu
7690: 72 65 20 6f 75 74 20 77 68 61 74 20 74 68 65 20 re out what the
76a0: 61 72 74 69 66 61 63 74 20 49 44 20 69 73 20 61 artifact ID is a
76b0: 6e 64 20 6a 75 6d 70 20 74 6f 20 69 74 2e 0a 2a nd jump to it..*
76c0: 2f 0a 76 6f 69 64 20 69 6e 66 6f 5f 70 61 67 65 /.void info_page
76d0: 28 76 6f 69 64 29 7b 0a 20 20 63 6f 6e 73 74 20 (void){. const
76e0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 42 char *zName;. B
76f0: 6c 6f 62 20 75 75 69 64 3b 0a 20 20 69 6e 74 20 lob uuid;. int
7700: 72 69 64 2c 20 6e 4e 61 6d 65 3b 0a 20 20 0a 20 rid, nName;. .
7710: 20 7a 4e 61 6d 65 20 3d 20 50 28 22 6e 61 6d 65 zName = P("name
7720: 22 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d ");. if( zName=
7730: 3d 30 20 29 20 66 6f 73 73 69 6c 5f 72 65 64 69 =0 ) fossil_redi
7740: 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 6e rect_home();. n
7750: 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 4e Name = strlen(zN
7760: 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e 4e 61 6d ame);. if( nNam
7770: 65 3c 34 20 7c 7c 20 6e 4e 61 6d 65 3e 55 55 49 e<4 || nName>UUI
7780: 44 5f 53 49 5a 45 20 7c 7c 20 21 76 61 6c 69 64 D_SIZE || !valid
7790: 61 74 65 31 36 28 7a 4e 61 6d 65 2c 20 6e 4e 61 ate16(zName, nNa
77a0: 6d 65 29 20 29 7b 0a 20 20 20 20 73 77 69 74 63 me) ){. switc
77b0: 68 28 20 73 79 6d 5f 74 61 67 5f 74 6f 5f 75 75 h( sym_tag_to_uu
77c0: 69 64 28 7a 4e 61 6d 65 2c 20 26 75 75 69 64 29 id(zName, &uuid)
77d0: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 31 ){. case 1
77e0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 67 : {. /* g
77f0: 6f 74 20 6f 6e 65 20 55 55 49 44 2c 20 75 73 65 ot one UUID, use
7800: 20 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 7a it */. z
7810: 4e 61 6d 65 20 3d 20 62 6c 6f 62 5f 73 74 72 28 Name = blob_str(
7820: 26 75 75 69 64 29 3b 0a 20 20 20 20 20 20 20 20 &uuid);.
7830: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 break;. }.
7840: 20 20 20 20 20 63 61 73 65 20 32 3a 20 7b 0a 20 case 2: {.
7850: 20 20 20 20 20 20 20 2f 2a 20 67 6f 20 73 6f 6d /* go som
7860: 65 77 68 65 72 65 20 74 6f 20 73 68 6f 77 20 74 ewhere to show t
7870: 68 65 20 6d 75 6c 74 69 70 6c 65 20 55 55 49 44 he multiple UUID
7880: 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 74 s */. ret
7890: 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 62 72 65 urn;. bre
78a0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 ak;. }.
78b0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 default: {.
78c0: 20 20 20 20 20 66 6f 73 73 69 6c 5f 72 65 64 69 fossil_redi
78d0: 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 20 rect_home();.
78e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 break;.
78f0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 }. }. }.
7900: 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 53 if( db_exists("S
7910: 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 69 63 ELECT 1 FROM tic
7920: 6b 65 74 20 57 48 45 52 45 20 74 6b 74 5f 75 75 ket WHERE tkt_uu
7930: 69 64 20 47 4c 4f 42 20 27 25 73 2a 27 22 2c 20 id GLOB '%s*'",
7940: 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 74 6b zName) ){. tk
7950: 74 76 69 65 77 5f 70 61 67 65 28 29 3b 0a 20 20 tview_page();.
7960: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 return;. }.
7970: 72 69 64 20 3d 20 64 62 5f 69 6e 74 28 30 2c 20 rid = db_int(0,
7980: 22 53 45 4c 45 43 54 20 72 69 64 20 46 52 4f 4d "SELECT rid FROM
7990: 20 62 6c 6f 62 20 57 48 45 52 45 20 75 75 69 64 blob WHERE uuid
79a0: 20 47 4c 4f 42 20 27 25 73 2a 27 22 2c 20 7a 4e GLOB '%s*'", zN
79b0: 61 6d 65 29 3b 0a 20 20 69 66 28 20 72 69 64 3d ame);. if( rid=
79c0: 3d 30 20 29 7b 0a 20 20 20 20 73 74 79 6c 65 5f =0 ){. style_
79d0: 68 65 61 64 65 72 28 22 42 72 6f 6b 65 6e 20 4c header("Broken L
79e0: 69 6e 6b 22 29 3b 0a 20 20 20 20 40 20 3c 70 3e ink");. @ <p>
79f0: 4e 6f 20 73 75 63 68 20 6f 62 6a 65 63 74 3a 20 No such object:
7a00: 25 68 28 7a 4e 61 6d 65 29 3c 2f 70 3e 0a 20 20 %h(zName)</p>.
7a10: 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 style_footer()
7a20: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 ;. return;.
7a30: 7d 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 }. if( db_exist
7a40: 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d s("SELECT 1 FROM
7a50: 20 6d 6c 69 6e 6b 20 57 48 45 52 45 20 6d 69 64 mlink WHERE mid
7a60: 3d 25 64 22 2c 20 72 69 64 29 20 29 7b 0a 20 20 =%d", rid) ){.
7a70: 20 20 63 69 5f 70 61 67 65 28 29 3b 0a 20 20 7d ci_page();. }
7a80: 65 6c 73 65 0a 20 20 69 66 28 20 64 62 5f 65 78 else. if( db_ex
7a90: 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 ists("SELECT 1 F
7aa0: 52 4f 4d 20 74 61 67 78 72 65 66 20 4a 4f 49 4e ROM tagxref JOIN
7ab0: 20 74 61 67 20 55 53 49 4e 47 28 74 61 67 69 64 tag USING(tagid
7ac0: 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )".
7ad0: 20 20 20 22 20 57 48 45 52 45 20 72 69 64 3d 25 " WHERE rid=%
7ae0: 64 20 41 4e 44 20 74 61 67 6e 61 6d 65 20 4c 49 d AND tagname LI
7af0: 4b 45 20 27 77 69 6b 69 2d 25 25 27 22 2c 20 72 KE 'wiki-%%'", r
7b00: 69 64 29 20 29 7b 0a 20 20 20 20 77 69 6e 66 6f id) ){. winfo
7b10: 5f 70 61 67 65 28 29 3b 0a 20 20 7d 65 6c 73 65 _page();. }else
7b20: 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 . if( db_exists
7b30: 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 ("SELECT 1 FROM
7b40: 74 61 67 78 72 65 66 20 4a 4f 49 4e 20 74 61 67 tagxref JOIN tag
7b50: 20 55 53 49 4e 47 28 74 61 67 69 64 29 22 0a 20 USING(tagid)".
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
7b70: 20 57 48 45 52 45 20 72 69 64 3d 25 64 20 41 4e WHERE rid=%d AN
7b80: 44 20 74 61 67 6e 61 6d 65 20 4c 49 4b 45 20 27 D tagname LIKE '
7b90: 74 6b 74 2d 25 25 27 22 2c 20 72 69 64 29 20 29 tkt-%%'", rid) )
7ba0: 7b 0a 20 20 20 20 74 69 6e 66 6f 5f 70 61 67 65 {. tinfo_page
7bb0: 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 69 66 ();. }else. if
7bc0: 28 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c ( db_exists("SEL
7bd0: 45 43 54 20 31 20 46 52 4f 4d 20 70 6c 69 6e 6b ECT 1 FROM plink
7be0: 20 57 48 45 52 45 20 63 69 64 3d 25 64 22 2c 20 WHERE cid=%d",
7bf0: 72 69 64 29 20 29 7b 0a 20 20 20 20 63 69 5f 70 rid) ){. ci_p
7c00: 61 67 65 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 age();. }else.
7c10: 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 if( db_exists("
7c20: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 6c SELECT 1 FROM pl
7c30: 69 6e 6b 20 57 48 45 52 45 20 70 69 64 3d 25 64 ink WHERE pid=%d
7c40: 22 2c 20 72 69 64 29 20 29 7b 0a 20 20 20 20 63 ", rid) ){. c
7c50: 69 5f 70 61 67 65 28 29 3b 0a 20 20 7d 65 6c 73 i_page();. }els
7c60: 65 0a 20 20 7b 0a 20 20 20 20 61 72 74 69 66 61 e. {. artifa
7c70: 63 74 5f 70 61 67 65 28 29 3b 0a 20 20 7d 0a 7d ct_page();. }.}
7c80: 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a ../*.** WEBPAGE:
7c90: 20 63 69 5f 65 64 69 74 0a 2a 2a 20 55 52 4c 3a ci_edit.** URL:
7ca0: 20 20 63 69 5f 65 64 69 74 3f 72 3d 52 49 44 26 ci_edit?r=RID&
7cb0: 63 3d 4e 45 57 43 4f 4d 4d 45 4e 54 26 75 3d 4e c=NEWCOMMENT&u=N
7cc0: 45 57 55 53 45 52 0a 2a 2a 0a 2a 2a 20 50 72 65 EWUSER.**.** Pre
7cd0: 73 65 6e 74 20 61 20 64 69 61 6c 6f 67 20 66 6f sent a dialog fo
7ce0: 72 20 75 70 64 61 74 69 6e 67 20 70 72 6f 70 65 r updating prope
7cf0: 72 74 69 65 73 20 6f 66 20 61 20 62 61 73 65 6c rties of a basel
7d00: 69 6e 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a ine:.**.** *
7d10: 20 20 54 68 65 20 63 68 65 63 6b 2d 69 6e 20 75 The check-in u
7d20: 73 65 72 0a 2a 2a 20 20 20 20 20 2a 20 20 54 68 ser.** * Th
7d30: 65 20 63 68 65 63 6b 2d 69 6e 20 63 6f 6d 6d 65 e check-in comme
7d40: 6e 74 0a 2a 2a 20 20 20 20 20 2a 20 20 54 68 65 nt.** * The
7d50: 20 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f 6c 6f background colo
7d60: 72 2e 0a 2a 2f 0a 76 6f 69 64 20 63 69 5f 65 64 r..*/.void ci_ed
7d70: 69 74 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 it_page(void){.
7d80: 20 69 6e 74 20 72 69 64 3b 0a 20 20 63 6f 6e 73 int rid;. cons
7d90: 74 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 t char *zComment
7da0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 ; /* Cur
7db0: 72 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 rent comment on
7dc0: 74 68 65 20 63 68 65 63 6b 2d 69 6e 20 2a 2f 0a the check-in */.
7dd0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e const char *zN
7de0: 65 77 43 6f 6d 6d 65 6e 74 3b 20 20 20 20 20 20 ewComment;
7df0: 2f 2a 20 52 65 76 69 73 65 64 20 63 68 65 63 6b /* Revised check
7e00: 2d 69 6e 20 63 6f 6d 6d 65 6e 74 20 2a 2f 0a 20 -in comment */.
7e10: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 const char *zUs
7e20: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f er; /
7e30: 2a 20 43 75 72 72 65 6e 74 20 75 73 65 72 20 66 * Current user f
7e40: 6f 72 20 74 68 65 20 63 68 65 63 6b 2d 69 6e 20 or the check-in
7e50: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 */. const char
7e60: 2a 7a 4e 65 77 55 73 65 72 3b 20 20 20 20 20 20 *zNewUser;
7e70: 20 20 20 2f 2a 20 52 65 76 69 73 65 64 20 75 73 /* Revised us
7e80: 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 er */. const ch
7e90: 61 72 20 2a 7a 44 61 74 65 3b 20 20 20 20 20 20 ar *zDate;
7ea0: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 /* Current
7eb0: 20 64 61 74 65 20 6f 66 20 74 68 65 20 63 68 65 date of the che
7ec0: 63 6b 2d 69 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 ck-in */. const
7ed0: 20 63 68 61 72 20 2a 7a 4e 65 77 44 61 74 65 3b char *zNewDate;
7ee0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 76 69 /* Revi
7ef0: 73 65 64 20 63 68 65 63 6b 2d 69 6e 20 64 61 74 sed check-in dat
7f00: 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 e */. const cha
7f10: 72 20 2a 7a 43 6f 6c 6f 72 3b 20 20 20 20 20 20 r *zColor;
7f20: 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a . const char *
7f30: 7a 4e 65 77 43 6f 6c 6f 72 3b 0a 20 20 63 6f 6e zNewColor;. con
7f40: 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 54 61 67 st char *zNewTag
7f50: 46 6c 61 67 3b 0a 20 20 63 6f 6e 73 74 20 63 68 Flag;. const ch
7f60: 61 72 20 2a 7a 4e 65 77 54 61 67 3b 0a 20 20 63 ar *zNewTag;. c
7f70: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 42 onst char *zNewB
7f80: 72 46 6c 61 67 3b 0a 20 20 63 6f 6e 73 74 20 63 rFlag;. const c
7f90: 68 61 72 20 2a 7a 4e 65 77 42 72 61 6e 63 68 3b har *zNewBranch;
7fa0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
7fb0: 43 6c 6f 73 65 46 6c 61 67 3b 0a 20 20 69 6e 74 CloseFlag;. int
7fc0: 20 66 50 72 6f 70 61 67 61 74 65 43 6f 6c 6f 72 fPropagateColor
7fd0: 3b 0a 20 20 63 68 61 72 20 2a 7a 55 75 69 64 3b ;. char *zUuid;
7fe0: 0a 20 20 42 6c 6f 62 20 63 6f 6d 6d 65 6e 74 3b . Blob comment;
7ff0: 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 73 74 61 . Stmt q;. sta
8000: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 tic const struct
8010: 20 53 61 6d 70 6c 65 43 6f 6c 6f 72 73 20 7b 0a SampleColors {.
8020: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
8030: 2a 7a 43 4e 61 6d 65 3b 0a 20 20 20 20 20 63 6f *zCName;. co
8040: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 6f 72 nst char *zColor
8050: 3b 0a 20 20 7d 20 61 43 6f 6c 6f 72 5b 5d 20 3d ;. } aColor[] =
8060: 20 7b 0a 20 20 20 20 20 7b 20 22 28 6e 6f 6e 65 {. { "(none
8070: 29 22 2c 20 20 22 22 20 7d 2c 0a 20 20 20 20 20 )", "" },.
8080: 7b 20 22 23 66 32 64 63 64 63 22 2c 20 22 23 66 { "#f2dcdc", "#f
8090: 32 64 63 64 63 22 20 7d 2c 0a 20 20 20 20 20 7b 2dcdc" },. {
80a0: 20 22 23 66 30 66 66 63 30 22 2c 20 22 23 66 30 "#f0ffc0", "#f0
80b0: 66 66 63 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 ffc0" },. {
80c0: 22 23 62 64 65 35 64 36 22 2c 20 22 23 62 64 65 "#bde5d6", "#bde
80d0: 35 64 36 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 5d6" },. { "
80e0: 23 63 30 66 66 63 30 22 2c 20 22 23 63 30 66 66 #c0ffc0", "#c0ff
80f0: 63 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 c0" },. { "#
8100: 63 30 66 66 66 30 22 2c 20 22 23 63 30 66 66 66 c0fff0", "#c0fff
8110: 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 63 0" },. { "#c
8120: 30 66 30 66 66 22 2c 20 22 23 63 30 66 30 66 66 0f0ff", "#c0f0ff
8130: 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 64 30 " },. { "#d0
8140: 63 30 66 66 22 2c 20 22 23 64 30 63 30 66 66 22 c0ff", "#d0c0ff"
8150: 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 66 66 63 },. { "#ffc
8160: 30 66 66 22 2c 20 22 23 66 66 63 30 66 66 22 20 0ff", "#ffc0ff"
8170: 7d 2c 0a 20 20 20 20 20 7b 20 22 23 66 66 63 30 },. { "#ffc0
8180: 64 30 22 2c 20 22 23 66 66 63 30 64 30 22 20 7d d0", "#ffc0d0" }
8190: 2c 0a 20 20 20 20 20 7b 20 22 23 66 66 66 30 63 ,. { "#fff0c
81a0: 30 22 2c 20 22 23 66 66 66 30 63 30 22 20 7d 2c 0", "#fff0c0" },
81b0: 0a 20 20 20 20 20 7b 20 22 23 63 30 63 30 63 30 . { "#c0c0c0
81c0: 22 2c 20 22 23 63 30 63 30 63 30 22 20 7d 2c 0a ", "#c0c0c0" },.
81d0: 20 20 7d 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 6f };. int nColo
81e0: 72 20 3d 20 73 69 7a 65 6f 66 28 61 43 6f 6c 6f r = sizeof(aColo
81f0: 72 29 2f 73 69 7a 65 6f 66 28 61 43 6f 6c 6f 72 r)/sizeof(aColor
8200: 5b 30 5d 29 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 [0]);. int i;.
8210: 20 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f . login_check_
8220: 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 credentials();.
8230: 20 69 66 28 20 21 67 2e 6f 6b 57 72 69 74 65 20 if( !g.okWrite
8240: 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 ){ login_needed(
8250: 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 72 ); return; }. r
8260: 69 64 20 3d 20 61 74 6f 69 28 50 44 28 22 72 22 id = atoi(PD("r"
8270: 2c 22 30 22 29 29 3b 0a 20 20 7a 55 75 69 64 20 ,"0"));. zUuid
8280: 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 = db_text(0, "SE
8290: 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 LECT uuid FROM b
82a0: 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 lob WHERE rid=%d
82b0: 22 2c 20 72 69 64 29 3b 0a 20 20 7a 43 6f 6d 6d ", rid);. zComm
82c0: 65 6e 74 20 3d 20 64 62 5f 74 65 78 74 28 30 2c ent = db_text(0,
82d0: 20 22 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 "SELECT coalesc
82e0: 65 28 65 63 6f 6d 6d 65 6e 74 2c 63 6f 6d 6d 65 e(ecomment,comme
82f0: 6e 74 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 nt)".
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 "
8310: 46 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 45 FROM event WHERE
8320: 20 6f 62 6a 69 64 3d 25 64 22 2c 20 72 69 64 29 objid=%d", rid)
8330: 3b 0a 20 20 69 66 28 20 7a 43 6f 6d 6d 65 6e 74 ;. if( zComment
8340: 3d 3d 30 20 29 20 66 6f 73 73 69 6c 5f 72 65 64 ==0 ) fossil_red
8350: 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 irect_home();.
8360: 69 66 28 20 50 28 22 63 61 6e 63 65 6c 22 29 20 if( P("cancel")
8370: 29 7b 0a 20 20 20 20 63 67 69 5f 72 65 64 69 72 ){. cgi_redir
8380: 65 63 74 66 28 22 63 69 3f 6e 61 6d 65 3d 25 64 ectf("ci?name=%d
8390: 22 2c 20 72 69 64 29 3b 0a 20 20 7d 0a 20 20 7a ", rid);. }. z
83a0: 4e 65 77 43 6f 6d 6d 65 6e 74 20 3d 20 50 44 28 NewComment = PD(
83b0: 22 63 22 2c 7a 43 6f 6d 6d 65 6e 74 29 3b 0a 20 "c",zComment);.
83c0: 20 7a 55 73 65 72 20 3d 20 64 62 5f 74 65 78 74 zUser = db_text
83d0: 28 30 2c 20 22 53 45 4c 45 43 54 20 63 6f 61 6c (0, "SELECT coal
83e0: 65 73 63 65 28 65 75 73 65 72 2c 75 73 65 72 29 esce(euser,user)
83f0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
8400: 20 20 20 20 20 20 20 22 20 20 46 52 4f 4d 20 65 " FROM e
8410: 76 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 64 vent WHERE objid
8420: 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 69 66 =%d", rid);. if
8430: 28 20 7a 55 73 65 72 3d 3d 30 20 29 20 66 6f 73 ( zUser==0 ) fos
8440: 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d sil_redirect_hom
8450: 65 28 29 3b 0a 20 20 7a 4e 65 77 55 73 65 72 20 e();. zNewUser
8460: 3d 20 50 44 28 22 75 22 2c 7a 55 73 65 72 29 3b = PD("u",zUser);
8470: 0a 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 74 65 . zDate = db_te
8480: 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61 xt(0, "SELECT da
8490: 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 22 0a 20 tetime(mtime)".
84a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
84b0: 20 20 20 20 22 20 20 46 52 4f 4d 20 65 76 65 6e " FROM even
84c0: 74 20 57 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 t WHERE objid=%d
84d0: 22 2c 20 72 69 64 29 3b 0a 20 20 69 66 28 20 7a ", rid);. if( z
84e0: 44 61 74 65 3d 3d 30 20 29 20 66 6f 73 73 69 6c Date==0 ) fossil
84f0: 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 _redirect_home()
8500: 3b 0a 20 20 7a 4e 65 77 44 61 74 65 20 3d 20 50 ;. zNewDate = P
8510: 44 28 22 64 74 22 2c 7a 44 61 74 65 29 3b 0a 20 D("dt",zDate);.
8520: 20 7a 43 6f 6c 6f 72 20 3d 20 64 62 5f 74 65 78 zColor = db_tex
8530: 74 28 22 22 2c 20 22 53 45 4c 45 43 54 20 62 67 t("", "SELECT bg
8540: 63 6f 6c 6f 72 22 0a 20 20 20 20 20 20 20 20 20 color".
8550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
8560: 20 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 FROM event WHE
8570: 52 45 20 6f 62 6a 69 64 3d 25 64 22 2c 20 72 69 RE objid=%d", ri
8580: 64 29 3b 0a 20 20 7a 4e 65 77 43 6f 6c 6f 72 20 d);. zNewColor
8590: 3d 20 50 44 28 22 63 6c 72 22 2c 7a 43 6f 6c 6f = PD("clr",zColo
85a0: 72 29 3b 0a 20 20 66 50 72 6f 70 61 67 61 74 65 r);. fPropagate
85b0: 43 6f 6c 6f 72 20 3d 20 50 28 22 70 63 6c 72 22 Color = P("pclr"
85c0: 29 21 3d 30 3b 0a 20 20 7a 4e 65 77 54 61 67 46 )!=0;. zNewTagF
85d0: 6c 61 67 20 3d 20 50 28 22 6e 65 77 74 61 67 22 lag = P("newtag"
85e0: 29 20 3f 20 22 20 63 68 65 63 6b 65 64 22 20 3a ) ? " checked" :
85f0: 20 22 22 3b 0a 20 20 7a 4e 65 77 54 61 67 20 3d "";. zNewTag =
8600: 20 50 44 28 22 74 61 67 6e 61 6d 65 22 2c 22 22 PD("tagname",""
8610: 29 3b 0a 20 20 7a 4e 65 77 42 72 46 6c 61 67 20 );. zNewBrFlag
8620: 3d 20 50 28 22 6e 65 77 62 72 22 29 20 3f 20 22 = P("newbr") ? "
8630: 20 63 68 65 63 6b 65 64 22 20 3a 20 22 22 3b 0a checked" : "";.
8640: 20 20 7a 4e 65 77 42 72 61 6e 63 68 20 3d 20 50 zNewBranch = P
8650: 44 28 22 62 72 6e 61 6d 65 22 2c 22 22 29 3b 0a D("brname","");.
8660: 20 20 7a 43 6c 6f 73 65 46 6c 61 67 20 3d 20 50 zCloseFlag = P
8670: 28 22 63 6c 6f 73 65 22 29 20 3f 20 22 20 63 68 ("close") ? " ch
8680: 65 63 6b 65 64 22 20 3a 20 22 22 3b 0a 20 20 69 ecked" : "";. i
8690: 66 28 20 50 28 22 61 70 70 6c 79 22 29 20 29 7b f( P("apply") ){
86a0: 0a 20 20 20 20 42 6c 6f 62 20 63 74 72 6c 3b 0a . Blob ctrl;.
86b0: 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 65 3b char *zDate;
86c0: 0a 20 20 20 20 69 6e 74 20 6e 43 68 6e 67 20 3d . int nChng =
86d0: 20 30 3b 0a 0a 20 20 20 20 6c 6f 67 69 6e 5f 76 0;.. login_v
86e0: 65 72 69 66 79 5f 63 73 72 66 5f 73 65 63 72 65 erify_csrf_secre
86f0: 74 28 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 t();. blob_ze
8700: 72 6f 28 26 63 74 72 6c 29 3b 0a 20 20 20 20 7a ro(&ctrl);. z
8710: 44 61 74 65 20 3d 20 64 62 5f 74 65 78 74 28 30 Date = db_text(0
8720: 2c 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 , "SELECT dateti
8730: 6d 65 28 27 6e 6f 77 27 29 22 29 3b 0a 20 20 20 me('now')");.
8740: 20 7a 44 61 74 65 5b 31 30 5d 20 3d 20 27 54 27 zDate[10] = 'T'
8750: 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e ;. blob_appen
8760: 64 66 28 26 63 74 72 6c 2c 20 22 44 20 25 73 5c df(&ctrl, "D %s\
8770: 6e 22 2c 20 7a 44 61 74 65 29 3b 0a 20 20 20 20 n", zDate);.
8780: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 43 db_multi_exec("C
8790: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 REATE TEMP TABLE
87a0: 20 6e 65 77 74 61 67 73 28 74 61 67 20 55 4e 49 newtags(tag UNI
87b0: 51 55 45 2c 20 70 72 65 66 69 78 2c 20 76 61 6c QUE, prefix, val
87c0: 75 65 29 22 29 3b 0a 20 20 20 20 69 66 28 20 7a ue)");. if( z
87d0: 4e 65 77 43 6f 6c 6f 72 5b 30 5d 20 26 26 20 73 NewColor[0] && s
87e0: 74 72 63 6d 70 28 7a 43 6f 6c 6f 72 2c 7a 4e 65 trcmp(zColor,zNe
87f0: 77 43 6f 6c 6f 72 29 21 3d 30 20 29 7b 0a 20 20 wColor)!=0 ){.
8800: 20 20 20 20 63 68 61 72 20 2a 7a 50 72 65 66 69 char *zPrefi
8810: 78 20 3d 20 22 2b 22 3b 0a 20 20 20 20 20 20 69 x = "+";. i
8820: 66 28 20 66 50 72 6f 70 61 67 61 74 65 43 6f 6c f( fPropagateCol
8830: 6f 72 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 50 or ){. zP
8840: 72 65 66 69 78 20 3d 20 22 2a 22 3b 0a 20 20 20 refix = "*";.
8850: 20 20 20 7d 0a 20 20 20 20 20 20 64 62 5f 6d 75 }. db_mu
8860: 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 lti_exec("REPLAC
8870: 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 E INTO newtags V
8880: 41 4c 55 45 53 28 27 62 67 63 6f 6c 6f 72 27 2c ALUES('bgcolor',
8890: 25 51 2c 25 51 29 22 2c 0a 20 20 20 20 20 20 20 %Q,%Q)",.
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 50 72 zPr
88b0: 65 66 69 78 2c 20 7a 4e 65 77 43 6f 6c 6f 72 29 efix, zNewColor)
88c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 ;. }. if(
88d0: 7a 4e 65 77 43 6f 6c 6f 72 5b 30 5d 3d 3d 30 20 zNewColor[0]==0
88e0: 26 26 20 7a 43 6f 6c 6f 72 5b 30 5d 21 3d 30 20 && zColor[0]!=0
88f0: 29 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 ){. db_mult
8900: 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 i_exec("REPLACE
8910: 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c INTO newtags VAL
8920: 55 45 53 28 27 62 67 63 6f 6c 6f 72 27 2c 27 2d UES('bgcolor','-
8930: 27 2c 4e 55 4c 4c 29 22 29 3b 0a 20 20 20 20 7d ',NULL)");. }
8940: 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 . if( strcmp(
8950: 7a 43 6f 6d 6d 65 6e 74 2c 7a 4e 65 77 43 6f 6d zComment,zNewCom
8960: 6d 65 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 ment)!=0 ){.
8970: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 db_multi_exec(
8980: 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 "REPLACE INTO ne
8990: 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 63 6f wtags VALUES('co
89a0: 6d 6d 65 6e 74 27 2c 27 2b 27 2c 25 51 29 22 2c mment','+',%Q)",
89b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
89c0: 20 20 20 20 20 7a 4e 65 77 43 6f 6d 6d 65 6e 74 zNewComment
89d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 );. }. if(
89e0: 20 73 74 72 63 6d 70 28 7a 44 61 74 65 2c 7a 4e strcmp(zDate,zN
89f0: 65 77 44 61 74 65 29 21 3d 30 20 29 7b 0a 20 20 ewDate)!=0 ){.
8a00: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 db_multi_exe
8a10: 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 c("REPLACE INTO
8a20: 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 newtags VALUES('
8a30: 64 61 74 65 27 2c 27 2b 27 2c 25 51 29 22 2c 0a date','+',%Q)",.
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8a50: 20 20 20 20 7a 4e 65 77 44 61 74 65 29 3b 0a 20 zNewDate);.
8a60: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 }. if( str
8a70: 63 6d 70 28 7a 55 73 65 72 2c 7a 4e 65 77 55 73 cmp(zUser,zNewUs
8a80: 65 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 er)!=0 ){.
8a90: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 db_multi_exec("R
8aa0: 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 EPLACE INTO newt
8ab0: 61 67 73 20 56 41 4c 55 45 53 28 27 75 73 65 72 ags VALUES('user
8ac0: 27 2c 27 2b 27 2c 25 51 29 22 2c 20 7a 4e 65 77 ','+',%Q)", zNew
8ad0: 55 73 65 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 User);. }.
8ae0: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a db_prepare(&q,.
8af0: 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 74 "SELECT t
8b00: 61 67 2e 74 61 67 69 64 2c 20 74 61 67 6e 61 6d ag.tagid, tagnam
8b10: 65 20 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 e FROM tagxref,
8b20: 74 61 67 22 0a 20 20 20 20 20 20 20 22 20 57 48 tag". " WH
8b30: 45 52 45 20 74 61 67 78 72 65 66 2e 72 69 64 3d ERE tagxref.rid=
8b40: 25 64 20 41 4e 44 20 74 61 67 74 79 70 65 3e 30 %d AND tagtype>0
8b50: 20 41 4e 44 20 74 61 67 78 72 65 66 2e 74 61 67 AND tagxref.tag
8b60: 69 64 3d 74 61 67 2e 74 61 67 69 64 22 2c 0a 20 id=tag.tagid",.
8b70: 20 20 20 20 20 20 72 69 64 0a 20 20 20 20 29 3b rid. );
8b80: 0a 20 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 . while( db_s
8b90: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
8ba0: 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 ROW ){. int
8bb0: 20 74 61 67 69 64 20 3d 20 64 62 5f 63 6f 6c 75 tagid = db_colu
8bc0: 6d 6e 5f 69 6e 74 28 26 71 2c 20 30 29 3b 0a 20 mn_int(&q, 0);.
8bd0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
8be0: 2a 7a 54 61 67 20 3d 20 64 62 5f 63 6f 6c 75 6d *zTag = db_colum
8bf0: 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 n_text(&q, 1);.
8c00: 20 20 20 20 20 63 68 61 72 20 7a 4c 61 62 65 6c char zLabel
8c10: 5b 33 30 5d 3b 0a 20 20 20 20 20 20 73 70 72 69 [30];. spri
8c20: 6e 74 66 28 7a 4c 61 62 65 6c 2c 20 22 63 25 64 ntf(zLabel, "c%d
8c30: 22 2c 20 74 61 67 69 64 29 3b 0a 20 20 20 20 20 ", tagid);.
8c40: 20 69 66 28 20 50 28 7a 4c 61 62 65 6c 29 20 29 if( P(zLabel) )
8c50: 7b 0a 20 20 20 20 20 20 20 20 64 62 5f 6d 75 6c {. db_mul
8c60: 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 ti_exec("REPLACE
8c70: 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 INTO newtags VA
8c80: 4c 55 45 53 28 25 51 2c 27 2d 27 2c 4e 55 4c 4c LUES(%Q,'-',NULL
8c90: 29 22 2c 20 7a 54 61 67 29 3b 0a 20 20 20 20 20 )", zTag);.
8ca0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f }. }. db_
8cb0: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
8cc0: 20 20 69 66 28 20 7a 43 6c 6f 73 65 46 6c 61 67 if( zCloseFlag
8cd0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 64 62 5f [0] ){. db_
8ce0: 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c multi_exec("REPL
8cf0: 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 ACE INTO newtags
8d00: 20 56 41 4c 55 45 53 28 27 63 6c 6f 73 65 64 27 VALUES('closed'
8d10: 2c 27 2b 27 2c 4e 55 4c 4c 29 22 29 3b 0a 20 20 ,'+',NULL)");.
8d20: 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 }. if( zNew
8d30: 54 61 67 46 6c 61 67 5b 30 5d 20 29 7b 0a 20 20 TagFlag[0] ){.
8d40: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 db_multi_exe
8d50: 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 c("REPLACE INTO
8d60: 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 newtags VALUES('
8d70: 73 79 6d 2d 25 71 27 2c 27 2b 27 2c 4e 55 4c 4c sym-%q','+',NULL
8d80: 29 22 2c 20 7a 4e 65 77 54 61 67 29 3b 0a 20 20 )", zNewTag);.
8d90: 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 }. if( zNew
8da0: 42 72 46 6c 61 67 5b 30 5d 20 29 7b 0a 20 20 20 BrFlag[0] ){.
8db0: 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 db_multi_exec
8dc0: 28 0a 20 20 20 20 20 20 20 20 22 52 45 50 4c 41 (. "REPLA
8dd0: 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 CE INTO newtags
8de0: 22 0a 20 20 20 20 20 20 20 20 22 20 53 45 4c 45 ". " SELE
8df0: 43 54 20 74 61 67 6e 61 6d 65 2c 20 27 2d 27 2c CT tagname, '-',
8e00: 20 4e 55 4c 4c 20 46 52 4f 4d 20 74 61 67 78 72 NULL FROM tagxr
8e10: 65 66 2c 20 74 61 67 22 0a 20 20 20 20 20 20 20 ef, tag".
8e20: 20 22 20 20 57 48 45 52 45 20 74 61 67 78 72 65 " WHERE tagxre
8e30: 66 2e 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 f.rid=%d AND tag
8e40: 74 79 70 65 3d 3d 32 22 0a 20 20 20 20 20 20 20 type==2".
8e50: 20 22 20 20 20 20 41 4e 44 20 74 61 67 6e 61 6d " AND tagnam
8e60: 65 20 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 22 0a e GLOB 'sym-*'".
8e70: 20 20 20 20 20 20 20 20 22 20 20 20 20 41 4e 44 " AND
8e80: 20 74 61 67 2e 74 61 67 69 64 3d 74 61 67 78 72 tag.tagid=tagxr
8e90: 65 66 2e 74 61 67 69 64 22 2c 0a 20 20 20 20 20 ef.tagid",.
8ea0: 20 20 20 72 69 64 0a 20 20 20 20 20 20 29 3b 0a rid. );.
8eb0: 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 db_multi_e
8ec0: 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 xec("REPLACE INT
8ed0: 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 O newtags VALUES
8ee0: 28 27 62 72 61 6e 63 68 27 2c 27 2a 27 2c 25 51 ('branch','*',%Q
8ef0: 29 22 2c 20 7a 4e 65 77 42 72 61 6e 63 68 29 3b )", zNewBranch);
8f00: 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f . db_multi_
8f10: 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e exec("REPLACE IN
8f20: 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 TO newtags VALUE
8f30: 53 28 27 73 79 6d 2d 25 71 27 2c 27 2a 27 2c 4e S('sym-%q','*',N
8f40: 55 4c 4c 29 22 2c 0a 20 20 20 20 20 20 20 20 20 ULL)",.
8f50: 20 20 20 20 20 20 20 20 20 20 20 7a 4e 65 77 42 zNewB
8f60: 72 61 6e 63 68 29 3b 0a 20 20 20 20 7d 0a 20 20 ranch);. }.
8f70: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c db_prepare(&q,
8f80: 20 22 53 45 4c 45 43 54 20 74 61 67 2c 20 70 72 "SELECT tag, pr
8f90: 65 66 69 78 2c 20 76 61 6c 75 65 20 46 52 4f 4d efix, value FROM
8fa0: 20 6e 65 77 74 61 67 73 22 0a 20 20 20 20 20 20 newtags".
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f " O
8fc0: 52 44 45 52 20 42 59 20 70 72 65 66 69 78 20 7c RDER BY prefix |
8fd0: 7c 20 74 61 67 22 29 3b 0a 20 20 20 20 77 68 69 | tag");. whi
8fe0: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d le( db_step(&q)=
8ff0: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
9000: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
9010: 2a 7a 54 61 67 20 3d 20 64 62 5f 63 6f 6c 75 6d *zTag = db_colum
9020: 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 n_text(&q, 0);.
9030: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
9040: 2a 7a 50 72 65 66 69 78 20 3d 20 64 62 5f 63 6f *zPrefix = db_co
9050: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 lumn_text(&q, 1)
9060: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 ;. const ch
9070: 61 72 20 2a 7a 56 61 6c 75 65 20 3d 20 64 62 5f ar *zValue = db_
9080: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
9090: 32 29 3b 0a 20 20 20 20 20 20 6e 43 68 6e 67 2b 2);. nChng+
90a0: 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 56 61 +;. if( zVa
90b0: 6c 75 65 20 29 7b 0a 20 20 20 20 20 20 20 20 62 lue ){. b
90c0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 63 74 72 lob_appendf(&ctr
90d0: 6c 2c 20 22 54 20 25 73 25 46 20 25 73 20 25 46 l, "T %s%F %s %F
90e0: 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 7a 54 \n", zPrefix, zT
90f0: 61 67 2c 20 7a 55 75 69 64 2c 20 7a 56 61 6c 75 ag, zUuid, zValu
9100: 65 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b e);. }else{
9110: 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 . blob_ap
9120: 70 65 6e 64 66 28 26 63 74 72 6c 2c 20 22 54 20 pendf(&ctrl, "T
9130: 25 73 25 46 20 25 73 5c 6e 22 2c 20 7a 50 72 65 %s%F %s\n", zPre
9140: 66 69 78 2c 20 7a 54 61 67 2c 20 7a 55 75 69 64 fix, zTag, zUuid
9150: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d );. }. }
9160: 0a 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 . db_finalize
9170: 28 26 71 29 3b 0a 20 20 20 20 69 66 28 20 6e 43 (&q);. if( nC
9180: 68 6e 67 3e 30 20 29 7b 0a 20 20 20 20 20 20 69 hng>0 ){. i
9190: 6e 74 20 6e 72 69 64 3b 0a 20 20 20 20 20 20 42 nt nrid;. B
91a0: 6c 6f 62 20 63 6b 73 75 6d 3b 0a 20 20 20 20 20 lob cksum;.
91b0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 63 blob_appendf(&c
91c0: 74 72 6c 2c 20 22 55 20 25 46 5c 6e 22 2c 20 67 trl, "U %F\n", g
91d0: 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 20 20 20 20 .zLogin);.
91e0: 6d 64 35 73 75 6d 5f 62 6c 6f 62 28 26 63 74 72 md5sum_blob(&ctr
91f0: 6c 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 20 20 l, &cksum);.
9200: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 blob_appendf(&
9210: 63 74 72 6c 2c 20 22 5a 20 25 62 5c 6e 22 2c 20 ctrl, "Z %b\n",
9220: 26 63 6b 73 75 6d 29 3b 0a 20 20 20 20 20 20 64 &cksum);. d
9230: 62 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 b_begin_transact
9240: 69 6f 6e 28 29 3b 0a 20 20 20 20 20 20 67 2e 6d ion();. g.m
9250: 61 72 6b 50 72 69 76 61 74 65 20 3d 20 63 6f 6e arkPrivate = con
9260: 74 65 6e 74 5f 69 73 5f 70 72 69 76 61 74 65 28 tent_is_private(
9270: 72 69 64 29 3b 0a 20 20 20 20 20 20 6e 72 69 64 rid);. nrid
9280: 20 3d 20 63 6f 6e 74 65 6e 74 5f 70 75 74 28 26 = content_put(&
9290: 63 74 72 6c 2c 20 30 2c 20 30 29 3b 0a 20 20 20 ctrl, 0, 0);.
92a0: 20 20 20 6d 61 6e 69 66 65 73 74 5f 63 72 6f 73 manifest_cros
92b0: 73 6c 69 6e 6b 28 6e 72 69 64 2c 20 26 63 74 72 slink(nrid, &ctr
92c0: 6c 29 3b 0a 20 20 20 20 20 20 64 62 5f 65 6e 64 l);. db_end
92d0: 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 30 29 3b _transaction(0);
92e0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 67 69 5f 72 . }. cgi_r
92f0: 65 64 69 72 65 63 74 66 28 22 63 69 3f 6e 61 6d edirectf("ci?nam
9300: 65 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 7d e=%d", rid);. }
9310: 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 63 6f . blob_zero(&co
9320: 6d 6d 65 6e 74 29 3b 0a 20 20 62 6c 6f 62 5f 61 mment);. blob_a
9330: 70 70 65 6e 64 28 26 63 6f 6d 6d 65 6e 74 2c 20 ppend(&comment,
9340: 7a 4e 65 77 43 6f 6d 6d 65 6e 74 2c 20 2d 31 29 zNewComment, -1)
9350: 3b 0a 20 20 7a 55 75 69 64 5b 31 30 5d 20 3d 20 ;. zUuid[10] =
9360: 30 3b 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 0;. style_heade
9370: 72 28 22 45 64 69 74 20 43 68 65 63 6b 2d 69 6e r("Edit Check-in
9380: 20 5b 25 73 5d 22 2c 20 7a 55 75 69 64 29 3b 0a [%s]", zUuid);.
9390: 20 20 69 66 28 20 50 28 22 70 72 65 76 69 65 77 if( P("preview
93a0: 22 29 20 29 7b 0a 20 20 20 20 42 6c 6f 62 20 73 ") ){. Blob s
93b0: 75 66 66 69 78 3b 0a 20 20 20 20 69 6e 74 20 6e uffix;. int n
93c0: 54 61 67 20 3d 20 30 3b 0a 20 20 20 20 40 20 3c Tag = 0;. @ <
93d0: 62 3e 50 72 65 76 69 65 77 3a 3c 2f 62 3e 0a 20 b>Preview:</b>.
93e0: 20 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 @ <blockquote
93f0: 3e 0a 20 20 20 20 40 20 3c 74 61 62 6c 65 20 62 >. @ <table b
9400: 6f 72 64 65 72 3d 30 3e 0a 20 20 20 20 69 66 28 order=0>. if(
9410: 20 7a 4e 65 77 43 6f 6c 6f 72 20 26 26 20 7a 4e zNewColor && zN
9420: 65 77 43 6f 6c 6f 72 5b 30 5d 20 29 7b 0a 20 20 ewColor[0] ){.
9430: 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 62 67 @ <tr><td bg
9440: 63 6f 6c 6f 72 3d 22 25 68 28 7a 4e 65 77 43 6f color="%h(zNewCo
9450: 6c 6f 72 29 22 3e 0a 20 20 20 20 7d 65 6c 73 65 lor)">. }else
9460: 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 {. @ <tr><t
9470: 64 3e 0a 20 20 20 20 7d 0a 20 20 20 20 77 69 6b d>. }. wik
9480: 69 5f 63 6f 6e 76 65 72 74 28 26 63 6f 6d 6d 65 i_convert(&comme
9490: 6e 74 2c 20 30 2c 20 57 49 4b 49 5f 49 4e 4c 49 nt, 0, WIKI_INLI
94a0: 4e 45 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 NE);. blob_ze
94b0: 72 6f 28 26 73 75 66 66 69 78 29 3b 0a 20 20 20 ro(&suffix);.
94c0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 73 blob_appendf(&s
94d0: 75 66 66 69 78 2c 20 22 28 75 73 65 72 3a 20 25 uffix, "(user: %
94e0: 68 22 2c 20 7a 4e 65 77 55 73 65 72 29 3b 0a 20 h", zNewUser);.
94f0: 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 db_prepare(&q
9500: 2c 20 22 53 45 4c 45 43 54 20 73 75 62 73 74 72 , "SELECT substr
9510: 28 74 61 67 6e 61 6d 65 2c 35 29 20 46 52 4f 4d (tagname,5) FROM
9520: 20 74 61 67 78 72 65 66 2c 20 74 61 67 22 0a 20 tagxref, tag".
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9540: 20 20 22 20 57 48 45 52 45 20 74 61 67 6e 61 6d " WHERE tagnam
9550: 65 20 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 20 41 e GLOB 'sym-*' A
9560: 4e 44 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 ND tagxref.rid=%
9570: 64 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d".
9580: 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 74 61 " AND ta
9590: 67 74 79 70 65 3e 31 20 41 4e 44 20 74 61 67 2e gtype>1 AND tag.
95a0: 74 61 67 69 64 3d 74 61 67 78 72 65 66 2e 74 61 tagid=tagxref.ta
95b0: 67 69 64 22 2c 0a 20 20 20 20 20 20 20 20 20 20 gid",.
95c0: 20 20 20 20 20 20 20 20 20 72 69 64 29 3b 0a 20 rid);.
95d0: 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 while( db_ste
95e0: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
95f0: 57 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 W ){. const
9600: 20 63 68 61 72 20 2a 7a 54 61 67 20 3d 20 64 62 char *zTag = db
9610: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
9620: 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 0);. if( n
9630: 54 61 67 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 Tag==0 ){.
9640: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 blob_appendf(&
9650: 73 75 66 66 69 78 2c 20 22 2c 20 74 61 67 73 3a suffix, ", tags:
9660: 20 25 68 22 2c 20 7a 54 61 67 29 3b 0a 20 20 20 %h", zTag);.
9670: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
9680: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 blob_appendf(&
9690: 73 75 66 66 69 78 2c 20 22 2c 20 25 68 22 2c 20 suffix, ", %h",
96a0: 7a 54 61 67 29 3b 0a 20 20 20 20 20 20 7d 0a 20 zTag);. }.
96b0: 20 20 20 20 20 6e 54 61 67 2b 2b 3b 0a 20 20 20 nTag++;.
96c0: 20 7d 0a 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 }. db_finali
96d0: 7a 65 28 26 71 29 3b 0a 20 20 20 20 62 6c 6f 62 ze(&q);. blob
96e0: 5f 61 70 70 65 6e 64 66 28 26 73 75 66 66 69 78 _appendf(&suffix
96f0: 2c 20 22 29 22 29 3b 0a 20 20 20 20 40 20 25 73 , ")");. @ %s
9700: 28 62 6c 6f 62 5f 73 74 72 28 26 73 75 66 66 69 (blob_str(&suffi
9710: 78 29 29 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c x)). @ </td><
9720: 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20 20 20 /tr></table>.
9730: 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e @ </blockquote>
9740: 0a 20 20 20 20 40 20 3c 68 72 3e 0a 20 20 20 20 . @ <hr>.
9750: 62 6c 6f 62 5f 72 65 73 65 74 28 26 73 75 66 66 blob_reset(&suff
9760: 69 78 29 3b 0a 20 20 7d 0a 20 20 40 20 3c 70 3e ix);. }. @ <p>
9770: 4d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 Make changes to
9780: 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 63 68 attributes of ch
9790: 65 63 6b 2d 69 6e 0a 20 20 40 20 5b 3c 61 20 68 eck-in. @ [<a h
97a0: 72 65 66 3d 22 63 69 3f 6e 61 6d 65 3d 25 64 28 ref="ci?name=%d(
97b0: 72 69 64 29 22 3e 25 73 28 7a 55 75 69 64 29 3c rid)">%s(zUuid)<
97c0: 2f 61 3e 5d 3a 3c 2f 70 3e 0a 20 20 40 20 3c 66 /a>]:</p>. @ <f
97d0: 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 25 73 28 67 orm action="%s(g
97e0: 2e 7a 42 61 73 65 55 52 4c 29 2f 63 69 5f 65 64 .zBaseURL)/ci_ed
97f0: 69 74 22 20 6d 65 74 68 6f 64 3d 22 50 4f 53 54 it" method="POST
9800: 22 3e 0a 20 20 6c 6f 67 69 6e 5f 69 6e 73 65 72 ">. login_inser
9810: 74 5f 63 73 72 66 5f 73 65 63 72 65 74 28 29 3b t_csrf_secret();
9820: 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 . @ <input type
9830: 3d 22 68 69 64 64 65 6e 22 20 6e 61 6d 65 3d 22 ="hidden" name="
9840: 72 22 20 76 61 6c 75 65 3d 22 25 64 28 72 69 64 r" value="%d(rid
9850: 29 22 3e 0a 20 20 40 20 3c 74 61 62 6c 65 20 62 )">. @ <table b
9860: 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 73 70 order="0" cellsp
9870: 61 63 69 6e 67 3d 22 31 30 22 3e 0a 0a 20 20 40 acing="10">.. @
9880: 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 <tr><td align="
9890: 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 right" valign="t
98a0: 6f 70 22 3e 3c 62 3e 55 73 65 72 3a 3c 2f 62 3e op"><b>User:</b>
98b0: 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 61 </td>. @ <td va
98c0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 lign="top">. @
98d0: 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 74 <input type="t
98e0: 65 78 74 22 20 6e 61 6d 65 3d 22 75 22 20 73 69 ext" name="u" si
98f0: 7a 65 3d 22 32 30 22 20 76 61 6c 75 65 3d 22 25 ze="20" value="%
9900: 68 28 7a 4e 65 77 55 73 65 72 29 22 3e 0a 20 20 h(zNewUser)">.
9910: 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 20 @ </td></tr>..
9920: 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d @ <tr><td align=
9930: 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 "right" valign="
9940: 74 6f 70 22 3e 3c 62 3e 43 6f 6d 6d 65 6e 74 3a top"><b>Comment:
9950: 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 </b></td>. @ <t
9960: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a d valign="top">.
9970: 20 20 40 20 3c 74 65 78 74 61 72 65 61 20 6e 61 @ <textarea na
9980: 6d 65 3d 22 63 22 20 72 6f 77 73 3d 22 31 30 22 me="c" rows="10"
9990: 20 63 6f 6c 73 3d 22 38 30 22 3e 25 68 28 7a 4e cols="80">%h(zN
99a0: 65 77 43 6f 6d 6d 65 6e 74 29 3c 2f 74 65 78 74 ewComment)</text
99b0: 61 72 65 61 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c area>. @ </td><
99c0: 2f 74 72 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 /tr>.. @ <tr><t
99d0: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 d align="right"
99e0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e valign="top"><b>
99f0: 43 68 65 63 6b 2d 69 6e 20 54 69 6d 65 3a 3c 2f Check-in Time:</
9a00: 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 b></td>. @ <td
9a10: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 valign="top">.
9a20: 40 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
9a30: 22 74 65 78 74 22 20 6e 61 6d 65 3d 22 64 74 22 "text" name="dt"
9a40: 20 73 69 7a 65 3d 22 32 30 22 20 76 61 6c 75 65 size="20" value
9a50: 3d 22 25 68 28 7a 4e 65 77 44 61 74 65 29 22 3e ="%h(zNewDate)">
9a60: 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a . @ </td></tr>.
9a70: 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 . @ <tr><td ali
9a80: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 gn="right" valig
9a90: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 42 61 63 6b 67 n="top"><b>Backg
9aa0: 72 6f 75 6e 64 20 43 6f 6c 6f 72 3a 3c 2f 62 3e round Color:</b>
9ab0: 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 61 </td>. @ <td va
9ac0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 lign="top">. @
9ad0: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 <table border=0
9ae0: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 30 20 63 65 cellpadding=0 ce
9af0: 6c 6c 73 70 61 63 69 6e 67 3d 31 3e 0a 20 20 40 llspacing=1>. @
9b00: 20 3c 74 72 3e 3c 74 64 20 63 6f 6c 73 70 61 6e <tr><td colspan
9b10: 3d 22 36 22 20 61 6c 69 67 6e 3d 22 6c 65 66 74 ="6" align="left
9b20: 22 3e 0a 20 20 69 66 28 20 66 50 72 6f 70 61 67 ">. if( fPropag
9b30: 61 74 65 43 6f 6c 6f 72 20 29 7b 0a 20 20 20 20 ateColor ){.
9b40: 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 @ <input type="c
9b50: 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 70 heckbox" name="p
9b60: 63 6c 72 22 20 63 68 65 63 6b 65 64 3e 0a 20 20 clr" checked>.
9b70: 7d 65 6c 73 65 7b 0a 20 20 20 20 40 20 3c 69 6e }else{. @ <in
9b80: 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 put type="checkb
9b90: 6f 78 22 20 6e 61 6d 65 3d 22 70 63 6c 72 22 3e ox" name="pclr">
9ba0: 0a 20 20 7d 0a 20 20 40 20 50 72 6f 70 61 67 61 . }. @ Propaga
9bb0: 74 65 20 63 6f 6c 6f 72 20 74 6f 20 64 65 73 63 te color to desc
9bc0: 65 6e 64 61 6e 74 73 3c 2f 69 6e 70 75 74 3e 3c endants</input><
9bd0: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c 74 /td></tr>. @ <t
9be0: 72 3e 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c r>. for(i=0; i<
9bf0: 6e 43 6f 6c 6f 72 3b 20 69 2b 2b 29 7b 0a 20 20 nColor; i++){.
9c00: 20 20 69 66 28 20 61 43 6f 6c 6f 72 5b 69 5d 2e if( aColor[i].
9c10: 7a 43 6f 6c 6f 72 5b 30 5d 20 29 7b 0a 20 20 20 zColor[0] ){.
9c20: 20 20 20 40 20 3c 74 64 20 62 67 63 6f 6c 6f 72 @ <td bgcolor
9c30: 3d 22 25 68 28 61 43 6f 6c 6f 72 5b 69 5d 2e 7a ="%h(aColor[i].z
9c40: 43 6f 6c 6f 72 29 22 3e 0a 20 20 20 20 7d 65 6c Color)">. }el
9c50: 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 74 64 3e se{. @ <td>
9c60: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 . }. if( s
9c70: 74 72 63 6d 70 28 7a 4e 65 77 43 6f 6c 6f 72 2c trcmp(zNewColor,
9c80: 20 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f aColor[i].zColo
9c90: 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 40 r)==0 ){. @
9ca0: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 72 61 <input type="ra
9cb0: 64 69 6f 22 20 6e 61 6d 65 3d 22 63 6c 72 22 20 dio" name="clr"
9cc0: 76 61 6c 75 65 3d 22 25 68 28 61 43 6f 6c 6f 72 value="%h(aColor
9cd0: 5b 69 5d 2e 7a 43 6f 6c 6f 72 29 22 20 63 68 65 [i].zColor)" che
9ce0: 63 6b 65 64 3e 0a 20 20 20 20 7d 65 6c 73 65 7b cked>. }else{
9cf0: 0a 20 20 20 20 20 20 40 20 3c 69 6e 70 75 74 20 . @ <input
9d00: 74 79 70 65 3d 22 72 61 64 69 6f 22 20 6e 61 6d type="radio" nam
9d10: 65 3d 22 63 6c 72 22 20 76 61 6c 75 65 3d 22 25 e="clr" value="%
9d20: 68 28 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 6f 6c h(aColor[i].zCol
9d30: 6f 72 29 22 3e 0a 20 20 20 20 7d 0a 20 20 20 20 or)">. }.
9d40: 40 20 25 68 28 61 43 6f 6c 6f 72 5b 69 5d 2e 7a @ %h(aColor[i].z
9d50: 43 4e 61 6d 65 29 3c 2f 69 6e 70 75 74 3e 3c 2f CName)</input></
9d60: 74 64 3e 0a 20 20 20 20 69 66 28 20 28 69 25 36 td>. if( (i%6
9d70: 29 3d 3d 35 20 26 26 20 69 2b 31 3c 6e 43 6f 6c )==5 && i+1<nCol
9d80: 6f 72 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 2f or ){. @ </
9d90: 74 72 3e 3c 74 72 3e 0a 20 20 20 20 7d 0a 20 20 tr><tr>. }.
9da0: 7d 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 40 20 }. @ </tr>. @
9db0: 3c 2f 74 61 62 6c 65 3e 0a 20 20 40 20 3c 2f 74 </table>. @ </t
9dc0: 64 3e 3c 2f 74 72 3e 0a 0a 20 20 40 20 3c 74 72 d></tr>.. @ <tr
9dd0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 ><td align="righ
9de0: 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e t" valign="top">
9df0: 3c 62 3e 54 61 67 73 3a 3c 2f 62 3e 3c 2f 74 64 <b>Tags:</b></td
9e00: 3e 0a 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e >. @ <td valign
9e10: 3d 22 74 6f 70 22 3e 0a 20 20 40 20 3c 69 6e 70 ="top">. @ <inp
9e20: 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f ut type="checkbo
9e30: 78 22 20 6e 61 6d 65 3d 22 6e 65 77 74 61 67 22 x" name="newtag"
9e40: 25 73 28 7a 4e 65 77 54 61 67 46 6c 61 67 29 3e %s(zNewTagFlag)>
9e50: 0a 20 20 40 20 41 64 64 20 74 68 65 20 66 6f 6c . @ Add the fol
9e60: 6c 6f 77 69 6e 67 20 6e 65 77 20 74 61 67 20 6e lowing new tag n
9e70: 61 6d 65 20 74 6f 20 74 68 69 73 20 63 68 65 63 ame to this chec
9e80: 6b 2d 69 6e 3a 0a 20 20 40 20 3c 69 6e 70 75 74 k-in:. @ <input
9e90: 20 74 79 70 65 3d 22 74 65 78 74 22 20 77 69 64 type="text" wid
9ea0: 74 68 3d 22 31 35 22 20 6e 61 6d 65 3d 22 74 61 th="15" name="ta
9eb0: 67 6e 61 6d 65 22 20 76 61 6c 75 65 3d 22 25 68 gname" value="%h
9ec0: 28 7a 4e 65 77 54 61 67 29 22 3e 0a 20 20 64 62 (zNewTag)">. db
9ed0: 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 _prepare(&q,.
9ee0: 20 20 22 53 45 4c 45 43 54 20 74 61 67 2e 74 61 "SELECT tag.ta
9ef0: 67 69 64 2c 20 74 61 67 6e 61 6d 65 20 46 52 4f gid, tagname FRO
9f00: 4d 20 74 61 67 78 72 65 66 2c 20 74 61 67 22 0a M tagxref, tag".
9f10: 20 20 20 20 20 22 20 57 48 45 52 45 20 74 61 67 " WHERE tag
9f20: 78 72 65 66 2e 72 69 64 3d 25 64 20 41 4e 44 20 xref.rid=%d AND
9f30: 74 61 67 74 79 70 65 3e 30 20 41 4e 44 20 74 61 tagtype>0 AND ta
9f40: 67 78 72 65 66 2e 74 61 67 69 64 3d 74 61 67 2e gxref.tagid=tag.
9f50: 74 61 67 69 64 22 0a 20 20 20 20 20 22 20 4f 52 tagid". " OR
9f60: 44 45 52 20 42 59 20 43 41 53 45 20 57 48 45 4e DER BY CASE WHEN
9f70: 20 74 61 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 tagname GLOB 's
9f80: 79 6d 2d 2a 27 20 54 48 45 4e 20 73 75 62 73 74 ym-*' THEN subst
9f90: 72 28 74 61 67 6e 61 6d 65 2c 35 29 22 0a 20 20 r(tagname,5)".
9fa0: 20 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 "
9fb0: 20 20 20 45 4c 53 45 20 74 61 67 6e 61 6d 65 20 ELSE tagname
9fc0: 45 4e 44 22 2c 0a 20 20 20 20 20 72 69 64 0a 20 END",. rid.
9fd0: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f );. while( db_
9fe0: 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 step(&q)==SQLITE
9ff0: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74 20 _ROW ){. int
a000: 74 61 67 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d tagid = db_colum
a010: 6e 5f 69 6e 74 28 26 71 2c 20 30 29 3b 0a 20 20 n_int(&q, 0);.
a020: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 const char *zT
a030: 61 67 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 agName = db_colu
a040: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a mn_text(&q, 1);.
a050: 20 20 20 20 63 68 61 72 20 7a 4c 61 62 65 6c 5b char zLabel[
a060: 33 30 5d 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 30];. sprintf
a070: 28 7a 4c 61 62 65 6c 2c 20 22 63 25 64 22 2c 20 (zLabel, "c%d",
a080: 74 61 67 69 64 29 3b 0a 20 20 20 20 69 66 28 20 tagid);. if(
a090: 50 28 7a 4c 61 62 65 6c 29 20 29 7b 0a 20 20 20 P(zLabel) ){.
a0a0: 20 20 20 40 20 3c 62 72 3e 3c 69 6e 70 75 74 20 @ <br><input
a0b0: 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 type="checkbox"
a0c0: 6e 61 6d 65 3d 22 63 25 64 28 74 61 67 69 64 29 name="c%d(tagid)
a0d0: 22 20 63 68 65 63 6b 65 64 3e 0a 20 20 20 20 7d " checked>. }
a0e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 62 else{. @ <b
a0f0: 72 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 r><input type="c
a100: 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 63 heckbox" name="c
a110: 25 64 28 74 61 67 69 64 29 22 3e 0a 20 20 20 20 %d(tagid)">.
a120: 7d 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d }. if( strncm
a130: 70 28 7a 54 61 67 4e 61 6d 65 2c 20 22 73 79 6d p(zTagName, "sym
a140: 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 -", 4)==0 ){.
a150: 20 20 20 40 20 43 61 6e 63 65 6c 20 74 61 67 20 @ Cancel tag
a160: 3c 62 3e 25 68 28 26 7a 54 61 67 4e 61 6d 65 5b <b>%h(&zTagName[
a170: 34 5d 29 3c 2f 62 3e 0a 20 20 20 20 7d 65 6c 73 4])</b>. }els
a180: 65 7b 0a 20 20 20 20 20 20 40 20 43 61 6e 63 65 e{. @ Cance
a190: 6c 20 73 70 65 63 69 61 6c 20 74 61 67 20 3c 62 l special tag <b
a1a0: 3e 25 68 28 7a 54 61 67 4e 61 6d 65 29 3c 2f 62 >%h(zTagName)</b
a1b0: 3e 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 >. }. }. db
a1c0: 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 _finalize(&q);.
a1d0: 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 @ </td></tr>..
a1e0: 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 if( db_exists("
a1f0: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 61 SELECT 1 FROM ta
a200: 67 78 72 65 66 20 57 48 45 52 45 20 72 69 64 3d gxref WHERE rid=
a210: 25 64 20 41 4e 44 20 74 61 67 69 64 3d 25 64 20 %d AND tagid=%d
a220: 41 4e 44 20 73 72 63 69 64 3e 30 22 2c 0a 20 20 AND srcid>0",.
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 69 ri
a240: 64 2c 20 54 41 47 5f 42 52 41 4e 43 48 29 3d 3d d, TAG_BRANCH)==
a250: 30 20 29 7b 0a 20 20 20 20 40 20 3c 74 72 3e 3c 0 ){. @ <tr><
a260: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 td align="right"
a270: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 valign="top"><b
a280: 3e 42 72 61 6e 63 68 69 6e 67 3a 3c 2f 62 3e 3c >Branching:</b><
a290: 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 20 76 /td>. @ <td v
a2a0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 20 align="top">.
a2b0: 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 @ <input type="
a2c0: 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 checkbox" name="
a2d0: 6e 65 77 62 72 22 25 73 28 7a 4e 65 77 42 72 46 newbr"%s(zNewBrF
a2e0: 6c 61 67 29 3e 0a 20 20 20 20 40 20 4d 61 6b 65 lag)>. @ Make
a2f0: 20 74 68 69 73 20 63 68 65 63 6b 2d 69 6e 20 74 this check-in t
a300: 68 65 20 73 74 61 72 74 20 6f 66 20 61 20 6e 65 he start of a ne
a310: 77 20 62 72 61 6e 63 68 20 6e 61 6d 65 64 3a 0a w branch named:.
a320: 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 @ <input typ
a330: 65 3d 22 74 65 78 74 22 20 77 69 64 74 68 3d 22 e="text" width="
a340: 31 35 22 20 6e 61 6d 65 3d 22 62 72 6e 61 6d 65 15" name="brname
a350: 22 20 76 61 6c 75 65 3d 22 25 68 28 7a 4e 65 77 " value="%h(zNew
a360: 42 72 61 6e 63 68 29 22 3e 0a 20 20 20 20 40 20 Branch)">. @
a370: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 7d 0a 0a </td></tr>. }..
a380: 20 20 69 66 28 20 69 73 5f 61 5f 6c 65 61 66 28 if( is_a_leaf(
a390: 72 69 64 29 0a 20 20 20 26 26 20 21 64 62 5f 65 rid). && !db_e
a3a0: 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 xists("SELECT 1
a3b0: 46 52 4f 4d 20 74 61 67 78 72 65 66 20 22 0a 20 FROM tagxref ".
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a3d0: 22 20 57 48 45 52 45 20 74 61 67 69 64 3d 25 64 " WHERE tagid=%d
a3e0: 20 41 4e 44 20 72 69 64 3d 25 64 20 41 4e 44 20 AND rid=%d AND
a3f0: 74 61 67 74 79 70 65 3e 30 22 2c 0a 20 20 20 20 tagtype>0",.
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 47 TAG
a410: 5f 43 4c 4f 53 45 44 2c 20 72 69 64 29 0a 20 20 _CLOSED, rid).
a420: 29 7b 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 ){. @ <tr><td
a430: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 align="right" v
a440: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 4c align="top"><b>L
a450: 65 61 66 20 43 6c 6f 73 75 72 65 3a 3c 2f 62 3e eaf Closure:</b>
a460: 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 20 </td>. @ <td
a470: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 valign="top">.
a480: 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
a490: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d "checkbox" name=
a4a0: 22 63 6c 6f 73 65 22 25 73 28 7a 43 6c 6f 73 65 "close"%s(zClose
a4b0: 46 6c 61 67 29 3e 0a 20 20 20 20 40 20 4d 61 72 Flag)>. @ Mar
a4c0: 6b 20 74 68 69 73 20 6c 65 61 66 20 61 73 20 22 k this leaf as "
a4d0: 63 6c 6f 73 65 64 22 20 73 6f 20 74 68 61 74 20 closed" so that
a4e0: 69 74 20 6e 6f 20 6c 6f 6e 67 65 72 20 61 70 70 it no longer app
a4f0: 65 61 72 73 20 6f 6e 20 74 68 65 0a 20 20 20 20 ears on the.
a500: 40 20 22 6c 65 61 76 65 73 22 20 70 61 67 65 20 @ "leaves" page
a510: 61 6e 64 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 and is no longer
a520: 20 6c 61 62 65 6c 65 64 20 61 73 20 61 20 22 3c labeled as a "<
a530: 62 3e 4c 65 61 66 3c 2f 62 3e 22 2e 0a 20 20 20 b>Leaf</b>"..
a540: 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 @ </td></tr>.
a550: 7d 0a 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 }... @ <tr><td
a560: 63 6f 6c 73 70 61 6e 3d 22 32 22 3e 0a 20 20 40 colspan="2">. @
a570: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75 <input type="su
a580: 62 6d 69 74 22 20 6e 61 6d 65 3d 22 70 72 65 76 bmit" name="prev
a590: 69 65 77 22 20 76 61 6c 75 65 3d 22 50 72 65 76 iew" value="Prev
a5a0: 69 65 77 22 3e 0a 20 20 40 20 3c 69 6e 70 75 74 iew">. @ <input
a5b0: 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e type="submit" n
a5c0: 61 6d 65 3d 22 61 70 70 6c 79 22 20 76 61 6c 75 ame="apply" valu
a5d0: 65 3d 22 41 70 70 6c 79 20 43 68 61 6e 67 65 73 e="Apply Changes
a5e0: 22 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 79 ">. @ <input ty
a5f0: 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 6d 65 pe="submit" name
a600: 3d 22 63 61 6e 63 65 6c 22 20 76 61 6c 75 65 3d ="cancel" value=
a610: 22 43 61 6e 63 65 6c 22 3e 0a 20 20 40 20 3c 2f "Cancel">. @ </
a620: 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c 2f 74 td></tr>. @ </t
a630: 61 62 6c 65 3e 0a 20 20 40 20 3c 2f 66 6f 72 6d able>. @ </form
a640: 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 >. style_footer
a650: 28 29 3b 0a 7d 0a ();.}.