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 62 61 73 65 6c 69 6e 65 2e act or baseline.
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 64 65 73 63 65 6e 64 61 6e 74 73 20 6f 66 20 descendants of
1240: 61 20 62 61 73 65 6c 69 6e 65 2e 20 20 44 6f 20 a baseline. Do
1250: 74 68 69 73 20 72 65 63 75 72 73 69 76 65 6c 79 this recursively
1260: 0a 2a 2a 20 74 6f 20 61 20 64 65 70 74 68 20 6f .** to a depth o
1270: 66 20 4e 2e 20 20 52 65 74 75 72 6e 20 74 72 75 f N. Return tru
1280: 65 20 69 66 20 64 65 73 63 65 6e 64 61 6e 74 73 e if descendants
1290: 20 61 72 65 20 73 68 6f 77 6e 20 61 6e 64 20 66 are shown and f
12a0: 61 6c 73 65 20 69 66 20 6e 6f 74 2e 0a 2a 2f 0a alse if not..*/.
12b0: 73 74 61 74 69 63 20 69 6e 74 20 73 68 6f 77 44 static int showD
12c0: 65 73 63 65 6e 64 61 6e 74 73 28 69 6e 74 20 70 escendants(int p
12d0: 69 64 2c 20 69 6e 74 20 64 65 70 74 68 2c 20 63 id, int depth, c
12e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 69 74 6c onst char *zTitl
12f0: 65 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 e){. Stmt q;.
1300: 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 20 20 64 int cnt = 0;. d
1310: 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 b_prepare(&q,.
1320: 20 20 22 53 45 4c 45 43 54 20 70 6c 69 6e 6b 2e "SELECT plink.
1330: 63 69 64 2c 20 62 6c 6f 62 2e 75 75 69 64 2c 20 cid, blob.uuid,
1340: 64 61 74 65 74 69 6d 65 28 70 6c 69 6e 6b 2e 6d datetime(plink.m
1350: 74 69 6d 65 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 time, 'localtime
1360: 27 29 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 '),". "
1370: 20 63 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 2e coalesce(event.
1380: 65 75 73 65 72 2c 65 76 65 6e 74 2e 75 73 65 72 euser,event.user
1390: 29 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 ),". "
13a0: 63 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 coalesce(event.e
13b0: 63 6f 6d 6d 65 6e 74 2c 65 76 65 6e 74 2e 63 6f comment,event.co
13c0: 6d 6d 65 6e 74 29 22 0a 20 20 20 20 22 20 20 46 mment)". " F
13d0: 52 4f 4d 20 70 6c 69 6e 6b 2c 20 62 6c 6f 62 2c ROM plink, blob,
13e0: 20 65 76 65 6e 74 22 0a 20 20 20 20 22 20 57 48 event". " WH
13f0: 45 52 45 20 70 6c 69 6e 6b 2e 70 69 64 3d 25 64 ERE plink.pid=%d
1400: 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 62 6c ". " AND bl
1410: 6f 62 2e 72 69 64 3d 70 6c 69 6e 6b 2e 63 69 64 ob.rid=plink.cid
1420: 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 65 76 ". " AND ev
1430: 65 6e 74 2e 6f 62 6a 69 64 3d 70 6c 69 6e 6b 2e ent.objid=plink.
1440: 63 69 64 22 0a 20 20 20 20 22 20 4f 52 44 45 52 cid". " ORDER
1450: 20 42 59 20 70 6c 69 6e 6b 2e 6d 74 69 6d 65 20 BY plink.mtime
1460: 41 53 43 22 2c 0a 20 20 20 20 70 69 64 0a 20 20 ASC",. pid.
1470: 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 );. while( db_s
1480: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
1490: 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e ROW ){. int n
14a0: 3b 0a 20 20 20 20 69 6e 74 20 63 69 64 20 3d 20 ;. int cid =
14b0: 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 db_column_int(&q
14c0: 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 0);. const
14d0: 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 char *zUuid = db
14e0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
14f0: 20 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 1);. const c
1500: 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f har *zDate = db_
1510: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
1520: 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 2);. const ch
1530: 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 ar *zUser = db_c
1540: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 olumn_text(&q, 3
1550: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
1560: 72 20 2a 7a 43 6f 6d 20 3d 20 64 62 5f 63 6f 6c r *zCom = db_col
1570: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 34 29 3b umn_text(&q, 4);
1580: 0a 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 . cnt++;.
1590: 69 66 28 20 63 6e 74 3d 3d 31 20 29 7b 0a 20 20 if( cnt==1 ){.
15a0: 20 20 20 20 69 66 28 20 7a 54 69 74 6c 65 20 29 if( zTitle )
15b0: 7b 0a 20 20 20 20 20 20 20 20 40 20 3c 64 69 76 {. @ <div
15c0: 20 63 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 class="section"
15d0: 3e 25 73 28 7a 54 69 74 6c 65 29 3c 2f 64 69 76 >%s(zTitle)</div
15e0: 3e 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 >. }.
15f0: 40 20 3c 75 6c 3e 0a 20 20 20 20 7d 0a 20 20 20 @ <ul>. }.
1600: 20 40 20 3c 6c 69 3e 0a 20 20 20 20 68 79 70 65 @ <li>. hype
1610: 72 6c 69 6e 6b 5f 74 6f 5f 75 75 69 64 28 7a 55 rlink_to_uuid(zU
1620: 75 69 64 29 3b 0a 20 20 20 20 40 20 25 77 28 7a uid);. @ %w(z
1630: 43 6f 6d 29 20 28 62 79 20 25 73 28 7a 55 73 65 Com) (by %s(zUse
1640: 72 29 20 6f 6e 20 25 73 28 7a 44 61 74 65 29 29 r) on %s(zDate))
1650: 0a 20 20 20 20 69 66 28 20 64 65 70 74 68 20 29 . if( depth )
1660: 7b 0a 20 20 20 20 20 20 6e 20 3d 20 73 68 6f 77 {. n = show
1670: 44 65 73 63 65 6e 64 61 6e 74 73 28 63 69 64 2c Descendants(cid,
1680: 20 64 65 70 74 68 2d 31 2c 20 30 29 3b 0a 20 20 depth-1, 0);.
1690: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e }else{. n
16a0: 20 3d 20 64 62 5f 69 6e 74 28 30 2c 20 22 53 45 = db_int(0, "SE
16b0: 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 6c 69 6e LECT 1 FROM plin
16c0: 6b 20 57 48 45 52 45 20 70 69 64 3d 25 64 22 2c k WHERE pid=%d",
16d0: 20 63 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20 cid);. }.
16e0: 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20 if( n==0 ){.
16f0: 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 db_multi_exec
1700: 28 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 6c 65 ("DELETE FROM le
1710: 61 76 65 73 20 57 48 45 52 45 20 72 69 64 3d 25 aves WHERE rid=%
1720: 64 22 2c 20 63 69 64 29 3b 0a 20 20 20 20 20 20 d", cid);.
1730: 40 20 3c 62 3e 6c 65 61 66 3c 2f 62 3e 0a 20 20 @ <b>leaf</b>.
1740: 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e }. }. db_fin
1750: 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 69 66 28 alize(&q);. if(
1760: 20 63 6e 74 20 29 7b 0a 20 20 20 20 40 20 3c 2f cnt ){. @ </
1770: 75 6c 3e 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e ul>. }. return
1780: 20 63 6e 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 cnt;.}../*.** S
1790: 68 6f 77 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 how information
17a0: 61 62 6f 75 74 20 61 6e 63 65 73 74 6f 72 73 20 about ancestors
17b0: 6f 66 20 61 20 62 61 73 65 6c 69 6e 65 2e 20 20 of a baseline.
17c0: 44 6f 20 74 68 69 73 20 72 65 63 75 72 73 69 76 Do this recursiv
17d0: 65 6c 79 0a 2a 2a 20 74 6f 20 61 20 64 65 70 74 ely.** to a dept
17e0: 68 20 6f 66 20 4e 2e 20 20 52 65 74 75 72 6e 20 h of N. Return
17f0: 74 72 75 65 20 69 66 20 61 6e 63 65 73 74 6f 72 true if ancestor
1800: 73 20 61 72 65 20 73 68 6f 77 6e 20 61 6e 64 20 s are shown and
1810: 66 61 6c 73 65 20 69 66 20 6e 6f 74 2e 0a 2a 2f false if not..*/
1820: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 68 6f .static void sho
1830: 77 41 6e 63 65 73 74 6f 72 73 28 69 6e 74 20 70 wAncestors(int p
1840: 69 64 2c 20 69 6e 74 20 64 65 70 74 68 2c 20 63 id, int depth, c
1850: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 69 74 6c onst char *zTitl
1860: 65 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 e){. Stmt q;.
1870: 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 20 20 64 int cnt = 0;. d
1880: 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 b_prepare(&q,.
1890: 20 20 22 53 45 4c 45 43 54 20 70 6c 69 6e 6b 2e "SELECT plink.
18a0: 70 69 64 2c 20 62 6c 6f 62 2e 75 75 69 64 2c 20 pid, blob.uuid,
18b0: 64 61 74 65 74 69 6d 65 28 65 76 65 6e 74 2e 6d datetime(event.m
18c0: 74 69 6d 65 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 time, 'localtime
18d0: 27 29 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 '),". "
18e0: 20 63 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 2e coalesce(event.
18f0: 65 75 73 65 72 2c 65 76 65 6e 74 2e 75 73 65 72 euser,event.user
1900: 29 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 ),". "
1910: 63 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 coalesce(event.e
1920: 63 6f 6d 6d 65 6e 74 2c 65 76 65 6e 74 2e 63 6f comment,event.co
1930: 6d 6d 65 6e 74 29 22 0a 20 20 20 20 22 20 20 46 mment)". " F
1940: 52 4f 4d 20 70 6c 69 6e 6b 2c 20 62 6c 6f 62 2c ROM plink, blob,
1950: 20 65 76 65 6e 74 22 0a 20 20 20 20 22 20 57 48 event". " WH
1960: 45 52 45 20 70 6c 69 6e 6b 2e 63 69 64 3d 25 64 ERE plink.cid=%d
1970: 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 62 6c ". " AND bl
1980: 6f 62 2e 72 69 64 3d 70 6c 69 6e 6b 2e 70 69 64 ob.rid=plink.pid
1990: 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 65 76 ". " AND ev
19a0: 65 6e 74 2e 6f 62 6a 69 64 3d 70 6c 69 6e 6b 2e ent.objid=plink.
19b0: 70 69 64 22 0a 20 20 20 20 22 20 4f 52 44 45 52 pid". " ORDER
19c0: 20 42 59 20 65 76 65 6e 74 2e 6d 74 69 6d 65 20 BY event.mtime
19d0: 44 45 53 43 22 2c 0a 20 20 20 20 70 69 64 0a 20 DESC",. pid.
19e0: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f );. while( db_
19f0: 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 step(&q)==SQLITE
1a00: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e 74 20 _ROW ){. int
1a10: 63 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f cid = db_column_
1a20: 69 6e 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 int(&q, 0);.
1a30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 const char *zUui
1a40: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 d = db_column_te
1a50: 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 xt(&q, 1);. c
1a60: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 onst char *zDate
1a70: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
1a80: 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f t(&q, 2);. co
1a90: 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 nst char *zUser
1aa0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
1ab0: 28 26 71 2c 20 33 29 3b 0a 20 20 20 20 63 6f 6e (&q, 3);. con
1ac0: 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 20 3d 20 st char *zCom =
1ad0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
1ae0: 71 2c 20 34 29 3b 0a 20 20 20 20 63 6e 74 2b 2b q, 4);. cnt++
1af0: 3b 0a 20 20 20 20 69 66 28 20 63 6e 74 3d 3d 31 ;. if( cnt==1
1b00: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 54 ){. if( zT
1b10: 69 74 6c 65 20 29 7b 0a 20 20 20 20 20 20 20 20 itle ){.
1b20: 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 @ <div class="se
1b30: 63 74 69 6f 6e 22 3e 25 73 28 7a 54 69 74 6c 65 ction">%s(zTitle
1b40: 29 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 7d 0a )</div>. }.
1b50: 20 20 20 20 20 20 40 20 3c 75 6c 3e 0a 20 20 20 @ <ul>.
1b60: 20 7d 0a 20 20 20 20 40 20 3c 6c 69 3e 0a 20 20 }. @ <li>.
1b70: 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 hyperlink_to_u
1b80: 75 69 64 28 7a 55 75 69 64 29 3b 0a 20 20 20 20 uid(zUuid);.
1b90: 40 20 25 77 28 7a 43 6f 6d 29 20 28 62 79 20 25 @ %w(zCom) (by %
1ba0: 73 28 7a 55 73 65 72 29 20 6f 6e 20 25 73 28 7a s(zUser) on %s(z
1bb0: 44 61 74 65 29 29 0a 20 20 20 20 69 66 28 20 64 Date)). if( d
1bc0: 65 70 74 68 20 29 7b 0a 20 20 20 20 20 20 73 68 epth ){. sh
1bd0: 6f 77 41 6e 63 65 73 74 6f 72 73 28 63 69 64 2c owAncestors(cid,
1be0: 20 64 65 70 74 68 2d 31 2c 20 30 29 3b 0a 20 20 depth-1, 0);.
1bf0: 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e }. }. db_fin
1c00: 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 69 66 28 alize(&q);. if(
1c10: 20 63 6e 74 20 29 7b 0a 20 20 20 20 40 20 3c 2f cnt ){. @ </
1c20: 75 6c 3e 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a ul>. }.}.../*.*
1c30: 2a 20 53 68 6f 77 20 69 6e 66 6f 72 6d 61 74 69 * Show informati
1c40: 6f 6e 20 61 62 6f 75 74 20 62 61 73 65 6c 69 6e on about baselin
1c50: 65 73 20 6d 65 6e 74 69 6f 6e 65 64 20 69 6e 20 es mentioned in
1c60: 74 68 65 20 22 6c 65 61 76 65 73 22 20 74 61 62 the "leaves" tab
1c70: 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f le..*/.static vo
1c80: 69 64 20 73 68 6f 77 4c 65 61 76 65 73 28 69 6e id showLeaves(in
1c90: 74 20 72 69 64 29 7b 0a 20 20 53 74 6d 74 20 71 t rid){. Stmt q
1ca0: 3b 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b ;. int cnt = 0;
1cb0: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 . db_prepare(&q
1cc0: 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 20 62 6c ,. "SELECT bl
1cd0: 6f 62 2e 75 75 69 64 2c 20 64 61 74 65 74 69 6d ob.uuid, datetim
1ce0: 65 28 65 76 65 6e 74 2e 6d 74 69 6d 65 2c 20 27 e(event.mtime, '
1cf0: 6c 6f 63 61 6c 74 69 6d 65 27 29 2c 22 0a 20 20 localtime'),".
1d00: 20 20 22 20 20 20 20 20 20 20 63 6f 61 6c 65 73 " coales
1d10: 63 65 28 65 76 65 6e 74 2e 65 75 73 65 72 2c 20 ce(event.euser,
1d20: 65 76 65 6e 74 2e 75 73 65 72 29 2c 22 0a 20 20 event.user),".
1d30: 20 20 22 20 20 20 20 20 20 20 63 6f 61 6c 65 73 " coales
1d40: 63 65 28 65 76 65 6e 74 2e 65 63 6f 6d 6d 65 6e ce(event.ecommen
1d50: 74 2c 65 76 65 6e 74 2e 63 6f 6d 6d 65 6e 74 29 t,event.comment)
1d60: 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20 6c 65 ". " FROM le
1d70: 61 76 65 73 2c 20 62 6c 6f 62 2c 20 65 76 65 6e aves, blob, even
1d80: 74 22 0a 20 20 20 20 22 20 57 48 45 52 45 20 62 t". " WHERE b
1d90: 6c 6f 62 2e 72 69 64 3d 6c 65 61 76 65 73 2e 72 lob.rid=leaves.r
1da0: 69 64 20 41 4e 44 20 62 6c 6f 62 2e 72 69 64 21 id AND blob.rid!
1db0: 3d 25 64 22 0a 20 20 20 20 22 20 20 20 41 4e 44 =%d". " AND
1dc0: 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d 6c 65 61 event.objid=lea
1dd0: 76 65 73 2e 72 69 64 22 0a 20 20 20 20 22 20 4f ves.rid". " O
1de0: 52 44 45 52 20 42 59 20 65 76 65 6e 74 2e 6d 74 RDER BY event.mt
1df0: 69 6d 65 20 44 45 53 43 22 2c 0a 20 20 20 20 72 ime DESC",. r
1e00: 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 id. );. while(
1e10: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
1e20: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
1e30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 const char *zUui
1e40: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 d = db_column_te
1e50: 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 xt(&q, 0);. c
1e60: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 onst char *zDate
1e70: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
1e80: 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 6f t(&q, 1);. co
1e90: 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 nst char *zUser
1ea0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
1eb0: 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e (&q, 2);. con
1ec0: 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 20 3d 20 st char *zCom =
1ed0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
1ee0: 71 2c 20 33 29 3b 0a 20 20 20 20 63 6e 74 2b 2b q, 3);. cnt++
1ef0: 3b 0a 20 20 20 20 69 66 28 20 63 6e 74 3d 3d 31 ;. if( cnt==1
1f00: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 64 69 76 ){. @ <div
1f10: 20 63 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 class="section"
1f20: 3e 4c 65 61 76 65 73 3c 2f 64 69 76 3e 0a 20 20 >Leaves</div>.
1f30: 20 20 20 20 40 20 3c 75 6c 3e 0a 20 20 20 20 7d @ <ul>. }
1f40: 0a 20 20 20 20 40 20 3c 6c 69 3e 0a 20 20 20 20 . @ <li>.
1f50: 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 75 69 hyperlink_to_uui
1f60: 64 28 7a 55 75 69 64 29 3b 0a 20 20 20 20 40 20 d(zUuid);. @
1f70: 25 77 28 7a 43 6f 6d 29 20 28 62 79 20 25 73 28 %w(zCom) (by %s(
1f80: 7a 55 73 65 72 29 20 6f 6e 20 25 73 28 7a 44 61 zUser) on %s(zDa
1f90: 74 65 29 29 0a 20 20 7d 0a 20 20 64 62 5f 66 69 te)). }. db_fi
1fa0: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 69 66 nalize(&q);. if
1fb0: 28 20 63 6e 74 20 29 7b 0a 20 20 20 20 40 20 3c ( cnt ){. @ <
1fc0: 2f 75 6c 3e 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a /ul>. }.}../*.*
1fd0: 2a 20 53 68 6f 77 20 69 6e 66 6f 72 6d 61 74 69 * Show informati
1fe0: 6f 6e 20 61 62 6f 75 74 20 61 6c 6c 20 74 61 67 on about all tag
1ff0: 73 20 6f 6e 20 61 20 67 69 76 65 6e 20 6e 6f 64 s on a given nod
2000: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 e..*/.static voi
2010: 64 20 73 68 6f 77 54 61 67 73 28 69 6e 74 20 72 d showTags(int r
2020: 69 64 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a id, const char *
2030: 7a 4e 6f 74 47 6c 6f 62 29 7b 0a 20 20 53 74 6d zNotGlob){. Stm
2040: 74 20 71 3b 0a 20 20 69 6e 74 20 63 6e 74 20 3d t q;. int cnt =
2050: 20 30 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 0;. db_prepare
2060: 28 26 71 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 (&q,. "SELECT
2070: 20 74 61 67 2e 74 61 67 69 64 2c 20 74 61 67 6e tag.tagid, tagn
2080: 61 6d 65 2c 20 22 0a 20 20 20 20 22 20 20 20 20 ame, ". "
2090: 20 20 20 28 53 45 4c 45 43 54 20 75 75 69 64 20 (SELECT uuid
20a0: 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 FROM blob WHERE
20b0: 72 69 64 3d 74 61 67 78 72 65 66 2e 73 72 63 69 rid=tagxref.srci
20c0: 64 20 41 4e 44 20 72 69 64 21 3d 25 64 29 2c 22 d AND rid!=%d),"
20d0: 0a 20 20 20 20 22 20 20 20 20 20 20 20 76 61 6c . " val
20e0: 75 65 2c 20 64 61 74 65 74 69 6d 65 28 74 61 67 ue, datetime(tag
20f0: 78 72 65 66 2e 6d 74 69 6d 65 2c 27 6c 6f 63 61 xref.mtime,'loca
2100: 6c 74 69 6d 65 27 29 2c 20 74 61 67 74 79 70 65 ltime'), tagtype
2110: 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 28 ,". " (
2120: 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d SELECT uuid FROM
2130: 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d blob WHERE rid=
2140: 74 61 67 78 72 65 66 2e 6f 72 69 67 69 64 20 41 tagxref.origid A
2150: 4e 44 20 72 69 64 21 3d 25 64 29 22 0a 20 20 20 ND rid!=%d)".
2160: 20 22 20 20 46 52 4f 4d 20 74 61 67 78 72 65 66 " FROM tagxref
2170: 20 4a 4f 49 4e 20 74 61 67 20 4f 4e 20 74 61 67 JOIN tag ON tag
2180: 78 72 65 66 2e 74 61 67 69 64 3d 74 61 67 2e 74 xref.tagid=tag.t
2190: 61 67 69 64 22 0a 20 20 20 20 22 20 57 48 45 52 agid". " WHER
21a0: 45 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 64 E tagxref.rid=%d
21b0: 20 41 4e 44 20 74 61 67 6e 61 6d 65 20 4e 4f 54 AND tagname NOT
21c0: 20 47 4c 4f 42 20 27 25 73 27 22 0a 20 20 20 20 GLOB '%s'".
21d0: 22 20 4f 52 44 45 52 20 42 59 20 74 61 67 6e 61 " ORDER BY tagna
21e0: 6d 65 22 2c 20 72 69 64 2c 20 72 69 64 2c 20 72 me", rid, rid, r
21f0: 69 64 2c 20 7a 4e 6f 74 47 6c 6f 62 0a 20 20 29 id, zNotGlob. )
2200: 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 ;. while( db_st
2210: 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 ep(&q)==SQLITE_R
2220: 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 OW ){. const
2230: 63 68 61 72 20 2a 7a 54 61 67 6e 61 6d 65 20 3d char *zTagname =
2240: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
2250: 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 6f 6e 73 &q, 1);. cons
2260: 74 20 63 68 61 72 20 2a 7a 53 72 63 55 75 69 64 t char *zSrcUuid
2270: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
2280: 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f t(&q, 2);. co
2290: 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 75 65 nst char *zValue
22a0: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
22b0: 74 28 26 71 2c 20 33 29 3b 0a 20 20 20 20 63 6f t(&q, 3);. co
22c0: 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 nst char *zDate
22d0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
22e0: 28 26 71 2c 20 34 29 3b 0a 20 20 20 20 69 6e 74 (&q, 4);. int
22f0: 20 74 61 67 74 79 70 65 20 3d 20 64 62 5f 63 6f tagtype = db_co
2300: 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 35 29 3b lumn_int(&q, 5);
2310: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
2320: 2a 7a 4f 72 69 67 55 75 69 64 20 3d 20 64 62 5f *zOrigUuid = db_
2330: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
2340: 36 29 3b 0a 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 6);. cnt++;.
2350: 20 20 20 69 66 28 20 63 6e 74 3d 3d 31 20 29 7b if( cnt==1 ){
2360: 0a 20 20 20 20 20 20 40 20 3c 64 69 76 20 63 6c . @ <div cl
2370: 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 3e 54 61 ass="section">Ta
2380: 67 73 20 41 6e 64 20 50 72 6f 70 65 72 74 69 65 gs And Propertie
2390: 73 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 40 20 s</div>. @
23a0: 3c 75 6c 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 <ul>. }. @
23b0: 20 3c 6c 69 3e 0a 20 20 20 20 69 66 28 20 74 61 <li>. if( ta
23c0: 67 74 79 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 gtype==0 ){.
23d0: 20 20 40 20 3c 62 3e 3c 73 3e 25 68 28 7a 54 61 @ <b><s>%h(zTa
23e0: 67 6e 61 6d 65 29 3c 2f 73 3e 3c 2f 62 3e 20 63 gname)</s></b> c
23f0: 61 6e 63 65 6c 6c 65 64 0a 20 20 20 20 7d 65 6c ancelled. }el
2400: 73 65 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b se if( zValue ){
2410: 0a 20 20 20 20 20 20 40 20 3c 62 3e 25 68 28 7a . @ <b>%h(z
2420: 54 61 67 6e 61 6d 65 29 3d 25 68 28 7a 56 61 6c Tagname)=%h(zVal
2430: 75 65 29 3c 2f 62 3e 0a 20 20 20 20 7d 65 6c 73 ue)</b>. }els
2440: 65 20 7b 0a 20 20 20 20 20 20 40 20 3c 62 3e 25 e {. @ <b>%
2450: 68 28 7a 54 61 67 6e 61 6d 65 29 3c 2f 62 3e 0a h(zTagname)</b>.
2460: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 74 61 }. if( ta
2470: 67 74 79 70 65 3d 3d 32 20 29 7b 0a 20 20 20 20 gtype==2 ){.
2480: 20 20 69 66 28 20 7a 4f 72 69 67 55 75 69 64 20 if( zOrigUuid
2490: 26 26 20 7a 4f 72 69 67 55 75 69 64 5b 30 5d 20 && zOrigUuid[0]
24a0: 29 7b 0a 20 20 20 20 20 20 20 20 40 20 69 6e 68 ){. @ inh
24b0: 65 72 69 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 erited from.
24c0: 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f hyperlink_to
24d0: 5f 75 75 69 64 28 7a 4f 72 69 67 55 75 69 64 29 _uuid(zOrigUuid)
24e0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 ;. }else{.
24f0: 20 20 20 20 20 20 20 40 20 70 72 6f 70 61 67 61 @ propaga
2500: 74 65 73 20 74 6f 20 64 65 73 63 65 6e 64 61 6e tes to descendan
2510: 74 73 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d ts. }. }
2520: 0a 20 20 20 20 69 66 28 20 7a 53 72 63 55 75 69 . if( zSrcUui
2530: 64 20 26 26 20 7a 53 72 63 55 75 69 64 5b 30 5d d && zSrcUuid[0]
2540: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 74 61 ){. if( ta
2550: 67 74 79 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 gtype==0 ){.
2560: 20 20 20 20 40 20 62 79 0a 20 20 20 20 20 20 7d @ by. }
2570: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 40 20 else{. @
2580: 61 64 64 65 64 20 62 79 0a 20 20 20 20 20 20 7d added by. }
2590: 0a 20 20 20 20 20 20 68 79 70 65 72 6c 69 6e 6b . hyperlink
25a0: 5f 74 6f 5f 75 75 69 64 28 7a 53 72 63 55 75 69 _to_uuid(zSrcUui
25b0: 64 29 3b 0a 20 20 20 20 20 20 40 20 6f 6e 20 25 d);. @ on %
25c0: 73 28 7a 44 61 74 65 29 0a 20 20 20 20 7d 0a 20 s(zDate). }.
25d0: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
25e0: 28 26 71 29 3b 0a 20 20 69 66 28 20 63 6e 74 20 (&q);. if( cnt
25f0: 29 7b 0a 20 20 20 20 40 20 3c 2f 75 6c 3e 0a 20 ){. @ </ul>.
2600: 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 }.}.../*.** WEB
2610: 50 41 47 45 3a 20 76 69 6e 66 6f 0a 2a 2a 20 57 PAGE: vinfo.** W
2620: 45 42 50 41 47 45 3a 20 63 69 0a 2a 2a 20 55 52 EBPAGE: ci.** UR
2630: 4c 3a 20 20 2f 63 69 3f 6e 61 6d 65 3d 52 49 44 L: /ci?name=RID
2640: 7c 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 0a 2a |ARTIFACTID.**.*
2650: 2a 20 52 65 74 75 72 6e 20 69 6e 66 6f 72 6d 61 * Return informa
2660: 74 69 6f 6e 20 61 62 6f 75 74 20 61 20 62 61 73 tion about a bas
2670: 65 6c 69 6e 65 0a 2a 2f 0a 76 6f 69 64 20 63 69 eline.*/.void ci
2680: 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 53 _page(void){. S
2690: 74 6d 74 20 71 3b 0a 20 20 69 6e 74 20 72 69 64 tmt q;. int rid
26a0: 3b 0a 20 20 69 6e 74 20 69 73 4c 65 61 66 3b 0a ;. int isLeaf;.
26b0: 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 . login_check_c
26c0: 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 redentials();.
26d0: 69 66 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b if( !g.okRead ){
26e0: 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b login_needed();
26f0: 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 72 69 64 return; }. rid
2700: 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 = name_to_rid(P
2710: 44 28 22 6e 61 6d 65 22 2c 22 30 22 29 29 3b 0a D("name","0"));.
2720: 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a if( rid==0 ){.
2730: 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 style_header
2740: 28 22 43 68 65 63 6b 2d 69 6e 20 49 6e 66 6f 72 ("Check-in Infor
2750: 6d 61 74 69 6f 6e 20 45 72 72 6f 72 22 29 3b 0a mation Error");.
2760: 20 20 20 20 40 20 4e 6f 20 73 75 63 68 20 6f 62 @ No such ob
2770: 6a 65 63 74 3a 20 25 68 28 67 2e 61 72 67 76 5b ject: %h(g.argv[
2780: 32 5d 29 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 2]). style_fo
2790: 6f 74 65 72 28 29 3b 0a 20 20 20 20 72 65 74 75 oter();. retu
27a0: 72 6e 3b 0a 20 20 7d 0a 20 20 69 73 4c 65 61 66 rn;. }. isLeaf
27b0: 20 3d 20 21 64 62 5f 65 78 69 73 74 73 28 22 53 = !db_exists("S
27c0: 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 6c 69 ELECT 1 FROM pli
27d0: 6e 6b 20 57 48 45 52 45 20 70 69 64 3d 25 64 22 nk WHERE pid=%d"
27e0: 2c 20 72 69 64 29 3b 0a 20 20 64 62 5f 70 72 65 , rid);. db_pre
27f0: 70 61 72 65 28 26 71 2c 20 0a 20 20 20 20 20 22 pare(&q, . "
2800: 53 45 4c 45 43 54 20 75 75 69 64 2c 20 64 61 74 SELECT uuid, dat
2810: 65 74 69 6d 65 28 6d 74 69 6d 65 2c 20 27 6c 6f etime(mtime, 'lo
2820: 63 61 6c 74 69 6d 65 27 29 2c 20 75 73 65 72 2c caltime'), user,
2830: 20 63 6f 6d 6d 65 6e 74 22 0a 20 20 20 20 20 22 comment". "
2840: 20 20 46 52 4f 4d 20 62 6c 6f 62 2c 20 65 76 65 FROM blob, eve
2850: 6e 74 22 0a 20 20 20 20 20 22 20 57 48 45 52 45 nt". " WHERE
2860: 20 62 6c 6f 62 2e 72 69 64 3d 25 64 22 0a 20 20 blob.rid=%d".
2870: 20 20 20 22 20 20 20 41 4e 44 20 65 76 65 6e 74 " AND event
2880: 2e 6f 62 6a 69 64 3d 25 64 22 2c 0a 20 20 20 20 .objid=%d",.
2890: 20 72 69 64 2c 20 72 69 64 0a 20 20 29 3b 0a 20 rid, rid. );.
28a0: 20 69 66 28 20 64 62 5f 73 74 65 70 28 26 71 29 if( db_step(&q)
28b0: 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a ==SQLITE_ROW ){.
28c0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
28d0: 7a 55 75 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d zUuid = db_colum
28e0: 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 n_text(&q, 0);.
28f0: 20 20 20 63 68 61 72 20 2a 7a 54 69 74 6c 65 20 char *zTitle
2900: 3d 20 6d 70 72 69 6e 74 66 28 22 43 68 65 63 6b = mprintf("Check
2910: 2d 69 6e 20 5b 25 2e 31 30 73 5d 22 2c 20 7a 55 -in [%.10s]", zU
2920: 75 69 64 29 3b 0a 20 20 20 20 63 68 61 72 20 2a uid);. char *
2930: 7a 45 55 73 65 72 2c 20 2a 7a 45 43 6f 6d 6d 65 zEUser, *zEComme
2940: 6e 74 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 nt;. const ch
2950: 61 72 20 2a 7a 55 73 65 72 3b 0a 20 20 20 20 63 ar *zUser;. c
2960: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 6d onst char *zComm
2970: 65 6e 74 3b 0a 20 20 20 20 73 74 79 6c 65 5f 68 ent;. style_h
2980: 65 61 64 65 72 28 7a 54 69 74 6c 65 29 3b 0a 20 eader(zTitle);.
2990: 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f login_anonymo
29a0: 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 3b 0a us_available();.
29b0: 20 20 20 20 66 72 65 65 28 7a 54 69 74 6c 65 29 free(zTitle)
29c0: 3b 0a 20 20 20 20 7a 45 55 73 65 72 20 3d 20 64 ;. zEUser = d
29d0: 62 5f 74 65 78 74 28 30 2c 0a 20 20 20 20 20 20 b_text(0,.
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 45 "SE
29f0: 4c 45 43 54 20 76 61 6c 75 65 20 46 52 4f 4d 20 LECT value FROM
2a00: 74 61 67 78 72 65 66 20 57 48 45 52 45 20 74 61 tagxref WHERE ta
2a10: 67 69 64 3d 25 64 20 41 4e 44 20 72 69 64 3d 25 gid=%d AND rid=%
2a20: 64 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 d",.
2a30: 20 20 20 20 20 20 20 20 54 41 47 5f 55 53 45 52 TAG_USER
2a40: 2c 20 72 69 64 29 3b 0a 20 20 20 20 7a 45 43 6f , rid);. zECo
2a50: 6d 6d 65 6e 74 20 3d 20 64 62 5f 74 65 78 74 28 mment = db_text(
2a60: 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 0, .
2a70: 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 76 "SELECT v
2a80: 61 6c 75 65 20 46 52 4f 4d 20 74 61 67 78 72 65 alue FROM tagxre
2a90: 66 20 57 48 45 52 45 20 74 61 67 69 64 3d 25 64 f WHERE tagid=%d
2aa0: 20 41 4e 44 20 72 69 64 3d 25 64 22 2c 0a 20 20 AND rid=%d",.
2ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ac0: 20 54 41 47 5f 43 4f 4d 4d 45 4e 54 2c 20 72 69 TAG_COMMENT, ri
2ad0: 64 29 3b 0a 20 20 20 20 7a 55 73 65 72 20 3d 20 d);. zUser =
2ae0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
2af0: 71 2c 20 32 29 3b 0a 20 20 20 20 7a 43 6f 6d 6d q, 2);. zComm
2b00: 65 6e 74 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ent = db_column_
2b10: 74 65 78 74 28 26 71 2c 20 33 29 3b 0a 20 20 20 text(&q, 3);.
2b20: 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 @ <div class="s
2b30: 65 63 74 69 6f 6e 22 3e 4f 76 65 72 76 69 65 77 ection">Overview
2b40: 3c 2f 64 69 76 3e 0a 20 20 20 20 40 20 3c 70 3e </div>. @ <p>
2b50: 3c 74 61 62 6c 65 20 63 6c 61 73 73 3d 22 6c 61 <table class="la
2b60: 62 65 6c 2d 76 61 6c 75 65 22 3e 0a 20 20 20 20 bel-value">.
2b70: 40 20 3c 74 72 3e 3c 74 68 3e 53 48 41 31 26 6e @ <tr><th>SHA1&n
2b80: 62 73 70 3b 48 61 73 68 3a 3c 2f 74 68 3e 3c 74 bsp;Hash:</th><t
2b90: 64 3e 25 73 28 7a 55 75 69 64 29 3c 2f 74 64 3e d>%s(zUuid)</td>
2ba0: 3c 2f 74 72 3e 0a 20 20 20 20 40 20 3c 74 72 3e </tr>. @ <tr>
2bb0: 3c 74 68 3e 44 61 74 65 3a 3c 2f 74 68 3e 3c 74 <th>Date:</th><t
2bc0: 64 3e 25 73 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 d>%s(db_column_t
2bd0: 65 78 74 28 26 71 2c 20 31 29 29 3c 2f 74 64 3e ext(&q, 1))</td>
2be0: 3c 2f 74 72 3e 0a 20 20 20 20 69 66 28 20 67 2e </tr>. if( g.
2bf0: 6f 6b 53 65 74 75 70 20 29 7b 0a 20 20 20 20 20 okSetup ){.
2c00: 20 40 20 3c 74 72 3e 3c 74 68 3e 52 65 63 6f 72 @ <tr><th>Recor
2c10: 64 20 49 44 3a 3c 2f 74 68 3e 3c 74 64 3e 25 64 d ID:</th><td>%d
2c20: 28 72 69 64 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a (rid)</td></tr>.
2c30: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 45 }. if( zE
2c40: 55 73 65 72 20 29 7b 0a 20 20 20 20 20 20 40 20 User ){. @
2c50: 3c 74 72 3e 3c 74 68 3e 45 64 69 74 65 64 26 6e <tr><th>Edited&n
2c60: 62 73 70 3b 55 73 65 72 3a 3c 2f 74 64 3e 3c 74 bsp;User:</td><t
2c70: 64 3e 25 68 28 7a 45 55 73 65 72 29 3c 2f 74 64 d>%h(zEUser)</td
2c80: 3e 3c 2f 74 72 3e 0a 20 20 20 20 20 20 40 20 3c ></tr>. @ <
2c90: 74 72 3e 3c 74 68 3e 4f 72 69 67 69 6e 61 6c 26 tr><th>Original&
2ca0: 6e 62 73 70 3b 55 73 65 72 3a 3c 2f 74 68 3e 3c nbsp;User:</th><
2cb0: 74 64 3e 25 68 28 7a 55 73 65 72 29 3c 2f 74 64 td>%h(zUser)</td
2cc0: 3e 3c 2f 74 72 3e 0a 20 20 20 20 7d 65 6c 73 65 ></tr>. }else
2cd0: 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 {. @ <tr><t
2ce0: 68 3e 55 73 65 72 3a 3c 2f 74 64 3e 3c 74 64 3e h>User:</td><td>
2cf0: 25 68 28 7a 55 73 65 72 29 3c 2f 74 64 3e 3c 2f %h(zUser)</td></
2d00: 74 72 3e 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 tr>. }. if
2d10: 28 20 7a 45 43 6f 6d 6d 65 6e 74 20 29 7b 0a 20 ( zEComment ){.
2d20: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 45 @ <tr><th>E
2d30: 64 69 74 65 64 26 6e 62 73 70 3b 43 6f 6d 6d 65 dited Comme
2d40: 6e 74 3a 3c 2f 74 68 3e 3c 74 64 3e 25 77 28 7a nt:</th><td>%w(z
2d50: 45 43 6f 6d 6d 65 6e 74 29 3c 2f 74 64 3e 3c 2f EComment)</td></
2d60: 74 72 3e 0a 20 20 20 20 20 20 40 20 3c 74 72 3e tr>. @ <tr>
2d70: 3c 74 68 3e 4f 72 69 67 69 6e 61 6c 26 6e 62 73 <th>Original&nbs
2d80: 70 3b 43 6f 6d 6d 65 6e 74 3a 3c 2f 74 68 3e 3c p;Comment:</th><
2d90: 74 64 3e 25 77 28 7a 43 6f 6d 6d 65 6e 74 29 3c td>%w(zComment)<
2da0: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 7d 65 /td></tr>. }e
2db0: 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 lse{. @ <tr
2dc0: 3e 3c 74 68 3e 43 6f 6d 6d 65 6e 74 3a 3c 2f 74 ><th>Comment:</t
2dd0: 68 3e 3c 74 64 3e 25 77 28 7a 43 6f 6d 6d 65 6e h><td>%w(zCommen
2de0: 74 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 t)</td></tr>.
2df0: 20 7d 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f }. @ </td></
2e00: 74 72 3e 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b tr>. if( g.ok
2e10: 41 64 6d 69 6e 20 29 7b 0a 20 20 20 20 20 20 64 Admin ){. d
2e20: 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 0a 20 b_prepare(&q, .
2e30: 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 "SELECT
2e40: 72 63 76 66 72 6f 6d 2e 69 70 61 64 64 72 2c 20 rcvfrom.ipaddr,
2e50: 75 73 65 72 2e 6c 6f 67 69 6e 2c 20 64 61 74 65 user.login, date
2e60: 74 69 6d 65 28 72 63 76 66 72 6f 6d 2e 6d 74 69 time(rcvfrom.mti
2e70: 6d 65 29 22 0a 20 20 20 20 20 20 20 20 20 22 20 me)". "
2e80: 20 46 52 4f 4d 20 62 6c 6f 62 20 4a 4f 49 4e 20 FROM blob JOIN
2e90: 72 63 76 66 72 6f 6d 20 55 53 49 4e 47 28 72 63 rcvfrom USING(rc
2ea0: 76 69 64 29 20 4c 45 46 54 20 4a 4f 49 4e 20 75 vid) LEFT JOIN u
2eb0: 73 65 72 20 55 53 49 4e 47 28 75 69 64 29 22 0a ser USING(uid)".
2ec0: 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 " WHERE
2ed0: 20 62 6c 6f 62 2e 72 69 64 3d 25 64 22 2c 0a 20 blob.rid=%d",.
2ee0: 20 20 20 20 20 20 20 20 72 69 64 0a 20 20 20 20 rid.
2ef0: 20 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64 );. if( d
2f00: 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 b_step(&q)==SQLI
2f10: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 TE_ROW ){.
2f20: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 const char *zI
2f30: 70 41 64 64 72 20 3d 20 64 62 5f 63 6f 6c 75 6d pAddr = db_colum
2f40: 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 n_text(&q, 0);.
2f50: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 const cha
2f60: 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 6f r *zUser = db_co
2f70: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 lumn_text(&q, 1)
2f80: 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 ;. const
2f90: 63 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 char *zDate = db
2fa0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
2fb0: 20 32 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 2);. if(
2fc0: 20 7a 55 73 65 72 3d 3d 30 20 7c 7c 20 7a 55 73 zUser==0 || zUs
2fd0: 65 72 5b 30 5d 3d 3d 30 20 29 20 7a 55 73 65 72 er[0]==0 ) zUser
2fe0: 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 = "unknown";.
2ff0: 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e @ <tr><th>
3000: 52 65 63 65 69 76 65 64 26 6e 62 73 70 3b 46 72 Received Fr
3010: 6f 6d 3a 3c 2f 74 68 3e 0a 20 20 20 20 20 20 20 om:</th>.
3020: 20 40 20 3c 74 64 3e 25 68 28 7a 55 73 65 72 29 @ <td>%h(zUser)
3030: 20 40 20 25 68 28 7a 49 70 41 64 64 72 29 20 6f @ %h(zIpAddr) o
3040: 6e 20 25 73 28 7a 44 61 74 65 29 3c 2f 74 64 3e n %s(zDate)</td>
3050: 3c 2f 74 72 3e 0a 20 20 20 20 20 20 7d 0a 20 20 </tr>. }.
3060: 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 db_finalize(
3070: 26 71 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 &q);. }. i
3080: 66 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 29 f( g.okHistory )
3090: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53 {. char *zS
30a0: 68 6f 72 74 55 75 69 64 20 3d 20 6d 70 72 69 6e hortUuid = mprin
30b0: 74 66 28 22 25 2e 31 30 73 22 2c 20 7a 55 75 69 tf("%.10s", zUui
30c0: 64 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 d);. const
30d0: 63 68 61 72 20 2a 7a 50 72 6f 6a 4e 61 6d 65 20 char *zProjName
30e0: 3d 20 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 = db_get("projec
30f0: 74 2d 6e 61 6d 65 22 2c 20 22 75 6e 6e 61 6d 65 t-name", "unname
3100: 64 22 29 3b 0a 20 20 20 20 20 20 40 20 3c 74 72 d");. @ <tr
3110: 3e 3c 74 68 3e 54 69 6d 65 6c 69 6e 65 73 3a 3c ><th>Timelines:<
3120: 2f 74 68 3e 3c 74 64 3e 0a 20 20 20 20 20 20 40 /th><td>. @
3130: 20 20 20 20 3c 61 20 68 72 65 66 3d 22 25 73 28 <a href="%s(
3140: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 74 69 6d 65 g.zBaseURL)/time
3150: 6c 69 6e 65 3f 70 3d 25 64 28 72 69 64 29 22 3e line?p=%d(rid)">
3160: 61 6e 63 65 73 74 6f 72 73 3c 2f 61 3e 0a 20 20 ancestors</a>.
3170: 20 20 20 20 40 20 20 20 20 7c 20 3c 61 20 68 72 @ | <a hr
3180: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
3190: 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f 64 3d 25 64 L)/timeline?d=%d
31a0: 28 72 69 64 29 22 3e 64 65 73 63 65 6e 64 61 6e (rid)">descendan
31b0: 74 73 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 ts</a>. @
31c0: 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 | <a href="%s(
31d0: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 74 69 6d 65 g.zBaseURL)/time
31e0: 6c 69 6e 65 3f 64 3d 25 64 28 72 69 64 29 26 70 line?d=%d(rid)&p
31f0: 3d 25 64 28 72 69 64 29 22 3e 62 6f 74 68 3c 2f =%d(rid)">both</
3200: 61 3e 0a 20 20 20 20 20 20 64 62 5f 70 72 65 70 a>. db_prep
3210: 61 72 65 28 26 71 2c 20 22 53 45 4c 45 43 54 20 are(&q, "SELECT
3220: 73 75 62 73 74 72 28 74 61 67 2e 74 61 67 6e 61 substr(tag.tagna
3230: 6d 65 2c 35 29 20 46 52 4f 4d 20 74 61 67 78 72 me,5) FROM tagxr
3240: 65 66 2c 20 74 61 67 20 22 0a 20 20 20 20 20 20 ef, tag ".
3250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
3260: 20 57 48 45 52 45 20 72 69 64 3d 25 64 20 41 4e WHERE rid=%d AN
3270: 44 20 74 61 67 74 79 70 65 3e 30 20 22 0a 20 20 D tagtype>0 ".
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3290: 20 20 20 22 20 20 20 41 4e 44 20 74 61 67 2e 74 " AND tag.t
32a0: 61 67 69 64 3d 74 61 67 78 72 65 66 2e 74 61 67 agid=tagxref.tag
32b0: 69 64 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 id ".
32c0: 20 20 20 20 20 20 20 20 20 20 22 20 20 20 41 4e " AN
32d0: 44 20 2b 74 61 67 2e 74 61 67 6e 61 6d 65 20 47 D +tag.tagname G
32e0: 4c 4f 42 20 27 73 79 6d 2d 2a 27 22 2c 20 72 69 LOB 'sym-*'", ri
32f0: 64 29 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 d);. while(
3300: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
3310: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
3320: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
3330: 7a 54 61 67 4e 61 6d 65 20 3d 20 64 62 5f 63 6f zTagName = db_co
3340: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 lumn_text(&q, 0)
3350: 3b 0a 20 20 20 20 20 20 20 20 40 20 20 7c 20 3c ;. @ | <
3360: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
3370: 73 65 55 52 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f seURL)/timeline?
3380: 74 3d 25 54 28 7a 54 61 67 4e 61 6d 65 29 22 3e t=%T(zTagName)">
3390: 25 68 28 7a 54 61 67 4e 61 6d 65 29 3c 2f 61 3e %h(zTagName)</a>
33a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 . }. d
33b0: 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a b_finalize(&q);.
33c0: 20 20 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 @ </td></t
33d0: 72 3e 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c r>. @ <tr><
33e0: 74 68 3e 43 6f 6d 6d 61 6e 64 73 3a 3c 2f 74 68 th>Commands:</th
33f0: 3e 0a 20 20 20 20 20 20 40 20 20 20 3c 74 64 3e >. @ <td>
3400: 0a 20 20 20 20 20 20 40 20 20 20 20 20 3c 61 20 . @ <a
3410: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
3420: 55 52 4c 29 2f 76 64 69 66 66 2f 25 73 28 7a 53 URL)/vdiff/%s(zS
3430: 68 6f 72 74 55 75 69 64 29 22 3e 64 69 66 66 3c hortUuid)">diff<
3440: 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 20 20 20 /a>. @
3450: 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e | <a href="%s(g.
3460: 7a 42 61 73 65 55 52 4c 29 2f 64 69 72 3f 63 69 zBaseURL)/dir?ci
3470: 3d 25 73 28 7a 53 68 6f 72 74 55 75 69 64 29 22 =%s(zShortUuid)"
3480: 3e 66 69 6c 65 73 3c 2f 61 3e 0a 20 20 20 20 20 >files</a>.
3490: 20 40 20 20 20 20 20 7c 20 3c 61 20 68 72 65 66 @ | <a href
34a0: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
34b0: 2f 7a 69 70 2f 25 73 28 7a 50 72 6f 6a 4e 61 6d /zip/%s(zProjNam
34c0: 65 29 2d 25 73 28 7a 53 68 6f 72 74 55 75 69 64 e)-%s(zShortUuid
34d0: 29 2e 7a 69 70 3f 75 75 69 64 3d 25 73 28 7a 55 ).zip?uuid=%s(zU
34e0: 75 69 64 29 22 3e 0a 20 20 20 20 20 20 40 20 20 uid)">. @
34f0: 20 20 20 20 20 20 20 5a 49 50 20 61 72 63 68 69 ZIP archi
3500: 76 65 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 ve</a>. @
3510: 20 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 | <a href="%s
3520: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 (g.zBaseURL)/art
3530: 69 66 61 63 74 2f 25 64 28 72 69 64 29 22 3e 6d ifact/%d(rid)">m
3540: 61 6e 69 66 65 73 74 3c 2f 61 3e 0a 20 20 20 20 anifest</a>.
3550: 20 20 69 66 28 20 67 2e 6f 6b 57 72 69 74 65 20 if( g.okWrite
3560: 29 7b 0a 20 20 20 20 20 20 20 20 40 20 20 20 20 ){. @
3570: 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 | <a href="%s(g
3580: 2e 7a 42 61 73 65 55 52 4c 29 2f 63 69 5f 65 64 .zBaseURL)/ci_ed
3590: 69 74 3f 72 3d 25 64 28 72 69 64 29 22 3e 65 64 it?r=%d(rid)">ed
35a0: 69 74 3c 2f 61 3e 0a 20 20 20 20 20 20 7d 0a 20 it</a>. }.
35b0: 20 20 20 20 20 40 20 20 20 3c 2f 74 64 3e 0a 20 @ </td>.
35c0: 20 20 20 20 20 40 20 3c 2f 74 72 3e 0a 20 20 20 @ </tr>.
35d0: 20 20 20 66 72 65 65 28 7a 53 68 6f 72 74 55 75 free(zShortUu
35e0: 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 40 id);. }. @
35f0: 20 3c 2f 74 61 62 6c 65 3e 3c 2f 70 3e 0a 20 20 </table></p>.
3600: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 79 6c 65 }else{. style
3610: 5f 68 65 61 64 65 72 28 22 43 68 65 63 6b 2d 69 _header("Check-i
3620: 6e 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 3b n Information");
3630: 0a 20 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 . login_anony
3640: 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 mous_available()
3650: 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c ;. }. db_final
3660: 69 7a 65 28 26 71 29 3b 0a 20 20 73 68 6f 77 54 ize(&q);. showT
3670: 61 67 73 28 72 69 64 2c 20 22 22 29 3b 0a 20 20 ags(rid, "");.
3680: 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 @ <div class="se
3690: 63 74 69 6f 6e 22 3e 46 69 6c 65 20 43 68 61 6e ction">File Chan
36a0: 67 65 73 3c 2f 64 69 76 3e 0a 20 20 40 20 3c 75 ges</div>. @ <u
36b0: 6c 3e 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 l>. db_prepare(
36c0: 26 71 2c 20 0a 20 20 20 20 20 22 53 45 4c 45 43 &q, . "SELEC
36d0: 54 20 61 2e 6e 61 6d 65 2c 20 62 2e 6e 61 6d 65 T a.name, b.name
36e0: 22 0a 20 20 20 20 20 22 20 20 46 52 4f 4d 20 6d ". " FROM m
36f0: 6c 69 6e 6b 2c 20 66 69 6c 65 6e 61 6d 65 20 41 link, filename A
3700: 53 20 61 2c 20 66 69 6c 65 6e 61 6d 65 20 41 53 S a, filename AS
3710: 20 62 22 0a 20 20 20 20 20 22 20 57 48 45 52 45 b". " WHERE
3720: 20 6d 69 64 3d 25 64 22 0a 20 20 20 20 20 22 20 mid=%d". "
3730: 20 20 41 4e 44 20 61 2e 66 6e 69 64 3d 6d 6c 69 AND a.fnid=mli
3740: 6e 6b 2e 66 6e 69 64 22 0a 20 20 20 20 20 22 20 nk.fnid". "
3750: 20 20 41 4e 44 20 62 2e 66 6e 69 64 3d 6d 6c 69 AND b.fnid=mli
3760: 6e 6b 2e 70 66 6e 69 64 22 2c 0a 20 20 20 20 20 nk.pfnid",.
3770: 72 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 rid. );. while
3780: 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 ( db_step(&q)==S
3790: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 QLITE_ROW ){.
37a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 const char *zNa
37b0: 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 me = db_column_t
37c0: 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 ext(&q, 0);.
37d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 72 69 const char *zPri
37e0: 6f 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 or = db_column_t
37f0: 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 ext(&q, 1);.
3800: 40 20 3c 6c 69 3e 3c 62 3e 52 65 6e 61 6d 65 64 @ <li><b>Renamed
3810: 3a 3c 2f 62 3e 0a 20 20 20 20 69 66 28 20 67 2e :</b>. if( g.
3820: 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 okHistory ){.
3830: 20 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 @ <a href="%s
3840: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 69 6e (g.zBaseURL)/fin
3850: 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 6d 65 fo?name=%T(zName
3860: 29 22 3e 25 68 28 7a 50 72 69 6f 72 29 3c 2f 61 )">%h(zPrior)</a
3870: 3e 20 74 6f 0a 20 20 20 20 20 20 40 20 3c 61 20 > to. @ <a
3880: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
3890: 55 52 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d URL)/finfo?name=
38a0: 25 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 7a 4e %T(zName)">%h(zN
38b0: 61 6d 65 29 3c 2f 61 3e 3c 2f 6c 69 3e 0a 20 20 ame)</a></li>.
38c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 }else{. @
38d0: 20 25 68 28 7a 50 72 69 6f 72 29 20 74 6f 20 25 %h(zPrior) to %
38e0: 68 28 7a 4e 61 6d 65 29 3c 2f 6c 69 3e 0a 20 20 h(zName)</li>.
38f0: 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e }. }. db_fin
3900: 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 64 62 5f alize(&q);. db_
3910: 70 72 65 70 61 72 65 28 26 71 2c 20 0a 20 20 20 prepare(&q, .
3920: 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 "SELECT name,
3930: 70 69 64 2c 20 66 69 64 20 22 0a 20 20 20 20 20 pid, fid ".
3940: 22 20 20 46 52 4f 4d 20 6d 6c 69 6e 6b 2c 20 66 " FROM mlink, f
3950: 69 6c 65 6e 61 6d 65 22 0a 20 20 20 20 20 22 20 ilename". "
3960: 57 48 45 52 45 20 6d 69 64 3d 25 64 22 0a 20 20 WHERE mid=%d".
3970: 20 20 20 22 20 20 20 41 4e 44 20 66 69 64 21 3d " AND fid!=
3980: 70 69 64 22 0a 20 20 20 20 20 22 20 20 20 41 4e pid". " AN
3990: 44 20 66 69 6c 65 6e 61 6d 65 2e 66 6e 69 64 3d D filename.fnid=
39a0: 6d 6c 69 6e 6b 2e 66 6e 69 64 22 2c 0a 20 20 20 mlink.fnid",.
39b0: 20 20 72 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 rid. );. whi
39c0: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d le( db_step(&q)=
39d0: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
39e0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
39f0: 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e Name = db_column
3a00: 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 _text(&q, 0);.
3a10: 20 20 69 6e 74 20 70 69 64 20 3d 20 64 62 5f 63 int pid = db_c
3a20: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 31 29 olumn_int(&q, 1)
3a30: 3b 0a 20 20 20 20 69 6e 74 20 66 69 64 20 3d 20 ;. int fid =
3a40: 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 db_column_int(&q
3a50: 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 69 , 2);. if( pi
3a60: 64 20 26 26 20 66 69 64 20 29 7b 0a 20 20 20 20 d && fid ){.
3a70: 20 20 40 20 3c 6c 69 3e 3c 62 3e 4d 6f 64 69 66 @ <li><b>Modif
3a80: 69 65 64 3a 3c 2f 62 3e 0a 20 20 20 20 7d 65 6c ied:</b>. }el
3a90: 73 65 20 69 66 28 20 66 69 64 20 29 7b 0a 20 20 se if( fid ){.
3aa0: 20 20 20 20 40 20 3c 6c 69 3e 3c 62 3e 41 64 64 @ <li><b>Add
3ab0: 65 64 3a 3c 2f 62 3e 0a 20 20 20 20 7d 65 6c 73 ed:</b>. }els
3ac0: 65 20 69 66 28 20 70 69 64 20 29 7b 0a 20 20 20 e if( pid ){.
3ad0: 20 20 20 40 20 3c 6c 69 3e 3c 62 3e 44 65 6c 65 @ <li><b>Dele
3ae0: 74 65 64 3a 3c 2f 62 3e 0a 20 20 20 20 7d 0a 20 ted:</b>. }.
3af0: 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f if( g.okHisto
3b00: 72 79 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 61 ry ){. @ <a
3b10: 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 href="%s(g.zBas
3b20: 65 55 52 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 eURL)/finfo?name
3b30: 3d 25 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 7a =%T(zName)">%h(z
3b40: 4e 61 6d 65 29 3c 2f 61 3e 3c 2f 6c 69 3e 0a 20 Name)</a></li>.
3b50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
3b60: 40 20 25 68 28 7a 4e 61 6d 65 29 3c 2f 6c 69 3e @ %h(zName)</li>
3b70: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 40 20 3c . }. }. @ <
3b80: 2f 75 6c 3e 0a 20 20 63 6f 6d 70 75 74 65 5f 6c /ul>. compute_l
3b90: 65 61 76 65 73 28 72 69 64 2c 20 30 29 3b 0a 20 eaves(rid, 0);.
3ba0: 20 73 68 6f 77 44 65 73 63 65 6e 64 61 6e 74 73 showDescendants
3bb0: 28 72 69 64 2c 20 32 2c 20 22 44 65 73 63 65 6e (rid, 2, "Descen
3bc0: 64 61 6e 74 73 22 29 3b 0a 20 20 73 68 6f 77 4c dants");. showL
3bd0: 65 61 76 65 73 28 72 69 64 29 3b 0a 20 20 73 68 eaves(rid);. sh
3be0: 6f 77 41 6e 63 65 73 74 6f 72 73 28 72 69 64 2c owAncestors(rid,
3bf0: 20 32 2c 20 22 41 6e 63 65 73 74 6f 72 73 22 29 2, "Ancestors")
3c00: 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 ;. style_footer
3c10: 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 ();.}../*.** WEB
3c20: 50 41 47 45 3a 20 77 69 6e 66 6f 0a 2a 2a 20 55 PAGE: winfo.** U
3c30: 52 4c 3a 20 20 2f 77 69 6e 66 6f 3f 6e 61 6d 65 RL: /winfo?name
3c40: 3d 52 49 44 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 =RID.**.** Retur
3c50: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 n information ab
3c60: 6f 75 74 20 61 20 77 69 6b 69 20 70 61 67 65 2e out a wiki page.
3c70: 0a 2a 2f 0a 76 6f 69 64 20 77 69 6e 66 6f 5f 70 .*/.void winfo_p
3c80: 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 53 74 6d age(void){. Stm
3c90: 74 20 71 3b 0a 20 20 69 6e 74 20 72 69 64 3b 0a t q;. int rid;.
3ca0: 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 . login_check_c
3cb0: 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 redentials();.
3cc0: 69 66 28 20 21 67 2e 6f 6b 52 64 57 69 6b 69 20 if( !g.okRdWiki
3cd0: 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 ){ login_needed(
3ce0: 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 72 ); return; }. r
3cf0: 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 id = name_to_rid
3d00: 28 50 44 28 22 6e 61 6d 65 22 2c 22 30 22 29 29 (PD("name","0"))
3d10: 3b 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 ;. if( rid==0 )
3d20: 7b 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 {. style_head
3d30: 65 72 28 22 57 69 6b 69 20 50 61 67 65 20 49 6e er("Wiki Page In
3d40: 66 6f 72 6d 61 74 69 6f 6e 20 45 72 72 6f 72 22 formation Error"
3d50: 29 3b 0a 20 20 20 20 40 20 4e 6f 20 73 75 63 68 );. @ No such
3d60: 20 6f 62 6a 65 63 74 3a 20 25 68 28 67 2e 61 72 object: %h(g.ar
3d70: 67 76 5b 32 5d 29 0a 20 20 20 20 73 74 79 6c 65 gv[2]). style
3d80: 5f 66 6f 6f 74 65 72 28 29 3b 0a 20 20 20 20 72 _footer();. r
3d90: 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 64 62 5f eturn;. }. db_
3da0: 70 72 65 70 61 72 65 28 26 71 2c 20 0a 20 20 20 prepare(&q, .
3db0: 20 20 22 53 45 4c 45 43 54 20 73 75 62 73 74 72 "SELECT substr
3dc0: 28 74 61 67 6e 61 6d 65 2c 20 36 2c 20 31 30 30 (tagname, 6, 100
3dd0: 30 29 2c 20 75 75 69 64 2c 22 0a 20 20 20 20 20 0), uuid,".
3de0: 22 20 20 20 20 20 20 20 64 61 74 65 74 69 6d 65 " datetime
3df0: 28 65 76 65 6e 74 2e 6d 74 69 6d 65 2c 20 27 6c (event.mtime, 'l
3e00: 6f 63 61 6c 74 69 6d 65 27 29 2c 20 75 73 65 72 ocaltime'), user
3e10: 22 0a 20 20 20 20 20 22 20 20 46 52 4f 4d 20 74 ". " FROM t
3e20: 61 67 78 72 65 66 2c 20 74 61 67 2c 20 62 6c 6f agxref, tag, blo
3e30: 62 2c 20 65 76 65 6e 74 22 0a 20 20 20 20 20 22 b, event". "
3e40: 20 57 48 45 52 45 20 74 61 67 78 72 65 66 2e 72 WHERE tagxref.r
3e50: 69 64 3d 25 64 22 0a 20 20 20 20 20 22 20 20 20 id=%d". "
3e60: 41 4e 44 20 74 61 67 2e 74 61 67 69 64 3d 74 61 AND tag.tagid=ta
3e70: 67 78 72 65 66 2e 74 61 67 69 64 22 0a 20 20 20 gxref.tagid".
3e80: 20 20 22 20 20 20 41 4e 44 20 74 61 67 2e 74 61 " AND tag.ta
3e90: 67 6e 61 6d 65 20 4c 49 4b 45 20 27 77 69 6b 69 gname LIKE 'wiki
3ea0: 2d 25 25 27 22 0a 20 20 20 20 20 22 20 20 20 41 -%%'". " A
3eb0: 4e 44 20 62 6c 6f 62 2e 72 69 64 3d 25 64 22 0a ND blob.rid=%d".
3ec0: 20 20 20 20 20 22 20 20 20 41 4e 44 20 65 76 65 " AND eve
3ed0: 6e 74 2e 6f 62 6a 69 64 3d 25 64 22 2c 0a 20 20 nt.objid=%d",.
3ee0: 20 20 20 72 69 64 2c 20 72 69 64 2c 20 72 69 64 rid, rid, rid
3ef0: 0a 20 20 29 3b 0a 20 20 69 66 28 20 64 62 5f 73 . );. if( db_s
3f00: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
3f10: 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 ROW ){. const
3f20: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 char *zName = d
3f30: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
3f40: 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 0);. const
3f50: 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 char *zUuid = db
3f60: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
3f70: 20 31 29 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 1);. char *z
3f80: 54 69 74 6c 65 20 3d 20 6d 70 72 69 6e 74 66 28 Title = mprintf(
3f90: 22 57 69 6b 69 20 50 61 67 65 20 25 73 22 2c 20 "Wiki Page %s",
3fa0: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 73 74 79 6c zName);. styl
3fb0: 65 5f 68 65 61 64 65 72 28 7a 54 69 74 6c 65 29 e_header(zTitle)
3fc0: 3b 0a 20 20 20 20 66 72 65 65 28 7a 54 69 74 6c ;. free(zTitl
3fd0: 65 29 3b 0a 20 20 20 20 6c 6f 67 69 6e 5f 61 6e e);. login_an
3fe0: 6f 6e 79 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c onymous_availabl
3ff0: 65 28 29 3b 0a 20 20 20 20 40 20 3c 64 69 76 20 e();. @ <div
4000: 63 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 3e class="section">
4010: 4f 76 65 72 76 69 65 77 3c 2f 64 69 76 3e 0a 20 Overview</div>.
4020: 20 20 20 40 20 3c 70 3e 3c 74 61 62 6c 65 20 63 @ <p><table c
4030: 6c 61 73 73 3d 22 6c 61 62 65 6c 2d 76 61 6c 75 lass="label-valu
4040: 65 22 3e 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 e">. @ <tr><t
4050: 68 3e 56 65 72 73 69 6f 6e 3a 3c 2f 74 68 3e 3c h>Version:</th><
4060: 74 64 3e 25 73 28 7a 55 75 69 64 29 3c 2f 74 64 td>%s(zUuid)</td
4070: 3e 3c 2f 74 72 3e 0a 20 20 20 20 40 20 3c 74 72 ></tr>. @ <tr
4080: 3e 3c 74 68 3e 44 61 74 65 3a 3c 2f 74 68 3e 3c ><th>Date:</th><
4090: 74 64 3e 25 73 28 64 62 5f 63 6f 6c 75 6d 6e 5f td>%s(db_column_
40a0: 74 65 78 74 28 26 71 2c 20 32 29 29 3c 2f 74 64 text(&q, 2))</td
40b0: 3e 3c 2f 74 72 3e 0a 20 20 20 20 69 66 28 20 67 ></tr>. if( g
40c0: 2e 6f 6b 53 65 74 75 70 20 29 7b 0a 20 20 20 20 .okSetup ){.
40d0: 20 20 40 20 3c 74 72 3e 3c 74 68 3e 52 65 63 6f @ <tr><th>Reco
40e0: 72 64 20 49 44 3a 3c 2f 74 68 3e 3c 74 64 3e 25 rd ID:</th><td>%
40f0: 64 28 72 69 64 29 3c 2f 74 64 3e 3c 2f 74 72 3e d(rid)</td></tr>
4100: 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 74 72 . }. @ <tr
4110: 3e 3c 74 68 3e 4f 72 69 67 69 6e 61 6c 26 6e 62 ><th>Original&nb
4120: 73 70 3b 55 73 65 72 3a 3c 2f 74 68 3e 3c 74 64 sp;User:</th><td
4130: 3e 25 73 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 >%s(db_column_te
4140: 78 74 28 26 71 2c 20 33 29 29 3c 2f 74 64 3e 3c xt(&q, 3))</td><
4150: 2f 74 72 3e 0a 20 20 20 20 69 66 28 20 67 2e 6f /tr>. if( g.o
4160: 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 20 kHistory ){.
4170: 20 20 40 20 3c 74 72 3e 3c 74 68 3e 43 6f 6d 6d @ <tr><th>Comm
4180: 61 6e 64 73 3a 3c 2f 74 68 3e 0a 20 20 20 20 20 ands:</th>.
4190: 20 40 20 20 20 3c 74 64 3e 0a 20 20 20 20 20 20 @ <td>.
41a0: 2f 2a 20 40 20 20 20 20 20 3c 61 20 68 72 65 66 /* @ <a href
41b0: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
41c0: 2f 77 64 69 66 66 2f 25 64 28 72 69 64 29 22 3e /wdiff/%d(rid)">
41d0: 64 69 66 66 3c 2f 61 3e 20 7c 20 2a 2f 0a 20 20 diff</a> | */.
41e0: 20 20 20 20 40 20 20 20 20 20 3c 61 20 68 72 65 @ <a hre
41f0: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
4200: 29 2f 77 68 69 73 74 6f 72 79 3f 6e 61 6d 65 3d )/whistory?name=
4210: 25 74 28 7a 4e 61 6d 65 29 22 3e 68 69 73 74 6f %t(zName)">histo
4220: 72 79 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 ry</a>. @
4230: 20 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 | <a href="%s
4240: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 (g.zBaseURL)/art
4250: 69 66 61 63 74 2f 25 64 28 72 69 64 29 22 3e 72 ifact/%d(rid)">r
4260: 61 77 2d 74 65 78 74 3c 2f 61 3e 0a 20 20 20 20 aw-text</a>.
4270: 20 20 40 20 20 20 3c 2f 74 64 3e 0a 20 20 20 20 @ </td>.
4280: 20 20 40 20 3c 2f 74 72 3e 0a 20 20 20 20 7d 0a @ </tr>. }.
4290: 20 20 20 20 40 20 3c 2f 74 61 62 6c 65 3e 3c 2f @ </table></
42a0: 70 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 p>. }else{.
42b0: 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 57 69 style_header("Wi
42c0: 6b 69 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 ki Information")
42d0: 3b 0a 20 20 20 20 72 69 64 20 3d 20 30 3b 0a 20 ;. rid = 0;.
42e0: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
42f0: 28 26 71 29 3b 0a 20 20 73 68 6f 77 54 61 67 73 (&q);. showTags
4300: 28 72 69 64 2c 20 22 77 69 6b 69 2d 2a 22 29 3b (rid, "wiki-*");
4310: 0a 20 20 69 66 28 20 72 69 64 20 29 7b 0a 20 20 . if( rid ){.
4320: 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a Blob content;.
4330: 20 20 20 20 4d 61 6e 69 66 65 73 74 20 6d 3b 0a Manifest m;.
4340: 20 20 20 20 6d 65 6d 73 65 74 28 26 6d 2c 20 30 memset(&m, 0
4350: 2c 20 73 69 7a 65 6f 66 28 6d 29 29 3b 0a 20 20 , sizeof(m));.
4360: 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 6d 2e 63 blob_zero(&m.c
4370: 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 63 6f 6e ontent);. con
4380: 74 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 26 63 tent_get(rid, &c
4390: 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 6d 61 6e ontent);. man
43a0: 69 66 65 73 74 5f 70 61 72 73 65 28 26 6d 2c 20 ifest_parse(&m,
43b0: 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 69 &content);. i
43c0: 66 28 20 6d 2e 74 79 70 65 3d 3d 43 46 54 59 50 f( m.type==CFTYP
43d0: 45 5f 57 49 4b 49 20 29 7b 0a 20 20 20 20 20 20 E_WIKI ){.
43e0: 42 6c 6f 62 20 77 69 6b 69 3b 0a 20 20 20 20 20 Blob wiki;.
43f0: 20 62 6c 6f 62 5f 69 6e 69 74 28 26 77 69 6b 69 blob_init(&wiki
4400: 2c 20 6d 2e 7a 57 69 6b 69 2c 20 2d 31 29 3b 0a , m.zWiki, -1);.
4410: 20 20 20 20 20 20 40 20 3c 64 69 76 20 63 6c 61 @ <div cla
4420: 73 73 3d 22 73 65 63 74 69 6f 6e 22 3e 43 6f 6e ss="section">Con
4430: 74 65 6e 74 3c 2f 64 69 76 3e 0a 20 20 20 20 20 tent</div>.
4440: 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 28 26 77 wiki_convert(&w
4450: 69 6b 69 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 iki, 0, 0);.
4460: 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 77 69 blob_reset(&wi
4470: 6b 69 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d ki);. }. m
4480: 61 6e 69 66 65 73 74 5f 63 6c 65 61 72 28 26 6d anifest_clear(&m
4490: 29 3b 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f 66 );. }. style_f
44a0: 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a ooter();.}../*.*
44b0: 2a 20 57 45 42 50 41 47 45 3a 20 66 69 6e 66 6f * WEBPAGE: finfo
44c0: 0a 2a 2a 20 55 52 4c 3a 20 2f 66 69 6e 66 6f 3f .** URL: /finfo?
44d0: 6e 61 6d 65 3d 46 49 4c 45 4e 41 4d 45 0a 2a 2a name=FILENAME.**
44e0: 0a 2a 2a 20 53 68 6f 77 20 74 68 65 20 63 6f 6d .** Show the com
44f0: 70 6c 65 74 65 20 63 68 61 6e 67 65 20 68 69 73 plete change his
4500: 74 6f 72 79 20 66 6f 72 20 61 20 73 69 6e 67 6c tory for a singl
4510: 65 20 66 69 6c 65 2e 20 0a 2a 2f 0a 76 6f 69 64 e file. .*/.void
4520: 20 66 69 6e 66 6f 5f 70 61 67 65 28 76 6f 69 64 finfo_page(void
4530: 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 63 ){. Stmt q;. c
4540: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 onst char *zFile
4550: 6e 61 6d 65 3b 0a 20 20 63 68 61 72 20 7a 50 72 name;. char zPr
4560: 65 76 44 61 74 65 5b 32 30 5d 3b 0a 20 20 42 6c evDate[20];. Bl
4570: 6f 62 20 74 69 74 6c 65 3b 0a 0a 20 20 6c 6f 67 ob title;.. log
4580: 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 in_check_credent
4590: 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 ials();. if( !g
45a0: 2e 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e .okRead ){ login
45b0: 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 _needed(); retur
45c0: 6e 3b 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65 61 n; }. style_hea
45d0: 64 65 72 28 22 46 69 6c 65 20 48 69 73 74 6f 72 der("File Histor
45e0: 79 22 29 3b 0a 20 20 6c 6f 67 69 6e 5f 61 6e 6f y");. login_ano
45f0: 6e 79 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 nymous_available
4600: 28 29 3b 0a 0a 20 20 7a 50 72 65 76 44 61 74 65 ();.. zPrevDate
4610: 5b 30 5d 20 3d 20 30 3b 0a 20 20 7a 46 69 6c 65 [0] = 0;. zFile
4620: 6e 61 6d 65 20 3d 20 50 44 28 22 6e 61 6d 65 22 name = PD("name"
4630: 2c 22 22 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 ,"");. db_prepa
4640: 72 65 28 26 71 2c 0a 20 20 20 20 22 53 45 4c 45 re(&q,. "SELE
4650: 43 54 20 73 75 62 73 74 72 28 62 2e 75 75 69 64 CT substr(b.uuid
4660: 2c 31 2c 31 30 29 2c 20 64 61 74 65 74 69 6d 65 ,1,10), datetime
4670: 28 65 76 65 6e 74 2e 6d 74 69 6d 65 2c 27 6c 6f (event.mtime,'lo
4680: 63 61 6c 74 69 6d 65 27 29 2c 22 0a 20 20 20 20 caltime'),".
4690: 22 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 " coalesce
46a0: 28 65 76 65 6e 74 2e 65 63 6f 6d 6d 65 6e 74 2c (event.ecomment,
46b0: 20 65 76 65 6e 74 2e 63 6f 6d 6d 65 6e 74 29 2c event.comment),
46c0: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 63 6f ". " co
46d0: 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 75 73 alesce(event.eus
46e0: 65 72 2c 20 65 76 65 6e 74 2e 75 73 65 72 29 2c er, event.user),
46f0: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 6d 6c ". " ml
4700: 69 6e 6b 2e 70 69 64 2c 20 6d 6c 69 6e 6b 2e 66 ink.pid, mlink.f
4710: 69 64 2c 20 6d 6c 69 6e 6b 2e 6d 69 64 2c 20 6d id, mlink.mid, m
4720: 6c 69 6e 6b 2e 66 6e 69 64 22 0a 20 20 20 20 22 link.fnid". "
4730: 20 20 46 52 4f 4d 20 6d 6c 69 6e 6b 2c 20 62 6c FROM mlink, bl
4740: 6f 62 20 62 2c 20 65 76 65 6e 74 22 0a 20 20 20 ob b, event".
4750: 20 22 20 57 48 45 52 45 20 6d 6c 69 6e 6b 2e 66 " WHERE mlink.f
4760: 6e 69 64 3d 28 53 45 4c 45 43 54 20 66 6e 69 64 nid=(SELECT fnid
4770: 20 46 52 4f 4d 20 66 69 6c 65 6e 61 6d 65 20 57 FROM filename W
4780: 48 45 52 45 20 6e 61 6d 65 3d 25 51 29 22 0a 20 HERE name=%Q)".
4790: 20 20 20 22 20 20 20 41 4e 44 20 62 2e 72 69 64 " AND b.rid
47a0: 3d 6d 6c 69 6e 6b 2e 66 69 64 22 0a 20 20 20 20 =mlink.fid".
47b0: 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 " AND event.ob
47c0: 6a 69 64 3d 6d 6c 69 6e 6b 2e 6d 69 64 22 0a 20 jid=mlink.mid".
47d0: 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 65 76 " ORDER BY ev
47e0: 65 6e 74 2e 6d 74 69 6d 65 20 44 45 53 43 22 2c ent.mtime DESC",
47f0: 0a 20 20 20 20 7a 46 69 6c 65 6e 61 6d 65 0a 20 . zFilename.
4800: 20 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 );. blob_zero(
4810: 26 74 69 74 6c 65 29 3b 0a 20 20 62 6c 6f 62 5f &title);. blob_
4820: 61 70 70 65 6e 64 66 28 26 74 69 74 6c 65 2c 20 appendf(&title,
4830: 22 48 69 73 74 6f 72 79 20 6f 66 20 22 29 3b 0a "History of ");.
4840: 20 20 68 79 70 65 72 6c 69 6e 6b 65 64 5f 70 61 hyperlinked_pa
4850: 74 68 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 74 th(zFilename, &t
4860: 69 74 6c 65 29 3b 0a 20 20 40 20 3c 68 32 3e 25 itle);. @ <h2>%
4870: 62 28 26 74 69 74 6c 65 29 3c 2f 68 32 3e 0a 20 b(&title)</h2>.
4880: 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 74 69 74 blob_reset(&tit
4890: 6c 65 29 3b 0a 20 20 40 20 3c 74 61 62 6c 65 20 le);. @ <table
48a0: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 20 62 6f cellspacing=0 bo
48b0: 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 rder=0 cellpaddi
48c0: 6e 67 3d 30 3e 0a 20 20 77 68 69 6c 65 28 20 64 ng=0>. while( d
48d0: 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 b_step(&q)==SQLI
48e0: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f TE_ROW ){. co
48f0: 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 20 nst char *zUuid
4900: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
4910: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e (&q, 0);. con
4920: 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 3d st char *zDate =
4930: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
4940: 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 6f 6e 73 &q, 1);. cons
4950: 74 20 63 68 61 72 20 2a 7a 43 6f 6d 20 3d 20 64 t char *zCom = d
4960: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
4970: 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 2);. const
4980: 63 68 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 char *zUser = db
4990: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
49a0: 20 33 29 3b 0a 20 20 20 20 69 6e 74 20 66 70 69 3);. int fpi
49b0: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e d = db_column_in
49c0: 74 28 26 71 2c 20 34 29 3b 0a 20 20 20 20 69 6e t(&q, 4);. in
49d0: 74 20 66 72 69 64 20 3d 20 64 62 5f 63 6f 6c 75 t frid = db_colu
49e0: 6d 6e 5f 69 6e 74 28 26 71 2c 20 35 29 3b 0a 20 mn_int(&q, 5);.
49f0: 20 20 20 69 6e 74 20 6d 69 64 20 3d 20 64 62 5f int mid = db_
4a00: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 36 column_int(&q, 6
4a10: 29 3b 0a 20 20 20 20 69 6e 74 20 66 6e 69 64 20 );. int fnid
4a20: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 = db_column_int(
4a30: 26 71 2c 20 37 29 3b 0a 20 20 20 20 63 68 61 72 &q, 7);. char
4a40: 20 7a 53 68 6f 72 74 5b 32 30 5d 3b 0a 20 20 20 zShort[20];.
4a50: 20 69 66 28 20 6d 65 6d 63 6d 70 28 7a 44 61 74 if( memcmp(zDat
4a60: 65 2c 20 7a 50 72 65 76 44 61 74 65 2c 20 31 30 e, zPrevDate, 10
4a70: 29 20 29 7b 0a 20 20 20 20 20 20 73 70 72 69 6e ) ){. sprin
4a80: 74 66 28 7a 50 72 65 76 44 61 74 65 2c 20 22 25 tf(zPrevDate, "%
4a90: 2e 31 30 73 22 2c 20 7a 44 61 74 65 29 3b 0a 20 .10s", zDate);.
4aa0: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 63 @ <tr><td c
4ab0: 6f 6c 73 70 61 6e 3d 33 3e 0a 20 20 20 20 20 20 olspan=3>.
4ac0: 40 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 @ <div class="
4ad0: 64 69 76 69 64 65 72 22 3e 25 73 28 7a 50 72 65 divider">%s(zPre
4ae0: 76 44 61 74 65 29 3c 2f 64 69 76 3e 0a 20 20 20 vDate)</div>.
4af0: 20 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a @ </td></tr>.
4b00: 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 74 72 3e }. @ <tr>
4b10: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 <td valign="top"
4b20: 3e 25 73 28 26 7a 44 61 74 65 5b 31 31 5d 29 3c >%s(&zDate[11])<
4b30: 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 20 77 /td>. @ <td w
4b40: 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a idth="20"></td>.
4b50: 20 20 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e @ <td valign
4b60: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 6c 65 ="top" align="le
4b70: 66 74 22 3e 0a 20 20 20 20 73 71 6c 69 74 65 33 ft">. sqlite3
4b80: 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 _snprintf(sizeof
4b90: 28 7a 53 68 6f 72 74 29 2c 20 7a 53 68 6f 72 74 (zShort), zShort
4ba0: 2c 20 22 25 2e 31 30 73 22 2c 20 7a 55 75 69 64 , "%.10s", zUuid
4bb0: 29 3b 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 48 );. if( g.okH
4bc0: 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 istory ){.
4bd0: 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e @ <a href="%s(g.
4be0: 7a 54 6f 70 29 2f 61 72 74 69 66 61 63 74 2f 25 zTop)/artifact/%
4bf0: 73 28 7a 55 75 69 64 29 22 3e 5b 25 73 28 7a 53 s(zUuid)">[%s(zS
4c00: 68 6f 72 74 29 5d 3c 2f 61 3e 0a 20 20 20 20 7d hort)]</a>. }
4c10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 5b 25 else{. @ [%
4c20: 73 28 7a 53 68 6f 72 74 29 5d 0a 20 20 20 20 7d s(zShort)]. }
4c30: 0a 20 20 20 20 40 20 25 68 28 7a 43 6f 6d 29 20 . @ %h(zCom)
4c40: 28 42 79 3a 20 25 68 28 7a 55 73 65 72 29 29 0a (By: %h(zUser)).
4c50: 20 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 if( g.okHist
4c60: 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 69 66 28 ory ){. if(
4c70: 20 66 70 69 64 20 29 7b 0a 20 20 20 20 20 20 20 fpid ){.
4c80: 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 @ <a href="%s(g
4c90: 2e 7a 42 61 73 65 55 52 4c 29 2f 66 64 69 66 66 .zBaseURL)/fdiff
4ca0: 3f 76 31 3d 25 64 28 66 70 69 64 29 26 61 6d 70 ?v1=%d(fpid)&
4cb0: 3b 76 32 3d 25 64 28 66 72 69 64 29 22 3e 5b 64 ;v2=%d(frid)">[d
4cc0: 69 66 66 5d 3c 2f 61 3e 0a 20 20 20 20 20 20 7d iff]</a>. }
4cd0: 0a 20 20 20 20 20 20 40 20 3c 61 20 68 72 65 66 . @ <a href
4ce0: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
4cf0: 2f 61 6e 6e 6f 74 61 74 65 3f 6d 69 64 3d 25 64 /annotate?mid=%d
4d00: 28 6d 69 64 29 26 61 6d 70 3b 66 6e 69 64 3d 25 (mid)&fnid=%
4d10: 64 28 66 6e 69 64 29 22 3e 0a 20 20 20 20 20 20 d(fnid)">.
4d20: 40 20 5b 61 6e 6e 6f 74 61 74 65 5d 3c 2f 61 3e @ [annotate]</a>
4d30: 0a 20 20 20 20 20 20 40 20 3c 2f 74 64 3e 0a 20 . @ </td>.
4d40: 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 }. }. db_fi
4d50: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 40 20 nalize(&q);. @
4d60: 3c 2f 74 61 62 6c 65 3e 0a 20 20 73 74 79 6c 65 </table>. style
4d70: 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 0a 2f _footer();.}.../
4d80: 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 74 68 65 20 *.** Append the
4d90: 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 difference betwe
4da0: 65 6e 20 74 77 6f 20 52 49 44 73 20 74 6f 20 74 en two RIDs to t
4db0: 68 65 20 6f 75 74 70 75 74 0a 2a 2f 0a 73 74 61 he output.*/.sta
4dc0: 74 69 63 20 76 6f 69 64 20 61 70 70 65 6e 64 5f tic void append_
4dd0: 64 69 66 66 28 69 6e 74 20 66 72 6f 6d 69 64 2c diff(int fromid,
4de0: 20 69 6e 74 20 74 6f 69 64 29 7b 0a 20 20 42 6c int toid){. Bl
4df0: 6f 62 20 66 72 6f 6d 2c 20 74 6f 2c 20 6f 75 74 ob from, to, out
4e00: 3b 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 ;. content_get(
4e10: 66 72 6f 6d 69 64 2c 20 26 66 72 6f 6d 29 3b 0a fromid, &from);.
4e20: 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 74 6f content_get(to
4e30: 69 64 2c 20 26 74 6f 29 3b 0a 20 20 62 6c 6f 62 id, &to);. blob
4e40: 5f 7a 65 72 6f 28 26 6f 75 74 29 3b 0a 20 20 74 _zero(&out);. t
4e50: 65 78 74 5f 64 69 66 66 28 26 66 72 6f 6d 2c 20 ext_diff(&from,
4e60: 26 74 6f 2c 20 26 6f 75 74 2c 20 35 29 3b 0a 20 &to, &out, 5);.
4e70: 20 40 20 25 68 28 62 6c 6f 62 5f 73 74 72 28 26 @ %h(blob_str(&
4e80: 6f 75 74 29 29 0a 20 20 62 6c 6f 62 5f 72 65 73 out)). blob_res
4e90: 65 74 28 26 66 72 6f 6d 29 3b 0a 20 20 62 6c 6f et(&from);. blo
4ea0: 62 5f 72 65 73 65 74 28 26 74 6f 29 3b 0a 20 20 b_reset(&to);.
4eb0: 62 6c 6f 62 5f 72 65 73 65 74 28 26 6f 75 74 29 blob_reset(&out)
4ec0: 3b 20 20 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 ; .}.../*.** WE
4ed0: 42 50 41 47 45 3a 20 76 64 69 66 66 0a 2a 2a 20 BPAGE: vdiff.**
4ee0: 55 52 4c 3a 20 2f 76 64 69 66 66 3f 6e 61 6d 65 URL: /vdiff?name
4ef0: 3d 52 49 44 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 20 =RID.**.** Show
4f00: 61 6c 6c 20 64 69 66 66 65 72 65 6e 63 65 73 20 all differences
4f10: 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 for a particular
4f20: 20 63 68 65 63 6b 2d 69 6e 2e 0a 2a 2f 0a 76 6f check-in..*/.vo
4f30: 69 64 20 76 64 69 66 66 5f 70 61 67 65 28 76 6f id vdiff_page(vo
4f40: 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 3b 0a id){. int rid;.
4f50: 20 20 53 74 6d 74 20 71 3b 0a 20 20 63 68 61 72 Stmt q;. char
4f60: 20 2a 7a 55 75 69 64 3b 0a 0a 20 20 6c 6f 67 69 *zUuid;.. logi
4f70: 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 n_check_credenti
4f80: 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e als();. if( !g.
4f90: 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f okRead ){ login_
4fa0: 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e needed(); return
4fb0: 3b 20 7d 0a 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e ; }. login_anon
4fc0: 79 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 ymous_available(
4fd0: 29 3b 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 );.. rid = name
4fe0: 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 _to_rid(PD("name
4ff0: 22 2c 22 22 29 29 3b 0a 20 20 69 66 28 20 72 69 ",""));. if( ri
5000: 64 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 d==0 ){. foss
5010: 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 il_redirect_home
5020: 28 29 3b 0a 20 20 7d 0a 20 20 7a 55 75 69 64 20 ();. }. zUuid
5030: 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 = db_text(0, "SE
5040: 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 LECT uuid FROM b
5050: 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 lob WHERE rid=%d
5060: 22 2c 20 72 69 64 29 3b 0a 20 20 73 74 79 6c 65 ", rid);. style
5070: 5f 68 65 61 64 65 72 28 22 43 68 65 63 6b 2d 69 _header("Check-i
5080: 6e 20 5b 25 2e 31 30 73 5d 22 2c 20 7a 55 75 69 n [%.10s]", zUui
5090: 64 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 d);. db_prepare
50a0: 28 26 71 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 (&q,. "SELECT
50b0: 20 64 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 datetime(mtime)
50c0: 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 , ". "
50d0: 63 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 coalesce(event.e
50e0: 63 6f 6d 6d 65 6e 74 2c 65 76 65 6e 74 2e 63 6f comment,event.co
50f0: 6d 6d 65 6e 74 29 2c 22 0a 20 20 20 20 22 20 20 mment),". "
5100: 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65 76 coalesce(ev
5110: 65 6e 74 2e 65 75 73 65 72 2c 65 76 65 6e 74 2e ent.euser,event.
5120: 75 73 65 72 29 22 0a 20 20 20 20 22 20 20 46 52 user)". " FR
5130: 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 45 20 74 OM event WHERE t
5140: 79 70 65 3d 27 63 69 27 20 41 4e 44 20 6f 62 6a ype='ci' AND obj
5150: 69 64 3d 25 64 22 2c 0a 20 20 20 20 72 69 64 0a id=%d",. rid.
5160: 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 );. while( db
5170: 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 _step(&q)==SQLIT
5180: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e E_ROW ){. con
5190: 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 3d st char *zDate =
51a0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
51b0: 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 &q, 0);. cons
51c0: 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 3d 20 t char *zUser =
51d0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
51e0: 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 q, 2);. const
51f0: 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 20 char *zComment
5200: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
5210: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 40 20 3c (&q, 1);. @ <
5220: 68 32 3e 43 68 65 63 6b 2d 69 6e 20 25 73 28 7a h2>Check-in %s(z
5230: 55 75 69 64 29 3c 2f 68 32 3e 0a 20 20 20 20 40 Uuid)</h2>. @
5240: 20 3c 70 3e 4d 61 64 65 20 62 79 20 25 68 28 7a <p>Made by %h(z
5250: 55 73 65 72 29 20 6f 6e 20 0a 20 20 20 20 6c 69 User) on . li
5260: 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 61 74 65 nk_to_date(zDate
5270: 2c 20 22 3a 22 29 3b 0a 20 20 20 20 40 20 25 77 , ":");. @ %w
5280: 28 7a 43 6f 6d 6d 65 6e 74 29 2e 20 3c 61 20 68 (zComment). <a h
5290: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
52a0: 52 4c 29 2f 63 69 2f 25 73 28 7a 55 75 69 64 29 RL)/ci/%s(zUuid)
52b0: 22 3e 5b 64 65 74 61 69 6c 73 5d 3c 2f 61 3e 3c ">[details]</a><
52c0: 2f 70 3e 0a 20 20 20 20 40 20 3c 68 72 3e 0a 20 /p>. @ <hr>.
52d0: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
52e0: 28 26 71 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 (&q);. db_prepa
52f0: 72 65 28 26 71 2c 0a 20 20 20 20 20 22 53 45 4c re(&q,. "SEL
5300: 45 43 54 20 70 69 64 2c 20 66 69 64 2c 20 6e 61 ECT pid, fid, na
5310: 6d 65 22 0a 20 20 20 20 20 22 20 20 46 52 4f 4d me". " FROM
5320: 20 6d 6c 69 6e 6b 2c 20 66 69 6c 65 6e 61 6d 65 mlink, filename
5330: 22 0a 20 20 20 20 20 22 20 57 48 45 52 45 20 6d ". " WHERE m
5340: 6c 69 6e 6b 2e 6d 69 64 3d 25 64 22 0a 20 20 20 link.mid=%d".
5350: 20 20 22 20 20 20 41 4e 44 20 66 69 6c 65 6e 61 " AND filena
5360: 6d 65 2e 66 6e 69 64 3d 6d 6c 69 6e 6b 2e 66 6e me.fnid=mlink.fn
5370: 69 64 22 0a 20 20 20 20 20 22 20 4f 52 44 45 52 id". " ORDER
5380: 20 42 59 20 6e 61 6d 65 22 2c 0a 20 20 20 20 20 BY name",.
5390: 72 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 rid. );. while
53a0: 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 ( db_step(&q)==S
53b0: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 QLITE_ROW ){.
53c0: 20 69 6e 74 20 70 69 64 20 3d 20 64 62 5f 63 6f int pid = db_co
53d0: 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 30 29 3b 0a lumn_int(&q,0);.
53e0: 20 20 20 20 69 6e 74 20 66 69 64 20 3d 20 64 62 int fid = db
53f0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 31 _column_int(&q,1
5400: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
5410: 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 6f r *zName = db_co
5420: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 32 29 3b lumn_text(&q,2);
5430: 0a 20 20 20 20 40 20 3c 70 3e 3c 61 20 68 72 65 . @ <p><a hre
5440: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
5450: 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 )/finfo?name=%T(
5460: 7a 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 6d 65 zName)">%h(zName
5470: 29 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 20 20 40 20 )</a></p>. @
5480: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 <blockquote><pre
5490: 3e 0a 20 20 20 20 61 70 70 65 6e 64 5f 64 69 66 >. append_dif
54a0: 66 28 70 69 64 2c 20 66 69 64 29 3b 0a 20 20 20 f(pid, fid);.
54b0: 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b @ </pre></block
54c0: 71 75 6f 74 65 3e 0a 20 20 7d 0a 20 20 64 62 5f quote>. }. db_
54d0: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
54e0: 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a style_footer();.
54f0: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 }../*.** Write a
5500: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 description of
5510: 61 6e 20 6f 62 6a 65 63 74 20 74 6f 20 74 68 65 an object to the
5520: 20 77 77 77 20 72 65 70 6c 79 2e 0a 2a 2a 0a 2a www reply..**.*
5530: 2a 20 49 66 20 74 68 65 20 6f 62 6a 65 63 74 20 * If the object
5540: 69 73 20 61 20 66 69 6c 65 20 74 68 65 6e 20 6d is a file then m
5550: 65 6e 74 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 ention:.**.**
5560: 20 20 2a 20 49 74 27 73 20 61 72 74 69 66 61 63 * It's artifac
5570: 74 20 49 44 0a 2a 2a 20 20 20 20 20 2a 20 41 6c t ID.** * Al
5580: 6c 20 69 74 73 20 66 69 6c 65 6e 61 6d 65 73 0a l its filenames.
5590: 2a 2a 20 20 20 20 20 2a 20 54 68 65 20 62 61 73 ** * The bas
55a0: 65 6c 69 6e 65 73 20 69 74 20 77 61 73 20 63 68 elines it was ch
55b0: 65 63 6b 65 64 2d 69 6e 20 6f 6e 2c 20 77 69 74 ecked-in on, wit
55c0: 68 20 74 69 6d 65 73 20 61 6e 64 20 75 73 65 72 h times and user
55d0: 73 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6f s.**.** If the o
55e0: 62 6a 65 63 74 20 69 73 20 61 20 6d 61 6e 69 66 bject is a manif
55f0: 65 73 74 2c 20 74 68 65 6e 20 6d 65 6e 74 69 6f est, then mentio
5600: 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 49 n:.**.** * I
5610: 74 27 73 20 61 72 74 69 66 61 63 74 20 49 44 0a t's artifact ID.
5620: 2a 2a 20 20 20 20 20 2a 20 64 61 74 65 20 6f 66 ** * date of
5630: 20 63 68 65 63 6b 2d 69 6e 0a 2a 2a 20 20 20 20 check-in.**
5640: 20 2a 20 43 6f 6d 6d 65 6e 74 20 26 20 75 73 65 * Comment & use
5650: 72 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 r.*/.static void
5660: 20 6f 62 6a 65 63 74 5f 64 65 73 63 72 69 70 74 object_descript
5670: 69 6f 6e 28 0a 20 20 69 6e 74 20 72 69 64 2c 20 ion(. int rid,
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5690: 2f 2a 20 54 68 65 20 61 72 74 69 66 61 63 74 20 /* The artifact
56a0: 49 44 20 2a 2f 0a 20 20 69 6e 74 20 6c 69 6e 6b ID */. int link
56b0: 54 6f 56 69 65 77 2c 20 20 20 20 20 20 20 20 20 ToView,
56c0: 20 2f 2a 20 41 64 64 20 76 69 65 77 65 72 20 6c /* Add viewer l
56d0: 69 6e 6b 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 ink if true */.
56e0: 20 42 6c 6f 62 20 2a 70 44 6f 77 6e 6c 6f 61 64 Blob *pDownload
56f0: 4e 61 6d 65 20 20 20 20 20 20 2f 2a 20 46 69 6c Name /* Fil
5700: 6c 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 l with an approp
5710: 72 69 61 74 65 20 64 6f 77 6e 6c 6f 61 64 20 6e riate download n
5720: 61 6d 65 20 2a 2f 0a 29 7b 0a 20 20 53 74 6d 74 ame */.){. Stmt
5730: 20 71 3b 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 q;. int cnt =
5740: 30 3b 0a 20 20 69 6e 74 20 6e 57 69 6b 69 20 3d 0;. int nWiki =
5750: 20 30 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 0;. db_prepare
5760: 28 26 71 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 (&q,. "SELECT
5770: 20 66 69 6c 65 6e 61 6d 65 2e 6e 61 6d 65 2c 20 filename.name,
5780: 64 61 74 65 74 69 6d 65 28 65 76 65 6e 74 2e 6d datetime(event.m
5790: 74 69 6d 65 29 2c 20 73 75 62 73 74 72 28 61 2e time), substr(a.
57a0: 75 75 69 64 2c 31 2c 31 30 29 2c 22 0a 20 20 20 uuid,1,10),".
57b0: 20 22 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 " coalesc
57c0: 65 28 65 76 65 6e 74 2e 65 63 6f 6d 6d 65 6e 74 e(event.ecomment
57d0: 2c 65 76 65 6e 74 2e 63 6f 6d 6d 65 6e 74 29 2c ,event.comment),
57e0: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 63 6f ". " co
57f0: 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 75 73 alesce(event.eus
5800: 65 72 2c 65 76 65 6e 74 2e 75 73 65 72 29 2c 22 er,event.user),"
5810: 0a 20 20 20 20 22 20 20 20 20 20 20 20 62 2e 75 . " b.u
5820: 75 69 64 22 0a 20 20 20 20 22 20 20 46 52 4f 4d uid". " FROM
5830: 20 6d 6c 69 6e 6b 2c 20 66 69 6c 65 6e 61 6d 65 mlink, filename
5840: 2c 20 65 76 65 6e 74 2c 20 62 6c 6f 62 20 61 2c , event, blob a,
5850: 20 62 6c 6f 62 20 62 22 0a 20 20 20 20 22 20 57 blob b". " W
5860: 48 45 52 45 20 66 69 6c 65 6e 61 6d 65 2e 66 6e HERE filename.fn
5870: 69 64 3d 6d 6c 69 6e 6b 2e 66 6e 69 64 22 0a 20 id=mlink.fnid".
5880: 20 20 20 22 20 20 20 41 4e 44 20 65 76 65 6e 74 " AND event
5890: 2e 6f 62 6a 69 64 3d 6d 6c 69 6e 6b 2e 6d 69 64 .objid=mlink.mid
58a0: 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 61 2e ". " AND a.
58b0: 72 69 64 3d 6d 6c 69 6e 6b 2e 66 69 64 22 0a 20 rid=mlink.fid".
58c0: 20 20 20 22 20 20 20 41 4e 44 20 62 2e 72 69 64 " AND b.rid
58d0: 3d 6d 6c 69 6e 6b 2e 6d 69 64 22 0a 20 20 20 20 =mlink.mid".
58e0: 22 20 20 20 41 4e 44 20 6d 6c 69 6e 6b 2e 66 69 " AND mlink.fi
58f0: 64 3d 25 64 22 2c 0a 20 20 20 20 72 69 64 0a 20 d=%d",. rid.
5900: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f );. while( db_
5910: 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 step(&q)==SQLITE
5920: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 _ROW ){. cons
5930: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 t char *zName =
5940: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
5950: 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 q, 0);. const
5960: 20 63 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 char *zDate = d
5970: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
5980: 2c 20 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 1);. const
5990: 63 68 61 72 20 2a 7a 46 75 75 69 64 20 3d 20 64 char *zFuuid = d
59a0: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
59b0: 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 2);. const
59c0: 63 68 61 72 20 2a 7a 43 6f 6d 20 3d 20 64 62 5f char *zCom = db_
59d0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
59e0: 33 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 3);. const ch
59f0: 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 ar *zUser = db_c
5a00: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 34 olumn_text(&q, 4
5a10: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
5a20: 72 20 2a 7a 56 65 72 73 20 3d 20 64 62 5f 63 6f r *zVers = db_co
5a30: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 35 29 lumn_text(&q, 5)
5a40: 3b 0a 20 20 20 20 69 66 28 20 63 6e 74 3e 30 20 ;. if( cnt>0
5a50: 29 7b 0a 20 20 20 20 20 20 40 20 41 6c 73 6f 20 ){. @ Also
5a60: 66 69 6c 65 0a 20 20 20 20 7d 65 6c 73 65 7b 0a file. }else{.
5a70: 20 20 20 20 20 20 40 20 46 69 6c 65 0a 20 20 20 @ File.
5a80: 20 7d 0a 20 20 20 20 40 20 3c 61 20 68 72 65 66 }. @ <a href
5a90: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
5aa0: 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a /finfo?name=%T(z
5ab0: 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 6d 65 29 Name)">%h(zName)
5ac0: 3c 2f 61 3e 0a 20 20 20 20 40 20 61 72 74 69 66 </a>. @ artif
5ad0: 61 63 74 20 25 73 28 7a 46 75 75 69 64 29 20 70 act %s(zFuuid) p
5ae0: 61 72 74 20 6f 66 20 63 68 65 63 6b 2d 69 6e 0a art of check-in.
5af0: 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f hyperlink_to
5b00: 5f 75 75 69 64 28 7a 56 65 72 73 29 3b 0a 20 20 _uuid(zVers);.
5b10: 20 20 40 20 2d 20 25 77 28 7a 43 6f 6d 29 20 62 @ - %w(zCom) b
5b20: 79 20 25 68 28 7a 55 73 65 72 29 20 6f 6e 20 25 y %h(zUser) on %
5b30: 73 28 7a 44 61 74 65 29 2e 0a 20 20 20 20 63 6e s(zDate).. cn
5b40: 74 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 44 6f t++;. if( pDo
5b50: 77 6e 6c 6f 61 64 4e 61 6d 65 20 26 26 20 62 6c wnloadName && bl
5b60: 6f 62 5f 73 69 7a 65 28 70 44 6f 77 6e 6c 6f 61 ob_size(pDownloa
5b70: 64 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 dName)==0 ){.
5b80: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 blob_append(p
5b90: 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 2c 20 7a 4e DownloadName, zN
5ba0: 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a ame, -1);. }.
5bb0: 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a }. db_finaliz
5bc0: 65 28 26 71 29 3b 0a 20 20 64 62 5f 70 72 65 70 e(&q);. db_prep
5bd0: 61 72 65 28 26 71 2c 20 0a 20 20 20 20 22 53 45 are(&q, . "SE
5be0: 4c 45 43 54 20 73 75 62 73 74 72 28 74 61 67 6e LECT substr(tagn
5bf0: 61 6d 65 2c 20 36 2c 20 31 30 30 30 30 29 2c 20 ame, 6, 10000),
5c00: 64 61 74 65 74 69 6d 65 28 65 76 65 6e 74 2e 6d datetime(event.m
5c10: 74 69 6d 65 29 2c 22 0a 20 20 20 20 22 20 20 20 time),". "
5c20: 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65 76 65 coalesce(eve
5c30: 6e 74 2e 65 75 73 65 72 2c 20 65 76 65 6e 74 2e nt.euser, event.
5c40: 75 73 65 72 29 2c 20 75 75 69 64 22 0a 20 20 20 user), uuid".
5c50: 20 22 20 20 46 52 4f 4d 20 74 61 67 78 72 65 66 " FROM tagxref
5c60: 2c 20 74 61 67 2c 20 65 76 65 6e 74 2c 20 62 6c , tag, event, bl
5c70: 6f 62 22 0a 20 20 20 20 22 20 57 48 45 52 45 20 ob". " WHERE
5c80: 74 61 67 78 72 65 66 2e 72 69 64 3d 25 64 22 0a tagxref.rid=%d".
5c90: 20 20 20 20 22 20 20 20 41 4e 44 20 74 61 67 2e " AND tag.
5ca0: 74 61 67 69 64 3d 74 61 67 78 72 65 66 2e 74 61 tagid=tagxref.ta
5cb0: 67 69 64 22 20 0a 20 20 20 20 22 20 20 20 41 4e gid" . " AN
5cc0: 44 20 74 61 67 2e 74 61 67 6e 61 6d 65 20 4c 49 D tag.tagname LI
5cd0: 4b 45 20 27 77 69 6b 69 2d 25 25 27 22 0a 20 20 KE 'wiki-%%'".
5ce0: 20 20 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e " AND event.
5cf0: 6f 62 6a 69 64 3d 74 61 67 78 72 65 66 2e 72 69 objid=tagxref.ri
5d00: 64 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 62 d". " AND b
5d10: 6c 6f 62 2e 72 69 64 3d 74 61 67 78 72 65 66 2e lob.rid=tagxref.
5d20: 72 69 64 22 2c 0a 20 20 20 20 72 69 64 0a 20 20 rid",. rid.
5d30: 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 );. while( db_s
5d40: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
5d50: 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 ROW ){. const
5d60: 20 63 68 61 72 20 2a 7a 50 61 67 65 6e 61 6d 65 char *zPagename
5d70: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
5d80: 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f t(&q, 0);. co
5d90: 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 nst char *zDate
5da0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
5db0: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 6f 6e (&q, 1);. con
5dc0: 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 3d st char *zUser =
5dd0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
5de0: 26 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e 73 &q, 2);. cons
5df0: 74 20 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 t char *zUuid =
5e00: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
5e10: 71 2c 20 33 29 3b 0a 20 20 20 20 69 66 28 20 63 q, 3);. if( c
5e20: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 40 20 nt>0 ){. @
5e30: 41 6c 73 6f 20 77 69 6b 69 20 70 61 67 65 0a 20 Also wiki page.
5e40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
5e50: 40 20 57 69 6b 69 20 70 61 67 65 0a 20 20 20 20 @ Wiki page.
5e60: 7d 0a 20 20 20 20 40 20 5b 3c 61 20 68 72 65 66 }. @ [<a href
5e70: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
5e80: 2f 77 69 6b 69 3f 6e 61 6d 65 3d 25 74 28 7a 50 /wiki?name=%t(zP
5e90: 61 67 65 6e 61 6d 65 29 22 3e 25 68 28 7a 50 61 agename)">%h(zPa
5ea0: 67 65 6e 61 6d 65 29 3c 2f 61 3e 5d 0a 20 20 20 gename)</a>].
5eb0: 20 40 20 61 72 74 69 66 61 63 74 20 25 73 28 7a @ artifact %s(z
5ec0: 55 75 69 64 29 20 62 79 20 25 68 28 7a 55 73 65 Uuid) by %h(zUse
5ed0: 72 29 20 6f 6e 20 25 73 28 7a 44 61 74 65 29 2e r) on %s(zDate).
5ee0: 0a 20 20 20 20 6e 57 69 6b 69 2b 2b 3b 0a 20 20 . nWiki++;.
5ef0: 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 69 66 28 cnt++;. if(
5f00: 20 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 26 pDownloadName &
5f10: 26 20 62 6c 6f 62 5f 73 69 7a 65 28 70 44 6f 77 & blob_size(pDow
5f20: 6e 6c 6f 61 64 4e 61 6d 65 29 3d 3d 30 20 29 7b nloadName)==0 ){
5f30: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
5f40: 6e 64 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 nd(pDownloadName
5f50: 2c 20 7a 50 61 67 65 6e 61 6d 65 2c 20 2d 31 29 , zPagename, -1)
5f60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 ;. }. }. db
5f70: 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 _finalize(&q);.
5f80: 20 69 66 28 20 6e 57 69 6b 69 3d 3d 30 20 29 7b if( nWiki==0 ){
5f90: 0a 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 . db_prepare(
5fa0: 26 71 2c 0a 20 20 20 20 20 20 22 53 45 4c 45 43 &q,. "SELEC
5fb0: 54 20 64 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 T datetime(mtime
5fc0: 29 2c 20 75 73 65 72 2c 20 63 6f 6d 6d 65 6e 74 ), user, comment
5fd0: 2c 20 75 75 69 64 2c 20 74 79 70 65 22 0a 20 20 , uuid, type".
5fe0: 20 20 20 20 22 20 20 46 52 4f 4d 20 65 76 65 6e " FROM even
5ff0: 74 2c 20 62 6c 6f 62 22 0a 20 20 20 20 20 20 22 t, blob". "
6000: 20 57 48 45 52 45 20 65 76 65 6e 74 2e 6f 62 6a WHERE event.obj
6010: 69 64 3d 25 64 22 0a 20 20 20 20 20 20 22 20 20 id=%d". "
6020: 20 41 4e 44 20 62 6c 6f 62 2e 72 69 64 3d 25 64 AND blob.rid=%d
6030: 22 2c 0a 20 20 20 20 20 20 72 69 64 2c 20 72 69 ",. rid, ri
6040: 64 0a 20 20 20 20 29 3b 0a 20 20 20 20 77 68 69 d. );. whi
6050: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d le( db_step(&q)=
6060: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
6070: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
6080: 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 *zDate = db_colu
6090: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a mn_text(&q, 0);.
60a0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 const char
60b0: 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 63 6f 6c *zUuid = db_col
60c0: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 3b umn_text(&q, 3);
60d0: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 . const cha
60e0: 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 6f r *zUser = db_co
60f0: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 lumn_text(&q, 1)
6100: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 ;. const ch
6110: 61 72 20 2a 7a 43 6f 6d 20 3d 20 64 62 5f 63 6f ar *zCom = db_co
6120: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 29 lumn_text(&q, 2)
6130: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 ;. const ch
6140: 61 72 20 2a 7a 54 79 70 65 20 3d 20 64 62 5f 63 ar *zType = db_c
6150: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 34 olumn_text(&q, 4
6160: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63 6e 74 );. if( cnt
6170: 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 >0 ){. @
6180: 41 6c 73 6f 0a 20 20 20 20 20 20 7d 0a 20 20 20 Also. }.
6190: 20 20 20 69 66 28 20 7a 54 79 70 65 5b 30 5d 3d if( zType[0]=
61a0: 3d 27 77 27 20 29 7b 0a 20 20 20 20 20 20 20 20 ='w' ){.
61b0: 40 20 57 69 6b 69 20 65 64 69 74 0a 20 20 20 20 @ Wiki edit.
61c0: 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 54 79 70 }else if( zTyp
61d0: 65 5b 30 5d 3d 3d 27 74 27 20 29 7b 0a 20 20 20 e[0]=='t' ){.
61e0: 20 20 20 20 20 40 20 54 69 63 6b 65 74 20 63 68 @ Ticket ch
61f0: 61 6e 67 65 0a 20 20 20 20 20 20 7d 65 6c 73 65 ange. }else
6200: 20 69 66 28 20 7a 54 79 70 65 5b 30 5d 3d 3d 27 if( zType[0]=='
6210: 63 27 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 c' ){. @
6220: 4d 61 6e 69 66 65 73 74 20 6f 66 20 62 61 73 65 Manifest of base
6230: 6c 69 6e 65 0a 20 20 20 20 20 20 7d 65 6c 73 65 line. }else
6240: 7b 0a 20 20 20 20 20 20 20 20 40 20 43 6f 6e 74 {. @ Cont
6250: 72 6f 6c 20 66 69 6c 65 20 72 65 66 65 72 65 6e rol file referen
6260: 63 69 6e 67 0a 20 20 20 20 20 20 7d 0a 20 20 20 cing. }.
6270: 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f hyperlink_to_
6280: 75 75 69 64 28 7a 55 75 69 64 29 3b 0a 20 20 20 uuid(zUuid);.
6290: 20 20 20 40 20 2d 20 25 77 28 7a 43 6f 6d 29 20 @ - %w(zCom)
62a0: 62 79 20 25 68 28 7a 55 73 65 72 29 20 6f 6e 20 by %h(zUser) on
62b0: 25 73 28 7a 44 61 74 65 29 2e 0a 20 20 20 20 20 %s(zDate)..
62c0: 20 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 4e 61 if( pDownloadNa
62d0: 6d 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a 65 28 me && blob_size(
62e0: 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3d 3d pDownloadName)==
62f0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 62 6c 6f 0 ){. blo
6300: 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c 6f b_append(pDownlo
6310: 61 64 4e 61 6d 65 2c 20 7a 55 75 69 64 2c 20 2d adName, zUuid, -
6320: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 1);. }.
6330: 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 cnt++;. }.
6340: 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 db_finalize(&
6350: 71 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 6e q);. }. if( cn
6360: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 72 t==0 ){. char
6370: 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 *zUuid = db_tex
6380: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 t(0, "SELECT uui
6390: 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 d FROM blob WHER
63a0: 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b E rid=%d", rid);
63b0: 0a 20 20 20 20 40 20 43 6f 6e 74 72 6f 6c 20 66 . @ Control f
63c0: 69 6c 65 20 25 73 28 7a 55 75 69 64 29 2e 0a 20 ile %s(zUuid)..
63d0: 20 20 20 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 if( pDownload
63e0: 4e 61 6d 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a Name && blob_siz
63f0: 65 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 e(pDownloadName)
6400: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f ==0 ){. blo
6410: 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c 6f b_append(pDownlo
6420: 61 64 4e 61 6d 65 2c 20 7a 55 75 69 64 2c 20 2d adName, zUuid, -
6430: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 1);. }. }els
6440: 65 20 69 66 28 20 6c 69 6e 6b 54 6f 56 69 65 77 e if( linkToView
6450: 20 29 7b 0a 20 20 20 20 40 20 3c 61 20 68 72 65 ){. @ <a hre
6460: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
6470: 29 2f 61 72 74 69 66 61 63 74 2f 25 64 28 72 69 )/artifact/%d(ri
6480: 64 29 22 3e 5b 76 69 65 77 5d 3c 2f 61 3e 0a 20 d)">[view]</a>.
6490: 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 }.}.../*.** WEB
64a0: 50 41 47 45 3a 20 66 64 69 66 66 0a 2a 2a 0a 2a PAGE: fdiff.**.*
64b0: 2a 20 54 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c * Two arguments,
64c0: 20 76 31 20 61 6e 64 20 76 32 2c 20 61 72 65 20 v1 and v2, are
64d0: 69 6e 74 65 67 65 72 73 2e 20 20 53 68 6f 77 20 integers. Show
64e0: 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 the difference b
64f0: 65 74 77 65 65 6e 0a 2a 2a 20 74 68 65 20 74 77 etween.** the tw
6500: 6f 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 76 6f o records..*/.vo
6510: 69 64 20 64 69 66 66 5f 70 61 67 65 28 76 6f 69 id diff_page(voi
6520: 64 29 7b 0a 20 20 69 6e 74 20 76 31 20 3d 20 6e d){. int v1 = n
6530: 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 76 ame_to_rid(PD("v
6540: 31 22 2c 22 30 22 29 29 3b 0a 20 20 69 6e 74 20 1","0"));. int
6550: 76 32 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 v2 = name_to_rid
6560: 28 50 44 28 22 76 32 22 2c 22 30 22 29 29 3b 0a (PD("v2","0"));.
6570: 20 20 42 6c 6f 62 20 63 31 2c 20 63 32 2c 20 64 Blob c1, c2, d
6580: 69 66 66 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 iff;.. login_ch
6590: 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 eck_credentials(
65a0: 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 65 );. if( !g.okRe
65b0: 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 ad ){ login_need
65c0: 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a ed(); return; }.
65d0: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 style_header("
65e0: 44 69 66 66 22 29 3b 0a 20 20 40 20 3c 68 32 3e Diff");. @ <h2>
65f0: 44 69 66 66 65 72 65 6e 63 65 73 20 46 72 6f 6d Differences From
6600: 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 6c 6f 63 :</h2>. @ <bloc
6610: 6b 71 75 6f 74 65 3e 0a 20 20 6f 62 6a 65 63 74 kquote>. object
6620: 5f 64 65 73 63 72 69 70 74 69 6f 6e 28 76 31 2c _description(v1,
6630: 20 31 2c 20 30 29 3b 0a 20 20 40 20 3c 2f 62 6c 1, 0);. @ </bl
6640: 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 20 3c 68 ockquote>. @ <h
6650: 32 3e 54 6f 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c 2>To:</h2>. @ <
6660: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 6f 62 blockquote>. ob
6670: 6a 65 63 74 5f 64 65 73 63 72 69 70 74 69 6f 6e ject_description
6680: 28 76 32 2c 20 31 2c 20 30 29 3b 0a 20 20 40 20 (v2, 1, 0);. @
6690: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 </blockquote>.
66a0: 40 20 3c 68 72 3e 0a 20 20 40 20 3c 62 6c 6f 63 @ <hr>. @ <bloc
66b0: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 63 kquote><pre>. c
66c0: 6f 6e 74 65 6e 74 5f 67 65 74 28 76 31 2c 20 26 ontent_get(v1, &
66d0: 63 31 29 3b 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 c1);. content_g
66e0: 65 74 28 76 32 2c 20 26 63 32 29 3b 0a 20 20 62 et(v2, &c2);. b
66f0: 6c 6f 62 5f 7a 65 72 6f 28 26 64 69 66 66 29 3b lob_zero(&diff);
6700: 0a 20 20 74 65 78 74 5f 64 69 66 66 28 26 63 31 . text_diff(&c1
6710: 2c 20 26 63 32 2c 20 26 64 69 66 66 2c 20 34 29 , &c2, &diff, 4)
6720: 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 ;. blob_reset(&
6730: 63 31 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 c1);. blob_rese
6740: 74 28 26 63 32 29 3b 0a 20 20 40 20 25 68 28 62 t(&c2);. @ %h(b
6750: 6c 6f 62 5f 73 74 72 28 26 64 69 66 66 29 29 0a lob_str(&diff)).
6760: 20 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 @ </pre></bloc
6770: 6b 71 75 6f 74 65 3e 0a 20 20 62 6c 6f 62 5f 72 kquote>. blob_r
6780: 65 73 65 74 28 26 64 69 66 66 29 3b 0a 20 20 73 eset(&diff);. s
6790: 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d tyle_footer();.}
67a0: 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a ../*.** WEBPAGE:
67b0: 20 72 61 77 0a 2a 2a 20 55 52 4c 3a 20 2f 72 61 raw.** URL: /ra
67c0: 77 3f 6e 61 6d 65 3d 41 52 54 49 46 41 43 54 49 w?name=ARTIFACTI
67d0: 44 26 6d 3d 54 59 50 45 0a 2a 2a 20 0a 2a 2a 20 D&m=TYPE.** .**
67e0: 52 65 74 75 72 6e 20 74 68 65 20 75 6e 69 6e 74 Return the unint
67f0: 65 72 70 72 65 74 65 64 20 63 6f 6e 74 65 6e 74 erpreted content
6800: 20 6f 66 20 61 6e 20 61 72 74 69 66 61 63 74 2e of an artifact.
6810: 20 20 55 73 65 64 20 70 72 69 6d 61 72 69 6c 79 Used primarily
6820: 0a 2a 2a 20 74 6f 20 76 69 65 77 20 61 72 74 69 .** to view arti
6830: 66 61 63 74 73 20 74 68 61 74 20 61 72 65 20 69 facts that are i
6840: 6d 61 67 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 72 mages..*/.void r
6850: 61 77 61 72 74 69 66 61 63 74 5f 70 61 67 65 28 awartifact_page(
6860: 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 void){. int rid
6870: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a ;. const char *
6880: 7a 4d 69 6d 65 3b 0a 20 20 42 6c 6f 62 20 63 6f zMime;. Blob co
6890: 6e 74 65 6e 74 3b 0a 0a 20 20 72 69 64 20 3d 20 ntent;.. rid =
68a0: 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 name_to_rid(PD("
68b0: 6e 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 20 7a name","0"));. z
68c0: 4d 69 6d 65 20 3d 20 50 44 28 22 6d 22 2c 22 61 Mime = PD("m","a
68d0: 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 66 6f 73 pplication/x-fos
68e0: 73 69 6c 2d 61 72 74 69 66 61 63 74 22 29 3b 0a sil-artifact");.
68f0: 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 login_check_cr
6900: 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 edentials();. i
6910: 66 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b 20 f( !g.okRead ){
6920: 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 login_needed();
6930: 72 65 74 75 72 6e 3b 20 7d 0a 20 20 69 66 28 20 return; }. if(
6940: 72 69 64 3d 3d 30 20 29 7b 20 63 67 69 5f 72 65 rid==0 ){ cgi_re
6950: 64 69 72 65 63 74 28 22 2f 68 6f 6d 65 22 29 3b direct("/home");
6960: 20 7d 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 }. content_get
6970: 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 29 3b (rid, &content);
6980: 0a 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65 . cgi_set_conte
6990: 6e 74 5f 74 79 70 65 28 7a 4d 69 6d 65 29 3b 0a nt_type(zMime);.
69a0: 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65 6e cgi_set_conten
69b0: 74 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 7d 0a 0a t(&content);.}..
69c0: 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 61 20 68 /*.** Render a h
69d0: 65 78 20 64 75 6d 70 20 6f 66 20 61 20 66 69 6c ex dump of a fil
69e0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 e..*/.static voi
69f0: 64 20 68 65 78 64 75 6d 70 28 42 6c 6f 62 20 2a d hexdump(Blob *
6a00: 70 42 6c 6f 62 29 7b 0a 20 20 63 6f 6e 73 74 20 pBlob){. const
6a10: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 78 unsigned char *x
6a20: 3b 0a 20 20 69 6e 74 20 6e 2c 20 69 2c 20 6a 2c ;. int n, i, j,
6a30: 20 6b 3b 0a 20 20 63 68 61 72 20 7a 4c 69 6e 65 k;. char zLine
6a40: 5b 31 30 30 5d 3b 0a 20 20 73 74 61 74 69 63 20 [100];. static
6a50: 63 6f 6e 73 74 20 63 68 61 72 20 7a 48 65 78 5b const char zHex[
6a60: 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 39 61 ] = "0123456789a
6a70: 62 63 64 65 66 22 3b 0a 0a 20 20 78 20 3d 20 28 bcdef";.. x = (
6a80: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 const unsigned c
6a90: 68 61 72 2a 29 62 6c 6f 62 5f 62 75 66 66 65 72 har*)blob_buffer
6aa0: 28 70 42 6c 6f 62 29 3b 0a 20 20 6e 20 3d 20 62 (pBlob);. n = b
6ab0: 6c 6f 62 5f 73 69 7a 65 28 70 42 6c 6f 62 29 3b lob_size(pBlob);
6ac0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b . for(i=0; i<n;
6ad0: 20 69 2b 3d 31 36 29 7b 0a 20 20 20 20 6a 20 3d i+=16){. j =
6ae0: 20 30 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 30 5d 0;. zLine[0]
6af0: 20 3d 20 7a 48 65 78 5b 28 69 3e 3e 32 34 29 26 = zHex[(i>>24)&
6b00: 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 0xf];. zLine[
6b10: 31 5d 20 3d 20 7a 48 65 78 5b 28 69 3e 3e 31 36 1] = zHex[(i>>16
6b20: 29 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e )&0xf];. zLin
6b30: 65 5b 32 5d 20 3d 20 7a 48 65 78 5b 28 69 3e 3e e[2] = zHex[(i>>
6b40: 38 29 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 8)&0xf];. zLi
6b50: 6e 65 5b 33 5d 20 3d 20 7a 48 65 78 5b 69 26 30 ne[3] = zHex[i&0
6b60: 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 34 xf];. zLine[4
6b70: 5d 20 3d 20 27 3a 27 3b 0a 20 20 20 20 73 70 72 ] = ':';. spr
6b80: 69 6e 74 66 28 7a 4c 69 6e 65 2c 20 22 25 30 34 intf(zLine, "%04
6b90: 78 3a 20 22 2c 20 69 29 3b 0a 20 20 20 20 66 6f x: ", i);. fo
6ba0: 72 28 6a 3d 30 3b 20 6a 3c 31 36 3b 20 6a 2b 2b r(j=0; j<16; j++
6bb0: 29 7b 0a 20 20 20 20 20 20 6b 20 3d 20 35 2b 6a ){. k = 5+j
6bc0: 2a 33 3b 0a 20 20 20 20 20 20 7a 4c 69 6e 65 5b *3;. zLine[
6bd0: 6b 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 k] = ' ';.
6be0: 69 66 28 20 69 2b 6a 3c 6e 20 29 7b 0a 20 20 20 if( i+j<n ){.
6bf0: 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 unsigned ch
6c00: 61 72 20 63 20 3d 20 78 5b 69 2b 6a 5d 3b 0a 20 ar c = x[i+j];.
6c10: 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 2b 31 zLine[k+1
6c20: 5d 20 3d 20 7a 48 65 78 5b 63 3e 3e 34 5d 3b 0a ] = zHex[c>>4];.
6c30: 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 2b zLine[k+
6c40: 32 5d 20 3d 20 7a 48 65 78 5b 63 26 30 78 66 5d 2] = zHex[c&0xf]
6c50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 ;. }else{.
6c60: 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 2b 31 zLine[k+1
6c70: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 ] = ' ';.
6c80: 20 7a 4c 69 6e 65 5b 6b 2b 32 5d 20 3d 20 27 20 zLine[k+2] = '
6c90: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d ';. }. }
6ca0: 0a 20 20 20 20 7a 4c 69 6e 65 5b 35 33 5d 20 3d . zLine[53] =
6cb0: 20 27 20 27 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b ' ';. zLine[
6cc0: 35 34 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 66 54] = ' ';. f
6cd0: 6f 72 28 6a 3d 30 3b 20 6a 3c 31 36 3b 20 6a 2b or(j=0; j<16; j+
6ce0: 2b 29 7b 0a 20 20 20 20 20 20 6b 20 3d 20 6a 2b +){. k = j+
6cf0: 35 35 3b 0a 20 20 20 20 20 20 69 66 28 20 69 2b 55;. if( i+
6d00: 6a 3c 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 75 j<n ){. u
6d10: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 20 3d nsigned char c =
6d20: 20 78 5b 69 2b 6a 5d 3b 0a 20 20 20 20 20 20 20 x[i+j];.
6d30: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 if( c>=0x20 &&
6d40: 63 3c 3d 30 78 37 65 20 29 7b 0a 20 20 20 20 20 c<=0x7e ){.
6d50: 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 3d 20 zLine[k] =
6d60: 63 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 c;. }else
6d70: 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 4c 69 6e {. zLin
6d80: 65 5b 6b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 e[k] = '.';.
6d90: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 }. }els
6da0: 65 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 e{. zLine
6db0: 5b 6b 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d [k] = 0;. }
6dc0: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 4c 69 6e 65 . }. zLine
6dd0: 5b 37 31 5d 20 3d 20 30 3b 0a 20 20 20 20 40 20 [71] = 0;. @
6de0: 25 68 28 7a 4c 69 6e 65 29 0a 20 20 7d 0a 7d 0a %h(zLine). }.}.
6df0: 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 ./*.** WEBPAGE:
6e00: 68 65 78 64 75 6d 70 0a 2a 2a 20 55 52 4c 3a 20 hexdump.** URL:
6e10: 2f 68 65 78 64 75 6d 70 3f 6e 61 6d 65 3d 41 52 /hexdump?name=AR
6e20: 54 49 46 41 43 54 49 44 0a 2a 2a 20 0a 2a 2a 20 TIFACTID.** .**
6e30: 53 68 6f 77 20 74 68 65 20 63 6f 6d 70 6c 65 74 Show the complet
6e40: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 e content of a f
6e50: 69 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 ile identified b
6e60: 79 20 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 20 y ARTIFACTID.**
6e70: 61 73 20 70 72 65 66 6f 72 6d 61 74 74 65 64 20 as preformatted
6e80: 74 65 78 74 2e 0a 2a 2f 0a 76 6f 69 64 20 68 65 text..*/.void he
6e90: 78 64 75 6d 70 5f 70 61 67 65 28 76 6f 69 64 29 xdump_page(void)
6ea0: 7b 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 42 {. int rid;. B
6eb0: 6c 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 42 lob content;. B
6ec0: 6c 6f 62 20 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 lob downloadName
6ed0: 3b 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f ;.. rid = name_
6ee0: 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 to_rid(PD("name"
6ef0: 2c 22 30 22 29 29 3b 0a 20 20 6c 6f 67 69 6e 5f ,"0"));. login_
6f00: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c check_credential
6f10: 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b s();. if( !g.ok
6f20: 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 Read ){ login_ne
6f30: 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 eded(); return;
6f40: 7d 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 }. if( rid==0 )
6f50: 7b 20 63 67 69 5f 72 65 64 69 72 65 63 74 28 22 { cgi_redirect("
6f60: 2f 68 6f 6d 65 22 29 3b 20 7d 0a 20 20 69 66 28 /home"); }. if(
6f70: 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 20 g.okAdmin ){.
6f80: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 const char *zU
6f90: 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 22 22 uid = db_text(""
6fa0: 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 , "SELECT uuid F
6fb0: 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 ROM blob WHERE r
6fc0: 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 id=%d", rid);.
6fd0: 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 if( db_exists(
6fe0: 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 73 "SELECT 1 FROM s
6ff0: 68 75 6e 20 57 48 45 52 45 20 75 75 69 64 3d 27 hun WHERE uuid='
7000: 25 73 27 22 2c 20 7a 55 75 69 64 29 20 29 7b 0a %s'", zUuid) ){.
7010: 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d style_subm
7020: 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 55 6e 73 enu_element("Uns
7030: 68 75 6e 22 2c 22 55 6e 73 68 75 6e 22 2c 20 22 hun","Unshun", "
7040: 25 73 2f 73 68 75 6e 3f 75 75 69 64 3d 25 73 26 %s/shun?uuid=%s&
7050: 73 75 62 3d 31 22 2c 0a 20 20 20 20 20 20 20 20 sub=1",.
7060: 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 g.zTop, zUui
7070: 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 d);. }else{.
7080: 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 style_subme
7090: 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 53 68 75 6e nu_element("Shun
70a0: 22 2c 22 53 68 75 6e 22 2c 20 22 25 73 2f 73 68 ","Shun", "%s/sh
70b0: 75 6e 3f 73 68 75 6e 3d 25 73 23 61 64 64 73 68 un?shun=%s#addsh
70c0: 75 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 un",.
70d0: 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 3b g.zTop, zUuid);
70e0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 74 79 . }. }. sty
70f0: 6c 65 5f 68 65 61 64 65 72 28 22 48 65 78 20 41 le_header("Hex A
7100: 72 74 69 66 61 63 74 20 43 6f 6e 74 65 6e 74 22 rtifact Content"
7110: 29 3b 0a 20 20 40 20 3c 68 32 3e 48 65 78 61 64 );. @ <h2>Hexad
7120: 65 63 69 6d 61 6c 20 43 6f 6e 74 65 6e 74 20 4f ecimal Content O
7130: 66 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 6c 6f f:</h2>. @ <blo
7140: 63 6b 71 75 6f 74 65 3e 0a 20 20 62 6c 6f 62 5f ckquote>. blob_
7150: 7a 65 72 6f 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 zero(&downloadNa
7160: 6d 65 29 3b 0a 20 20 6f 62 6a 65 63 74 5f 64 65 me);. object_de
7170: 73 63 72 69 70 74 69 6f 6e 28 72 69 64 2c 20 30 scription(rid, 0
7180: 2c 20 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 , &downloadName)
7190: 3b 0a 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e ;. style_submen
71a0: 75 5f 65 6c 65 6d 65 6e 74 28 22 44 6f 77 6e 6c u_element("Downl
71b0: 6f 61 64 22 2c 20 22 44 6f 77 6e 6c 6f 61 64 22 oad", "Download"
71c0: 2c 20 0a 20 20 20 20 20 20 20 20 22 25 73 2f 72 , . "%s/r
71d0: 61 77 2f 25 54 3f 6e 61 6d 65 3d 25 64 22 2c 20 aw/%T?name=%d",
71e0: 67 2e 7a 42 61 73 65 55 52 4c 2c 20 62 6c 6f 62 g.zBaseURL, blob
71f0: 5f 73 74 72 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 _str(&downloadNa
7200: 6d 65 29 2c 20 72 69 64 29 3b 0a 20 20 40 20 3c me), rid);. @ <
7210: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 /blockquote>. @
7220: 20 3c 68 72 3e 0a 20 20 63 6f 6e 74 65 6e 74 5f <hr>. content_
7230: 67 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e get(rid, &conten
7240: 74 29 3b 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 t);. @ <blockqu
7250: 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 68 65 78 64 ote><pre>. hexd
7260: 75 6d 70 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 ump(&content);.
7270: 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b @ </pre></block
7280: 71 75 6f 74 65 3e 0a 20 20 73 74 79 6c 65 5f 66 quote>. style_f
7290: 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a ooter();.}../*.*
72a0: 2a 20 57 45 42 50 41 47 45 3a 20 61 72 74 69 66 * WEBPAGE: artif
72b0: 61 63 74 0a 2a 2a 20 55 52 4c 3a 20 2f 61 72 74 act.** URL: /art
72c0: 69 66 61 63 74 3f 6e 61 6d 65 3d 41 52 54 49 46 ifact?name=ARTIF
72d0: 41 43 54 49 44 0a 2a 2a 20 0a 2a 2a 20 53 68 6f ACTID.** .** Sho
72e0: 77 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 w the complete c
72f0: 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 6c 65 ontent of a file
7300: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 41 identified by A
7310: 52 54 49 46 41 43 54 49 44 0a 2a 2a 20 61 73 20 RTIFACTID.** as
7320: 70 72 65 66 6f 72 6d 61 74 74 65 64 20 74 65 78 preformatted tex
7330: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 61 72 74 69 66 t..*/.void artif
7340: 61 63 74 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a act_page(void){.
7350: 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 42 6c 6f int rid;. Blo
7360: 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 63 6f 6e b content;. con
7370: 73 74 20 63 68 61 72 20 2a 7a 4d 69 6d 65 3b 0a st char *zMime;.
7380: 20 20 42 6c 6f 62 20 64 6f 77 6e 6c 6f 61 64 4e Blob downloadN
7390: 61 6d 65 3b 0a 20 20 69 6e 74 20 72 65 6e 64 65 ame;. int rende
73a0: 72 41 73 57 69 6b 69 20 3d 20 30 3b 0a 20 20 69 rAsWiki = 0;. i
73b0: 6e 74 20 72 65 6e 64 65 72 41 73 48 74 6d 6c 20 nt renderAsHtml
73c0: 3d 20 30 3b 0a 0a 20 20 72 69 64 20 3d 20 6e 61 = 0;.. rid = na
73d0: 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 me_to_rid(PD("na
73e0: 6d 65 22 2c 22 30 22 29 29 3b 0a 20 20 6c 6f 67 me","0"));. log
73f0: 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 in_check_credent
7400: 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 ials();. if( !g
7410: 2e 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e .okRead ){ login
7420: 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 _needed(); retur
7430: 6e 3b 20 7d 0a 20 20 69 66 28 20 72 69 64 3d 3d n; }. if( rid==
7440: 30 20 29 7b 20 63 67 69 5f 72 65 64 69 72 65 63 0 ){ cgi_redirec
7450: 74 28 22 2f 68 6f 6d 65 22 29 3b 20 7d 0a 20 20 t("/home"); }.
7460: 69 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b if( g.okAdmin ){
7470: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
7480: 2a 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 *zUuid = db_text
7490: 28 22 22 2c 20 22 53 45 4c 45 43 54 20 75 75 69 ("", "SELECT uui
74a0: 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 d FROM blob WHER
74b0: 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b E rid=%d", rid);
74c0: 0a 20 20 20 20 69 66 28 20 64 62 5f 65 78 69 73 . if( db_exis
74d0: 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f ts("SELECT 1 FRO
74e0: 4d 20 73 68 75 6e 20 57 48 45 52 45 20 75 75 69 M shun WHERE uui
74f0: 64 3d 27 25 73 27 22 2c 20 7a 55 75 69 64 29 20 d='%s'", zUuid)
7500: 29 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 ){. style_s
7510: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
7520: 55 6e 73 68 75 6e 22 2c 22 55 6e 73 68 75 6e 22 Unshun","Unshun"
7530: 2c 20 22 25 73 2f 73 68 75 6e 3f 75 75 69 64 3d , "%s/shun?uuid=
7540: 25 73 26 73 75 62 3d 31 22 2c 0a 20 20 20 20 20 %s&sub=1",.
7550: 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a g.zTop, z
7560: 55 75 69 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 Uuid);. }else
7570: 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 {. style_su
7580: 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 53 bmenu_element("S
7590: 68 75 6e 22 2c 22 53 68 75 6e 22 2c 20 22 25 73 hun","Shun", "%s
75a0: 2f 73 68 75 6e 3f 73 68 75 6e 3d 25 73 23 61 64 /shun?shun=%s#ad
75b0: 64 73 68 75 6e 22 2c 0a 20 20 20 20 20 20 20 20 dshun",.
75c0: 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 g.zTop, zUui
75d0: 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 d);. }. }.
75e0: 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 41 72 style_header("Ar
75f0: 74 69 66 61 63 74 20 43 6f 6e 74 65 6e 74 22 29 tifact Content")
7600: 3b 0a 20 20 40 20 3c 68 32 3e 43 6f 6e 74 65 6e ;. @ <h2>Conten
7610: 74 20 4f 66 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c t Of:</h2>. @ <
7620: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 62 6c blockquote>. bl
7630: 6f 62 5f 7a 65 72 6f 28 26 64 6f 77 6e 6c 6f 61 ob_zero(&downloa
7640: 64 4e 61 6d 65 29 3b 0a 20 20 6f 62 6a 65 63 74 dName);. object
7650: 5f 64 65 73 63 72 69 70 74 69 6f 6e 28 72 69 64 _description(rid
7660: 2c 20 30 2c 20 26 64 6f 77 6e 6c 6f 61 64 4e 61 , 0, &downloadNa
7670: 6d 65 29 3b 0a 20 20 73 74 79 6c 65 5f 73 75 62 me);. style_sub
7680: 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 44 6f menu_element("Do
7690: 77 6e 6c 6f 61 64 22 2c 20 22 44 6f 77 6e 6c 6f wnload", "Downlo
76a0: 61 64 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 ad", .
76b0: 22 25 73 2f 72 61 77 2f 25 54 3f 6e 61 6d 65 3d "%s/raw/%T?name=
76c0: 25 64 22 2c 20 67 2e 7a 54 6f 70 2c 20 62 6c 6f %d", g.zTop, blo
76d0: 62 5f 73 74 72 28 26 64 6f 77 6e 6c 6f 61 64 4e b_str(&downloadN
76e0: 61 6d 65 29 2c 20 72 69 64 29 3b 0a 20 20 7a 4d ame), rid);. zM
76f0: 69 6d 65 20 3d 20 6d 69 6d 65 74 79 70 65 5f 66 ime = mimetype_f
7700: 72 6f 6d 5f 6e 61 6d 65 28 62 6c 6f 62 5f 73 74 rom_name(blob_st
7710: 72 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 r(&downloadName)
7720: 29 3b 0a 20 20 69 66 28 20 7a 4d 69 6d 65 20 29 );. if( zMime )
7730: 7b 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 {. if( strcmp
7740: 28 7a 4d 69 6d 65 2c 20 22 74 65 78 74 2f 68 74 (zMime, "text/ht
7750: 6d 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 ml")==0 ){.
7760: 20 69 66 28 20 50 28 22 74 78 74 22 29 20 29 7b if( P("txt") ){
7770: 0a 20 20 20 20 20 20 20 20 73 74 79 6c 65 5f 73 . style_s
7780: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
7790: 48 74 6d 6c 22 2c 20 22 48 74 6d 6c 22 2c 0a 20 Html", "Html",.
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 "%s
77c0: 2f 61 72 74 69 66 61 63 74 3f 6e 61 6d 65 3d 25 /artifact?name=%
77d0: 64 22 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 d", g.zTop, rid)
77e0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 ;. }else{.
77f0: 20 20 20 20 20 20 20 72 65 6e 64 65 72 41 73 48 renderAsH
7800: 74 6d 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 tml = 1;.
7810: 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 style_submenu_e
7820: 6c 65 6d 65 6e 74 28 22 54 65 78 74 22 2c 20 22 lement("Text", "
7830: 54 65 78 74 22 2c 0a 20 20 20 20 20 20 20 20 20 Text",.
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7850: 20 20 20 20 20 22 25 73 2f 61 72 74 69 66 61 63 "%s/artifac
7860: 74 3f 6e 61 6d 65 3d 25 64 26 74 78 74 3d 31 22 t?name=%d&txt=1"
7870: 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a , g.zTop, rid);.
7880: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 }. }els
7890: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4d 69 e if( strcmp(zMi
78a0: 6d 65 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e me, "application
78b0: 2f 78 2d 66 6f 73 73 69 6c 2d 77 69 6b 69 22 29 /x-fossil-wiki")
78c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 ==0 ){. if(
78d0: 20 50 28 22 74 78 74 22 29 20 29 7b 0a 20 20 20 P("txt") ){.
78e0: 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 style_subme
78f0: 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 57 69 6b 69 nu_element("Wiki
7900: 22 2c 20 22 57 69 6b 69 22 2c 0a 20 20 20 20 20 ", "Wiki",.
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7920: 20 20 20 20 20 20 20 20 20 22 25 73 2f 61 72 74 "%s/art
7930: 69 66 61 63 74 3f 6e 61 6d 65 3d 25 64 22 2c 20 ifact?name=%d",
7940: 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 g.zTop, rid);.
7950: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
7960: 20 20 20 72 65 6e 64 65 72 41 73 57 69 6b 69 20 renderAsWiki
7970: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 74 79 = 1;. sty
7980: 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 le_submenu_eleme
7990: 6e 74 28 22 54 65 78 74 22 2c 20 22 54 65 78 74 nt("Text", "Text
79a0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ",.
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
79c0: 20 22 25 73 2f 61 72 74 69 66 61 63 74 3f 6e 61 "%s/artifact?na
79d0: 6d 65 3d 25 64 26 74 78 74 3d 31 22 2c 20 67 2e me=%d&txt=1", g.
79e0: 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 20 zTop, rid);.
79f0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 }. }. }.
7a00: 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a @ </blockquote>.
7a10: 20 20 40 20 3c 68 72 3e 0a 20 20 63 6f 6e 74 65 @ <hr>. conte
7a20: 6e 74 5f 67 65 74 28 72 69 64 2c 20 26 63 6f 6e nt_get(rid, &con
7a30: 74 65 6e 74 29 3b 0a 20 20 69 66 28 20 72 65 6e tent);. if( ren
7a40: 64 65 72 41 73 57 69 6b 69 20 29 7b 0a 20 20 20 derAsWiki ){.
7a50: 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 28 26 63 wiki_convert(&c
7a60: 6f 6e 74 65 6e 74 2c 20 30 2c 20 30 29 3b 0a 20 ontent, 0, 0);.
7a70: 20 7d 65 6c 73 65 20 69 66 28 20 72 65 6e 64 65 }else if( rende
7a80: 72 41 73 48 74 6d 6c 20 29 7b 0a 20 20 20 20 40 rAsHtml ){. @
7a90: 20 3c 64 69 76 3e 0a 20 20 20 20 63 67 69 5f 61 <div>. cgi_a
7aa0: 70 70 65 6e 64 5f 63 6f 6e 74 65 6e 74 28 62 6c ppend_content(bl
7ab0: 6f 62 5f 62 75 66 66 65 72 28 26 63 6f 6e 74 65 ob_buffer(&conte
7ac0: 6e 74 29 2c 20 62 6c 6f 62 5f 73 69 7a 65 28 26 nt), blob_size(&
7ad0: 63 6f 6e 74 65 6e 74 29 29 3b 0a 20 20 20 20 40 content));. @
7ae0: 20 3c 2f 64 69 76 3e 0a 20 20 7d 65 6c 73 65 7b </div>. }else{
7af0: 0a 20 20 20 20 7a 4d 69 6d 65 20 3d 20 6d 69 6d . zMime = mim
7b00: 65 74 79 70 65 5f 66 72 6f 6d 5f 63 6f 6e 74 65 etype_from_conte
7b10: 6e 74 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 nt(&content);.
7b20: 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e @ <blockquote>
7b30: 0a 20 20 20 20 69 66 28 20 7a 4d 69 6d 65 3d 3d . if( zMime==
7b40: 30 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 70 72 0 ){. @ <pr
7b50: 65 3e 0a 20 20 20 20 20 20 40 20 25 68 28 62 6c e>. @ %h(bl
7b60: 6f 62 5f 73 74 72 28 26 63 6f 6e 74 65 6e 74 29 ob_str(&content)
7b70: 29 0a 20 20 20 20 20 20 40 20 3c 2f 70 72 65 3e ). @ </pre>
7b80: 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 . style_sub
7b90: 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 48 65 menu_element("He
7ba0: 78 22 2c 22 48 65 78 22 2c 20 22 25 73 2f 68 65 x","Hex", "%s/he
7bb0: 78 64 75 6d 70 3f 6e 61 6d 65 3d 25 64 22 2c 20 xdump?name=%d",
7bc0: 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 g.zTop, rid);.
7bd0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 6e }else if( strn
7be0: 63 6d 70 28 7a 4d 69 6d 65 2c 20 22 69 6d 61 67 cmp(zMime, "imag
7bf0: 65 2f 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 e/", 6)==0 ){.
7c00: 20 20 20 20 40 20 3c 69 6d 67 20 73 72 63 3d 22 @ <img src="
7c10: 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 72 %s(g.zBaseURL)/r
7c20: 61 77 3f 6e 61 6d 65 3d 25 64 28 72 69 64 29 26 aw?name=%d(rid)&
7c30: 6d 3d 25 73 28 7a 4d 69 6d 65 29 22 3e 3c 2f 69 m=%s(zMime)"></i
7c40: 6d 67 3e 0a 20 20 20 20 20 20 73 74 79 6c 65 5f mg>. style_
7c50: 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 submenu_element(
7c60: 22 48 65 78 22 2c 22 48 65 78 22 2c 20 22 25 73 "Hex","Hex", "%s
7c70: 2f 68 65 78 64 75 6d 70 3f 6e 61 6d 65 3d 25 64 /hexdump?name=%d
7c80: 22 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b ", g.zTop, rid);
7c90: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
7ca0: 20 20 40 20 3c 70 72 65 3e 0a 20 20 20 20 20 20 @ <pre>.
7cb0: 68 65 78 64 75 6d 70 28 26 63 6f 6e 74 65 6e 74 hexdump(&content
7cc0: 29 3b 0a 20 20 20 20 20 20 40 20 3c 2f 70 72 65 );. @ </pre
7cd0: 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 2f >. }. @ </
7ce0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 7d 0a blockquote>. }.
7cf0: 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 style_footer()
7d00: 3b 0a 7d 20 20 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 ;.} ../*.** WEB
7d10: 50 41 47 45 3a 20 74 69 6e 66 6f 0a 2a 2a 20 55 PAGE: tinfo.** U
7d20: 52 4c 3a 20 2f 74 69 6e 66 6f 3f 6e 61 6d 65 3d RL: /tinfo?name=
7d30: 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 0a 2a 2a ARTIFACTID.**.**
7d40: 20 53 68 6f 77 20 74 68 65 20 64 65 74 61 69 6c Show the detail
7d50: 73 20 6f 66 20 61 20 74 69 63 6b 65 74 20 63 68 s of a ticket ch
7d60: 61 6e 67 65 20 63 6f 6e 74 72 6f 6c 20 61 72 74 ange control art
7d70: 69 66 61 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20 74 ifact..*/.void t
7d80: 69 6e 66 6f 5f 70 61 67 65 28 76 6f 69 64 29 7b info_page(void){
7d90: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 42 6c . int rid;. Bl
7da0: 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 63 68 ob content;. ch
7db0: 61 72 20 2a 7a 44 61 74 65 3b 0a 20 20 63 6f 6e ar *zDate;. con
7dc0: 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 3b 0a st char *zUuid;.
7dd0: 20 20 63 68 61 72 20 7a 54 6b 74 4e 61 6d 65 5b char zTktName[
7de0: 32 30 5d 3b 0a 20 20 4d 61 6e 69 66 65 73 74 20 20];. Manifest
7df0: 6d 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 m;.. login_chec
7e00: 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b k_credentials();
7e10: 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 64 54 6b . if( !g.okRdTk
7e20: 74 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 t ){ login_neede
7e30: 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 d(); return; }.
7e40: 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 rid = name_to_r
7e50: 69 64 28 50 44 28 22 6e 61 6d 65 22 2c 22 30 22 id(PD("name","0"
7e60: 29 29 3b 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 ));. if( rid==0
7e70: 20 29 7b 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 ){ fossil_redir
7e80: 65 63 74 5f 68 6f 6d 65 28 29 3b 20 7d 0a 20 20 ect_home(); }.
7e90: 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 zUuid = db_text(
7ea0: 22 22 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 "", "SELECT uuid
7eb0: 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 FROM blob WHERE
7ec0: 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a rid=%d", rid);.
7ed0: 20 20 69 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 if( g.okAdmin
7ee0: 29 7b 0a 20 20 20 20 69 66 28 20 64 62 5f 65 78 ){. if( db_ex
7ef0: 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 ists("SELECT 1 F
7f00: 52 4f 4d 20 73 68 75 6e 20 57 48 45 52 45 20 75 ROM shun WHERE u
7f10: 75 69 64 3d 27 25 73 27 22 2c 20 7a 55 75 69 64 uid='%s'", zUuid
7f20: 29 20 29 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 ) ){. style
7f30: 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 _submenu_element
7f40: 28 22 55 6e 73 68 75 6e 22 2c 22 55 6e 73 68 75 ("Unshun","Unshu
7f50: 6e 22 2c 20 22 25 73 2f 73 68 75 6e 3f 75 75 69 n", "%s/shun?uui
7f60: 64 3d 25 73 26 73 75 62 3d 31 22 2c 0a 20 20 20 d=%s&sub=1",.
7f70: 20 20 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c g.zTop,
7f80: 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 7d 65 6c zUuid);. }el
7f90: 73 65 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f se{. style_
7fa0: 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 submenu_element(
7fb0: 22 53 68 75 6e 22 2c 22 53 68 75 6e 22 2c 20 22 "Shun","Shun", "
7fc0: 25 73 2f 73 68 75 6e 3f 73 68 75 6e 3d 25 73 23 %s/shun?shun=%s#
7fd0: 61 64 64 73 68 75 6e 22 2c 0a 20 20 20 20 20 20 addshun",.
7fe0: 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 g.zTop, zU
7ff0: 75 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a uid);. }. }.
8000: 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 content_get(ri
8010: 64 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 d, &content);.
8020: 69 66 28 20 6d 61 6e 69 66 65 73 74 5f 70 61 72 if( manifest_par
8030: 73 65 28 26 6d 2c 20 26 63 6f 6e 74 65 6e 74 29 se(&m, &content)
8040: 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 ==0 ){. fossi
8050: 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 l_redirect_home(
8060: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6d 2e 74 );. }. if( m.t
8070: 79 70 65 21 3d 43 46 54 59 50 45 5f 54 49 43 4b ype!=CFTYPE_TICK
8080: 45 54 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c ET ){. fossil
8090: 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 _redirect_home()
80a0: 3b 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65 ;. }. style_he
80b0: 61 64 65 72 28 22 54 69 63 6b 65 74 20 43 68 61 ader("Ticket Cha
80c0: 6e 67 65 20 44 65 74 61 69 6c 73 22 29 3b 0a 20 nge Details");.
80d0: 20 7a 44 61 74 65 20 3d 20 64 62 5f 74 65 78 74 zDate = db_text
80e0: 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61 74 65 (0, "SELECT date
80f0: 74 69 6d 65 28 25 2e 31 32 66 29 22 2c 20 6d 2e time(%.12f)", m.
8100: 72 44 61 74 65 29 3b 0a 20 20 6d 65 6d 63 70 79 rDate);. memcpy
8110: 28 7a 54 6b 74 4e 61 6d 65 2c 20 6d 2e 7a 54 69 (zTktName, m.zTi
8120: 63 6b 65 74 55 75 69 64 2c 20 31 30 29 3b 0a 20 cketUuid, 10);.
8130: 20 7a 54 6b 74 4e 61 6d 65 5b 31 30 5d 20 3d 20 zTktName[10] =
8140: 30 3b 0a 20 20 40 20 3c 68 32 3e 43 68 61 6e 67 0;. @ <h2>Chang
8150: 65 73 20 74 6f 20 74 69 63 6b 65 74 20 3c 61 20 es to ticket <a
8160: 68 72 65 66 3d 22 25 73 28 6d 2e 7a 54 69 63 6b href="%s(m.zTick
8170: 65 74 55 75 69 64 29 22 3e 25 73 28 7a 54 6b 74 etUuid)">%s(zTkt
8180: 4e 61 6d 65 29 3c 2f 61 3e 3c 2f 68 32 3e 0a 20 Name)</a></h2>.
8190: 20 40 0a 20 20 40 20 3c 70 3e 42 79 20 25 68 28 @. @ <p>By %h(
81a0: 6d 2e 7a 55 73 65 72 29 20 6f 6e 20 25 73 28 7a m.zUser) on %s(z
81b0: 44 61 74 65 29 2e 20 20 53 65 65 20 61 6c 73 6f Date). See also
81c0: 3a 0a 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 :. @ <a href="%
81d0: 73 28 67 2e 7a 54 6f 70 29 2f 61 72 74 69 66 61 s(g.zTop)/artifa
81e0: 63 74 2f 25 54 28 7a 55 75 69 64 29 22 3e 61 72 ct/%T(zUuid)">ar
81f0: 74 69 66 61 63 74 20 63 6f 6e 74 65 6e 74 3c 2f tifact content</
8200: 61 3e 2c 20 61 6e 64 0a 20 20 40 20 3c 61 20 68 a>, and. @ <a h
8210: 72 65 66 3d 22 25 73 28 67 2e 7a 54 6f 70 29 2f ref="%s(g.zTop)/
8220: 74 6b 74 68 69 73 74 6f 72 79 2f 25 73 28 6d 2e tkthistory/%s(m.
8230: 7a 54 69 63 6b 65 74 55 75 69 64 29 22 3e 74 69 zTicketUuid)">ti
8240: 63 6b 65 74 20 68 69 73 74 6f 72 79 3c 2f 61 3e cket history</a>
8250: 0a 20 20 40 20 3c 2f 70 3e 0a 20 20 40 0a 20 20 . @ </p>. @.
8260: 40 20 3c 6f 6c 3e 0a 20 20 66 72 65 65 28 7a 44 @ <ol>. free(zD
8270: 61 74 65 29 3b 0a 20 20 74 69 63 6b 65 74 5f 6f ate);. ticket_o
8280: 75 74 70 75 74 5f 63 68 61 6e 67 65 5f 61 72 74 utput_change_art
8290: 69 66 61 63 74 28 26 6d 29 3b 0a 20 20 6d 61 6e ifact(&m);. man
82a0: 69 66 65 73 74 5f 63 6c 65 61 72 28 26 6d 29 3b ifest_clear(&m);
82b0: 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 . style_footer(
82c0: 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 );.}.../*.** WEB
82d0: 50 41 47 45 3a 20 69 6e 66 6f 0a 2a 2a 20 55 52 PAGE: info.** UR
82e0: 4c 3a 20 69 6e 66 6f 2f 41 52 54 49 46 41 43 54 L: info/ARTIFACT
82f0: 49 44 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 72 67 ID.**.** The arg
8300: 75 6d 65 6e 74 20 69 73 20 61 20 61 72 74 69 66 ument is a artif
8310: 61 63 74 20 49 44 20 77 68 69 63 68 20 6d 69 67 act ID which mig
8320: 68 74 20 62 65 20 61 20 62 61 73 65 6c 69 6e 65 ht be a baseline
8330: 20 6f 72 20 61 20 66 69 6c 65 20 6f 72 0a 2a 2a or a file or.**
8340: 20 61 20 74 69 63 6b 65 74 20 63 68 61 6e 67 65 a ticket change
8350: 73 20 6f 72 20 61 20 77 69 6b 69 20 65 64 69 74 s or a wiki edit
8360: 6f 72 20 6f 72 20 73 6f 6d 65 74 68 69 6e 67 20 or or something
8370: 65 6c 73 65 2e 20 0a 2a 2a 0a 2a 2a 20 46 69 67 else. .**.** Fig
8380: 75 72 65 20 6f 75 74 20 77 68 61 74 20 74 68 65 ure out what the
8390: 20 61 72 74 69 66 61 63 74 20 49 44 20 69 73 20 artifact ID is
83a0: 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 74 2e 0a and jump to it..
83b0: 2a 2f 0a 76 6f 69 64 20 69 6e 66 6f 5f 70 61 67 */.void info_pag
83c0: 65 28 76 6f 69 64 29 7b 0a 20 20 63 6f 6e 73 74 e(void){. const
83d0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 char *zName;.
83e0: 42 6c 6f 62 20 75 75 69 64 3b 0a 20 20 69 6e 74 Blob uuid;. int
83f0: 20 72 69 64 2c 20 6e 4e 61 6d 65 3b 0a 20 20 0a rid, nName;. .
8400: 20 20 7a 4e 61 6d 65 20 3d 20 50 28 22 6e 61 6d zName = P("nam
8410: 65 22 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 e");. if( zName
8420: 3d 3d 30 20 29 20 66 6f 73 73 69 6c 5f 72 65 64 ==0 ) fossil_red
8430: 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 irect_home();.
8440: 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a nName = strlen(z
8450: 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e 4e 61 Name);. if( nNa
8460: 6d 65 3c 34 20 7c 7c 20 6e 4e 61 6d 65 3e 55 55 me<4 || nName>UU
8470: 49 44 5f 53 49 5a 45 20 7c 7c 20 21 76 61 6c 69 ID_SIZE || !vali
8480: 64 61 74 65 31 36 28 7a 4e 61 6d 65 2c 20 6e 4e date16(zName, nN
8490: 61 6d 65 29 20 29 7b 0a 20 20 20 20 73 77 69 74 ame) ){. swit
84a0: 63 68 28 20 73 79 6d 5f 74 61 67 5f 74 6f 5f 75 ch( sym_tag_to_u
84b0: 75 69 64 28 7a 4e 61 6d 65 2c 20 26 75 75 69 64 uid(zName, &uuid
84c0: 29 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 ) ){. case
84d0: 31 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 1: {. /*
84e0: 67 6f 74 20 6f 6e 65 20 55 55 49 44 2c 20 75 73 got one UUID, us
84f0: 65 20 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 e it */.
8500: 7a 4e 61 6d 65 20 3d 20 62 6c 6f 62 5f 73 74 72 zName = blob_str
8510: 28 26 75 75 69 64 29 3b 0a 20 20 20 20 20 20 20 (&uuid);.
8520: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a break;. }.
8530: 20 20 20 20 20 20 63 61 73 65 20 32 3a 20 7b 0a case 2: {.
8540: 20 20 20 20 20 20 20 20 2f 2a 20 67 6f 20 73 6f /* go so
8550: 6d 65 77 68 65 72 65 20 74 6f 20 73 68 6f 77 20 mewhere to show
8560: 74 68 65 20 6d 75 6c 74 69 70 6c 65 20 55 55 49 the multiple UUI
8570: 44 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 Ds */. re
8580: 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 62 72 turn;. br
8590: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 eak;. }.
85a0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 default: {.
85b0: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 72 65 64 fossil_red
85c0: 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 irect_home();.
85d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
85e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 }. }. }.
85f0: 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 if( db_exists("
8600: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 69 SELECT 1 FROM ti
8610: 63 6b 65 74 20 57 48 45 52 45 20 74 6b 74 5f 75 cket WHERE tkt_u
8620: 75 69 64 20 47 4c 4f 42 20 27 25 73 2a 27 22 2c uid GLOB '%s*'",
8630: 20 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 74 zName) ){. t
8640: 6b 74 76 69 65 77 5f 70 61 67 65 28 29 3b 0a 20 ktview_page();.
8650: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 return;. }.
8660: 20 72 69 64 20 3d 20 64 62 5f 69 6e 74 28 30 2c rid = db_int(0,
8670: 20 22 53 45 4c 45 43 54 20 72 69 64 20 46 52 4f "SELECT rid FRO
8680: 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 75 75 69 M blob WHERE uui
8690: 64 20 47 4c 4f 42 20 27 25 73 2a 27 22 2c 20 7a d GLOB '%s*'", z
86a0: 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 72 69 64 Name);. if( rid
86b0: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 79 6c 65 ==0 ){. style
86c0: 5f 68 65 61 64 65 72 28 22 42 72 6f 6b 65 6e 20 _header("Broken
86d0: 4c 69 6e 6b 22 29 3b 0a 20 20 20 20 40 20 3c 70 Link");. @ <p
86e0: 3e 4e 6f 20 73 75 63 68 20 6f 62 6a 65 63 74 3a >No such object:
86f0: 20 25 68 28 7a 4e 61 6d 65 29 3c 2f 70 3e 0a 20 %h(zName)</p>.
8700: 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 style_footer(
8710: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 );. return;.
8720: 20 7d 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 }. if( db_exis
8730: 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f ts("SELECT 1 FRO
8740: 4d 20 6d 6c 69 6e 6b 20 57 48 45 52 45 20 6d 69 M mlink WHERE mi
8750: 64 3d 25 64 22 2c 20 72 69 64 29 20 29 7b 0a 20 d=%d", rid) ){.
8760: 20 20 20 76 64 69 66 66 5f 70 61 67 65 28 29 3b vdiff_page();
8770: 0a 20 20 7d 65 6c 73 65 0a 20 20 69 66 28 20 64 . }else. if( d
8780: 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 b_exists("SELECT
8790: 20 31 20 46 52 4f 4d 20 74 61 67 78 72 65 66 20 1 FROM tagxref
87a0: 4a 4f 49 4e 20 74 61 67 20 55 53 49 4e 47 28 74 JOIN tag USING(t
87b0: 61 67 69 64 29 22 0a 20 20 20 20 20 20 20 20 20 agid)".
87c0: 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 72 " WHERE r
87d0: 69 64 3d 25 64 20 41 4e 44 20 74 61 67 6e 61 6d id=%d AND tagnam
87e0: 65 20 4c 49 4b 45 20 27 77 69 6b 69 2d 25 25 27 e LIKE 'wiki-%%'
87f0: 22 2c 20 72 69 64 29 20 29 7b 0a 20 20 20 20 77 ", rid) ){. w
8800: 69 6e 66 6f 5f 70 61 67 65 28 29 3b 0a 20 20 7d info_page();. }
8810: 65 6c 73 65 0a 20 20 69 66 28 20 64 62 5f 65 78 else. if( db_ex
8820: 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 ists("SELECT 1 F
8830: 52 4f 4d 20 74 61 67 78 72 65 66 20 4a 4f 49 4e ROM tagxref JOIN
8840: 20 74 61 67 20 55 53 49 4e 47 28 74 61 67 69 64 tag USING(tagid
8850: 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )".
8860: 20 20 20 22 20 57 48 45 52 45 20 72 69 64 3d 25 " WHERE rid=%
8870: 64 20 41 4e 44 20 74 61 67 6e 61 6d 65 20 4c 49 d AND tagname LI
8880: 4b 45 20 27 74 6b 74 2d 25 25 27 22 2c 20 72 69 KE 'tkt-%%'", ri
8890: 64 29 20 29 7b 0a 20 20 20 20 74 69 6e 66 6f 5f d) ){. tinfo_
88a0: 70 61 67 65 28 29 3b 0a 20 20 7d 65 6c 73 65 0a page();. }else.
88b0: 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 if( db_exists(
88c0: 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 "SELECT 1 FROM p
88d0: 6c 69 6e 6b 20 57 48 45 52 45 20 63 69 64 3d 25 link WHERE cid=%
88e0: 64 22 2c 20 72 69 64 29 20 29 7b 0a 20 20 20 20 d", rid) ){.
88f0: 63 69 5f 70 61 67 65 28 29 3b 0a 20 20 7d 65 6c ci_page();. }el
8900: 73 65 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 se. if( db_exis
8910: 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f ts("SELECT 1 FRO
8920: 4d 20 70 6c 69 6e 6b 20 57 48 45 52 45 20 70 69 M plink WHERE pi
8930: 64 3d 25 64 22 2c 20 72 69 64 29 20 29 7b 0a 20 d=%d", rid) ){.
8940: 20 20 20 63 69 5f 70 61 67 65 28 29 3b 0a 20 20 ci_page();.
8950: 7d 65 6c 73 65 0a 20 20 7b 0a 20 20 20 20 61 72 }else. {. ar
8960: 74 69 66 61 63 74 5f 70 61 67 65 28 29 3b 0a 20 tifact_page();.
8970: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 }.}../*.** WEBP
8980: 41 47 45 3a 20 63 69 5f 65 64 69 74 0a 2a 2a 20 AGE: ci_edit.**
8990: 55 52 4c 3a 20 20 63 69 5f 65 64 69 74 3f 72 3d URL: ci_edit?r=
89a0: 52 49 44 26 63 3d 4e 45 57 43 4f 4d 4d 45 4e 54 RID&c=NEWCOMMENT
89b0: 26 75 3d 4e 45 57 55 53 45 52 0a 2a 2a 0a 2a 2a &u=NEWUSER.**.**
89c0: 20 50 72 65 73 65 6e 74 20 61 20 64 69 61 6c 6f Present a dialo
89d0: 67 20 66 6f 72 20 75 70 64 61 74 69 6e 67 20 70 g for updating p
89e0: 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61 20 62 roperties of a b
89f0: 61 73 65 6c 69 6e 65 3a 0a 2a 2a 0a 2a 2a 20 20 aseline:.**.**
8a00: 20 20 20 2a 20 20 54 68 65 20 63 68 65 63 6b 2d * The check-
8a10: 69 6e 20 75 73 65 72 0a 2a 2a 20 20 20 20 20 2a in user.** *
8a20: 20 20 54 68 65 20 63 68 65 63 6b 2d 69 6e 20 63 The check-in c
8a30: 6f 6d 6d 65 6e 74 0a 2a 2a 20 20 20 20 20 2a 20 omment.** *
8a40: 20 54 68 65 20 62 61 63 6b 67 72 6f 75 6e 64 20 The background
8a50: 63 6f 6c 6f 72 2e 0a 2a 2f 0a 76 6f 69 64 20 63 color..*/.void c
8a60: 69 5f 65 64 69 74 5f 70 61 67 65 28 76 6f 69 64 i_edit_page(void
8a70: 29 7b 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 ){. int rid;.
8a80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d const char *zCom
8a90: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 2f 2a ment; /*
8aa0: 20 43 75 72 72 65 6e 74 20 63 6f 6d 6d 65 6e 74 Current comment
8ab0: 20 6f 6e 20 74 68 65 20 63 68 65 63 6b 2d 69 6e on the check-in
8ac0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 */. const char
8ad0: 20 2a 7a 4e 65 77 43 6f 6d 6d 65 6e 74 3b 20 20 *zNewComment;
8ae0: 20 20 20 20 2f 2a 20 52 65 76 69 73 65 64 20 63 /* Revised c
8af0: 68 65 63 6b 2d 69 6e 20 63 6f 6d 6d 65 6e 74 20 heck-in comment
8b00: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 */. const char
8b10: 2a 7a 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 *zUser;
8b20: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 75 73 /* Current us
8b30: 65 72 20 66 6f 72 20 74 68 65 20 63 68 65 63 6b er for the check
8b40: 2d 69 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 -in */. const c
8b50: 68 61 72 20 2a 7a 4e 65 77 55 73 65 72 3b 20 20 har *zNewUser;
8b60: 20 20 20 20 20 20 20 2f 2a 20 52 65 76 69 73 65 /* Revise
8b70: 64 20 75 73 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 d user */. cons
8b80: 74 20 63 68 61 72 20 2a 7a 44 61 74 65 3b 20 20 t char *zDate;
8b90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 /* Cur
8ba0: 72 65 6e 74 20 64 61 74 65 20 6f 66 20 74 68 65 rent date of the
8bb0: 20 63 68 65 63 6b 2d 69 6e 20 2a 2f 0a 20 20 63 check-in */. c
8bc0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 44 onst char *zNewD
8bd0: 61 74 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 ate; /*
8be0: 52 65 76 69 73 65 64 20 63 68 65 63 6b 2d 69 6e Revised check-in
8bf0: 20 64 61 74 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 date */. const
8c00: 20 63 68 61 72 20 2a 7a 43 6f 6c 6f 72 3b 20 20 char *zColor;
8c10: 20 20 20 20 20 0a 20 20 63 6f 6e 73 74 20 63 68 . const ch
8c20: 61 72 20 2a 7a 4e 65 77 43 6f 6c 6f 72 3b 0a 20 ar *zNewColor;.
8c30: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 const char *zNe
8c40: 77 54 61 67 46 6c 61 67 3b 0a 20 20 63 6f 6e 73 wTagFlag;. cons
8c50: 74 20 63 68 61 72 20 2a 7a 4e 65 77 54 61 67 3b t char *zNewTag;
8c60: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
8c70: 4e 65 77 42 72 46 6c 61 67 3b 0a 20 20 63 6f 6e NewBrFlag;. con
8c80: 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 42 72 61 st char *zNewBra
8c90: 6e 63 68 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 nch;. const cha
8ca0: 72 20 2a 7a 43 6c 6f 73 65 46 6c 61 67 3b 0a 20 r *zCloseFlag;.
8cb0: 20 69 6e 74 20 66 50 72 6f 70 61 67 61 74 65 43 int fPropagateC
8cc0: 6f 6c 6f 72 3b 0a 20 20 63 68 61 72 20 2a 7a 55 olor;. char *zU
8cd0: 75 69 64 3b 0a 20 20 42 6c 6f 62 20 63 6f 6d 6d uid;. Blob comm
8ce0: 65 6e 74 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 ent;. Stmt q;.
8cf0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 static const st
8d00: 72 75 63 74 20 53 61 6d 70 6c 65 43 6f 6c 6f 72 ruct SampleColor
8d10: 73 20 7b 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 s {. const c
8d20: 68 61 72 20 2a 7a 43 4e 61 6d 65 3b 0a 20 20 20 har *zCName;.
8d30: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 const char *zC
8d40: 6f 6c 6f 72 3b 0a 20 20 7d 20 61 43 6f 6c 6f 72 olor;. } aColor
8d50: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 28 [] = {. { "(
8d60: 6e 6f 6e 65 29 22 2c 20 20 22 22 20 7d 2c 0a 20 none)", "" },.
8d70: 20 20 20 20 7b 20 22 23 66 32 64 63 64 63 22 2c { "#f2dcdc",
8d80: 20 22 23 66 32 64 63 64 63 22 20 7d 2c 0a 20 20 "#f2dcdc" },.
8d90: 20 20 20 7b 20 22 23 66 30 66 66 63 30 22 2c 20 { "#f0ffc0",
8da0: 22 23 66 30 66 66 63 30 22 20 7d 2c 0a 20 20 20 "#f0ffc0" },.
8db0: 20 20 7b 20 22 23 62 64 65 35 64 36 22 2c 20 22 { "#bde5d6", "
8dc0: 23 62 64 65 35 64 36 22 20 7d 2c 0a 20 20 20 20 #bde5d6" },.
8dd0: 20 7b 20 22 23 63 30 66 66 63 30 22 2c 20 22 23 { "#c0ffc0", "#
8de0: 63 30 66 66 63 30 22 20 7d 2c 0a 20 20 20 20 20 c0ffc0" },.
8df0: 7b 20 22 23 63 30 66 66 66 30 22 2c 20 22 23 63 { "#c0fff0", "#c
8e00: 30 66 66 66 30 22 20 7d 2c 0a 20 20 20 20 20 7b 0fff0" },. {
8e10: 20 22 23 63 30 66 30 66 66 22 2c 20 22 23 63 30 "#c0f0ff", "#c0
8e20: 66 30 66 66 22 20 7d 2c 0a 20 20 20 20 20 7b 20 f0ff" },. {
8e30: 22 23 64 30 63 30 66 66 22 2c 20 22 23 64 30 63 "#d0c0ff", "#d0c
8e40: 30 66 66 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 0ff" },. { "
8e50: 23 66 66 63 30 66 66 22 2c 20 22 23 66 66 63 30 #ffc0ff", "#ffc0
8e60: 66 66 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 ff" },. { "#
8e70: 66 66 63 30 64 30 22 2c 20 22 23 66 66 63 30 64 ffc0d0", "#ffc0d
8e80: 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 66 0" },. { "#f
8e90: 66 66 30 63 30 22 2c 20 22 23 66 66 66 30 63 30 ff0c0", "#fff0c0
8ea0: 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 63 30 " },. { "#c0
8eb0: 63 30 63 30 22 2c 20 22 23 63 30 63 30 63 30 22 c0c0", "#c0c0c0"
8ec0: 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 6e },. };. int n
8ed0: 43 6f 6c 6f 72 20 3d 20 73 69 7a 65 6f 66 28 61 Color = sizeof(a
8ee0: 43 6f 6c 6f 72 29 2f 73 69 7a 65 6f 66 28 61 43 Color)/sizeof(aC
8ef0: 6f 6c 6f 72 5b 30 5d 29 3b 0a 20 20 69 6e 74 20 olor[0]);. int
8f00: 69 3b 0a 20 20 0a 20 20 6c 6f 67 69 6e 5f 63 68 i;. . login_ch
8f10: 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 eck_credentials(
8f20: 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 57 72 );. if( !g.okWr
8f30: 69 74 65 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 ite ){ login_nee
8f40: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
8f50: 0a 20 20 72 69 64 20 3d 20 61 74 6f 69 28 50 44 . rid = atoi(PD
8f60: 28 22 72 22 2c 22 30 22 29 29 3b 0a 20 20 7a 55 ("r","0"));. zU
8f70: 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c uid = db_text(0,
8f80: 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 "SELECT uuid FR
8f90: 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 OM blob WHERE ri
8fa0: 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 7a d=%d", rid);. z
8fb0: 43 6f 6d 6d 65 6e 74 20 3d 20 64 62 5f 74 65 78 Comment = db_tex
8fc0: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 63 6f 61 t(0, "SELECT coa
8fd0: 6c 65 73 63 65 28 65 63 6f 6d 6d 65 6e 74 2c 63 lesce(ecomment,c
8fe0: 6f 6d 6d 65 6e 74 29 22 0a 20 20 20 20 20 20 20 omment)".
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9000: 20 22 20 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 " FROM event W
9010: 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 22 2c 20 HERE objid=%d",
9020: 72 69 64 29 3b 0a 20 20 69 66 28 20 7a 43 6f 6d rid);. if( zCom
9030: 6d 65 6e 74 3d 3d 30 20 29 20 66 6f 73 73 69 6c ment==0 ) fossil
9040: 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 _redirect_home()
9050: 3b 0a 20 20 69 66 28 20 50 28 22 63 61 6e 63 65 ;. if( P("cance
9060: 6c 22 29 20 29 7b 0a 20 20 20 20 63 67 69 5f 72 l") ){. cgi_r
9070: 65 64 69 72 65 63 74 66 28 22 63 69 3f 6e 61 6d edirectf("ci?nam
9080: 65 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 7d e=%d", rid);. }
9090: 0a 20 20 7a 4e 65 77 43 6f 6d 6d 65 6e 74 20 3d . zNewComment =
90a0: 20 50 44 28 22 63 22 2c 7a 43 6f 6d 6d 65 6e 74 PD("c",zComment
90b0: 29 3b 0a 20 20 7a 55 73 65 72 20 3d 20 64 62 5f );. zUser = db_
90c0: 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 text(0, "SELECT
90d0: 63 6f 61 6c 65 73 63 65 28 65 75 73 65 72 2c 75 coalesce(euser,u
90e0: 73 65 72 29 22 0a 20 20 20 20 20 20 20 20 20 20 ser)".
90f0: 20 20 20 20 20 20 20 20 20 20 20 22 20 20 46 52 " FR
9100: 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 45 20 6f OM event WHERE o
9110: 62 6a 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a bjid=%d", rid);.
9120: 20 20 69 66 28 20 7a 55 73 65 72 3d 3d 30 20 29 if( zUser==0 )
9130: 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 fossil_redirect
9140: 5f 68 6f 6d 65 28 29 3b 0a 20 20 7a 4e 65 77 55 _home();. zNewU
9150: 73 65 72 20 3d 20 50 44 28 22 75 22 2c 7a 55 73 ser = PD("u",zUs
9160: 65 72 29 3b 0a 20 20 7a 44 61 74 65 20 3d 20 64 er);. zDate = d
9170: 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 b_text(0, "SELEC
9180: 54 20 64 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 T datetime(mtime
9190: 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )".
91a0: 20 20 20 20 20 20 20 20 22 20 20 46 52 4f 4d 20 " FROM
91b0: 65 76 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 event WHERE obji
91c0: 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 69 d=%d", rid);. i
91d0: 66 28 20 7a 44 61 74 65 3d 3d 30 20 29 20 66 6f f( zDate==0 ) fo
91e0: 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f ssil_redirect_ho
91f0: 6d 65 28 29 3b 0a 20 20 7a 4e 65 77 44 61 74 65 me();. zNewDate
9200: 20 3d 20 50 44 28 22 64 74 22 2c 7a 44 61 74 65 = PD("dt",zDate
9210: 29 3b 0a 20 20 7a 43 6f 6c 6f 72 20 3d 20 64 62 );. zColor = db
9220: 5f 74 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 _text("", "SELEC
9230: 54 20 62 67 63 6f 6c 6f 72 22 0a 20 20 20 20 20 T bgcolor".
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9250: 20 20 20 22 20 20 46 52 4f 4d 20 65 76 65 6e 74 " FROM event
9260: 20 57 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 22 WHERE objid=%d"
9270: 2c 20 72 69 64 29 3b 0a 20 20 7a 4e 65 77 43 6f , rid);. zNewCo
9280: 6c 6f 72 20 3d 20 50 44 28 22 63 6c 72 22 2c 7a lor = PD("clr",z
9290: 43 6f 6c 6f 72 29 3b 0a 20 20 66 50 72 6f 70 61 Color);. fPropa
92a0: 67 61 74 65 43 6f 6c 6f 72 20 3d 20 50 28 22 70 gateColor = P("p
92b0: 63 6c 72 22 29 21 3d 30 3b 0a 20 20 7a 4e 65 77 clr")!=0;. zNew
92c0: 54 61 67 46 6c 61 67 20 3d 20 50 28 22 6e 65 77 TagFlag = P("new
92d0: 74 61 67 22 29 20 3f 20 22 20 63 68 65 63 6b 65 tag") ? " checke
92e0: 64 22 20 3a 20 22 22 3b 0a 20 20 7a 4e 65 77 54 d" : "";. zNewT
92f0: 61 67 20 3d 20 50 44 28 22 74 61 67 6e 61 6d 65 ag = PD("tagname
9300: 22 2c 22 22 29 3b 0a 20 20 7a 4e 65 77 42 72 46 ","");. zNewBrF
9310: 6c 61 67 20 3d 20 50 28 22 6e 65 77 62 72 22 29 lag = P("newbr")
9320: 20 3f 20 22 20 63 68 65 63 6b 65 64 22 20 3a 20 ? " checked" :
9330: 22 22 3b 0a 20 20 7a 4e 65 77 42 72 61 6e 63 68 "";. zNewBranch
9340: 20 3d 20 50 44 28 22 62 72 6e 61 6d 65 22 2c 22 = PD("brname","
9350: 22 29 3b 0a 20 20 7a 43 6c 6f 73 65 46 6c 61 67 ");. zCloseFlag
9360: 20 3d 20 50 28 22 63 6c 6f 73 65 22 29 20 3f 20 = P("close") ?
9370: 22 20 63 68 65 63 6b 65 64 22 20 3a 20 22 22 3b " checked" : "";
9380: 0a 20 20 69 66 28 20 50 28 22 61 70 70 6c 79 22 . if( P("apply"
9390: 29 20 29 7b 0a 20 20 20 20 42 6c 6f 62 20 63 74 ) ){. Blob ct
93a0: 72 6c 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 rl;. char *zD
93b0: 61 74 65 3b 0a 20 20 20 20 69 6e 74 20 6e 43 68 ate;. int nCh
93c0: 6e 67 20 3d 20 30 3b 0a 0a 20 20 20 20 6c 6f 67 ng = 0;.. log
93d0: 69 6e 5f 76 65 72 69 66 79 5f 63 73 72 66 5f 73 in_verify_csrf_s
93e0: 65 63 72 65 74 28 29 3b 0a 20 20 20 20 62 6c 6f ecret();. blo
93f0: 62 5f 7a 65 72 6f 28 26 63 74 72 6c 29 3b 0a 20 b_zero(&ctrl);.
9400: 20 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 74 65 zDate = db_te
9410: 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61 xt(0, "SELECT da
9420: 74 65 74 69 6d 65 28 27 6e 6f 77 27 29 22 29 3b tetime('now')");
9430: 0a 20 20 20 20 7a 44 61 74 65 5b 31 30 5d 20 3d . zDate[10] =
9440: 20 27 54 27 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 'T';. blob_a
9450: 70 70 65 6e 64 66 28 26 63 74 72 6c 2c 20 22 44 ppendf(&ctrl, "D
9460: 20 25 73 5c 6e 22 2c 20 7a 44 61 74 65 29 3b 0a %s\n", zDate);.
9470: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 db_multi_exe
9480: 63 28 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 c("CREATE TEMP T
9490: 41 42 4c 45 20 6e 65 77 74 61 67 73 28 74 61 67 ABLE newtags(tag
94a0: 20 55 4e 49 51 55 45 2c 20 70 72 65 66 69 78 2c UNIQUE, prefix,
94b0: 20 76 61 6c 75 65 29 22 29 3b 0a 20 20 20 20 69 value)");. i
94c0: 66 28 20 7a 4e 65 77 43 6f 6c 6f 72 5b 30 5d 20 f( zNewColor[0]
94d0: 26 26 20 73 74 72 63 6d 70 28 7a 43 6f 6c 6f 72 && strcmp(zColor
94e0: 2c 7a 4e 65 77 43 6f 6c 6f 72 29 21 3d 30 20 29 ,zNewColor)!=0 )
94f0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 50 {. char *zP
9500: 72 65 66 69 78 20 3d 20 22 2b 22 3b 0a 20 20 20 refix = "+";.
9510: 20 20 20 69 66 28 20 66 50 72 6f 70 61 67 61 74 if( fPropagat
9520: 65 43 6f 6c 6f 72 20 29 7b 0a 20 20 20 20 20 20 eColor ){.
9530: 20 20 7a 50 72 65 66 69 78 20 3d 20 22 2a 22 3b zPrefix = "*";
9540: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 . }. d
9550: 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 b_multi_exec("RE
9560: 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 PLACE INTO newta
9570: 67 73 20 56 41 4c 55 45 53 28 27 62 67 63 6f 6c gs VALUES('bgcol
9580: 6f 72 27 2c 25 51 2c 25 51 29 22 2c 0a 20 20 20 or',%Q,%Q)",.
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95a0: 20 7a 50 72 65 66 69 78 2c 20 7a 4e 65 77 43 6f zPrefix, zNewCo
95b0: 6c 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 lor);. }.
95c0: 69 66 28 20 7a 4e 65 77 43 6f 6c 6f 72 5b 30 5d if( zNewColor[0]
95d0: 3d 3d 30 20 26 26 20 7a 43 6f 6c 6f 72 5b 30 5d ==0 && zColor[0]
95e0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62 5f !=0 ){. db_
95f0: 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c multi_exec("REPL
9600: 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 ACE INTO newtags
9610: 20 56 41 4c 55 45 53 28 27 62 67 63 6f 6c 6f 72 VALUES('bgcolor
9620: 27 2c 27 2d 27 2c 4e 55 4c 4c 29 22 29 3b 0a 20 ','-',NULL)");.
9630: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 }. if( str
9640: 63 6d 70 28 7a 43 6f 6d 6d 65 6e 74 2c 7a 4e 65 cmp(zComment,zNe
9650: 77 43 6f 6d 6d 65 6e 74 29 21 3d 30 20 29 7b 0a wComment)!=0 ){.
9660: 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 db_multi_e
9670: 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 xec("REPLACE INT
9680: 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 O newtags VALUES
9690: 28 27 63 6f 6d 6d 65 6e 74 27 2c 27 2b 27 2c 25 ('comment','+',%
96a0: 51 29 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 Q)",.
96b0: 20 20 20 20 20 20 20 20 20 7a 4e 65 77 43 6f 6d zNewCom
96c0: 6d 65 6e 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 ment);. }.
96d0: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 44 61 74 if( strcmp(zDat
96e0: 65 2c 7a 4e 65 77 44 61 74 65 29 21 3d 30 20 29 e,zNewDate)!=0 )
96f0: 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 {. db_multi
9700: 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 _exec("REPLACE I
9710: 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 NTO newtags VALU
9720: 45 53 28 27 64 61 74 65 27 2c 27 2b 27 2c 25 51 ES('date','+',%Q
9730: 29 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 )",.
9740: 20 20 20 20 20 20 20 20 7a 4e 65 77 44 61 74 65 zNewDate
9750: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 );. }. if(
9760: 20 73 74 72 63 6d 70 28 7a 55 73 65 72 2c 7a 4e strcmp(zUser,zN
9770: 65 77 55 73 65 72 29 21 3d 30 20 29 7b 0a 20 20 ewUser)!=0 ){.
9780: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 db_multi_exe
9790: 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 c("REPLACE INTO
97a0: 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 newtags VALUES('
97b0: 75 73 65 72 27 2c 27 2b 27 2c 25 51 29 22 2c 20 user','+',%Q)",
97c0: 7a 4e 65 77 55 73 65 72 29 3b 0a 20 20 20 20 7d zNewUser);. }
97d0: 0a 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 . db_prepare(
97e0: 26 71 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 &q,. "SELE
97f0: 43 54 20 74 61 67 2e 74 61 67 69 64 2c 20 74 61 CT tag.tagid, ta
9800: 67 6e 61 6d 65 20 46 52 4f 4d 20 74 61 67 78 72 gname FROM tagxr
9810: 65 66 2c 20 74 61 67 22 0a 20 20 20 20 20 20 20 ef, tag".
9820: 22 20 57 48 45 52 45 20 74 61 67 78 72 65 66 2e " WHERE tagxref.
9830: 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 74 79 rid=%d AND tagty
9840: 70 65 3e 30 20 41 4e 44 20 74 61 67 78 72 65 66 pe>0 AND tagxref
9850: 2e 74 61 67 69 64 3d 74 61 67 2e 74 61 67 69 64 .tagid=tag.tagid
9860: 22 2c 0a 20 20 20 20 20 20 20 72 69 64 0a 20 20 ",. rid.
9870: 20 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 );. while(
9880: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c db_step(&q)==SQL
9890: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 ITE_ROW ){.
98a0: 20 69 6e 74 20 74 61 67 69 64 20 3d 20 64 62 5f int tagid = db_
98b0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 30 column_int(&q, 0
98c0: 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 );. const c
98d0: 68 61 72 20 2a 7a 54 61 67 20 3d 20 64 62 5f 63 har *zTag = db_c
98e0: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 olumn_text(&q, 1
98f0: 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c );. char zL
9900: 61 62 65 6c 5b 33 30 5d 3b 0a 20 20 20 20 20 20 abel[30];.
9910: 73 70 72 69 6e 74 66 28 7a 4c 61 62 65 6c 2c 20 sprintf(zLabel,
9920: 22 63 25 64 22 2c 20 74 61 67 69 64 29 3b 0a 20 "c%d", tagid);.
9930: 20 20 20 20 20 69 66 28 20 50 28 7a 4c 61 62 65 if( P(zLabe
9940: 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 l) ){. db
9950: 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 _multi_exec("REP
9960: 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 LACE INTO newtag
9970: 73 20 56 41 4c 55 45 53 28 25 51 2c 27 2d 27 2c s VALUES(%Q,'-',
9980: 4e 55 4c 4c 29 22 2c 20 7a 54 61 67 29 3b 0a 20 NULL)", zTag);.
9990: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 }. }.
99a0: 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 db_finalize(&q)
99b0: 3b 0a 20 20 20 20 69 66 28 20 7a 43 6c 6f 73 65 ;. if( zClose
99c0: 46 6c 61 67 5b 30 5d 20 29 7b 0a 20 20 20 20 20 Flag[0] ){.
99d0: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 db_multi_exec("
99e0: 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 REPLACE INTO new
99f0: 74 61 67 73 20 56 41 4c 55 45 53 28 27 63 6c 6f tags VALUES('clo
9a00: 73 65 64 27 2c 27 2b 27 2c 4e 55 4c 4c 29 22 29 sed','+',NULL)")
9a10: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 ;. }. if(
9a20: 7a 4e 65 77 54 61 67 46 6c 61 67 5b 30 5d 20 29 zNewTagFlag[0] )
9a30: 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 {. db_multi
9a40: 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 _exec("REPLACE I
9a50: 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 NTO newtags VALU
9a60: 45 53 28 27 73 79 6d 2d 25 71 27 2c 27 2b 27 2c ES('sym-%q','+',
9a70: 4e 55 4c 4c 29 22 2c 20 7a 4e 65 77 54 61 67 29 NULL)", zNewTag)
9a80: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 ;. }. if(
9a90: 7a 4e 65 77 42 72 46 6c 61 67 5b 30 5d 20 29 7b zNewBrFlag[0] ){
9aa0: 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f . db_multi_
9ab0: 65 78 65 63 28 0a 20 20 20 20 20 20 20 20 22 52 exec(. "R
9ac0: 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 EPLACE INTO newt
9ad0: 61 67 73 20 22 0a 20 20 20 20 20 20 20 20 22 20 ags ". "
9ae0: 53 45 4c 45 43 54 20 74 61 67 6e 61 6d 65 2c 20 SELECT tagname,
9af0: 27 2d 27 2c 20 4e 55 4c 4c 20 46 52 4f 4d 20 74 '-', NULL FROM t
9b00: 61 67 78 72 65 66 2c 20 74 61 67 22 0a 20 20 20 agxref, tag".
9b10: 20 20 20 20 20 22 20 20 57 48 45 52 45 20 74 61 " WHERE ta
9b20: 67 78 72 65 66 2e 72 69 64 3d 25 64 20 41 4e 44 gxref.rid=%d AND
9b30: 20 74 61 67 74 79 70 65 3d 3d 32 22 0a 20 20 20 tagtype==2".
9b40: 20 20 20 20 20 22 20 20 20 20 41 4e 44 20 74 61 " AND ta
9b50: 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 79 6d 2d gname GLOB 'sym-
9b60: 2a 27 22 0a 20 20 20 20 20 20 20 20 22 20 20 20 *'". "
9b70: 20 41 4e 44 20 74 61 67 2e 74 61 67 69 64 3d 74 AND tag.tagid=t
9b80: 61 67 78 72 65 66 2e 74 61 67 69 64 22 2c 0a 20 agxref.tagid",.
9b90: 20 20 20 20 20 20 20 72 69 64 0a 20 20 20 20 20 rid.
9ba0: 20 29 3b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c );. db_mul
9bb0: 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 ti_exec("REPLACE
9bc0: 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 INTO newtags VA
9bd0: 4c 55 45 53 28 27 62 72 61 6e 63 68 27 2c 27 2a LUES('branch','*
9be0: 27 2c 25 51 29 22 2c 20 7a 4e 65 77 42 72 61 6e ',%Q)", zNewBran
9bf0: 63 68 29 3b 0a 20 20 20 20 20 20 64 62 5f 6d 75 ch);. db_mu
9c00: 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 lti_exec("REPLAC
9c10: 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 E INTO newtags V
9c20: 41 4c 55 45 53 28 27 73 79 6d 2d 25 71 27 2c 27 ALUES('sym-%q','
9c30: 2a 27 2c 4e 55 4c 4c 29 22 2c 0a 20 20 20 20 20 *',NULL)",.
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a z
9c50: 4e 65 77 42 72 61 6e 63 68 29 3b 0a 20 20 20 20 NewBranch);.
9c60: 7d 0a 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 }. db_prepare
9c70: 28 26 71 2c 20 22 53 45 4c 45 43 54 20 74 61 67 (&q, "SELECT tag
9c80: 2c 20 70 72 65 66 69 78 2c 20 76 61 6c 75 65 20 , prefix, value
9c90: 46 52 4f 4d 20 6e 65 77 74 61 67 73 22 0a 20 20 FROM newtags".
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9cb0: 20 22 20 4f 52 44 45 52 20 42 59 20 70 72 65 66 " ORDER BY pref
9cc0: 69 78 20 7c 7c 20 74 61 67 22 29 3b 0a 20 20 20 ix || tag");.
9cd0: 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 while( db_step(
9ce0: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 &q)==SQLITE_ROW
9cf0: 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 ){. const c
9d00: 68 61 72 20 2a 7a 54 61 67 20 3d 20 64 62 5f 63 har *zTag = db_c
9d10: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 olumn_text(&q, 0
9d20: 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 );. const c
9d30: 68 61 72 20 2a 7a 50 72 65 66 69 78 20 3d 20 64 har *zPrefix = d
9d40: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
9d50: 2c 20 31 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 , 1);. cons
9d60: 74 20 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 3d t char *zValue =
9d70: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
9d80: 26 71 2c 20 32 29 3b 0a 20 20 20 20 20 20 6e 43 &q, 2);. nC
9d90: 68 6e 67 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 hng++;. if(
9da0: 20 7a 56 61 6c 75 65 20 29 7b 0a 20 20 20 20 20 zValue ){.
9db0: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
9dc0: 26 63 74 72 6c 2c 20 22 54 20 25 73 25 46 20 25 &ctrl, "T %s%F %
9dd0: 73 20 25 46 5c 6e 22 2c 20 7a 50 72 65 66 69 78 s %F\n", zPrefix
9de0: 2c 20 7a 54 61 67 2c 20 7a 55 75 69 64 2c 20 7a , zTag, zUuid, z
9df0: 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d 65 Value);. }e
9e00: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 62 6c 6f lse{. blo
9e10: 62 5f 61 70 70 65 6e 64 66 28 26 63 74 72 6c 2c b_appendf(&ctrl,
9e20: 20 22 54 20 25 73 25 46 20 25 73 5c 6e 22 2c 20 "T %s%F %s\n",
9e30: 7a 50 72 65 66 69 78 2c 20 7a 54 61 67 2c 20 7a zPrefix, zTag, z
9e40: 55 75 69 64 29 3b 0a 20 20 20 20 20 20 7d 0a 20 Uuid);. }.
9e50: 20 20 20 7d 0a 20 20 20 20 64 62 5f 66 69 6e 61 }. db_fina
9e60: 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 20 69 66 lize(&q);. if
9e70: 28 20 6e 43 68 6e 67 3e 30 20 29 7b 0a 20 20 20 ( nChng>0 ){.
9e80: 20 20 20 69 6e 74 20 6e 72 69 64 3b 0a 20 20 20 int nrid;.
9e90: 20 20 20 42 6c 6f 62 20 63 6b 73 75 6d 3b 0a 20 Blob cksum;.
9ea0: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 blob_append
9eb0: 66 28 26 63 74 72 6c 2c 20 22 55 20 25 46 5c 6e f(&ctrl, "U %F\n
9ec0: 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 ", g.zLogin);.
9ed0: 20 20 20 20 6d 64 35 73 75 6d 5f 62 6c 6f 62 28 md5sum_blob(
9ee0: 26 63 74 72 6c 2c 20 26 63 6b 73 75 6d 29 3b 0a &ctrl, &cksum);.
9ef0: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
9f00: 64 66 28 26 63 74 72 6c 2c 20 22 5a 20 25 62 5c df(&ctrl, "Z %b\
9f10: 6e 22 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 20 n", &cksum);.
9f20: 20 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e db_begin_tran
9f30: 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 20 saction();.
9f40: 20 67 2e 6d 61 72 6b 50 72 69 76 61 74 65 20 3d g.markPrivate =
9f50: 20 63 6f 6e 74 65 6e 74 5f 69 73 5f 70 72 69 76 content_is_priv
9f60: 61 74 65 28 72 69 64 29 3b 0a 20 20 20 20 20 20 ate(rid);.
9f70: 6e 72 69 64 20 3d 20 63 6f 6e 74 65 6e 74 5f 70 nrid = content_p
9f80: 75 74 28 26 63 74 72 6c 2c 20 30 2c 20 30 29 3b ut(&ctrl, 0, 0);
9f90: 0a 20 20 20 20 20 20 6d 61 6e 69 66 65 73 74 5f . manifest_
9fa0: 63 72 6f 73 73 6c 69 6e 6b 28 6e 72 69 64 2c 20 crosslink(nrid,
9fb0: 26 63 74 72 6c 29 3b 0a 20 20 20 20 20 20 64 62 &ctrl);. db
9fc0: 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e _end_transaction
9fd0: 28 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 (0);. }. c
9fe0: 67 69 5f 72 65 64 69 72 65 63 74 66 28 22 63 69 gi_redirectf("ci
9ff0: 3f 6e 61 6d 65 3d 25 64 22 2c 20 72 69 64 29 3b ?name=%d", rid);
a000: 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f . }. blob_zero
a010: 28 26 63 6f 6d 6d 65 6e 74 29 3b 0a 20 20 62 6c (&comment);. bl
a020: 6f 62 5f 61 70 70 65 6e 64 28 26 63 6f 6d 6d 65 ob_append(&comme
a030: 6e 74 2c 20 7a 4e 65 77 43 6f 6d 6d 65 6e 74 2c nt, zNewComment,
a040: 20 2d 31 29 3b 0a 20 20 7a 55 75 69 64 5b 31 30 -1);. zUuid[10
a050: 5d 20 3d 20 30 3b 0a 20 20 73 74 79 6c 65 5f 68 ] = 0;. style_h
a060: 65 61 64 65 72 28 22 45 64 69 74 20 43 68 65 63 eader("Edit Chec
a070: 6b 2d 69 6e 20 5b 25 73 5d 22 2c 20 7a 55 75 69 k-in [%s]", zUui
a080: 64 29 3b 0a 20 20 69 66 28 20 50 28 22 70 72 65 d);. if( P("pre
a090: 76 69 65 77 22 29 20 29 7b 0a 20 20 20 20 42 6c view") ){. Bl
a0a0: 6f 62 20 73 75 66 66 69 78 3b 0a 20 20 20 20 69 ob suffix;. i
a0b0: 6e 74 20 6e 54 61 67 20 3d 20 30 3b 0a 20 20 20 nt nTag = 0;.
a0c0: 20 40 20 3c 62 3e 50 72 65 76 69 65 77 3a 3c 2f @ <b>Preview:</
a0d0: 62 3e 0a 20 20 20 20 40 20 3c 62 6c 6f 63 6b 71 b>. @ <blockq
a0e0: 75 6f 74 65 3e 0a 20 20 20 20 40 20 3c 74 61 62 uote>. @ <tab
a0f0: 6c 65 20 62 6f 72 64 65 72 3d 30 3e 0a 20 20 20 le border=0>.
a100: 20 69 66 28 20 7a 4e 65 77 43 6f 6c 6f 72 20 26 if( zNewColor &
a110: 26 20 7a 4e 65 77 43 6f 6c 6f 72 5b 30 5d 20 29 & zNewColor[0] )
a120: 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 {. @ <tr><t
a130: 64 20 62 67 63 6f 6c 6f 72 3d 22 25 68 28 7a 4e d bgcolor="%h(zN
a140: 65 77 43 6f 6c 6f 72 29 22 3e 0a 20 20 20 20 7d ewColor)">. }
a150: 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 74 else{. @ <t
a160: 72 3e 3c 74 64 3e 0a 20 20 20 20 7d 0a 20 20 20 r><td>. }.
a170: 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 28 26 63 wiki_convert(&c
a180: 6f 6d 6d 65 6e 74 2c 20 30 2c 20 57 49 4b 49 5f omment, 0, WIKI_
a190: 49 4e 4c 49 4e 45 29 3b 0a 20 20 20 20 62 6c 6f INLINE);. blo
a1a0: 62 5f 7a 65 72 6f 28 26 73 75 66 66 69 78 29 3b b_zero(&suffix);
a1b0: 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 . blob_append
a1c0: 66 28 26 73 75 66 66 69 78 2c 20 22 28 75 73 65 f(&suffix, "(use
a1d0: 72 3a 20 25 68 22 2c 20 7a 4e 65 77 55 73 65 72 r: %h", zNewUser
a1e0: 29 3b 0a 20 20 20 20 64 62 5f 70 72 65 70 61 72 );. db_prepar
a1f0: 65 28 26 71 2c 20 22 53 45 4c 45 43 54 20 73 75 e(&q, "SELECT su
a200: 62 73 74 72 28 74 61 67 6e 61 6d 65 2c 35 29 20 bstr(tagname,5)
a210: 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 61 FROM tagxref, ta
a220: 67 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 g".
a230: 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74 61 " WHERE ta
a240: 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 79 6d 2d gname GLOB 'sym-
a250: 2a 27 20 41 4e 44 20 74 61 67 78 72 65 66 2e 72 *' AND tagxref.r
a260: 69 64 3d 25 64 22 0a 20 20 20 20 20 20 20 20 20 id=%d".
a270: 20 20 20 20 20 20 20 20 20 20 22 20 20 20 41 4e " AN
a280: 44 20 74 61 67 74 79 70 65 3e 31 20 41 4e 44 20 D tagtype>1 AND
a290: 74 61 67 2e 74 61 67 69 64 3d 74 61 67 78 72 65 tag.tagid=tagxre
a2a0: 66 2e 74 61 67 69 64 22 2c 0a 20 20 20 20 20 20 f.tagid",.
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 69 64 rid
a2c0: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 64 62 );. while( db
a2d0: 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 _step(&q)==SQLIT
a2e0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 E_ROW ){. c
a2f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 67 20 onst char *zTag
a300: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
a310: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 (&q, 0);. i
a320: 66 28 20 6e 54 61 67 3d 3d 30 20 29 7b 0a 20 20 f( nTag==0 ){.
a330: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
a340: 64 66 28 26 73 75 66 66 69 78 2c 20 22 2c 20 74 df(&suffix, ", t
a350: 61 67 73 3a 20 25 68 22 2c 20 7a 54 61 67 29 3b ags: %h", zTag);
a360: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 . }else{.
a370: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
a380: 64 66 28 26 73 75 66 66 69 78 2c 20 22 2c 20 25 df(&suffix, ", %
a390: 68 22 2c 20 7a 54 61 67 29 3b 0a 20 20 20 20 20 h", zTag);.
a3a0: 20 7d 0a 20 20 20 20 20 20 6e 54 61 67 2b 2b 3b }. nTag++;
a3b0: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f 66 69 . }. db_fi
a3c0: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 20 nalize(&q);.
a3d0: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 73 75 blob_appendf(&su
a3e0: 66 66 69 78 2c 20 22 29 22 29 3b 0a 20 20 20 20 ffix, ")");.
a3f0: 40 20 25 73 28 62 6c 6f 62 5f 73 74 72 28 26 73 @ %s(blob_str(&s
a400: 75 66 66 69 78 29 29 0a 20 20 20 20 40 20 3c 2f uffix)). @ </
a410: 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e td></tr></table>
a420: 0a 20 20 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 . @ </blockqu
a430: 6f 74 65 3e 0a 20 20 20 20 40 20 3c 68 72 3e 0a ote>. @ <hr>.
a440: 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 blob_reset(&
a450: 73 75 66 66 69 78 29 3b 0a 20 20 7d 0a 20 20 40 suffix);. }. @
a460: 20 3c 70 3e 4d 61 6b 65 20 63 68 61 6e 67 65 73 <p>Make changes
a470: 20 74 6f 20 61 74 74 72 69 62 75 74 65 73 20 6f to attributes o
a480: 66 20 63 68 65 63 6b 2d 69 6e 0a 20 20 40 20 5b f check-in. @ [
a490: 3c 61 20 68 72 65 66 3d 22 63 69 3f 6e 61 6d 65 <a href="ci?name
a4a0: 3d 25 64 28 72 69 64 29 22 3e 25 73 28 7a 55 75 =%d(rid)">%s(zUu
a4b0: 69 64 29 3c 2f 61 3e 5d 3a 3c 2f 70 3e 0a 20 20 id)</a>]:</p>.
a4c0: 40 20 3c 66 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 @ <form action="
a4d0: 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 63 %s(g.zBaseURL)/c
a4e0: 69 5f 65 64 69 74 22 20 6d 65 74 68 6f 64 3d 22 i_edit" method="
a4f0: 50 4f 53 54 22 3e 0a 20 20 6c 6f 67 69 6e 5f 69 POST">. login_i
a500: 6e 73 65 72 74 5f 63 73 72 66 5f 73 65 63 72 65 nsert_csrf_secre
a510: 74 28 29 3b 0a 20 20 40 20 3c 69 6e 70 75 74 20 t();. @ <input
a520: 74 79 70 65 3d 22 68 69 64 64 65 6e 22 20 6e 61 type="hidden" na
a530: 6d 65 3d 22 72 22 20 76 61 6c 75 65 3d 22 25 64 me="r" value="%d
a540: 28 72 69 64 29 22 3e 0a 20 20 40 20 3c 74 61 62 (rid)">. @ <tab
a550: 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 le border="0" ce
a560: 6c 6c 73 70 61 63 69 6e 67 3d 22 31 30 22 3e 0a llspacing="10">.
a570: 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 . @ <tr><td ali
a580: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 gn="right" valig
a590: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 55 73 65 72 3a n="top"><b>User:
a5a0: 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 </b></td>. @ <t
a5b0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a d valign="top">.
a5c0: 20 20 40 20 20 20 3c 69 6e 70 75 74 20 74 79 70 @ <input typ
a5d0: 65 3d 22 74 65 78 74 22 20 6e 61 6d 65 3d 22 75 e="text" name="u
a5e0: 22 20 73 69 7a 65 3d 22 32 30 22 20 76 61 6c 75 " size="20" valu
a5f0: 65 3d 22 25 68 28 7a 4e 65 77 55 73 65 72 29 22 e="%h(zNewUser)"
a600: 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e >. @ </td></tr>
a610: 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c .. @ <tr><td al
a620: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 ign="right" vali
a630: 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 43 6f 6d 6d gn="top"><b>Comm
a640: 65 6e 74 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 ent:</b></td>.
a650: 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f @ <td valign="to
a660: 70 22 3e 0a 20 20 40 20 3c 74 65 78 74 61 72 65 p">. @ <textare
a670: 61 20 6e 61 6d 65 3d 22 63 22 20 72 6f 77 73 3d a name="c" rows=
a680: 22 31 30 22 20 63 6f 6c 73 3d 22 38 30 22 3e 25 "10" cols="80">%
a690: 68 28 7a 4e 65 77 43 6f 6d 6d 65 6e 74 29 3c 2f h(zNewComment)</
a6a0: 74 65 78 74 61 72 65 61 3e 0a 20 20 40 20 3c 2f textarea>. @ </
a6b0: 74 64 3e 3c 2f 74 72 3e 0a 0a 20 20 40 20 3c 74 td></tr>.. @ <t
a6c0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 r><td align="rig
a6d0: 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 ht" valign="top"
a6e0: 3e 3c 62 3e 43 68 65 63 6b 2d 69 6e 20 54 69 6d ><b>Check-in Tim
a6f0: 65 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 e:</b></td>. @
a700: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 <td valign="top"
a710: 3e 0a 20 20 40 20 20 20 3c 69 6e 70 75 74 20 74 >. @ <input t
a720: 79 70 65 3d 22 74 65 78 74 22 20 6e 61 6d 65 3d ype="text" name=
a730: 22 64 74 22 20 73 69 7a 65 3d 22 32 30 22 20 76 "dt" size="20" v
a740: 61 6c 75 65 3d 22 25 68 28 7a 4e 65 77 44 61 74 alue="%h(zNewDat
a750: 65 29 22 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f e)">. @ </td></
a760: 74 72 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 tr>.. @ <tr><td
a770: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 align="right" v
a780: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 42 align="top"><b>B
a790: 61 63 6b 67 72 6f 75 6e 64 20 43 6f 6c 6f 72 3a ackground Color:
a7a0: 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 </b></td>. @ <t
a7b0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a d valign="top">.
a7c0: 20 20 40 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 @ <table borde
a7d0: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d r=0 cellpadding=
a7e0: 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 31 3e 0 cellspacing=1>
a7f0: 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 63 6f 6c . @ <tr><td col
a800: 73 70 61 6e 3d 22 36 22 20 61 6c 69 67 6e 3d 22 span="6" align="
a810: 6c 65 66 74 22 3e 0a 20 20 69 66 28 20 66 50 72 left">. if( fPr
a820: 6f 70 61 67 61 74 65 43 6f 6c 6f 72 20 29 7b 0a opagateColor ){.
a830: 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 @ <input typ
a840: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d e="checkbox" nam
a850: 65 3d 22 70 63 6c 72 22 20 63 68 65 63 6b 65 64 e="pclr" checked
a860: 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 40 >. }else{. @
a870: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 <input type="ch
a880: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 70 63 eckbox" name="pc
a890: 6c 72 22 3e 0a 20 20 7d 0a 20 20 40 20 50 72 6f lr">. }. @ Pro
a8a0: 70 61 67 61 74 65 20 63 6f 6c 6f 72 20 74 6f 20 pagate color to
a8b0: 64 65 73 63 65 6e 64 61 6e 74 73 3c 2f 69 6e 70 descendants</inp
a8c0: 75 74 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 ut></td></tr>.
a8d0: 40 20 3c 74 72 3e 0a 20 20 66 6f 72 28 69 3d 30 @ <tr>. for(i=0
a8e0: 3b 20 69 3c 6e 43 6f 6c 6f 72 3b 20 69 2b 2b 29 ; i<nColor; i++)
a8f0: 7b 0a 20 20 20 20 69 66 28 20 61 43 6f 6c 6f 72 {. if( aColor
a900: 5b 69 5d 2e 7a 43 6f 6c 6f 72 5b 30 5d 20 29 7b [i].zColor[0] ){
a910: 0a 20 20 20 20 20 20 40 20 3c 74 64 20 62 67 63 . @ <td bgc
a920: 6f 6c 6f 72 3d 22 25 68 28 61 43 6f 6c 6f 72 5b olor="%h(aColor[
a930: 69 5d 2e 7a 43 6f 6c 6f 72 29 22 3e 0a 20 20 20 i].zColor)">.
a940: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 }else{. @
a950: 3c 74 64 3e 0a 20 20 20 20 7d 0a 20 20 20 20 69 <td>. }. i
a960: 66 28 20 73 74 72 63 6d 70 28 7a 4e 65 77 43 6f f( strcmp(zNewCo
a970: 6c 6f 72 2c 20 61 43 6f 6c 6f 72 5b 69 5d 2e 7a lor, aColor[i].z
a980: 43 6f 6c 6f 72 29 3d 3d 30 20 29 7b 0a 20 20 20 Color)==0 ){.
a990: 20 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 @ <input type
a9a0: 3d 22 72 61 64 69 6f 22 20 6e 61 6d 65 3d 22 63 ="radio" name="c
a9b0: 6c 72 22 20 76 61 6c 75 65 3d 22 25 68 28 61 43 lr" value="%h(aC
a9c0: 6f 6c 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f 72 29 22 olor[i].zColor)"
a9d0: 20 63 68 65 63 6b 65 64 3e 0a 20 20 20 20 7d 65 checked>. }e
a9e0: 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 69 6e lse{. @ <in
a9f0: 70 75 74 20 74 79 70 65 3d 22 72 61 64 69 6f 22 put type="radio"
aa00: 20 6e 61 6d 65 3d 22 63 6c 72 22 20 76 61 6c 75 name="clr" valu
aa10: 65 3d 22 25 68 28 61 43 6f 6c 6f 72 5b 69 5d 2e e="%h(aColor[i].
aa20: 7a 43 6f 6c 6f 72 29 22 3e 0a 20 20 20 20 7d 0a zColor)">. }.
aa30: 20 20 20 20 40 20 25 68 28 61 43 6f 6c 6f 72 5b @ %h(aColor[
aa40: 69 5d 2e 7a 43 4e 61 6d 65 29 3c 2f 69 6e 70 75 i].zCName)</inpu
aa50: 74 3e 3c 2f 74 64 3e 0a 20 20 20 20 69 66 28 20 t></td>. if(
aa60: 28 69 25 36 29 3d 3d 35 20 26 26 20 69 2b 31 3c (i%6)==5 && i+1<
aa70: 6e 43 6f 6c 6f 72 20 29 7b 0a 20 20 20 20 20 20 nColor ){.
aa80: 40 20 3c 2f 74 72 3e 3c 74 72 3e 0a 20 20 20 20 @ </tr><tr>.
aa90: 7d 0a 20 20 7d 0a 20 20 40 20 3c 2f 74 72 3e 0a }. }. @ </tr>.
aaa0: 20 20 40 20 3c 2f 74 61 62 6c 65 3e 0a 20 20 40 @ </table>. @
aab0: 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 20 40 </td></tr>.. @
aac0: 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 <tr><td align="
aad0: 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 right" valign="t
aae0: 6f 70 22 3e 3c 62 3e 54 61 67 73 3a 3c 2f 62 3e op"><b>Tags:</b>
aaf0: 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 61 </td>. @ <td va
ab00: 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 lign="top">. @
ab10: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 <input type="che
ab20: 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 6e 65 77 ckbox" name="new
ab30: 74 61 67 22 25 73 28 7a 4e 65 77 54 61 67 46 6c tag"%s(zNewTagFl
ab40: 61 67 29 3e 0a 20 20 40 20 41 64 64 20 74 68 65 ag)>. @ Add the
ab50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 77 20 74 following new t
ab60: 61 67 20 6e 61 6d 65 20 74 6f 20 74 68 69 73 20 ag name to this
ab70: 63 68 65 63 6b 2d 69 6e 3a 0a 20 20 40 20 3c 69 check-in:. @ <i
ab80: 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 74 22 nput type="text"
ab90: 20 77 69 64 74 68 3d 22 31 35 22 20 6e 61 6d 65 width="15" name
aba0: 3d 22 74 61 67 6e 61 6d 65 22 20 76 61 6c 75 65 ="tagname" value
abb0: 3d 22 25 68 28 7a 4e 65 77 54 61 67 29 22 3e 0a ="%h(zNewTag)">.
abc0: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c db_prepare(&q,
abd0: 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 74 61 . "SELECT ta
abe0: 67 2e 74 61 67 69 64 2c 20 74 61 67 6e 61 6d 65 g.tagid, tagname
abf0: 20 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 FROM tagxref, t
ac00: 61 67 22 0a 20 20 20 20 20 22 20 57 48 45 52 45 ag". " WHERE
ac10: 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 64 20 tagxref.rid=%d
ac20: 41 4e 44 20 74 61 67 74 79 70 65 3e 30 20 41 4e AND tagtype>0 AN
ac30: 44 20 74 61 67 78 72 65 66 2e 74 61 67 69 64 3d D tagxref.tagid=
ac40: 74 61 67 2e 74 61 67 69 64 22 0a 20 20 20 20 20 tag.tagid".
ac50: 22 20 4f 52 44 45 52 20 42 59 20 43 41 53 45 20 " ORDER BY CASE
ac60: 57 48 45 4e 20 74 61 67 6e 61 6d 65 20 47 4c 4f WHEN tagname GLO
ac70: 42 20 27 73 79 6d 2d 2a 27 20 54 48 45 4e 20 73 B 'sym-*' THEN s
ac80: 75 62 73 74 72 28 74 61 67 6e 61 6d 65 2c 35 29 ubstr(tagname,5)
ac90: 22 0a 20 20 20 20 20 22 20 20 20 20 20 20 20 20 ". "
aca0: 20 20 20 20 20 20 20 45 4c 53 45 20 74 61 67 6e ELSE tagn
acb0: 61 6d 65 20 45 4e 44 22 2c 0a 20 20 20 20 20 72 ame END",. r
acc0: 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 id. );. while(
acd0: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
ace0: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
acf0: 69 6e 74 20 74 61 67 69 64 20 3d 20 64 62 5f 63 int tagid = db_c
ad00: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 30 29 olumn_int(&q, 0)
ad10: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
ad20: 20 2a 7a 54 61 67 4e 61 6d 65 20 3d 20 64 62 5f *zTagName = db_
ad30: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
ad40: 31 29 3b 0a 20 20 20 20 63 68 61 72 20 7a 4c 61 1);. char zLa
ad50: 62 65 6c 5b 33 30 5d 3b 0a 20 20 20 20 73 70 72 bel[30];. spr
ad60: 69 6e 74 66 28 7a 4c 61 62 65 6c 2c 20 22 63 25 intf(zLabel, "c%
ad70: 64 22 2c 20 74 61 67 69 64 29 3b 0a 20 20 20 20 d", tagid);.
ad80: 69 66 28 20 50 28 7a 4c 61 62 65 6c 29 20 29 7b if( P(zLabel) ){
ad90: 0a 20 20 20 20 20 20 40 20 3c 62 72 3e 3c 69 6e . @ <br><in
ada0: 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 put type="checkb
adb0: 6f 78 22 20 6e 61 6d 65 3d 22 63 25 64 28 74 61 ox" name="c%d(ta
adc0: 67 69 64 29 22 20 63 68 65 63 6b 65 64 3e 0a 20 gid)" checked>.
add0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
ade0: 40 20 3c 62 72 3e 3c 69 6e 70 75 74 20 74 79 70 @ <br><input typ
adf0: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d e="checkbox" nam
ae00: 65 3d 22 63 25 64 28 74 61 67 69 64 29 22 3e 0a e="c%d(tagid)">.
ae10: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 }. if( st
ae20: 72 6e 63 6d 70 28 7a 54 61 67 4e 61 6d 65 2c 20 rncmp(zTagName,
ae30: 22 73 79 6d 2d 22 2c 20 34 29 3d 3d 30 20 29 7b "sym-", 4)==0 ){
ae40: 0a 20 20 20 20 20 20 40 20 43 61 6e 63 65 6c 20 . @ Cancel
ae50: 74 61 67 20 3c 62 3e 25 68 28 26 7a 54 61 67 4e tag <b>%h(&zTagN
ae60: 61 6d 65 5b 34 5d 29 3c 2f 62 3e 0a 20 20 20 20 ame[4])</b>.
ae70: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 43 }else{. @ C
ae80: 61 6e 63 65 6c 20 73 70 65 63 69 61 6c 20 74 61 ancel special ta
ae90: 67 20 3c 62 3e 25 68 28 7a 54 61 67 4e 61 6d 65 g <b>%h(zTagName
aea0: 29 3c 2f 62 3e 0a 20 20 20 20 7d 0a 20 20 7d 0a )</b>. }. }.
aeb0: 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 db_finalize(&q
aec0: 29 3b 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 );. @ </td></tr
aed0: 3e 0a 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 >.. if( db_exis
aee0: 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f ts("SELECT 1 FRO
aef0: 4d 20 74 61 67 78 72 65 66 20 57 48 45 52 45 20 M tagxref WHERE
af00: 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 69 64 rid=%d AND tagid
af10: 3d 25 64 20 41 4e 44 20 73 72 63 69 64 3e 30 22 =%d AND srcid>0"
af20: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
af30: 20 20 72 69 64 2c 20 54 41 47 5f 42 52 41 4e 43 rid, TAG_BRANC
af40: 48 29 3d 3d 30 20 29 7b 0a 20 20 20 20 40 20 3c H)==0 ){. @ <
af50: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 tr><td align="ri
af60: 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 ght" valign="top
af70: 22 3e 3c 62 3e 42 72 61 6e 63 68 69 6e 67 3a 3c "><b>Branching:<
af80: 2f 62 3e 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c /b></td>. @ <
af90: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e td valign="top">
afa0: 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 79 . @ <input ty
afb0: 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 pe="checkbox" na
afc0: 6d 65 3d 22 6e 65 77 62 72 22 25 73 28 7a 4e 65 me="newbr"%s(zNe
afd0: 77 42 72 46 6c 61 67 29 3e 0a 20 20 20 20 40 20 wBrFlag)>. @
afe0: 4d 61 6b 65 20 74 68 69 73 20 63 68 65 63 6b 2d Make this check-
aff0: 69 6e 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 in the start of
b000: 61 20 6e 65 77 20 62 72 61 6e 63 68 20 6e 61 6d a new branch nam
b010: 65 64 3a 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 ed:. @ <input
b020: 20 74 79 70 65 3d 22 74 65 78 74 22 20 77 69 64 type="text" wid
b030: 74 68 3d 22 31 35 22 20 6e 61 6d 65 3d 22 62 72 th="15" name="br
b040: 6e 61 6d 65 22 20 76 61 6c 75 65 3d 22 25 68 28 name" value="%h(
b050: 7a 4e 65 77 42 72 61 6e 63 68 29 22 3e 0a 20 20 zNewBranch)">.
b060: 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 @ </td></tr>.
b070: 20 7d 0a 0a 20 20 69 66 28 20 69 73 5f 61 5f 6c }.. if( is_a_l
b080: 65 61 66 28 72 69 64 29 0a 20 20 20 26 26 20 21 eaf(rid). && !
b090: 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 db_exists("SELEC
b0a0: 54 20 31 20 46 52 4f 4d 20 74 61 67 78 72 65 66 T 1 FROM tagxref
b0b0: 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
b0c0: 20 20 20 20 22 20 57 48 45 52 45 20 74 61 67 69 " WHERE tagi
b0d0: 64 3d 25 64 20 41 4e 44 20 72 69 64 3d 25 64 20 d=%d AND rid=%d
b0e0: 41 4e 44 20 74 61 67 74 79 70 65 3e 30 22 2c 0a AND tagtype>0",.
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b100: 20 54 41 47 5f 43 4c 4f 53 45 44 2c 20 72 69 64 TAG_CLOSED, rid
b110: 29 0a 20 20 29 7b 0a 20 20 20 20 40 20 3c 74 72 ). ){. @ <tr
b120: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 ><td align="righ
b130: 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e t" valign="top">
b140: 3c 62 3e 4c 65 61 66 20 43 6c 6f 73 75 72 65 3a <b>Leaf Closure:
b150: 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 20 20 40 20 </b></td>. @
b160: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 <td valign="top"
b170: 3e 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 >. @ <input t
b180: 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e ype="checkbox" n
b190: 61 6d 65 3d 22 63 6c 6f 73 65 22 25 73 28 7a 43 ame="close"%s(zC
b1a0: 6c 6f 73 65 46 6c 61 67 29 3e 0a 20 20 20 20 40 loseFlag)>. @
b1b0: 20 4d 61 72 6b 20 74 68 69 73 20 6c 65 61 66 20 Mark this leaf
b1c0: 61 73 20 22 63 6c 6f 73 65 64 22 20 73 6f 20 74 as "closed" so t
b1d0: 68 61 74 20 69 74 20 6e 6f 20 6c 6f 6e 67 65 72 hat it no longer
b1e0: 20 61 70 70 65 61 72 73 20 6f 6e 20 74 68 65 0a appears on the.
b1f0: 20 20 20 20 40 20 22 6c 65 61 76 65 73 22 20 70 @ "leaves" p
b200: 61 67 65 20 61 6e 64 20 69 73 20 6e 6f 20 6c 6f age and is no lo
b210: 6e 67 65 72 20 6c 61 62 65 6c 65 64 20 61 73 20 nger labeled as
b220: 61 20 22 3c 62 3e 4c 65 61 66 3c 2f 62 3e 22 2e a "<b>Leaf</b>".
b230: 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 . @ </td></tr
b240: 3e 0a 20 20 7d 0a 0a 0a 20 20 40 20 3c 74 72 3e >. }... @ <tr>
b250: 3c 74 64 20 63 6f 6c 73 70 61 6e 3d 22 32 22 3e <td colspan="2">
b260: 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 . @ <input type
b270: 3d 22 73 75 62 6d 69 74 22 20 6e 61 6d 65 3d 22 ="submit" name="
b280: 70 72 65 76 69 65 77 22 20 76 61 6c 75 65 3d 22 preview" value="
b290: 50 72 65 76 69 65 77 22 3e 0a 20 20 40 20 3c 69 Preview">. @ <i
b2a0: 6e 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 nput type="submi
b2b0: 74 22 20 6e 61 6d 65 3d 22 61 70 70 6c 79 22 20 t" name="apply"
b2c0: 76 61 6c 75 65 3d 22 41 70 70 6c 79 20 43 68 61 value="Apply Cha
b2d0: 6e 67 65 73 22 3e 0a 20 20 40 20 3c 69 6e 70 75 nges">. @ <inpu
b2e0: 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 t type="submit"
b2f0: 6e 61 6d 65 3d 22 63 61 6e 63 65 6c 22 20 76 61 name="cancel" va
b300: 6c 75 65 3d 22 43 61 6e 63 65 6c 22 3e 0a 20 20 lue="Cancel">.
b310: 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 @ </td></tr>. @
b320: 20 3c 2f 74 61 62 6c 65 3e 0a 20 20 40 20 3c 2f </table>. @ </
b330: 66 6f 72 6d 3e 0a 20 20 73 74 79 6c 65 5f 66 6f form>. style_fo
b340: 6f 74 65 72 28 29 3b 0a 7d 0a oter();.}.