0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20 /*.** Copyright
0010: 28 63 29 20 32 30 30 37 20 44 2e 20 52 69 63 68 (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54 ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20 te it and/or.**
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20 modify it under
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 the terms of the
0090: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76 lic.** License v
00b0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c ersion 2 as publ
00c0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65 ished by the Fre
00d0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
00e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 ation..**.** Thi
00f0: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 s program is dis
0100: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 tributed in the
0110: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c hope that it wil
0120: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 l be useful,.**
0130: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 but WITHOUT ANY
0140: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 WARRANTY; withou
0150: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 t even the impli
0160: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a ed warranty of.*
0170: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 * MERCHANTABILIT
0180: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 Y or FITNESS FOR
0190: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 A PARTICULAR PU
01a0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20 RPOSE. See the
01b0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50 GNU.** General P
01c0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f ublic License fo
01d0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a r more details..
01e0: 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c ** .** You shoul
01f0: 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 d have received
0200: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e a copy of the GN
0210: 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 U General Public
0220: 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e .** License alon
0230: 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72 g with this libr
0240: 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69 ary; if not, wri
0250: 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65 te to the.** Fre
0260: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
0270: 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20 ation, Inc., 59
0280: 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53 Temple Place - S
0290: 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73 uite 330,.** Bos
02a0: 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31 ton, MA 02111-1
02b0: 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20 307, USA..**.**
02c0: 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69 Author contact i
02d0: 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 nformation:.**
02e0: 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a drh@hwaci.com.*
02f0: 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68 * http://www.h
0300: 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a waci.com/drh/.**
0310: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .***************
0320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0360: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 .**.** This file
0370: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 74 contains code t
0380: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 o implement the
0390: 22 69 6e 66 6f 22 20 63 6f 6d 6d 61 6e 64 2e 20 "info" command.
03a0: 20 54 68 65 0a 2a 2a 20 22 69 6e 66 6f 22 20 63 The.** "info" c
03b0: 6f 6d 6d 61 6e 64 20 67 69 76 65 73 20 63 6f 6d ommand gives com
03c0: 6d 61 6e 64 2d 6c 69 6e 65 20 61 63 63 65 73 73 mand-line access
03d0: 20 74 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 to information
03e0: 61 62 6f 75 74 0a 2a 2a 20 74 68 65 20 63 75 72 about.** the cur
03f0: 72 65 6e 74 20 74 72 65 65 2c 20 6f 72 20 61 20 rent tree, or a
0400: 70 61 72 74 69 63 75 6c 61 72 20 61 72 74 69 66 particular artif
0410: 61 63 74 20 6f 72 20 63 68 65 63 6b 2d 69 6e 2e act or check-in.
0420: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f .*/.#include "co
0430: 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 64 65 nfig.h".#include
0440: 20 22 69 6e 66 6f 2e 68 22 0a 23 69 6e 63 6c 75 "info.h".#inclu
0450: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 0a 0a de <assert.h>...
0460: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 63 6f 6d 6d /*.** Print comm
0470: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 on information a
0480: 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61 bout a particula
0490: 72 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 r record..**.**
04a0: 20 20 20 20 2a 20 20 54 68 65 20 55 55 49 44 0a * The UUID.
04b0: 2a 2a 20 20 20 20 20 2a 20 20 54 68 65 20 72 65 ** * The re
04c0: 63 6f 72 64 20 49 44 0a 2a 2a 20 20 20 20 20 2a cord ID.** *
04d0: 20 20 6d 74 69 6d 65 20 61 6e 64 20 63 74 69 6d mtime and ctim
04e0: 65 0a 2a 2a 20 20 20 20 20 2a 20 20 77 68 6f 20 e.** * who
04f0: 73 69 67 6e 65 64 20 69 74 0a 2a 2f 0a 76 6f 69 signed it.*/.voi
0500: 64 20 73 68 6f 77 5f 63 6f 6d 6d 6f 6e 5f 69 6e d show_common_in
0510: 66 6f 28 69 6e 74 20 72 69 64 2c 20 63 6f 6e 73 fo(int rid, cons
0520: 74 20 63 68 61 72 20 2a 7a 55 75 69 64 4e 61 6d t char *zUuidNam
0530: 65 2c 20 69 6e 74 20 73 68 6f 77 43 6f 6d 6d 65 e, int showComme
0540: 6e 74 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 nt){. Stmt q;.
0550: 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 20 char *zComment
0560: 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 54 61 = 0;. char *zTa
0570: 67 73 3b 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 gs;. char *zDat
0580: 65 3b 0a 20 20 63 68 61 72 20 2a 7a 55 75 69 64 e;. char *zUuid
0590: 3b 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 ;. zUuid = db_t
05a0: 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 ext(0, "SELECT u
05b0: 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 uid FROM blob WH
05c0: 45 52 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 ERE rid=%d", rid
05d0: 29 3b 0a 20 20 69 66 28 20 7a 55 75 69 64 20 29 );. if( zUuid )
05e0: 7b 0a 20 20 20 20 7a 44 61 74 65 20 3d 20 64 62 {. zDate = db
05f0: 5f 74 65 78 74 28 22 22 2c 20 0a 20 20 20 20 20 _text("", .
0600: 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d "SELECT datetim
0610: 65 28 6d 74 69 6d 65 29 20 7c 7c 20 27 20 55 54 e(mtime) || ' UT
0620: 43 27 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 48 C' FROM event WH
0630: 45 52 45 20 6f 62 6a 69 64 3d 25 64 22 2c 0a 20 ERE objid=%d",.
0640: 20 20 20 20 20 72 69 64 0a 20 20 20 20 29 3b 0a rid. );.
0650: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 31 32 33 /* 0123
0660: 34 35 36 37 38 39 30 31 32 33 20 2a 2f 0a 20 20 4567890123 */.
0670: 20 20 70 72 69 6e 74 66 28 22 25 2d 31 33 73 20 printf("%-13s
0680: 25 73 20 25 73 5c 6e 22 2c 20 7a 55 75 69 64 4e %s %s\n", zUuidN
0690: 61 6d 65 2c 20 7a 55 75 69 64 2c 20 7a 44 61 74 ame, zUuid, zDat
06a0: 65 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 55 75 e);. free(zUu
06b0: 69 64 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 44 id);. free(zD
06c0: 61 74 65 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 70 ate);. }. db_p
06d0: 72 65 70 61 72 65 28 26 71 2c 20 22 53 45 4c 45 repare(&q, "SELE
06e0: 43 54 20 75 75 69 64 2c 20 70 69 64 20 46 52 4f CT uuid, pid FRO
06f0: 4d 20 70 6c 69 6e 6b 20 4a 4f 49 4e 20 62 6c 6f M plink JOIN blo
0700: 62 20 4f 4e 20 70 69 64 3d 72 69 64 20 22 0a 20 b ON pid=rid ".
0710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0720: 22 20 57 48 45 52 45 20 63 69 64 3d 25 64 22 2c " WHERE cid=%d",
0730: 20 72 69 64 29 3b 0a 20 20 77 68 69 6c 65 28 20 rid);. while(
0740: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c db_step(&q)==SQL
0750: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 ITE_ROW ){. c
0760: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 onst char *zUuid
0770: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
0780: 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 7a 44 t(&q, 0);. zD
0790: 61 74 65 20 3d 20 64 62 5f 74 65 78 74 28 22 22 ate = db_text(""
07a0: 2c 20 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 , . "SELECT
07b0: 20 64 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 datetime(mtime)
07c0: 20 7c 7c 20 27 20 55 54 43 27 20 46 52 4f 4d 20 || ' UTC' FROM
07d0: 65 76 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 event WHERE obji
07e0: 64 3d 25 64 22 2c 0a 20 20 20 20 20 20 64 62 5f d=%d",. db_
07f0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 31 column_int(&q, 1
0800: 29 0a 20 20 20 20 29 3b 0a 20 20 20 20 70 72 69 ). );. pri
0810: 6e 74 66 28 22 70 61 72 65 6e 74 3a 20 20 20 20 ntf("parent:
0820: 20 20 20 25 73 20 25 73 5c 6e 22 2c 20 7a 55 75 %s %s\n", zUu
0830: 69 64 2c 20 7a 44 61 74 65 29 3b 0a 20 20 20 20 id, zDate);.
0840: 66 72 65 65 28 7a 44 61 74 65 29 3b 0a 20 20 7d free(zDate);. }
0850: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 . db_finalize(&
0860: 71 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 q);. db_prepare
0870: 28 26 71 2c 20 22 53 45 4c 45 43 54 20 75 75 69 (&q, "SELECT uui
0880: 64 2c 20 63 69 64 20 46 52 4f 4d 20 70 6c 69 6e d, cid FROM plin
0890: 6b 20 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e 20 63 k JOIN blob ON c
08a0: 69 64 3d 72 69 64 20 22 0a 20 20 20 20 20 20 20 id=rid ".
08b0: 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 " WHER
08c0: 45 20 70 69 64 3d 25 64 22 2c 20 72 69 64 29 3b E pid=%d", rid);
08d0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 . while( db_ste
08e0: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
08f0: 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 W ){. const c
0900: 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f har *zUuid = db_
0910: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
0920: 30 29 3b 0a 20 20 20 20 7a 44 61 74 65 20 3d 20 0);. zDate =
0930: 64 62 5f 74 65 78 74 28 22 22 2c 20 0a 20 20 20 db_text("", .
0940: 20 20 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 "SELECT datet
0950: 69 6d 65 28 6d 74 69 6d 65 29 20 7c 7c 20 27 20 ime(mtime) || '
0960: 55 54 43 27 20 46 52 4f 4d 20 65 76 65 6e 74 20 UTC' FROM event
0970: 57 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 22 2c WHERE objid=%d",
0980: 0a 20 20 20 20 20 20 64 62 5f 63 6f 6c 75 6d 6e . db_column
0990: 5f 69 6e 74 28 26 71 2c 20 31 29 0a 20 20 20 20 _int(&q, 1).
09a0: 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 63 );. printf("c
09b0: 68 69 6c 64 3a 20 20 20 20 20 20 20 20 25 73 20 hild: %s
09c0: 25 73 5c 6e 22 2c 20 7a 55 75 69 64 2c 20 7a 44 %s\n", zUuid, zD
09d0: 61 74 65 29 3b 0a 20 20 20 20 66 72 65 65 28 7a ate);. free(z
09e0: 44 61 74 65 29 3b 0a 20 20 7d 0a 20 20 64 62 5f Date);. }. db_
09f0: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
0a00: 7a 54 61 67 73 20 3d 20 64 62 5f 74 65 78 74 28 zTags = db_text(
0a10: 30 2c 20 22 53 45 4c 45 43 54 20 67 72 6f 75 70 0, "SELECT group
0a20: 5f 63 6f 6e 63 61 74 28 73 75 62 73 74 72 28 74 _concat(substr(t
0a30: 61 67 6e 61 6d 65 2c 20 35 29 2c 20 27 2c 20 27 agname, 5), ', '
0a40: 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )".
0a50: 20 20 20 20 20 20 20 20 22 20 20 46 52 4f 4d 20 " FROM
0a60: 74 61 67 78 72 65 66 2c 20 74 61 67 22 0a 20 20 tagxref, tag".
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a80: 20 20 20 22 20 57 48 45 52 45 20 74 61 67 78 72 " WHERE tagxr
0a90: 65 66 2e 72 69 64 3d 25 64 20 41 4e 44 20 74 61 ef.rid=%d AND ta
0aa0: 67 78 72 65 66 2e 74 61 67 74 79 70 65 3e 30 22 gxref.tagtype>0"
0ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0ac0: 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 74 61 " AND ta
0ad0: 67 2e 74 61 67 69 64 3d 74 61 67 78 72 65 66 2e g.tagid=tagxref.
0ae0: 74 61 67 69 64 22 0a 20 20 20 20 20 20 20 20 20 tagid".
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 20 "
0b00: 41 4e 44 20 74 61 67 2e 74 61 67 6e 61 6d 65 20 AND tag.tagname
0b10: 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 22 2c 0a 20 GLOB 'sym-*'",.
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0b30: 20 20 20 20 72 69 64 29 3b 0a 20 20 69 66 28 20 rid);. if(
0b40: 7a 54 61 67 73 20 26 26 20 7a 54 61 67 73 5b 30 zTags && zTags[0
0b50: 5d 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 ] ){. printf(
0b60: 22 74 61 67 73 3a 20 20 20 20 20 20 20 20 20 25 "tags: %
0b70: 73 5c 6e 22 2c 20 7a 54 61 67 73 29 3b 0a 20 20 s\n", zTags);.
0b80: 7d 0a 20 20 66 72 65 65 28 7a 54 61 67 73 29 3b }. free(zTags);
0b90: 0a 20 20 69 66 28 20 7a 43 6f 6d 6d 65 6e 74 20 . if( zComment
0ba0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 63 ){. printf("c
0bb0: 6f 6d 6d 65 6e 74 3a 5c 6e 25 73 5c 6e 22 2c 20 omment:\n%s\n",
0bc0: 7a 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 20 20 66 zComment);. f
0bd0: 72 65 65 28 7a 43 6f 6d 6d 65 6e 74 29 3b 0a 20 ree(zComment);.
0be0: 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d }.}.../*.** COM
0bf0: 4d 41 4e 44 3a 20 69 6e 66 6f 0a 2a 2a 0a 2a 2a MAND: info.**.**
0c00: 20 55 73 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 Usage: %fossil
0c10: 69 6e 66 6f 20 3f 41 52 54 49 46 41 43 54 2d 49 info ?ARTIFACT-I
0c20: 44 7c 46 49 4c 45 4e 41 4d 45 3f 0a 2a 2a 0a 2a D|FILENAME?.**.*
0c30: 2a 20 57 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 * With no argume
0c40: 6e 74 73 2c 20 70 72 6f 76 69 64 65 20 69 6e 66 nts, provide inf
0c50: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 ormation about t
0c60: 68 65 20 63 75 72 72 65 6e 74 20 74 72 65 65 2e he current tree.
0c70: 0a 2a 2a 20 49 66 20 61 6e 20 61 72 67 75 6d 65 .** If an argume
0c80: 6e 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c nt is specified,
0c90: 20 70 72 6f 76 69 64 65 20 69 6e 66 6f 72 6d 61 provide informa
0ca0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 6f tion about the o
0cb0: 62 6a 65 63 74 0a 2a 2a 20 69 6e 20 74 68 65 20 bject.** in the
0cc0: 72 65 73 70 6f 73 69 74 6f 72 79 20 6f 66 20 74 respository of t
0cd0: 68 65 20 63 75 72 72 65 6e 74 20 74 72 65 65 20 he current tree
0ce0: 74 68 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e that the argumen
0cf0: 74 20 72 65 66 65 72 73 0a 2a 2a 20 74 6f 2e 20 t refers.** to.
0d00: 20 4f 72 20 69 66 20 74 68 65 20 61 72 67 75 6d Or if the argum
0d10: 65 6e 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 ent is the name
0d20: 6f 66 20 61 20 72 65 70 6f 73 69 74 6f 72 79 2c of a repository,
0d30: 20 73 68 6f 77 0a 2a 2a 20 69 6e 66 6f 72 6d 61 show.** informa
0d40: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 61 74 20 tion about that
0d50: 72 65 70 6f 73 69 74 6f 72 79 2e 0a 2a 2f 0a 76 repository..*/.v
0d60: 6f 69 64 20 69 6e 66 6f 5f 63 6d 64 28 76 6f 69 oid info_cmd(voi
0d70: 64 29 7b 0a 20 20 69 36 34 20 66 73 69 7a 65 3b d){. i64 fsize;
0d80: 0a 20 20 69 66 28 20 67 2e 61 72 67 63 21 3d 32 . if( g.argc!=2
0d90: 20 26 26 20 67 2e 61 72 67 63 21 3d 33 20 29 7b && g.argc!=3 ){
0da0: 0a 20 20 20 20 75 73 61 67 65 28 22 3f 46 49 4c . usage("?FIL
0db0: 45 4e 41 4d 45 7c 41 52 54 49 46 41 43 54 2d 49 ENAME|ARTIFACT-I
0dc0: 44 3f 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 D?");. }. if(
0dd0: 67 2e 61 72 67 63 3d 3d 33 20 26 26 20 28 66 73 g.argc==3 && (fs
0de0: 69 7a 65 20 3d 20 66 69 6c 65 5f 73 69 7a 65 28 ize = file_size(
0df0: 67 2e 61 72 67 76 5b 32 5d 29 29 3e 30 20 26 26 g.argv[2]))>0 &&
0e00: 20 28 66 73 69 7a 65 26 30 78 31 66 66 29 3d 3d (fsize&0x1ff)==
0e10: 30 20 29 7b 0a 20 20 20 20 64 62 5f 6f 70 65 6e 0 ){. db_open
0e20: 5f 63 6f 6e 66 69 67 28 30 29 3b 0a 20 20 20 20 _config(0);.
0e30: 64 62 5f 72 65 63 6f 72 64 5f 72 65 70 6f 73 69 db_record_reposi
0e40: 74 6f 72 79 5f 66 69 6c 65 6e 61 6d 65 28 67 2e tory_filename(g.
0e50: 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 64 62 argv[2]);. db
0e60: 5f 6f 70 65 6e 5f 72 65 70 6f 73 69 74 6f 72 79 _open_repository
0e70: 28 67 2e 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 (g.argv[2]);.
0e80: 20 70 72 69 6e 74 66 28 22 70 72 6f 6a 65 63 74 printf("project
0e90: 2d 63 6f 64 65 3a 20 25 73 5c 6e 22 2c 20 64 62 -code: %s\n", db
0ea0: 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 63 6f _get("project-co
0eb0: 64 65 22 2c 20 22 3c 6e 6f 6e 65 3e 22 29 29 3b de", "<none>"));
0ec0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 70 72 6f . printf("pro
0ed0: 6a 65 63 74 2d 6e 61 6d 65 3a 20 25 73 5c 6e 22 ject-name: %s\n"
0ee0: 2c 20 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 , db_get("projec
0ef0: 74 2d 6e 61 6d 65 22 2c 20 22 3c 75 6e 6e 61 6d t-name", "<unnam
0f00: 65 64 3e 22 29 29 3b 0a 20 20 20 20 70 72 69 6e ed>"));. prin
0f10: 74 66 28 22 73 65 72 76 65 72 2d 63 6f 64 65 3a tf("server-code:
0f20: 20 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 28 %s\n", db_get(
0f30: 22 73 65 72 76 65 72 2d 63 6f 64 65 22 2c 20 22 "server-code", "
0f40: 3c 6e 6f 6e 65 3e 22 29 29 3b 0a 20 20 20 20 72 <none>"));. r
0f50: 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 64 62 5f eturn;. }. db_
0f60: 6d 75 73 74 5f 62 65 5f 77 69 74 68 69 6e 5f 74 must_be_within_t
0f70: 72 65 65 28 29 3b 0a 20 20 69 66 28 20 67 2e 61 ree();. if( g.a
0f80: 72 67 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e rgc==2 ){. in
0f90: 74 20 76 69 64 3b 0a 20 20 20 20 20 20 20 20 20 t vid;.
0fa0: 2f 2a 20 30 31 32 33 34 35 36 37 38 39 30 31 32 /* 0123456789012
0fb0: 33 34 20 2a 2f 0a 20 20 20 20 64 62 5f 72 65 63 34 */. db_rec
0fc0: 6f 72 64 5f 72 65 70 6f 73 69 74 6f 72 79 5f 66 ord_repository_f
0fd0: 69 6c 65 6e 61 6d 65 28 30 29 3b 0a 20 20 20 20 ilename(0);.
0fe0: 70 72 69 6e 74 66 28 22 72 65 70 6f 73 69 74 6f printf("reposito
0ff0: 72 79 3a 20 20 20 25 73 5c 6e 22 2c 20 64 62 5f ry: %s\n", db_
1000: 6c 67 65 74 28 22 72 65 70 6f 73 69 74 6f 72 79 lget("repository
1010: 22 2c 20 22 22 29 29 3b 0a 20 20 20 20 70 72 69 ", ""));. pri
1020: 6e 74 66 28 22 6c 6f 63 61 6c 2d 72 6f 6f 74 3a ntf("local-root:
1030: 20 20 20 25 73 5c 6e 22 2c 20 67 2e 7a 4c 6f 63 %s\n", g.zLoc
1040: 61 6c 52 6f 6f 74 29 3b 0a 20 20 20 20 70 72 69 alRoot);. pri
1050: 6e 74 66 28 22 70 72 6f 6a 65 63 74 2d 63 6f 64 ntf("project-cod
1060: 65 3a 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 e: %s\n", db_get
1070: 28 22 70 72 6f 6a 65 63 74 2d 63 6f 64 65 22 2c ("project-code",
1080: 20 22 22 29 29 3b 0a 20 20 20 20 70 72 69 6e 74 ""));. print
1090: 66 28 22 73 65 72 76 65 72 2d 63 6f 64 65 3a 20 f("server-code:
10a0: 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 28 22 %s\n", db_get("
10b0: 73 65 72 76 65 72 2d 63 6f 64 65 22 2c 20 22 22 server-code", ""
10c0: 29 29 3b 0a 20 20 20 20 76 69 64 20 3d 20 64 62 ));. vid = db
10d0: 5f 6c 67 65 74 5f 69 6e 74 28 22 63 68 65 63 6b _lget_int("check
10e0: 6f 75 74 22 2c 20 30 29 3b 0a 20 20 20 20 69 66 out", 0);. if
10f0: 28 20 76 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 ( vid==0 ){.
1100: 20 20 70 72 69 6e 74 66 28 22 63 68 65 63 6b 6f printf("checko
1110: 75 74 3a 20 20 20 20 20 6e 69 6c 5c 6e 22 29 3b ut: nil\n");
1120: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
1130: 20 20 73 68 6f 77 5f 63 6f 6d 6d 6f 6e 5f 69 6e show_common_in
1140: 66 6f 28 76 69 64 2c 20 22 63 68 65 63 6b 6f 75 fo(vid, "checkou
1150: 74 3a 22 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 t:", 1);. }.
1160: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 }else{. int
1170: 72 69 64 3b 0a 20 20 20 20 72 69 64 20 3d 20 6e rid;. rid = n
1180: 61 6d 65 5f 74 6f 5f 72 69 64 28 67 2e 61 72 67 ame_to_rid(g.arg
1190: 76 5b 32 5d 29 3b 0a 20 20 20 20 69 66 28 20 72 v[2]);. if( r
11a0: 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 66 id==0 ){. f
11b0: 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 6e 6f 20 ossil_panic("no
11c0: 73 75 63 68 20 6f 62 6a 65 63 74 3a 20 25 73 5c such object: %s\
11d0: 6e 22 2c 20 67 2e 61 72 67 76 5b 32 5d 29 3b 0a n", g.argv[2]);.
11e0: 20 20 20 20 7d 0a 20 20 20 20 73 68 6f 77 5f 63 }. show_c
11f0: 6f 6d 6d 6f 6e 5f 69 6e 66 6f 28 72 69 64 2c 20 ommon_info(rid,
1200: 22 75 75 69 64 3a 22 2c 20 31 29 3b 0a 20 20 7d "uuid:", 1);. }
1210: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 68 6f 77 20 69 .}../*.** Show i
1220: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 nformation about
1230: 20 61 6c 6c 20 74 61 67 73 20 6f 6e 20 61 20 67 all tags on a g
1240: 69 76 65 6e 20 6e 6f 64 65 2e 0a 2a 2f 0a 73 74 iven node..*/.st
1250: 61 74 69 63 20 76 6f 69 64 20 73 68 6f 77 54 61 atic void showTa
1260: 67 73 28 69 6e 74 20 72 69 64 2c 20 63 6f 6e 73 gs(int rid, cons
1270: 74 20 63 68 61 72 20 2a 7a 4e 6f 74 47 6c 6f 62 t char *zNotGlob
1280: 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 69 ){. Stmt q;. i
1290: 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 20 20 64 62 nt cnt = 0;. db
12a0: 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 _prepare(&q,.
12b0: 20 22 53 45 4c 45 43 54 20 74 61 67 2e 74 61 67 "SELECT tag.tag
12c0: 69 64 2c 20 74 61 67 6e 61 6d 65 2c 20 22 0a 20 id, tagname, ".
12d0: 20 20 20 22 20 20 20 20 20 20 20 28 53 45 4c 45 " (SELE
12e0: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f CT uuid FROM blo
12f0: 62 20 57 48 45 52 45 20 72 69 64 3d 74 61 67 78 b WHERE rid=tagx
1300: 72 65 66 2e 73 72 63 69 64 20 41 4e 44 20 72 69 ref.srcid AND ri
1310: 64 21 3d 25 64 29 2c 22 0a 20 20 20 20 22 20 20 d!=%d),". "
1320: 20 20 20 20 20 76 61 6c 75 65 2c 20 64 61 74 65 value, date
1330: 74 69 6d 65 28 74 61 67 78 72 65 66 2e 6d 74 69 time(tagxref.mti
1340: 6d 65 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 2c me,'localtime'),
1350: 20 74 61 67 74 79 70 65 2c 22 0a 20 20 20 20 22 tagtype,". "
1360: 20 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 75 (SELECT u
1370: 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 uid FROM blob WH
1380: 45 52 45 20 72 69 64 3d 74 61 67 78 72 65 66 2e ERE rid=tagxref.
1390: 6f 72 69 67 69 64 20 41 4e 44 20 72 69 64 21 3d origid AND rid!=
13a0: 25 64 29 22 0a 20 20 20 20 22 20 20 46 52 4f 4d %d)". " FROM
13b0: 20 74 61 67 78 72 65 66 20 4a 4f 49 4e 20 74 61 tagxref JOIN ta
13c0: 67 20 4f 4e 20 74 61 67 78 72 65 66 2e 74 61 67 g ON tagxref.tag
13d0: 69 64 3d 74 61 67 2e 74 61 67 69 64 22 0a 20 20 id=tag.tagid".
13e0: 20 20 22 20 57 48 45 52 45 20 74 61 67 78 72 65 " WHERE tagxre
13f0: 66 2e 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 f.rid=%d AND tag
1400: 6e 61 6d 65 20 4e 4f 54 20 47 4c 4f 42 20 27 25 name NOT GLOB '%
1410: 73 27 22 0a 20 20 20 20 22 20 4f 52 44 45 52 20 s'". " ORDER
1420: 42 59 20 74 61 67 6e 61 6d 65 22 2c 20 72 69 64 BY tagname", rid
1430: 2c 20 72 69 64 2c 20 72 69 64 2c 20 7a 4e 6f 74 , rid, rid, zNot
1440: 47 6c 6f 62 0a 20 20 29 3b 0a 20 20 77 68 69 6c Glob. );. whil
1450: 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d e( db_step(&q)==
1460: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 SQLITE_ROW ){.
1470: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 const char *zT
1480: 61 67 6e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 agname = db_colu
1490: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a mn_text(&q, 1);.
14a0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
14b0: 7a 53 72 63 55 75 69 64 20 3d 20 64 62 5f 63 6f zSrcUuid = db_co
14c0: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 29 lumn_text(&q, 2)
14d0: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
14e0: 20 2a 7a 56 61 6c 75 65 20 3d 20 64 62 5f 63 6f *zValue = db_co
14f0: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 lumn_text(&q, 3)
1500: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
1510: 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c *zDate = db_col
1520: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 34 29 3b umn_text(&q, 4);
1530: 0a 20 20 20 20 69 6e 74 20 74 61 67 74 79 70 65 . int tagtype
1540: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 = db_column_int
1550: 28 26 71 2c 20 35 29 3b 0a 20 20 20 20 63 6f 6e (&q, 5);. con
1560: 73 74 20 63 68 61 72 20 2a 7a 4f 72 69 67 55 75 st char *zOrigUu
1570: 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 id = db_column_t
1580: 65 78 74 28 26 71 2c 20 36 29 3b 0a 20 20 20 20 ext(&q, 6);.
1590: 63 6e 74 2b 2b 3b 0a 20 20 20 20 69 66 28 20 63 cnt++;. if( c
15a0: 6e 74 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 40 nt==1 ){. @
15b0: 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 63 <div class="sec
15c0: 74 69 6f 6e 22 3e 54 61 67 73 20 41 6e 64 20 50 tion">Tags And P
15d0: 72 6f 70 65 72 74 69 65 73 3c 2f 64 69 76 3e 0a roperties</div>.
15e0: 20 20 20 20 20 20 40 20 3c 75 6c 3e 0a 20 20 20 @ <ul>.
15f0: 20 7d 0a 20 20 20 20 40 20 3c 6c 69 3e 0a 20 20 }. @ <li>.
1600: 20 20 69 66 28 20 74 61 67 74 79 70 65 3d 3d 30 if( tagtype==0
1610: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 62 3e 3c ){. @ <b><
1620: 73 3e 25 68 28 7a 54 61 67 6e 61 6d 65 29 3c 2f s>%h(zTagname)</
1630: 73 3e 3c 2f 62 3e 20 63 61 6e 63 65 6c 6c 65 64 s></b> cancelled
1640: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a . }else if( z
1650: 56 61 6c 75 65 20 29 7b 0a 20 20 20 20 20 20 40 Value ){. @
1660: 20 3c 62 3e 25 68 28 7a 54 61 67 6e 61 6d 65 29 <b>%h(zTagname)
1670: 3d 25 68 28 7a 56 61 6c 75 65 29 3c 2f 62 3e 0a =%h(zValue)</b>.
1680: 20 20 20 20 7d 65 6c 73 65 20 7b 0a 20 20 20 20 }else {.
1690: 20 20 40 20 3c 62 3e 25 68 28 7a 54 61 67 6e 61 @ <b>%h(zTagna
16a0: 6d 65 29 3c 2f 62 3e 0a 20 20 20 20 7d 0a 20 20 me)</b>. }.
16b0: 20 20 69 66 28 20 74 61 67 74 79 70 65 3d 3d 32 if( tagtype==2
16c0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 4f ){. if( zO
16d0: 72 69 67 55 75 69 64 20 26 26 20 7a 4f 72 69 67 rigUuid && zOrig
16e0: 55 75 69 64 5b 30 5d 20 29 7b 0a 20 20 20 20 20 Uuid[0] ){.
16f0: 20 20 20 40 20 69 6e 68 65 72 69 74 65 64 20 66 @ inherited f
1700: 72 6f 6d 0a 20 20 20 20 20 20 20 20 68 79 70 65 rom. hype
1710: 72 6c 69 6e 6b 5f 74 6f 5f 75 75 69 64 28 7a 4f rlink_to_uuid(zO
1720: 72 69 67 55 75 69 64 29 3b 0a 20 20 20 20 20 20 rigUuid);.
1730: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 40 }else{. @
1740: 20 70 72 6f 70 61 67 61 74 65 73 20 74 6f 20 64 propagates to d
1750: 65 73 63 65 6e 64 61 6e 74 73 0a 20 20 20 20 20 escendants.
1760: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 }. }. if(
1770: 20 7a 53 72 63 55 75 69 64 20 26 26 20 7a 53 72 zSrcUuid && zSr
1780: 63 55 75 69 64 5b 30 5d 20 29 7b 0a 20 20 20 20 cUuid[0] ){.
1790: 20 20 69 66 28 20 74 61 67 74 79 70 65 3d 3d 30 if( tagtype==0
17a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 62 79 ){. @ by
17b0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 . }else{.
17c0: 20 20 20 20 20 20 40 20 61 64 64 65 64 20 62 79 @ added by
17d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 68 . }. h
17e0: 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 75 69 64 yperlink_to_uuid
17f0: 28 7a 53 72 63 55 75 69 64 29 3b 0a 20 20 20 20 (zSrcUuid);.
1800: 20 20 40 20 6f 6e 0a 20 20 20 20 20 20 68 79 70 @ on. hyp
1810: 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a erlink_to_date(z
1820: 44 61 74 65 2c 30 29 3b 0a 20 20 20 20 7d 0a 20 Date,0);. }.
1830: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
1840: 28 26 71 29 3b 0a 20 20 69 66 28 20 63 6e 74 20 (&q);. if( cnt
1850: 29 7b 0a 20 20 20 20 40 20 3c 2f 75 6c 3e 0a 20 ){. @ </ul>.
1860: 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 }.}.../*.** App
1870: 65 6e 64 20 74 68 65 20 64 69 66 66 65 72 65 6e end the differen
1880: 63 65 20 62 65 74 77 65 65 6e 20 74 77 6f 20 52 ce between two R
1890: 49 44 73 20 74 6f 20 74 68 65 20 6f 75 74 70 75 IDs to the outpu
18a0: 74 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 t.*/.static void
18b0: 20 61 70 70 65 6e 64 5f 64 69 66 66 28 69 6e 74 append_diff(int
18c0: 20 66 72 6f 6d 69 64 2c 20 69 6e 74 20 74 6f 69 fromid, int toi
18d0: 64 29 7b 0a 20 20 42 6c 6f 62 20 66 72 6f 6d 2c d){. Blob from,
18e0: 20 74 6f 2c 20 6f 75 74 3b 0a 20 20 63 6f 6e 74 to, out;. cont
18f0: 65 6e 74 5f 67 65 74 28 66 72 6f 6d 69 64 2c 20 ent_get(fromid,
1900: 26 66 72 6f 6d 29 3b 0a 20 20 63 6f 6e 74 65 6e &from);. conten
1910: 74 5f 67 65 74 28 74 6f 69 64 2c 20 26 74 6f 29 t_get(toid, &to)
1920: 3b 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 6f ;. blob_zero(&o
1930: 75 74 29 3b 0a 20 20 74 65 78 74 5f 64 69 66 66 ut);. text_diff
1940: 28 26 66 72 6f 6d 2c 20 26 74 6f 2c 20 26 6f 75 (&from, &to, &ou
1950: 74 2c 20 35 29 3b 0a 20 20 40 20 25 68 28 62 6c t, 5);. @ %h(bl
1960: 6f 62 5f 73 74 72 28 26 6f 75 74 29 29 0a 20 20 ob_str(&out)).
1970: 62 6c 6f 62 5f 72 65 73 65 74 28 26 66 72 6f 6d blob_reset(&from
1980: 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 );. blob_reset(
1990: 26 74 6f 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 &to);. blob_res
19a0: 65 74 28 26 6f 75 74 29 3b 20 20 0a 7d 0a 0a 0a et(&out); .}...
19b0: 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 76 /*.** WEBPAGE: v
19c0: 69 6e 66 6f 0a 2a 2a 20 57 45 42 50 41 47 45 3a info.** WEBPAGE:
19d0: 20 63 69 0a 2a 2a 20 55 52 4c 3a 20 20 2f 63 69 ci.** URL: /ci
19e0: 3f 6e 61 6d 65 3d 52 49 44 7c 41 52 54 49 46 41 ?name=RID|ARTIFA
19f0: 43 54 49 44 0a 2a 2a 0a 2a 2a 20 44 69 73 70 6c CTID.**.** Displ
1a00: 61 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 ay information a
1a10: 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61 bout a particula
1a20: 72 20 63 68 65 63 6b 2d 69 6e 2e 0a 2a 2f 0a 76 r check-in..*/.v
1a30: 6f 69 64 20 63 69 5f 70 61 67 65 28 76 6f 69 64 oid ci_page(void
1a40: 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 69 ){. Stmt q;. i
1a50: 6e 74 20 72 69 64 3b 0a 20 20 69 6e 74 20 69 73 nt rid;. int is
1a60: 4c 65 61 66 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 Leaf;.. login_c
1a70: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 heck_credentials
1a80: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 ();. if( !g.okR
1a90: 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 ead ){ login_nee
1aa0: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
1ab0: 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f . rid = name_to
1ac0: 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c 22 _rid(PD("name","
1ad0: 30 22 29 29 3b 0a 20 20 69 66 28 20 72 69 64 3d 0"));. if( rid=
1ae0: 3d 30 20 29 7b 0a 20 20 20 20 73 74 79 6c 65 5f =0 ){. style_
1af0: 68 65 61 64 65 72 28 22 43 68 65 63 6b 2d 69 6e header("Check-in
1b00: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 45 72 72 Information Err
1b10: 6f 72 22 29 3b 0a 20 20 20 20 40 20 4e 6f 20 73 or");. @ No s
1b20: 75 63 68 20 6f 62 6a 65 63 74 3a 20 25 68 28 67 uch object: %h(g
1b30: 2e 61 72 67 76 5b 32 5d 29 0a 20 20 20 20 73 74 .argv[2]). st
1b40: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 20 20 yle_footer();.
1b50: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 return;. }.
1b60: 69 73 4c 65 61 66 20 3d 20 21 64 62 5f 65 78 69 isLeaf = !db_exi
1b70: 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 sts("SELECT 1 FR
1b80: 4f 4d 20 70 6c 69 6e 6b 20 57 48 45 52 45 20 70 OM plink WHERE p
1b90: 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 id=%d", rid);.
1ba0: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 0a db_prepare(&q, .
1bb0: 20 20 20 20 20 22 53 45 4c 45 43 54 20 75 75 69 "SELECT uui
1bc0: 64 2c 20 64 61 74 65 74 69 6d 65 28 6d 74 69 6d d, datetime(mtim
1bd0: 65 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 2c e, 'localtime'),
1be0: 20 75 73 65 72 2c 20 63 6f 6d 6d 65 6e 74 22 0a user, comment".
1bf0: 20 20 20 20 20 22 20 20 46 52 4f 4d 20 62 6c 6f " FROM blo
1c00: 62 2c 20 65 76 65 6e 74 22 0a 20 20 20 20 20 22 b, event". "
1c10: 20 57 48 45 52 45 20 62 6c 6f 62 2e 72 69 64 3d WHERE blob.rid=
1c20: 25 64 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 %d". " AND
1c30: 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d 25 64 22 event.objid=%d"
1c40: 2c 0a 20 20 20 20 20 72 69 64 2c 20 72 69 64 0a ,. rid, rid.
1c50: 20 20 29 3b 0a 20 20 69 66 28 20 64 62 5f 73 74 );. if( db_st
1c60: 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 ep(&q)==SQLITE_R
1c70: 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 OW ){. const
1c80: 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 char *zUuid = db
1c90: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
1ca0: 20 30 29 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 0);. char *z
1cb0: 54 69 74 6c 65 20 3d 20 6d 70 72 69 6e 74 66 28 Title = mprintf(
1cc0: 22 43 68 65 63 6b 2d 69 6e 20 5b 25 2e 31 30 73 "Check-in [%.10s
1cd0: 5d 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 ]", zUuid);.
1ce0: 63 68 61 72 20 2a 7a 45 55 73 65 72 2c 20 2a 7a char *zEUser, *z
1cf0: 45 43 6f 6d 6d 65 6e 74 3b 0a 20 20 20 20 63 6f EComment;. co
1d00: 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 3b nst char *zUser;
1d10: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
1d20: 2a 7a 43 6f 6d 6d 65 6e 74 3b 0a 20 20 20 20 63 *zComment;. c
1d30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 onst char *zDate
1d40: 3b 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 ;. style_head
1d50: 65 72 28 7a 54 69 74 6c 65 29 3b 0a 20 20 20 20 er(zTitle);.
1d60: 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f 75 73 5f login_anonymous_
1d70: 61 76 61 69 6c 61 62 6c 65 28 29 3b 0a 20 20 20 available();.
1d80: 20 66 72 65 65 28 7a 54 69 74 6c 65 29 3b 0a 20 free(zTitle);.
1d90: 20 20 20 7a 45 55 73 65 72 20 3d 20 64 62 5f 74 zEUser = db_t
1da0: 65 78 74 28 30 2c 0a 20 20 20 20 20 20 20 20 20 ext(0,.
1db0: 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 "SELEC
1dc0: 54 20 76 61 6c 75 65 20 46 52 4f 4d 20 74 61 67 T value FROM tag
1dd0: 78 72 65 66 20 57 48 45 52 45 20 74 61 67 69 64 xref WHERE tagid
1de0: 3d 25 64 20 41 4e 44 20 72 69 64 3d 25 64 22 2c =%d AND rid=%d",
1df0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1e00: 20 20 20 20 20 54 41 47 5f 55 53 45 52 2c 20 72 TAG_USER, r
1e10: 69 64 29 3b 0a 20 20 20 20 7a 45 43 6f 6d 6d 65 id);. zEComme
1e20: 6e 74 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 nt = db_text(0,
1e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1e40: 20 20 20 20 22 53 45 4c 45 43 54 20 76 61 6c 75 "SELECT valu
1e50: 65 20 46 52 4f 4d 20 74 61 67 78 72 65 66 20 57 e FROM tagxref W
1e60: 48 45 52 45 20 74 61 67 69 64 3d 25 64 20 41 4e HERE tagid=%d AN
1e70: 44 20 72 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 D rid=%d",.
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 TA
1e90: 47 5f 43 4f 4d 4d 45 4e 54 2c 20 72 69 64 29 3b G_COMMENT, rid);
1ea0: 0a 20 20 20 20 7a 55 73 65 72 20 3d 20 64 62 5f . zUser = db_
1eb0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
1ec0: 32 29 3b 0a 20 20 20 20 7a 43 6f 6d 6d 65 6e 74 2);. zComment
1ed0: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
1ee0: 74 28 26 71 2c 20 33 29 3b 0a 20 20 20 20 7a 44 t(&q, 3);. zD
1ef0: 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ate = db_column_
1f00: 74 65 78 74 28 26 71 2c 31 29 3b 0a 20 20 20 20 text(&q,1);.
1f10: 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 @ <div class="se
1f20: 63 74 69 6f 6e 22 3e 4f 76 65 72 76 69 65 77 3c ction">Overview<
1f30: 2f 64 69 76 3e 0a 20 20 20 20 40 20 3c 70 3e 3c /div>. @ <p><
1f40: 74 61 62 6c 65 20 63 6c 61 73 73 3d 22 6c 61 62 table class="lab
1f50: 65 6c 2d 76 61 6c 75 65 22 3e 0a 20 20 20 20 40 el-value">. @
1f60: 20 3c 74 72 3e 3c 74 68 3e 53 48 41 31 26 6e 62 <tr><th>SHA1&nb
1f70: 73 70 3b 48 61 73 68 3a 3c 2f 74 68 3e 3c 74 64 sp;Hash:</th><td
1f80: 3e 25 73 28 7a 55 75 69 64 29 0a 20 20 20 20 69 >%s(zUuid). i
1f90: 66 28 20 67 2e 6f 6b 53 65 74 75 70 20 29 7b 0a f( g.okSetup ){.
1fa0: 20 20 20 20 20 20 40 20 28 52 65 63 6f 72 64 20 @ (Record
1fb0: 49 44 3a 20 25 64 28 72 69 64 29 29 0a 20 20 20 ID: %d(rid)).
1fc0: 20 7d 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f }. @ </td></
1fd0: 74 72 3e 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 tr>. @ <tr><t
1fe0: 68 3e 44 61 74 65 3a 3c 2f 74 68 3e 3c 74 64 3e h>Date:</th><td>
1ff0: 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 . hyperlink_t
2000: 6f 5f 64 61 74 65 28 7a 44 61 74 65 2c 20 22 3c o_date(zDate, "<
2010: 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 20 /td></tr>");.
2020: 20 69 66 28 20 7a 45 55 73 65 72 20 29 7b 0a 20 if( zEUser ){.
2030: 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 45 @ <tr><th>E
2040: 64 69 74 65 64 26 6e 62 73 70 3b 55 73 65 72 3a dited User:
2050: 3c 2f 74 64 3e 3c 74 64 3e 0a 20 20 20 20 20 20 </td><td>.
2060: 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 hyperlink_to_use
2070: 72 28 7a 45 55 73 65 72 2c 7a 44 61 74 65 2c 22 r(zEUser,zDate,"
2080: 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 </td></tr>");.
2090: 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 4f 72 @ <tr><th>Or
20a0: 69 67 69 6e 61 6c 26 6e 62 73 70 3b 55 73 65 72 iginal User
20b0: 3a 3c 2f 74 68 3e 3c 74 64 3e 0a 20 20 20 20 20 :</th><td>.
20c0: 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 hyperlink_to_us
20d0: 65 72 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 er(zUser,zDate,"
20e0: 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 </td></tr>");.
20f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 }else{. @
2100: 20 3c 74 72 3e 3c 74 68 3e 55 73 65 72 3a 3c 2f <tr><th>User:</
2110: 74 64 3e 3c 74 64 3e 0a 20 20 20 20 20 20 68 79 td><td>. hy
2120: 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 28 perlink_to_user(
2130: 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 3c 2f 74 zUser,zDate,"</t
2140: 64 3e 3c 2f 74 72 3e 22 29 3b 0a 20 20 20 20 7d d></tr>");. }
2150: 0a 20 20 20 20 69 66 28 20 7a 45 43 6f 6d 6d 65 . if( zEComme
2160: 6e 74 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 74 nt ){. @ <t
2170: 72 3e 3c 74 68 3e 45 64 69 74 65 64 26 6e 62 73 r><th>Edited&nbs
2180: 70 3b 43 6f 6d 6d 65 6e 74 3a 3c 2f 74 68 3e 3c p;Comment:</th><
2190: 74 64 3e 25 77 28 7a 45 43 6f 6d 6d 65 6e 74 29 td>%w(zEComment)
21a0: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 20 </td></tr>.
21b0: 20 40 20 3c 74 72 3e 3c 74 68 3e 4f 72 69 67 69 @ <tr><th>Origi
21c0: 6e 61 6c 26 6e 62 73 70 3b 43 6f 6d 6d 65 6e 74 nal Comment
21d0: 3a 3c 2f 74 68 3e 3c 74 64 3e 25 77 28 7a 43 6f :</th><td>%w(zCo
21e0: 6d 6d 65 6e 74 29 3c 2f 74 64 3e 3c 2f 74 72 3e mment)</td></tr>
21f0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
2200: 20 20 40 20 3c 74 72 3e 3c 74 68 3e 43 6f 6d 6d @ <tr><th>Comm
2210: 65 6e 74 3a 3c 2f 74 68 3e 3c 74 64 3e 25 77 28 ent:</th><td>%w(
2220: 7a 43 6f 6d 6d 65 6e 74 29 3c 2f 74 64 3e 3c 2f zComment)</td></
2230: 74 72 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 tr>. }. @
2240: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 69 </td></tr>. i
2250: 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a f( g.okAdmin ){.
2260: 20 20 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 db_prepare
2270: 28 26 71 2c 20 0a 20 20 20 20 20 20 20 20 20 22 (&q, . "
2280: 53 45 4c 45 43 54 20 72 63 76 66 72 6f 6d 2e 69 SELECT rcvfrom.i
2290: 70 61 64 64 72 2c 20 75 73 65 72 2e 6c 6f 67 69 paddr, user.logi
22a0: 6e 2c 20 64 61 74 65 74 69 6d 65 28 72 63 76 66 n, datetime(rcvf
22b0: 72 6f 6d 2e 6d 74 69 6d 65 29 22 0a 20 20 20 20 rom.mtime)".
22c0: 20 20 20 20 20 22 20 20 46 52 4f 4d 20 62 6c 6f " FROM blo
22d0: 62 20 4a 4f 49 4e 20 72 63 76 66 72 6f 6d 20 55 b JOIN rcvfrom U
22e0: 53 49 4e 47 28 72 63 76 69 64 29 20 4c 45 46 54 SING(rcvid) LEFT
22f0: 20 4a 4f 49 4e 20 75 73 65 72 20 55 53 49 4e 47 JOIN user USING
2300: 28 75 69 64 29 22 0a 20 20 20 20 20 20 20 20 20 (uid)".
2310: 22 20 57 48 45 52 45 20 62 6c 6f 62 2e 72 69 64 " WHERE blob.rid
2320: 3d 25 64 22 2c 0a 20 20 20 20 20 20 20 20 20 72 =%d",. r
2330: 69 64 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 id. );.
2340: 20 20 69 66 28 20 64 62 5f 73 74 65 70 28 26 71 if( db_step(&q
2350: 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b )==SQLITE_ROW ){
2360: 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 . const c
2370: 68 61 72 20 2a 7a 49 70 41 64 64 72 20 3d 20 64 har *zIpAddr = d
2380: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
2390: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 63 6f , 0);. co
23a0: 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 nst char *zUser
23b0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
23c0: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 (&q, 1);.
23d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 const char *zDa
23e0: 74 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 te = db_column_t
23f0: 65 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 ext(&q, 2);.
2400: 20 20 20 20 69 66 28 20 7a 55 73 65 72 3d 3d 30 if( zUser==0
2410: 20 7c 7c 20 7a 55 73 65 72 5b 30 5d 3d 3d 30 20 || zUser[0]==0
2420: 29 20 7a 55 73 65 72 20 3d 20 22 75 6e 6b 6e 6f ) zUser = "unkno
2430: 77 6e 22 3b 0a 20 20 20 20 20 20 20 20 40 20 3c wn";. @ <
2440: 74 72 3e 3c 74 68 3e 52 65 63 65 69 76 65 64 26 tr><th>Received&
2450: 6e 62 73 70 3b 46 72 6f 6d 3a 3c 2f 74 68 3e 0a nbsp;From:</th>.
2460: 20 20 20 20 20 20 20 20 40 20 3c 74 64 3e 25 68 @ <td>%h
2470: 28 7a 55 73 65 72 29 20 40 20 25 68 28 7a 49 70 (zUser) @ %h(zIp
2480: 41 64 64 72 29 20 6f 6e 20 25 73 28 7a 44 61 74 Addr) on %s(zDat
2490: 65 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 e)</td></tr>.
24a0: 20 20 20 7d 0a 20 20 20 20 20 20 64 62 5f 66 69 }. db_fi
24b0: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 20 nalize(&q);.
24c0: 7d 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 }. if( g.okHi
24d0: 73 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 63 story ){. c
24e0: 68 61 72 20 2a 7a 53 68 6f 72 74 55 75 69 64 20 har *zShortUuid
24f0: 3d 20 6d 70 72 69 6e 74 66 28 22 25 2e 31 30 73 = mprintf("%.10s
2500: 22 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 20 ", zUuid);.
2510: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 72 const char *zPr
2520: 6f 6a 4e 61 6d 65 20 3d 20 64 62 5f 67 65 74 28 ojName = db_get(
2530: 22 70 72 6f 6a 65 63 74 2d 6e 61 6d 65 22 2c 20 "project-name",
2540: 22 75 6e 6e 61 6d 65 64 22 29 3b 0a 20 20 20 20 "unnamed");.
2550: 20 20 40 20 3c 74 72 3e 3c 74 68 3e 54 69 6d 65 @ <tr><th>Time
2560: 6c 69 6e 65 73 3a 3c 2f 74 68 3e 3c 74 64 3e 0a lines:</th><td>.
2570: 20 20 20 20 20 20 40 20 20 20 20 3c 61 20 68 72 @ <a hr
2580: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
2590: 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 25 64 L)/timeline?p=%d
25a0: 28 72 69 64 29 22 3e 61 6e 63 65 73 74 6f 72 73 (rid)">ancestors
25b0: 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 20 20 </a>. @
25c0: 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e | <a href="%s(g.
25d0: 7a 42 61 73 65 55 52 4c 29 2f 74 69 6d 65 6c 69 zBaseURL)/timeli
25e0: 6e 65 3f 64 3d 25 64 28 72 69 64 29 22 3e 64 65 ne?d=%d(rid)">de
25f0: 73 63 65 6e 64 61 6e 74 73 3c 2f 61 3e 0a 20 20 scendants</a>.
2600: 20 20 20 20 40 20 20 20 20 7c 20 3c 61 20 68 72 @ | <a hr
2610: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
2620: 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f 64 3d 25 64 L)/timeline?d=%d
2630: 28 72 69 64 29 26 70 3d 25 64 28 72 69 64 29 22 (rid)&p=%d(rid)"
2640: 3e 62 6f 74 68 3c 2f 61 3e 0a 20 20 20 20 20 20 >both</a>.
2650: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 20 22 db_prepare(&q, "
2660: 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 61 SELECT substr(ta
2670: 67 2e 74 61 67 6e 61 6d 65 2c 35 29 20 46 52 4f g.tagname,5) FRO
2680: 4d 20 74 61 67 78 72 65 66 2c 20 74 61 67 20 22 M tagxref, tag "
2690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
26a0: 20 20 20 20 20 20 22 20 57 48 45 52 45 20 72 69 " WHERE ri
26b0: 64 3d 25 64 20 41 4e 44 20 74 61 67 74 79 70 65 d=%d AND tagtype
26c0: 3e 30 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 >0 ".
26d0: 20 20 20 20 20 20 20 20 20 20 22 20 20 20 41 4e " AN
26e0: 44 20 74 61 67 2e 74 61 67 69 64 3d 74 61 67 78 D tag.tagid=tagx
26f0: 72 65 66 2e 74 61 67 69 64 20 22 0a 20 20 20 20 ref.tagid ".
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2710: 20 22 20 20 20 41 4e 44 20 2b 74 61 67 2e 74 61 " AND +tag.ta
2720: 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 79 6d 2d gname GLOB 'sym-
2730: 2a 27 22 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 *'", rid);.
2740: 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 while( db_step(
2750: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 &q)==SQLITE_ROW
2760: 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 ){. const
2770: 20 63 68 61 72 20 2a 7a 54 61 67 4e 61 6d 65 20 char *zTagName
2780: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
2790: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 (&q, 0);.
27a0: 20 40 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 @ | <a href="%
27b0: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 74 69 s(g.zBaseURL)/ti
27c0: 6d 65 6c 69 6e 65 3f 74 3d 25 54 28 7a 54 61 67 meline?t=%T(zTag
27d0: 4e 61 6d 65 29 22 3e 25 68 28 7a 54 61 67 4e 61 Name)">%h(zTagNa
27e0: 6d 65 29 3c 2f 61 3e 0a 20 20 20 20 20 20 7d 0a me)</a>. }.
27f0: 20 20 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a db_finaliz
2800: 65 28 26 71 29 3b 0a 20 20 20 20 20 20 40 20 3c e(&q);. @ <
2810: 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 20 20 /td></tr>.
2820: 40 20 3c 74 72 3e 3c 74 68 3e 4f 74 68 65 72 26 @ <tr><th>Other&
2830: 6e 62 73 70 3b 4c 69 6e 6b 73 3a 3c 2f 74 68 3e nbsp;Links:</th>
2840: 0a 20 20 20 20 20 20 40 20 20 20 3c 74 64 3e 0a . @ <td>.
2850: 20 20 20 20 20 20 40 20 20 20 20 20 3c 61 20 68 @ <a h
2860: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
2870: 52 4c 29 2f 64 69 72 3f 63 69 3d 25 73 28 7a 53 RL)/dir?ci=%s(zS
2880: 68 6f 72 74 55 75 69 64 29 22 3e 66 69 6c 65 73 hortUuid)">files
2890: 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 20 20 </a>. @
28a0: 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 | <a href="%s(g
28b0: 2e 7a 42 61 73 65 55 52 4c 29 2f 7a 69 70 2f 25 .zBaseURL)/zip/%
28c0: 73 28 7a 50 72 6f 6a 4e 61 6d 65 29 2d 25 73 28 s(zProjName)-%s(
28d0: 7a 53 68 6f 72 74 55 75 69 64 29 2e 7a 69 70 3f zShortUuid).zip?
28e0: 75 75 69 64 3d 25 73 28 7a 55 75 69 64 29 22 3e uuid=%s(zUuid)">
28f0: 0a 20 20 20 20 20 20 40 20 20 20 20 20 20 20 20 . @
2900: 20 5a 49 50 20 61 72 63 68 69 76 65 3c 2f 61 3e ZIP archive</a>
2910: 0a 20 20 20 20 20 20 40 20 20 20 20 20 7c 20 3c . @ | <
2920: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
2930: 73 65 55 52 4c 29 2f 61 72 74 69 66 61 63 74 2f seURL)/artifact/
2940: 25 64 28 72 69 64 29 22 3e 6d 61 6e 69 66 65 73 %d(rid)">manifes
2950: 74 3c 2f 61 3e 0a 20 20 20 20 20 20 69 66 28 20 t</a>. if(
2960: 67 2e 6f 6b 57 72 69 74 65 20 29 7b 0a 20 20 20 g.okWrite ){.
2970: 20 20 20 20 20 40 20 20 20 20 20 7c 20 3c 61 20 @ | <a
2980: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
2990: 55 52 4c 29 2f 63 69 5f 65 64 69 74 3f 72 3d 25 URL)/ci_edit?r=%
29a0: 64 28 72 69 64 29 22 3e 65 64 69 74 3c 2f 61 3e d(rid)">edit</a>
29b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 40 . }. @
29c0: 20 20 20 3c 2f 74 64 3e 0a 20 20 20 20 20 20 40 </td>. @
29d0: 20 3c 2f 74 72 3e 0a 20 20 20 20 20 20 66 72 65 </tr>. fre
29e0: 65 28 7a 53 68 6f 72 74 55 75 69 64 29 3b 0a 20 e(zShortUuid);.
29f0: 20 20 20 7d 0a 20 20 20 20 40 20 3c 2f 74 61 62 }. @ </tab
2a00: 6c 65 3e 3c 2f 70 3e 0a 20 20 7d 65 6c 73 65 7b le></p>. }else{
2a10: 0a 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65 . style_heade
2a20: 72 28 22 43 68 65 63 6b 2d 69 6e 20 49 6e 66 6f r("Check-in Info
2a30: 72 6d 61 74 69 6f 6e 22 29 3b 0a 20 20 20 20 6c rmation");. l
2a40: 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f 75 73 5f 61 ogin_anonymous_a
2a50: 76 61 69 6c 61 62 6c 65 28 29 3b 0a 20 20 7d 0a vailable();. }.
2a60: 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 db_finalize(&q
2a70: 29 3b 0a 20 20 73 68 6f 77 54 61 67 73 28 72 69 );. showTags(ri
2a80: 64 2c 20 22 22 29 3b 0a 20 20 40 20 3c 64 69 76 d, "");. @ <div
2a90: 20 63 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 class="section"
2aa0: 3e 43 68 61 6e 67 65 73 3c 2f 64 69 76 3e 0a 20 >Changes</div>.
2ab0: 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a db_prepare(&q,.
2ac0: 20 20 20 20 20 22 53 45 4c 45 43 54 20 70 69 64 "SELECT pid
2ad0: 2c 20 66 69 64 2c 20 6e 61 6d 65 2c 20 73 75 62 , fid, name, sub
2ae0: 73 74 72 28 61 2e 75 75 69 64 2c 31 2c 31 30 29 str(a.uuid,1,10)
2af0: 2c 20 73 75 62 73 74 72 28 62 2e 75 75 69 64 2c , substr(b.uuid,
2b00: 31 2c 31 30 29 22 0a 20 20 20 20 20 22 20 20 46 1,10)". " F
2b10: 52 4f 4d 20 6d 6c 69 6e 6b 20 4a 4f 49 4e 20 66 ROM mlink JOIN f
2b20: 69 6c 65 6e 61 6d 65 20 4f 4e 20 66 69 6c 65 6e ilename ON filen
2b30: 61 6d 65 2e 66 6e 69 64 3d 6d 6c 69 6e 6b 2e 66 ame.fnid=mlink.f
2b40: 6e 69 64 22 0a 20 20 20 20 20 22 20 20 20 20 20 nid". "
2b50: 20 20 20 20 4c 45 46 54 20 4a 4f 49 4e 20 62 6c LEFT JOIN bl
2b60: 6f 62 20 61 20 4f 4e 20 61 2e 72 69 64 3d 70 69 ob a ON a.rid=pi
2b70: 64 22 0a 20 20 20 20 20 22 20 20 20 20 20 20 20 d". "
2b80: 20 20 4c 45 46 54 20 4a 4f 49 4e 20 62 6c 6f 62 LEFT JOIN blob
2b90: 20 62 20 4f 4e 20 62 2e 72 69 64 3d 66 69 64 22 b ON b.rid=fid"
2ba0: 0a 20 20 20 20 20 22 20 57 48 45 52 45 20 6d 6c . " WHERE ml
2bb0: 69 6e 6b 2e 6d 69 64 3d 25 64 22 0a 20 20 20 20 ink.mid=%d".
2bc0: 20 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 " ORDER BY name
2bd0: 22 2c 0a 20 20 20 20 20 72 69 64 0a 20 20 29 3b ",. rid. );
2be0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 . while( db_ste
2bf0: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
2c00: 57 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 69 64 W ){. int pid
2c10: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 = db_column_int
2c20: 28 26 71 2c 30 29 3b 0a 20 20 20 20 69 6e 74 20 (&q,0);. int
2c30: 66 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f fid = db_column_
2c40: 69 6e 74 28 26 71 2c 31 29 3b 0a 20 20 20 20 63 int(&q,1);. c
2c50: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 onst char *zName
2c60: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
2c70: 74 28 26 71 2c 32 29 3b 0a 20 20 20 20 63 6f 6e t(&q,2);. con
2c80: 73 74 20 63 68 61 72 20 2a 7a 4f 6c 64 20 3d 20 st char *zOld =
2c90: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
2ca0: 71 2c 33 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 q,3);. const
2cb0: 63 68 61 72 20 2a 7a 4e 65 77 20 3d 20 64 62 5f char *zNew = db_
2cc0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 34 column_text(&q,4
2cd0: 29 3b 0a 20 20 20 20 69 66 28 20 7a 4f 6c 64 20 );. if( zOld
2ce0: 26 26 20 7a 4e 65 77 20 29 7b 0a 20 20 20 20 20 && zNew ){.
2cf0: 20 40 20 3c 70 3e 4d 6f 64 69 66 69 65 64 20 3c @ <p>Modified <
2d00: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
2d10: 73 65 55 52 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d seURL)/finfo?nam
2d20: 65 3d 25 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 e=%T(zName)">%h(
2d30: 7a 4e 61 6d 65 29 3c 2f 61 3e 0a 20 20 20 20 20 zName)</a>.
2d40: 20 40 20 66 72 6f 6d 20 3c 61 20 68 72 65 66 3d @ from <a href=
2d50: 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f "%s(g.zBaseURL)/
2d60: 61 72 74 69 66 61 63 74 2f 25 73 28 7a 4f 6c 64 artifact/%s(zOld
2d70: 29 22 3e 5b 25 73 28 7a 4f 6c 64 29 5d 3c 2f 61 )">[%s(zOld)]</a
2d80: 3e 0a 20 20 20 20 20 20 40 20 74 6f 20 3c 61 20 >. @ to <a
2d90: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
2da0: 55 52 4c 29 2f 61 72 74 69 66 61 63 74 2f 25 73 URL)/artifact/%s
2db0: 28 7a 4e 65 77 29 22 3e 5b 25 73 28 7a 4e 65 77 (zNew)">[%s(zNew
2dc0: 29 5d 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 20 20 7d )]</a></p>. }
2dd0: 65 6c 73 65 20 69 66 28 20 7a 4f 6c 64 20 29 7b else if( zOld ){
2de0: 0a 20 20 20 20 20 20 40 20 3c 70 3e 44 65 6c 65 . @ <p>Dele
2df0: 74 65 64 20 3c 61 20 68 72 65 66 3d 22 25 73 28 ted <a href="%s(
2e00: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 69 6e 66 g.zBaseURL)/finf
2e10: 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 6d 65 29 o?name=%T(zName)
2e20: 22 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f 61 3e 0a ">%h(zName)</a>.
2e30: 20 20 20 20 20 20 40 20 76 65 72 73 69 6f 6e 20 @ version
2e40: 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 <a href="%s(g.zB
2e50: 61 73 65 55 52 4c 29 2f 61 72 74 69 66 61 63 74 aseURL)/artifact
2e60: 2f 25 73 28 7a 4f 6c 64 29 22 3e 5b 25 73 28 7a /%s(zOld)">[%s(z
2e70: 4f 6c 64 29 5d 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 Old)]</a></p>.
2e80: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 continue;.
2e90: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 }else{. @
2ea0: 20 3c 70 3e 41 64 64 65 64 20 3c 61 20 68 72 65 <p>Added <a hre
2eb0: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
2ec0: 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 )/finfo?name=%T(
2ed0: 7a 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 6d 65 zName)">%h(zName
2ee0: 29 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 76 65 )</a>. @ ve
2ef0: 72 73 69 6f 6e 20 3c 61 20 68 72 65 66 3d 22 25 rsion <a href="%
2f00: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 s(g.zBaseURL)/ar
2f10: 74 69 66 61 63 74 2f 25 73 28 7a 4e 65 77 29 22 tifact/%s(zNew)"
2f20: 3e 5b 25 73 28 7a 4e 65 77 29 5d 3c 2f 61 3e 3c >[%s(zNew)]</a><
2f30: 2f 70 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 /p>. }. @
2f40: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 <blockquote><pre
2f50: 3e 0a 20 20 20 20 61 70 70 65 6e 64 5f 64 69 66 >. append_dif
2f60: 66 28 70 69 64 2c 20 66 69 64 29 3b 0a 20 20 20 f(pid, fid);.
2f70: 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b @ </pre></block
2f80: 71 75 6f 74 65 3e 0a 20 20 7d 0a 20 20 64 62 5f quote>. }. db_
2f90: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
2fa0: 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a style_footer();.
2fb0: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 }../*.** WEBPAGE
2fc0: 3a 20 77 69 6e 66 6f 0a 2a 2a 20 55 52 4c 3a 20 : winfo.** URL:
2fd0: 20 2f 77 69 6e 66 6f 3f 6e 61 6d 65 3d 52 49 44 /winfo?name=RID
2fe0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 69 6e .**.** Return in
2ff0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 formation about
3000: 61 20 77 69 6b 69 20 70 61 67 65 2e 0a 2a 2f 0a a wiki page..*/.
3010: 76 6f 69 64 20 77 69 6e 66 6f 5f 70 61 67 65 28 void winfo_page(
3020: 76 6f 69 64 29 7b 0a 20 20 53 74 6d 74 20 71 3b void){. Stmt q;
3030: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 0a 20 20 6c . int rid;.. l
3040: 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 ogin_check_crede
3050: 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 ntials();. if(
3060: 21 67 2e 6f 6b 52 64 57 69 6b 69 20 29 7b 20 6c !g.okRdWiki ){ l
3070: 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 ogin_needed(); r
3080: 65 74 75 72 6e 3b 20 7d 0a 20 20 72 69 64 20 3d eturn; }. rid =
3090: 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 name_to_rid(PD(
30a0: 22 6e 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 20 "name","0"));.
30b0: 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20 20 if( rid==0 ){.
30c0: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 style_header("
30d0: 57 69 6b 69 20 50 61 67 65 20 49 6e 66 6f 72 6d Wiki Page Inform
30e0: 61 74 69 6f 6e 20 45 72 72 6f 72 22 29 3b 0a 20 ation Error");.
30f0: 20 20 20 40 20 4e 6f 20 73 75 63 68 20 6f 62 6a @ No such obj
3100: 65 63 74 3a 20 25 68 28 67 2e 61 72 67 76 5b 32 ect: %h(g.argv[2
3110: 5d 29 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f ]). style_foo
3120: 74 65 72 28 29 3b 0a 20 20 20 20 72 65 74 75 72 ter();. retur
3130: 6e 3b 0a 20 20 7d 0a 20 20 64 62 5f 70 72 65 70 n;. }. db_prep
3140: 61 72 65 28 26 71 2c 20 0a 20 20 20 20 20 22 53 are(&q, . "S
3150: 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 61 67 ELECT substr(tag
3160: 6e 61 6d 65 2c 20 36 2c 20 31 30 30 30 29 2c 20 name, 6, 1000),
3170: 75 75 69 64 2c 22 0a 20 20 20 20 20 22 20 20 20 uuid,". "
3180: 20 20 20 20 64 61 74 65 74 69 6d 65 28 65 76 65 datetime(eve
3190: 6e 74 2e 6d 74 69 6d 65 2c 20 27 6c 6f 63 61 6c nt.mtime, 'local
31a0: 74 69 6d 65 27 29 2c 20 75 73 65 72 22 0a 20 20 time'), user".
31b0: 20 20 20 22 20 20 46 52 4f 4d 20 74 61 67 78 72 " FROM tagxr
31c0: 65 66 2c 20 74 61 67 2c 20 62 6c 6f 62 2c 20 65 ef, tag, blob, e
31d0: 76 65 6e 74 22 0a 20 20 20 20 20 22 20 57 48 45 vent". " WHE
31e0: 52 45 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 RE tagxref.rid=%
31f0: 64 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 20 d". " AND
3200: 74 61 67 2e 74 61 67 69 64 3d 74 61 67 78 72 65 tag.tagid=tagxre
3210: 66 2e 74 61 67 69 64 22 0a 20 20 20 20 20 22 20 f.tagid". "
3220: 20 20 41 4e 44 20 74 61 67 2e 74 61 67 6e 61 6d AND tag.tagnam
3230: 65 20 4c 49 4b 45 20 27 77 69 6b 69 2d 25 25 27 e LIKE 'wiki-%%'
3240: 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 20 62 ". " AND b
3250: 6c 6f 62 2e 72 69 64 3d 25 64 22 0a 20 20 20 20 lob.rid=%d".
3260: 20 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e 6f " AND event.o
3270: 62 6a 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 72 bjid=%d",. r
3280: 69 64 2c 20 72 69 64 2c 20 72 69 64 0a 20 20 29 id, rid, rid. )
3290: 3b 0a 20 20 69 66 28 20 64 62 5f 73 74 65 70 28 ;. if( db_step(
32a0: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 &q)==SQLITE_ROW
32b0: 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 ){. const cha
32c0: 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 6f r *zName = db_co
32d0: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 lumn_text(&q, 0)
32e0: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
32f0: 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 63 6f 6c *zUuid = db_col
3300: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b umn_text(&q, 1);
3310: 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 69 74 6c . char *zTitl
3320: 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 57 69 6b e = mprintf("Wik
3330: 69 20 50 61 67 65 20 25 73 22 2c 20 7a 4e 61 6d i Page %s", zNam
3340: 65 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 e);. const ch
3350: 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 ar *zDate = db_c
3360: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 32 29 olumn_text(&q,2)
3370: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
3380: 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c *zUser = db_col
3390: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 33 29 3b 0a umn_text(&q,3);.
33a0: 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 style_header
33b0: 28 7a 54 69 74 6c 65 29 3b 0a 20 20 20 20 66 72 (zTitle);. fr
33c0: 65 65 28 7a 54 69 74 6c 65 29 3b 0a 20 20 20 20 ee(zTitle);.
33d0: 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f 75 73 5f login_anonymous_
33e0: 61 76 61 69 6c 61 62 6c 65 28 29 3b 0a 20 20 20 available();.
33f0: 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 @ <div class="s
3400: 65 63 74 69 6f 6e 22 3e 4f 76 65 72 76 69 65 77 ection">Overview
3410: 3c 2f 64 69 76 3e 0a 20 20 20 20 40 20 3c 70 3e </div>. @ <p>
3420: 3c 74 61 62 6c 65 20 63 6c 61 73 73 3d 22 6c 61 <table class="la
3430: 62 65 6c 2d 76 61 6c 75 65 22 3e 0a 20 20 20 20 bel-value">.
3440: 40 20 3c 74 72 3e 3c 74 68 3e 56 65 72 73 69 6f @ <tr><th>Versio
3450: 6e 3a 3c 2f 74 68 3e 3c 74 64 3e 25 73 28 7a 55 n:</th><td>%s(zU
3460: 75 69 64 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 uid)</td></tr>.
3470: 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 44 61 74 @ <tr><th>Dat
3480: 65 3a 3c 2f 74 68 3e 3c 74 64 3e 0a 20 20 20 20 e:</th><td>.
3490: 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 hyperlink_to_dat
34a0: 65 28 7a 44 61 74 65 2c 20 22 3c 2f 74 64 3e 3c e(zDate, "</td><
34b0: 2f 74 72 3e 22 29 3b 0a 20 20 20 20 69 66 28 20 /tr>");. if(
34c0: 67 2e 6f 6b 53 65 74 75 70 20 29 7b 0a 20 20 20 g.okSetup ){.
34d0: 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 52 65 63 @ <tr><th>Rec
34e0: 6f 72 64 20 49 44 3a 3c 2f 74 68 3e 3c 74 64 3e ord ID:</th><td>
34f0: 25 64 28 72 69 64 29 3c 2f 74 64 3e 3c 2f 74 72 %d(rid)</td></tr
3500: 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 74 >. }. @ <t
3510: 72 3e 3c 74 68 3e 4f 72 69 67 69 6e 61 6c 26 6e r><th>Original&n
3520: 62 73 70 3b 55 73 65 72 3a 3c 2f 74 68 3e 3c 74 bsp;User:</th><t
3530: 64 3e 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b d>. hyperlink
3540: 5f 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 2c 20 _to_user(zUser,
3550: 7a 44 61 74 65 2c 20 22 3c 2f 74 64 3e 3c 2f 74 zDate, "</td></t
3560: 72 3e 22 29 3b 0a 20 20 20 20 69 66 28 20 67 2e r>");. if( g.
3570: 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 okHistory ){.
3580: 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 43 6f 6d @ <tr><th>Com
3590: 6d 61 6e 64 73 3a 3c 2f 74 68 3e 0a 20 20 20 20 mands:</th>.
35a0: 20 20 40 20 20 20 3c 74 64 3e 0a 20 20 20 20 20 @ <td>.
35b0: 20 2f 2a 20 40 20 20 20 20 20 3c 61 20 68 72 65 /* @ <a hre
35c0: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
35d0: 29 2f 77 64 69 66 66 2f 25 64 28 72 69 64 29 22 )/wdiff/%d(rid)"
35e0: 3e 64 69 66 66 3c 2f 61 3e 20 7c 20 2a 2f 0a 20 >diff</a> | */.
35f0: 20 20 20 20 20 40 20 20 20 20 20 3c 61 20 68 72 @ <a hr
3600: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
3610: 4c 29 2f 77 68 69 73 74 6f 72 79 3f 6e 61 6d 65 L)/whistory?name
3620: 3d 25 74 28 7a 4e 61 6d 65 29 22 3e 68 69 73 74 =%t(zName)">hist
3630: 6f 72 79 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 ory</a>. @
3640: 20 20 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 | <a href="%
3650: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 s(g.zBaseURL)/ar
3660: 74 69 66 61 63 74 2f 25 64 28 72 69 64 29 22 3e tifact/%d(rid)">
3670: 72 61 77 2d 74 65 78 74 3c 2f 61 3e 0a 20 20 20 raw-text</a>.
3680: 20 20 20 40 20 20 20 3c 2f 74 64 3e 0a 20 20 20 @ </td>.
3690: 20 20 20 40 20 3c 2f 74 72 3e 0a 20 20 20 20 7d @ </tr>. }
36a0: 0a 20 20 20 20 40 20 3c 2f 74 61 62 6c 65 3e 3c . @ </table><
36b0: 2f 70 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 /p>. }else{.
36c0: 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 57 style_header("W
36d0: 69 6b 69 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 iki Information"
36e0: 29 3b 0a 20 20 20 20 72 69 64 20 3d 20 30 3b 0a );. rid = 0;.
36f0: 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a }. db_finaliz
3700: 65 28 26 71 29 3b 0a 20 20 73 68 6f 77 54 61 67 e(&q);. showTag
3710: 73 28 72 69 64 2c 20 22 77 69 6b 69 2d 2a 22 29 s(rid, "wiki-*")
3720: 3b 0a 20 20 69 66 28 20 72 69 64 20 29 7b 0a 20 ;. if( rid ){.
3730: 20 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 3b Blob content;
3740: 0a 20 20 20 20 4d 61 6e 69 66 65 73 74 20 6d 3b . Manifest m;
3750: 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 6d 2c 20 . memset(&m,
3760: 30 2c 20 73 69 7a 65 6f 66 28 6d 29 29 3b 0a 20 0, sizeof(m));.
3770: 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 6d 2e blob_zero(&m.
3780: 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 63 6f content);. co
3790: 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 26 ntent_get(rid, &
37a0: 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 6d 61 content);. ma
37b0: 6e 69 66 65 73 74 5f 70 61 72 73 65 28 26 6d 2c nifest_parse(&m,
37c0: 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 &content);.
37d0: 69 66 28 20 6d 2e 74 79 70 65 3d 3d 43 46 54 59 if( m.type==CFTY
37e0: 50 45 5f 57 49 4b 49 20 29 7b 0a 20 20 20 20 20 PE_WIKI ){.
37f0: 20 42 6c 6f 62 20 77 69 6b 69 3b 0a 20 20 20 20 Blob wiki;.
3800: 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 77 69 6b blob_init(&wik
3810: 69 2c 20 6d 2e 7a 57 69 6b 69 2c 20 2d 31 29 3b i, m.zWiki, -1);
3820: 0a 20 20 20 20 20 20 40 20 3c 64 69 76 20 63 6c . @ <div cl
3830: 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 3e 43 6f ass="section">Co
3840: 6e 74 65 6e 74 3c 2f 64 69 76 3e 0a 20 20 20 20 ntent</div>.
3850: 20 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 28 26 wiki_convert(&
3860: 77 69 6b 69 2c 20 30 2c 20 30 29 3b 0a 20 20 20 wiki, 0, 0);.
3870: 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 77 blob_reset(&w
3880: 69 6b 69 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 iki);. }.
3890: 6d 61 6e 69 66 65 73 74 5f 63 6c 65 61 72 28 26 manifest_clear(&
38a0: 6d 29 3b 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f m);. }. style_
38b0: 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a footer();.}../*.
38c0: 2a 2a 20 57 45 42 50 41 47 45 3a 20 66 69 6e 66 ** WEBPAGE: finf
38d0: 6f 0a 2a 2a 20 55 52 4c 3a 20 2f 66 69 6e 66 6f o.** URL: /finfo
38e0: 3f 6e 61 6d 65 3d 46 49 4c 45 4e 41 4d 45 0a 2a ?name=FILENAME.*
38f0: 2a 0a 2a 2a 20 53 68 6f 77 20 74 68 65 20 63 6f *.** Show the co
3900: 6d 70 6c 65 74 65 20 63 68 61 6e 67 65 20 68 69 mplete change hi
3910: 73 74 6f 72 79 20 66 6f 72 20 61 20 73 69 6e 67 story for a sing
3920: 6c 65 20 66 69 6c 65 2e 20 0a 2a 2f 0a 76 6f 69 le file. .*/.voi
3930: 64 20 66 69 6e 66 6f 5f 70 61 67 65 28 76 6f 69 d finfo_page(voi
3940: 64 29 7b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 d){. Stmt q;.
3950: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c const char *zFil
3960: 65 6e 61 6d 65 3b 0a 20 20 63 68 61 72 20 7a 50 ename;. char zP
3970: 72 65 76 44 61 74 65 5b 32 30 5d 3b 0a 20 20 42 revDate[20];. B
3980: 6c 6f 62 20 74 69 74 6c 65 3b 0a 0a 20 20 6c 6f lob title;.. lo
3990: 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e gin_check_creden
39a0: 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 tials();. if( !
39b0: 67 2e 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 g.okRead ){ logi
39c0: 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 n_needed(); retu
39d0: 72 6e 3b 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65 rn; }. style_he
39e0: 61 64 65 72 28 22 46 69 6c 65 20 48 69 73 74 6f ader("File Histo
39f0: 72 79 22 29 3b 0a 20 20 6c 6f 67 69 6e 5f 61 6e ry");. login_an
3a00: 6f 6e 79 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c onymous_availabl
3a10: 65 28 29 3b 0a 0a 20 20 7a 50 72 65 76 44 61 74 e();.. zPrevDat
3a20: 65 5b 30 5d 20 3d 20 30 3b 0a 20 20 7a 46 69 6c e[0] = 0;. zFil
3a30: 65 6e 61 6d 65 20 3d 20 50 44 28 22 6e 61 6d 65 ename = PD("name
3a40: 22 2c 22 22 29 3b 0a 20 20 64 62 5f 70 72 65 70 ","");. db_prep
3a50: 61 72 65 28 26 71 2c 0a 20 20 20 20 22 53 45 4c are(&q,. "SEL
3a60: 45 43 54 20 73 75 62 73 74 72 28 62 2e 75 75 69 ECT substr(b.uui
3a70: 64 2c 31 2c 31 30 29 2c 20 64 61 74 65 74 69 6d d,1,10), datetim
3a80: 65 28 65 76 65 6e 74 2e 6d 74 69 6d 65 2c 27 6c e(event.mtime,'l
3a90: 6f 63 61 6c 74 69 6d 65 27 29 2c 22 0a 20 20 20 ocaltime'),".
3aa0: 20 22 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 " coalesc
3ab0: 65 28 65 76 65 6e 74 2e 65 63 6f 6d 6d 65 6e 74 e(event.ecomment
3ac0: 2c 20 65 76 65 6e 74 2e 63 6f 6d 6d 65 6e 74 29 , event.comment)
3ad0: 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 63 ,". " c
3ae0: 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 75 oalesce(event.eu
3af0: 73 65 72 2c 20 65 76 65 6e 74 2e 75 73 65 72 29 ser, event.user)
3b00: 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 6d ,". " m
3b10: 6c 69 6e 6b 2e 70 69 64 2c 20 6d 6c 69 6e 6b 2e link.pid, mlink.
3b20: 66 69 64 2c 20 6d 6c 69 6e 6b 2e 6d 69 64 2c 20 fid, mlink.mid,
3b30: 6d 6c 69 6e 6b 2e 66 6e 69 64 22 0a 20 20 20 20 mlink.fnid".
3b40: 22 20 20 46 52 4f 4d 20 6d 6c 69 6e 6b 2c 20 62 " FROM mlink, b
3b50: 6c 6f 62 20 62 2c 20 65 76 65 6e 74 22 0a 20 20 lob b, event".
3b60: 20 20 22 20 57 48 45 52 45 20 6d 6c 69 6e 6b 2e " WHERE mlink.
3b70: 66 6e 69 64 3d 28 53 45 4c 45 43 54 20 66 6e 69 fnid=(SELECT fni
3b80: 64 20 46 52 4f 4d 20 66 69 6c 65 6e 61 6d 65 20 d FROM filename
3b90: 57 48 45 52 45 20 6e 61 6d 65 3d 25 51 29 22 0a WHERE name=%Q)".
3ba0: 20 20 20 20 22 20 20 20 41 4e 44 20 62 2e 72 69 " AND b.ri
3bb0: 64 3d 6d 6c 69 6e 6b 2e 66 69 64 22 0a 20 20 20 d=mlink.fid".
3bc0: 20 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e 6f " AND event.o
3bd0: 62 6a 69 64 3d 6d 6c 69 6e 6b 2e 6d 69 64 22 0a bjid=mlink.mid".
3be0: 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 65 " ORDER BY e
3bf0: 76 65 6e 74 2e 6d 74 69 6d 65 20 44 45 53 43 22 vent.mtime DESC"
3c00: 2c 0a 20 20 20 20 7a 46 69 6c 65 6e 61 6d 65 0a ,. zFilename.
3c10: 20 20 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f );. blob_zero
3c20: 28 26 74 69 74 6c 65 29 3b 0a 20 20 62 6c 6f 62 (&title);. blob
3c30: 5f 61 70 70 65 6e 64 66 28 26 74 69 74 6c 65 2c _appendf(&title,
3c40: 20 22 48 69 73 74 6f 72 79 20 6f 66 20 22 29 3b "History of ");
3c50: 0a 20 20 68 79 70 65 72 6c 69 6e 6b 65 64 5f 70 . hyperlinked_p
3c60: 61 74 68 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 ath(zFilename, &
3c70: 74 69 74 6c 65 29 3b 0a 20 20 40 20 3c 68 32 3e title);. @ <h2>
3c80: 25 62 28 26 74 69 74 6c 65 29 3c 2f 68 32 3e 0a %b(&title)</h2>.
3c90: 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 74 69 blob_reset(&ti
3ca0: 74 6c 65 29 3b 0a 20 20 40 20 3c 74 61 62 6c 65 tle);. @ <table
3cb0: 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 20 62 cellspacing=0 b
3cc0: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 order=0 cellpadd
3cd0: 69 6e 67 3d 30 3e 0a 20 20 77 68 69 6c 65 28 20 ing=0>. while(
3ce0: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c db_step(&q)==SQL
3cf0: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 ITE_ROW ){. c
3d00: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 onst char *zUuid
3d10: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
3d20: 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f t(&q, 0);. co
3d30: 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 nst char *zDate
3d40: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
3d50: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 6f 6e (&q, 1);. con
3d60: 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 20 3d 20 st char *zCom =
3d70: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
3d80: 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 q, 2);. const
3d90: 20 63 68 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 char *zUser = d
3da0: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
3db0: 2c 20 33 29 3b 0a 20 20 20 20 69 6e 74 20 66 70 , 3);. int fp
3dc0: 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 id = db_column_i
3dd0: 6e 74 28 26 71 2c 20 34 29 3b 0a 20 20 20 20 69 nt(&q, 4);. i
3de0: 6e 74 20 66 72 69 64 20 3d 20 64 62 5f 63 6f 6c nt frid = db_col
3df0: 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 35 29 3b 0a umn_int(&q, 5);.
3e00: 20 20 20 20 69 6e 74 20 6d 69 64 20 3d 20 64 62 int mid = db
3e10: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 _column_int(&q,
3e20: 36 29 3b 0a 20 20 20 20 69 6e 74 20 66 6e 69 64 6);. int fnid
3e30: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 = db_column_int
3e40: 28 26 71 2c 20 37 29 3b 0a 20 20 20 20 63 68 61 (&q, 7);. cha
3e50: 72 20 7a 53 68 6f 72 74 5b 32 30 5d 3b 0a 20 20 r zShort[20];.
3e60: 20 20 69 66 28 20 6d 65 6d 63 6d 70 28 7a 44 61 if( memcmp(zDa
3e70: 74 65 2c 20 7a 50 72 65 76 44 61 74 65 2c 20 31 te, zPrevDate, 1
3e80: 30 29 20 29 7b 0a 20 20 20 20 20 20 73 70 72 69 0) ){. spri
3e90: 6e 74 66 28 7a 50 72 65 76 44 61 74 65 2c 20 22 ntf(zPrevDate, "
3ea0: 25 2e 31 30 73 22 2c 20 7a 44 61 74 65 29 3b 0a %.10s", zDate);.
3eb0: 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 @ <tr><td
3ec0: 63 6f 6c 73 70 61 6e 3d 33 3e 0a 20 20 20 20 20 colspan=3>.
3ed0: 20 40 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d @ <div class=
3ee0: 22 64 69 76 69 64 65 72 22 3e 25 73 28 7a 50 72 "divider">%s(zPr
3ef0: 65 76 44 61 74 65 29 3c 2f 64 69 76 3e 0a 20 20 evDate)</div>.
3f00: 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e @ </td></tr>
3f10: 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 74 72 . }. @ <tr
3f20: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 ><td valign="top
3f30: 22 3e 25 73 28 26 7a 44 61 74 65 5b 31 31 5d 29 ">%s(&zDate[11])
3f40: 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 20 </td>. @ <td
3f50: 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e width="20"></td>
3f60: 0a 20 20 20 20 40 20 3c 74 64 20 76 61 6c 69 67 . @ <td valig
3f70: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 6c n="top" align="l
3f80: 65 66 74 22 3e 0a 20 20 20 20 73 71 6c 69 74 65 eft">. sqlite
3f90: 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 3_snprintf(sizeo
3fa0: 66 28 7a 53 68 6f 72 74 29 2c 20 7a 53 68 6f 72 f(zShort), zShor
3fb0: 74 2c 20 22 25 2e 31 30 73 22 2c 20 7a 55 75 69 t, "%.10s", zUui
3fc0: 64 29 3b 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b d);. if( g.ok
3fd0: 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 History ){.
3fe0: 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 @ <a href="%s(g
3ff0: 2e 7a 54 6f 70 29 2f 61 72 74 69 66 61 63 74 2f .zTop)/artifact/
4000: 25 73 28 7a 55 75 69 64 29 22 3e 5b 25 73 28 7a %s(zUuid)">[%s(z
4010: 53 68 6f 72 74 29 5d 3c 2f 61 3e 0a 20 20 20 20 Short)]</a>.
4020: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 5b }else{. @ [
4030: 25 73 28 7a 53 68 6f 72 74 29 5d 0a 20 20 20 20 %s(zShort)].
4040: 7d 0a 20 20 20 20 40 20 25 68 28 7a 43 6f 6d 29 }. @ %h(zCom)
4050: 20 28 42 79 3a 20 0a 20 20 20 20 68 79 70 65 72 (By: . hyper
4060: 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 28 7a 55 73 link_to_user(zUs
4070: 65 72 2c 20 7a 44 61 74 65 2c 20 22 20 6f 6e 22 er, zDate, " on"
4080: 29 3b 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b );. hyperlink
4090: 5f 74 6f 5f 64 61 74 65 28 7a 44 61 74 65 2c 20 _to_date(zDate,
40a0: 22 29 22 29 3b 0a 20 20 20 20 69 66 28 20 67 2e ")");. if( g.
40b0: 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 okHistory ){.
40c0: 20 20 20 69 66 28 20 66 70 69 64 20 29 7b 0a 20 if( fpid ){.
40d0: 20 20 20 20 20 20 20 40 20 3c 61 20 68 72 65 66 @ <a href
40e0: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
40f0: 2f 66 64 69 66 66 3f 76 31 3d 25 64 28 66 70 69 /fdiff?v1=%d(fpi
4100: 64 29 26 61 6d 70 3b 76 32 3d 25 64 28 66 72 69 d)&v2=%d(fri
4110: 64 29 22 3e 5b 64 69 66 66 5d 3c 2f 61 3e 0a 20 d)">[diff]</a>.
4120: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 40 20 3c }. @ <
4130: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
4140: 73 65 55 52 4c 29 2f 61 6e 6e 6f 74 61 74 65 3f seURL)/annotate?
4150: 6d 69 64 3d 25 64 28 6d 69 64 29 26 61 6d 70 3b mid=%d(mid)&
4160: 66 6e 69 64 3d 25 64 28 66 6e 69 64 29 22 3e 0a fnid=%d(fnid)">.
4170: 20 20 20 20 20 20 40 20 5b 61 6e 6e 6f 74 61 74 @ [annotat
4180: 65 5d 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 3c e]</a>. @ <
4190: 2f 74 64 3e 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 /td>. }. }.
41a0: 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 db_finalize(&q)
41b0: 3b 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e 0a 20 ;. @ </table>.
41c0: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
41d0: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 .}.../*.** WEBPA
41e0: 47 45 3a 20 76 64 69 66 66 0a 2a 2a 20 55 52 4c GE: vdiff.** URL
41f0: 3a 20 2f 76 64 69 66 66 3f 6e 61 6d 65 3d 52 49 : /vdiff?name=RI
4200: 44 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 20 61 6c 6c D.**.** Show all
4210: 20 64 69 66 66 65 72 65 6e 63 65 73 20 66 6f 72 differences for
4220: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 63 68 a particular ch
4230: 65 63 6b 2d 69 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 eck-in..*/.void
4240: 76 64 69 66 66 5f 70 61 67 65 28 76 6f 69 64 29 vdiff_page(void)
4250: 7b 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 53 {. int rid;. S
4260: 74 6d 74 20 71 3b 0a 20 20 63 68 61 72 20 2a 7a tmt q;. char *z
4270: 55 75 69 64 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 Uuid;.. login_c
4280: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 heck_credentials
4290: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 ();. if( !g.okR
42a0: 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 ead ){ login_nee
42b0: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
42c0: 0a 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 6d 6f . login_anonymo
42d0: 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 3b 0a us_available();.
42e0: 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f . rid = name_to
42f0: 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c 22 _rid(PD("name","
4300: 22 29 29 3b 0a 20 20 69 66 28 20 72 69 64 3d 3d "));. if( rid==
4310: 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 0 ){. fossil_
4320: 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b redirect_home();
4330: 0a 20 20 7d 0a 20 20 7a 55 75 69 64 20 3d 20 64 . }. zUuid = d
4340: 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 b_text(0, "SELEC
4350: 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 T uuid FROM blob
4360: 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 WHERE rid=%d",
4370: 72 69 64 29 3b 0a 20 20 73 74 79 6c 65 5f 68 65 rid);. style_he
4380: 61 64 65 72 28 22 43 68 65 63 6b 2d 69 6e 20 5b ader("Check-in [
4390: 25 2e 31 30 73 5d 22 2c 20 7a 55 75 69 64 29 3b %.10s]", zUuid);
43a0: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 . db_prepare(&q
43b0: 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 20 64 61 ,. "SELECT da
43c0: 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 2c 20 22 tetime(mtime), "
43d0: 0a 20 20 20 20 22 20 20 20 20 20 20 20 63 6f 61 . " coa
43e0: 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 63 6f 6d lesce(event.ecom
43f0: 6d 65 6e 74 2c 65 76 65 6e 74 2e 63 6f 6d 6d 65 ment,event.comme
4400: 6e 74 29 2c 22 0a 20 20 20 20 22 20 20 20 20 20 nt),". "
4410: 20 20 63 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 coalesce(event
4420: 2e 65 75 73 65 72 2c 65 76 65 6e 74 2e 75 73 65 .euser,event.use
4430: 72 29 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20 r)". " FROM
4440: 65 76 65 6e 74 20 57 48 45 52 45 20 74 79 70 65 event WHERE type
4450: 3d 27 63 69 27 20 41 4e 44 20 6f 62 6a 69 64 3d ='ci' AND objid=
4460: 25 64 22 2c 0a 20 20 20 20 72 69 64 0a 20 20 29 %d",. rid. )
4470: 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 ;. while( db_st
4480: 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 ep(&q)==SQLITE_R
4490: 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 OW ){. const
44a0: 63 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 char *zDate = db
44b0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
44c0: 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 0);. const c
44d0: 68 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f har *zUser = db_
44e0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
44f0: 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 2);. const ch
4500: 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 20 3d 20 64 ar *zComment = d
4510: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
4520: 2c 20 31 29 3b 0a 20 20 20 20 40 20 3c 68 32 3e , 1);. @ <h2>
4530: 43 68 65 63 6b 2d 69 6e 20 25 73 28 7a 55 75 69 Check-in %s(zUui
4540: 64 29 3c 2f 68 32 3e 0a 20 20 20 20 40 20 3c 70 d)</h2>. @ <p
4550: 3e 4d 61 64 65 20 62 79 0a 20 20 20 20 68 79 70 >Made by. hyp
4560: 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 28 7a erlink_to_user(z
4570: 55 73 65 72 2c 7a 44 61 74 65 2c 22 20 6f 6e 22 User,zDate," on"
4580: 29 3b 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b );. hyperlink
4590: 5f 74 6f 5f 64 61 74 65 28 7a 44 61 74 65 2c 20 _to_date(zDate,
45a0: 22 3a 22 29 3b 0a 20 20 20 20 40 20 25 77 28 7a ":");. @ %w(z
45b0: 43 6f 6d 6d 65 6e 74 29 2e 20 3c 61 20 68 72 65 Comment). <a hre
45c0: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
45d0: 29 2f 63 69 2f 25 73 28 7a 55 75 69 64 29 22 3e )/ci/%s(zUuid)">
45e0: 5b 64 65 74 61 69 6c 73 5d 3c 2f 61 3e 3c 2f 70 [details]</a></p
45f0: 3e 0a 20 20 20 20 40 20 3c 68 72 3e 0a 20 20 7d >. @ <hr>. }
4600: 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 . db_finalize(&
4610: 71 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 q);. db_prepare
4620: 28 26 71 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 (&q,. "SELEC
4630: 54 20 70 69 64 2c 20 66 69 64 2c 20 6e 61 6d 65 T pid, fid, name
4640: 22 0a 20 20 20 20 20 22 20 20 46 52 4f 4d 20 6d ". " FROM m
4650: 6c 69 6e 6b 2c 20 66 69 6c 65 6e 61 6d 65 22 0a link, filename".
4660: 20 20 20 20 20 22 20 57 48 45 52 45 20 6d 6c 69 " WHERE mli
4670: 6e 6b 2e 6d 69 64 3d 25 64 22 0a 20 20 20 20 20 nk.mid=%d".
4680: 22 20 20 20 41 4e 44 20 66 69 6c 65 6e 61 6d 65 " AND filename
4690: 2e 66 6e 69 64 3d 6d 6c 69 6e 6b 2e 66 6e 69 64 .fnid=mlink.fnid
46a0: 22 0a 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 ". " ORDER B
46b0: 59 20 6e 61 6d 65 22 2c 0a 20 20 20 20 20 72 69 Y name",. ri
46c0: 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 d. );. while(
46d0: 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c db_step(&q)==SQL
46e0: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 ITE_ROW ){. i
46f0: 6e 74 20 70 69 64 20 3d 20 64 62 5f 63 6f 6c 75 nt pid = db_colu
4700: 6d 6e 5f 69 6e 74 28 26 71 2c 30 29 3b 0a 20 20 mn_int(&q,0);.
4710: 20 20 69 6e 74 20 66 69 64 20 3d 20 64 62 5f 63 int fid = db_c
4720: 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 31 29 3b olumn_int(&q,1);
4730: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
4740: 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 *zName = db_colu
4750: 6d 6e 5f 74 65 78 74 28 26 71 2c 32 29 3b 0a 20 mn_text(&q,2);.
4760: 20 20 20 40 20 3c 70 3e 3c 61 20 68 72 65 66 3d @ <p><a href=
4770: 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f "%s(g.zBaseURL)/
4780: 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e finfo?name=%T(zN
4790: 61 6d 65 29 22 3e 25 68 28 7a 4e 61 6d 65 29 3c ame)">%h(zName)<
47a0: 2f 61 3e 3c 2f 70 3e 0a 20 20 20 20 40 20 3c 62 /a></p>. @ <b
47b0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a lockquote><pre>.
47c0: 20 20 20 20 61 70 70 65 6e 64 5f 64 69 66 66 28 append_diff(
47d0: 70 69 64 2c 20 66 69 64 29 3b 0a 20 20 20 20 40 pid, fid);. @
47e0: 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 </pre></blockqu
47f0: 6f 74 65 3e 0a 20 20 7d 0a 20 20 64 62 5f 66 69 ote>. }. db_fi
4800: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 73 74 nalize(&q);. st
4810: 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a yle_footer();.}.
4820: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 64 ./*.** Write a d
4830: 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 61 6e escription of an
4840: 20 6f 62 6a 65 63 74 20 74 6f 20 74 68 65 20 77 object to the w
4850: 77 77 20 72 65 70 6c 79 2e 0a 2a 2a 0a 2a 2a 20 ww reply..**.**
4860: 49 66 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 If the object is
4870: 20 61 20 66 69 6c 65 20 74 68 65 6e 20 6d 65 6e a file then men
4880: 74 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 tion:.**.**
4890: 2a 20 49 74 27 73 20 61 72 74 69 66 61 63 74 20 * It's artifact
48a0: 49 44 0a 2a 2a 20 20 20 20 20 2a 20 41 6c 6c 20 ID.** * All
48b0: 69 74 73 20 66 69 6c 65 6e 61 6d 65 73 0a 2a 2a its filenames.**
48c0: 20 20 20 20 20 2a 20 54 68 65 20 63 68 65 63 6b * The check
48d0: 2d 69 6e 20 69 74 20 77 61 73 20 70 61 72 74 20 -in it was part
48e0: 6f 66 2c 20 77 69 74 68 20 74 69 6d 65 73 20 61 of, with times a
48f0: 6e 64 20 75 73 65 72 73 0a 2a 2a 0a 2a 2a 20 49 nd users.**.** I
4900: 66 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 f the object is
4910: 61 20 6d 61 6e 69 66 65 73 74 2c 20 74 68 65 6e a manifest, then
4920: 20 6d 65 6e 74 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 mention:.**.**
4930: 20 20 20 20 2a 20 49 74 27 73 20 61 72 74 69 66 * It's artif
4940: 61 63 74 20 49 44 0a 2a 2a 20 20 20 20 20 2a 20 act ID.** *
4950: 64 61 74 65 20 6f 66 20 63 68 65 63 6b 2d 69 6e date of check-in
4960: 0a 2a 2a 20 20 20 20 20 2a 20 43 6f 6d 6d 65 6e .** * Commen
4970: 74 20 26 20 75 73 65 72 0a 2a 2f 0a 73 74 61 74 t & user.*/.stat
4980: 69 63 20 76 6f 69 64 20 6f 62 6a 65 63 74 5f 64 ic void object_d
4990: 65 73 63 72 69 70 74 69 6f 6e 28 0a 20 20 69 6e escription(. in
49a0: 74 20 72 69 64 2c 20 20 20 20 20 20 20 20 20 20 t rid,
49b0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 72 /* The ar
49c0: 74 69 66 61 63 74 20 49 44 20 2a 2f 0a 20 20 69 tifact ID */. i
49d0: 6e 74 20 6c 69 6e 6b 54 6f 56 69 65 77 2c 20 20 nt linkToView,
49e0: 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 20 76 /* Add v
49f0: 69 65 77 65 72 20 6c 69 6e 6b 20 69 66 20 74 72 iewer link if tr
4a00: 75 65 20 2a 2f 0a 20 20 42 6c 6f 62 20 2a 70 44 ue */. Blob *pD
4a10: 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 20 20 20 20 ownloadName
4a20: 20 2f 2a 20 46 69 6c 6c 20 77 69 74 68 20 61 6e /* Fill with an
4a30: 20 61 70 70 72 6f 70 72 69 61 74 65 20 64 6f 77 appropriate dow
4a40: 6e 6c 6f 61 64 20 6e 61 6d 65 20 2a 2f 0a 29 7b nload name */.){
4a50: 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 69 6e 74 . Stmt q;. int
4a60: 20 63 6e 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 cnt = 0;. int
4a70: 6e 57 69 6b 69 20 3d 20 30 3b 0a 20 20 64 62 5f nWiki = 0;. db_
4a80: 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 prepare(&q,.
4a90: 22 53 45 4c 45 43 54 20 66 69 6c 65 6e 61 6d 65 "SELECT filename
4aa0: 2e 6e 61 6d 65 2c 20 64 61 74 65 74 69 6d 65 28 .name, datetime(
4ab0: 65 76 65 6e 74 2e 6d 74 69 6d 65 29 2c 22 0a 20 event.mtime),".
4ac0: 20 20 20 22 20 20 20 20 20 20 20 63 6f 61 6c 65 " coale
4ad0: 73 63 65 28 65 76 65 6e 74 2e 65 63 6f 6d 6d 65 sce(event.ecomme
4ae0: 6e 74 2c 65 76 65 6e 74 2e 63 6f 6d 6d 65 6e 74 nt,event.comment
4af0: 29 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 ),". "
4b00: 63 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 coalesce(event.e
4b10: 75 73 65 72 2c 65 76 65 6e 74 2e 75 73 65 72 29 user,event.user)
4b20: 2c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 62 ,". " b
4b30: 2e 75 75 69 64 22 0a 20 20 20 20 22 20 20 46 52 .uuid". " FR
4b40: 4f 4d 20 6d 6c 69 6e 6b 2c 20 66 69 6c 65 6e 61 OM mlink, filena
4b50: 6d 65 2c 20 65 76 65 6e 74 2c 20 62 6c 6f 62 20 me, event, blob
4b60: 61 2c 20 62 6c 6f 62 20 62 22 0a 20 20 20 20 22 a, blob b". "
4b70: 20 57 48 45 52 45 20 66 69 6c 65 6e 61 6d 65 2e WHERE filename.
4b80: 66 6e 69 64 3d 6d 6c 69 6e 6b 2e 66 6e 69 64 22 fnid=mlink.fnid"
4b90: 0a 20 20 20 20 22 20 20 20 41 4e 44 20 65 76 65 . " AND eve
4ba0: 6e 74 2e 6f 62 6a 69 64 3d 6d 6c 69 6e 6b 2e 6d nt.objid=mlink.m
4bb0: 69 64 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 id". " AND
4bc0: 61 2e 72 69 64 3d 6d 6c 69 6e 6b 2e 66 69 64 22 a.rid=mlink.fid"
4bd0: 0a 20 20 20 20 22 20 20 20 41 4e 44 20 62 2e 72 . " AND b.r
4be0: 69 64 3d 6d 6c 69 6e 6b 2e 6d 69 64 22 0a 20 20 id=mlink.mid".
4bf0: 20 20 22 20 20 20 41 4e 44 20 6d 6c 69 6e 6b 2e " AND mlink.
4c00: 66 69 64 3d 25 64 22 2c 0a 20 20 20 20 72 69 64 fid=%d",. rid
4c10: 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 . );. while( d
4c20: 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 b_step(&q)==SQLI
4c30: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f TE_ROW ){. co
4c40: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 nst char *zName
4c50: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
4c60: 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e (&q, 0);. con
4c70: 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 3d st char *zDate =
4c80: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
4c90: 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 6f 6e 73 &q, 1);. cons
4ca0: 74 20 63 68 61 72 20 2a 7a 43 6f 6d 20 3d 20 64 t char *zCom = d
4cb0: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
4cc0: 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 2);. const
4cd0: 63 68 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 char *zUser = db
4ce0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
4cf0: 20 33 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 3);. const c
4d00: 68 61 72 20 2a 7a 56 65 72 73 20 3d 20 64 62 5f har *zVers = db_
4d10: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
4d20: 34 29 3b 0a 20 20 20 20 69 66 28 20 63 6e 74 3e 4);. if( cnt>
4d30: 30 20 29 7b 0a 20 20 20 20 20 20 40 20 41 6c 73 0 ){. @ Als
4d40: 6f 20 66 69 6c 65 0a 20 20 20 20 7d 65 6c 73 65 o file. }else
4d50: 7b 0a 20 20 20 20 20 20 40 20 46 69 6c 65 0a 20 {. @ File.
4d60: 20 20 20 7d 0a 20 20 20 20 40 20 3c 61 20 68 72 }. @ <a hr
4d70: 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 ef="%s(g.zBaseUR
4d80: 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 L)/finfo?name=%T
4d90: 28 7a 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 6d (zName)">%h(zNam
4da0: 65 29 3c 2f 61 3e 0a 20 20 20 20 40 20 70 61 72 e)</a>. @ par
4db0: 74 20 6f 66 20 63 68 65 63 6b 2d 69 6e 0a 20 20 t of check-in.
4dc0: 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 hyperlink_to_u
4dd0: 75 69 64 28 7a 56 65 72 73 29 3b 0a 20 20 20 20 uid(zVers);.
4de0: 40 20 2d 20 25 77 28 7a 43 6f 6d 29 20 62 79 20 @ - %w(zCom) by
4df0: 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 . hyperlink_t
4e00: 6f 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a 44 61 o_user(zUser,zDa
4e10: 74 65 2c 22 20 6f 6e 22 29 3b 0a 20 20 20 20 68 te," on");. h
4e20: 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 yperlink_to_date
4e30: 28 7a 44 61 74 65 2c 22 2e 22 29 3b 0a 20 20 20 (zDate,".");.
4e40: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 69 66 28 20 cnt++;. if(
4e50: 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 26 26 pDownloadName &&
4e60: 20 62 6c 6f 62 5f 73 69 7a 65 28 70 44 6f 77 6e blob_size(pDown
4e70: 6c 6f 61 64 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a loadName)==0 ){.
4e80: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
4e90: 64 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 2c d(pDownloadName,
4ea0: 20 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 zName, -1);.
4eb0: 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 }. }. db_fina
4ec0: 6c 69 7a 65 28 26 71 29 3b 0a 20 20 64 62 5f 70 lize(&q);. db_p
4ed0: 72 65 70 61 72 65 28 26 71 2c 20 0a 20 20 20 20 repare(&q, .
4ee0: 22 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 74 "SELECT substr(t
4ef0: 61 67 6e 61 6d 65 2c 20 36 2c 20 31 30 30 30 30 agname, 6, 10000
4f00: 29 2c 20 64 61 74 65 74 69 6d 65 28 65 76 65 6e ), datetime(even
4f10: 74 2e 6d 74 69 6d 65 29 2c 22 0a 20 20 20 20 22 t.mtime),". "
4f20: 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 coalesce(
4f30: 65 76 65 6e 74 2e 65 75 73 65 72 2c 20 65 76 65 event.euser, eve
4f40: 6e 74 2e 75 73 65 72 29 22 0a 20 20 20 20 22 20 nt.user)". "
4f50: 20 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 FROM tagxref, t
4f60: 61 67 2c 20 65 76 65 6e 74 22 0a 20 20 20 20 22 ag, event". "
4f70: 20 57 48 45 52 45 20 74 61 67 78 72 65 66 2e 72 WHERE tagxref.r
4f80: 69 64 3d 25 64 22 0a 20 20 20 20 22 20 20 20 41 id=%d". " A
4f90: 4e 44 20 74 61 67 2e 74 61 67 69 64 3d 74 61 67 ND tag.tagid=tag
4fa0: 78 72 65 66 2e 74 61 67 69 64 22 20 0a 20 20 20 xref.tagid" .
4fb0: 20 22 20 20 20 41 4e 44 20 74 61 67 2e 74 61 67 " AND tag.tag
4fc0: 6e 61 6d 65 20 4c 49 4b 45 20 27 77 69 6b 69 2d name LIKE 'wiki-
4fd0: 25 25 27 22 0a 20 20 20 20 22 20 20 20 41 4e 44 %%'". " AND
4fe0: 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d 74 61 67 event.objid=tag
4ff0: 78 72 65 66 2e 72 69 64 22 2c 0a 20 20 20 20 72 xref.rid",. r
5000: 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 id. );. while(
5010: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
5020: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
5030: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 67 const char *zPag
5040: 65 6e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d ename = db_colum
5050: 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 n_text(&q, 0);.
5060: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
5070: 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e Date = db_column
5080: 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 _text(&q, 1);.
5090: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 const char *zU
50a0: 73 65 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ser = db_column_
50b0: 74 65 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 text(&q, 2);.
50c0: 20 69 66 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 if( cnt>0 ){.
50d0: 20 20 20 20 40 20 41 6c 73 6f 20 77 69 6b 69 20 @ Also wiki
50e0: 70 61 67 65 0a 20 20 20 20 7d 65 6c 73 65 7b 0a page. }else{.
50f0: 20 20 20 20 20 20 40 20 57 69 6b 69 20 70 61 67 @ Wiki pag
5100: 65 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 5b 3c e. }. @ [<
5110: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
5120: 73 65 55 52 4c 29 2f 77 69 6b 69 3f 6e 61 6d 65 seURL)/wiki?name
5130: 3d 25 74 28 7a 50 61 67 65 6e 61 6d 65 29 22 3e =%t(zPagename)">
5140: 25 68 28 7a 50 61 67 65 6e 61 6d 65 29 3c 2f 61 %h(zPagename)</a
5150: 3e 5d 0a 20 20 20 20 40 20 62 79 0a 20 20 20 20 >]. @ by.
5160: 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 hyperlink_to_use
5170: 72 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 20 r(zUser,zDate,"
5180: 6f 6e 22 29 3b 0a 20 20 20 20 68 79 70 65 72 6c on");. hyperl
5190: 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 61 74 ink_to_date(zDat
51a0: 65 2c 22 2e 22 29 3b 0a 20 20 20 20 6e 57 69 6b e,".");. nWik
51b0: 69 2b 2b 3b 0a 20 20 20 20 63 6e 74 2b 2b 3b 0a i++;. cnt++;.
51c0: 20 20 20 20 69 66 28 20 70 44 6f 77 6e 6c 6f 61 if( pDownloa
51d0: 64 4e 61 6d 65 20 26 26 20 62 6c 6f 62 5f 73 69 dName && blob_si
51e0: 7a 65 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 ze(pDownloadName
51f0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 6c )==0 ){. bl
5200: 6f 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c ob_append(pDownl
5210: 6f 61 64 4e 61 6d 65 2c 20 7a 50 61 67 65 6e 61 oadName, zPagena
5220: 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 me, -1);. }.
5230: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
5240: 28 26 71 29 3b 0a 20 20 69 66 28 20 6e 57 69 6b (&q);. if( nWik
5250: 69 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 5f 70 i==0 ){. db_p
5260: 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 20 20 repare(&q,.
5270: 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d "SELECT datetim
5280: 65 28 6d 74 69 6d 65 29 2c 20 75 73 65 72 2c 20 e(mtime), user,
5290: 63 6f 6d 6d 65 6e 74 2c 20 74 79 70 65 2c 20 75 comment, type, u
52a0: 75 69 64 22 0a 20 20 20 20 20 20 22 20 20 46 52 uid". " FR
52b0: 4f 4d 20 65 76 65 6e 74 2c 20 62 6c 6f 62 22 0a OM event, blob".
52c0: 20 20 20 20 20 20 22 20 57 48 45 52 45 20 65 76 " WHERE ev
52d0: 65 6e 74 2e 6f 62 6a 69 64 3d 25 64 22 0a 20 20 ent.objid=%d".
52e0: 20 20 20 20 22 20 20 20 41 4e 44 20 62 6c 6f 62 " AND blob
52f0: 2e 72 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 20 .rid=%d",.
5300: 72 69 64 2c 20 72 69 64 0a 20 20 20 20 29 3b 0a rid, rid. );.
5310: 20 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 while( db_st
5320: 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 ep(&q)==SQLITE_R
5330: 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 OW ){. cons
5340: 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 t char *zDate =
5350: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
5360: 71 2c 20 30 29 3b 0a 20 20 20 20 20 20 63 6f 6e q, 0);. con
5370: 73 74 20 63 68 61 72 20 2a 7a 55 73 65 72 20 3d st char *zUser =
5380: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
5390: 26 71 2c 20 31 29 3b 0a 20 20 20 20 20 20 63 6f &q, 1);. co
53a0: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 20 3d nst char *zCom =
53b0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
53c0: 26 71 2c 20 32 29 3b 0a 20 20 20 20 20 20 63 6f &q, 2);. co
53d0: 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 20 nst char *zType
53e0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
53f0: 28 26 71 2c 20 33 29 3b 0a 20 20 20 20 20 20 63 (&q, 3);. c
5400: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 onst char *zUuid
5410: 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 = db_column_tex
5420: 74 28 26 71 2c 20 34 29 3b 0a 20 20 20 20 20 20 t(&q, 4);.
5430: 69 66 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 if( cnt>0 ){.
5440: 20 20 20 20 20 40 20 41 6c 73 6f 0a 20 20 20 20 @ Also.
5450: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 54 }. if( zT
5460: 79 70 65 5b 30 5d 3d 3d 27 77 27 20 29 7b 0a 20 ype[0]=='w' ){.
5470: 20 20 20 20 20 20 20 40 20 57 69 6b 69 20 65 64 @ Wiki ed
5480: 69 74 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 it. }else i
5490: 66 28 20 7a 54 79 70 65 5b 30 5d 3d 3d 27 74 27 f( zType[0]=='t'
54a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 54 69 ){. @ Ti
54b0: 63 6b 65 74 20 63 68 61 6e 67 65 0a 20 20 20 20 cket change.
54c0: 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 54 79 70 }else if( zTyp
54d0: 65 5b 30 5d 3d 3d 27 63 27 20 29 7b 0a 20 20 20 e[0]=='c' ){.
54e0: 20 20 20 20 20 40 20 4d 61 6e 69 66 65 73 74 20 @ Manifest
54f0: 6f 66 20 63 68 65 63 6b 2d 69 6e 0a 20 20 20 20 of check-in.
5500: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
5510: 20 40 20 43 6f 6e 74 72 6f 6c 20 66 69 6c 65 20 @ Control file
5520: 72 65 66 65 72 65 6e 63 69 6e 67 0a 20 20 20 20 referencing.
5530: 20 20 7d 0a 20 20 20 20 20 20 68 79 70 65 72 6c }. hyperl
5540: 69 6e 6b 5f 74 6f 5f 75 75 69 64 28 7a 55 75 69 ink_to_uuid(zUui
5550: 64 29 3b 0a 20 20 20 20 20 20 40 20 2d 20 25 77 d);. @ - %w
5560: 28 7a 43 6f 6d 29 20 62 79 0a 20 20 20 20 20 20 (zCom) by.
5570: 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 hyperlink_to_use
5580: 72 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 20 r(zUser,zDate,"
5590: 6f 6e 22 29 3b 0a 20 20 20 20 20 20 68 79 70 65 on");. hype
55a0: 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 rlink_to_date(zD
55b0: 61 74 65 2c 20 22 2e 22 29 3b 0a 20 20 20 20 20 ate, ".");.
55c0: 20 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 4e 61 if( pDownloadNa
55d0: 6d 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a 65 28 me && blob_size(
55e0: 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3d 3d pDownloadName)==
55f0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 62 6c 6f 0 ){. blo
5600: 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c 6f b_append(pDownlo
5610: 61 64 4e 61 6d 65 2c 20 7a 55 75 69 64 2c 20 2d adName, zUuid, -
5620: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 1);. }.
5630: 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 cnt++;. }.
5640: 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 db_finalize(&
5650: 71 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 6e q);. }. if( cn
5660: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 72 t==0 ){. char
5670: 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 *zUuid = db_tex
5680: 74 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 t(0, "SELECT uui
5690: 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 d FROM blob WHER
56a0: 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b E rid=%d", rid);
56b0: 0a 20 20 20 20 40 20 43 6f 6e 74 72 6f 6c 20 61 . @ Control a
56c0: 72 74 69 66 61 63 74 2e 0a 20 20 20 20 69 66 28 rtifact.. if(
56d0: 20 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 26 pDownloadName &
56e0: 26 20 62 6c 6f 62 5f 73 69 7a 65 28 70 44 6f 77 & blob_size(pDow
56f0: 6e 6c 6f 61 64 4e 61 6d 65 29 3d 3d 30 20 29 7b nloadName)==0 ){
5700: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
5710: 6e 64 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 nd(pDownloadName
5720: 2c 20 7a 55 75 69 64 2c 20 2d 31 29 3b 0a 20 20 , zUuid, -1);.
5730: 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 }. }else if(
5740: 6c 69 6e 6b 54 6f 56 69 65 77 20 29 7b 0a 20 20 linkToView ){.
5750: 20 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 @ <a href="%s(
5760: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 69 g.zBaseURL)/arti
5770: 66 61 63 74 2f 25 64 28 72 69 64 29 22 3e 5b 76 fact/%d(rid)">[v
5780: 69 65 77 5d 3c 2f 61 3e 0a 20 20 7d 0a 7d 0a 0a iew]</a>. }.}..
5790: 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 ./*.** WEBPAGE:
57a0: 66 64 69 66 66 0a 2a 2a 0a 2a 2a 20 54 77 6f 20 fdiff.**.** Two
57b0: 61 72 67 75 6d 65 6e 74 73 2c 20 76 31 20 61 6e arguments, v1 an
57c0: 64 20 76 32 2c 20 61 72 65 20 69 6e 74 65 67 65 d v2, are intege
57d0: 72 73 2e 20 20 53 68 6f 77 20 74 68 65 20 64 69 rs. Show the di
57e0: 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e fference between
57f0: 0a 2a 2a 20 74 68 65 20 74 77 6f 20 72 65 63 6f .** the two reco
5800: 72 64 73 2e 0a 2a 2f 0a 76 6f 69 64 20 64 69 66 rds..*/.void dif
5810: 66 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 f_page(void){.
5820: 69 6e 74 20 76 31 20 3d 20 6e 61 6d 65 5f 74 6f int v1 = name_to
5830: 5f 72 69 64 28 50 44 28 22 76 31 22 2c 22 30 22 _rid(PD("v1","0"
5840: 29 29 3b 0a 20 20 69 6e 74 20 76 32 20 3d 20 6e ));. int v2 = n
5850: 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 76 ame_to_rid(PD("v
5860: 32 22 2c 22 30 22 29 29 3b 0a 20 20 42 6c 6f 62 2","0"));. Blob
5870: 20 63 31 2c 20 63 32 2c 20 64 69 66 66 3b 0a 0a c1, c2, diff;..
5880: 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 login_check_cr
5890: 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 edentials();. i
58a0: 66 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b 20 f( !g.okRead ){
58b0: 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 login_needed();
58c0: 72 65 74 75 72 6e 3b 20 7d 0a 20 20 73 74 79 6c return; }. styl
58d0: 65 5f 68 65 61 64 65 72 28 22 44 69 66 66 22 29 e_header("Diff")
58e0: 3b 0a 20 20 40 20 3c 68 32 3e 44 69 66 66 65 72 ;. @ <h2>Differ
58f0: 65 6e 63 65 73 20 46 72 6f 6d 3a 3c 2f 68 32 3e ences From:</h2>
5900: 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 . @ <blockquote
5910: 3e 0a 20 20 6f 62 6a 65 63 74 5f 64 65 73 63 72 >. object_descr
5920: 69 70 74 69 6f 6e 28 76 31 2c 20 31 2c 20 30 29 iption(v1, 1, 0)
5930: 3b 0a 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f ;. @ </blockquo
5940: 74 65 3e 0a 20 20 40 20 3c 68 32 3e 54 6f 3a 3c te>. @ <h2>To:<
5950: 2f 68 32 3e 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 /h2>. @ <blockq
5960: 75 6f 74 65 3e 0a 20 20 6f 62 6a 65 63 74 5f 64 uote>. object_d
5970: 65 73 63 72 69 70 74 69 6f 6e 28 76 32 2c 20 31 escription(v2, 1
5980: 2c 20 30 29 3b 0a 20 20 40 20 3c 2f 62 6c 6f 63 , 0);. @ </bloc
5990: 6b 71 75 6f 74 65 3e 0a 20 20 40 20 3c 68 72 3e kquote>. @ <hr>
59a0: 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 . @ <blockquote
59b0: 3e 3c 70 72 65 3e 0a 20 20 63 6f 6e 74 65 6e 74 ><pre>. content
59c0: 5f 67 65 74 28 76 31 2c 20 26 63 31 29 3b 0a 20 _get(v1, &c1);.
59d0: 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 76 32 2c content_get(v2,
59e0: 20 26 63 32 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65 &c2);. blob_ze
59f0: 72 6f 28 26 64 69 66 66 29 3b 0a 20 20 74 65 78 ro(&diff);. tex
5a00: 74 5f 64 69 66 66 28 26 63 31 2c 20 26 63 32 2c t_diff(&c1, &c2,
5a10: 20 26 64 69 66 66 2c 20 34 29 3b 0a 20 20 62 6c &diff, 4);. bl
5a20: 6f 62 5f 72 65 73 65 74 28 26 63 31 29 3b 0a 20 ob_reset(&c1);.
5a30: 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 63 32 29 blob_reset(&c2)
5a40: 3b 0a 20 20 40 20 25 68 28 62 6c 6f 62 5f 73 74 ;. @ %h(blob_st
5a50: 72 28 26 64 69 66 66 29 29 0a 20 20 40 20 3c 2f r(&diff)). @ </
5a60: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 pre></blockquote
5a70: 3e 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 >. blob_reset(&
5a80: 64 69 66 66 29 3b 0a 20 20 73 74 79 6c 65 5f 66 diff);. style_f
5a90: 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a ooter();.}../*.*
5aa0: 2a 20 57 45 42 50 41 47 45 3a 20 72 61 77 0a 2a * WEBPAGE: raw.*
5ab0: 2a 20 55 52 4c 3a 20 2f 72 61 77 3f 6e 61 6d 65 * URL: /raw?name
5ac0: 3d 41 52 54 49 46 41 43 54 49 44 26 6d 3d 54 59 =ARTIFACTID&m=TY
5ad0: 50 45 0a 2a 2a 20 0a 2a 2a 20 52 65 74 75 72 6e PE.** .** Return
5ae0: 20 74 68 65 20 75 6e 69 6e 74 65 72 70 72 65 74 the uninterpret
5af0: 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6e ed content of an
5b00: 20 61 72 74 69 66 61 63 74 2e 20 20 55 73 65 64 artifact. Used
5b10: 20 70 72 69 6d 61 72 69 6c 79 0a 2a 2a 20 74 6f primarily.** to
5b20: 20 76 69 65 77 20 61 72 74 69 66 61 63 74 73 20 view artifacts
5b30: 74 68 61 74 20 61 72 65 20 69 6d 61 67 65 73 2e that are images.
5b40: 0a 2a 2f 0a 76 6f 69 64 20 72 61 77 61 72 74 69 .*/.void rawarti
5b50: 66 61 63 74 5f 70 61 67 65 28 76 6f 69 64 29 7b fact_page(void){
5b60: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 63 6f . int rid;. co
5b70: 6e 73 74 20 63 68 61 72 20 2a 7a 4d 69 6d 65 3b nst char *zMime;
5b80: 0a 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 3b . Blob content;
5b90: 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 .. rid = name_t
5ba0: 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c o_rid(PD("name",
5bb0: 22 30 22 29 29 3b 0a 20 20 7a 4d 69 6d 65 20 3d "0"));. zMime =
5bc0: 20 50 44 28 22 6d 22 2c 22 61 70 70 6c 69 63 61 PD("m","applica
5bd0: 74 69 6f 6e 2f 78 2d 66 6f 73 73 69 6c 2d 61 72 tion/x-fossil-ar
5be0: 74 69 66 61 63 74 22 29 3b 0a 20 20 6c 6f 67 69 tifact");. logi
5bf0: 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 n_check_credenti
5c00: 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e als();. if( !g.
5c10: 6f 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f okRead ){ login_
5c20: 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e needed(); return
5c30: 3b 20 7d 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 ; }. if( rid==0
5c40: 20 29 7b 20 63 67 69 5f 72 65 64 69 72 65 63 74 ){ cgi_redirect
5c50: 28 22 2f 68 6f 6d 65 22 29 3b 20 7d 0a 20 20 63 ("/home"); }. c
5c60: 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 ontent_get(rid,
5c70: 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 63 67 69 &content);. cgi
5c80: 5f 73 65 74 5f 63 6f 6e 74 65 6e 74 5f 74 79 70 _set_content_typ
5c90: 65 28 7a 4d 69 6d 65 29 3b 0a 20 20 63 67 69 5f e(zMime);. cgi_
5ca0: 73 65 74 5f 63 6f 6e 74 65 6e 74 28 26 63 6f 6e set_content(&con
5cb0: 74 65 6e 74 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 tent);.}../*.**
5cc0: 52 65 6e 64 65 72 20 61 20 68 65 78 20 64 75 6d Render a hex dum
5cd0: 70 20 6f 66 20 61 20 66 69 6c 65 2e 0a 2a 2f 0a p of a file..*/.
5ce0: 73 74 61 74 69 63 20 76 6f 69 64 20 68 65 78 64 static void hexd
5cf0: 75 6d 70 28 42 6c 6f 62 20 2a 70 42 6c 6f 62 29 ump(Blob *pBlob)
5d00: 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e {. const unsign
5d10: 65 64 20 63 68 61 72 20 2a 78 3b 0a 20 20 69 6e ed char *x;. in
5d20: 74 20 6e 2c 20 69 2c 20 6a 2c 20 6b 3b 0a 20 20 t n, i, j, k;.
5d30: 63 68 61 72 20 7a 4c 69 6e 65 5b 31 30 30 5d 3b char zLine[100];
5d40: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 . static const
5d50: 63 68 61 72 20 7a 48 65 78 5b 5d 20 3d 20 22 30 char zHex[] = "0
5d60: 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 22 123456789abcdef"
5d70: 3b 0a 0a 20 20 78 20 3d 20 28 63 6f 6e 73 74 20 ;.. x = (const
5d80: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 62 unsigned char*)b
5d90: 6c 6f 62 5f 62 75 66 66 65 72 28 70 42 6c 6f 62 lob_buffer(pBlob
5da0: 29 3b 0a 20 20 6e 20 3d 20 62 6c 6f 62 5f 73 69 );. n = blob_si
5db0: 7a 65 28 70 42 6c 6f 62 29 3b 0a 20 20 66 6f 72 ze(pBlob);. for
5dc0: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 3d 31 36 (i=0; i<n; i+=16
5dd0: 29 7b 0a 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 ){. j = 0;.
5de0: 20 20 7a 4c 69 6e 65 5b 30 5d 20 3d 20 7a 48 65 zLine[0] = zHe
5df0: 78 5b 28 69 3e 3e 32 34 29 26 30 78 66 5d 3b 0a x[(i>>24)&0xf];.
5e00: 20 20 20 20 7a 4c 69 6e 65 5b 31 5d 20 3d 20 7a zLine[1] = z
5e10: 48 65 78 5b 28 69 3e 3e 31 36 29 26 30 78 66 5d Hex[(i>>16)&0xf]
5e20: 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 32 5d 20 3d ;. zLine[2] =
5e30: 20 7a 48 65 78 5b 28 69 3e 3e 38 29 26 30 78 66 zHex[(i>>8)&0xf
5e40: 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b 33 5d 20 ];. zLine[3]
5e50: 3d 20 7a 48 65 78 5b 69 26 30 78 66 5d 3b 0a 20 = zHex[i&0xf];.
5e60: 20 20 20 7a 4c 69 6e 65 5b 34 5d 20 3d 20 27 3a zLine[4] = ':
5e70: 27 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a ';. sprintf(z
5e80: 4c 69 6e 65 2c 20 22 25 30 34 78 3a 20 22 2c 20 Line, "%04x: ",
5e90: 69 29 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b i);. for(j=0;
5ea0: 20 6a 3c 31 36 3b 20 6a 2b 2b 29 7b 0a 20 20 20 j<16; j++){.
5eb0: 20 20 20 6b 20 3d 20 35 2b 6a 2a 33 3b 0a 20 20 k = 5+j*3;.
5ec0: 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 3d 20 27 zLine[k] = '
5ed0: 20 27 3b 0a 20 20 20 20 20 20 69 66 28 20 69 2b ';. if( i+
5ee0: 6a 3c 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 75 j<n ){. u
5ef0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 20 3d nsigned char c =
5f00: 20 78 5b 69 2b 6a 5d 3b 0a 20 20 20 20 20 20 20 x[i+j];.
5f10: 20 7a 4c 69 6e 65 5b 6b 2b 31 5d 20 3d 20 7a 48 zLine[k+1] = zH
5f20: 65 78 5b 63 3e 3e 34 5d 3b 0a 20 20 20 20 20 20 ex[c>>4];.
5f30: 20 20 7a 4c 69 6e 65 5b 6b 2b 32 5d 20 3d 20 7a zLine[k+2] = z
5f40: 48 65 78 5b 63 26 30 78 66 5d 3b 0a 20 20 20 20 Hex[c&0xf];.
5f50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
5f60: 20 7a 4c 69 6e 65 5b 6b 2b 31 5d 20 3d 20 27 20 zLine[k+1] = '
5f70: 27 3b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 ';. zLine
5f80: 5b 6b 2b 32 5d 20 3d 20 27 20 27 3b 0a 20 20 20 [k+2] = ' ';.
5f90: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a }. }. z
5fa0: 4c 69 6e 65 5b 35 33 5d 20 3d 20 27 20 27 3b 0a Line[53] = ' ';.
5fb0: 20 20 20 20 7a 4c 69 6e 65 5b 35 34 5d 20 3d 20 zLine[54] =
5fc0: 27 20 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 ' ';. for(j=0
5fd0: 3b 20 6a 3c 31 36 3b 20 6a 2b 2b 29 7b 0a 20 20 ; j<16; j++){.
5fe0: 20 20 20 20 6b 20 3d 20 6a 2b 35 35 3b 0a 20 20 k = j+55;.
5ff0: 20 20 20 20 69 66 28 20 69 2b 6a 3c 6e 20 29 7b if( i+j<n ){
6000: 0a 20 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 . unsigne
6010: 64 20 63 68 61 72 20 63 20 3d 20 78 5b 69 2b 6a d char c = x[i+j
6020: 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 ];. if( c
6030: 3e 3d 30 78 32 30 20 26 26 20 63 3c 3d 30 78 37 >=0x20 && c<=0x7
6040: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 7a e ){. z
6050: 4c 69 6e 65 5b 6b 5d 20 3d 20 63 3b 0a 20 20 20 Line[k] = c;.
6060: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 }else{.
6070: 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 3d zLine[k] =
6080: 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a '.';. }.
6090: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
60a0: 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 3d 20 zLine[k] =
60b0: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0;. }. }
60c0: 0a 20 20 20 20 7a 4c 69 6e 65 5b 37 31 5d 20 3d . zLine[71] =
60d0: 20 30 3b 0a 20 20 20 20 40 20 25 68 28 7a 4c 69 0;. @ %h(zLi
60e0: 6e 65 29 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a ne). }.}../*.**
60f0: 20 57 45 42 50 41 47 45 3a 20 68 65 78 64 75 6d WEBPAGE: hexdum
6100: 70 0a 2a 2a 20 55 52 4c 3a 20 2f 68 65 78 64 75 p.** URL: /hexdu
6110: 6d 70 3f 6e 61 6d 65 3d 41 52 54 49 46 41 43 54 mp?name=ARTIFACT
6120: 49 44 0a 2a 2a 20 0a 2a 2a 20 53 68 6f 77 20 74 ID.** .** Show t
6130: 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 he complete cont
6140: 65 6e 74 20 6f 66 20 61 20 66 69 6c 65 20 69 64 ent of a file id
6150: 65 6e 74 69 66 69 65 64 20 62 79 20 41 52 54 49 entified by ARTI
6160: 46 41 43 54 49 44 0a 2a 2a 20 61 73 20 70 72 65 FACTID.** as pre
6170: 66 6f 72 6d 61 74 74 65 64 20 74 65 78 74 2e 0a formatted text..
6180: 2a 2f 0a 76 6f 69 64 20 68 65 78 64 75 6d 70 5f */.void hexdump_
6190: 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 69 6e page(void){. in
61a0: 74 20 72 69 64 3b 0a 20 20 42 6c 6f 62 20 63 6f t rid;. Blob co
61b0: 6e 74 65 6e 74 3b 0a 20 20 42 6c 6f 62 20 64 6f ntent;. Blob do
61c0: 77 6e 6c 6f 61 64 4e 61 6d 65 3b 0a 20 20 63 68 wnloadName;. ch
61d0: 61 72 20 2a 7a 55 75 69 64 3b 0a 0a 20 20 72 69 ar *zUuid;.. ri
61e0: 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 d = name_to_rid(
61f0: 50 44 28 22 6e 61 6d 65 22 2c 22 30 22 29 29 3b PD("name","0"));
6200: 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 . login_check_c
6210: 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 redentials();.
6220: 69 66 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b if( !g.okRead ){
6230: 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b login_needed();
6240: 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 69 66 28 return; }. if(
6250: 20 72 69 64 3d 3d 30 20 29 7b 20 63 67 69 5f 72 rid==0 ){ cgi_r
6260: 65 64 69 72 65 63 74 28 22 2f 68 6f 6d 65 22 29 edirect("/home")
6270: 3b 20 7d 0a 20 20 69 66 28 20 67 2e 6f 6b 41 64 ; }. if( g.okAd
6280: 6d 69 6e 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 min ){. const
6290: 20 63 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 char *zUuid = d
62a0: 62 5f 74 65 78 74 28 22 22 2c 20 22 53 45 4c 45 b_text("", "SELE
62b0: 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f CT uuid FROM blo
62c0: 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c b WHERE rid=%d",
62d0: 20 72 69 64 29 3b 0a 20 20 20 20 69 66 28 20 64 rid);. if( d
62e0: 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 b_exists("SELECT
62f0: 20 31 20 46 52 4f 4d 20 73 68 75 6e 20 57 48 45 1 FROM shun WHE
6300: 52 45 20 75 75 69 64 3d 27 25 73 27 22 2c 20 7a RE uuid='%s'", z
6310: 55 75 69 64 29 20 29 7b 0a 20 20 20 20 20 20 73 Uuid) ){. s
6320: 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 tyle_submenu_ele
6330: 6d 65 6e 74 28 22 55 6e 73 68 75 6e 22 2c 22 55 ment("Unshun","U
6340: 6e 73 68 75 6e 22 2c 20 22 25 73 2f 73 68 75 6e nshun", "%s/shun
6350: 3f 75 75 69 64 3d 25 73 26 73 75 62 3d 31 22 2c ?uuid=%s&sub=1",
6360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 2e 7a . g.z
6370: 54 6f 70 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 Top, zUuid);.
6380: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 74 }else{. st
6390: 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d yle_submenu_elem
63a0: 65 6e 74 28 22 53 68 75 6e 22 2c 22 53 68 75 6e ent("Shun","Shun
63b0: 22 2c 20 22 25 73 2f 73 68 75 6e 3f 73 68 75 6e ", "%s/shun?shun
63c0: 3d 25 73 23 61 64 64 73 68 75 6e 22 2c 0a 20 20 =%s#addshun",.
63d0: 20 20 20 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 g.zTop
63e0: 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 7d 0a , zUuid);. }.
63f0: 20 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 }. style_head
6400: 65 72 28 22 48 65 78 20 41 72 74 69 66 61 63 74 er("Hex Artifact
6410: 20 43 6f 6e 74 65 6e 74 22 29 3b 0a 20 20 7a 55 Content");. zU
6420: 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 22 3f uid = db_text("?
6430: 22 2c 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 ","SELECT uuid F
6440: 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 ROM blob WHERE r
6450: 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 id=%d", rid);.
6460: 40 20 3c 68 32 3e 41 72 74 69 66 61 63 74 20 25 @ <h2>Artifact %
6470: 73 28 7a 55 75 69 64 29 3a 3c 2f 68 32 3e 0a 20 s(zUuid):</h2>.
6480: 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a @ <blockquote>.
6490: 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 64 6f 77 blob_zero(&dow
64a0: 6e 6c 6f 61 64 4e 61 6d 65 29 3b 0a 20 20 6f 62 nloadName);. ob
64b0: 6a 65 63 74 5f 64 65 73 63 72 69 70 74 69 6f 6e ject_description
64c0: 28 72 69 64 2c 20 30 2c 20 26 64 6f 77 6e 6c 6f (rid, 0, &downlo
64d0: 61 64 4e 61 6d 65 29 3b 0a 20 20 73 74 79 6c 65 adName);. style
64e0: 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 _submenu_element
64f0: 28 22 44 6f 77 6e 6c 6f 61 64 22 2c 20 22 44 6f ("Download", "Do
6500: 77 6e 6c 6f 61 64 22 2c 20 0a 20 20 20 20 20 20 wnload", .
6510: 20 20 22 25 73 2f 72 61 77 2f 25 54 3f 6e 61 6d "%s/raw/%T?nam
6520: 65 3d 25 64 22 2c 20 67 2e 7a 42 61 73 65 55 52 e=%d", g.zBaseUR
6530: 4c 2c 20 62 6c 6f 62 5f 73 74 72 28 26 64 6f 77 L, blob_str(&dow
6540: 6e 6c 6f 61 64 4e 61 6d 65 29 2c 20 72 69 64 29 nloadName), rid)
6550: 3b 0a 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f ;. @ </blockquo
6560: 74 65 3e 0a 20 20 40 20 3c 68 72 3e 0a 20 20 63 te>. @ <hr>. c
6570: 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c 20 ontent_get(rid,
6580: 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 40 20 3c &content);. @ <
6590: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e blockquote><pre>
65a0: 0a 20 20 68 65 78 64 75 6d 70 28 26 63 6f 6e 74 . hexdump(&cont
65b0: 65 6e 74 29 3b 0a 20 20 40 20 3c 2f 70 72 65 3e ent);. @ </pre>
65c0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 </blockquote>.
65d0: 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a style_footer();.
65e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 }../*.** WEBPAGE
65f0: 3a 20 61 72 74 69 66 61 63 74 0a 2a 2a 20 55 52 : artifact.** UR
6600: 4c 3a 20 2f 61 72 74 69 66 61 63 74 3f 6e 61 6d L: /artifact?nam
6610: 65 3d 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 20 e=ARTIFACTID.**
6620: 0a 2a 2a 20 53 68 6f 77 20 74 68 65 20 63 6f 6d .** Show the com
6630: 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66 plete content of
6640: 20 61 20 66 69 6c 65 20 69 64 65 6e 74 69 66 69 a file identifi
6650: 65 64 20 62 79 20 41 52 54 49 46 41 43 54 49 44 ed by ARTIFACTID
6660: 0a 2a 2a 20 61 73 20 70 72 65 66 6f 72 6d 61 74 .** as preformat
6670: 74 65 64 20 74 65 78 74 2e 0a 2a 2f 0a 76 6f 69 ted text..*/.voi
6680: 64 20 61 72 74 69 66 61 63 74 5f 70 61 67 65 28 d artifact_page(
6690: 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 void){. int rid
66a0: 3b 0a 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 ;. Blob content
66b0: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a ;. const char *
66c0: 7a 4d 69 6d 65 3b 0a 20 20 42 6c 6f 62 20 64 6f zMime;. Blob do
66d0: 77 6e 6c 6f 61 64 4e 61 6d 65 3b 0a 20 20 69 6e wnloadName;. in
66e0: 74 20 72 65 6e 64 65 72 41 73 57 69 6b 69 20 3d t renderAsWiki =
66f0: 20 30 3b 0a 20 20 69 6e 74 20 72 65 6e 64 65 72 0;. int render
6700: 41 73 48 74 6d 6c 20 3d 20 30 3b 0a 20 20 63 6f AsHtml = 0;. co
6710: 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 64 3b nst char *zUuid;
6720: 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f 74 .. rid = name_t
6730: 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 2c o_rid(PD("name",
6740: 22 30 22 29 29 3b 0a 20 20 6c 6f 67 69 6e 5f 63 "0"));. login_c
6750: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 heck_credentials
6760: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 ();. if( !g.okR
6770: 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 ead ){ login_nee
6780: 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d ded(); return; }
6790: 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b . if( rid==0 ){
67a0: 20 63 67 69 5f 72 65 64 69 72 65 63 74 28 22 2f cgi_redirect("/
67b0: 68 6f 6d 65 22 29 3b 20 7d 0a 20 20 69 66 28 20 home"); }. if(
67c0: 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 20 20 g.okAdmin ){.
67d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 const char *zUu
67e0: 69 64 20 3d 20 64 62 5f 74 65 78 74 28 22 22 2c id = db_text("",
67f0: 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 "SELECT uuid FR
6800: 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 OM blob WHERE ri
6810: 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 20 d=%d", rid);.
6820: 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 if( db_exists("
6830: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 73 68 SELECT 1 FROM sh
6840: 75 6e 20 57 48 45 52 45 20 75 75 69 64 3d 27 25 un WHERE uuid='%
6850: 73 27 22 2c 20 7a 55 75 69 64 29 20 29 7b 0a 20 s'", zUuid) ){.
6860: 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 style_subme
6870: 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 55 6e 73 68 nu_element("Unsh
6880: 75 6e 22 2c 22 55 6e 73 68 75 6e 22 2c 20 22 25 un","Unshun", "%
6890: 73 2f 73 68 75 6e 3f 75 75 69 64 3d 25 73 26 73 s/shun?uuid=%s&s
68a0: 75 62 3d 31 22 2c 0a 20 20 20 20 20 20 20 20 20 ub=1",.
68b0: 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 g.zTop, zUuid
68c0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 );. }else{.
68d0: 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e style_submen
68e0: 75 5f 65 6c 65 6d 65 6e 74 28 22 53 68 75 6e 22 u_element("Shun"
68f0: 2c 22 53 68 75 6e 22 2c 20 22 25 73 2f 73 68 75 ,"Shun", "%s/shu
6900: 6e 3f 73 68 75 6e 3d 25 73 23 61 64 64 73 68 75 n?shun=%s#addshu
6910: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 n",.
6920: 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 3b 0a g.zTop, zUuid);.
6930: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 74 79 6c }. }. styl
6940: 65 5f 68 65 61 64 65 72 28 22 41 72 74 69 66 61 e_header("Artifa
6950: 63 74 20 43 6f 6e 74 65 6e 74 22 29 3b 0a 20 20 ct Content");.
6960: 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 zUuid = db_text(
6970: 22 3f 22 2c 20 22 53 45 4c 45 43 54 20 75 75 69 "?", "SELECT uui
6980: 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 d FROM blob WHER
6990: 45 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b E rid=%d", rid);
69a0: 0a 20 20 40 20 3c 68 32 3e 41 72 74 69 66 61 63 . @ <h2>Artifac
69b0: 74 20 25 73 28 7a 55 75 69 64 29 3c 2f 68 32 3e t %s(zUuid)</h2>
69c0: 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 . @ <blockquote
69d0: 3e 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 64 >. blob_zero(&d
69e0: 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3b 0a 20 20 ownloadName);.
69f0: 6f 62 6a 65 63 74 5f 64 65 73 63 72 69 70 74 69 object_descripti
6a00: 6f 6e 28 72 69 64 2c 20 30 2c 20 26 64 6f 77 6e on(rid, 0, &down
6a10: 6c 6f 61 64 4e 61 6d 65 29 3b 0a 20 20 73 74 79 loadName);. sty
6a20: 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 le_submenu_eleme
6a30: 6e 74 28 22 44 6f 77 6e 6c 6f 61 64 22 2c 20 22 nt("Download", "
6a40: 44 6f 77 6e 6c 6f 61 64 22 2c 20 0a 20 20 20 20 Download", .
6a50: 20 20 20 20 20 20 22 25 73 2f 72 61 77 2f 25 54 "%s/raw/%T
6a60: 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 2e 7a 54 6f ?name=%d", g.zTo
6a70: 70 2c 20 62 6c 6f 62 5f 73 74 72 28 26 64 6f 77 p, blob_str(&dow
6a80: 6e 6c 6f 61 64 4e 61 6d 65 29 2c 20 72 69 64 29 nloadName), rid)
6a90: 3b 0a 20 20 7a 4d 69 6d 65 20 3d 20 6d 69 6d 65 ;. zMime = mime
6aa0: 74 79 70 65 5f 66 72 6f 6d 5f 6e 61 6d 65 28 62 type_from_name(b
6ab0: 6c 6f 62 5f 73 74 72 28 26 64 6f 77 6e 6c 6f 61 lob_str(&downloa
6ac0: 64 4e 61 6d 65 29 29 3b 0a 20 20 69 66 28 20 7a dName));. if( z
6ad0: 4d 69 6d 65 20 29 7b 0a 20 20 20 20 69 66 28 20 Mime ){. if(
6ae0: 73 74 72 63 6d 70 28 7a 4d 69 6d 65 2c 20 22 74 strcmp(zMime, "t
6af0: 65 78 74 2f 68 74 6d 6c 22 29 3d 3d 30 20 29 7b ext/html")==0 ){
6b00: 0a 20 20 20 20 20 20 69 66 28 20 50 28 22 74 78 . if( P("tx
6b10: 74 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 t") ){. s
6b20: 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 tyle_submenu_ele
6b30: 6d 65 6e 74 28 22 48 74 6d 6c 22 2c 20 22 48 74 ment("Html", "Ht
6b40: 6d 6c 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 ml",.
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b60: 20 20 20 22 25 73 2f 61 72 74 69 66 61 63 74 3f "%s/artifact?
6b70: 6e 61 6d 65 3d 25 64 22 2c 20 67 2e 7a 54 6f 70 name=%d", g.zTop
6b80: 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 20 7d 65 , rid);. }e
6b90: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 6e lse{. ren
6ba0: 64 65 72 41 73 48 74 6d 6c 20 3d 20 31 3b 0a 20 derAsHtml = 1;.
6bb0: 20 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 style_sub
6bc0: 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 54 65 menu_element("Te
6bd0: 78 74 22 2c 20 22 54 65 78 74 22 2c 0a 20 20 20 xt", "Text",.
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6bf0: 20 20 20 20 20 20 20 20 20 20 20 22 25 73 2f 61 "%s/a
6c00: 72 74 69 66 61 63 74 3f 6e 61 6d 65 3d 25 64 26 rtifact?name=%d&
6c10: 74 78 74 3d 31 22 2c 20 67 2e 7a 54 6f 70 2c 20 txt=1", g.zTop,
6c20: 72 69 64 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 rid);. }.
6c30: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 }else if( strc
6c40: 6d 70 28 7a 4d 69 6d 65 2c 20 22 61 70 70 6c 69 mp(zMime, "appli
6c50: 63 61 74 69 6f 6e 2f 78 2d 66 6f 73 73 69 6c 2d cation/x-fossil-
6c60: 77 69 6b 69 22 29 3d 3d 30 20 29 7b 0a 20 20 20 wiki")==0 ){.
6c70: 20 20 20 69 66 28 20 50 28 22 74 78 74 22 29 20 if( P("txt")
6c80: 29 7b 0a 20 20 20 20 20 20 20 20 73 74 79 6c 65 ){. style
6c90: 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 _submenu_element
6ca0: 28 22 57 69 6b 69 22 2c 20 22 57 69 6b 69 22 2c ("Wiki", "Wiki",
6cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
6cd0: 25 73 2f 61 72 74 69 66 61 63 74 3f 6e 61 6d 65 %s/artifact?name
6ce0: 3d 25 64 22 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 =%d", g.zTop, ri
6cf0: 64 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b d);. }else{
6d00: 0a 20 20 20 20 20 20 20 20 72 65 6e 64 65 72 41 . renderA
6d10: 73 57 69 6b 69 20 3d 20 31 3b 0a 20 20 20 20 20 sWiki = 1;.
6d20: 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 style_submenu
6d30: 5f 65 6c 65 6d 65 6e 74 28 22 54 65 78 74 22 2c _element("Text",
6d40: 20 22 54 65 78 74 22 2c 0a 20 20 20 20 20 20 20 "Text",.
6d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6d60: 20 20 20 20 20 20 20 22 25 73 2f 61 72 74 69 66 "%s/artif
6d70: 61 63 74 3f 6e 61 6d 65 3d 25 64 26 74 78 74 3d act?name=%d&txt=
6d80: 31 22 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 1", g.zTop, rid)
6d90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
6da0: 20 20 7d 0a 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 }. @ </blockq
6db0: 75 6f 74 65 3e 0a 20 20 40 20 3c 68 72 3e 0a 20 uote>. @ <hr>.
6dc0: 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 content_get(rid
6dd0: 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 69 , &content);. i
6de0: 66 28 20 72 65 6e 64 65 72 41 73 57 69 6b 69 20 f( renderAsWiki
6df0: 29 7b 0a 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76 ){. wiki_conv
6e00: 65 72 74 28 26 63 6f 6e 74 65 6e 74 2c 20 30 2c ert(&content, 0,
6e10: 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 0);. }else if(
6e20: 20 72 65 6e 64 65 72 41 73 48 74 6d 6c 20 29 7b renderAsHtml ){
6e30: 0a 20 20 20 20 40 20 3c 64 69 76 3e 0a 20 20 20 . @ <div>.
6e40: 20 63 67 69 5f 61 70 70 65 6e 64 5f 63 6f 6e 74 cgi_append_cont
6e50: 65 6e 74 28 62 6c 6f 62 5f 62 75 66 66 65 72 28 ent(blob_buffer(
6e60: 26 63 6f 6e 74 65 6e 74 29 2c 20 62 6c 6f 62 5f &content), blob_
6e70: 73 69 7a 65 28 26 63 6f 6e 74 65 6e 74 29 29 3b size(&content));
6e80: 0a 20 20 20 20 40 20 3c 2f 64 69 76 3e 0a 20 20 . @ </div>.
6e90: 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 4d 69 6d 65 }else{. zMime
6ea0: 20 3d 20 6d 69 6d 65 74 79 70 65 5f 66 72 6f 6d = mimetype_from
6eb0: 5f 63 6f 6e 74 65 6e 74 28 26 63 6f 6e 74 65 6e _content(&conten
6ec0: 74 29 3b 0a 20 20 20 20 40 20 3c 62 6c 6f 63 6b t);. @ <block
6ed0: 71 75 6f 74 65 3e 0a 20 20 20 20 69 66 28 20 7a quote>. if( z
6ee0: 4d 69 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 Mime==0 ){.
6ef0: 20 40 20 3c 70 72 65 3e 0a 20 20 20 20 20 20 40 @ <pre>. @
6f00: 20 25 68 28 62 6c 6f 62 5f 73 74 72 28 26 63 6f %h(blob_str(&co
6f10: 6e 74 65 6e 74 29 29 0a 20 20 20 20 20 20 40 20 ntent)). @
6f20: 3c 2f 70 72 65 3e 0a 20 20 20 20 20 20 73 74 79 </pre>. sty
6f30: 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 le_submenu_eleme
6f40: 6e 74 28 22 48 65 78 22 2c 22 48 65 78 22 2c 20 nt("Hex","Hex",
6f50: 22 25 73 2f 68 65 78 64 75 6d 70 3f 6e 61 6d 65 "%s/hexdump?name
6f60: 3d 25 64 22 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 =%d", g.zTop, ri
6f70: 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 d);. }else if
6f80: 28 20 73 74 72 6e 63 6d 70 28 7a 4d 69 6d 65 2c ( strncmp(zMime,
6f90: 20 22 69 6d 61 67 65 2f 22 2c 20 36 29 3d 3d 30 "image/", 6)==0
6fa0: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 69 6d 67 ){. @ <img
6fb0: 20 73 72 63 3d 22 25 73 28 67 2e 7a 42 61 73 65 src="%s(g.zBase
6fc0: 55 52 4c 29 2f 72 61 77 3f 6e 61 6d 65 3d 25 64 URL)/raw?name=%d
6fd0: 28 72 69 64 29 26 6d 3d 25 73 28 7a 4d 69 6d 65 (rid)&m=%s(zMime
6fe0: 29 22 3e 3c 2f 69 6d 67 3e 0a 20 20 20 20 20 20 )"></img>.
6ff0: 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c style_submenu_el
7000: 65 6d 65 6e 74 28 22 48 65 78 22 2c 22 48 65 78 ement("Hex","Hex
7010: 22 2c 20 22 25 73 2f 68 65 78 64 75 6d 70 3f 6e ", "%s/hexdump?n
7020: 61 6d 65 3d 25 64 22 2c 20 67 2e 7a 54 6f 70 2c ame=%d", g.zTop,
7030: 20 72 69 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 rid);. }else
7040: 7b 0a 20 20 20 20 20 20 40 20 3c 70 72 65 3e 0a {. @ <pre>.
7050: 20 20 20 20 20 20 68 65 78 64 75 6d 70 28 26 63 hexdump(&c
7060: 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 20 20 40 ontent);. @
7070: 20 3c 2f 70 72 65 3e 0a 20 20 20 20 7d 0a 20 20 </pre>. }.
7080: 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 @ </blockquote
7090: 3e 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f 66 6f >. }. style_fo
70a0: 6f 74 65 72 28 29 3b 0a 7d 20 20 0a 0a 2f 2a 0a oter();.} ../*.
70b0: 2a 2a 20 57 45 42 50 41 47 45 3a 20 74 69 6e 66 ** WEBPAGE: tinf
70c0: 6f 0a 2a 2a 20 55 52 4c 3a 20 2f 74 69 6e 66 6f o.** URL: /tinfo
70d0: 3f 6e 61 6d 65 3d 41 52 54 49 46 41 43 54 49 44 ?name=ARTIFACTID
70e0: 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 20 74 68 65 20 .**.** Show the
70f0: 64 65 74 61 69 6c 73 20 6f 66 20 61 20 74 69 63 details of a tic
7100: 6b 65 74 20 63 68 61 6e 67 65 20 63 6f 6e 74 72 ket change contr
7110: 6f 6c 20 61 72 74 69 66 61 63 74 2e 0a 2a 2f 0a ol artifact..*/.
7120: 76 6f 69 64 20 74 69 6e 66 6f 5f 70 61 67 65 28 void tinfo_page(
7130: 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 void){. int rid
7140: 3b 0a 20 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 ;. Blob content
7150: 3b 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 65 3b ;. char *zDate;
7160: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
7170: 55 75 69 64 3b 0a 20 20 63 68 61 72 20 7a 54 6b Uuid;. char zTk
7180: 74 4e 61 6d 65 5b 32 30 5d 3b 0a 20 20 4d 61 6e tName[20];. Man
7190: 69 66 65 73 74 20 6d 3b 0a 0a 20 20 6c 6f 67 69 ifest m;.. logi
71a0: 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 n_check_credenti
71b0: 61 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e als();. if( !g.
71c0: 6f 6b 52 64 54 6b 74 20 29 7b 20 6c 6f 67 69 6e okRdTkt ){ login
71d0: 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 _needed(); retur
71e0: 6e 3b 20 7d 0a 20 20 72 69 64 20 3d 20 6e 61 6d n; }. rid = nam
71f0: 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d e_to_rid(PD("nam
7200: 65 22 2c 22 30 22 29 29 3b 0a 20 20 69 66 28 20 e","0"));. if(
7210: 72 69 64 3d 3d 30 20 29 7b 20 66 6f 73 73 69 6c rid==0 ){ fossil
7220: 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 _redirect_home()
7230: 3b 20 7d 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 ; }. zUuid = db
7240: 5f 74 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 _text("", "SELEC
7250: 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 T uuid FROM blob
7260: 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 WHERE rid=%d",
7270: 72 69 64 29 3b 0a 20 20 69 66 28 20 67 2e 6f 6b rid);. if( g.ok
7280: 41 64 6d 69 6e 20 29 7b 0a 20 20 20 20 69 66 28 Admin ){. if(
7290: 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 db_exists("SELE
72a0: 43 54 20 31 20 46 52 4f 4d 20 73 68 75 6e 20 57 CT 1 FROM shun W
72b0: 48 45 52 45 20 75 75 69 64 3d 27 25 73 27 22 2c HERE uuid='%s'",
72c0: 20 7a 55 75 69 64 29 20 29 7b 0a 20 20 20 20 20 zUuid) ){.
72d0: 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 style_submenu_e
72e0: 6c 65 6d 65 6e 74 28 22 55 6e 73 68 75 6e 22 2c lement("Unshun",
72f0: 22 55 6e 73 68 75 6e 22 2c 20 22 25 73 2f 73 68 "Unshun", "%s/sh
7300: 75 6e 3f 75 75 69 64 3d 25 73 26 73 75 62 3d 31 un?uuid=%s&sub=1
7310: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 ",. g
7320: 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 3b 0a 20 .zTop, zUuid);.
7330: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
7340: 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c style_submenu_el
7350: 65 6d 65 6e 74 28 22 53 68 75 6e 22 2c 22 53 68 ement("Shun","Sh
7360: 75 6e 22 2c 20 22 25 73 2f 73 68 75 6e 3f 73 68 un", "%s/shun?sh
7370: 75 6e 3d 25 73 23 61 64 64 73 68 75 6e 22 2c 0a un=%s#addshun",.
7380: 20 20 20 20 20 20 20 20 20 20 20 20 67 2e 7a 54 g.zT
7390: 6f 70 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 op, zUuid);.
73a0: 7d 0a 20 20 7d 0a 20 20 63 6f 6e 74 65 6e 74 5f }. }. content_
73b0: 67 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e get(rid, &conten
73c0: 74 29 3b 0a 20 20 69 66 28 20 6d 61 6e 69 66 65 t);. if( manife
73d0: 73 74 5f 70 61 72 73 65 28 26 6d 2c 20 26 63 6f st_parse(&m, &co
73e0: 6e 74 65 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 ntent)==0 ){.
73f0: 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 fossil_redirect
7400: 5f 68 6f 6d 65 28 29 3b 0a 20 20 7d 0a 20 20 69 _home();. }. i
7410: 66 28 20 6d 2e 74 79 70 65 21 3d 43 46 54 59 50 f( m.type!=CFTYP
7420: 45 5f 54 49 43 4b 45 54 20 29 7b 0a 20 20 20 20 E_TICKET ){.
7430: 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f fossil_redirect_
7440: 68 6f 6d 65 28 29 3b 0a 20 20 7d 0a 20 20 73 74 home();. }. st
7450: 79 6c 65 5f 68 65 61 64 65 72 28 22 54 69 63 6b yle_header("Tick
7460: 65 74 20 43 68 61 6e 67 65 20 44 65 74 61 69 6c et Change Detail
7470: 73 22 29 3b 0a 20 20 7a 44 61 74 65 20 3d 20 64 s");. zDate = d
7480: 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 b_text(0, "SELEC
7490: 54 20 64 61 74 65 74 69 6d 65 28 25 2e 31 32 66 T datetime(%.12f
74a0: 29 22 2c 20 6d 2e 72 44 61 74 65 29 3b 0a 20 20 )", m.rDate);.
74b0: 6d 65 6d 63 70 79 28 7a 54 6b 74 4e 61 6d 65 2c memcpy(zTktName,
74c0: 20 6d 2e 7a 54 69 63 6b 65 74 55 75 69 64 2c 20 m.zTicketUuid,
74d0: 31 30 29 3b 0a 20 20 7a 54 6b 74 4e 61 6d 65 5b 10);. zTktName[
74e0: 31 30 5d 20 3d 20 30 3b 0a 20 20 40 20 3c 68 32 10] = 0;. @ <h2
74f0: 3e 43 68 61 6e 67 65 73 20 74 6f 20 74 69 63 6b >Changes to tick
7500: 65 74 20 3c 61 20 68 72 65 66 3d 22 25 73 28 6d et <a href="%s(m
7510: 2e 7a 54 69 63 6b 65 74 55 75 69 64 29 22 3e 25 .zTicketUuid)">%
7520: 73 28 7a 54 6b 74 4e 61 6d 65 29 3c 2f 61 3e 3c s(zTktName)</a><
7530: 2f 68 32 3e 0a 20 20 40 0a 20 20 40 20 3c 70 3e /h2>. @. @ <p>
7540: 42 79 20 25 68 28 6d 2e 7a 55 73 65 72 29 20 6f By %h(m.zUser) o
7550: 6e 20 25 73 28 7a 44 61 74 65 29 2e 20 20 53 65 n %s(zDate). Se
7560: 65 20 61 6c 73 6f 3a 0a 20 20 40 20 3c 61 20 68 e also:. @ <a h
7570: 72 65 66 3d 22 25 73 28 67 2e 7a 54 6f 70 29 2f ref="%s(g.zTop)/
7580: 61 72 74 69 66 61 63 74 2f 25 54 28 7a 55 75 69 artifact/%T(zUui
7590: 64 29 22 3e 61 72 74 69 66 61 63 74 20 63 6f 6e d)">artifact con
75a0: 74 65 6e 74 3c 2f 61 3e 2c 20 61 6e 64 0a 20 20 tent</a>, and.
75b0: 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e @ <a href="%s(g.
75c0: 7a 54 6f 70 29 2f 74 6b 74 68 69 73 74 6f 72 79 zTop)/tkthistory
75d0: 2f 25 73 28 6d 2e 7a 54 69 63 6b 65 74 55 75 69 /%s(m.zTicketUui
75e0: 64 29 22 3e 74 69 63 6b 65 74 20 68 69 73 74 6f d)">ticket histo
75f0: 72 79 3c 2f 61 3e 0a 20 20 40 20 3c 2f 70 3e 0a ry</a>. @ </p>.
7600: 20 20 40 0a 20 20 40 20 3c 6f 6c 3e 0a 20 20 66 @. @ <ol>. f
7610: 72 65 65 28 7a 44 61 74 65 29 3b 0a 20 20 74 69 ree(zDate);. ti
7620: 63 6b 65 74 5f 6f 75 74 70 75 74 5f 63 68 61 6e cket_output_chan
7630: 67 65 5f 61 72 74 69 66 61 63 74 28 26 6d 29 3b ge_artifact(&m);
7640: 0a 20 20 6d 61 6e 69 66 65 73 74 5f 63 6c 65 61 . manifest_clea
7650: 72 28 26 6d 29 3b 0a 20 20 73 74 79 6c 65 5f 66 r(&m);. style_f
7660: 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 0a 2f 2a 0a ooter();.}.../*.
7670: 2a 2a 20 57 45 42 50 41 47 45 3a 20 69 6e 66 6f ** WEBPAGE: info
7680: 0a 2a 2a 20 55 52 4c 3a 20 69 6e 66 6f 2f 41 52 .** URL: info/AR
7690: 54 49 46 41 43 54 49 44 0a 2a 2a 0a 2a 2a 20 54 TIFACTID.**.** T
76a0: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 he argument is a
76b0: 20 61 72 74 69 66 61 63 74 20 49 44 20 77 68 69 artifact ID whi
76c0: 63 68 20 6d 69 67 68 74 20 62 65 20 61 20 62 61 ch might be a ba
76d0: 73 65 6c 69 6e 65 20 6f 72 20 61 20 66 69 6c 65 seline or a file
76e0: 20 6f 72 0a 2a 2a 20 61 20 74 69 63 6b 65 74 20 or.** a ticket
76f0: 63 68 61 6e 67 65 73 20 6f 72 20 61 20 77 69 6b changes or a wik
7700: 69 20 65 64 69 74 6f 72 20 6f 72 20 73 6f 6d 65 i editor or some
7710: 74 68 69 6e 67 20 65 6c 73 65 2e 20 0a 2a 2a 0a thing else. .**.
7720: 2a 2a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 ** Figure out wh
7730: 61 74 20 74 68 65 20 61 72 74 69 66 61 63 74 20 at the artifact
7740: 49 44 20 69 73 20 61 6e 64 20 6a 75 6d 70 20 74 ID is and jump t
7750: 6f 20 69 74 2e 0a 2a 2f 0a 76 6f 69 64 20 69 6e o it..*/.void in
7760: 66 6f 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 fo_page(void){.
7770: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 const char *zNa
7780: 6d 65 3b 0a 20 20 42 6c 6f 62 20 75 75 69 64 3b me;. Blob uuid;
7790: 0a 20 20 69 6e 74 20 72 69 64 2c 20 6e 4e 61 6d . int rid, nNam
77a0: 65 3b 0a 20 20 0a 20 20 7a 4e 61 6d 65 20 3d 20 e;. . zName =
77b0: 50 28 22 6e 61 6d 65 22 29 3b 0a 20 20 69 66 28 P("name");. if(
77c0: 20 7a 4e 61 6d 65 3d 3d 30 20 29 20 66 6f 73 73 zName==0 ) foss
77d0: 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 il_redirect_home
77e0: 28 29 3b 0a 20 20 6e 4e 61 6d 65 20 3d 20 73 74 ();. nName = st
77f0: 72 6c 65 6e 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 rlen(zName);. i
7800: 66 28 20 6e 4e 61 6d 65 3c 34 20 7c 7c 20 6e 4e f( nName<4 || nN
7810: 61 6d 65 3e 55 55 49 44 5f 53 49 5a 45 20 7c 7c ame>UUID_SIZE ||
7820: 20 21 76 61 6c 69 64 61 74 65 31 36 28 7a 4e 61 !validate16(zNa
7830: 6d 65 2c 20 6e 4e 61 6d 65 29 20 29 7b 0a 20 20 me, nName) ){.
7840: 20 20 73 77 69 74 63 68 28 20 73 79 6d 5f 74 61 switch( sym_ta
7850: 67 5f 74 6f 5f 75 75 69 64 28 7a 4e 61 6d 65 2c g_to_uuid(zName,
7860: 20 26 75 75 69 64 29 20 29 7b 0a 20 20 20 20 20 &uuid) ){.
7870: 20 63 61 73 65 20 31 3a 20 7b 0a 20 20 20 20 20 case 1: {.
7880: 20 20 20 2f 2a 20 67 6f 74 20 6f 6e 65 20 55 55 /* got one UU
7890: 49 44 2c 20 75 73 65 20 69 74 20 2a 2f 0a 20 20 ID, use it */.
78a0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 62 6c zName = bl
78b0: 6f 62 5f 73 74 72 28 26 75 75 69 64 29 3b 0a 20 ob_str(&uuid);.
78c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 break;.
78d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 }. case
78e0: 20 32 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 2: {. /*
78f0: 20 67 6f 20 73 6f 6d 65 77 68 65 72 65 20 74 6f go somewhere to
7900: 20 73 68 6f 77 20 74 68 65 20 6d 75 6c 74 69 70 show the multip
7910: 6c 65 20 55 55 49 44 73 20 2a 2f 0a 20 20 20 20 le UUIDs */.
7920: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 return;.
7930: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 break;.
7940: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 }. default
7950: 3a 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 73 73 : {. foss
7960: 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 il_redirect_home
7970: 28 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 ();. brea
7980: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d k;. }. }
7990: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 5f 65 78 . }. if( db_ex
79a0: 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 ists("SELECT 1 F
79b0: 52 4f 4d 20 74 69 63 6b 65 74 20 57 48 45 52 45 ROM ticket WHERE
79c0: 20 74 6b 74 5f 75 75 69 64 20 47 4c 4f 42 20 27 tkt_uuid GLOB '
79d0: 25 73 2a 27 22 2c 20 7a 4e 61 6d 65 29 20 29 7b %s*'", zName) ){
79e0: 0a 20 20 20 20 74 6b 74 76 69 65 77 5f 70 61 67 . tktview_pag
79f0: 65 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b e();. return;
7a00: 0a 20 20 7d 0a 20 20 72 69 64 20 3d 20 64 62 5f . }. rid = db_
7a10: 69 6e 74 28 30 2c 20 22 53 45 4c 45 43 54 20 72 int(0, "SELECT r
7a20: 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 id FROM blob WHE
7a30: 52 45 20 75 75 69 64 20 47 4c 4f 42 20 27 25 73 RE uuid GLOB '%s
7a40: 2a 27 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 69 *'", zName);. i
7a50: 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20 20 20 f( rid==0 ){.
7a60: 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 42 style_header("B
7a70: 72 6f 6b 65 6e 20 4c 69 6e 6b 22 29 3b 0a 20 20 roken Link");.
7a80: 20 20 40 20 3c 70 3e 4e 6f 20 73 75 63 68 20 6f @ <p>No such o
7a90: 62 6a 65 63 74 3a 20 25 68 28 7a 4e 61 6d 65 29 bject: %h(zName)
7aa0: 3c 2f 70 3e 0a 20 20 20 20 73 74 79 6c 65 5f 66 </p>. style_f
7ab0: 6f 6f 74 65 72 28 29 3b 0a 20 20 20 20 72 65 74 ooter();. ret
7ac0: 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 urn;. }. if( d
7ad0: 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 b_exists("SELECT
7ae0: 20 31 20 46 52 4f 4d 20 6d 6c 69 6e 6b 20 57 48 1 FROM mlink WH
7af0: 45 52 45 20 6d 69 64 3d 25 64 22 2c 20 72 69 64 ERE mid=%d", rid
7b00: 29 20 29 7b 0a 20 20 20 20 63 69 5f 70 61 67 65 ) ){. ci_page
7b10: 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 69 66 ();. }else. if
7b20: 28 20 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c ( db_exists("SEL
7b30: 45 43 54 20 31 20 46 52 4f 4d 20 74 61 67 78 72 ECT 1 FROM tagxr
7b40: 65 66 20 4a 4f 49 4e 20 74 61 67 20 55 53 49 4e ef JOIN tag USIN
7b50: 47 28 74 61 67 69 64 29 22 0a 20 20 20 20 20 20 G(tagid)".
7b60: 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 " WHER
7b70: 45 20 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 E rid=%d AND tag
7b80: 6e 61 6d 65 20 4c 49 4b 45 20 27 77 69 6b 69 2d name LIKE 'wiki-
7b90: 25 25 27 22 2c 20 72 69 64 29 20 29 7b 0a 20 20 %%'", rid) ){.
7ba0: 20 20 77 69 6e 66 6f 5f 70 61 67 65 28 29 3b 0a winfo_page();.
7bb0: 20 20 7d 65 6c 73 65 0a 20 20 69 66 28 20 64 62 }else. if( db
7bc0: 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 _exists("SELECT
7bd0: 31 20 46 52 4f 4d 20 74 61 67 78 72 65 66 20 4a 1 FROM tagxref J
7be0: 4f 49 4e 20 74 61 67 20 55 53 49 4e 47 28 74 61 OIN tag USING(ta
7bf0: 67 69 64 29 22 0a 20 20 20 20 20 20 20 20 20 20 gid)".
7c00: 20 20 20 20 20 20 22 20 57 48 45 52 45 20 72 69 " WHERE ri
7c10: 64 3d 25 64 20 41 4e 44 20 74 61 67 6e 61 6d 65 d=%d AND tagname
7c20: 20 4c 49 4b 45 20 27 74 6b 74 2d 25 25 27 22 2c LIKE 'tkt-%%'",
7c30: 20 72 69 64 29 20 29 7b 0a 20 20 20 20 74 69 6e rid) ){. tin
7c40: 66 6f 5f 70 61 67 65 28 29 3b 0a 20 20 7d 65 6c fo_page();. }el
7c50: 73 65 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 se. if( db_exis
7c60: 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f ts("SELECT 1 FRO
7c70: 4d 20 70 6c 69 6e 6b 20 57 48 45 52 45 20 63 69 M plink WHERE ci
7c80: 64 3d 25 64 22 2c 20 72 69 64 29 20 29 7b 0a 20 d=%d", rid) ){.
7c90: 20 20 20 63 69 5f 70 61 67 65 28 29 3b 0a 20 20 ci_page();.
7ca0: 7d 65 6c 73 65 0a 20 20 69 66 28 20 64 62 5f 65 }else. if( db_e
7cb0: 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 xists("SELECT 1
7cc0: 46 52 4f 4d 20 70 6c 69 6e 6b 20 57 48 45 52 45 FROM plink WHERE
7cd0: 20 70 69 64 3d 25 64 22 2c 20 72 69 64 29 20 29 pid=%d", rid) )
7ce0: 7b 0a 20 20 20 20 63 69 5f 70 61 67 65 28 29 3b {. ci_page();
7cf0: 0a 20 20 7d 65 6c 73 65 0a 20 20 7b 0a 20 20 20 . }else. {.
7d00: 20 61 72 74 69 66 61 63 74 5f 70 61 67 65 28 29 artifact_page()
7d10: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 ;. }.}../*.** W
7d20: 45 42 50 41 47 45 3a 20 63 69 5f 65 64 69 74 0a EBPAGE: ci_edit.
7d30: 2a 2a 20 55 52 4c 3a 20 20 63 69 5f 65 64 69 74 ** URL: ci_edit
7d40: 3f 72 3d 52 49 44 26 63 3d 4e 45 57 43 4f 4d 4d ?r=RID&c=NEWCOMM
7d50: 45 4e 54 26 75 3d 4e 45 57 55 53 45 52 0a 2a 2a ENT&u=NEWUSER.**
7d60: 0a 2a 2a 20 50 72 65 73 65 6e 74 20 61 20 64 69 .** Present a di
7d70: 61 6c 6f 67 20 66 6f 72 20 75 70 64 61 74 69 6e alog for updatin
7d80: 67 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 g properties of
7d90: 61 20 62 61 73 65 6c 69 6e 65 3a 0a 2a 2a 0a 2a a baseline:.**.*
7da0: 2a 20 20 20 20 20 2a 20 20 54 68 65 20 63 68 65 * * The che
7db0: 63 6b 2d 69 6e 20 75 73 65 72 0a 2a 2a 20 20 20 ck-in user.**
7dc0: 20 20 2a 20 20 54 68 65 20 63 68 65 63 6b 2d 69 * The check-i
7dd0: 6e 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 20 20 20 n comment.**
7de0: 20 2a 20 20 54 68 65 20 62 61 63 6b 67 72 6f 75 * The backgrou
7df0: 6e 64 20 63 6f 6c 6f 72 2e 0a 2a 2f 0a 76 6f 69 nd color..*/.voi
7e00: 64 20 63 69 5f 65 64 69 74 5f 70 61 67 65 28 76 d ci_edit_page(v
7e10: 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 3b oid){. int rid;
7e20: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
7e30: 43 6f 6d 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 Comment;
7e40: 20 2f 2a 20 43 75 72 72 65 6e 74 20 63 6f 6d 6d /* Current comm
7e50: 65 6e 74 20 6f 6e 20 74 68 65 20 63 68 65 63 6b ent on the check
7e60: 2d 69 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 -in */. const c
7e70: 68 61 72 20 2a 7a 4e 65 77 43 6f 6d 6d 65 6e 74 har *zNewComment
7e80: 3b 20 20 20 20 20 20 2f 2a 20 52 65 76 69 73 65 ; /* Revise
7e90: 64 20 63 68 65 63 6b 2d 69 6e 20 63 6f 6d 6d 65 d check-in comme
7ea0: 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 nt */. const ch
7eb0: 61 72 20 2a 7a 55 73 65 72 3b 20 20 20 20 20 20 ar *zUser;
7ec0: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 /* Current
7ed0: 20 75 73 65 72 20 66 6f 72 20 74 68 65 20 63 68 user for the ch
7ee0: 65 63 6b 2d 69 6e 20 2a 2f 0a 20 20 63 6f 6e 73 eck-in */. cons
7ef0: 74 20 63 68 61 72 20 2a 7a 4e 65 77 55 73 65 72 t char *zNewUser
7f00: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 76 ; /* Rev
7f10: 69 73 65 64 20 75 73 65 72 20 2a 2f 0a 20 20 63 ised user */. c
7f20: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 onst char *zDate
7f30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 ; /*
7f40: 43 75 72 72 65 6e 74 20 64 61 74 65 20 6f 66 20 Current date of
7f50: 74 68 65 20 63 68 65 63 6b 2d 69 6e 20 2a 2f 0a the check-in */.
7f60: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e const char *zN
7f70: 65 77 44 61 74 65 3b 20 20 20 20 20 20 20 20 20 ewDate;
7f80: 2f 2a 20 52 65 76 69 73 65 64 20 63 68 65 63 6b /* Revised check
7f90: 2d 69 6e 20 64 61 74 65 20 2a 2f 0a 20 20 63 6f -in date */. co
7fa0: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 6f 72 nst char *zColor
7fb0: 3b 20 20 20 20 20 20 20 0a 20 20 63 6f 6e 73 74 ; . const
7fc0: 20 63 68 61 72 20 2a 7a 4e 65 77 43 6f 6c 6f 72 char *zNewColor
7fd0: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a ;. const char *
7fe0: 7a 4e 65 77 54 61 67 46 6c 61 67 3b 0a 20 20 63 zNewTagFlag;. c
7ff0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 54 onst char *zNewT
8000: 61 67 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 ag;. const char
8010: 20 2a 7a 4e 65 77 42 72 46 6c 61 67 3b 0a 20 20 *zNewBrFlag;.
8020: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 const char *zNew
8030: 42 72 61 6e 63 68 3b 0a 20 20 63 6f 6e 73 74 20 Branch;. const
8040: 63 68 61 72 20 2a 7a 43 6c 6f 73 65 46 6c 61 67 char *zCloseFlag
8050: 3b 0a 20 20 69 6e 74 20 66 50 72 6f 70 61 67 61 ;. int fPropaga
8060: 74 65 43 6f 6c 6f 72 3b 0a 20 20 63 68 61 72 20 teColor;. char
8070: 2a 7a 55 75 69 64 3b 0a 20 20 42 6c 6f 62 20 63 *zUuid;. Blob c
8080: 6f 6d 6d 65 6e 74 3b 0a 20 20 53 74 6d 74 20 71 omment;. Stmt q
8090: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 ;. static const
80a0: 20 73 74 72 75 63 74 20 53 61 6d 70 6c 65 43 6f struct SampleCo
80b0: 6c 6f 72 73 20 7b 0a 20 20 20 20 20 63 6f 6e 73 lors {. cons
80c0: 74 20 63 68 61 72 20 2a 7a 43 4e 61 6d 65 3b 0a t char *zCName;.
80d0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
80e0: 2a 7a 43 6f 6c 6f 72 3b 0a 20 20 7d 20 61 43 6f *zColor;. } aCo
80f0: 6c 6f 72 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b lor[] = {. {
8100: 20 22 28 6e 6f 6e 65 29 22 2c 20 20 22 22 20 7d "(none)", "" }
8110: 2c 0a 20 20 20 20 20 7b 20 22 23 66 32 64 63 64 ,. { "#f2dcd
8120: 63 22 2c 20 22 23 66 32 64 63 64 63 22 20 7d 2c c", "#f2dcdc" },
8130: 0a 20 20 20 20 20 7b 20 22 23 66 30 66 66 63 30 . { "#f0ffc0
8140: 22 2c 20 22 23 66 30 66 66 63 30 22 20 7d 2c 0a ", "#f0ffc0" },.
8150: 20 20 20 20 20 7b 20 22 23 62 64 65 35 64 36 22 { "#bde5d6"
8160: 2c 20 22 23 62 64 65 35 64 36 22 20 7d 2c 0a 20 , "#bde5d6" },.
8170: 20 20 20 20 7b 20 22 23 63 30 66 66 63 30 22 2c { "#c0ffc0",
8180: 20 22 23 63 30 66 66 63 30 22 20 7d 2c 0a 20 20 "#c0ffc0" },.
8190: 20 20 20 7b 20 22 23 63 30 66 66 66 30 22 2c 20 { "#c0fff0",
81a0: 22 23 63 30 66 66 66 30 22 20 7d 2c 0a 20 20 20 "#c0fff0" },.
81b0: 20 20 7b 20 22 23 63 30 66 30 66 66 22 2c 20 22 { "#c0f0ff", "
81c0: 23 63 30 66 30 66 66 22 20 7d 2c 0a 20 20 20 20 #c0f0ff" },.
81d0: 20 7b 20 22 23 64 30 63 30 66 66 22 2c 20 22 23 { "#d0c0ff", "#
81e0: 64 30 63 30 66 66 22 20 7d 2c 0a 20 20 20 20 20 d0c0ff" },.
81f0: 7b 20 22 23 66 66 63 30 66 66 22 2c 20 22 23 66 { "#ffc0ff", "#f
8200: 66 63 30 66 66 22 20 7d 2c 0a 20 20 20 20 20 7b fc0ff" },. {
8210: 20 22 23 66 66 63 30 64 30 22 2c 20 22 23 66 66 "#ffc0d0", "#ff
8220: 63 30 64 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 c0d0" },. {
8230: 22 23 66 66 66 30 63 30 22 2c 20 22 23 66 66 66 "#fff0c0", "#fff
8240: 30 63 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 0c0" },. { "
8250: 23 63 30 63 30 63 30 22 2c 20 22 23 63 30 63 30 #c0c0c0", "#c0c0
8260: 63 30 22 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e c0" },. };. in
8270: 74 20 6e 43 6f 6c 6f 72 20 3d 20 73 69 7a 65 6f t nColor = sizeo
8280: 66 28 61 43 6f 6c 6f 72 29 2f 73 69 7a 65 6f 66 f(aColor)/sizeof
8290: 28 61 43 6f 6c 6f 72 5b 30 5d 29 3b 0a 20 20 69 (aColor[0]);. i
82a0: 6e 74 20 69 3b 0a 20 20 0a 20 20 6c 6f 67 69 6e nt i;. . login
82b0: 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 _check_credentia
82c0: 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f ls();. if( !g.o
82d0: 6b 57 72 69 74 65 20 29 7b 20 6c 6f 67 69 6e 5f kWrite ){ login_
82e0: 6e 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e needed(); return
82f0: 3b 20 7d 0a 20 20 72 69 64 20 3d 20 61 74 6f 69 ; }. rid = atoi
8300: 28 50 44 28 22 72 22 2c 22 30 22 29 29 3b 0a 20 (PD("r","0"));.
8310: 20 7a 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 zUuid = db_text
8320: 28 30 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 (0, "SELECT uuid
8330: 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 FROM blob WHERE
8340: 20 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a rid=%d", rid);.
8350: 20 20 7a 43 6f 6d 6d 65 6e 74 20 3d 20 64 62 5f zComment = db_
8360: 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 text(0, "SELECT
8370: 63 6f 61 6c 65 73 63 65 28 65 63 6f 6d 6d 65 6e coalesce(ecommen
8380: 74 2c 63 6f 6d 6d 65 6e 74 29 22 0a 20 20 20 20 t,comment)".
8390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
83a0: 20 20 20 20 22 20 20 46 52 4f 4d 20 65 76 65 6e " FROM even
83b0: 74 20 57 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 t WHERE objid=%d
83c0: 22 2c 20 72 69 64 29 3b 0a 20 20 69 66 28 20 7a ", rid);. if( z
83d0: 43 6f 6d 6d 65 6e 74 3d 3d 30 20 29 20 66 6f 73 Comment==0 ) fos
83e0: 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d sil_redirect_hom
83f0: 65 28 29 3b 0a 20 20 69 66 28 20 50 28 22 63 61 e();. if( P("ca
8400: 6e 63 65 6c 22 29 20 29 7b 0a 20 20 20 20 63 67 ncel") ){. cg
8410: 69 5f 72 65 64 69 72 65 63 74 66 28 22 63 69 3f i_redirectf("ci?
8420: 6e 61 6d 65 3d 25 64 22 2c 20 72 69 64 29 3b 0a name=%d", rid);.
8430: 20 20 7d 0a 20 20 7a 4e 65 77 43 6f 6d 6d 65 6e }. zNewCommen
8440: 74 20 3d 20 50 44 28 22 63 22 2c 7a 43 6f 6d 6d t = PD("c",zComm
8450: 65 6e 74 29 3b 0a 20 20 7a 55 73 65 72 20 3d 20 ent);. zUser =
8460: 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 db_text(0, "SELE
8470: 43 54 20 63 6f 61 6c 65 73 63 65 28 65 75 73 65 CT coalesce(euse
8480: 72 2c 75 73 65 72 29 22 0a 20 20 20 20 20 20 20 r,user)".
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 "
84a0: 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 FROM event WHER
84b0: 45 20 6f 62 6a 69 64 3d 25 64 22 2c 20 72 69 64 E objid=%d", rid
84c0: 29 3b 0a 20 20 69 66 28 20 7a 55 73 65 72 3d 3d );. if( zUser==
84d0: 30 20 29 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 0 ) fossil_redir
84e0: 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 20 7a 4e ect_home();. zN
84f0: 65 77 55 73 65 72 20 3d 20 50 44 28 22 75 22 2c ewUser = PD("u",
8500: 7a 55 73 65 72 29 3b 0a 20 20 7a 44 61 74 65 20 zUser);. zDate
8510: 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 = db_text(0, "SE
8520: 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 6d 74 LECT datetime(mt
8530: 69 6d 65 29 22 0a 20 20 20 20 20 20 20 20 20 20 ime)".
8540: 20 20 20 20 20 20 20 20 20 20 20 22 20 20 46 52 " FR
8550: 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 45 20 6f OM event WHERE o
8560: 62 6a 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a bjid=%d", rid);.
8570: 20 20 69 66 28 20 7a 44 61 74 65 3d 3d 30 20 29 if( zDate==0 )
8580: 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 fossil_redirect
8590: 5f 68 6f 6d 65 28 29 3b 0a 20 20 7a 4e 65 77 44 _home();. zNewD
85a0: 61 74 65 20 3d 20 50 44 28 22 64 74 22 2c 7a 44 ate = PD("dt",zD
85b0: 61 74 65 29 3b 0a 20 20 7a 43 6f 6c 6f 72 20 3d ate);. zColor =
85c0: 20 64 62 5f 74 65 78 74 28 22 22 2c 20 22 53 45 db_text("", "SE
85d0: 4c 45 43 54 20 62 67 63 6f 6c 6f 72 22 0a 20 20 LECT bgcolor".
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
85f0: 20 20 20 20 20 20 22 20 20 46 52 4f 4d 20 65 76 " FROM ev
8600: 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 64 3d ent WHERE objid=
8610: 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 7a 4e 65 %d", rid);. zNe
8620: 77 43 6f 6c 6f 72 20 3d 20 50 44 28 22 63 6c 72 wColor = PD("clr
8630: 22 2c 7a 43 6f 6c 6f 72 29 3b 0a 20 20 66 50 72 ",zColor);. fPr
8640: 6f 70 61 67 61 74 65 43 6f 6c 6f 72 20 3d 20 50 opagateColor = P
8650: 28 22 70 63 6c 72 22 29 21 3d 30 3b 0a 20 20 7a ("pclr")!=0;. z
8660: 4e 65 77 54 61 67 46 6c 61 67 20 3d 20 50 28 22 NewTagFlag = P("
8670: 6e 65 77 74 61 67 22 29 20 3f 20 22 20 63 68 65 newtag") ? " che
8680: 63 6b 65 64 22 20 3a 20 22 22 3b 0a 20 20 7a 4e cked" : "";. zN
8690: 65 77 54 61 67 20 3d 20 50 44 28 22 74 61 67 6e ewTag = PD("tagn
86a0: 61 6d 65 22 2c 22 22 29 3b 0a 20 20 7a 4e 65 77 ame","");. zNew
86b0: 42 72 46 6c 61 67 20 3d 20 50 28 22 6e 65 77 62 BrFlag = P("newb
86c0: 72 22 29 20 3f 20 22 20 63 68 65 63 6b 65 64 22 r") ? " checked"
86d0: 20 3a 20 22 22 3b 0a 20 20 7a 4e 65 77 42 72 61 : "";. zNewBra
86e0: 6e 63 68 20 3d 20 50 44 28 22 62 72 6e 61 6d 65 nch = PD("brname
86f0: 22 2c 22 22 29 3b 0a 20 20 7a 43 6c 6f 73 65 46 ","");. zCloseF
8700: 6c 61 67 20 3d 20 50 28 22 63 6c 6f 73 65 22 29 lag = P("close")
8710: 20 3f 20 22 20 63 68 65 63 6b 65 64 22 20 3a 20 ? " checked" :
8720: 22 22 3b 0a 20 20 69 66 28 20 50 28 22 61 70 70 "";. if( P("app
8730: 6c 79 22 29 20 29 7b 0a 20 20 20 20 42 6c 6f 62 ly") ){. Blob
8740: 20 63 74 72 6c 3b 0a 20 20 20 20 63 68 61 72 20 ctrl;. char
8750: 2a 7a 44 61 74 65 3b 0a 20 20 20 20 69 6e 74 20 *zDate;. int
8760: 6e 43 68 6e 67 20 3d 20 30 3b 0a 0a 20 20 20 20 nChng = 0;..
8770: 6c 6f 67 69 6e 5f 76 65 72 69 66 79 5f 63 73 72 login_verify_csr
8780: 66 5f 73 65 63 72 65 74 28 29 3b 0a 20 20 20 20 f_secret();.
8790: 62 6c 6f 62 5f 7a 65 72 6f 28 26 63 74 72 6c 29 blob_zero(&ctrl)
87a0: 3b 0a 20 20 20 20 7a 44 61 74 65 20 3d 20 64 62 ;. zDate = db
87b0: 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 _text(0, "SELECT
87c0: 20 64 61 74 65 74 69 6d 65 28 27 6e 6f 77 27 29 datetime('now')
87d0: 22 29 3b 0a 20 20 20 20 7a 44 61 74 65 5b 31 30 ");. zDate[10
87e0: 5d 20 3d 20 27 54 27 3b 0a 20 20 20 20 62 6c 6f ] = 'T';. blo
87f0: 62 5f 61 70 70 65 6e 64 66 28 26 63 74 72 6c 2c b_appendf(&ctrl,
8800: 20 22 44 20 25 73 5c 6e 22 2c 20 7a 44 61 74 65 "D %s\n", zDate
8810: 29 3b 0a 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f );. db_multi_
8820: 65 78 65 63 28 22 43 52 45 41 54 45 20 54 45 4d exec("CREATE TEM
8830: 50 20 54 41 42 4c 45 20 6e 65 77 74 61 67 73 28 P TABLE newtags(
8840: 74 61 67 20 55 4e 49 51 55 45 2c 20 70 72 65 66 tag UNIQUE, pref
8850: 69 78 2c 20 76 61 6c 75 65 29 22 29 3b 0a 20 20 ix, value)");.
8860: 20 20 69 66 28 20 7a 4e 65 77 43 6f 6c 6f 72 5b if( zNewColor[
8870: 30 5d 20 26 26 20 73 74 72 63 6d 70 28 7a 43 6f 0] && strcmp(zCo
8880: 6c 6f 72 2c 7a 4e 65 77 43 6f 6c 6f 72 29 21 3d lor,zNewColor)!=
8890: 30 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 0 ){. char
88a0: 2a 7a 50 72 65 66 69 78 20 3d 20 22 2b 22 3b 0a *zPrefix = "+";.
88b0: 20 20 20 20 20 20 69 66 28 20 66 50 72 6f 70 61 if( fPropa
88c0: 67 61 74 65 43 6f 6c 6f 72 20 29 7b 0a 20 20 20 gateColor ){.
88d0: 20 20 20 20 20 7a 50 72 65 66 69 78 20 3d 20 22 zPrefix = "
88e0: 2a 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 *";. }.
88f0: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 db_multi_exec(
8900: 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 "REPLACE INTO ne
8910: 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 62 67 wtags VALUES('bg
8920: 63 6f 6c 6f 72 27 2c 25 51 2c 25 51 29 22 2c 0a color',%Q,%Q)",.
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8940: 20 20 20 20 7a 50 72 65 66 69 78 2c 20 7a 4e 65 zPrefix, zNe
8950: 77 43 6f 6c 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 wColor);. }.
8960: 20 20 20 69 66 28 20 7a 4e 65 77 43 6f 6c 6f 72 if( zNewColor
8970: 5b 30 5d 3d 3d 30 20 26 26 20 7a 43 6f 6c 6f 72 [0]==0 && zColor
8980: 5b 30 5d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 [0]!=0 ){.
8990: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 db_multi_exec("R
89a0: 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 EPLACE INTO newt
89b0: 61 67 73 20 56 41 4c 55 45 53 28 27 62 67 63 6f ags VALUES('bgco
89c0: 6c 6f 72 27 2c 27 2d 27 2c 4e 55 4c 4c 29 22 29 lor','-',NULL)")
89d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 ;. }. if(
89e0: 73 74 72 63 6d 70 28 7a 43 6f 6d 6d 65 6e 74 2c strcmp(zComment,
89f0: 7a 4e 65 77 43 6f 6d 6d 65 6e 74 29 21 3d 30 20 zNewComment)!=0
8a00: 29 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 ){. db_mult
8a10: 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 i_exec("REPLACE
8a20: 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c INTO newtags VAL
8a30: 55 45 53 28 27 63 6f 6d 6d 65 6e 74 27 2c 27 2b UES('comment','+
8a40: 27 2c 25 51 29 22 2c 0a 20 20 20 20 20 20 20 20 ',%Q)",.
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 65 77 zNew
8a60: 43 6f 6d 6d 65 6e 74 29 3b 0a 20 20 20 20 7d 0a Comment);. }.
8a70: 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a if( strcmp(z
8a80: 44 61 74 65 2c 7a 4e 65 77 44 61 74 65 29 21 3d Date,zNewDate)!=
8a90: 30 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 0 ){. db_mu
8aa0: 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 lti_exec("REPLAC
8ab0: 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 E INTO newtags V
8ac0: 41 4c 55 45 53 28 27 64 61 74 65 27 2c 27 2b 27 ALUES('date','+'
8ad0: 2c 25 51 29 22 2c 0a 20 20 20 20 20 20 20 20 20 ,%Q)",.
8ae0: 20 20 20 20 20 20 20 20 20 20 20 7a 4e 65 77 44 zNewD
8af0: 61 74 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 ate);. }.
8b00: 69 66 28 20 73 74 72 63 6d 70 28 7a 55 73 65 72 if( strcmp(zUser
8b10: 2c 7a 4e 65 77 55 73 65 72 29 21 3d 30 20 29 7b ,zNewUser)!=0 ){
8b20: 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f . db_multi_
8b30: 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e exec("REPLACE IN
8b40: 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 TO newtags VALUE
8b50: 53 28 27 75 73 65 72 27 2c 27 2b 27 2c 25 51 29 S('user','+',%Q)
8b60: 22 2c 20 7a 4e 65 77 55 73 65 72 29 3b 0a 20 20 ", zNewUser);.
8b70: 20 20 7d 0a 20 20 20 20 64 62 5f 70 72 65 70 61 }. db_prepa
8b80: 72 65 28 26 71 2c 0a 20 20 20 20 20 20 20 22 53 re(&q,. "S
8b90: 45 4c 45 43 54 20 74 61 67 2e 74 61 67 69 64 2c ELECT tag.tagid,
8ba0: 20 74 61 67 6e 61 6d 65 20 46 52 4f 4d 20 74 61 tagname FROM ta
8bb0: 67 78 72 65 66 2c 20 74 61 67 22 0a 20 20 20 20 gxref, tag".
8bc0: 20 20 20 22 20 57 48 45 52 45 20 74 61 67 78 72 " WHERE tagxr
8bd0: 65 66 2e 72 69 64 3d 25 64 20 41 4e 44 20 74 61 ef.rid=%d AND ta
8be0: 67 74 79 70 65 3e 30 20 41 4e 44 20 74 61 67 78 gtype>0 AND tagx
8bf0: 72 65 66 2e 74 61 67 69 64 3d 74 61 67 2e 74 61 ref.tagid=tag.ta
8c00: 67 69 64 22 2c 0a 20 20 20 20 20 20 20 72 69 64 gid",. rid
8c10: 0a 20 20 20 20 29 3b 0a 20 20 20 20 77 68 69 6c . );. whil
8c20: 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d e( db_step(&q)==
8c30: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 SQLITE_ROW ){.
8c40: 20 20 20 20 69 6e 74 20 74 61 67 69 64 20 3d 20 int tagid =
8c50: 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 db_column_int(&q
8c60: 2c 20 30 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 , 0);. cons
8c70: 74 20 63 68 61 72 20 2a 7a 54 61 67 20 3d 20 64 t char *zTag = d
8c80: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
8c90: 2c 20 31 29 3b 0a 20 20 20 20 20 20 63 68 61 72 , 1);. char
8ca0: 20 7a 4c 61 62 65 6c 5b 33 30 5d 3b 0a 20 20 20 zLabel[30];.
8cb0: 20 20 20 73 70 72 69 6e 74 66 28 7a 4c 61 62 65 sprintf(zLabe
8cc0: 6c 2c 20 22 63 25 64 22 2c 20 74 61 67 69 64 29 l, "c%d", tagid)
8cd0: 3b 0a 20 20 20 20 20 20 69 66 28 20 50 28 7a 4c ;. if( P(zL
8ce0: 61 62 65 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 abel) ){.
8cf0: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 db_multi_exec("
8d00: 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 REPLACE INTO new
8d10: 74 61 67 73 20 56 41 4c 55 45 53 28 25 51 2c 27 tags VALUES(%Q,'
8d20: 2d 27 2c 4e 55 4c 4c 29 22 2c 20 7a 54 61 67 29 -',NULL)", zTag)
8d30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
8d40: 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 db_finalize(
8d50: 26 71 29 3b 0a 20 20 20 20 69 66 28 20 7a 43 6c &q);. if( zCl
8d60: 6f 73 65 46 6c 61 67 5b 30 5d 20 29 7b 0a 20 20 oseFlag[0] ){.
8d70: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 db_multi_exe
8d80: 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 c("REPLACE INTO
8d90: 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 newtags VALUES('
8da0: 63 6c 6f 73 65 64 27 2c 27 2b 27 2c 4e 55 4c 4c closed','+',NULL
8db0: 29 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 )");. }. i
8dc0: 66 28 20 7a 4e 65 77 54 61 67 46 6c 61 67 5b 30 f( zNewTagFlag[0
8dd0: 5d 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 ] ){. db_mu
8de0: 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 lti_exec("REPLAC
8df0: 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 E INTO newtags V
8e00: 41 4c 55 45 53 28 27 73 79 6d 2d 25 71 27 2c 27 ALUES('sym-%q','
8e10: 2b 27 2c 4e 55 4c 4c 29 22 2c 20 7a 4e 65 77 54 +',NULL)", zNewT
8e20: 61 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 ag);. }. i
8e30: 66 28 20 7a 4e 65 77 42 72 46 6c 61 67 5b 30 5d f( zNewBrFlag[0]
8e40: 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c ){. db_mul
8e50: 74 69 5f 65 78 65 63 28 0a 20 20 20 20 20 20 20 ti_exec(.
8e60: 20 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e "REPLACE INTO n
8e70: 65 77 74 61 67 73 20 22 0a 20 20 20 20 20 20 20 ewtags ".
8e80: 20 22 20 53 45 4c 45 43 54 20 74 61 67 6e 61 6d " SELECT tagnam
8e90: 65 2c 20 27 2d 27 2c 20 4e 55 4c 4c 20 46 52 4f e, '-', NULL FRO
8ea0: 4d 20 74 61 67 78 72 65 66 2c 20 74 61 67 22 0a M tagxref, tag".
8eb0: 20 20 20 20 20 20 20 20 22 20 20 57 48 45 52 45 " WHERE
8ec0: 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 64 20 tagxref.rid=%d
8ed0: 41 4e 44 20 74 61 67 74 79 70 65 3d 3d 32 22 0a AND tagtype==2".
8ee0: 20 20 20 20 20 20 20 20 22 20 20 20 20 41 4e 44 " AND
8ef0: 20 74 61 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 tagname GLOB 's
8f00: 79 6d 2d 2a 27 22 0a 20 20 20 20 20 20 20 20 22 ym-*'". "
8f10: 20 20 20 20 41 4e 44 20 74 61 67 2e 74 61 67 69 AND tag.tagi
8f20: 64 3d 74 61 67 78 72 65 66 2e 74 61 67 69 64 22 d=tagxref.tagid"
8f30: 2c 0a 20 20 20 20 20 20 20 20 72 69 64 0a 20 20 ,. rid.
8f40: 20 20 20 20 29 3b 0a 20 20 20 20 20 20 64 62 5f );. db_
8f50: 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c multi_exec("REPL
8f60: 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 ACE INTO newtags
8f70: 20 56 41 4c 55 45 53 28 27 62 72 61 6e 63 68 27 VALUES('branch'
8f80: 2c 27 2a 27 2c 25 51 29 22 2c 20 7a 4e 65 77 42 ,'*',%Q)", zNewB
8f90: 72 61 6e 63 68 29 3b 0a 20 20 20 20 20 20 64 62 ranch);. db
8fa0: 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 _multi_exec("REP
8fb0: 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 LACE INTO newtag
8fc0: 73 20 56 41 4c 55 45 53 28 27 73 79 6d 2d 25 71 s VALUES('sym-%q
8fd0: 27 2c 27 2a 27 2c 4e 55 4c 4c 29 22 2c 0a 20 20 ','*',NULL)",.
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8ff0: 20 20 7a 4e 65 77 42 72 61 6e 63 68 29 3b 0a 20 zNewBranch);.
9000: 20 20 20 7d 0a 20 20 20 20 64 62 5f 70 72 65 70 }. db_prep
9010: 61 72 65 28 26 71 2c 20 22 53 45 4c 45 43 54 20 are(&q, "SELECT
9020: 74 61 67 2c 20 70 72 65 66 69 78 2c 20 76 61 6c tag, prefix, val
9030: 75 65 20 46 52 4f 4d 20 6e 65 77 74 61 67 73 22 ue FROM newtags"
9040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9050: 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 70 " ORDER BY p
9060: 72 65 66 69 78 20 7c 7c 20 74 61 67 22 29 3b 0a refix || tag");.
9070: 20 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 while( db_st
9080: 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 ep(&q)==SQLITE_R
9090: 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 OW ){. cons
90a0: 74 20 63 68 61 72 20 2a 7a 54 61 67 20 3d 20 64 t char *zTag = d
90b0: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
90c0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 , 0);. cons
90d0: 74 20 63 68 61 72 20 2a 7a 50 72 65 66 69 78 20 t char *zPrefix
90e0: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
90f0: 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 20 20 63 (&q, 1);. c
9100: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 75 onst char *zValu
9110: 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 e = db_column_te
9120: 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 20 xt(&q, 2);.
9130: 20 6e 43 68 6e 67 2b 2b 3b 0a 20 20 20 20 20 20 nChng++;.
9140: 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a 20 20 if( zValue ){.
9150: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
9160: 64 66 28 26 63 74 72 6c 2c 20 22 54 20 25 73 25 df(&ctrl, "T %s%
9170: 46 20 25 73 20 25 46 5c 6e 22 2c 20 7a 50 72 65 F %s %F\n", zPre
9180: 66 69 78 2c 20 7a 54 61 67 2c 20 7a 55 75 69 64 fix, zTag, zUuid
9190: 2c 20 7a 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 , zValue);.
91a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 }else{.
91b0: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 63 74 blob_appendf(&ct
91c0: 72 6c 2c 20 22 54 20 25 73 25 46 20 25 73 5c 6e rl, "T %s%F %s\n
91d0: 22 2c 20 7a 50 72 65 66 69 78 2c 20 7a 54 61 67 ", zPrefix, zTag
91e0: 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 20 20 , zUuid);.
91f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f 66 }. }. db_f
9200: 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 inalize(&q);.
9210: 20 69 66 28 20 6e 43 68 6e 67 3e 30 20 29 7b 0a if( nChng>0 ){.
9220: 20 20 20 20 20 20 69 6e 74 20 6e 72 69 64 3b 0a int nrid;.
9230: 20 20 20 20 20 20 42 6c 6f 62 20 63 6b 73 75 6d Blob cksum
9240: 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 ;. blob_app
9250: 65 6e 64 66 28 26 63 74 72 6c 2c 20 22 55 20 25 endf(&ctrl, "U %
9260: 46 5c 6e 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b F\n", g.zLogin);
9270: 0a 20 20 20 20 20 20 6d 64 35 73 75 6d 5f 62 6c . md5sum_bl
9280: 6f 62 28 26 63 74 72 6c 2c 20 26 63 6b 73 75 6d ob(&ctrl, &cksum
9290: 29 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 );. blob_ap
92a0: 70 65 6e 64 66 28 26 63 74 72 6c 2c 20 22 5a 20 pendf(&ctrl, "Z
92b0: 25 62 5c 6e 22 2c 20 26 63 6b 73 75 6d 29 3b 0a %b\n", &cksum);.
92c0: 20 20 20 20 20 20 64 62 5f 62 65 67 69 6e 5f 74 db_begin_t
92d0: 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 ransaction();.
92e0: 20 20 20 20 67 2e 6d 61 72 6b 50 72 69 76 61 74 g.markPrivat
92f0: 65 20 3d 20 63 6f 6e 74 65 6e 74 5f 69 73 5f 70 e = content_is_p
9300: 72 69 76 61 74 65 28 72 69 64 29 3b 0a 20 20 20 rivate(rid);.
9310: 20 20 20 6e 72 69 64 20 3d 20 63 6f 6e 74 65 6e nrid = conten
9320: 74 5f 70 75 74 28 26 63 74 72 6c 2c 20 30 2c 20 t_put(&ctrl, 0,
9330: 30 29 3b 0a 20 20 20 20 20 20 6d 61 6e 69 66 65 0);. manife
9340: 73 74 5f 63 72 6f 73 73 6c 69 6e 6b 28 6e 72 69 st_crosslink(nri
9350: 64 2c 20 26 63 74 72 6c 29 3b 0a 20 20 20 20 20 d, &ctrl);.
9360: 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 db_end_transact
9370: 69 6f 6e 28 30 29 3b 0a 20 20 20 20 7d 0a 20 20 ion(0);. }.
9380: 20 20 63 67 69 5f 72 65 64 69 72 65 63 74 66 28 cgi_redirectf(
9390: 22 63 69 3f 6e 61 6d 65 3d 25 64 22 2c 20 72 69 "ci?name=%d", ri
93a0: 64 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 7a d);. }. blob_z
93b0: 65 72 6f 28 26 63 6f 6d 6d 65 6e 74 29 3b 0a 20 ero(&comment);.
93c0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 63 6f blob_append(&co
93d0: 6d 6d 65 6e 74 2c 20 7a 4e 65 77 43 6f 6d 6d 65 mment, zNewComme
93e0: 6e 74 2c 20 2d 31 29 3b 0a 20 20 7a 55 75 69 64 nt, -1);. zUuid
93f0: 5b 31 30 5d 20 3d 20 30 3b 0a 20 20 73 74 79 6c [10] = 0;. styl
9400: 65 5f 68 65 61 64 65 72 28 22 45 64 69 74 20 43 e_header("Edit C
9410: 68 65 63 6b 2d 69 6e 20 5b 25 73 5d 22 2c 20 7a heck-in [%s]", z
9420: 55 75 69 64 29 3b 0a 20 20 69 66 28 20 50 28 22 Uuid);. if( P("
9430: 70 72 65 76 69 65 77 22 29 20 29 7b 0a 20 20 20 preview") ){.
9440: 20 42 6c 6f 62 20 73 75 66 66 69 78 3b 0a 20 20 Blob suffix;.
9450: 20 20 69 6e 74 20 6e 54 61 67 20 3d 20 30 3b 0a int nTag = 0;.
9460: 20 20 20 20 40 20 3c 62 3e 50 72 65 76 69 65 77 @ <b>Preview
9470: 3a 3c 2f 62 3e 0a 20 20 20 20 40 20 3c 62 6c 6f :</b>. @ <blo
9480: 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 40 20 3c ckquote>. @ <
9490: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 3e 0a table border=0>.
94a0: 20 20 20 20 69 66 28 20 7a 4e 65 77 43 6f 6c 6f if( zNewColo
94b0: 72 20 26 26 20 7a 4e 65 77 43 6f 6c 6f 72 5b 30 r && zNewColor[0
94c0: 5d 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 ] ){. @ <tr
94d0: 3e 3c 74 64 20 62 67 63 6f 6c 6f 72 3d 22 25 68 ><td bgcolor="%h
94e0: 28 7a 4e 65 77 43 6f 6c 6f 72 29 22 3e 0a 20 20 (zNewColor)">.
94f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 }else{. @
9500: 20 3c 74 72 3e 3c 74 64 3e 0a 20 20 20 20 7d 0a <tr><td>. }.
9510: 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 wiki_convert
9520: 28 26 63 6f 6d 6d 65 6e 74 2c 20 30 2c 20 57 49 (&comment, 0, WI
9530: 4b 49 5f 49 4e 4c 49 4e 45 29 3b 0a 20 20 20 20 KI_INLINE);.
9540: 62 6c 6f 62 5f 7a 65 72 6f 28 26 73 75 66 66 69 blob_zero(&suffi
9550: 78 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 x);. blob_app
9560: 65 6e 64 66 28 26 73 75 66 66 69 78 2c 20 22 28 endf(&suffix, "(
9570: 75 73 65 72 3a 20 25 68 22 2c 20 7a 4e 65 77 55 user: %h", zNewU
9580: 73 65 72 29 3b 0a 20 20 20 20 64 62 5f 70 72 65 ser);. db_pre
9590: 70 61 72 65 28 26 71 2c 20 22 53 45 4c 45 43 54 pare(&q, "SELECT
95a0: 20 73 75 62 73 74 72 28 74 61 67 6e 61 6d 65 2c substr(tagname,
95b0: 35 29 20 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 5) FROM tagxref,
95c0: 20 74 61 67 22 0a 20 20 20 20 20 20 20 20 20 20 tag".
95d0: 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 " WHERE
95e0: 20 74 61 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 tagname GLOB 's
95f0: 79 6d 2d 2a 27 20 41 4e 44 20 74 61 67 78 72 65 ym-*' AND tagxre
9600: 66 2e 72 69 64 3d 25 64 22 0a 20 20 20 20 20 20 f.rid=%d".
9610: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 "
9620: 20 41 4e 44 20 74 61 67 74 79 70 65 3e 31 20 41 AND tagtype>1 A
9630: 4e 44 20 74 61 67 2e 74 61 67 69 64 3d 74 61 67 ND tag.tagid=tag
9640: 78 72 65 66 2e 74 61 67 69 64 22 2c 0a 20 20 20 xref.tagid",.
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9660: 72 69 64 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 rid);. while(
9670: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
9680: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
9690: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 const char *zT
96a0: 61 67 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 ag = db_column_t
96b0: 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 ext(&q, 0);.
96c0: 20 20 69 66 28 20 6e 54 61 67 3d 3d 30 20 29 7b if( nTag==0 ){
96d0: 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 . blob_ap
96e0: 70 65 6e 64 66 28 26 73 75 66 66 69 78 2c 20 22 pendf(&suffix, "
96f0: 2c 20 74 61 67 73 3a 20 25 68 22 2c 20 7a 54 61 , tags: %h", zTa
9700: 67 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b g);. }else{
9710: 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 . blob_ap
9720: 70 65 6e 64 66 28 26 73 75 66 66 69 78 2c 20 22 pendf(&suffix, "
9730: 2c 20 25 68 22 2c 20 7a 54 61 67 29 3b 0a 20 20 , %h", zTag);.
9740: 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 54 61 67 }. nTag
9750: 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 ++;. }. db
9760: 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 _finalize(&q);.
9770: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
9780: 26 73 75 66 66 69 78 2c 20 22 29 22 29 3b 0a 20 &suffix, ")");.
9790: 20 20 20 40 20 25 73 28 62 6c 6f 62 5f 73 74 72 @ %s(blob_str
97a0: 28 26 73 75 66 66 69 78 29 29 0a 20 20 20 20 40 (&suffix)). @
97b0: 20 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 </td></tr></tab
97c0: 6c 65 3e 0a 20 20 20 20 40 20 3c 2f 62 6c 6f 63 le>. @ </bloc
97d0: 6b 71 75 6f 74 65 3e 0a 20 20 20 20 40 20 3c 68 kquote>. @ <h
97e0: 72 3e 0a 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 r>. blob_rese
97f0: 74 28 26 73 75 66 66 69 78 29 3b 0a 20 20 7d 0a t(&suffix);. }.
9800: 20 20 40 20 3c 70 3e 4d 61 6b 65 20 63 68 61 6e @ <p>Make chan
9810: 67 65 73 20 74 6f 20 61 74 74 72 69 62 75 74 65 ges to attribute
9820: 73 20 6f 66 20 63 68 65 63 6b 2d 69 6e 0a 20 20 s of check-in.
9830: 40 20 5b 3c 61 20 68 72 65 66 3d 22 63 69 3f 6e @ [<a href="ci?n
9840: 61 6d 65 3d 25 64 28 72 69 64 29 22 3e 25 73 28 ame=%d(rid)">%s(
9850: 7a 55 75 69 64 29 3c 2f 61 3e 5d 3a 3c 2f 70 3e zUuid)</a>]:</p>
9860: 0a 20 20 40 20 3c 66 6f 72 6d 20 61 63 74 69 6f . @ <form actio
9870: 6e 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c n="%s(g.zBaseURL
9880: 29 2f 63 69 5f 65 64 69 74 22 20 6d 65 74 68 6f )/ci_edit" metho
9890: 64 3d 22 50 4f 53 54 22 3e 0a 20 20 6c 6f 67 69 d="POST">. logi
98a0: 6e 5f 69 6e 73 65 72 74 5f 63 73 72 66 5f 73 65 n_insert_csrf_se
98b0: 63 72 65 74 28 29 3b 0a 20 20 40 20 3c 69 6e 70 cret();. @ <inp
98c0: 75 74 20 74 79 70 65 3d 22 68 69 64 64 65 6e 22 ut type="hidden"
98d0: 20 6e 61 6d 65 3d 22 72 22 20 76 61 6c 75 65 3d name="r" value=
98e0: 22 25 64 28 72 69 64 29 22 3e 0a 20 20 40 20 3c "%d(rid)">. @ <
98f0: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 table border="0"
9900: 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 31 30 cellspacing="10
9910: 22 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 ">.. @ <tr><td
9920: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 align="right" va
9930: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 55 73 lign="top"><b>Us
9940: 65 72 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 er:</b></td>. @
9950: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 <td valign="top
9960: 22 3e 0a 20 20 40 20 20 20 3c 69 6e 70 75 74 20 ">. @ <input
9970: 74 79 70 65 3d 22 74 65 78 74 22 20 6e 61 6d 65 type="text" name
9980: 3d 22 75 22 20 73 69 7a 65 3d 22 32 30 22 20 76 ="u" size="20" v
9990: 61 6c 75 65 3d 22 25 68 28 7a 4e 65 77 55 73 65 alue="%h(zNewUse
99a0: 72 29 22 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f r)">. @ </td></
99b0: 74 72 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 tr>.. @ <tr><td
99c0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 align="right" v
99d0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 43 align="top"><b>C
99e0: 6f 6d 6d 65 6e 74 3a 3c 2f 62 3e 3c 2f 74 64 3e omment:</b></td>
99f0: 0a 20 20 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d . @ <td valign=
9a00: 22 74 6f 70 22 3e 0a 20 20 40 20 3c 74 65 78 74 "top">. @ <text
9a10: 61 72 65 61 20 6e 61 6d 65 3d 22 63 22 20 72 6f area name="c" ro
9a20: 77 73 3d 22 31 30 22 20 63 6f 6c 73 3d 22 38 30 ws="10" cols="80
9a30: 22 3e 25 68 28 7a 4e 65 77 43 6f 6d 6d 65 6e 74 ">%h(zNewComment
9a40: 29 3c 2f 74 65 78 74 61 72 65 61 3e 0a 20 20 40 )</textarea>. @
9a50: 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 20 40 </td></tr>.. @
9a60: 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 <tr><td align="
9a70: 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 right" valign="t
9a80: 6f 70 22 3e 3c 62 3e 43 68 65 63 6b 2d 69 6e 20 op"><b>Check-in
9a90: 54 69 6d 65 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 Time:</b></td>.
9aa0: 20 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 @ <td valign="t
9ab0: 6f 70 22 3e 0a 20 20 40 20 20 20 3c 69 6e 70 75 op">. @ <inpu
9ac0: 74 20 74 79 70 65 3d 22 74 65 78 74 22 20 6e 61 t type="text" na
9ad0: 6d 65 3d 22 64 74 22 20 73 69 7a 65 3d 22 32 30 me="dt" size="20
9ae0: 22 20 76 61 6c 75 65 3d 22 25 68 28 7a 4e 65 77 " value="%h(zNew
9af0: 44 61 74 65 29 22 3e 0a 20 20 40 20 3c 2f 74 64 Date)">. @ </td
9b00: 3e 3c 2f 74 72 3e 0a 0a 20 20 40 20 3c 74 72 3e ></tr>.. @ <tr>
9b10: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 <td align="right
9b20: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c " valign="top"><
9b30: 62 3e 42 61 63 6b 67 72 6f 75 6e 64 20 43 6f 6c b>Background Col
9b40: 6f 72 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 or:</b></td>. @
9b50: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 <td valign="top
9b60: 22 3e 0a 20 20 40 20 3c 74 61 62 6c 65 20 62 6f ">. @ <table bo
9b70: 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 rder=0 cellpaddi
9b80: 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 ng=0 cellspacing
9b90: 3d 31 3e 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 =1>. @ <tr><td
9ba0: 63 6f 6c 73 70 61 6e 3d 22 36 22 20 61 6c 69 67 colspan="6" alig
9bb0: 6e 3d 22 6c 65 66 74 22 3e 0a 20 20 69 66 28 20 n="left">. if(
9bc0: 66 50 72 6f 70 61 67 61 74 65 43 6f 6c 6f 72 20 fPropagateColor
9bd0: 29 7b 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 20 ){. @ <input
9be0: 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 type="checkbox"
9bf0: 6e 61 6d 65 3d 22 70 63 6c 72 22 20 63 68 65 63 name="pclr" chec
9c00: 6b 65 64 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 ked>. }else{.
9c10: 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
9c20: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d "checkbox" name=
9c30: 22 70 63 6c 72 22 3e 0a 20 20 7d 0a 20 20 40 20 "pclr">. }. @
9c40: 50 72 6f 70 61 67 61 74 65 20 63 6f 6c 6f 72 20 Propagate color
9c50: 74 6f 20 64 65 73 63 65 6e 64 61 6e 74 73 3c 2f to descendants</
9c60: 69 6e 70 75 74 3e 3c 2f 74 64 3e 3c 2f 74 72 3e input></td></tr>
9c70: 0a 20 20 40 20 3c 74 72 3e 0a 20 20 66 6f 72 28 . @ <tr>. for(
9c80: 69 3d 30 3b 20 69 3c 6e 43 6f 6c 6f 72 3b 20 69 i=0; i<nColor; i
9c90: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 43 6f ++){. if( aCo
9ca0: 6c 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f 72 5b 30 5d lor[i].zColor[0]
9cb0: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 74 64 20 ){. @ <td
9cc0: 62 67 63 6f 6c 6f 72 3d 22 25 68 28 61 43 6f 6c bgcolor="%h(aCol
9cd0: 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f 72 29 22 3e 0a or[i].zColor)">.
9ce0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
9cf0: 20 40 20 3c 74 64 3e 0a 20 20 20 20 7d 0a 20 20 @ <td>. }.
9d00: 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4e 65 if( strcmp(zNe
9d10: 77 43 6f 6c 6f 72 2c 20 61 43 6f 6c 6f 72 5b 69 wColor, aColor[i
9d20: 5d 2e 7a 43 6f 6c 6f 72 29 3d 3d 30 20 29 7b 0a ].zColor)==0 ){.
9d30: 20 20 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 @ <input t
9d40: 79 70 65 3d 22 72 61 64 69 6f 22 20 6e 61 6d 65 ype="radio" name
9d50: 3d 22 63 6c 72 22 20 76 61 6c 75 65 3d 22 25 68 ="clr" value="%h
9d60: 28 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f (aColor[i].zColo
9d70: 72 29 22 20 63 68 65 63 6b 65 64 3e 0a 20 20 20 r)" checked>.
9d80: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 }else{. @
9d90: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 72 61 64 <input type="rad
9da0: 69 6f 22 20 6e 61 6d 65 3d 22 63 6c 72 22 20 76 io" name="clr" v
9db0: 61 6c 75 65 3d 22 25 68 28 61 43 6f 6c 6f 72 5b alue="%h(aColor[
9dc0: 69 5d 2e 7a 43 6f 6c 6f 72 29 22 3e 0a 20 20 20 i].zColor)">.
9dd0: 20 7d 0a 20 20 20 20 40 20 25 68 28 61 43 6f 6c }. @ %h(aCol
9de0: 6f 72 5b 69 5d 2e 7a 43 4e 61 6d 65 29 3c 2f 69 or[i].zCName)</i
9df0: 6e 70 75 74 3e 3c 2f 74 64 3e 0a 20 20 20 20 69 nput></td>. i
9e00: 66 28 20 28 69 25 36 29 3d 3d 35 20 26 26 20 69 f( (i%6)==5 && i
9e10: 2b 31 3c 6e 43 6f 6c 6f 72 20 29 7b 0a 20 20 20 +1<nColor ){.
9e20: 20 20 20 40 20 3c 2f 74 72 3e 3c 74 72 3e 0a 20 @ </tr><tr>.
9e30: 20 20 20 7d 0a 20 20 7d 0a 20 20 40 20 3c 2f 74 }. }. @ </t
9e40: 72 3e 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e 0a r>. @ </table>.
9e50: 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a @ </td></tr>..
9e60: 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 @ <tr><td alig
9e70: 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e n="right" valign
9e80: 3d 22 74 6f 70 22 3e 3c 62 3e 54 61 67 73 3a 3c ="top"><b>Tags:<
9e90: 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 /b></td>. @ <td
9ea0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 valign="top">.
9eb0: 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 @ <input type="
9ec0: 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 checkbox" name="
9ed0: 6e 65 77 74 61 67 22 25 73 28 7a 4e 65 77 54 61 newtag"%s(zNewTa
9ee0: 67 46 6c 61 67 29 3e 0a 20 20 40 20 41 64 64 20 gFlag)>. @ Add
9ef0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 the following ne
9f00: 77 20 74 61 67 20 6e 61 6d 65 20 74 6f 20 74 68 w tag name to th
9f10: 69 73 20 63 68 65 63 6b 2d 69 6e 3a 0a 20 20 40 is check-in:. @
9f20: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 <input type="te
9f30: 78 74 22 20 77 69 64 74 68 3d 22 31 35 22 20 6e xt" width="15" n
9f40: 61 6d 65 3d 22 74 61 67 6e 61 6d 65 22 20 76 61 ame="tagname" va
9f50: 6c 75 65 3d 22 25 68 28 7a 4e 65 77 54 61 67 29 lue="%h(zNewTag)
9f60: 22 3e 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 ">. db_prepare(
9f70: 26 71 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 54 &q,. "SELECT
9f80: 20 74 61 67 2e 74 61 67 69 64 2c 20 74 61 67 6e tag.tagid, tagn
9f90: 61 6d 65 20 46 52 4f 4d 20 74 61 67 78 72 65 66 ame FROM tagxref
9fa0: 2c 20 74 61 67 22 0a 20 20 20 20 20 22 20 57 48 , tag". " WH
9fb0: 45 52 45 20 74 61 67 78 72 65 66 2e 72 69 64 3d ERE tagxref.rid=
9fc0: 25 64 20 41 4e 44 20 74 61 67 74 79 70 65 3e 30 %d AND tagtype>0
9fd0: 20 41 4e 44 20 74 61 67 78 72 65 66 2e 74 61 67 AND tagxref.tag
9fe0: 69 64 3d 74 61 67 2e 74 61 67 69 64 22 0a 20 20 id=tag.tagid".
9ff0: 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 43 41 " ORDER BY CA
a000: 53 45 20 57 48 45 4e 20 74 61 67 6e 61 6d 65 20 SE WHEN tagname
a010: 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 20 54 48 45 GLOB 'sym-*' THE
a020: 4e 20 73 75 62 73 74 72 28 74 61 67 6e 61 6d 65 N substr(tagname
a030: 2c 35 29 22 0a 20 20 20 20 20 22 20 20 20 20 20 ,5)". "
a040: 20 20 20 20 20 20 20 20 20 20 45 4c 53 45 20 74 ELSE t
a050: 61 67 6e 61 6d 65 20 45 4e 44 22 2c 0a 20 20 20 agname END",.
a060: 20 20 72 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 rid. );. whi
a070: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d le( db_step(&q)=
a080: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
a090: 20 20 20 69 6e 74 20 74 61 67 69 64 20 3d 20 64 int tagid = d
a0a0: 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c b_column_int(&q,
a0b0: 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 0);. const c
a0c0: 68 61 72 20 2a 7a 54 61 67 4e 61 6d 65 20 3d 20 har *zTagName =
a0d0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
a0e0: 71 2c 20 31 29 3b 0a 20 20 20 20 63 68 61 72 20 q, 1);. char
a0f0: 7a 4c 61 62 65 6c 5b 33 30 5d 3b 0a 20 20 20 20 zLabel[30];.
a100: 73 70 72 69 6e 74 66 28 7a 4c 61 62 65 6c 2c 20 sprintf(zLabel,
a110: 22 63 25 64 22 2c 20 74 61 67 69 64 29 3b 0a 20 "c%d", tagid);.
a120: 20 20 20 69 66 28 20 50 28 7a 4c 61 62 65 6c 29 if( P(zLabel)
a130: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 62 72 3e ){. @ <br>
a140: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 <input type="che
a150: 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 63 25 64 ckbox" name="c%d
a160: 28 74 61 67 69 64 29 22 20 63 68 65 63 6b 65 64 (tagid)" checked
a170: 3e 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 >. }else{.
a180: 20 20 20 40 20 3c 62 72 3e 3c 69 6e 70 75 74 20 @ <br><input
a190: 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 type="checkbox"
a1a0: 6e 61 6d 65 3d 22 63 25 64 28 74 61 67 69 64 29 name="c%d(tagid)
a1b0: 22 3e 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 ">. }. if(
a1c0: 20 73 74 72 6e 63 6d 70 28 7a 54 61 67 4e 61 6d strncmp(zTagNam
a1d0: 65 2c 20 22 73 79 6d 2d 22 2c 20 34 29 3d 3d 30 e, "sym-", 4)==0
a1e0: 20 29 7b 0a 20 20 20 20 20 20 40 20 43 61 6e 63 ){. @ Canc
a1f0: 65 6c 20 74 61 67 20 3c 62 3e 25 68 28 26 7a 54 el tag <b>%h(&zT
a200: 61 67 4e 61 6d 65 5b 34 5d 29 3c 2f 62 3e 0a 20 agName[4])</b>.
a210: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
a220: 40 20 43 61 6e 63 65 6c 20 73 70 65 63 69 61 6c @ Cancel special
a230: 20 74 61 67 20 3c 62 3e 25 68 28 7a 54 61 67 4e tag <b>%h(zTagN
a240: 61 6d 65 29 3c 2f 62 3e 0a 20 20 20 20 7d 0a 20 ame)</b>. }.
a250: 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 }. db_finalize
a260: 28 26 71 29 3b 0a 20 20 40 20 3c 2f 74 64 3e 3c (&q);. @ </td><
a270: 2f 74 72 3e 0a 0a 20 20 69 66 28 20 64 62 5f 65 /tr>.. if( db_e
a280: 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 xists("SELECT 1
a290: 46 52 4f 4d 20 74 61 67 78 72 65 66 20 57 48 45 FROM tagxref WHE
a2a0: 52 45 20 72 69 64 3d 25 64 20 41 4e 44 20 74 61 RE rid=%d AND ta
a2b0: 67 69 64 3d 25 64 20 41 4e 44 20 73 72 63 69 64 gid=%d AND srcid
a2c0: 3e 30 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 >0",.
a2d0: 20 20 20 20 20 72 69 64 2c 20 54 41 47 5f 42 52 rid, TAG_BR
a2e0: 41 4e 43 48 29 3d 3d 30 20 29 7b 0a 20 20 20 20 ANCH)==0 ){.
a2f0: 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d @ <tr><td align=
a300: 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 "right" valign="
a310: 74 6f 70 22 3e 3c 62 3e 42 72 61 6e 63 68 69 6e top"><b>Branchin
a320: 67 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 20 20 g:</b></td>.
a330: 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f @ <td valign="to
a340: 70 22 3e 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 p">. @ <input
a350: 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 type="checkbox"
a360: 20 6e 61 6d 65 3d 22 6e 65 77 62 72 22 25 73 28 name="newbr"%s(
a370: 7a 4e 65 77 42 72 46 6c 61 67 29 3e 0a 20 20 20 zNewBrFlag)>.
a380: 20 40 20 4d 61 6b 65 20 74 68 69 73 20 63 68 65 @ Make this che
a390: 63 6b 2d 69 6e 20 74 68 65 20 73 74 61 72 74 20 ck-in the start
a3a0: 6f 66 20 61 20 6e 65 77 20 62 72 61 6e 63 68 20 of a new branch
a3b0: 6e 61 6d 65 64 3a 0a 20 20 20 20 40 20 3c 69 6e named:. @ <in
a3c0: 70 75 74 20 74 79 70 65 3d 22 74 65 78 74 22 20 put type="text"
a3d0: 77 69 64 74 68 3d 22 31 35 22 20 6e 61 6d 65 3d width="15" name=
a3e0: 22 62 72 6e 61 6d 65 22 20 76 61 6c 75 65 3d 22 "brname" value="
a3f0: 25 68 28 7a 4e 65 77 42 72 61 6e 63 68 29 22 3e %h(zNewBranch)">
a400: 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 . @ </td></tr
a410: 3e 0a 20 20 7d 0a 0a 20 20 69 66 28 20 69 73 5f >. }.. if( is_
a420: 61 5f 6c 65 61 66 28 72 69 64 29 0a 20 20 20 26 a_leaf(rid). &
a430: 26 20 21 64 62 5f 65 78 69 73 74 73 28 22 53 45 & !db_exists("SE
a440: 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 61 67 78 LECT 1 FROM tagx
a450: 72 65 66 20 22 0a 20 20 20 20 20 20 20 20 20 20 ref ".
a460: 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74 " WHERE t
a470: 61 67 69 64 3d 25 64 20 41 4e 44 20 72 69 64 3d agid=%d AND rid=
a480: 25 64 20 41 4e 44 20 74 61 67 74 79 70 65 3e 30 %d AND tagtype>0
a490: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ",.
a4a0: 20 20 20 20 54 41 47 5f 43 4c 4f 53 45 44 2c 20 TAG_CLOSED,
a4b0: 72 69 64 29 0a 20 20 29 7b 0a 20 20 20 20 40 20 rid). ){. @
a4c0: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 <tr><td align="r
a4d0: 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f ight" valign="to
a4e0: 70 22 3e 3c 62 3e 4c 65 61 66 20 43 6c 6f 73 75 p"><b>Leaf Closu
a4f0: 72 65 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 20 re:</b></td>.
a500: 20 40 20 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 @ <td valign="t
a510: 6f 70 22 3e 0a 20 20 20 20 40 20 3c 69 6e 70 75 op">. @ <inpu
a520: 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 t type="checkbox
a530: 22 20 6e 61 6d 65 3d 22 63 6c 6f 73 65 22 25 73 " name="close"%s
a540: 28 7a 43 6c 6f 73 65 46 6c 61 67 29 3e 0a 20 20 (zCloseFlag)>.
a550: 20 20 40 20 4d 61 72 6b 20 74 68 69 73 20 6c 65 @ Mark this le
a560: 61 66 20 61 73 20 22 63 6c 6f 73 65 64 22 20 73 af as "closed" s
a570: 6f 20 74 68 61 74 20 69 74 20 6e 6f 20 6c 6f 6e o that it no lon
a580: 67 65 72 20 61 70 70 65 61 72 73 20 6f 6e 20 74 ger appears on t
a590: 68 65 0a 20 20 20 20 40 20 22 6c 65 61 76 65 73 he. @ "leaves
a5a0: 22 20 70 61 67 65 20 61 6e 64 20 69 73 20 6e 6f " page and is no
a5b0: 20 6c 6f 6e 67 65 72 20 6c 61 62 65 6c 65 64 20 longer labeled
a5c0: 61 73 20 61 20 22 3c 62 3e 4c 65 61 66 3c 2f 62 as a "<b>Leaf</b
a5d0: 3e 22 2e 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c >".. @ </td><
a5e0: 2f 74 72 3e 0a 20 20 7d 0a 0a 0a 20 20 40 20 3c /tr>. }... @ <
a5f0: 74 72 3e 3c 74 64 20 63 6f 6c 73 70 61 6e 3d 22 tr><td colspan="
a600: 32 22 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 2">. @ <input t
a610: 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 6d ype="submit" nam
a620: 65 3d 22 70 72 65 76 69 65 77 22 20 76 61 6c 75 e="preview" valu
a630: 65 3d 22 50 72 65 76 69 65 77 22 3e 0a 20 20 40 e="Preview">. @
a640: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75 <input type="su
a650: 62 6d 69 74 22 20 6e 61 6d 65 3d 22 61 70 70 6c bmit" name="appl
a660: 79 22 20 76 61 6c 75 65 3d 22 41 70 70 6c 79 20 y" value="Apply
a670: 43 68 61 6e 67 65 73 22 3e 0a 20 20 40 20 3c 69 Changes">. @ <i
a680: 6e 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 nput type="submi
a690: 74 22 20 6e 61 6d 65 3d 22 63 61 6e 63 65 6c 22 t" name="cancel"
a6a0: 20 76 61 6c 75 65 3d 22 43 61 6e 63 65 6c 22 3e value="Cancel">
a6b0: 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a . @ </td></tr>.
a6c0: 20 20 40 20 3c 2f 74 61 62 6c 65 3e 0a 20 20 40 @ </table>. @
a6d0: 20 3c 2f 66 6f 72 6d 3e 0a 20 20 73 74 79 6c 65 </form>. style
a6e0: 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a _footer();.}.