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 6e 61 6d 65 3a 20 25 73 5c 6e 22 2c 20 64 62 -name: %s\n", db
0ea0: 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 6e 61 _get("project-na
0eb0: 6d 65 22 2c 20 22 3c 75 6e 6e 61 6d 65 64 3e 22 me", "<unnamed>"
0ec0: 29 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 ));. printf("
0ed0: 70 72 6f 6a 65 63 74 2d 63 6f 64 65 3a 20 25 73 project-code: %s
0ee0: 5c 6e 22 2c 20 64 62 5f 67 65 74 28 22 70 72 6f \n", db_get("pro
0ef0: 6a 65 63 74 2d 63 6f 64 65 22 2c 20 22 3c 6e 6f ject-code", "<no
0f00: 6e 65 3e 22 29 29 3b 0a 20 20 20 20 70 72 69 6e ne>"));. 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 70 72 6f 6a 65 63 74 2d printf("project-
0ff0: 6e 61 6d 65 3a 20 25 73 5c 6e 22 2c 20 64 62 5f name: %s\n", db_
1000: 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 6e 61 6d get("project-nam
1010: 65 22 2c 20 22 3c 75 6e 6e 61 6d 65 64 3e 22 29 e", "<unnamed>")
1020: 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 72 );. printf("r
1030: 65 70 6f 73 69 74 6f 72 79 3a 20 20 20 25 73 5c epository: %s\
1040: 6e 22 2c 20 64 62 5f 6c 67 65 74 28 22 72 65 70 n", db_lget("rep
1050: 6f 73 69 74 6f 72 79 22 2c 20 22 22 29 29 3b 0a ository", ""));.
1060: 20 20 20 20 70 72 69 6e 74 66 28 22 6c 6f 63 61 printf("loca
1070: 6c 2d 72 6f 6f 74 3a 20 20 20 25 73 5c 6e 22 2c l-root: %s\n",
1080: 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 29 3b 0a g.zLocalRoot);.
1090: 23 69 66 64 65 66 20 5f 5f 4d 49 4e 47 57 33 32 #ifdef __MINGW32
10a0: 5f 5f 0a 20 20 20 20 69 66 28 20 67 2e 7a 48 6f __. if( g.zHo
10b0: 6d 65 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e me ){. prin
10c0: 74 66 28 22 75 73 65 72 2d 68 6f 6d 65 3a 20 20 tf("user-home:
10d0: 3a 20 25 73 5c 6e 22 2c 20 67 2e 7a 48 6f 6d 65 : %s\n", g.zHome
10e0: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a );. }.#endif.
10f0: 20 20 20 20 70 72 69 6e 74 66 28 22 70 72 6f 6a printf("proj
1100: 65 63 74 2d 63 6f 64 65 3a 20 25 73 5c 6e 22 2c ect-code: %s\n",
1110: 20 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 db_get("project
1120: 2d 63 6f 64 65 22 2c 20 22 22 29 29 3b 0a 20 20 -code", ""));.
1130: 20 20 70 72 69 6e 74 66 28 22 73 65 72 76 65 72 printf("server
1140: 2d 63 6f 64 65 3a 20 20 25 73 5c 6e 22 2c 20 64 -code: %s\n", d
1150: 62 5f 67 65 74 28 22 73 65 72 76 65 72 2d 63 6f b_get("server-co
1160: 64 65 22 2c 20 22 22 29 29 3b 0a 20 20 20 20 76 de", ""));. v
1170: 69 64 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74 id = db_lget_int
1180: 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b ("checkout", 0);
1190: 0a 20 20 20 20 69 66 28 20 76 69 64 3d 3d 30 20 . if( vid==0
11a0: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 ){. printf(
11b0: 22 63 68 65 63 6b 6f 75 74 3a 20 20 20 20 20 6e "checkout: n
11c0: 69 6c 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 il\n");. }els
11d0: 65 7b 0a 20 20 20 20 20 20 73 68 6f 77 5f 63 6f e{. show_co
11e0: 6d 6d 6f 6e 5f 69 6e 66 6f 28 76 69 64 2c 20 22 mmon_info(vid, "
11f0: 63 68 65 63 6b 6f 75 74 3a 22 2c 20 31 29 3b 0a checkout:", 1);.
1200: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 }. }else{.
1210: 20 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 20 20 int rid;.
1220: 72 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 rid = name_to_ri
1230: 64 28 67 2e 61 72 67 76 5b 32 5d 29 3b 0a 20 20 d(g.argv[2]);.
1240: 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a if( rid==0 ){.
1250: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e fossil_pan
1260: 69 63 28 22 6e 6f 20 73 75 63 68 20 6f 62 6a 65 ic("no such obje
1270: 63 74 3a 20 25 73 5c 6e 22 2c 20 67 2e 61 72 67 ct: %s\n", g.arg
1280: 76 5b 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 v[2]);. }.
1290: 20 73 68 6f 77 5f 63 6f 6d 6d 6f 6e 5f 69 6e 66 show_common_inf
12a0: 6f 28 72 69 64 2c 20 22 75 75 69 64 3a 22 2c 20 o(rid, "uuid:",
12b0: 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 1);. }.}../*.**
12c0: 20 53 68 6f 77 20 69 6e 66 6f 72 6d 61 74 69 6f Show informatio
12d0: 6e 20 61 62 6f 75 74 20 61 6c 6c 20 74 61 67 73 n about all tags
12e0: 20 6f 6e 20 61 20 67 69 76 65 6e 20 6e 6f 64 65 on a given node
12f0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 ..*/.static void
1300: 20 73 68 6f 77 54 61 67 73 28 69 6e 74 20 72 69 showTags(int ri
1310: 64 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a d, const char *z
1320: 4e 6f 74 47 6c 6f 62 29 7b 0a 20 20 53 74 6d 74 NotGlob){. Stmt
1330: 20 71 3b 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 q;. int cnt =
1340: 30 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 0;. db_prepare(
1350: 26 71 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 20 &q,. "SELECT
1360: 74 61 67 2e 74 61 67 69 64 2c 20 74 61 67 6e 61 tag.tagid, tagna
1370: 6d 65 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20 me, ". "
1380: 20 20 28 53 45 4c 45 43 54 20 75 75 69 64 20 46 (SELECT uuid F
1390: 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 ROM blob WHERE r
13a0: 69 64 3d 74 61 67 78 72 65 66 2e 73 72 63 69 64 id=tagxref.srcid
13b0: 20 41 4e 44 20 72 69 64 21 3d 25 64 29 2c 22 0a AND rid!=%d),".
13c0: 20 20 20 20 22 20 20 20 20 20 20 20 76 61 6c 75 " valu
13d0: 65 2c 20 64 61 74 65 74 69 6d 65 28 74 61 67 78 e, datetime(tagx
13e0: 72 65 66 2e 6d 74 69 6d 65 2c 27 6c 6f 63 61 6c ref.mtime,'local
13f0: 74 69 6d 65 27 29 2c 20 74 61 67 74 79 70 65 2c time'), tagtype,
1400: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 28 53 ". " (S
1410: 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 ELECT uuid FROM
1420: 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d 74 blob WHERE rid=t
1430: 61 67 78 72 65 66 2e 6f 72 69 67 69 64 20 41 4e agxref.origid AN
1440: 44 20 72 69 64 21 3d 25 64 29 22 0a 20 20 20 20 D rid!=%d)".
1450: 22 20 20 46 52 4f 4d 20 74 61 67 78 72 65 66 20 " FROM tagxref
1460: 4a 4f 49 4e 20 74 61 67 20 4f 4e 20 74 61 67 78 JOIN tag ON tagx
1470: 72 65 66 2e 74 61 67 69 64 3d 74 61 67 2e 74 61 ref.tagid=tag.ta
1480: 67 69 64 22 0a 20 20 20 20 22 20 57 48 45 52 45 gid". " WHERE
1490: 20 74 61 67 78 72 65 66 2e 72 69 64 3d 25 64 20 tagxref.rid=%d
14a0: 41 4e 44 20 74 61 67 6e 61 6d 65 20 4e 4f 54 20 AND tagname NOT
14b0: 47 4c 4f 42 20 27 25 73 27 22 0a 20 20 20 20 22 GLOB '%s'". "
14c0: 20 4f 52 44 45 52 20 42 59 20 74 61 67 6e 61 6d ORDER BY tagnam
14d0: 65 22 2c 20 72 69 64 2c 20 72 69 64 2c 20 72 69 e", rid, rid, ri
14e0: 64 2c 20 7a 4e 6f 74 47 6c 6f 62 0a 20 20 29 3b d, zNotGlob. );
14f0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 . while( db_ste
1500: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
1510: 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 W ){. const c
1520: 68 61 72 20 2a 7a 54 61 67 6e 61 6d 65 20 3d 20 har *zTagname =
1530: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
1540: 71 2c 20 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 q, 1);. const
1550: 20 63 68 61 72 20 2a 7a 53 72 63 55 75 69 64 20 char *zSrcUuid
1560: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
1570: 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e (&q, 2);. con
1580: 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 st char *zValue
1590: 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 = db_column_text
15a0: 28 26 71 2c 20 33 29 3b 0a 20 20 20 20 63 6f 6e (&q, 3);. con
15b0: 73 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 3d st char *zDate =
15c0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
15d0: 26 71 2c 20 34 29 3b 0a 20 20 20 20 69 6e 74 20 &q, 4);. int
15e0: 74 61 67 74 79 70 65 20 3d 20 64 62 5f 63 6f 6c tagtype = db_col
15f0: 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 35 29 3b 0a umn_int(&q, 5);.
1600: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
1610: 7a 4f 72 69 67 55 75 69 64 20 3d 20 64 62 5f 63 zOrigUuid = db_c
1620: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 36 olumn_text(&q, 6
1630: 29 3b 0a 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 );. cnt++;.
1640: 20 20 69 66 28 20 63 6e 74 3d 3d 31 20 29 7b 0a if( cnt==1 ){.
1650: 20 20 20 20 20 20 40 20 3c 64 69 76 20 63 6c 61 @ <div cla
1660: 73 73 3d 22 73 65 63 74 69 6f 6e 22 3e 54 61 67 ss="section">Tag
1670: 73 20 41 6e 64 20 50 72 6f 70 65 72 74 69 65 73 s And Properties
1680: 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 40 20 3c </div>. @ <
1690: 75 6c 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 ul>. }. @
16a0: 3c 6c 69 3e 0a 20 20 20 20 69 66 28 20 74 61 67 <li>. if( tag
16b0: 74 79 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 type==0 ){.
16c0: 20 40 20 3c 62 3e 3c 73 3e 25 68 28 7a 54 61 67 @ <b><s>%h(zTag
16d0: 6e 61 6d 65 29 3c 2f 73 3e 3c 2f 62 3e 20 63 61 name)</s></b> ca
16e0: 6e 63 65 6c 6c 65 64 0a 20 20 20 20 7d 65 6c 73 ncelled. }els
16f0: 65 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a e if( zValue ){.
1700: 20 20 20 20 20 20 40 20 3c 62 3e 25 68 28 7a 54 @ <b>%h(zT
1710: 61 67 6e 61 6d 65 29 3d 25 68 28 7a 56 61 6c 75 agname)=%h(zValu
1720: 65 29 3c 2f 62 3e 0a 20 20 20 20 7d 65 6c 73 65 e)</b>. }else
1730: 20 7b 0a 20 20 20 20 20 20 40 20 3c 62 3e 25 68 {. @ <b>%h
1740: 28 7a 54 61 67 6e 61 6d 65 29 3c 2f 62 3e 0a 20 (zTagname)</b>.
1750: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 74 61 67 }. if( tag
1760: 74 79 70 65 3d 3d 32 20 29 7b 0a 20 20 20 20 20 type==2 ){.
1770: 20 69 66 28 20 7a 4f 72 69 67 55 75 69 64 20 26 if( zOrigUuid &
1780: 26 20 7a 4f 72 69 67 55 75 69 64 5b 30 5d 20 29 & zOrigUuid[0] )
1790: 7b 0a 20 20 20 20 20 20 20 20 40 20 69 6e 68 65 {. @ inhe
17a0: 72 69 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 rited from.
17b0: 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f hyperlink_to_
17c0: 75 75 69 64 28 7a 4f 72 69 67 55 75 69 64 29 3b uuid(zOrigUuid);
17d0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 . }else{.
17e0: 20 20 20 20 20 20 40 20 70 72 6f 70 61 67 61 74 @ propagat
17f0: 65 73 20 74 6f 20 64 65 73 63 65 6e 64 61 6e 74 es to descendant
1800: 73 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a s. }. }.
1810: 20 20 20 20 69 66 28 20 7a 53 72 63 55 75 69 64 if( zSrcUuid
1820: 20 26 26 20 7a 53 72 63 55 75 69 64 5b 30 5d 20 && zSrcUuid[0]
1830: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 74 61 67 ){. if( tag
1840: 74 79 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 type==0 ){.
1850: 20 20 20 40 20 62 79 0a 20 20 20 20 20 20 7d 65 @ by. }e
1860: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 40 20 61 lse{. @ a
1870: 64 64 65 64 20 62 79 0a 20 20 20 20 20 20 7d 0a dded by. }.
1880: 20 20 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f hyperlink_
1890: 74 6f 5f 75 75 69 64 28 7a 53 72 63 55 75 69 64 to_uuid(zSrcUuid
18a0: 29 3b 0a 20 20 20 20 20 20 40 20 6f 6e 0a 20 20 );. @ on.
18b0: 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f hyperlink_to
18c0: 5f 64 61 74 65 28 7a 44 61 74 65 2c 30 29 3b 0a _date(zDate,0);.
18d0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 5f 66 }. }. db_f
18e0: 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 69 inalize(&q);. i
18f0: 66 28 20 63 6e 74 20 29 7b 0a 20 20 20 20 40 20 f( cnt ){. @
1900: 3c 2f 75 6c 3e 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a </ul>. }.}.../*
1910: 0a 2a 2a 20 41 70 70 65 6e 64 20 74 68 65 20 64 .** Append the d
1920: 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 ifference betwee
1930: 6e 20 74 77 6f 20 52 49 44 73 20 74 6f 20 74 68 n two RIDs to th
1940: 65 20 6f 75 74 70 75 74 0a 2a 2f 0a 73 74 61 74 e output.*/.stat
1950: 69 63 20 76 6f 69 64 20 61 70 70 65 6e 64 5f 64 ic void append_d
1960: 69 66 66 28 69 6e 74 20 66 72 6f 6d 69 64 2c 20 iff(int fromid,
1970: 69 6e 74 20 74 6f 69 64 29 7b 0a 20 20 42 6c 6f int toid){. Blo
1980: 62 20 66 72 6f 6d 2c 20 74 6f 2c 20 6f 75 74 3b b from, to, out;
1990: 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 66 . content_get(f
19a0: 72 6f 6d 69 64 2c 20 26 66 72 6f 6d 29 3b 0a 20 romid, &from);.
19b0: 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 74 6f 69 content_get(toi
19c0: 64 2c 20 26 74 6f 29 3b 0a 20 20 62 6c 6f 62 5f d, &to);. blob_
19d0: 7a 65 72 6f 28 26 6f 75 74 29 3b 0a 20 20 74 65 zero(&out);. te
19e0: 78 74 5f 64 69 66 66 28 26 66 72 6f 6d 2c 20 26 xt_diff(&from, &
19f0: 74 6f 2c 20 26 6f 75 74 2c 20 35 29 3b 0a 20 20 to, &out, 5);.
1a00: 40 20 25 68 28 62 6c 6f 62 5f 73 74 72 28 26 6f @ %h(blob_str(&o
1a10: 75 74 29 29 0a 20 20 62 6c 6f 62 5f 72 65 73 65 ut)). blob_rese
1a20: 74 28 26 66 72 6f 6d 29 3b 0a 20 20 62 6c 6f 62 t(&from);. blob
1a30: 5f 72 65 73 65 74 28 26 74 6f 29 3b 0a 20 20 62 _reset(&to);. b
1a40: 6c 6f 62 5f 72 65 73 65 74 28 26 6f 75 74 29 3b lob_reset(&out);
1a50: 20 20 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 .}.../*.** WEB
1a60: 50 41 47 45 3a 20 76 69 6e 66 6f 0a 2a 2a 20 57 PAGE: vinfo.** W
1a70: 45 42 50 41 47 45 3a 20 63 69 0a 2a 2a 20 55 52 EBPAGE: ci.** UR
1a80: 4c 3a 20 20 2f 63 69 3f 6e 61 6d 65 3d 52 49 44 L: /ci?name=RID
1a90: 7c 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 0a 2a |ARTIFACTID.**.*
1aa0: 2a 20 44 69 73 70 6c 61 79 20 69 6e 66 6f 72 6d * Display inform
1ab0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 20 70 61 ation about a pa
1ac0: 72 74 69 63 75 6c 61 72 20 63 68 65 63 6b 2d 69 rticular check-i
1ad0: 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 63 69 5f 70 61 n..*/.void ci_pa
1ae0: 67 65 28 76 6f 69 64 29 7b 0a 20 20 53 74 6d 74 ge(void){. Stmt
1af0: 20 71 3b 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 q;. int rid;.
1b00: 20 69 6e 74 20 69 73 4c 65 61 66 3b 0a 0a 20 20 int isLeaf;..
1b10: 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 login_check_cred
1b20: 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 28 entials();. if(
1b30: 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b 20 6c 6f !g.okRead ){ lo
1b40: 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 65 gin_needed(); re
1b50: 74 75 72 6e 3b 20 7d 0a 20 20 72 69 64 20 3d 20 turn; }. rid =
1b60: 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 22 name_to_rid(PD("
1b70: 6e 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 20 69 name","0"));. i
1b80: 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20 20 20 f( rid==0 ){.
1b90: 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 43 style_header("C
1ba0: 68 65 63 6b 2d 69 6e 20 49 6e 66 6f 72 6d 61 74 heck-in Informat
1bb0: 69 6f 6e 20 45 72 72 6f 72 22 29 3b 0a 20 20 20 ion Error");.
1bc0: 20 40 20 4e 6f 20 73 75 63 68 20 6f 62 6a 65 63 @ No such objec
1bd0: 74 3a 20 25 68 28 67 2e 61 72 67 76 5b 32 5d 29 t: %h(g.argv[2])
1be0: 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 . style_foote
1bf0: 72 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b r();. return;
1c00: 0a 20 20 7d 0a 20 20 69 73 4c 65 61 66 20 3d 20 . }. isLeaf =
1c10: 21 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 !db_exists("SELE
1c20: 43 54 20 31 20 46 52 4f 4d 20 70 6c 69 6e 6b 20 CT 1 FROM plink
1c30: 57 48 45 52 45 20 70 69 64 3d 25 64 22 2c 20 72 WHERE pid=%d", r
1c40: 69 64 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 id);. db_prepar
1c50: 65 28 26 71 2c 20 0a 20 20 20 20 20 22 53 45 4c e(&q, . "SEL
1c60: 45 43 54 20 75 75 69 64 2c 20 64 61 74 65 74 69 ECT uuid, dateti
1c70: 6d 65 28 6d 74 69 6d 65 2c 20 27 6c 6f 63 61 6c me(mtime, 'local
1c80: 74 69 6d 65 27 29 2c 20 75 73 65 72 2c 20 63 6f time'), user, co
1c90: 6d 6d 65 6e 74 22 0a 20 20 20 20 20 22 20 20 46 mment". " F
1ca0: 52 4f 4d 20 62 6c 6f 62 2c 20 65 76 65 6e 74 22 ROM blob, event"
1cb0: 0a 20 20 20 20 20 22 20 57 48 45 52 45 20 62 6c . " WHERE bl
1cc0: 6f 62 2e 72 69 64 3d 25 64 22 0a 20 20 20 20 20 ob.rid=%d".
1cd0: 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 " AND event.ob
1ce0: 6a 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 72 69 jid=%d",. ri
1cf0: 64 2c 20 72 69 64 0a 20 20 29 3b 0a 20 20 69 66 d, rid. );. if
1d00: 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 ( db_step(&q)==S
1d10: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 QLITE_ROW ){.
1d20: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 const char *zUu
1d30: 69 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 id = db_column_t
1d40: 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 ext(&q, 0);.
1d50: 63 68 61 72 20 2a 7a 54 69 74 6c 65 20 3d 20 6d char *zTitle = m
1d60: 70 72 69 6e 74 66 28 22 43 68 65 63 6b 2d 69 6e printf("Check-in
1d70: 20 5b 25 2e 31 30 73 5d 22 2c 20 7a 55 75 69 64 [%.10s]", zUuid
1d80: 29 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 55 );. char *zEU
1d90: 73 65 72 2c 20 2a 7a 45 43 6f 6d 6d 65 6e 74 3b ser, *zEComment;
1da0: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
1db0: 2a 7a 55 73 65 72 3b 0a 20 20 20 20 63 6f 6e 73 *zUser;. cons
1dc0: 74 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 t char *zComment
1dd0: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
1de0: 20 2a 7a 44 61 74 65 3b 0a 20 20 20 20 73 74 79 *zDate;. sty
1df0: 6c 65 5f 68 65 61 64 65 72 28 7a 54 69 74 6c 65 le_header(zTitle
1e00: 29 3b 0a 20 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f );. login_ano
1e10: 6e 79 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 nymous_available
1e20: 28 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 54 69 ();. free(zTi
1e30: 74 6c 65 29 3b 0a 20 20 20 20 7a 45 55 73 65 72 tle);. zEUser
1e40: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 0a 20 20 = db_text(0,.
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e60: 20 22 53 45 4c 45 43 54 20 76 61 6c 75 65 20 46 "SELECT value F
1e70: 52 4f 4d 20 74 61 67 78 72 65 66 20 57 48 45 52 ROM tagxref WHER
1e80: 45 20 74 61 67 69 64 3d 25 64 20 41 4e 44 20 72 E tagid=%d AND r
1e90: 69 64 3d 25 64 22 2c 0a 20 20 20 20 20 20 20 20 id=%d",.
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 54 41 47 5f TAG_
1eb0: 55 53 45 52 2c 20 72 69 64 29 3b 0a 20 20 20 20 USER, rid);.
1ec0: 7a 45 43 6f 6d 6d 65 6e 74 20 3d 20 64 62 5f 74 zEComment = db_t
1ed0: 65 78 74 28 30 2c 20 0a 20 20 20 20 20 20 20 20 ext(0, .
1ee0: 20 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 "SELE
1ef0: 43 54 20 76 61 6c 75 65 20 46 52 4f 4d 20 74 61 CT value FROM ta
1f00: 67 78 72 65 66 20 57 48 45 52 45 20 74 61 67 69 gxref WHERE tagi
1f10: 64 3d 25 64 20 41 4e 44 20 72 69 64 3d 25 64 22 d=%d AND rid=%d"
1f20: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
1f30: 20 20 20 20 20 54 41 47 5f 43 4f 4d 4d 45 4e 54 TAG_COMMENT
1f40: 2c 20 72 69 64 29 3b 0a 20 20 20 20 7a 55 73 65 , rid);. zUse
1f50: 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 r = db_column_te
1f60: 78 74 28 26 71 2c 20 32 29 3b 0a 20 20 20 20 7a xt(&q, 2);. z
1f70: 43 6f 6d 6d 65 6e 74 20 3d 20 64 62 5f 63 6f 6c Comment = db_col
1f80: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 3b umn_text(&q, 3);
1f90: 0a 20 20 20 20 7a 44 61 74 65 20 3d 20 64 62 5f . zDate = db_
1fa0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 31 column_text(&q,1
1fb0: 29 3b 0a 20 20 20 20 40 20 3c 64 69 76 20 63 6c );. @ <div cl
1fc0: 61 73 73 3d 22 73 65 63 74 69 6f 6e 22 3e 4f 76 ass="section">Ov
1fd0: 65 72 76 69 65 77 3c 2f 64 69 76 3e 0a 20 20 20 erview</div>.
1fe0: 20 40 20 3c 70 3e 3c 74 61 62 6c 65 20 63 6c 61 @ <p><table cla
1ff0: 73 73 3d 22 6c 61 62 65 6c 2d 76 61 6c 75 65 22 ss="label-value"
2000: 3e 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e >. @ <tr><th>
2010: 53 48 41 31 26 6e 62 73 70 3b 48 61 73 68 3a 3c SHA1 Hash:<
2020: 2f 74 68 3e 3c 74 64 3e 25 73 28 7a 55 75 69 64 /th><td>%s(zUuid
2030: 29 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 53 65 ). if( g.okSe
2040: 74 75 70 20 29 7b 0a 20 20 20 20 20 20 40 20 28 tup ){. @ (
2050: 52 65 63 6f 72 64 20 49 44 3a 20 25 64 28 72 69 Record ID: %d(ri
2060: 64 29 29 0a 20 20 20 20 7d 0a 20 20 20 20 40 20 d)). }. @
2070: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 40 </td></tr>. @
2080: 20 3c 74 72 3e 3c 74 68 3e 44 61 74 65 3a 3c 2f <tr><th>Date:</
2090: 74 68 3e 3c 74 64 3e 0a 20 20 20 20 68 79 70 65 th><td>. hype
20a0: 72 6c 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 rlink_to_date(zD
20b0: 61 74 65 2c 20 22 3c 2f 74 64 3e 3c 2f 74 72 3e ate, "</td></tr>
20c0: 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 55 73 ");. if( zEUs
20d0: 65 72 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 74 er ){. @ <t
20e0: 72 3e 3c 74 68 3e 45 64 69 74 65 64 26 6e 62 73 r><th>Edited&nbs
20f0: 70 3b 55 73 65 72 3a 3c 2f 74 64 3e 3c 74 64 3e p;User:</td><td>
2100: 0a 20 20 20 20 20 20 68 79 70 65 72 6c 69 6e 6b . hyperlink
2110: 5f 74 6f 5f 75 73 65 72 28 7a 45 55 73 65 72 2c _to_user(zEUser,
2120: 7a 44 61 74 65 2c 22 3c 2f 74 64 3e 3c 2f 74 72 zDate,"</td></tr
2130: 3e 22 29 3b 0a 20 20 20 20 20 20 40 20 3c 74 72 >");. @ <tr
2140: 3e 3c 74 68 3e 4f 72 69 67 69 6e 61 6c 26 6e 62 ><th>Original&nb
2150: 73 70 3b 55 73 65 72 3a 3c 2f 74 68 3e 3c 74 64 sp;User:</th><td
2160: 3e 0a 20 20 20 20 20 20 68 79 70 65 72 6c 69 6e >. hyperlin
2170: 6b 5f 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 2c k_to_user(zUser,
2180: 7a 44 61 74 65 2c 22 3c 2f 74 64 3e 3c 2f 74 72 zDate,"</td></tr
2190: 3e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a >");. }else{.
21a0: 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e @ <tr><th>
21b0: 55 73 65 72 3a 3c 2f 74 64 3e 3c 74 64 3e 0a 20 User:</td><td>.
21c0: 20 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 hyperlink_t
21d0: 6f 5f 75 73 65 72 28 7a 55 73 65 72 2c 7a 44 61 o_user(zUser,zDa
21e0: 74 65 2c 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 te,"</td></tr>")
21f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 ;. }. if(
2200: 7a 45 43 6f 6d 6d 65 6e 74 20 29 7b 0a 20 20 20 zEComment ){.
2210: 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 45 64 69 @ <tr><th>Edi
2220: 74 65 64 26 6e 62 73 70 3b 43 6f 6d 6d 65 6e 74 ted Comment
2230: 3a 3c 2f 74 68 3e 3c 74 64 3e 25 77 28 7a 45 43 :</th><td>%w(zEC
2240: 6f 6d 6d 65 6e 74 29 3c 2f 74 64 3e 3c 2f 74 72 omment)</td></tr
2250: 3e 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 >. @ <tr><t
2260: 68 3e 4f 72 69 67 69 6e 61 6c 26 6e 62 73 70 3b h>Original
2270: 43 6f 6d 6d 65 6e 74 3a 3c 2f 74 68 3e 3c 74 64 Comment:</th><td
2280: 3e 25 77 28 7a 43 6f 6d 6d 65 6e 74 29 3c 2f 74 >%w(zComment)</t
2290: 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 7d 65 6c 73 d></tr>. }els
22a0: 65 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c e{. @ <tr><
22b0: 74 68 3e 43 6f 6d 6d 65 6e 74 3a 3c 2f 74 68 3e th>Comment:</th>
22c0: 3c 74 64 3e 25 77 28 7a 43 6f 6d 6d 65 6e 74 29 <td>%w(zComment)
22d0: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 7d </td></tr>. }
22e0: 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 . @ </td></tr
22f0: 3e 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 41 64 >. if( g.okAd
2300: 6d 69 6e 20 29 7b 0a 20 20 20 20 20 20 64 62 5f min ){. db_
2310: 70 72 65 70 61 72 65 28 26 71 2c 20 0a 20 20 20 prepare(&q, .
2320: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 72 63 "SELECT rc
2330: 76 66 72 6f 6d 2e 69 70 61 64 64 72 2c 20 75 73 vfrom.ipaddr, us
2340: 65 72 2e 6c 6f 67 69 6e 2c 20 64 61 74 65 74 69 er.login, dateti
2350: 6d 65 28 72 63 76 66 72 6f 6d 2e 6d 74 69 6d 65 me(rcvfrom.mtime
2360: 29 22 0a 20 20 20 20 20 20 20 20 20 22 20 20 46 )". " F
2370: 52 4f 4d 20 62 6c 6f 62 20 4a 4f 49 4e 20 72 63 ROM blob JOIN rc
2380: 76 66 72 6f 6d 20 55 53 49 4e 47 28 72 63 76 69 vfrom USING(rcvi
2390: 64 29 20 4c 45 46 54 20 4a 4f 49 4e 20 75 73 65 d) LEFT JOIN use
23a0: 72 20 55 53 49 4e 47 28 75 69 64 29 22 0a 20 20 r USING(uid)".
23b0: 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 62 " WHERE b
23c0: 6c 6f 62 2e 72 69 64 3d 25 64 22 2c 0a 20 20 20 lob.rid=%d",.
23d0: 20 20 20 20 20 20 72 69 64 0a 20 20 20 20 20 20 rid.
23e0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 5f );. if( db_
23f0: 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 step(&q)==SQLITE
2400: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 _ROW ){.
2410: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 70 41 const char *zIpA
2420: 64 64 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ddr = db_column_
2430: 74 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 text(&q, 0);.
2440: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
2450: 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c 75 *zUser = db_colu
2460: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b 0a mn_text(&q, 1);.
2470: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 const ch
2480: 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 ar *zDate = db_c
2490: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 olumn_text(&q, 2
24a0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a );. if( z
24b0: 55 73 65 72 3d 3d 30 20 7c 7c 20 7a 55 73 65 72 User==0 || zUser
24c0: 5b 30 5d 3d 3d 30 20 29 20 7a 55 73 65 72 20 3d [0]==0 ) zUser =
24d0: 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 "unknown";.
24e0: 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e 52 65 @ <tr><th>Re
24f0: 63 65 69 76 65 64 26 6e 62 73 70 3b 46 72 6f 6d ceived From
2500: 3a 3c 2f 74 68 3e 0a 20 20 20 20 20 20 20 20 40 :</th>. @
2510: 20 3c 74 64 3e 25 68 28 7a 55 73 65 72 29 20 40 <td>%h(zUser) @
2520: 20 25 68 28 7a 49 70 41 64 64 72 29 20 6f 6e 20 %h(zIpAddr) on
2530: 25 73 28 7a 44 61 74 65 29 3c 2f 74 64 3e 3c 2f %s(zDate)</td></
2540: 74 72 3e 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 tr>. }.
2550: 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 db_finalize(&q
2560: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 );. }. if(
2570: 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a g.okHistory ){.
2580: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53 68 6f char *zSho
2590: 72 74 55 75 69 64 20 3d 20 6d 70 72 69 6e 74 66 rtUuid = mprintf
25a0: 28 22 25 2e 31 30 73 22 2c 20 7a 55 75 69 64 29 ("%.10s", zUuid)
25b0: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 ;. const ch
25c0: 61 72 20 2a 7a 50 72 6f 6a 4e 61 6d 65 20 3d 20 ar *zProjName =
25d0: 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 2d db_get("project-
25e0: 6e 61 6d 65 22 2c 20 22 75 6e 6e 61 6d 65 64 22 name", "unnamed"
25f0: 29 3b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c );. @ <tr><
2600: 74 68 3e 54 69 6d 65 6c 69 6e 65 73 3a 3c 2f 74 th>Timelines:</t
2610: 68 3e 3c 74 64 3e 0a 20 20 20 20 20 20 40 20 20 h><td>. @
2620: 20 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e <a href="%s(g.
2630: 7a 42 61 73 65 55 52 4c 29 2f 74 69 6d 65 6c 69 zBaseURL)/timeli
2640: 6e 65 3f 70 3d 25 64 28 72 69 64 29 22 3e 61 6e ne?p=%d(rid)">an
2650: 63 65 73 74 6f 72 73 3c 2f 61 3e 0a 20 20 20 20 cestors</a>.
2660: 20 20 40 20 20 20 20 7c 20 3c 61 20 68 72 65 66 @ | <a href
2670: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
2680: 2f 74 69 6d 65 6c 69 6e 65 3f 64 3d 25 64 28 72 /timeline?d=%d(r
2690: 69 64 29 22 3e 64 65 73 63 65 6e 64 61 6e 74 73 id)">descendants
26a0: 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 20 20 </a>. @
26b0: 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e | <a href="%s(g.
26c0: 7a 42 61 73 65 55 52 4c 29 2f 74 69 6d 65 6c 69 zBaseURL)/timeli
26d0: 6e 65 3f 64 3d 25 64 28 72 69 64 29 26 70 3d 25 ne?d=%d(rid)&p=%
26e0: 64 28 72 69 64 29 22 3e 62 6f 74 68 3c 2f 61 3e d(rid)">both</a>
26f0: 0a 20 20 20 20 20 20 64 62 5f 70 72 65 70 61 72 . db_prepar
2700: 65 28 26 71 2c 20 22 53 45 4c 45 43 54 20 73 75 e(&q, "SELECT su
2710: 62 73 74 72 28 74 61 67 2e 74 61 67 6e 61 6d 65 bstr(tag.tagname
2720: 2c 35 29 20 46 52 4f 4d 20 74 61 67 78 72 65 66 ,5) FROM tagxref
2730: 2c 20 74 61 67 20 22 0a 20 20 20 20 20 20 20 20 , tag ".
2740: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 " W
2750: 48 45 52 45 20 72 69 64 3d 25 64 20 41 4e 44 20 HERE rid=%d AND
2760: 74 61 67 74 79 70 65 3e 30 20 22 0a 20 20 20 20 tagtype>0 ".
2770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2780: 20 22 20 20 20 41 4e 44 20 74 61 67 2e 74 61 67 " AND tag.tag
2790: 69 64 3d 74 61 67 78 72 65 66 2e 74 61 67 69 64 id=tagxref.tagid
27a0: 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
27b0: 20 20 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 " AND
27c0: 2b 74 61 67 2e 74 61 67 6e 61 6d 65 20 47 4c 4f +tag.tagname GLO
27d0: 42 20 27 73 79 6d 2d 2a 27 22 2c 20 72 69 64 29 B 'sym-*'", rid)
27e0: 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 ;. while( d
27f0: 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 b_step(&q)==SQLI
2800: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 TE_ROW ){.
2810: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 const char *zT
2820: 61 67 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 agName = db_colu
2830: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a mn_text(&q, 0);.
2840: 20 20 20 20 20 20 20 20 40 20 20 7c 20 3c 61 20 @ | <a
2850: 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 href="%s(g.zBase
2860: 55 52 4c 29 2f 74 69 6d 65 6c 69 6e 65 3f 74 3d URL)/timeline?t=
2870: 25 54 28 7a 54 61 67 4e 61 6d 65 29 22 3e 25 68 %T(zTagName)">%h
2880: 28 7a 54 61 67 4e 61 6d 65 29 3c 2f 61 3e 0a 20 (zTagName)</a>.
2890: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 62 5f }. db_
28a0: 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 finalize(&q);.
28b0: 20 20 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e @ </td></tr>
28c0: 0a 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 . @ <tr><th
28d0: 3e 4f 74 68 65 72 26 6e 62 73 70 3b 4c 69 6e 6b >Other Link
28e0: 73 3a 3c 2f 74 68 3e 0a 20 20 20 20 20 20 40 20 s:</th>. @
28f0: 20 20 3c 74 64 3e 0a 20 20 20 20 20 20 40 20 20 <td>. @
2900: 20 20 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 <a href="%s(g
2910: 2e 7a 42 61 73 65 55 52 4c 29 2f 64 69 72 3f 63 .zBaseURL)/dir?c
2920: 69 3d 25 73 28 7a 53 68 6f 72 74 55 75 69 64 29 i=%s(zShortUuid)
2930: 22 3e 66 69 6c 65 73 3c 2f 61 3e 0a 20 20 20 20 ">files</a>.
2940: 20 20 40 20 20 20 20 20 7c 20 3c 61 20 68 72 65 @ | <a hre
2950: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
2960: 29 2f 7a 69 70 2f 25 73 28 7a 50 72 6f 6a 4e 61 )/zip/%s(zProjNa
2970: 6d 65 29 2d 25 73 28 7a 53 68 6f 72 74 55 75 69 me)-%s(zShortUui
2980: 64 29 2e 7a 69 70 3f 75 75 69 64 3d 25 73 28 7a d).zip?uuid=%s(z
2990: 55 75 69 64 29 22 3e 0a 20 20 20 20 20 20 40 20 Uuid)">. @
29a0: 20 20 20 20 20 20 20 20 5a 49 50 20 61 72 63 68 ZIP arch
29b0: 69 76 65 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 ive</a>. @
29c0: 20 20 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 | <a href="%
29d0: 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 72 s(g.zBaseURL)/ar
29e0: 74 69 66 61 63 74 2f 25 64 28 72 69 64 29 22 3e tifact/%d(rid)">
29f0: 6d 61 6e 69 66 65 73 74 3c 2f 61 3e 0a 20 20 20 manifest</a>.
2a00: 20 20 20 69 66 28 20 67 2e 6f 6b 57 72 69 74 65 if( g.okWrite
2a10: 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 20 20 ){. @
2a20: 20 20 7c 20 3c 61 20 68 72 65 66 3d 22 25 73 28 | <a href="%s(
2a30: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 63 69 5f 65 g.zBaseURL)/ci_e
2a40: 64 69 74 3f 72 3d 25 64 28 72 69 64 29 22 3e 65 dit?r=%d(rid)">e
2a50: 64 69 74 3c 2f 61 3e 0a 20 20 20 20 20 20 7d 0a dit</a>. }.
2a60: 20 20 20 20 20 20 40 20 20 20 3c 2f 74 64 3e 0a @ </td>.
2a70: 20 20 20 20 20 20 40 20 3c 2f 74 72 3e 0a 20 20 @ </tr>.
2a80: 20 20 20 20 66 72 65 65 28 7a 53 68 6f 72 74 55 free(zShortU
2a90: 75 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 uid);. }.
2aa0: 40 20 3c 2f 74 61 62 6c 65 3e 3c 2f 70 3e 0a 20 @ </table></p>.
2ab0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 79 6c }else{. styl
2ac0: 65 5f 68 65 61 64 65 72 28 22 43 68 65 63 6b 2d e_header("Check-
2ad0: 69 6e 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 in Information")
2ae0: 3b 0a 20 20 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e ;. login_anon
2af0: 79 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 ymous_available(
2b00: 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 );. }. db_fina
2b10: 6c 69 7a 65 28 26 71 29 3b 0a 20 20 73 68 6f 77 lize(&q);. show
2b20: 54 61 67 73 28 72 69 64 2c 20 22 22 29 3b 0a 20 Tags(rid, "");.
2b30: 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 @ <div class="s
2b40: 65 63 74 69 6f 6e 22 3e 43 68 61 6e 67 65 73 3c ection">Changes<
2b50: 2f 64 69 76 3e 0a 20 20 64 62 5f 70 72 65 70 61 /div>. db_prepa
2b60: 72 65 28 26 71 2c 0a 20 20 20 20 20 22 53 45 4c re(&q,. "SEL
2b70: 45 43 54 20 70 69 64 2c 20 66 69 64 2c 20 6e 61 ECT pid, fid, na
2b80: 6d 65 2c 20 73 75 62 73 74 72 28 61 2e 75 75 69 me, substr(a.uui
2b90: 64 2c 31 2c 31 30 29 2c 20 73 75 62 73 74 72 28 d,1,10), substr(
2ba0: 62 2e 75 75 69 64 2c 31 2c 31 30 29 22 0a 20 20 b.uuid,1,10)".
2bb0: 20 20 20 22 20 20 46 52 4f 4d 20 6d 6c 69 6e 6b " FROM mlink
2bc0: 20 4a 4f 49 4e 20 66 69 6c 65 6e 61 6d 65 20 4f JOIN filename O
2bd0: 4e 20 66 69 6c 65 6e 61 6d 65 2e 66 6e 69 64 3d N filename.fnid=
2be0: 6d 6c 69 6e 6b 2e 66 6e 69 64 22 0a 20 20 20 20 mlink.fnid".
2bf0: 20 22 20 20 20 20 20 20 20 20 20 4c 45 46 54 20 " LEFT
2c00: 4a 4f 49 4e 20 62 6c 6f 62 20 61 20 4f 4e 20 61 JOIN blob a ON a
2c10: 2e 72 69 64 3d 70 69 64 22 0a 20 20 20 20 20 22 .rid=pid". "
2c20: 20 20 20 20 20 20 20 20 20 4c 45 46 54 20 4a 4f LEFT JO
2c30: 49 4e 20 62 6c 6f 62 20 62 20 4f 4e 20 62 2e 72 IN blob b ON b.r
2c40: 69 64 3d 66 69 64 22 0a 20 20 20 20 20 22 20 57 id=fid". " W
2c50: 48 45 52 45 20 6d 6c 69 6e 6b 2e 6d 69 64 3d 25 HERE mlink.mid=%
2c60: 64 22 0a 20 20 20 20 20 22 20 4f 52 44 45 52 20 d". " ORDER
2c70: 42 59 20 6e 61 6d 65 22 2c 0a 20 20 20 20 20 72 BY name",. r
2c80: 69 64 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 id. );. while(
2c90: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
2ca0: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 LITE_ROW ){.
2cb0: 69 6e 74 20 70 69 64 20 3d 20 64 62 5f 63 6f 6c int pid = db_col
2cc0: 75 6d 6e 5f 69 6e 74 28 26 71 2c 30 29 3b 0a 20 umn_int(&q,0);.
2cd0: 20 20 20 69 6e 74 20 66 69 64 20 3d 20 64 62 5f int fid = db_
2ce0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 31 29 column_int(&q,1)
2cf0: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 ;. const char
2d00: 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f 63 6f 6c *zName = db_col
2d10: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 32 29 3b 0a umn_text(&q,2);.
2d20: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
2d30: 7a 4f 6c 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e zOld = db_column
2d40: 5f 74 65 78 74 28 26 71 2c 33 29 3b 0a 20 20 20 _text(&q,3);.
2d50: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 const char *zNe
2d60: 77 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 w = db_column_te
2d70: 78 74 28 26 71 2c 34 29 3b 0a 20 20 20 20 69 66 xt(&q,4);. if
2d80: 28 20 21 67 2e 6f 6b 48 69 73 74 6f 72 79 20 29 ( !g.okHistory )
2d90: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 4e 65 77 {. if( zNew
2da0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 40 ==0 ){. @
2db0: 20 3c 70 3e 44 65 6c 65 74 65 64 20 25 68 28 7a <p>Deleted %h(z
2dc0: 4e 61 6d 65 29 3c 2f 70 3e 0a 20 20 20 20 20 20 Name)</p>.
2dd0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 continue;.
2de0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
2df0: 20 40 20 3c 70 3e 43 68 61 6e 67 65 73 20 74 6f @ <p>Changes to
2e00: 20 25 68 28 7a 4e 61 6d 65 29 3c 2f 70 3e 0a 20 %h(zName)</p>.
2e10: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 }. }else
2e20: 20 69 66 28 20 7a 4f 6c 64 20 26 26 20 7a 4e 65 if( zOld && zNe
2e30: 77 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 70 3e w ){. @ <p>
2e40: 4d 6f 64 69 66 69 65 64 20 3c 61 20 68 72 65 66 Modified <a href
2e50: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
2e60: 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a /finfo?name=%T(z
2e70: 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 6d 65 29 Name)">%h(zName)
2e80: 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 66 72 6f </a>. @ fro
2e90: 6d 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e m <a href="%s(g.
2ea0: 7a 42 61 73 65 55 52 4c 29 2f 61 72 74 69 66 61 zBaseURL)/artifa
2eb0: 63 74 2f 25 73 28 7a 4f 6c 64 29 22 3e 5b 25 73 ct/%s(zOld)">[%s
2ec0: 28 7a 4f 6c 64 29 5d 3c 2f 61 3e 0a 20 20 20 20 (zOld)]</a>.
2ed0: 20 20 40 20 74 6f 20 3c 61 20 68 72 65 66 3d 22 @ to <a href="
2ee0: 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 61 %s(g.zBaseURL)/a
2ef0: 72 74 69 66 61 63 74 2f 25 73 28 7a 4e 65 77 29 rtifact/%s(zNew)
2f00: 22 3e 5b 25 73 28 7a 4e 65 77 29 5d 3c 2f 61 3e ">[%s(zNew)]</a>
2f10: 3c 2f 70 3e 0a 20 20 20 20 7d 65 6c 73 65 20 69 </p>. }else i
2f20: 66 28 20 7a 4f 6c 64 20 29 7b 0a 20 20 20 20 20 f( zOld ){.
2f30: 20 40 20 3c 70 3e 44 65 6c 65 74 65 64 20 3c 61 @ <p>Deleted <a
2f40: 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 href="%s(g.zBas
2f50: 65 55 52 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d 65 eURL)/finfo?name
2f60: 3d 25 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 7a =%T(zName)">%h(z
2f70: 4e 61 6d 65 29 3c 2f 61 3e 0a 20 20 20 20 20 20 Name)</a>.
2f80: 40 20 76 65 72 73 69 6f 6e 20 3c 61 20 68 72 65 @ version <a hre
2f90: 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c f="%s(g.zBaseURL
2fa0: 29 2f 61 72 74 69 66 61 63 74 2f 25 73 28 7a 4f )/artifact/%s(zO
2fb0: 6c 64 29 22 3e 5b 25 73 28 7a 4f 6c 64 29 5d 3c ld)">[%s(zOld)]<
2fc0: 2f 61 3e 3c 2f 70 3e 0a 20 20 20 20 20 20 63 6f /a></p>. co
2fd0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d 65 6c 73 ntinue;. }els
2fe0: 65 7b 0a 20 20 20 20 20 20 40 20 3c 70 3e 41 64 e{. @ <p>Ad
2ff0: 64 65 64 20 3c 61 20 68 72 65 66 3d 22 25 73 28 ded <a href="%s(
3000: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 66 69 6e 66 g.zBaseURL)/finf
3010: 6f 3f 6e 61 6d 65 3d 25 54 28 7a 4e 61 6d 65 29 o?name=%T(zName)
3020: 22 3e 25 68 28 7a 4e 61 6d 65 29 3c 2f 61 3e 0a ">%h(zName)</a>.
3030: 20 20 20 20 20 20 40 20 76 65 72 73 69 6f 6e 20 @ version
3040: 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 <a href="%s(g.zB
3050: 61 73 65 55 52 4c 29 2f 61 72 74 69 66 61 63 74 aseURL)/artifact
3060: 2f 25 73 28 7a 4e 65 77 29 22 3e 5b 25 73 28 7a /%s(zNew)">[%s(z
3070: 4e 65 77 29 5d 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 New)]</a></p>.
3080: 20 20 7d 0a 20 20 20 20 40 20 3c 62 6c 6f 63 6b }. @ <block
3090: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 quote><pre>.
30a0: 61 70 70 65 6e 64 5f 64 69 66 66 28 70 69 64 2c append_diff(pid,
30b0: 20 66 69 64 29 3b 0a 20 20 20 20 40 20 3c 2f 70 fid);. @ </p
30c0: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e re></blockquote>
30d0: 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 . }. db_finali
30e0: 7a 65 28 26 71 29 3b 0a 20 20 73 74 79 6c 65 5f ze(&q);. style_
30f0: 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a footer();.}../*.
3100: 2a 2a 20 57 45 42 50 41 47 45 3a 20 77 69 6e 66 ** WEBPAGE: winf
3110: 6f 0a 2a 2a 20 55 52 4c 3a 20 20 2f 77 69 6e 66 o.** URL: /winf
3120: 6f 3f 6e 61 6d 65 3d 52 49 44 0a 2a 2a 0a 2a 2a o?name=RID.**.**
3130: 20 52 65 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74 Return informat
3140: 69 6f 6e 20 61 62 6f 75 74 20 61 20 77 69 6b 69 ion about a wiki
3150: 20 70 61 67 65 2e 0a 2a 2f 0a 76 6f 69 64 20 77 page..*/.void w
3160: 69 6e 66 6f 5f 70 61 67 65 28 76 6f 69 64 29 7b info_page(void){
3170: 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 69 6e 74 . Stmt q;. int
3180: 20 72 69 64 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 rid;.. login_c
3190: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 heck_credentials
31a0: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 52 ();. if( !g.okR
31b0: 64 57 69 6b 69 20 29 7b 20 6c 6f 67 69 6e 5f 6e dWiki ){ login_n
31c0: 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b eeded(); return;
31d0: 20 7d 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f }. rid = name_
31e0: 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 to_rid(PD("name"
31f0: 2c 22 30 22 29 29 3b 0a 20 20 69 66 28 20 72 69 ,"0"));. if( ri
3200: 64 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 79 6c d==0 ){. styl
3210: 65 5f 68 65 61 64 65 72 28 22 57 69 6b 69 20 50 e_header("Wiki P
3220: 61 67 65 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 age Information
3230: 45 72 72 6f 72 22 29 3b 0a 20 20 20 20 40 20 4e Error");. @ N
3240: 6f 20 73 75 63 68 20 6f 62 6a 65 63 74 3a 20 25 o such object: %
3250: 68 28 67 2e 61 72 67 76 5b 32 5d 29 0a 20 20 20 h(g.argv[2]).
3260: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
3270: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d . return;. }
3280: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 . db_prepare(&q
3290: 2c 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 , . "SELECT
32a0: 73 75 62 73 74 72 28 74 61 67 6e 61 6d 65 2c 20 substr(tagname,
32b0: 36 2c 20 31 30 30 30 29 2c 20 75 75 69 64 2c 22 6, 1000), uuid,"
32c0: 0a 20 20 20 20 20 22 20 20 20 20 20 20 20 64 61 . " da
32d0: 74 65 74 69 6d 65 28 65 76 65 6e 74 2e 6d 74 69 tetime(event.mti
32e0: 6d 65 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 me, 'localtime')
32f0: 2c 20 75 73 65 72 22 0a 20 20 20 20 20 22 20 20 , user". "
3300: 46 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 61 FROM tagxref, ta
3310: 67 2c 20 62 6c 6f 62 2c 20 65 76 65 6e 74 22 0a g, blob, event".
3320: 20 20 20 20 20 22 20 57 48 45 52 45 20 74 61 67 " WHERE tag
3330: 78 72 65 66 2e 72 69 64 3d 25 64 22 0a 20 20 20 xref.rid=%d".
3340: 20 20 22 20 20 20 41 4e 44 20 74 61 67 2e 74 61 " AND tag.ta
3350: 67 69 64 3d 74 61 67 78 72 65 66 2e 74 61 67 69 gid=tagxref.tagi
3360: 64 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 20 d". " AND
3370: 74 61 67 2e 74 61 67 6e 61 6d 65 20 4c 49 4b 45 tag.tagname LIKE
3380: 20 27 77 69 6b 69 2d 25 25 27 22 0a 20 20 20 20 'wiki-%%'".
3390: 20 22 20 20 20 41 4e 44 20 62 6c 6f 62 2e 72 69 " AND blob.ri
33a0: 64 3d 25 64 22 0a 20 20 20 20 20 22 20 20 20 41 d=%d". " A
33b0: 4e 44 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d 25 ND event.objid=%
33c0: 64 22 2c 0a 20 20 20 20 20 72 69 64 2c 20 72 69 d",. rid, ri
33d0: 64 2c 20 72 69 64 0a 20 20 29 3b 0a 20 20 69 66 d, rid. );. if
33e0: 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 ( db_step(&q)==S
33f0: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 QLITE_ROW ){.
3400: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 const char *zNa
3410: 6d 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 me = db_column_t
3420: 65 78 74 28 26 71 2c 20 30 29 3b 0a 20 20 20 20 ext(&q, 0);.
3430: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 75 69 const char *zUui
3440: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 d = db_column_te
3450: 78 74 28 26 71 2c 20 31 29 3b 0a 20 20 20 20 63 xt(&q, 1);. c
3460: 68 61 72 20 2a 7a 54 69 74 6c 65 20 3d 20 6d 70 har *zTitle = mp
3470: 72 69 6e 74 66 28 22 57 69 6b 69 20 50 61 67 65 rintf("Wiki Page
3480: 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 %s", zName);.
3490: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 const char *zD
34a0: 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f ate = db_column_
34b0: 74 65 78 74 28 26 71 2c 32 29 3b 0a 20 20 20 20 text(&q,2);.
34c0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 65 const char *zUse
34d0: 72 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 r = db_column_te
34e0: 78 74 28 26 71 2c 33 29 3b 0a 20 20 20 20 73 74 xt(&q,3);. st
34f0: 79 6c 65 5f 68 65 61 64 65 72 28 7a 54 69 74 6c yle_header(zTitl
3500: 65 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 54 69 e);. free(zTi
3510: 74 6c 65 29 3b 0a 20 20 20 20 6c 6f 67 69 6e 5f tle);. login_
3520: 61 6e 6f 6e 79 6d 6f 75 73 5f 61 76 61 69 6c 61 anonymous_availa
3530: 62 6c 65 28 29 3b 0a 20 20 20 20 40 20 3c 64 69 ble();. @ <di
3540: 76 20 63 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e v class="section
3550: 22 3e 4f 76 65 72 76 69 65 77 3c 2f 64 69 76 3e ">Overview</div>
3560: 0a 20 20 20 20 40 20 3c 70 3e 3c 74 61 62 6c 65 . @ <p><table
3570: 20 63 6c 61 73 73 3d 22 6c 61 62 65 6c 2d 76 61 class="label-va
3580: 6c 75 65 22 3e 0a 20 20 20 20 40 20 3c 74 72 3e lue">. @ <tr>
3590: 3c 74 68 3e 56 65 72 73 69 6f 6e 3a 3c 2f 74 68 <th>Version:</th
35a0: 3e 3c 74 64 3e 25 73 28 7a 55 75 69 64 29 3c 2f ><td>%s(zUuid)</
35b0: 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 40 20 3c td></tr>. @ <
35c0: 74 72 3e 3c 74 68 3e 44 61 74 65 3a 3c 2f 74 68 tr><th>Date:</th
35d0: 3e 3c 74 64 3e 0a 20 20 20 20 68 79 70 65 72 6c ><td>. hyperl
35e0: 69 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 61 74 ink_to_date(zDat
35f0: 65 2c 20 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 e, "</td></tr>")
3600: 3b 0a 20 20 20 20 69 66 28 20 67 2e 6f 6b 53 65 ;. if( g.okSe
3610: 74 75 70 20 29 7b 0a 20 20 20 20 20 20 40 20 3c tup ){. @ <
3620: 74 72 3e 3c 74 68 3e 52 65 63 6f 72 64 20 49 44 tr><th>Record ID
3630: 3a 3c 2f 74 68 3e 3c 74 64 3e 25 64 28 72 69 64 :</th><td>%d(rid
3640: 29 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 20 20 )</td></tr>.
3650: 7d 0a 20 20 20 20 40 20 3c 74 72 3e 3c 74 68 3e }. @ <tr><th>
3660: 4f 72 69 67 69 6e 61 6c 26 6e 62 73 70 3b 55 73 Original Us
3670: 65 72 3a 3c 2f 74 68 3e 3c 74 64 3e 0a 20 20 20 er:</th><td>.
3680: 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 hyperlink_to_us
3690: 65 72 28 7a 55 73 65 72 2c 20 7a 44 61 74 65 2c er(zUser, zDate,
36a0: 20 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 3b 0a "</td></tr>");.
36b0: 20 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 if( g.okHist
36c0: 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 40 20 3c ory ){. @ <
36d0: 74 72 3e 3c 74 68 3e 43 6f 6d 6d 61 6e 64 73 3a tr><th>Commands:
36e0: 3c 2f 74 68 3e 0a 20 20 20 20 20 20 40 20 20 20 </th>. @
36f0: 3c 74 64 3e 0a 20 20 20 20 20 20 2f 2a 20 40 20 <td>. /* @
3700: 20 20 20 20 3c 61 20 68 72 65 66 3d 22 25 73 28 <a href="%s(
3710: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 77 64 69 66 g.zBaseURL)/wdif
3720: 66 2f 25 64 28 72 69 64 29 22 3e 64 69 66 66 3c f/%d(rid)">diff<
3730: 2f 61 3e 20 7c 20 2a 2f 0a 20 20 20 20 20 20 40 /a> | */. @
3740: 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22 25 73 <a href="%s
3750: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 77 68 69 (g.zBaseURL)/whi
3760: 73 74 6f 72 79 3f 6e 61 6d 65 3d 25 74 28 7a 4e story?name=%t(zN
3770: 61 6d 65 29 22 3e 68 69 73 74 6f 72 79 3c 2f 61 ame)">history</a
3780: 3e 0a 20 20 20 20 20 20 40 20 20 20 20 20 7c 20 >. @ |
3790: 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 <a href="%s(g.zB
37a0: 61 73 65 55 52 4c 29 2f 61 72 74 69 66 61 63 74 aseURL)/artifact
37b0: 2f 25 64 28 72 69 64 29 22 3e 72 61 77 2d 74 65 /%d(rid)">raw-te
37c0: 78 74 3c 2f 61 3e 0a 20 20 20 20 20 20 40 20 20 xt</a>. @
37d0: 20 3c 2f 74 64 3e 0a 20 20 20 20 20 20 40 20 3c </td>. @ <
37e0: 2f 74 72 3e 0a 20 20 20 20 7d 0a 20 20 20 20 40 /tr>. }. @
37f0: 20 3c 2f 74 61 62 6c 65 3e 3c 2f 70 3e 0a 20 20 </table></p>.
3800: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 79 6c 65 }else{. style
3810: 5f 68 65 61 64 65 72 28 22 57 69 6b 69 20 49 6e _header("Wiki In
3820: 66 6f 72 6d 61 74 69 6f 6e 22 29 3b 0a 20 20 20 formation");.
3830: 20 72 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 rid = 0;. }.
3840: 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b db_finalize(&q);
3850: 0a 20 20 73 68 6f 77 54 61 67 73 28 72 69 64 2c . showTags(rid,
3860: 20 22 77 69 6b 69 2d 2a 22 29 3b 0a 20 20 69 66 "wiki-*");. if
3870: 28 20 72 69 64 20 29 7b 0a 20 20 20 20 42 6c 6f ( rid ){. Blo
3880: 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 20 20 4d b content;. M
3890: 61 6e 69 66 65 73 74 20 6d 3b 0a 20 20 20 20 6d anifest m;. m
38a0: 65 6d 73 65 74 28 26 6d 2c 20 30 2c 20 73 69 7a emset(&m, 0, siz
38b0: 65 6f 66 28 6d 29 29 3b 0a 20 20 20 20 62 6c 6f eof(m));. blo
38c0: 62 5f 7a 65 72 6f 28 26 6d 2e 63 6f 6e 74 65 6e b_zero(&m.conten
38d0: 74 29 3b 0a 20 20 20 20 63 6f 6e 74 65 6e 74 5f t);. content_
38e0: 67 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e get(rid, &conten
38f0: 74 29 3b 0a 20 20 20 20 6d 61 6e 69 66 65 73 74 t);. manifest
3900: 5f 70 61 72 73 65 28 26 6d 2c 20 26 63 6f 6e 74 _parse(&m, &cont
3910: 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 6d 2e ent);. if( m.
3920: 74 79 70 65 3d 3d 43 46 54 59 50 45 5f 57 49 4b type==CFTYPE_WIK
3930: 49 20 29 7b 0a 20 20 20 20 20 20 42 6c 6f 62 20 I ){. Blob
3940: 77 69 6b 69 3b 0a 20 20 20 20 20 20 62 6c 6f 62 wiki;. blob
3950: 5f 69 6e 69 74 28 26 77 69 6b 69 2c 20 6d 2e 7a _init(&wiki, m.z
3960: 57 69 6b 69 2c 20 2d 31 29 3b 0a 20 20 20 20 20 Wiki, -1);.
3970: 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 @ <div class="s
3980: 65 63 74 69 6f 6e 22 3e 43 6f 6e 74 65 6e 74 3c ection">Content<
3990: 2f 64 69 76 3e 0a 20 20 20 20 20 20 77 69 6b 69 /div>. wiki
39a0: 5f 63 6f 6e 76 65 72 74 28 26 77 69 6b 69 2c 20 _convert(&wiki,
39b0: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 6c 6f 0, 0);. blo
39c0: 62 5f 72 65 73 65 74 28 26 77 69 6b 69 29 3b 0a b_reset(&wiki);.
39d0: 20 20 20 20 7d 0a 20 20 20 20 6d 61 6e 69 66 65 }. manife
39e0: 73 74 5f 63 6c 65 61 72 28 26 6d 29 3b 0a 20 20 st_clear(&m);.
39f0: 7d 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 }. style_footer
3a00: 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 ();.}../*.** WEB
3a10: 50 41 47 45 3a 20 76 64 69 66 66 0a 2a 2a 20 55 PAGE: vdiff.** U
3a20: 52 4c 3a 20 2f 76 64 69 66 66 3f 6e 61 6d 65 3d RL: /vdiff?name=
3a30: 52 49 44 0a 2a 2a 0a 2a 2a 20 53 68 6f 77 20 61 RID.**.** Show a
3a40: 6c 6c 20 64 69 66 66 65 72 65 6e 63 65 73 20 66 ll differences f
3a50: 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 or a particular
3a60: 63 68 65 63 6b 2d 69 6e 2e 0a 2a 2f 0a 76 6f 69 check-in..*/.voi
3a70: 64 20 76 64 69 66 66 5f 70 61 67 65 28 76 6f 69 d vdiff_page(voi
3a80: 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 d){. int rid;.
3a90: 20 53 74 6d 74 20 71 3b 0a 20 20 63 68 61 72 20 Stmt q;. char
3aa0: 2a 7a 55 75 69 64 3b 0a 0a 20 20 6c 6f 67 69 6e *zUuid;.. login
3ab0: 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 _check_credentia
3ac0: 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f ls();. if( !g.o
3ad0: 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e kRead ){ login_n
3ae0: 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b eeded(); return;
3af0: 20 7d 0a 20 20 6c 6f 67 69 6e 5f 61 6e 6f 6e 79 }. login_anony
3b00: 6d 6f 75 73 5f 61 76 61 69 6c 61 62 6c 65 28 29 mous_available()
3b10: 3b 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 5f ;.. rid = name_
3b20: 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 22 to_rid(PD("name"
3b30: 2c 22 22 29 29 3b 0a 20 20 69 66 28 20 72 69 64 ,""));. if( rid
3b40: 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 ==0 ){. fossi
3b50: 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 l_redirect_home(
3b60: 29 3b 0a 20 20 7d 0a 20 20 7a 55 75 69 64 20 3d );. }. zUuid =
3b70: 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 4c db_text(0, "SEL
3b80: 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c ECT uuid FROM bl
3b90: 6f 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 ob WHERE rid=%d"
3ba0: 2c 20 72 69 64 29 3b 0a 20 20 73 74 79 6c 65 5f , rid);. style_
3bb0: 68 65 61 64 65 72 28 22 43 68 65 63 6b 2d 69 6e header("Check-in
3bc0: 20 5b 25 2e 31 30 73 5d 22 2c 20 7a 55 75 69 64 [%.10s]", zUuid
3bd0: 29 3b 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 );. db_prepare(
3be0: 26 71 2c 0a 20 20 20 20 22 53 45 4c 45 43 54 20 &q,. "SELECT
3bf0: 64 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 2c datetime(mtime),
3c00: 20 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 63 ". " c
3c10: 6f 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 63 oalesce(event.ec
3c20: 6f 6d 6d 65 6e 74 2c 65 76 65 6e 74 2e 63 6f 6d omment,event.com
3c30: 6d 65 6e 74 29 2c 22 0a 20 20 20 20 22 20 20 20 ment),". "
3c40: 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65 76 65 coalesce(eve
3c50: 6e 74 2e 65 75 73 65 72 2c 65 76 65 6e 74 2e 75 nt.euser,event.u
3c60: 73 65 72 29 22 0a 20 20 20 20 22 20 20 46 52 4f ser)". " FRO
3c70: 4d 20 65 76 65 6e 74 20 57 48 45 52 45 20 74 79 M event WHERE ty
3c80: 70 65 3d 27 63 69 27 20 41 4e 44 20 6f 62 6a 69 pe='ci' AND obji
3c90: 64 3d 25 64 22 2c 0a 20 20 20 20 72 69 64 0a 20 d=%d",. rid.
3ca0: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 62 5f );. while( db_
3cb0: 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 step(&q)==SQLITE
3cc0: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 _ROW ){. cons
3cd0: 74 20 63 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 t char *zDate =
3ce0: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
3cf0: 71 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 q, 0);. const
3d00: 20 63 68 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 char *zUser = d
3d10: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
3d20: 2c 20 32 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 2);. const
3d30: 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 6e 74 20 3d char *zComment =
3d40: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
3d50: 26 71 2c 20 31 29 3b 0a 20 20 20 20 40 20 3c 68 &q, 1);. @ <h
3d60: 32 3e 43 68 65 63 6b 2d 69 6e 20 25 73 28 7a 55 2>Check-in %s(zU
3d70: 75 69 64 29 3c 2f 68 32 3e 0a 20 20 20 20 40 20 uid)</h2>. @
3d80: 3c 70 3e 4d 61 64 65 20 62 79 0a 20 20 20 20 68 <p>Made by. h
3d90: 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 yperlink_to_user
3da0: 28 7a 55 73 65 72 2c 7a 44 61 74 65 2c 22 20 6f (zUser,zDate," o
3db0: 6e 22 29 3b 0a 20 20 20 20 68 79 70 65 72 6c 69 n");. hyperli
3dc0: 6e 6b 5f 74 6f 5f 64 61 74 65 28 7a 44 61 74 65 nk_to_date(zDate
3dd0: 2c 20 22 3a 22 29 3b 0a 20 20 20 20 40 20 25 77 , ":");. @ %w
3de0: 28 7a 43 6f 6d 6d 65 6e 74 29 2e 20 0a 20 20 20 (zComment). .
3df0: 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 if( g.okHistory
3e00: 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 61 20 68 ){. @ <a h
3e10: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
3e20: 52 4c 29 2f 63 69 2f 25 73 28 7a 55 75 69 64 29 RL)/ci/%s(zUuid)
3e30: 22 3e 5b 64 65 74 61 69 6c 73 5d 3c 2f 61 3e 0a ">[details]</a>.
3e40: 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 2f 70 3e }. @ </p>
3e50: 3c 68 72 3e 0a 20 20 7d 0a 20 20 64 62 5f 66 69 <hr>. }. db_fi
3e60: 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 64 62 nalize(&q);. db
3e70: 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 20 20 _prepare(&q,.
3e80: 20 20 22 53 45 4c 45 43 54 20 70 69 64 2c 20 66 "SELECT pid, f
3e90: 69 64 2c 20 6e 61 6d 65 22 0a 20 20 20 20 20 22 id, name". "
3ea0: 20 20 46 52 4f 4d 20 6d 6c 69 6e 6b 2c 20 66 69 FROM mlink, fi
3eb0: 6c 65 6e 61 6d 65 22 0a 20 20 20 20 20 22 20 57 lename". " W
3ec0: 48 45 52 45 20 6d 6c 69 6e 6b 2e 6d 69 64 3d 25 HERE mlink.mid=%
3ed0: 64 22 0a 20 20 20 20 20 22 20 20 20 41 4e 44 20 d". " AND
3ee0: 66 69 6c 65 6e 61 6d 65 2e 66 6e 69 64 3d 6d 6c filename.fnid=ml
3ef0: 69 6e 6b 2e 66 6e 69 64 22 0a 20 20 20 20 20 22 ink.fnid". "
3f00: 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 22 2c ORDER BY name",
3f10: 0a 20 20 20 20 20 72 69 64 0a 20 20 29 3b 0a 20 . rid. );.
3f20: 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 while( db_step(
3f30: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 &q)==SQLITE_ROW
3f40: 29 7b 0a 20 20 20 20 69 6e 74 20 70 69 64 20 3d ){. int pid =
3f50: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 db_column_int(&
3f60: 71 2c 30 29 3b 0a 20 20 20 20 69 6e 74 20 66 69 q,0);. int fi
3f70: 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e d = db_column_in
3f80: 74 28 26 71 2c 31 29 3b 0a 20 20 20 20 63 6f 6e t(&q,1);. con
3f90: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d st char *zName =
3fa0: 20 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 db_column_text(
3fb0: 26 71 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 67 &q,2);. if( g
3fc0: 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 .okHistory ){.
3fd0: 20 20 20 20 40 20 3c 70 3e 3c 61 20 68 72 65 66 @ <p><a href
3fe0: 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 52 4c 29 ="%s(g.zBaseURL)
3ff0: 2f 66 69 6e 66 6f 3f 6e 61 6d 65 3d 25 54 28 7a /finfo?name=%T(z
4000: 4e 61 6d 65 29 22 3e 25 68 28 7a 4e 61 6d 65 29 Name)">%h(zName)
4010: 3c 2f 61 3e 3c 2f 70 3e 0a 20 20 20 20 7d 65 6c </a></p>. }el
4020: 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 70 3e 25 se{. @ <p>%
4030: 68 28 7a 4e 61 6d 65 29 3c 2f 70 3e 0a 20 20 20 h(zName)</p>.
4040: 20 7d 0a 20 20 20 20 40 20 3c 62 6c 6f 63 6b 71 }. @ <blockq
4050: 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 61 uote><pre>. a
4060: 70 70 65 6e 64 5f 64 69 66 66 28 70 69 64 2c 20 ppend_diff(pid,
4070: 66 69 64 29 3b 0a 20 20 20 20 40 20 3c 2f 70 72 fid);. @ </pr
4080: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a e></blockquote>.
4090: 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a }. db_finaliz
40a0: 65 28 26 71 29 3b 0a 20 20 73 74 79 6c 65 5f 66 e(&q);. style_f
40b0: 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a ooter();.}../*.*
40c0: 2a 20 57 72 69 74 65 20 61 20 64 65 73 63 72 69 * Write a descri
40d0: 70 74 69 6f 6e 20 6f 66 20 61 6e 20 6f 62 6a 65 ption of an obje
40e0: 63 74 20 74 6f 20 74 68 65 20 77 77 77 20 72 65 ct to the www re
40f0: 70 6c 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 ply..**.** If th
4100: 65 20 6f 62 6a 65 63 74 20 69 73 20 61 20 66 69 e object is a fi
4110: 6c 65 20 74 68 65 6e 20 6d 65 6e 74 69 6f 6e 3a le then mention:
4120: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 49 74 27 .**.** * It'
4130: 73 20 61 72 74 69 66 61 63 74 20 49 44 0a 2a 2a s artifact ID.**
4140: 20 20 20 20 20 2a 20 41 6c 6c 20 69 74 73 20 66 * All its f
4150: 69 6c 65 6e 61 6d 65 73 0a 2a 2a 20 20 20 20 20 ilenames.**
4160: 2a 20 54 68 65 20 63 68 65 63 6b 2d 69 6e 20 69 * The check-in i
4170: 74 20 77 61 73 20 70 61 72 74 20 6f 66 2c 20 77 t was part of, w
4180: 69 74 68 20 74 69 6d 65 73 20 61 6e 64 20 75 73 ith times and us
4190: 65 72 73 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 ers.**.** If the
41a0: 20 6f 62 6a 65 63 74 20 69 73 20 61 20 6d 61 6e object is a man
41b0: 69 66 65 73 74 2c 20 74 68 65 6e 20 6d 65 6e 74 ifest, then ment
41c0: 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a ion:.**.** *
41d0: 20 49 74 27 73 20 61 72 74 69 66 61 63 74 20 49 It's artifact I
41e0: 44 0a 2a 2a 20 20 20 20 20 2a 20 64 61 74 65 20 D.** * date
41f0: 6f 66 20 63 68 65 63 6b 2d 69 6e 0a 2a 2a 20 20 of check-in.**
4200: 20 20 20 2a 20 43 6f 6d 6d 65 6e 74 20 26 20 75 * Comment & u
4210: 73 65 72 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f ser.*/.static vo
4220: 69 64 20 6f 62 6a 65 63 74 5f 64 65 73 63 72 69 id object_descri
4230: 70 74 69 6f 6e 28 0a 20 20 69 6e 74 20 72 69 64 ption(. int rid
4240: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,
4250: 20 20 2f 2a 20 54 68 65 20 61 72 74 69 66 61 63 /* The artifac
4260: 74 20 49 44 20 2a 2f 0a 20 20 69 6e 74 20 6c 69 t ID */. int li
4270: 6e 6b 54 6f 56 69 65 77 2c 20 20 20 20 20 20 20 nkToView,
4280: 20 20 20 2f 2a 20 41 64 64 20 76 69 65 77 65 72 /* Add viewer
4290: 20 6c 69 6e 6b 20 69 66 20 74 72 75 65 20 2a 2f link if true */
42a0: 0a 20 20 42 6c 6f 62 20 2a 70 44 6f 77 6e 6c 6f . Blob *pDownlo
42b0: 61 64 4e 61 6d 65 20 20 20 20 20 20 2f 2a 20 46 adName /* F
42c0: 69 6c 6c 20 77 69 74 68 20 61 6e 20 61 70 70 72 ill with an appr
42d0: 6f 70 72 69 61 74 65 20 64 6f 77 6e 6c 6f 61 64 opriate download
42e0: 20 6e 61 6d 65 20 2a 2f 0a 29 7b 0a 20 20 53 74 name */.){. St
42f0: 6d 74 20 71 3b 0a 20 20 69 6e 74 20 63 6e 74 20 mt q;. int cnt
4300: 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 57 69 6b 69 = 0;. int nWiki
4310: 20 3d 20 30 3b 0a 20 20 64 62 5f 70 72 65 70 61 = 0;. db_prepa
4320: 72 65 28 26 71 2c 0a 20 20 20 20 22 53 45 4c 45 re(&q,. "SELE
4330: 43 54 20 66 69 6c 65 6e 61 6d 65 2e 6e 61 6d 65 CT filename.name
4340: 2c 20 64 61 74 65 74 69 6d 65 28 65 76 65 6e 74 , datetime(event
4350: 2e 6d 74 69 6d 65 29 2c 22 0a 20 20 20 20 22 20 .mtime),". "
4360: 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65 coalesce(e
4370: 76 65 6e 74 2e 65 63 6f 6d 6d 65 6e 74 2c 65 76 vent.ecomment,ev
4380: 65 6e 74 2e 63 6f 6d 6d 65 6e 74 29 2c 22 0a 20 ent.comment),".
4390: 20 20 20 22 20 20 20 20 20 20 20 63 6f 61 6c 65 " coale
43a0: 73 63 65 28 65 76 65 6e 74 2e 65 75 73 65 72 2c sce(event.euser,
43b0: 65 76 65 6e 74 2e 75 73 65 72 29 2c 22 0a 20 20 event.user),".
43c0: 20 20 22 20 20 20 20 20 20 20 62 2e 75 75 69 64 " b.uuid
43d0: 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20 6d 6c ". " FROM ml
43e0: 69 6e 6b 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 65 ink, filename, e
43f0: 76 65 6e 74 2c 20 62 6c 6f 62 20 61 2c 20 62 6c vent, blob a, bl
4400: 6f 62 20 62 22 0a 20 20 20 20 22 20 57 48 45 52 ob b". " WHER
4410: 45 20 66 69 6c 65 6e 61 6d 65 2e 66 6e 69 64 3d E filename.fnid=
4420: 6d 6c 69 6e 6b 2e 66 6e 69 64 22 0a 20 20 20 20 mlink.fnid".
4430: 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 " AND event.ob
4440: 6a 69 64 3d 6d 6c 69 6e 6b 2e 6d 69 64 22 0a 20 jid=mlink.mid".
4450: 20 20 20 22 20 20 20 41 4e 44 20 61 2e 72 69 64 " AND a.rid
4460: 3d 6d 6c 69 6e 6b 2e 66 69 64 22 0a 20 20 20 20 =mlink.fid".
4470: 22 20 20 20 41 4e 44 20 62 2e 72 69 64 3d 6d 6c " AND b.rid=ml
4480: 69 6e 6b 2e 6d 69 64 22 0a 20 20 20 20 22 20 20 ink.mid". "
4490: 20 41 4e 44 20 6d 6c 69 6e 6b 2e 66 69 64 3d 25 AND mlink.fid=%
44a0: 64 22 2c 0a 20 20 20 20 72 69 64 0a 20 20 29 3b d",. rid. );
44b0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 . while( db_ste
44c0: 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f p(&q)==SQLITE_RO
44d0: 57 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 W ){. const c
44e0: 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 64 62 5f har *zName = db_
44f0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
4500: 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 0);. const ch
4510: 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 ar *zDate = db_c
4520: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 olumn_text(&q, 1
4530: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 );. const cha
4540: 72 20 2a 7a 43 6f 6d 20 3d 20 64 62 5f 63 6f 6c r *zCom = db_col
4550: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 29 3b umn_text(&q, 2);
4560: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
4570: 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c 75 *zUser = db_colu
4580: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 3b 0a mn_text(&q, 3);.
4590: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
45a0: 7a 56 65 72 73 20 3d 20 64 62 5f 63 6f 6c 75 6d zVers = db_colum
45b0: 6e 5f 74 65 78 74 28 26 71 2c 20 34 29 3b 0a 20 n_text(&q, 4);.
45c0: 20 20 20 69 66 28 20 63 6e 74 3e 30 20 29 7b 0a if( cnt>0 ){.
45d0: 20 20 20 20 20 20 40 20 41 6c 73 6f 20 66 69 6c @ Also fil
45e0: 65 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 e. }else{.
45f0: 20 20 20 40 20 46 69 6c 65 0a 20 20 20 20 7d 0a @ File. }.
4600: 20 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 if( g.okHist
4610: 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 40 20 3c ory ){. @ <
4620: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
4630: 73 65 55 52 4c 29 2f 66 69 6e 66 6f 3f 6e 61 6d seURL)/finfo?nam
4640: 65 3d 25 54 28 7a 4e 61 6d 65 29 22 3e 25 68 28 e=%T(zName)">%h(
4650: 7a 4e 61 6d 65 29 3c 2f 61 3e 0a 20 20 20 20 7d zName)</a>. }
4660: 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 25 68 else{. @ %h
4670: 28 7a 4e 61 6d 65 29 0a 20 20 20 20 7d 0a 20 20 (zName). }.
4680: 20 20 40 20 70 61 72 74 20 6f 66 20 63 68 65 63 @ part of chec
4690: 6b 2d 69 6e 0a 20 20 20 20 68 79 70 65 72 6c 69 k-in. hyperli
46a0: 6e 6b 5f 74 6f 5f 75 75 69 64 28 7a 56 65 72 73 nk_to_uuid(zVers
46b0: 29 3b 0a 20 20 20 20 40 20 2d 20 25 77 28 7a 43 );. @ - %w(zC
46c0: 6f 6d 29 20 62 79 20 0a 20 20 20 20 68 79 70 65 om) by . hype
46d0: 72 6c 69 6e 6b 5f 74 6f 5f 75 73 65 72 28 7a 55 rlink_to_user(zU
46e0: 73 65 72 2c 7a 44 61 74 65 2c 22 20 6f 6e 22 29 ser,zDate," on")
46f0: 3b 0a 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f ;. hyperlink_
4700: 74 6f 5f 64 61 74 65 28 7a 44 61 74 65 2c 22 2e to_date(zDate,".
4710: 22 29 3b 0a 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 ");. cnt++;.
4720: 20 20 20 69 66 28 20 70 44 6f 77 6e 6c 6f 61 64 if( pDownload
4730: 4e 61 6d 65 20 26 26 20 62 6c 6f 62 5f 73 69 7a Name && blob_siz
4740: 65 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 e(pDownloadName)
4750: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f ==0 ){. blo
4760: 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 6e 6c 6f b_append(pDownlo
4770: 61 64 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 2d adName, zName, -
4780: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 1);. }. }.
4790: 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b db_finalize(&q);
47a0: 0a 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 . db_prepare(&q
47b0: 2c 20 0a 20 20 20 20 22 53 45 4c 45 43 54 20 73 , . "SELECT s
47c0: 75 62 73 74 72 28 74 61 67 6e 61 6d 65 2c 20 36 ubstr(tagname, 6
47d0: 2c 20 31 30 30 30 30 29 2c 20 64 61 74 65 74 69 , 10000), dateti
47e0: 6d 65 28 65 76 65 6e 74 2e 6d 74 69 6d 65 29 2c me(event.mtime),
47f0: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 63 6f ". " co
4800: 61 6c 65 73 63 65 28 65 76 65 6e 74 2e 65 75 73 alesce(event.eus
4810: 65 72 2c 20 65 76 65 6e 74 2e 75 73 65 72 29 22 er, event.user)"
4820: 0a 20 20 20 20 22 20 20 46 52 4f 4d 20 74 61 67 . " FROM tag
4830: 78 72 65 66 2c 20 74 61 67 2c 20 65 76 65 6e 74 xref, tag, event
4840: 22 0a 20 20 20 20 22 20 57 48 45 52 45 20 74 61 ". " WHERE ta
4850: 67 78 72 65 66 2e 72 69 64 3d 25 64 22 0a 20 20 gxref.rid=%d".
4860: 20 20 22 20 20 20 41 4e 44 20 74 61 67 2e 74 61 " AND tag.ta
4870: 67 69 64 3d 74 61 67 78 72 65 66 2e 74 61 67 69 gid=tagxref.tagi
4880: 64 22 20 0a 20 20 20 20 22 20 20 20 41 4e 44 20 d" . " AND
4890: 74 61 67 2e 74 61 67 6e 61 6d 65 20 4c 49 4b 45 tag.tagname LIKE
48a0: 20 27 77 69 6b 69 2d 25 25 27 22 0a 20 20 20 20 'wiki-%%'".
48b0: 22 20 20 20 41 4e 44 20 65 76 65 6e 74 2e 6f 62 " AND event.ob
48c0: 6a 69 64 3d 74 61 67 78 72 65 66 2e 72 69 64 22 jid=tagxref.rid"
48d0: 2c 0a 20 20 20 20 72 69 64 0a 20 20 29 3b 0a 20 ,. rid. );.
48e0: 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 while( db_step(
48f0: 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 &q)==SQLITE_ROW
4900: 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 ){. const cha
4910: 72 20 2a 7a 50 61 67 65 6e 61 6d 65 20 3d 20 64 r *zPagename = d
4920: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
4930: 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 , 0);. const
4940: 63 68 61 72 20 2a 7a 44 61 74 65 20 3d 20 64 62 char *zDate = db
4950: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c _column_text(&q,
4960: 20 31 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 1);. const c
4970: 68 61 72 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f har *zUser = db_
4980: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
4990: 32 29 3b 0a 20 20 20 20 69 66 28 20 63 6e 74 3e 2);. if( cnt>
49a0: 30 20 29 7b 0a 20 20 20 20 20 20 40 20 41 6c 73 0 ){. @ Als
49b0: 6f 20 77 69 6b 69 20 70 61 67 65 0a 20 20 20 20 o wiki page.
49c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 57 }else{. @ W
49d0: 69 6b 69 20 70 61 67 65 0a 20 20 20 20 7d 0a 20 iki page. }.
49e0: 20 20 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f if( g.okHisto
49f0: 72 79 20 29 7b 0a 20 20 20 20 20 20 40 20 5b 3c ry ){. @ [<
4a00: 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 a href="%s(g.zBa
4a10: 73 65 55 52 4c 29 2f 77 69 6b 69 3f 6e 61 6d 65 seURL)/wiki?name
4a20: 3d 25 74 28 7a 50 61 67 65 6e 61 6d 65 29 22 3e =%t(zPagename)">
4a30: 25 68 28 7a 50 61 67 65 6e 61 6d 65 29 3c 2f 61 %h(zPagename)</a
4a40: 3e 5d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 >]. }else{.
4a50: 20 20 20 20 40 20 5b 25 68 28 7a 50 61 67 65 6e @ [%h(zPagen
4a60: 61 6d 65 29 5d 0a 20 20 20 20 7d 0a 20 20 20 20 ame)]. }.
4a70: 40 20 62 79 0a 20 20 20 20 68 79 70 65 72 6c 69 @ by. hyperli
4a80: 6e 6b 5f 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 nk_to_user(zUser
4a90: 2c 7a 44 61 74 65 2c 22 20 6f 6e 22 29 3b 0a 20 ,zDate," on");.
4aa0: 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f hyperlink_to_
4ab0: 64 61 74 65 28 7a 44 61 74 65 2c 22 2e 22 29 3b date(zDate,".");
4ac0: 0a 20 20 20 20 6e 57 69 6b 69 2b 2b 3b 0a 20 20 . nWiki++;.
4ad0: 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 69 66 28 cnt++;. if(
4ae0: 20 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 26 pDownloadName &
4af0: 26 20 62 6c 6f 62 5f 73 69 7a 65 28 70 44 6f 77 & blob_size(pDow
4b00: 6e 6c 6f 61 64 4e 61 6d 65 29 3d 3d 30 20 29 7b nloadName)==0 ){
4b10: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
4b20: 6e 64 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 nd(pDownloadName
4b30: 2c 20 7a 50 61 67 65 6e 61 6d 65 2c 20 2d 31 29 , zPagename, -1)
4b40: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62 ;. }. }. db
4b50: 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 _finalize(&q);.
4b60: 20 69 66 28 20 6e 57 69 6b 69 3d 3d 30 20 29 7b if( nWiki==0 ){
4b70: 0a 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 . db_prepare(
4b80: 26 71 2c 0a 20 20 20 20 20 20 22 53 45 4c 45 43 &q,. "SELEC
4b90: 54 20 64 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 T datetime(mtime
4ba0: 29 2c 20 75 73 65 72 2c 20 63 6f 6d 6d 65 6e 74 ), user, comment
4bb0: 2c 20 74 79 70 65 2c 20 75 75 69 64 22 0a 20 20 , type, uuid".
4bc0: 20 20 20 20 22 20 20 46 52 4f 4d 20 65 76 65 6e " FROM even
4bd0: 74 2c 20 62 6c 6f 62 22 0a 20 20 20 20 20 20 22 t, blob". "
4be0: 20 57 48 45 52 45 20 65 76 65 6e 74 2e 6f 62 6a WHERE event.obj
4bf0: 69 64 3d 25 64 22 0a 20 20 20 20 20 20 22 20 20 id=%d". "
4c00: 20 41 4e 44 20 62 6c 6f 62 2e 72 69 64 3d 25 64 AND blob.rid=%d
4c10: 22 2c 0a 20 20 20 20 20 20 72 69 64 2c 20 72 69 ",. rid, ri
4c20: 64 0a 20 20 20 20 29 3b 0a 20 20 20 20 77 68 69 d. );. whi
4c30: 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 29 3d le( db_step(&q)=
4c40: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 =SQLITE_ROW ){.
4c50: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 const char
4c60: 2a 7a 44 61 74 65 20 3d 20 64 62 5f 63 6f 6c 75 *zDate = db_colu
4c70: 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b 0a mn_text(&q, 0);.
4c80: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 const char
4c90: 20 2a 7a 55 73 65 72 20 3d 20 64 62 5f 63 6f 6c *zUser = db_col
4ca0: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b umn_text(&q, 1);
4cb0: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 . const cha
4cc0: 72 20 2a 7a 43 6f 6d 20 3d 20 64 62 5f 63 6f 6c r *zCom = db_col
4cd0: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 32 29 3b umn_text(&q, 2);
4ce0: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 . const cha
4cf0: 72 20 2a 7a 54 79 70 65 20 3d 20 64 62 5f 63 6f r *zType = db_co
4d00: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 33 29 lumn_text(&q, 3)
4d10: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 ;. const ch
4d20: 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f 63 ar *zUuid = db_c
4d30: 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 34 olumn_text(&q, 4
4d40: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63 6e 74 );. if( cnt
4d50: 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 >0 ){. @
4d60: 41 6c 73 6f 0a 20 20 20 20 20 20 7d 0a 20 20 20 Also. }.
4d70: 20 20 20 69 66 28 20 7a 54 79 70 65 5b 30 5d 3d if( zType[0]=
4d80: 3d 27 77 27 20 29 7b 0a 20 20 20 20 20 20 20 20 ='w' ){.
4d90: 40 20 57 69 6b 69 20 65 64 69 74 0a 20 20 20 20 @ Wiki edit.
4da0: 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 54 79 70 }else if( zTyp
4db0: 65 5b 30 5d 3d 3d 27 74 27 20 29 7b 0a 20 20 20 e[0]=='t' ){.
4dc0: 20 20 20 20 20 40 20 54 69 63 6b 65 74 20 63 68 @ Ticket ch
4dd0: 61 6e 67 65 0a 20 20 20 20 20 20 7d 65 6c 73 65 ange. }else
4de0: 20 69 66 28 20 7a 54 79 70 65 5b 30 5d 3d 3d 27 if( zType[0]=='
4df0: 63 27 20 29 7b 0a 20 20 20 20 20 20 20 20 40 20 c' ){. @
4e00: 4d 61 6e 69 66 65 73 74 20 6f 66 20 63 68 65 63 Manifest of chec
4e10: 6b 2d 69 6e 0a 20 20 20 20 20 20 7d 65 6c 73 65 k-in. }else
4e20: 7b 0a 20 20 20 20 20 20 20 20 40 20 43 6f 6e 74 {. @ Cont
4e30: 72 6f 6c 20 66 69 6c 65 20 72 65 66 65 72 65 6e rol file referen
4e40: 63 69 6e 67 0a 20 20 20 20 20 20 7d 0a 20 20 20 cing. }.
4e50: 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 6f 5f hyperlink_to_
4e60: 75 75 69 64 28 7a 55 75 69 64 29 3b 0a 20 20 20 uuid(zUuid);.
4e70: 20 20 20 40 20 2d 20 25 77 28 7a 43 6f 6d 29 20 @ - %w(zCom)
4e80: 62 79 0a 20 20 20 20 20 20 68 79 70 65 72 6c 69 by. hyperli
4e90: 6e 6b 5f 74 6f 5f 75 73 65 72 28 7a 55 73 65 72 nk_to_user(zUser
4ea0: 2c 7a 44 61 74 65 2c 22 20 6f 6e 22 29 3b 0a 20 ,zDate," on");.
4eb0: 20 20 20 20 20 68 79 70 65 72 6c 69 6e 6b 5f 74 hyperlink_t
4ec0: 6f 5f 64 61 74 65 28 7a 44 61 74 65 2c 20 22 2e o_date(zDate, ".
4ed0: 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 ");. if( pD
4ee0: 6f 77 6e 6c 6f 61 64 4e 61 6d 65 20 26 26 20 62 ownloadName && b
4ef0: 6c 6f 62 5f 73 69 7a 65 28 70 44 6f 77 6e 6c 6f lob_size(pDownlo
4f00: 61 64 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 adName)==0 ){.
4f10: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
4f20: 64 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 6d 65 2c d(pDownloadName,
4f30: 20 7a 55 75 69 64 2c 20 2d 31 29 3b 0a 20 20 20 zUuid, -1);.
4f40: 20 20 20 7d 0a 20 20 20 20 20 20 63 6e 74 2b 2b }. cnt++
4f50: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 5f 66 ;. }. db_f
4f60: 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 7d inalize(&q);. }
4f70: 0a 20 20 69 66 28 20 63 6e 74 3d 3d 30 20 29 7b . if( cnt==0 ){
4f80: 0a 20 20 20 20 63 68 61 72 20 2a 7a 55 75 69 64 . char *zUuid
4f90: 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 = db_text(0, "S
4fa0: 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 ELECT uuid FROM
4fb0: 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d 25 blob WHERE rid=%
4fc0: 64 22 2c 20 72 69 64 29 3b 0a 20 20 20 20 40 20 d", rid);. @
4fd0: 43 6f 6e 74 72 6f 6c 20 61 72 74 69 66 61 63 74 Control artifact
4fe0: 2e 0a 20 20 20 20 69 66 28 20 70 44 6f 77 6e 6c .. if( pDownl
4ff0: 6f 61 64 4e 61 6d 65 20 26 26 20 62 6c 6f 62 5f oadName && blob_
5000: 73 69 7a 65 28 70 44 6f 77 6e 6c 6f 61 64 4e 61 size(pDownloadNa
5010: 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 me)==0 ){.
5020: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 44 6f 77 blob_append(pDow
5030: 6e 6c 6f 61 64 4e 61 6d 65 2c 20 7a 55 75 69 64 nloadName, zUuid
5040: 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d , -1);. }. }
5050: 65 6c 73 65 20 69 66 28 20 6c 69 6e 6b 54 6f 56 else if( linkToV
5060: 69 65 77 20 26 26 20 67 2e 6f 6b 48 69 73 74 6f iew && g.okHisto
5070: 72 79 20 29 7b 0a 20 20 20 20 40 20 3c 61 20 68 ry ){. @ <a h
5080: 72 65 66 3d 22 25 73 28 67 2e 7a 42 61 73 65 55 ref="%s(g.zBaseU
5090: 52 4c 29 2f 61 72 74 69 66 61 63 74 2f 25 64 28 RL)/artifact/%d(
50a0: 72 69 64 29 22 3e 5b 76 69 65 77 5d 3c 2f 61 3e rid)">[view]</a>
50b0: 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 . }.}.../*.** W
50c0: 45 42 50 41 47 45 3a 20 66 64 69 66 66 0a 2a 2a EBPAGE: fdiff.**
50d0: 0a 2a 2a 20 54 77 6f 20 61 72 67 75 6d 65 6e 74 .** Two argument
50e0: 73 2c 20 76 31 20 61 6e 64 20 76 32 2c 20 61 72 s, v1 and v2, ar
50f0: 65 20 69 6e 74 65 67 65 72 73 2e 20 20 53 68 6f e integers. Sho
5100: 77 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 w the difference
5110: 20 62 65 74 77 65 65 6e 0a 2a 2a 20 74 68 65 20 between.** the
5120: 74 77 6f 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a two records..*/.
5130: 76 6f 69 64 20 64 69 66 66 5f 70 61 67 65 28 76 void diff_page(v
5140: 6f 69 64 29 7b 0a 20 20 69 6e 74 20 76 31 20 3d oid){. int v1 =
5150: 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 28 name_to_rid(PD(
5160: 22 76 31 22 2c 22 30 22 29 29 3b 0a 20 20 69 6e "v1","0"));. in
5170: 74 20 76 32 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 t v2 = name_to_r
5180: 69 64 28 50 44 28 22 76 32 22 2c 22 30 22 29 29 id(PD("v2","0"))
5190: 3b 0a 20 20 42 6c 6f 62 20 63 31 2c 20 63 32 2c ;. Blob c1, c2,
51a0: 20 64 69 66 66 3b 0a 0a 20 20 6c 6f 67 69 6e 5f diff;.. login_
51b0: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c check_credential
51c0: 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b s();. if( !g.ok
51d0: 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 Read ){ login_ne
51e0: 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 eded(); return;
51f0: 7d 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 }. style_header
5200: 28 22 44 69 66 66 22 29 3b 0a 20 20 40 20 3c 68 ("Diff");. @ <h
5210: 32 3e 44 69 66 66 65 72 65 6e 63 65 73 20 46 72 2>Differences Fr
5220: 6f 6d 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 6c om:</h2>. @ <bl
5230: 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 6f 62 6a 65 ockquote>. obje
5240: 63 74 5f 64 65 73 63 72 69 70 74 69 6f 6e 28 76 ct_description(v
5250: 31 2c 20 31 2c 20 30 29 3b 0a 20 20 40 20 3c 2f 1, 1, 0);. @ </
5260: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 20 blockquote>. @
5270: 3c 68 32 3e 54 6f 3a 3c 2f 68 32 3e 0a 20 20 40 <h2>To:</h2>. @
5280: 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 <blockquote>.
5290: 6f 62 6a 65 63 74 5f 64 65 73 63 72 69 70 74 69 object_descripti
52a0: 6f 6e 28 76 32 2c 20 31 2c 20 30 29 3b 0a 20 20 on(v2, 1, 0);.
52b0: 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a @ </blockquote>.
52c0: 20 20 40 20 3c 68 72 3e 0a 20 20 40 20 3c 62 6c @ <hr>. @ <bl
52d0: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 ockquote><pre>.
52e0: 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 76 31 2c content_get(v1,
52f0: 20 26 63 31 29 3b 0a 20 20 63 6f 6e 74 65 6e 74 &c1);. content
5300: 5f 67 65 74 28 76 32 2c 20 26 63 32 29 3b 0a 20 _get(v2, &c2);.
5310: 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 64 69 66 66 blob_zero(&diff
5320: 29 3b 0a 20 20 74 65 78 74 5f 64 69 66 66 28 26 );. text_diff(&
5330: 63 31 2c 20 26 63 32 2c 20 26 64 69 66 66 2c 20 c1, &c2, &diff,
5340: 34 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 74 4);. blob_reset
5350: 28 26 63 31 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 (&c1);. blob_re
5360: 73 65 74 28 26 63 32 29 3b 0a 20 20 40 20 25 68 set(&c2);. @ %h
5370: 28 62 6c 6f 62 5f 73 74 72 28 26 64 69 66 66 29 (blob_str(&diff)
5380: 29 0a 20 20 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c ). @ </pre></bl
5390: 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 62 6c 6f 62 ockquote>. blob
53a0: 5f 72 65 73 65 74 28 26 64 69 66 66 29 3b 0a 20 _reset(&diff);.
53b0: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b style_footer();
53c0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 .}../*.** WEBPAG
53d0: 45 3a 20 72 61 77 0a 2a 2a 20 55 52 4c 3a 20 2f E: raw.** URL: /
53e0: 72 61 77 3f 6e 61 6d 65 3d 41 52 54 49 46 41 43 raw?name=ARTIFAC
53f0: 54 49 44 26 6d 3d 54 59 50 45 0a 2a 2a 20 0a 2a TID&m=TYPE.** .*
5400: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 75 6e 69 * Return the uni
5410: 6e 74 65 72 70 72 65 74 65 64 20 63 6f 6e 74 65 nterpreted conte
5420: 6e 74 20 6f 66 20 61 6e 20 61 72 74 69 66 61 63 nt of an artifac
5430: 74 2e 20 20 55 73 65 64 20 70 72 69 6d 61 72 69 t. Used primari
5440: 6c 79 0a 2a 2a 20 74 6f 20 76 69 65 77 20 61 72 ly.** to view ar
5450: 74 69 66 61 63 74 73 20 74 68 61 74 20 61 72 65 tifacts that are
5460: 20 69 6d 61 67 65 73 2e 0a 2a 2f 0a 76 6f 69 64 images..*/.void
5470: 20 72 61 77 61 72 74 69 66 61 63 74 5f 70 61 67 rawartifact_pag
5480: 65 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 e(void){. int r
5490: 69 64 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 id;. const char
54a0: 20 2a 7a 4d 69 6d 65 3b 0a 20 20 42 6c 6f 62 20 *zMime;. Blob
54b0: 63 6f 6e 74 65 6e 74 3b 0a 0a 20 20 72 69 64 20 content;.. rid
54c0: 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 = name_to_rid(PD
54d0: 28 22 6e 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 ("name","0"));.
54e0: 20 7a 4d 69 6d 65 20 3d 20 50 44 28 22 6d 22 2c zMime = PD("m",
54f0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 66 "application/x-f
5500: 6f 73 73 69 6c 2d 61 72 74 69 66 61 63 74 22 29 ossil-artifact")
5510: 3b 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f ;. login_check_
5520: 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 credentials();.
5530: 20 69 66 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 if( !g.okRead )
5540: 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 { login_needed()
5550: 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 69 66 ; return; }. if
5560: 28 20 72 69 64 3d 3d 30 20 29 7b 20 63 67 69 5f ( rid==0 ){ cgi_
5570: 72 65 64 69 72 65 63 74 28 22 2f 68 6f 6d 65 22 redirect("/home"
5580: 29 3b 20 7d 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 ); }. content_g
5590: 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 et(rid, &content
55a0: 29 3b 0a 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e );. cgi_set_con
55b0: 74 65 6e 74 5f 74 79 70 65 28 7a 4d 69 6d 65 29 tent_type(zMime)
55c0: 3b 0a 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 ;. cgi_set_cont
55d0: 65 6e 74 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 7d ent(&content);.}
55e0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 61 ../*.** Render a
55f0: 20 68 65 78 20 64 75 6d 70 20 6f 66 20 61 20 66 hex dump of a f
5600: 69 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 ile..*/.static v
5610: 6f 69 64 20 68 65 78 64 75 6d 70 28 42 6c 6f 62 oid hexdump(Blob
5620: 20 2a 70 42 6c 6f 62 29 7b 0a 20 20 63 6f 6e 73 *pBlob){. cons
5630: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 t unsigned char
5640: 2a 78 3b 0a 20 20 69 6e 74 20 6e 2c 20 69 2c 20 *x;. int n, i,
5650: 6a 2c 20 6b 3b 0a 20 20 63 68 61 72 20 7a 4c 69 j, k;. char zLi
5660: 6e 65 5b 31 30 30 5d 3b 0a 20 20 73 74 61 74 69 ne[100];. stati
5670: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 48 65 c const char zHe
5680: 78 5b 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 x[] = "012345678
5690: 39 61 62 63 64 65 66 22 3b 0a 0a 20 20 78 20 3d 9abcdef";.. x =
56a0: 20 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 (const unsigned
56b0: 20 63 68 61 72 2a 29 62 6c 6f 62 5f 62 75 66 66 char*)blob_buff
56c0: 65 72 28 70 42 6c 6f 62 29 3b 0a 20 20 6e 20 3d er(pBlob);. n =
56d0: 20 62 6c 6f 62 5f 73 69 7a 65 28 70 42 6c 6f 62 blob_size(pBlob
56e0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c );. for(i=0; i<
56f0: 6e 3b 20 69 2b 3d 31 36 29 7b 0a 20 20 20 20 6a n; i+=16){. j
5700: 20 3d 20 30 3b 0a 20 20 20 20 7a 4c 69 6e 65 5b = 0;. zLine[
5710: 30 5d 20 3d 20 7a 48 65 78 5b 28 69 3e 3e 32 34 0] = zHex[(i>>24
5720: 29 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e )&0xf];. zLin
5730: 65 5b 31 5d 20 3d 20 7a 48 65 78 5b 28 69 3e 3e e[1] = zHex[(i>>
5740: 31 36 29 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 16)&0xf];. zL
5750: 69 6e 65 5b 32 5d 20 3d 20 7a 48 65 78 5b 28 69 ine[2] = zHex[(i
5760: 3e 3e 38 29 26 30 78 66 5d 3b 0a 20 20 20 20 7a >>8)&0xf];. z
5770: 4c 69 6e 65 5b 33 5d 20 3d 20 7a 48 65 78 5b 69 Line[3] = zHex[i
5780: 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4c 69 6e 65 &0xf];. zLine
5790: 5b 34 5d 20 3d 20 27 3a 27 3b 0a 20 20 20 20 73 [4] = ':';. s
57a0: 70 72 69 6e 74 66 28 7a 4c 69 6e 65 2c 20 22 25 printf(zLine, "%
57b0: 30 34 78 3a 20 22 2c 20 69 29 3b 0a 20 20 20 20 04x: ", i);.
57c0: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 36 3b 20 6a for(j=0; j<16; j
57d0: 2b 2b 29 7b 0a 20 20 20 20 20 20 6b 20 3d 20 35 ++){. k = 5
57e0: 2b 6a 2a 33 3b 0a 20 20 20 20 20 20 7a 4c 69 6e +j*3;. zLin
57f0: 65 5b 6b 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 e[k] = ' ';.
5800: 20 20 69 66 28 20 69 2b 6a 3c 6e 20 29 7b 0a 20 if( i+j<n ){.
5810: 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 unsigned
5820: 63 68 61 72 20 63 20 3d 20 78 5b 69 2b 6a 5d 3b char c = x[i+j];
5830: 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b . zLine[k
5840: 2b 31 5d 20 3d 20 7a 48 65 78 5b 63 3e 3e 34 5d +1] = zHex[c>>4]
5850: 3b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b ;. zLine[
5860: 6b 2b 32 5d 20 3d 20 7a 48 65 78 5b 63 26 30 78 k+2] = zHex[c&0x
5870: 66 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b f];. }else{
5880: 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b . zLine[k
5890: 2b 31 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 +1] = ' ';.
58a0: 20 20 20 7a 4c 69 6e 65 5b 6b 2b 32 5d 20 3d 20 zLine[k+2] =
58b0: 27 20 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 ' ';. }.
58c0: 20 7d 0a 20 20 20 20 7a 4c 69 6e 65 5b 35 33 5d }. zLine[53]
58d0: 20 3d 20 27 20 27 3b 0a 20 20 20 20 7a 4c 69 6e = ' ';. zLin
58e0: 65 5b 35 34 5d 20 3d 20 27 20 27 3b 0a 20 20 20 e[54] = ' ';.
58f0: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 36 3b 20 for(j=0; j<16;
5900: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 6b 20 3d 20 j++){. k =
5910: 6a 2b 35 35 3b 0a 20 20 20 20 20 20 69 66 28 20 j+55;. if(
5920: 69 2b 6a 3c 6e 20 29 7b 0a 20 20 20 20 20 20 20 i+j<n ){.
5930: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 unsigned char c
5940: 20 3d 20 78 5b 69 2b 6a 5d 3b 0a 20 20 20 20 20 = x[i+j];.
5950: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 if( c>=0x20 &
5960: 26 20 63 3c 3d 30 78 37 65 20 29 7b 0a 20 20 20 & c<=0x7e ){.
5970: 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6b 5d 20 zLine[k]
5980: 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c = c;. }el
5990: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 4c se{. zL
59a0: 69 6e 65 5b 6b 5d 20 3d 20 27 2e 27 3b 0a 20 20 ine[k] = '.';.
59b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 }. }e
59c0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 lse{. zLi
59d0: 6e 65 5b 6b 5d 20 3d 20 30 3b 0a 20 20 20 20 20 ne[k] = 0;.
59e0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 4c 69 }. }. zLi
59f0: 6e 65 5b 37 31 5d 20 3d 20 30 3b 0a 20 20 20 20 ne[71] = 0;.
5a00: 40 20 25 68 28 7a 4c 69 6e 65 29 0a 20 20 7d 0a @ %h(zLine). }.
5a10: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 }../*.** WEBPAGE
5a20: 3a 20 68 65 78 64 75 6d 70 0a 2a 2a 20 55 52 4c : hexdump.** URL
5a30: 3a 20 2f 68 65 78 64 75 6d 70 3f 6e 61 6d 65 3d : /hexdump?name=
5a40: 41 52 54 49 46 41 43 54 49 44 0a 2a 2a 20 0a 2a ARTIFACTID.** .*
5a50: 2a 20 53 68 6f 77 20 74 68 65 20 63 6f 6d 70 6c * Show the compl
5a60: 65 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 ete content of a
5a70: 20 66 69 6c 65 20 69 64 65 6e 74 69 66 69 65 64 file identified
5a80: 20 62 79 20 41 52 54 49 46 41 43 54 49 44 0a 2a by ARTIFACTID.*
5a90: 2a 20 61 73 20 70 72 65 66 6f 72 6d 61 74 74 65 * as preformatte
5aa0: 64 20 74 65 78 74 2e 0a 2a 2f 0a 76 6f 69 64 20 d text..*/.void
5ab0: 68 65 78 64 75 6d 70 5f 70 61 67 65 28 76 6f 69 hexdump_page(voi
5ac0: 64 29 7b 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 d){. int rid;.
5ad0: 20 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 3b 0a 20 Blob content;.
5ae0: 20 42 6c 6f 62 20 64 6f 77 6e 6c 6f 61 64 4e 61 Blob downloadNa
5af0: 6d 65 3b 0a 20 20 63 68 61 72 20 2a 7a 55 75 69 me;. char *zUui
5b00: 64 3b 0a 0a 20 20 72 69 64 20 3d 20 6e 61 6d 65 d;.. rid = name
5b10: 5f 74 6f 5f 72 69 64 28 50 44 28 22 6e 61 6d 65 _to_rid(PD("name
5b20: 22 2c 22 30 22 29 29 3b 0a 20 20 6c 6f 67 69 6e ","0"));. login
5b30: 5f 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 _check_credentia
5b40: 6c 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f ls();. if( !g.o
5b50: 6b 52 65 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e kRead ){ login_n
5b60: 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b eeded(); return;
5b70: 20 7d 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 20 }. if( rid==0
5b80: 29 7b 20 63 67 69 5f 72 65 64 69 72 65 63 74 28 ){ cgi_redirect(
5b90: 22 2f 68 6f 6d 65 22 29 3b 20 7d 0a 20 20 69 66 "/home"); }. if
5ba0: 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 ( g.okAdmin ){.
5bb0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
5bc0: 55 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 22 Uuid = db_text("
5bd0: 22 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 ", "SELECT uuid
5be0: 46 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 FROM blob WHERE
5bf0: 72 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 rid=%d", rid);.
5c00: 20 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 if( db_exists
5c10: 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 ("SELECT 1 FROM
5c20: 73 68 75 6e 20 57 48 45 52 45 20 75 75 69 64 3d shun WHERE uuid=
5c30: 27 25 73 27 22 2c 20 7a 55 75 69 64 29 20 29 7b '%s'", zUuid) ){
5c40: 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 . style_sub
5c50: 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 55 6e menu_element("Un
5c60: 73 68 75 6e 22 2c 22 55 6e 73 68 75 6e 22 2c 20 shun","Unshun",
5c70: 22 25 73 2f 73 68 75 6e 3f 75 75 69 64 3d 25 73 "%s/shun?uuid=%s
5c80: 26 73 75 62 3d 31 22 2c 0a 20 20 20 20 20 20 20 &sub=1",.
5c90: 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 g.zTop, zUu
5ca0: 69 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a id);. }else{.
5cb0: 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d style_subm
5cc0: 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 53 68 75 enu_element("Shu
5cd0: 6e 22 2c 22 53 68 75 6e 22 2c 20 22 25 73 2f 73 n","Shun", "%s/s
5ce0: 68 75 6e 3f 73 68 75 6e 3d 25 73 23 61 64 64 73 hun?shun=%s#adds
5cf0: 68 75 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 hun",.
5d00: 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 64 29 g.zTop, zUuid)
5d10: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 74 ;. }. }. st
5d20: 79 6c 65 5f 68 65 61 64 65 72 28 22 48 65 78 20 yle_header("Hex
5d30: 41 72 74 69 66 61 63 74 20 43 6f 6e 74 65 6e 74 Artifact Content
5d40: 22 29 3b 0a 20 20 7a 55 75 69 64 20 3d 20 64 62 ");. zUuid = db
5d50: 5f 74 65 78 74 28 22 3f 22 2c 22 53 45 4c 45 43 _text("?","SELEC
5d60: 54 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 T uuid FROM blob
5d70: 20 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 WHERE rid=%d",
5d80: 72 69 64 29 3b 0a 20 20 40 20 3c 68 32 3e 41 72 rid);. @ <h2>Ar
5d90: 74 69 66 61 63 74 20 25 73 28 7a 55 75 69 64 29 tifact %s(zUuid)
5da0: 3a 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 6c 6f 63 :</h2>. @ <bloc
5db0: 6b 71 75 6f 74 65 3e 0a 20 20 62 6c 6f 62 5f 7a kquote>. blob_z
5dc0: 65 72 6f 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d ero(&downloadNam
5dd0: 65 29 3b 0a 20 20 6f 62 6a 65 63 74 5f 64 65 73 e);. object_des
5de0: 63 72 69 70 74 69 6f 6e 28 72 69 64 2c 20 30 2c cription(rid, 0,
5df0: 20 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 3b &downloadName);
5e00: 0a 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 . style_submenu
5e10: 5f 65 6c 65 6d 65 6e 74 28 22 44 6f 77 6e 6c 6f _element("Downlo
5e20: 61 64 22 2c 20 22 44 6f 77 6e 6c 6f 61 64 22 2c ad", "Download",
5e30: 20 0a 20 20 20 20 20 20 20 20 22 25 73 2f 72 61 . "%s/ra
5e40: 77 2f 25 54 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 w/%T?name=%d", g
5e50: 2e 7a 42 61 73 65 55 52 4c 2c 20 62 6c 6f 62 5f .zBaseURL, blob_
5e60: 73 74 72 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d str(&downloadNam
5e70: 65 29 2c 20 72 69 64 29 3b 0a 20 20 40 20 3c 2f e), rid);. @ </
5e80: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 40 20 blockquote>. @
5e90: 3c 68 72 3e 0a 20 20 63 6f 6e 74 65 6e 74 5f 67 <hr>. content_g
5ea0: 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 et(rid, &content
5eb0: 29 3b 0a 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f );. @ <blockquo
5ec0: 74 65 3e 3c 70 72 65 3e 0a 20 20 68 65 78 64 75 te><pre>. hexdu
5ed0: 6d 70 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 mp(&content);.
5ee0: 40 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 @ </pre></blockq
5ef0: 75 6f 74 65 3e 0a 20 20 73 74 79 6c 65 5f 66 6f uote>. style_fo
5f00: 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a oter();.}../*.**
5f10: 20 57 45 42 50 41 47 45 3a 20 61 72 74 69 66 61 WEBPAGE: artifa
5f20: 63 74 0a 2a 2a 20 55 52 4c 3a 20 2f 61 72 74 69 ct.** URL: /arti
5f30: 66 61 63 74 3f 6e 61 6d 65 3d 41 52 54 49 46 41 fact?name=ARTIFA
5f40: 43 54 49 44 0a 2a 2a 20 0a 2a 2a 20 53 68 6f 77 CTID.** .** Show
5f50: 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f the complete co
5f60: 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 6c 65 20 ntent of a file
5f70: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 41 52 identified by AR
5f80: 54 49 46 41 43 54 49 44 0a 2a 2a 20 61 73 20 70 TIFACTID.** as p
5f90: 72 65 66 6f 72 6d 61 74 74 65 64 20 74 65 78 74 reformatted text
5fa0: 2e 0a 2a 2f 0a 76 6f 69 64 20 61 72 74 69 66 61 ..*/.void artifa
5fb0: 63 74 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 ct_page(void){.
5fc0: 20 69 6e 74 20 72 69 64 3b 0a 20 20 42 6c 6f 62 int rid;. Blob
5fd0: 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 63 6f 6e 73 content;. cons
5fe0: 74 20 63 68 61 72 20 2a 7a 4d 69 6d 65 3b 0a 20 t char *zMime;.
5ff0: 20 42 6c 6f 62 20 64 6f 77 6e 6c 6f 61 64 4e 61 Blob downloadNa
6000: 6d 65 3b 0a 20 20 69 6e 74 20 72 65 6e 64 65 72 me;. int render
6010: 41 73 57 69 6b 69 20 3d 20 30 3b 0a 20 20 69 6e AsWiki = 0;. in
6020: 74 20 72 65 6e 64 65 72 41 73 48 74 6d 6c 20 3d t renderAsHtml =
6030: 20 30 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 0;. const char
6040: 20 2a 7a 55 75 69 64 3b 0a 0a 20 20 72 69 64 20 *zUuid;.. rid
6050: 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 28 50 44 = name_to_rid(PD
6060: 28 22 6e 61 6d 65 22 2c 22 30 22 29 29 3b 0a 20 ("name","0"));.
6070: 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 login_check_cre
6080: 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20 69 66 dentials();. if
6090: 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b 20 6c ( !g.okRead ){ l
60a0: 6f 67 69 6e 5f 6e 65 65 64 65 64 28 29 3b 20 72 ogin_needed(); r
60b0: 65 74 75 72 6e 3b 20 7d 0a 20 20 69 66 28 20 72 eturn; }. if( r
60c0: 69 64 3d 3d 30 20 29 7b 20 63 67 69 5f 72 65 64 id==0 ){ cgi_red
60d0: 69 72 65 63 74 28 22 2f 68 6f 6d 65 22 29 3b 20 irect("/home");
60e0: 7d 0a 20 20 69 66 28 20 67 2e 6f 6b 41 64 6d 69 }. if( g.okAdmi
60f0: 6e 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 n ){. const c
6100: 68 61 72 20 2a 7a 55 75 69 64 20 3d 20 64 62 5f har *zUuid = db_
6110: 74 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 54 text("", "SELECT
6120: 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20 uuid FROM blob
6130: 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 72 WHERE rid=%d", r
6140: 69 64 29 3b 0a 20 20 20 20 69 66 28 20 64 62 5f id);. if( db_
6150: 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 exists("SELECT 1
6160: 20 46 52 4f 4d 20 73 68 75 6e 20 57 48 45 52 45 FROM shun WHERE
6170: 20 75 75 69 64 3d 27 25 73 27 22 2c 20 7a 55 75 uuid='%s'", zUu
6180: 69 64 29 20 29 7b 0a 20 20 20 20 20 20 73 74 79 id) ){. sty
6190: 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 le_submenu_eleme
61a0: 6e 74 28 22 55 6e 73 68 75 6e 22 2c 22 55 6e 73 nt("Unshun","Uns
61b0: 68 75 6e 22 2c 20 22 25 73 2f 73 68 75 6e 3f 75 hun", "%s/shun?u
61c0: 75 69 64 3d 25 73 26 73 75 62 3d 31 22 2c 0a 20 uid=%s&sub=1",.
61d0: 20 20 20 20 20 20 20 20 20 20 20 67 2e 7a 54 6f g.zTo
61e0: 70 2c 20 7a 55 75 69 64 29 3b 0a 20 20 20 20 7d p, zUuid);. }
61f0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 74 79 6c else{. styl
6200: 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e e_submenu_elemen
6210: 74 28 22 53 68 75 6e 22 2c 22 53 68 75 6e 22 2c t("Shun","Shun",
6220: 20 22 25 73 2f 73 68 75 6e 3f 73 68 75 6e 3d 25 "%s/shun?shun=%
6230: 73 23 61 64 64 73 68 75 6e 22 2c 0a 20 20 20 20 s#addshun",.
6240: 20 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 g.zTop,
6250: 7a 55 75 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 zUuid);. }.
6260: 7d 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 }. style_header
6270: 28 22 41 72 74 69 66 61 63 74 20 43 6f 6e 74 65 ("Artifact Conte
6280: 6e 74 22 29 3b 0a 20 20 7a 55 75 69 64 20 3d 20 nt");. zUuid =
6290: 64 62 5f 74 65 78 74 28 22 3f 22 2c 20 22 53 45 db_text("?", "SE
62a0: 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d 20 62 LECT uuid FROM b
62b0: 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d 25 64 lob WHERE rid=%d
62c0: 22 2c 20 72 69 64 29 3b 0a 20 20 40 20 3c 68 32 ", rid);. @ <h2
62d0: 3e 41 72 74 69 66 61 63 74 20 25 73 28 7a 55 75 >Artifact %s(zUu
62e0: 69 64 29 3c 2f 68 32 3e 0a 20 20 40 20 3c 62 6c id)</h2>. @ <bl
62f0: 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 62 6c 6f 62 ockquote>. blob
6300: 5f 7a 65 72 6f 28 26 64 6f 77 6e 6c 6f 61 64 4e _zero(&downloadN
6310: 61 6d 65 29 3b 0a 20 20 6f 62 6a 65 63 74 5f 64 ame);. object_d
6320: 65 73 63 72 69 70 74 69 6f 6e 28 72 69 64 2c 20 escription(rid,
6330: 30 2c 20 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 0, &downloadName
6340: 29 3b 0a 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 );. style_subme
6350: 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 44 6f 77 6e nu_element("Down
6360: 6c 6f 61 64 22 2c 20 22 44 6f 77 6e 6c 6f 61 64 load", "Download
6370: 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 25 ", . "%
6380: 73 2f 72 61 77 2f 25 54 3f 6e 61 6d 65 3d 25 64 s/raw/%T?name=%d
6390: 22 2c 20 67 2e 7a 54 6f 70 2c 20 62 6c 6f 62 5f ", g.zTop, blob_
63a0: 73 74 72 28 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d str(&downloadNam
63b0: 65 29 2c 20 72 69 64 29 3b 0a 20 20 7a 4d 69 6d e), rid);. zMim
63c0: 65 20 3d 20 6d 69 6d 65 74 79 70 65 5f 66 72 6f e = mimetype_fro
63d0: 6d 5f 6e 61 6d 65 28 62 6c 6f 62 5f 73 74 72 28 m_name(blob_str(
63e0: 26 64 6f 77 6e 6c 6f 61 64 4e 61 6d 65 29 29 3b &downloadName));
63f0: 0a 20 20 69 66 28 20 7a 4d 69 6d 65 20 29 7b 0a . if( zMime ){.
6400: 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a if( strcmp(z
6410: 4d 69 6d 65 2c 20 22 74 65 78 74 2f 68 74 6d 6c Mime, "text/html
6420: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 ")==0 ){. i
6430: 66 28 20 50 28 22 74 78 74 22 29 20 29 7b 0a 20 f( P("txt") ){.
6440: 20 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 style_sub
6450: 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 48 74 menu_element("Ht
6460: 6d 6c 22 2c 20 22 48 74 6d 6c 22 2c 0a 20 20 20 ml", "Html",.
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6480: 20 20 20 20 20 20 20 20 20 20 20 22 25 73 2f 61 "%s/a
6490: 72 74 69 66 61 63 74 3f 6e 61 6d 65 3d 25 64 22 rtifact?name=%d"
64a0: 2c 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a , g.zTop, rid);.
64b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
64c0: 20 20 20 20 20 72 65 6e 64 65 72 41 73 48 74 6d renderAsHtm
64d0: 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 l = 1;. s
64e0: 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 tyle_submenu_ele
64f0: 6d 65 6e 74 28 22 54 65 78 74 22 2c 20 22 54 65 ment("Text", "Te
6500: 78 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 xt",.
6510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6520: 20 20 20 22 25 73 2f 61 72 74 69 66 61 63 74 3f "%s/artifact?
6530: 6e 61 6d 65 3d 25 64 26 74 78 74 3d 31 22 2c 20 name=%d&txt=1",
6540: 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 g.zTop, rid);.
6550: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 }. }else
6560: 69 66 28 20 73 74 72 63 6d 70 28 7a 4d 69 6d 65 if( strcmp(zMime
6570: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 , "application/x
6580: 2d 66 6f 73 73 69 6c 2d 77 69 6b 69 22 29 3d 3d -fossil-wiki")==
6590: 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 50 0 ){. if( P
65a0: 28 22 74 78 74 22 29 20 29 7b 0a 20 20 20 20 20 ("txt") ){.
65b0: 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 style_submenu
65c0: 5f 65 6c 65 6d 65 6e 74 28 22 57 69 6b 69 22 2c _element("Wiki",
65d0: 20 22 57 69 6b 69 22 2c 0a 20 20 20 20 20 20 20 "Wiki",.
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
65f0: 20 20 20 20 20 20 20 22 25 73 2f 61 72 74 69 66 "%s/artif
6600: 61 63 74 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 2e act?name=%d", g.
6610: 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 20 zTop, rid);.
6620: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
6630: 20 72 65 6e 64 65 72 41 73 57 69 6b 69 20 3d 20 renderAsWiki =
6640: 31 3b 0a 20 20 20 20 20 20 20 20 73 74 79 6c 65 1;. style
6650: 5f 73 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 _submenu_element
6660: 28 22 54 65 78 74 22 2c 20 22 54 65 78 74 22 2c ("Text", "Text",
6670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
6690: 25 73 2f 61 72 74 69 66 61 63 74 3f 6e 61 6d 65 %s/artifact?name
66a0: 3d 25 64 26 74 78 74 3d 31 22 2c 20 67 2e 7a 54 =%d&txt=1", g.zT
66b0: 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 20 20 20 op, rid);.
66c0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 40 20 }. }. }. @
66d0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 </blockquote>.
66e0: 40 20 3c 68 72 3e 0a 20 20 63 6f 6e 74 65 6e 74 @ <hr>. content
66f0: 5f 67 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 _get(rid, &conte
6700: 6e 74 29 3b 0a 20 20 69 66 28 20 72 65 6e 64 65 nt);. if( rende
6710: 72 41 73 57 69 6b 69 20 29 7b 0a 20 20 20 20 77 rAsWiki ){. w
6720: 69 6b 69 5f 63 6f 6e 76 65 72 74 28 26 63 6f 6e iki_convert(&con
6730: 74 65 6e 74 2c 20 30 2c 20 30 29 3b 0a 20 20 7d tent, 0, 0);. }
6740: 65 6c 73 65 20 69 66 28 20 72 65 6e 64 65 72 41 else if( renderA
6750: 73 48 74 6d 6c 20 29 7b 0a 20 20 20 20 40 20 3c sHtml ){. @ <
6760: 64 69 76 3e 0a 20 20 20 20 63 67 69 5f 61 70 70 div>. cgi_app
6770: 65 6e 64 5f 63 6f 6e 74 65 6e 74 28 62 6c 6f 62 end_content(blob
6780: 5f 62 75 66 66 65 72 28 26 63 6f 6e 74 65 6e 74 _buffer(&content
6790: 29 2c 20 62 6c 6f 62 5f 73 69 7a 65 28 26 63 6f ), blob_size(&co
67a0: 6e 74 65 6e 74 29 29 3b 0a 20 20 20 20 40 20 3c ntent));. @ <
67b0: 2f 64 69 76 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20 /div>. }else{.
67c0: 20 20 20 7a 4d 69 6d 65 20 3d 20 6d 69 6d 65 74 zMime = mimet
67d0: 79 70 65 5f 66 72 6f 6d 5f 63 6f 6e 74 65 6e 74 ype_from_content
67e0: 28 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 (&content);.
67f0: 40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 @ <blockquote>.
6800: 20 20 20 69 66 28 20 7a 4d 69 6d 65 3d 3d 30 20 if( zMime==0
6810: 29 7b 0a 20 20 20 20 20 20 40 20 3c 70 72 65 3e ){. @ <pre>
6820: 0a 20 20 20 20 20 20 40 20 25 68 28 62 6c 6f 62 . @ %h(blob
6830: 5f 73 74 72 28 26 63 6f 6e 74 65 6e 74 29 29 0a _str(&content)).
6840: 20 20 20 20 20 20 40 20 3c 2f 70 72 65 3e 0a 20 @ </pre>.
6850: 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d 65 style_subme
6860: 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 48 65 78 22 nu_element("Hex"
6870: 2c 22 48 65 78 22 2c 20 22 25 73 2f 68 65 78 64 ,"Hex", "%s/hexd
6880: 75 6d 70 3f 6e 61 6d 65 3d 25 64 22 2c 20 67 2e ump?name=%d", g.
6890: 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 20 20 20 zTop, rid);.
68a0: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 6e 63 6d }else if( strncm
68b0: 70 28 7a 4d 69 6d 65 2c 20 22 69 6d 61 67 65 2f p(zMime, "image/
68c0: 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 ", 6)==0 ){.
68d0: 20 20 40 20 3c 69 6d 67 20 73 72 63 3d 22 25 73 @ <img src="%s
68e0: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 72 61 77 (g.zBaseURL)/raw
68f0: 3f 6e 61 6d 65 3d 25 64 28 72 69 64 29 26 6d 3d ?name=%d(rid)&m=
6900: 25 73 28 7a 4d 69 6d 65 29 22 3e 3c 2f 69 6d 67 %s(zMime)"></img
6910: 3e 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 >. style_su
6920: 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 48 bmenu_element("H
6930: 65 78 22 2c 22 48 65 78 22 2c 20 22 25 73 2f 68 ex","Hex", "%s/h
6940: 65 78 64 75 6d 70 3f 6e 61 6d 65 3d 25 64 22 2c exdump?name=%d",
6950: 20 67 2e 7a 54 6f 70 2c 20 72 69 64 29 3b 0a 20 g.zTop, rid);.
6960: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
6970: 40 20 3c 70 72 65 3e 0a 20 20 20 20 20 20 68 65 @ <pre>. he
6980: 78 64 75 6d 70 28 26 63 6f 6e 74 65 6e 74 29 3b xdump(&content);
6990: 0a 20 20 20 20 20 20 40 20 3c 2f 70 72 65 3e 0a . @ </pre>.
69a0: 20 20 20 20 7d 0a 20 20 20 20 40 20 3c 2f 62 6c }. @ </bl
69b0: 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 7d 0a 20 20 ockquote>. }.
69c0: 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b 0a style_footer();.
69d0: 7d 20 20 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 } ../*.** WEBPA
69e0: 47 45 3a 20 74 69 6e 66 6f 0a 2a 2a 20 55 52 4c GE: tinfo.** URL
69f0: 3a 20 2f 74 69 6e 66 6f 3f 6e 61 6d 65 3d 41 52 : /tinfo?name=AR
6a00: 54 49 46 41 43 54 49 44 0a 2a 2a 0a 2a 2a 20 53 TIFACTID.**.** S
6a10: 68 6f 77 20 74 68 65 20 64 65 74 61 69 6c 73 20 how the details
6a20: 6f 66 20 61 20 74 69 63 6b 65 74 20 63 68 61 6e of a ticket chan
6a30: 67 65 20 63 6f 6e 74 72 6f 6c 20 61 72 74 69 66 ge control artif
6a40: 61 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20 74 69 6e act..*/.void tin
6a50: 66 6f 5f 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 fo_page(void){.
6a60: 20 69 6e 74 20 72 69 64 3b 0a 20 20 42 6c 6f 62 int rid;. Blob
6a70: 20 63 6f 6e 74 65 6e 74 3b 0a 20 20 63 68 61 72 content;. char
6a80: 20 2a 7a 44 61 74 65 3b 0a 20 20 63 6f 6e 73 74 *zDate;. const
6a90: 20 63 68 61 72 20 2a 7a 55 75 69 64 3b 0a 20 20 char *zUuid;.
6aa0: 63 68 61 72 20 7a 54 6b 74 4e 61 6d 65 5b 32 30 char zTktName[20
6ab0: 5d 3b 0a 20 20 4d 61 6e 69 66 65 73 74 20 6d 3b ];. Manifest m;
6ac0: 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f .. login_check_
6ad0: 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 credentials();.
6ae0: 20 69 66 28 20 21 67 2e 6f 6b 52 64 54 6b 74 20 if( !g.okRdTkt
6af0: 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 ){ login_needed(
6b00: 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 72 ); return; }. r
6b10: 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69 64 id = name_to_rid
6b20: 28 50 44 28 22 6e 61 6d 65 22 2c 22 30 22 29 29 (PD("name","0"))
6b30: 3b 0a 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 ;. if( rid==0 )
6b40: 7b 20 66 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 { fossil_redirec
6b50: 74 5f 68 6f 6d 65 28 29 3b 20 7d 0a 20 20 7a 55 t_home(); }. zU
6b60: 75 69 64 20 3d 20 64 62 5f 74 65 78 74 28 22 22 uid = db_text(""
6b70: 2c 20 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 , "SELECT uuid F
6b80: 52 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 ROM blob WHERE r
6b90: 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 id=%d", rid);.
6ba0: 69 66 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b if( g.okAdmin ){
6bb0: 0a 20 20 20 20 69 66 28 20 64 62 5f 65 78 69 73 . if( db_exis
6bc0: 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f ts("SELECT 1 FRO
6bd0: 4d 20 73 68 75 6e 20 57 48 45 52 45 20 75 75 69 M shun WHERE uui
6be0: 64 3d 27 25 73 27 22 2c 20 7a 55 75 69 64 29 20 d='%s'", zUuid)
6bf0: 29 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 ){. style_s
6c00: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 ubmenu_element("
6c10: 55 6e 73 68 75 6e 22 2c 22 55 6e 73 68 75 6e 22 Unshun","Unshun"
6c20: 2c 20 22 25 73 2f 73 68 75 6e 3f 75 75 69 64 3d , "%s/shun?uuid=
6c30: 25 73 26 73 75 62 3d 31 22 2c 0a 20 20 20 20 20 %s&sub=1",.
6c40: 20 20 20 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a g.zTop, z
6c50: 55 75 69 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 Uuid);. }else
6c60: 7b 0a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 {. style_su
6c70: 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 53 bmenu_element("S
6c80: 68 75 6e 22 2c 22 53 68 75 6e 22 2c 20 22 25 73 hun","Shun", "%s
6c90: 2f 73 68 75 6e 3f 73 68 75 6e 3d 25 73 23 61 64 /shun?shun=%s#ad
6ca0: 64 73 68 75 6e 22 2c 0a 20 20 20 20 20 20 20 20 dshun",.
6cb0: 20 20 20 20 67 2e 7a 54 6f 70 2c 20 7a 55 75 69 g.zTop, zUui
6cc0: 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 d);. }. }.
6cd0: 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c content_get(rid,
6ce0: 20 26 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 69 66 &content);. if
6cf0: 28 20 6d 61 6e 69 66 65 73 74 5f 70 61 72 73 65 ( manifest_parse
6d00: 28 26 6d 2c 20 26 63 6f 6e 74 65 6e 74 29 3d 3d (&m, &content)==
6d10: 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 0 ){. fossil_
6d20: 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b redirect_home();
6d30: 0a 20 20 7d 0a 20 20 69 66 28 20 6d 2e 74 79 70 . }. if( m.typ
6d40: 65 21 3d 43 46 54 59 50 45 5f 54 49 43 4b 45 54 e!=CFTYPE_TICKET
6d50: 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 72 ){. fossil_r
6d60: 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a edirect_home();.
6d70: 20 20 7d 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 }. style_head
6d80: 65 72 28 22 54 69 63 6b 65 74 20 43 68 61 6e 67 er("Ticket Chang
6d90: 65 20 44 65 74 61 69 6c 73 22 29 3b 0a 20 20 7a e Details");. z
6da0: 44 61 74 65 20 3d 20 64 62 5f 74 65 78 74 28 30 Date = db_text(0
6db0: 2c 20 22 53 45 4c 45 43 54 20 64 61 74 65 74 69 , "SELECT dateti
6dc0: 6d 65 28 25 2e 31 32 66 29 22 2c 20 6d 2e 72 44 me(%.12f)", m.rD
6dd0: 61 74 65 29 3b 0a 20 20 6d 65 6d 63 70 79 28 7a ate);. memcpy(z
6de0: 54 6b 74 4e 61 6d 65 2c 20 6d 2e 7a 54 69 63 6b TktName, m.zTick
6df0: 65 74 55 75 69 64 2c 20 31 30 29 3b 0a 20 20 7a etUuid, 10);. z
6e00: 54 6b 74 4e 61 6d 65 5b 31 30 5d 20 3d 20 30 3b TktName[10] = 0;
6e10: 0a 20 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f . if( g.okHisto
6e20: 72 79 20 29 7b 0a 20 20 20 20 40 20 3c 68 32 3e ry ){. @ <h2>
6e30: 43 68 61 6e 67 65 73 20 74 6f 20 74 69 63 6b 65 Changes to ticke
6e40: 74 20 3c 61 20 68 72 65 66 3d 22 25 73 28 6d 2e t <a href="%s(m.
6e50: 7a 54 69 63 6b 65 74 55 75 69 64 29 22 3e 25 73 zTicketUuid)">%s
6e60: 28 7a 54 6b 74 4e 61 6d 65 29 3c 2f 61 3e 3c 2f (zTktName)</a></
6e70: 68 32 3e 0a 20 20 20 20 40 0a 20 20 20 20 40 20 h2>. @. @
6e80: 3c 70 3e 42 79 20 25 68 28 6d 2e 7a 55 73 65 72 <p>By %h(m.zUser
6e90: 29 20 6f 6e 20 25 73 28 7a 44 61 74 65 29 2e 20 ) on %s(zDate).
6ea0: 20 53 65 65 20 61 6c 73 6f 3a 0a 20 20 20 20 40 See also:. @
6eb0: 20 3c 61 20 68 72 65 66 3d 22 25 73 28 67 2e 7a <a href="%s(g.z
6ec0: 54 6f 70 29 2f 61 72 74 69 66 61 63 74 2f 25 54 Top)/artifact/%T
6ed0: 28 7a 55 75 69 64 29 22 3e 61 72 74 69 66 61 63 (zUuid)">artifac
6ee0: 74 20 63 6f 6e 74 65 6e 74 3c 2f 61 3e 2c 20 61 t content</a>, a
6ef0: 6e 64 0a 20 20 20 20 40 20 3c 61 20 68 72 65 66 nd. @ <a href
6f00: 3d 22 25 73 28 67 2e 7a 54 6f 70 29 2f 74 6b 74 ="%s(g.zTop)/tkt
6f10: 68 69 73 74 6f 72 79 2f 25 73 28 6d 2e 7a 54 69 history/%s(m.zTi
6f20: 63 6b 65 74 55 75 69 64 29 22 3e 74 69 63 6b 65 cketUuid)">ticke
6f30: 74 20 68 69 73 74 6f 72 79 3c 2f 61 3e 0a 20 20 t history</a>.
6f40: 20 20 40 20 3c 2f 70 3e 0a 20 20 7d 65 6c 73 65 @ </p>. }else
6f50: 7b 0a 20 20 20 20 40 20 3c 68 32 3e 43 68 61 6e {. @ <h2>Chan
6f60: 67 65 73 20 74 6f 20 74 69 63 6b 65 74 20 25 73 ges to ticket %s
6f70: 28 7a 54 6b 74 4e 61 6d 65 29 3c 2f 68 32 3e 0a (zTktName)</h2>.
6f80: 20 20 20 20 40 0a 20 20 20 20 40 20 3c 70 3e 42 @. @ <p>B
6f90: 79 20 25 68 28 6d 2e 7a 55 73 65 72 29 20 6f 6e y %h(m.zUser) on
6fa0: 20 25 73 28 7a 44 61 74 65 29 2e 0a 20 20 20 20 %s(zDate)..
6fb0: 40 20 3c 2f 70 3e 0a 20 20 7d 0a 20 20 40 0a 20 @ </p>. }. @.
6fc0: 20 40 20 3c 6f 6c 3e 0a 20 20 66 72 65 65 28 7a @ <ol>. free(z
6fd0: 44 61 74 65 29 3b 0a 20 20 74 69 63 6b 65 74 5f Date);. ticket_
6fe0: 6f 75 74 70 75 74 5f 63 68 61 6e 67 65 5f 61 72 output_change_ar
6ff0: 74 69 66 61 63 74 28 26 6d 29 3b 0a 20 20 6d 61 tifact(&m);. ma
7000: 6e 69 66 65 73 74 5f 63 6c 65 61 72 28 26 6d 29 nifest_clear(&m)
7010: 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 ;. style_footer
7020: 28 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 57 45 ();.}.../*.** WE
7030: 42 50 41 47 45 3a 20 69 6e 66 6f 0a 2a 2a 20 55 BPAGE: info.** U
7040: 52 4c 3a 20 69 6e 66 6f 2f 41 52 54 49 46 41 43 RL: info/ARTIFAC
7050: 54 49 44 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 72 TID.**.** The ar
7060: 67 75 6d 65 6e 74 20 69 73 20 61 20 61 72 74 69 gument is a arti
7070: 66 61 63 74 20 49 44 20 77 68 69 63 68 20 6d 69 fact ID which mi
7080: 67 68 74 20 62 65 20 61 20 62 61 73 65 6c 69 6e ght be a baselin
7090: 65 20 6f 72 20 61 20 66 69 6c 65 20 6f 72 0a 2a e or a file or.*
70a0: 2a 20 61 20 74 69 63 6b 65 74 20 63 68 61 6e 67 * a ticket chang
70b0: 65 73 20 6f 72 20 61 20 77 69 6b 69 20 65 64 69 es or a wiki edi
70c0: 74 6f 72 20 6f 72 20 73 6f 6d 65 74 68 69 6e 67 tor or something
70d0: 20 65 6c 73 65 2e 20 0a 2a 2a 0a 2a 2a 20 46 69 else. .**.** Fi
70e0: 67 75 72 65 20 6f 75 74 20 77 68 61 74 20 74 68 gure out what th
70f0: 65 20 61 72 74 69 66 61 63 74 20 49 44 20 69 73 e artifact ID is
7100: 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 74 2e and jump to it.
7110: 0a 2a 2f 0a 76 6f 69 64 20 69 6e 66 6f 5f 70 61 .*/.void info_pa
7120: 67 65 28 76 6f 69 64 29 7b 0a 20 20 63 6f 6e 73 ge(void){. cons
7130: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 t char *zName;.
7140: 20 42 6c 6f 62 20 75 75 69 64 3b 0a 20 20 69 6e Blob uuid;. in
7150: 74 20 72 69 64 2c 20 6e 4e 61 6d 65 3b 0a 20 20 t rid, nName;.
7160: 0a 20 20 7a 4e 61 6d 65 20 3d 20 50 28 22 6e 61 . zName = P("na
7170: 6d 65 22 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d me");. if( zNam
7180: 65 3d 3d 30 20 29 20 66 6f 73 73 69 6c 5f 72 65 e==0 ) fossil_re
7190: 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 direct_home();.
71a0: 20 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 nName = strlen(
71b0: 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e 4e zName);. if( nN
71c0: 61 6d 65 3c 34 20 7c 7c 20 6e 4e 61 6d 65 3e 55 ame<4 || nName>U
71d0: 55 49 44 5f 53 49 5a 45 20 7c 7c 20 21 76 61 6c UID_SIZE || !val
71e0: 69 64 61 74 65 31 36 28 7a 4e 61 6d 65 2c 20 6e idate16(zName, n
71f0: 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 73 77 69 Name) ){. swi
7200: 74 63 68 28 20 73 79 6d 5f 74 61 67 5f 74 6f 5f tch( sym_tag_to_
7210: 75 75 69 64 28 7a 4e 61 6d 65 2c 20 26 75 75 69 uuid(zName, &uui
7220: 64 29 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 d) ){. case
7230: 20 31 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 1: {. /*
7240: 20 67 6f 74 20 6f 6e 65 20 55 55 49 44 2c 20 75 got one UUID, u
7250: 73 65 20 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 se it */.
7260: 20 7a 4e 61 6d 65 20 3d 20 62 6c 6f 62 5f 73 74 zName = blob_st
7270: 72 28 26 75 75 69 64 29 3b 0a 20 20 20 20 20 20 r(&uuid);.
7280: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d break;. }
7290: 0a 20 20 20 20 20 20 63 61 73 65 20 32 3a 20 7b . case 2: {
72a0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 67 6f 20 73 . /* go s
72b0: 6f 6d 65 77 68 65 72 65 20 74 6f 20 73 68 6f 77 omewhere to show
72c0: 20 74 68 65 20 6d 75 6c 74 69 70 6c 65 20 55 55 the multiple UU
72d0: 49 44 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 IDs */. r
72e0: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 62 eturn;. b
72f0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 reak;. }.
7300: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 default: {.
7310: 20 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 72 65 fossil_re
7320: 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a 20 direct_home();.
7330: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 break;.
7340: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a }. }. }.
7350: 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 if( db_exists(
7360: 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 "SELECT 1 FROM t
7370: 69 63 6b 65 74 20 57 48 45 52 45 20 74 6b 74 5f icket WHERE tkt_
7380: 75 75 69 64 20 47 4c 4f 42 20 27 25 73 2a 27 22 uuid GLOB '%s*'"
7390: 2c 20 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 , zName) ){.
73a0: 74 6b 74 76 69 65 77 5f 70 61 67 65 28 29 3b 0a tktview_page();.
73b0: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a return;. }.
73c0: 20 20 72 69 64 20 3d 20 64 62 5f 69 6e 74 28 30 rid = db_int(0
73d0: 2c 20 22 53 45 4c 45 43 54 20 72 69 64 20 46 52 , "SELECT rid FR
73e0: 4f 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 75 75 OM blob WHERE uu
73f0: 69 64 20 47 4c 4f 42 20 27 25 73 2a 27 22 2c 20 id GLOB '%s*'",
7400: 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 72 69 zName);. if( ri
7410: 64 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 79 6c d==0 ){. styl
7420: 65 5f 68 65 61 64 65 72 28 22 42 72 6f 6b 65 6e e_header("Broken
7430: 20 4c 69 6e 6b 22 29 3b 0a 20 20 20 20 40 20 3c Link");. @ <
7440: 70 3e 4e 6f 20 73 75 63 68 20 6f 62 6a 65 63 74 p>No such object
7450: 3a 20 25 68 28 7a 4e 61 6d 65 29 3c 2f 70 3e 0a : %h(zName)</p>.
7460: 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 style_footer
7470: 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a ();. return;.
7480: 20 20 7d 0a 20 20 69 66 28 20 64 62 5f 65 78 69 }. if( db_exi
7490: 73 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 sts("SELECT 1 FR
74a0: 4f 4d 20 6d 6c 69 6e 6b 20 57 48 45 52 45 20 6d OM mlink WHERE m
74b0: 69 64 3d 25 64 22 2c 20 72 69 64 29 20 29 7b 0a id=%d", rid) ){.
74c0: 20 20 20 20 63 69 5f 70 61 67 65 28 29 3b 0a 20 ci_page();.
74d0: 20 7d 65 6c 73 65 0a 20 20 69 66 28 20 64 62 5f }else. if( db_
74e0: 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 31 exists("SELECT 1
74f0: 20 46 52 4f 4d 20 74 61 67 78 72 65 66 20 4a 4f FROM tagxref JO
7500: 49 4e 20 74 61 67 20 55 53 49 4e 47 28 74 61 67 IN tag USING(tag
7510: 69 64 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 id)".
7520: 20 20 20 20 20 22 20 57 48 45 52 45 20 72 69 64 " WHERE rid
7530: 3d 25 64 20 41 4e 44 20 74 61 67 6e 61 6d 65 20 =%d AND tagname
7540: 4c 49 4b 45 20 27 77 69 6b 69 2d 25 25 27 22 2c LIKE 'wiki-%%'",
7550: 20 72 69 64 29 20 29 7b 0a 20 20 20 20 77 69 6e rid) ){. win
7560: 66 6f 5f 70 61 67 65 28 29 3b 0a 20 20 7d 65 6c fo_page();. }el
7570: 73 65 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 se. if( db_exis
7580: 74 73 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f ts("SELECT 1 FRO
7590: 4d 20 74 61 67 78 72 65 66 20 4a 4f 49 4e 20 74 M tagxref JOIN t
75a0: 61 67 20 55 53 49 4e 47 28 74 61 67 69 64 29 22 ag USING(tagid)"
75b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
75c0: 20 22 20 57 48 45 52 45 20 72 69 64 3d 25 64 20 " WHERE rid=%d
75d0: 41 4e 44 20 74 61 67 6e 61 6d 65 20 4c 49 4b 45 AND tagname LIKE
75e0: 20 27 74 6b 74 2d 25 25 27 22 2c 20 72 69 64 29 'tkt-%%'", rid)
75f0: 20 29 7b 0a 20 20 20 20 74 69 6e 66 6f 5f 70 61 ){. tinfo_pa
7600: 67 65 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 ge();. }else.
7610: 69 66 28 20 64 62 5f 65 78 69 73 74 73 28 22 53 if( db_exists("S
7620: 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 6c 69 ELECT 1 FROM pli
7630: 6e 6b 20 57 48 45 52 45 20 63 69 64 3d 25 64 22 nk WHERE cid=%d"
7640: 2c 20 72 69 64 29 20 29 7b 0a 20 20 20 20 63 69 , rid) ){. ci
7650: 5f 70 61 67 65 28 29 3b 0a 20 20 7d 65 6c 73 65 _page();. }else
7660: 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 . if( db_exists
7670: 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 ("SELECT 1 FROM
7680: 70 6c 69 6e 6b 20 57 48 45 52 45 20 70 69 64 3d plink WHERE pid=
7690: 25 64 22 2c 20 72 69 64 29 20 29 7b 0a 20 20 20 %d", rid) ){.
76a0: 20 63 69 5f 70 61 67 65 28 29 3b 0a 20 20 7d 65 ci_page();. }e
76b0: 6c 73 65 0a 20 20 7b 0a 20 20 20 20 61 72 74 69 lse. {. arti
76c0: 66 61 63 74 5f 70 61 67 65 28 29 3b 0a 20 20 7d fact_page();. }
76d0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 .}../*.** WEBPAG
76e0: 45 3a 20 63 69 5f 65 64 69 74 0a 2a 2a 20 55 52 E: ci_edit.** UR
76f0: 4c 3a 20 20 63 69 5f 65 64 69 74 3f 72 3d 52 49 L: ci_edit?r=RI
7700: 44 26 63 3d 4e 45 57 43 4f 4d 4d 45 4e 54 26 75 D&c=NEWCOMMENT&u
7710: 3d 4e 45 57 55 53 45 52 0a 2a 2a 0a 2a 2a 20 50 =NEWUSER.**.** P
7720: 72 65 73 65 6e 74 20 61 20 64 69 61 6c 6f 67 20 resent a dialog
7730: 66 6f 72 20 75 70 64 61 74 69 6e 67 20 70 72 6f for updating pro
7740: 70 65 72 74 69 65 73 20 6f 66 20 61 20 62 61 73 perties of a bas
7750: 65 6c 69 6e 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 eline:.**.**
7760: 20 2a 20 20 54 68 65 20 63 68 65 63 6b 2d 69 6e * The check-in
7770: 20 75 73 65 72 0a 2a 2a 20 20 20 20 20 2a 20 20 user.** *
7780: 54 68 65 20 63 68 65 63 6b 2d 69 6e 20 63 6f 6d The check-in com
7790: 6d 65 6e 74 0a 2a 2a 20 20 20 20 20 2a 20 20 54 ment.** * T
77a0: 68 65 20 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f he background co
77b0: 6c 6f 72 2e 0a 2a 2f 0a 76 6f 69 64 20 63 69 5f lor..*/.void ci_
77c0: 65 64 69 74 5f 70 61 67 65 28 76 6f 69 64 29 7b edit_page(void){
77d0: 0a 20 20 69 6e 74 20 72 69 64 3b 0a 20 20 63 6f . int rid;. co
77e0: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 6d 65 nst char *zComme
77f0: 6e 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 nt; /* C
7800: 75 72 72 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 6f urrent comment o
7810: 6e 20 74 68 65 20 63 68 65 63 6b 2d 69 6e 20 2a n the check-in *
7820: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a /. const char *
7830: 7a 4e 65 77 43 6f 6d 6d 65 6e 74 3b 20 20 20 20 zNewComment;
7840: 20 20 2f 2a 20 52 65 76 69 73 65 64 20 63 68 65 /* Revised che
7850: 63 6b 2d 69 6e 20 63 6f 6d 6d 65 6e 74 20 2a 2f ck-in comment */
7860: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
7870: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 User;
7880: 20 2f 2a 20 43 75 72 72 65 6e 74 20 75 73 65 72 /* Current user
7890: 20 66 6f 72 20 74 68 65 20 63 68 65 63 6b 2d 69 for the check-i
78a0: 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 n */. const cha
78b0: 72 20 2a 7a 4e 65 77 55 73 65 72 3b 20 20 20 20 r *zNewUser;
78c0: 20 20 20 20 20 2f 2a 20 52 65 76 69 73 65 64 20 /* Revised
78d0: 75 73 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 user */. const
78e0: 63 68 61 72 20 2a 7a 44 61 74 65 3b 20 20 20 20 char *zDate;
78f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 /* Curre
7900: 6e 74 20 64 61 74 65 20 6f 66 20 74 68 65 20 63 nt date of the c
7910: 68 65 63 6b 2d 69 6e 20 2a 2f 0a 20 20 63 6f 6e heck-in */. con
7920: 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 44 61 74 st char *zNewDat
7930: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 e; /* Re
7940: 76 69 73 65 64 20 63 68 65 63 6b 2d 69 6e 20 64 vised check-in d
7950: 61 74 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 ate */. const c
7960: 68 61 72 20 2a 7a 43 6f 6c 6f 72 3b 20 20 20 20 har *zColor;
7970: 20 20 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 . const char
7980: 20 2a 7a 4e 65 77 43 6f 6c 6f 72 3b 0a 20 20 63 *zNewColor;. c
7990: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 54 onst char *zNewT
79a0: 61 67 46 6c 61 67 3b 0a 20 20 63 6f 6e 73 74 20 agFlag;. const
79b0: 63 68 61 72 20 2a 7a 4e 65 77 54 61 67 3b 0a 20 char *zNewTag;.
79c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 const char *zNe
79d0: 77 42 72 46 6c 61 67 3b 0a 20 20 63 6f 6e 73 74 wBrFlag;. const
79e0: 20 63 68 61 72 20 2a 7a 4e 65 77 42 72 61 6e 63 char *zNewBranc
79f0: 68 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 h;. const char
7a00: 2a 7a 43 6c 6f 73 65 46 6c 61 67 3b 0a 20 20 69 *zCloseFlag;. i
7a10: 6e 74 20 66 50 72 6f 70 61 67 61 74 65 43 6f 6c nt fPropagateCol
7a20: 6f 72 3b 0a 20 20 63 68 61 72 20 2a 7a 55 75 69 or;. char *zUui
7a30: 64 3b 0a 20 20 42 6c 6f 62 20 63 6f 6d 6d 65 6e d;. Blob commen
7a40: 74 3b 0a 20 20 53 74 6d 74 20 71 3b 0a 20 20 73 t;. Stmt q;. s
7a50: 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 tatic const stru
7a60: 63 74 20 53 61 6d 70 6c 65 43 6f 6c 6f 72 73 20 ct SampleColors
7a70: 7b 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 {. const cha
7a80: 72 20 2a 7a 43 4e 61 6d 65 3b 0a 20 20 20 20 20 r *zCName;.
7a90: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c const char *zCol
7aa0: 6f 72 3b 0a 20 20 7d 20 61 43 6f 6c 6f 72 5b 5d or;. } aColor[]
7ab0: 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 28 6e 6f = {. { "(no
7ac0: 6e 65 29 22 2c 20 20 22 22 20 7d 2c 0a 20 20 20 ne)", "" },.
7ad0: 20 20 7b 20 22 23 66 32 64 63 64 63 22 2c 20 22 { "#f2dcdc", "
7ae0: 23 66 32 64 63 64 63 22 20 7d 2c 0a 20 20 20 20 #f2dcdc" },.
7af0: 20 7b 20 22 23 66 30 66 66 63 30 22 2c 20 22 23 { "#f0ffc0", "#
7b00: 66 30 66 66 63 30 22 20 7d 2c 0a 20 20 20 20 20 f0ffc0" },.
7b10: 7b 20 22 23 62 64 65 35 64 36 22 2c 20 22 23 62 { "#bde5d6", "#b
7b20: 64 65 35 64 36 22 20 7d 2c 0a 20 20 20 20 20 7b de5d6" },. {
7b30: 20 22 23 63 30 66 66 63 30 22 2c 20 22 23 63 30 "#c0ffc0", "#c0
7b40: 66 66 63 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 ffc0" },. {
7b50: 22 23 63 30 66 66 66 30 22 2c 20 22 23 63 30 66 "#c0fff0", "#c0f
7b60: 66 66 30 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 ff0" },. { "
7b70: 23 63 30 66 30 66 66 22 2c 20 22 23 63 30 66 30 #c0f0ff", "#c0f0
7b80: 66 66 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 ff" },. { "#
7b90: 64 30 63 30 66 66 22 2c 20 22 23 64 30 63 30 66 d0c0ff", "#d0c0f
7ba0: 66 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 66 f" },. { "#f
7bb0: 66 63 30 66 66 22 2c 20 22 23 66 66 63 30 66 66 fc0ff", "#ffc0ff
7bc0: 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 66 66 " },. { "#ff
7bd0: 63 30 64 30 22 2c 20 22 23 66 66 63 30 64 30 22 c0d0", "#ffc0d0"
7be0: 20 7d 2c 0a 20 20 20 20 20 7b 20 22 23 66 66 66 },. { "#fff
7bf0: 30 63 30 22 2c 20 22 23 66 66 66 30 63 30 22 20 0c0", "#fff0c0"
7c00: 7d 2c 0a 20 20 20 20 20 7b 20 22 23 63 30 63 30 },. { "#c0c0
7c10: 63 30 22 2c 20 22 23 63 30 63 30 63 30 22 20 7d c0", "#c0c0c0" }
7c20: 2c 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 6e 43 6f ,. };. int nCo
7c30: 6c 6f 72 20 3d 20 73 69 7a 65 6f 66 28 61 43 6f lor = sizeof(aCo
7c40: 6c 6f 72 29 2f 73 69 7a 65 6f 66 28 61 43 6f 6c lor)/sizeof(aCol
7c50: 6f 72 5b 30 5d 29 3b 0a 20 20 69 6e 74 20 69 3b or[0]);. int i;
7c60: 0a 20 20 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 . . login_chec
7c70: 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b k_credentials();
7c80: 0a 20 20 69 66 28 20 21 67 2e 6f 6b 57 72 69 74 . if( !g.okWrit
7c90: 65 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 e ){ login_neede
7ca0: 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a 20 d(); return; }.
7cb0: 20 72 69 64 20 3d 20 61 74 6f 69 28 50 44 28 22 rid = atoi(PD("
7cc0: 72 22 2c 22 30 22 29 29 3b 0a 20 20 7a 55 75 69 r","0"));. zUui
7cd0: 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 d = db_text(0, "
7ce0: 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f 4d SELECT uuid FROM
7cf0: 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64 3d blob WHERE rid=
7d00: 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 7a 43 6f %d", rid);. zCo
7d10: 6d 6d 65 6e 74 20 3d 20 64 62 5f 74 65 78 74 28 mment = db_text(
7d20: 30 2c 20 22 53 45 4c 45 43 54 20 63 6f 61 6c 65 0, "SELECT coale
7d30: 73 63 65 28 65 63 6f 6d 6d 65 6e 74 2c 63 6f 6d sce(ecomment,com
7d40: 6d 65 6e 74 29 22 0a 20 20 20 20 20 20 20 20 20 ment)".
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
7d60: 20 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 FROM event WHE
7d70: 52 45 20 6f 62 6a 69 64 3d 25 64 22 2c 20 72 69 RE objid=%d", ri
7d80: 64 29 3b 0a 20 20 69 66 28 20 7a 43 6f 6d 6d 65 d);. if( zComme
7d90: 6e 74 3d 3d 30 20 29 20 66 6f 73 73 69 6c 5f 72 nt==0 ) fossil_r
7da0: 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0a edirect_home();.
7db0: 20 20 69 66 28 20 50 28 22 63 61 6e 63 65 6c 22 if( P("cancel"
7dc0: 29 20 29 7b 0a 20 20 20 20 63 67 69 5f 72 65 64 ) ){. cgi_red
7dd0: 69 72 65 63 74 66 28 22 63 69 3f 6e 61 6d 65 3d irectf("ci?name=
7de0: 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 7d 0a 20 %d", rid);. }.
7df0: 20 7a 4e 65 77 43 6f 6d 6d 65 6e 74 20 3d 20 50 zNewComment = P
7e00: 44 28 22 63 22 2c 7a 43 6f 6d 6d 65 6e 74 29 3b D("c",zComment);
7e10: 0a 20 20 7a 55 73 65 72 20 3d 20 64 62 5f 74 65 . zUser = db_te
7e20: 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 63 6f xt(0, "SELECT co
7e30: 61 6c 65 73 63 65 28 65 75 73 65 72 2c 75 73 65 alesce(euser,use
7e40: 72 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 r)".
7e50: 20 20 20 20 20 20 20 20 20 22 20 20 46 52 4f 4d " FROM
7e60: 20 65 76 65 6e 74 20 57 48 45 52 45 20 6f 62 6a event WHERE obj
7e70: 69 64 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 id=%d", rid);.
7e80: 69 66 28 20 7a 55 73 65 72 3d 3d 30 20 29 20 66 if( zUser==0 ) f
7e90: 6f 73 73 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 ossil_redirect_h
7ea0: 6f 6d 65 28 29 3b 0a 20 20 7a 4e 65 77 55 73 65 ome();. zNewUse
7eb0: 72 20 3d 20 50 44 28 22 75 22 2c 7a 55 73 65 72 r = PD("u",zUser
7ec0: 29 3b 0a 20 20 7a 44 61 74 65 20 3d 20 64 62 5f );. zDate = db_
7ed0: 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 text(0, "SELECT
7ee0: 64 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 22 datetime(mtime)"
7ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7f00: 20 20 20 20 20 20 22 20 20 46 52 4f 4d 20 65 76 " FROM ev
7f10: 65 6e 74 20 57 48 45 52 45 20 6f 62 6a 69 64 3d ent WHERE objid=
7f20: 25 64 22 2c 20 72 69 64 29 3b 0a 20 20 69 66 28 %d", rid);. if(
7f30: 20 7a 44 61 74 65 3d 3d 30 20 29 20 66 6f 73 73 zDate==0 ) foss
7f40: 69 6c 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 il_redirect_home
7f50: 28 29 3b 0a 20 20 7a 4e 65 77 44 61 74 65 20 3d ();. zNewDate =
7f60: 20 50 44 28 22 64 74 22 2c 7a 44 61 74 65 29 3b PD("dt",zDate);
7f70: 0a 20 20 7a 43 6f 6c 6f 72 20 3d 20 64 62 5f 74 . zColor = db_t
7f80: 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43 54 20 ext("", "SELECT
7f90: 62 67 63 6f 6c 6f 72 22 0a 20 20 20 20 20 20 20 bgcolor".
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7fb0: 20 22 20 20 46 52 4f 4d 20 65 76 65 6e 74 20 57 " FROM event W
7fc0: 48 45 52 45 20 6f 62 6a 69 64 3d 25 64 22 2c 20 HERE objid=%d",
7fd0: 72 69 64 29 3b 0a 20 20 7a 4e 65 77 43 6f 6c 6f rid);. zNewColo
7fe0: 72 20 3d 20 50 44 28 22 63 6c 72 22 2c 7a 43 6f r = PD("clr",zCo
7ff0: 6c 6f 72 29 3b 0a 20 20 66 50 72 6f 70 61 67 61 lor);. fPropaga
8000: 74 65 43 6f 6c 6f 72 20 3d 20 50 28 22 70 63 6c teColor = P("pcl
8010: 72 22 29 21 3d 30 3b 0a 20 20 7a 4e 65 77 54 61 r")!=0;. zNewTa
8020: 67 46 6c 61 67 20 3d 20 50 28 22 6e 65 77 74 61 gFlag = P("newta
8030: 67 22 29 20 3f 20 22 20 63 68 65 63 6b 65 64 22 g") ? " checked"
8040: 20 3a 20 22 22 3b 0a 20 20 7a 4e 65 77 54 61 67 : "";. zNewTag
8050: 20 3d 20 50 44 28 22 74 61 67 6e 61 6d 65 22 2c = PD("tagname",
8060: 22 22 29 3b 0a 20 20 7a 4e 65 77 42 72 46 6c 61 "");. zNewBrFla
8070: 67 20 3d 20 50 28 22 6e 65 77 62 72 22 29 20 3f g = P("newbr") ?
8080: 20 22 20 63 68 65 63 6b 65 64 22 20 3a 20 22 22 " checked" : ""
8090: 3b 0a 20 20 7a 4e 65 77 42 72 61 6e 63 68 20 3d ;. zNewBranch =
80a0: 20 50 44 28 22 62 72 6e 61 6d 65 22 2c 22 22 29 PD("brname","")
80b0: 3b 0a 20 20 7a 43 6c 6f 73 65 46 6c 61 67 20 3d ;. zCloseFlag =
80c0: 20 50 28 22 63 6c 6f 73 65 22 29 20 3f 20 22 20 P("close") ? "
80d0: 63 68 65 63 6b 65 64 22 20 3a 20 22 22 3b 0a 20 checked" : "";.
80e0: 20 69 66 28 20 50 28 22 61 70 70 6c 79 22 29 20 if( P("apply")
80f0: 29 7b 0a 20 20 20 20 42 6c 6f 62 20 63 74 72 6c ){. Blob ctrl
8100: 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 ;. char *zDat
8110: 65 3b 0a 20 20 20 20 69 6e 74 20 6e 43 68 6e 67 e;. int nChng
8120: 20 3d 20 30 3b 0a 0a 20 20 20 20 6c 6f 67 69 6e = 0;.. login
8130: 5f 76 65 72 69 66 79 5f 63 73 72 66 5f 73 65 63 _verify_csrf_sec
8140: 72 65 74 28 29 3b 0a 20 20 20 20 62 6c 6f 62 5f ret();. blob_
8150: 7a 65 72 6f 28 26 63 74 72 6c 29 3b 0a 20 20 20 zero(&ctrl);.
8160: 20 7a 44 61 74 65 20 3d 20 64 62 5f 74 65 78 74 zDate = db_text
8170: 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61 74 65 (0, "SELECT date
8180: 74 69 6d 65 28 27 6e 6f 77 27 29 22 29 3b 0a 20 time('now')");.
8190: 20 20 20 7a 44 61 74 65 5b 31 30 5d 20 3d 20 27 zDate[10] = '
81a0: 54 27 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 T';. blob_app
81b0: 65 6e 64 66 28 26 63 74 72 6c 2c 20 22 44 20 25 endf(&ctrl, "D %
81c0: 73 5c 6e 22 2c 20 7a 44 61 74 65 29 3b 0a 20 20 s\n", zDate);.
81d0: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 db_multi_exec(
81e0: 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 "CREATE TEMP TAB
81f0: 4c 45 20 6e 65 77 74 61 67 73 28 74 61 67 20 55 LE newtags(tag U
8200: 4e 49 51 55 45 2c 20 70 72 65 66 69 78 2c 20 76 NIQUE, prefix, v
8210: 61 6c 75 65 29 22 29 3b 0a 20 20 20 20 69 66 28 alue)");. if(
8220: 20 7a 4e 65 77 43 6f 6c 6f 72 5b 30 5d 20 26 26 zNewColor[0] &&
8230: 20 73 74 72 63 6d 70 28 7a 43 6f 6c 6f 72 2c 7a strcmp(zColor,z
8240: 4e 65 77 43 6f 6c 6f 72 29 21 3d 30 20 29 7b 0a NewColor)!=0 ){.
8250: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 50 72 65 char *zPre
8260: 66 69 78 20 3d 20 22 2b 22 3b 0a 20 20 20 20 20 fix = "+";.
8270: 20 69 66 28 20 66 50 72 6f 70 61 67 61 74 65 43 if( fPropagateC
8280: 6f 6c 6f 72 20 29 7b 0a 20 20 20 20 20 20 20 20 olor ){.
8290: 7a 50 72 65 66 69 78 20 3d 20 22 2a 22 3b 0a 20 zPrefix = "*";.
82a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 62 5f }. db_
82b0: 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c multi_exec("REPL
82c0: 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 ACE INTO newtags
82d0: 20 56 41 4c 55 45 53 28 27 62 67 63 6f 6c 6f 72 VALUES('bgcolor
82e0: 27 2c 25 51 2c 25 51 29 22 2c 0a 20 20 20 20 20 ',%Q,%Q)",.
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a z
8300: 50 72 65 66 69 78 2c 20 7a 4e 65 77 43 6f 6c 6f Prefix, zNewColo
8310: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 r);. }. if
8320: 28 20 7a 4e 65 77 43 6f 6c 6f 72 5b 30 5d 3d 3d ( zNewColor[0]==
8330: 30 20 26 26 20 7a 43 6f 6c 6f 72 5b 30 5d 21 3d 0 && zColor[0]!=
8340: 30 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 6d 75 0 ){. db_mu
8350: 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 lti_exec("REPLAC
8360: 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 E INTO newtags V
8370: 41 4c 55 45 53 28 27 62 67 63 6f 6c 6f 72 27 2c ALUES('bgcolor',
8380: 27 2d 27 2c 4e 55 4c 4c 29 22 29 3b 0a 20 20 20 '-',NULL)");.
8390: 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d }. if( strcm
83a0: 70 28 7a 43 6f 6d 6d 65 6e 74 2c 7a 4e 65 77 43 p(zComment,zNewC
83b0: 6f 6d 6d 65 6e 74 29 21 3d 30 20 29 7b 0a 20 20 omment)!=0 ){.
83c0: 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 db_multi_exe
83d0: 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 c("REPLACE INTO
83e0: 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 newtags VALUES('
83f0: 63 6f 6d 6d 65 6e 74 27 2c 27 2b 27 2c 25 51 29 comment','+',%Q)
8400: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ",.
8410: 20 20 20 20 20 20 20 7a 4e 65 77 43 6f 6d 6d 65 zNewComme
8420: 6e 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 nt);. }. i
8430: 66 28 20 73 74 72 63 6d 70 28 7a 44 61 74 65 2c f( strcmp(zDate,
8440: 7a 4e 65 77 44 61 74 65 29 21 3d 30 20 29 7b 0a zNewDate)!=0 ){.
8450: 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 db_multi_e
8460: 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 xec("REPLACE INT
8470: 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 O newtags VALUES
8480: 28 27 64 61 74 65 27 2c 27 2b 27 2c 25 51 29 22 ('date','+',%Q)"
8490: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
84a0: 20 20 20 20 20 20 7a 4e 65 77 44 61 74 65 29 3b zNewDate);
84b0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 . }. if( s
84c0: 74 72 63 6d 70 28 7a 55 73 65 72 2c 7a 4e 65 77 trcmp(zUser,zNew
84d0: 55 73 65 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 User)!=0 ){.
84e0: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 db_multi_exec(
84f0: 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 "REPLACE INTO ne
8500: 77 74 61 67 73 20 56 41 4c 55 45 53 28 27 75 73 wtags VALUES('us
8510: 65 72 27 2c 27 2b 27 2c 25 51 29 22 2c 20 7a 4e er','+',%Q)", zN
8520: 65 77 55 73 65 72 29 3b 0a 20 20 20 20 7d 0a 20 ewUser);. }.
8530: 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 db_prepare(&q
8540: 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 ,. "SELECT
8550: 20 74 61 67 2e 74 61 67 69 64 2c 20 74 61 67 6e tag.tagid, tagn
8560: 61 6d 65 20 46 52 4f 4d 20 74 61 67 78 72 65 66 ame FROM tagxref
8570: 2c 20 74 61 67 22 0a 20 20 20 20 20 20 20 22 20 , tag". "
8580: 57 48 45 52 45 20 74 61 67 78 72 65 66 2e 72 69 WHERE tagxref.ri
8590: 64 3d 25 64 20 41 4e 44 20 74 61 67 74 79 70 65 d=%d AND tagtype
85a0: 3e 30 20 41 4e 44 20 74 61 67 78 72 65 66 2e 74 >0 AND tagxref.t
85b0: 61 67 69 64 3d 74 61 67 2e 74 61 67 69 64 22 2c agid=tag.tagid",
85c0: 0a 20 20 20 20 20 20 20 72 69 64 0a 20 20 20 20 . rid.
85d0: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 64 62 );. while( db
85e0: 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 _step(&q)==SQLIT
85f0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 69 E_ROW ){. i
8600: 6e 74 20 74 61 67 69 64 20 3d 20 64 62 5f 63 6f nt tagid = db_co
8610: 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 30 29 3b lumn_int(&q, 0);
8620: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 . const cha
8630: 72 20 2a 7a 54 61 67 20 3d 20 64 62 5f 63 6f 6c r *zTag = db_col
8640: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 3b umn_text(&q, 1);
8650: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c 61 62 . char zLab
8660: 65 6c 5b 33 30 5d 3b 0a 20 20 20 20 20 20 73 70 el[30];. sp
8670: 72 69 6e 74 66 28 7a 4c 61 62 65 6c 2c 20 22 63 rintf(zLabel, "c
8680: 25 64 22 2c 20 74 61 67 69 64 29 3b 0a 20 20 20 %d", tagid);.
8690: 20 20 20 69 66 28 20 50 28 7a 4c 61 62 65 6c 29 if( P(zLabel)
86a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 5f 6d ){. db_m
86b0: 75 6c 74 69 5f 65 78 65 63 28 22 52 45 50 4c 41 ulti_exec("REPLA
86c0: 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 CE INTO newtags
86d0: 56 41 4c 55 45 53 28 25 51 2c 27 2d 27 2c 4e 55 VALUES(%Q,'-',NU
86e0: 4c 4c 29 22 2c 20 7a 54 61 67 29 3b 0a 20 20 20 LL)", zTag);.
86f0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 64 }. }. d
8700: 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b 0a b_finalize(&q);.
8710: 20 20 20 20 69 66 28 20 7a 43 6c 6f 73 65 46 6c if( zCloseFl
8720: 61 67 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 64 ag[0] ){. d
8730: 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 52 45 b_multi_exec("RE
8740: 50 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 PLACE INTO newta
8750: 67 73 20 56 41 4c 55 45 53 28 27 63 6c 6f 73 65 gs VALUES('close
8760: 64 27 2c 27 2b 27 2c 4e 55 4c 4c 29 22 29 3b 0a d','+',NULL)");.
8770: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 4e }. if( zN
8780: 65 77 54 61 67 46 6c 61 67 5b 30 5d 20 29 7b 0a ewTagFlag[0] ){.
8790: 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 db_multi_e
87a0: 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e 54 xec("REPLACE INT
87b0: 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 45 53 O newtags VALUES
87c0: 28 27 73 79 6d 2d 25 71 27 2c 27 2b 27 2c 4e 55 ('sym-%q','+',NU
87d0: 4c 4c 29 22 2c 20 7a 4e 65 77 54 61 67 29 3b 0a LL)", zNewTag);.
87e0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 4e }. if( zN
87f0: 65 77 42 72 46 6c 61 67 5b 30 5d 20 29 7b 0a 20 ewBrFlag[0] ){.
8800: 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 db_multi_ex
8810: 65 63 28 0a 20 20 20 20 20 20 20 20 22 52 45 50 ec(. "REP
8820: 4c 41 43 45 20 49 4e 54 4f 20 6e 65 77 74 61 67 LACE INTO newtag
8830: 73 20 22 0a 20 20 20 20 20 20 20 20 22 20 53 45 s ". " SE
8840: 4c 45 43 54 20 74 61 67 6e 61 6d 65 2c 20 27 2d LECT tagname, '-
8850: 27 2c 20 4e 55 4c 4c 20 46 52 4f 4d 20 74 61 67 ', NULL FROM tag
8860: 78 72 65 66 2c 20 74 61 67 22 0a 20 20 20 20 20 xref, tag".
8870: 20 20 20 22 20 20 57 48 45 52 45 20 74 61 67 78 " WHERE tagx
8880: 72 65 66 2e 72 69 64 3d 25 64 20 41 4e 44 20 74 ref.rid=%d AND t
8890: 61 67 74 79 70 65 3d 3d 32 22 0a 20 20 20 20 20 agtype==2".
88a0: 20 20 20 22 20 20 20 20 41 4e 44 20 74 61 67 6e " AND tagn
88b0: 61 6d 65 20 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 ame GLOB 'sym-*'
88c0: 22 0a 20 20 20 20 20 20 20 20 22 20 20 20 20 41 ". " A
88d0: 4e 44 20 74 61 67 2e 74 61 67 69 64 3d 74 61 67 ND tag.tagid=tag
88e0: 78 72 65 66 2e 74 61 67 69 64 22 2c 0a 20 20 20 xref.tagid",.
88f0: 20 20 20 20 20 72 69 64 0a 20 20 20 20 20 20 29 rid. )
8900: 3b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 69 ;. db_multi
8910: 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 _exec("REPLACE I
8920: 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c 55 NTO newtags VALU
8930: 45 53 28 27 62 72 61 6e 63 68 27 2c 27 2a 27 2c ES('branch','*',
8940: 25 51 29 22 2c 20 7a 4e 65 77 42 72 61 6e 63 68 %Q)", zNewBranch
8950: 29 3b 0a 20 20 20 20 20 20 64 62 5f 6d 75 6c 74 );. db_mult
8960: 69 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 i_exec("REPLACE
8970: 49 4e 54 4f 20 6e 65 77 74 61 67 73 20 56 41 4c INTO newtags VAL
8980: 55 45 53 28 27 73 79 6d 2d 25 71 27 2c 27 2a 27 UES('sym-%q','*'
8990: 2c 4e 55 4c 4c 29 22 2c 0a 20 20 20 20 20 20 20 ,NULL)",.
89a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 65 zNe
89b0: 77 42 72 61 6e 63 68 29 3b 0a 20 20 20 20 7d 0a wBranch);. }.
89c0: 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 db_prepare(&
89d0: 71 2c 20 22 53 45 4c 45 43 54 20 74 61 67 2c 20 q, "SELECT tag,
89e0: 70 72 65 66 69 78 2c 20 76 61 6c 75 65 20 46 52 prefix, value FR
89f0: 4f 4d 20 6e 65 77 74 61 67 73 22 0a 20 20 20 20 OM newtags".
8a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
8a10: 20 4f 52 44 45 52 20 42 59 20 70 72 65 66 69 78 ORDER BY prefix
8a20: 20 7c 7c 20 74 61 67 22 29 3b 0a 20 20 20 20 77 || tag");. w
8a30: 68 69 6c 65 28 20 64 62 5f 73 74 65 70 28 26 71 hile( db_step(&q
8a40: 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b )==SQLITE_ROW ){
8a50: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 . const cha
8a60: 72 20 2a 7a 54 61 67 20 3d 20 64 62 5f 63 6f 6c r *zTag = db_col
8a70: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29 3b umn_text(&q, 0);
8a80: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 . const cha
8a90: 72 20 2a 7a 50 72 65 66 69 78 20 3d 20 64 62 5f r *zPrefix = db_
8aa0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 column_text(&q,
8ab0: 31 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 1);. const
8ac0: 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 3d 20 64 char *zValue = d
8ad0: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
8ae0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 6e 43 68 6e , 2);. nChn
8af0: 67 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 7a g++;. if( z
8b00: 56 61 6c 75 65 20 29 7b 0a 20 20 20 20 20 20 20 Value ){.
8b10: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 63 blob_appendf(&c
8b20: 74 72 6c 2c 20 22 54 20 25 73 25 46 20 25 73 20 trl, "T %s%F %s
8b30: 25 46 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 %F\n", zPrefix,
8b40: 7a 54 61 67 2c 20 7a 55 75 69 64 2c 20 7a 56 61 zTag, zUuid, zVa
8b50: 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 lue);. }els
8b60: 65 7b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f e{. blob_
8b70: 61 70 70 65 6e 64 66 28 26 63 74 72 6c 2c 20 22 appendf(&ctrl, "
8b80: 54 20 25 73 25 46 20 25 73 5c 6e 22 2c 20 7a 50 T %s%F %s\n", zP
8b90: 72 65 66 69 78 2c 20 7a 54 61 67 2c 20 7a 55 75 refix, zTag, zUu
8ba0: 69 64 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 id);. }.
8bb0: 20 7d 0a 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 }. db_finali
8bc0: 7a 65 28 26 71 29 3b 0a 20 20 20 20 69 66 28 20 ze(&q);. if(
8bd0: 6e 43 68 6e 67 3e 30 20 29 7b 0a 20 20 20 20 20 nChng>0 ){.
8be0: 20 69 6e 74 20 6e 72 69 64 3b 0a 20 20 20 20 20 int nrid;.
8bf0: 20 42 6c 6f 62 20 63 6b 73 75 6d 3b 0a 20 20 20 Blob cksum;.
8c00: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
8c10: 26 63 74 72 6c 2c 20 22 55 20 25 46 5c 6e 22 2c &ctrl, "U %F\n",
8c20: 20 67 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 20 20 20 g.zLogin);.
8c30: 20 20 6d 64 35 73 75 6d 5f 62 6c 6f 62 28 26 63 md5sum_blob(&c
8c40: 74 72 6c 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 trl, &cksum);.
8c50: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 blob_appendf
8c60: 28 26 63 74 72 6c 2c 20 22 5a 20 25 62 5c 6e 22 (&ctrl, "Z %b\n"
8c70: 2c 20 26 63 6b 73 75 6d 29 3b 0a 20 20 20 20 20 , &cksum);.
8c80: 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 db_begin_transa
8c90: 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 20 20 67 ction();. g
8ca0: 2e 6d 61 72 6b 50 72 69 76 61 74 65 20 3d 20 63 .markPrivate = c
8cb0: 6f 6e 74 65 6e 74 5f 69 73 5f 70 72 69 76 61 74 ontent_is_privat
8cc0: 65 28 72 69 64 29 3b 0a 20 20 20 20 20 20 6e 72 e(rid);. nr
8cd0: 69 64 20 3d 20 63 6f 6e 74 65 6e 74 5f 70 75 74 id = content_put
8ce0: 28 26 63 74 72 6c 2c 20 30 2c 20 30 29 3b 0a 20 (&ctrl, 0, 0);.
8cf0: 20 20 20 20 20 6d 61 6e 69 66 65 73 74 5f 63 72 manifest_cr
8d00: 6f 73 73 6c 69 6e 6b 28 6e 72 69 64 2c 20 26 63 osslink(nrid, &c
8d10: 74 72 6c 29 3b 0a 20 20 20 20 20 20 64 62 5f 65 trl);. db_e
8d20: 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 30 nd_transaction(0
8d30: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 67 69 );. }. cgi
8d40: 5f 72 65 64 69 72 65 63 74 66 28 22 63 69 3f 6e _redirectf("ci?n
8d50: 61 6d 65 3d 25 64 22 2c 20 72 69 64 29 3b 0a 20 ame=%d", rid);.
8d60: 20 7d 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 }. blob_zero(&
8d70: 63 6f 6d 6d 65 6e 74 29 3b 0a 20 20 62 6c 6f 62 comment);. blob
8d80: 5f 61 70 70 65 6e 64 28 26 63 6f 6d 6d 65 6e 74 _append(&comment
8d90: 2c 20 7a 4e 65 77 43 6f 6d 6d 65 6e 74 2c 20 2d , zNewComment, -
8da0: 31 29 3b 0a 20 20 7a 55 75 69 64 5b 31 30 5d 20 1);. zUuid[10]
8db0: 3d 20 30 3b 0a 20 20 73 74 79 6c 65 5f 68 65 61 = 0;. style_hea
8dc0: 64 65 72 28 22 45 64 69 74 20 43 68 65 63 6b 2d der("Edit Check-
8dd0: 69 6e 20 5b 25 73 5d 22 2c 20 7a 55 75 69 64 29 in [%s]", zUuid)
8de0: 3b 0a 20 20 69 66 28 20 50 28 22 70 72 65 76 69 ;. if( P("previ
8df0: 65 77 22 29 20 29 7b 0a 20 20 20 20 42 6c 6f 62 ew") ){. Blob
8e00: 20 73 75 66 66 69 78 3b 0a 20 20 20 20 69 6e 74 suffix;. int
8e10: 20 6e 54 61 67 20 3d 20 30 3b 0a 20 20 20 20 40 nTag = 0;. @
8e20: 20 3c 62 3e 50 72 65 76 69 65 77 3a 3c 2f 62 3e <b>Preview:</b>
8e30: 0a 20 20 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f . @ <blockquo
8e40: 74 65 3e 0a 20 20 20 20 40 20 3c 74 61 62 6c 65 te>. @ <table
8e50: 20 62 6f 72 64 65 72 3d 30 3e 0a 20 20 20 20 69 border=0>. i
8e60: 66 28 20 7a 4e 65 77 43 6f 6c 6f 72 20 26 26 20 f( zNewColor &&
8e70: 7a 4e 65 77 43 6f 6c 6f 72 5b 30 5d 20 29 7b 0a zNewColor[0] ){.
8e80: 20 20 20 20 20 20 40 20 3c 74 72 3e 3c 74 64 20 @ <tr><td
8e90: 62 67 63 6f 6c 6f 72 3d 22 25 68 28 7a 4e 65 77 bgcolor="%h(zNew
8ea0: 43 6f 6c 6f 72 29 22 3e 0a 20 20 20 20 7d 65 6c Color)">. }el
8eb0: 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 74 72 3e se{. @ <tr>
8ec0: 3c 74 64 3e 0a 20 20 20 20 7d 0a 20 20 20 20 77 <td>. }. w
8ed0: 69 6b 69 5f 63 6f 6e 76 65 72 74 28 26 63 6f 6d iki_convert(&com
8ee0: 6d 65 6e 74 2c 20 30 2c 20 57 49 4b 49 5f 49 4e ment, 0, WIKI_IN
8ef0: 4c 49 4e 45 29 3b 0a 20 20 20 20 62 6c 6f 62 5f LINE);. blob_
8f00: 7a 65 72 6f 28 26 73 75 66 66 69 78 29 3b 0a 20 zero(&suffix);.
8f10: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
8f20: 26 73 75 66 66 69 78 2c 20 22 28 75 73 65 72 3a &suffix, "(user:
8f30: 20 25 68 22 2c 20 7a 4e 65 77 55 73 65 72 29 3b %h", zNewUser);
8f40: 0a 20 20 20 20 64 62 5f 70 72 65 70 61 72 65 28 . db_prepare(
8f50: 26 71 2c 20 22 53 45 4c 45 43 54 20 73 75 62 73 &q, "SELECT subs
8f60: 74 72 28 74 61 67 6e 61 6d 65 2c 35 29 20 46 52 tr(tagname,5) FR
8f70: 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 61 67 22 OM tagxref, tag"
8f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8f90: 20 20 20 20 22 20 57 48 45 52 45 20 74 61 67 6e " WHERE tagn
8fa0: 61 6d 65 20 47 4c 4f 42 20 27 73 79 6d 2d 2a 27 ame GLOB 'sym-*'
8fb0: 20 41 4e 44 20 74 61 67 78 72 65 66 2e 72 69 64 AND tagxref.rid
8fc0: 3d 25 64 22 0a 20 20 20 20 20 20 20 20 20 20 20 =%d".
8fd0: 20 20 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 " AND
8fe0: 74 61 67 74 79 70 65 3e 31 20 41 4e 44 20 74 61 tagtype>1 AND ta
8ff0: 67 2e 74 61 67 69 64 3d 74 61 67 78 72 65 66 2e g.tagid=tagxref.
9000: 74 61 67 69 64 22 2c 0a 20 20 20 20 20 20 20 20 tagid",.
9010: 20 20 20 20 20 20 20 20 20 20 20 72 69 64 29 3b rid);
9020: 0a 20 20 20 20 77 68 69 6c 65 28 20 64 62 5f 73 . while( db_s
9030: 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f tep(&q)==SQLITE_
9040: 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e ROW ){. con
9050: 73 74 20 63 68 61 72 20 2a 7a 54 61 67 20 3d 20 st char *zTag =
9060: 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 db_column_text(&
9070: 71 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 q, 0);. if(
9080: 20 6e 54 61 67 3d 3d 30 20 29 7b 0a 20 20 20 20 nTag==0 ){.
9090: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 blob_appendf
90a0: 28 26 73 75 66 66 69 78 2c 20 22 2c 20 74 61 67 (&suffix, ", tag
90b0: 73 3a 20 25 68 22 2c 20 7a 54 61 67 29 3b 0a 20 s: %h", zTag);.
90c0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 }else{.
90d0: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 blob_appendf
90e0: 28 26 73 75 66 66 69 78 2c 20 22 2c 20 25 68 22 (&suffix, ", %h"
90f0: 2c 20 7a 54 61 67 29 3b 0a 20 20 20 20 20 20 7d , zTag);. }
9100: 0a 20 20 20 20 20 20 6e 54 61 67 2b 2b 3b 0a 20 . nTag++;.
9110: 20 20 20 7d 0a 20 20 20 20 64 62 5f 66 69 6e 61 }. db_fina
9120: 6c 69 7a 65 28 26 71 29 3b 0a 20 20 20 20 62 6c lize(&q);. bl
9130: 6f 62 5f 61 70 70 65 6e 64 66 28 26 73 75 66 66 ob_appendf(&suff
9140: 69 78 2c 20 22 29 22 29 3b 0a 20 20 20 20 40 20 ix, ")");. @
9150: 25 73 28 62 6c 6f 62 5f 73 74 72 28 26 73 75 66 %s(blob_str(&suf
9160: 66 69 78 29 29 0a 20 20 20 20 40 20 3c 2f 74 64 fix)). @ </td
9170: 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20 ></tr></table>.
9180: 20 20 20 40 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 @ </blockquot
9190: 65 3e 0a 20 20 20 20 40 20 3c 68 72 3e 0a 20 20 e>. @ <hr>.
91a0: 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 73 75 blob_reset(&su
91b0: 66 66 69 78 29 3b 0a 20 20 7d 0a 20 20 40 20 3c ffix);. }. @ <
91c0: 70 3e 4d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 p>Make changes t
91d0: 6f 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 o attributes of
91e0: 63 68 65 63 6b 2d 69 6e 0a 20 20 40 20 5b 3c 61 check-in. @ [<a
91f0: 20 68 72 65 66 3d 22 63 69 3f 6e 61 6d 65 3d 25 href="ci?name=%
9200: 64 28 72 69 64 29 22 3e 25 73 28 7a 55 75 69 64 d(rid)">%s(zUuid
9210: 29 3c 2f 61 3e 5d 3a 3c 2f 70 3e 0a 20 20 40 20 )</a>]:</p>. @
9220: 3c 66 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 25 73 <form action="%s
9230: 28 67 2e 7a 42 61 73 65 55 52 4c 29 2f 63 69 5f (g.zBaseURL)/ci_
9240: 65 64 69 74 22 20 6d 65 74 68 6f 64 3d 22 50 4f edit" method="PO
9250: 53 54 22 3e 0a 20 20 6c 6f 67 69 6e 5f 69 6e 73 ST">. login_ins
9260: 65 72 74 5f 63 73 72 66 5f 73 65 63 72 65 74 28 ert_csrf_secret(
9270: 29 3b 0a 20 20 40 20 3c 69 6e 70 75 74 20 74 79 );. @ <input ty
9280: 70 65 3d 22 68 69 64 64 65 6e 22 20 6e 61 6d 65 pe="hidden" name
9290: 3d 22 72 22 20 76 61 6c 75 65 3d 22 25 64 28 72 ="r" value="%d(r
92a0: 69 64 29 22 3e 0a 20 20 40 20 3c 74 61 62 6c 65 id)">. @ <table
92b0: 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c border="0" cell
92c0: 73 70 61 63 69 6e 67 3d 22 31 30 22 3e 0a 0a 20 spacing="10">..
92d0: 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e @ <tr><td align
92e0: 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d ="right" valign=
92f0: 22 74 6f 70 22 3e 3c 62 3e 55 73 65 72 3a 3c 2f "top"><b>User:</
9300: 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 b></td>. @ <td
9310: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 valign="top">.
9320: 40 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
9330: 22 74 65 78 74 22 20 6e 61 6d 65 3d 22 75 22 20 "text" name="u"
9340: 73 69 7a 65 3d 22 32 30 22 20 76 61 6c 75 65 3d size="20" value=
9350: 22 25 68 28 7a 4e 65 77 55 73 65 72 29 22 3e 0a "%h(zNewUser)">.
9360: 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a @ </td></tr>..
9370: 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 @ <tr><td alig
9380: 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e n="right" valign
9390: 3d 22 74 6f 70 22 3e 3c 62 3e 43 6f 6d 6d 65 6e ="top"><b>Commen
93a0: 74 3a 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 t:</b></td>. @
93b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 <td valign="top"
93c0: 3e 0a 20 20 40 20 3c 74 65 78 74 61 72 65 61 20 >. @ <textarea
93d0: 6e 61 6d 65 3d 22 63 22 20 72 6f 77 73 3d 22 31 name="c" rows="1
93e0: 30 22 20 63 6f 6c 73 3d 22 38 30 22 3e 25 68 28 0" cols="80">%h(
93f0: 7a 4e 65 77 43 6f 6d 6d 65 6e 74 29 3c 2f 74 65 zNewComment)</te
9400: 78 74 61 72 65 61 3e 0a 20 20 40 20 3c 2f 74 64 xtarea>. @ </td
9410: 3e 3c 2f 74 72 3e 0a 0a 20 20 40 20 3c 74 72 3e ></tr>.. @ <tr>
9420: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 <td align="right
9430: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c " valign="top"><
9440: 62 3e 43 68 65 63 6b 2d 69 6e 20 54 69 6d 65 3a b>Check-in Time:
9450: 3c 2f 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 </b></td>. @ <t
9460: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a d valign="top">.
9470: 20 20 40 20 20 20 3c 69 6e 70 75 74 20 74 79 70 @ <input typ
9480: 65 3d 22 74 65 78 74 22 20 6e 61 6d 65 3d 22 64 e="text" name="d
9490: 74 22 20 73 69 7a 65 3d 22 32 30 22 20 76 61 6c t" size="20" val
94a0: 75 65 3d 22 25 68 28 7a 4e 65 77 44 61 74 65 29 ue="%h(zNewDate)
94b0: 22 3e 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 ">. @ </td></tr
94c0: 3e 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 64 20 61 >.. @ <tr><td a
94d0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c lign="right" val
94e0: 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 42 61 63 ign="top"><b>Bac
94f0: 6b 67 72 6f 75 6e 64 20 43 6f 6c 6f 72 3a 3c 2f kground Color:</
9500: 62 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 74 64 20 b></td>. @ <td
9510: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 valign="top">.
9520: 40 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d @ <table border=
9530: 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 30 20 0 cellpadding=0
9540: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 31 3e 0a 20 cellspacing=1>.
9550: 20 40 20 3c 74 72 3e 3c 74 64 20 63 6f 6c 73 70 @ <tr><td colsp
9560: 61 6e 3d 22 36 22 20 61 6c 69 67 6e 3d 22 6c 65 an="6" align="le
9570: 66 74 22 3e 0a 20 20 69 66 28 20 66 50 72 6f 70 ft">. if( fProp
9580: 61 67 61 74 65 43 6f 6c 6f 72 20 29 7b 0a 20 20 agateColor ){.
9590: 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
95a0: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d "checkbox" name=
95b0: 22 70 63 6c 72 22 20 63 68 65 63 6b 65 64 3e 0a "pclr" checked>.
95c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 40 20 3c }else{. @ <
95d0: 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 input type="chec
95e0: 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 70 63 6c 72 kbox" name="pclr
95f0: 22 3e 0a 20 20 7d 0a 20 20 40 20 50 72 6f 70 61 ">. }. @ Propa
9600: 67 61 74 65 20 63 6f 6c 6f 72 20 74 6f 20 64 65 gate color to de
9610: 73 63 65 6e 64 61 6e 74 73 3c 2f 69 6e 70 75 74 scendants</input
9620: 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 ></td></tr>. @
9630: 3c 74 72 3e 0a 20 20 66 6f 72 28 69 3d 30 3b 20 <tr>. for(i=0;
9640: 69 3c 6e 43 6f 6c 6f 72 3b 20 69 2b 2b 29 7b 0a i<nColor; i++){.
9650: 20 20 20 20 69 66 28 20 61 43 6f 6c 6f 72 5b 69 if( aColor[i
9660: 5d 2e 7a 43 6f 6c 6f 72 5b 30 5d 20 29 7b 0a 20 ].zColor[0] ){.
9670: 20 20 20 20 20 40 20 3c 74 64 20 62 67 63 6f 6c @ <td bgcol
9680: 6f 72 3d 22 25 68 28 61 43 6f 6c 6f 72 5b 69 5d or="%h(aColor[i]
9690: 2e 7a 43 6f 6c 6f 72 29 22 3e 0a 20 20 20 20 7d .zColor)">. }
96a0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 3c 74 else{. @ <t
96b0: 64 3e 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 d>. }. if(
96c0: 20 73 74 72 63 6d 70 28 7a 4e 65 77 43 6f 6c 6f strcmp(zNewColo
96d0: 72 2c 20 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 6f r, aColor[i].zCo
96e0: 6c 6f 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 lor)==0 ){.
96f0: 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 @ <input type="
9700: 72 61 64 69 6f 22 20 6e 61 6d 65 3d 22 63 6c 72 radio" name="clr
9710: 22 20 76 61 6c 75 65 3d 22 25 68 28 61 43 6f 6c " value="%h(aCol
9720: 6f 72 5b 69 5d 2e 7a 43 6f 6c 6f 72 29 22 20 63 or[i].zColor)" c
9730: 68 65 63 6b 65 64 3e 0a 20 20 20 20 7d 65 6c 73 hecked>. }els
9740: 65 7b 0a 20 20 20 20 20 20 40 20 3c 69 6e 70 75 e{. @ <inpu
9750: 74 20 74 79 70 65 3d 22 72 61 64 69 6f 22 20 6e t type="radio" n
9760: 61 6d 65 3d 22 63 6c 72 22 20 76 61 6c 75 65 3d ame="clr" value=
9770: 22 25 68 28 61 43 6f 6c 6f 72 5b 69 5d 2e 7a 43 "%h(aColor[i].zC
9780: 6f 6c 6f 72 29 22 3e 0a 20 20 20 20 7d 0a 20 20 olor)">. }.
9790: 20 20 40 20 25 68 28 61 43 6f 6c 6f 72 5b 69 5d @ %h(aColor[i]
97a0: 2e 7a 43 4e 61 6d 65 29 3c 2f 69 6e 70 75 74 3e .zCName)</input>
97b0: 3c 2f 74 64 3e 0a 20 20 20 20 69 66 28 20 28 69 </td>. if( (i
97c0: 25 36 29 3d 3d 35 20 26 26 20 69 2b 31 3c 6e 43 %6)==5 && i+1<nC
97d0: 6f 6c 6f 72 20 29 7b 0a 20 20 20 20 20 20 40 20 olor ){. @
97e0: 3c 2f 74 72 3e 3c 74 72 3e 0a 20 20 20 20 7d 0a </tr><tr>. }.
97f0: 20 20 7d 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 }. @ </tr>.
9800: 40 20 3c 2f 74 61 62 6c 65 3e 0a 20 20 40 20 3c @ </table>. @ <
9810: 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 20 20 40 20 3c /td></tr>.. @ <
9820: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 tr><td align="ri
9830: 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 ght" valign="top
9840: 22 3e 3c 62 3e 54 61 67 73 3a 3c 2f 62 3e 3c 2f "><b>Tags:</b></
9850: 74 64 3e 0a 20 20 40 20 3c 74 64 20 76 61 6c 69 td>. @ <td vali
9860: 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 40 20 3c 69 gn="top">. @ <i
9870: 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b nput type="check
9880: 62 6f 78 22 20 6e 61 6d 65 3d 22 6e 65 77 74 61 box" name="newta
9890: 67 22 25 73 28 7a 4e 65 77 54 61 67 46 6c 61 67 g"%s(zNewTagFlag
98a0: 29 3e 0a 20 20 40 20 41 64 64 20 74 68 65 20 66 )>. @ Add the f
98b0: 6f 6c 6c 6f 77 69 6e 67 20 6e 65 77 20 74 61 67 ollowing new tag
98c0: 20 6e 61 6d 65 20 74 6f 20 74 68 69 73 20 63 68 name to this ch
98d0: 65 63 6b 2d 69 6e 3a 0a 20 20 40 20 3c 69 6e 70 eck-in:. @ <inp
98e0: 75 74 20 74 79 70 65 3d 22 74 65 78 74 22 20 77 ut type="text" w
98f0: 69 64 74 68 3d 22 31 35 22 20 6e 61 6d 65 3d 22 idth="15" name="
9900: 74 61 67 6e 61 6d 65 22 20 76 61 6c 75 65 3d 22 tagname" value="
9910: 25 68 28 7a 4e 65 77 54 61 67 29 22 3e 0a 20 20 %h(zNewTag)">.
9920: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 20 db_prepare(&q,.
9930: 20 20 20 20 22 53 45 4c 45 43 54 20 74 61 67 2e "SELECT tag.
9940: 74 61 67 69 64 2c 20 74 61 67 6e 61 6d 65 20 46 tagid, tagname F
9950: 52 4f 4d 20 74 61 67 78 72 65 66 2c 20 74 61 67 ROM tagxref, tag
9960: 22 0a 20 20 20 20 20 22 20 57 48 45 52 45 20 74 ". " WHERE t
9970: 61 67 78 72 65 66 2e 72 69 64 3d 25 64 20 41 4e agxref.rid=%d AN
9980: 44 20 74 61 67 74 79 70 65 3e 30 20 41 4e 44 20 D tagtype>0 AND
9990: 74 61 67 78 72 65 66 2e 74 61 67 69 64 3d 74 61 tagxref.tagid=ta
99a0: 67 2e 74 61 67 69 64 22 0a 20 20 20 20 20 22 20 g.tagid". "
99b0: 4f 52 44 45 52 20 42 59 20 43 41 53 45 20 57 48 ORDER BY CASE WH
99c0: 45 4e 20 74 61 67 6e 61 6d 65 20 47 4c 4f 42 20 EN tagname GLOB
99d0: 27 73 79 6d 2d 2a 27 20 54 48 45 4e 20 73 75 62 'sym-*' THEN sub
99e0: 73 74 72 28 74 61 67 6e 61 6d 65 2c 35 29 22 0a str(tagname,5)".
99f0: 20 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20 "
9a00: 20 20 20 20 20 45 4c 53 45 20 74 61 67 6e 61 6d ELSE tagnam
9a10: 65 20 45 4e 44 22 2c 0a 20 20 20 20 20 72 69 64 e END",. rid
9a20: 0a 20 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 64 . );. while( d
9a30: 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 b_step(&q)==SQLI
9a40: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 6e TE_ROW ){. in
9a50: 74 20 74 61 67 69 64 20 3d 20 64 62 5f 63 6f 6c t tagid = db_col
9a60: 75 6d 6e 5f 69 6e 74 28 26 71 2c 20 30 29 3b 0a umn_int(&q, 0);.
9a70: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
9a80: 7a 54 61 67 4e 61 6d 65 20 3d 20 64 62 5f 63 6f zTagName = db_co
9a90: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 31 29 lumn_text(&q, 1)
9aa0: 3b 0a 20 20 20 20 63 68 61 72 20 7a 4c 61 62 65 ;. char zLabe
9ab0: 6c 5b 33 30 5d 3b 0a 20 20 20 20 73 70 72 69 6e l[30];. sprin
9ac0: 74 66 28 7a 4c 61 62 65 6c 2c 20 22 63 25 64 22 tf(zLabel, "c%d"
9ad0: 2c 20 74 61 67 69 64 29 3b 0a 20 20 20 20 69 66 , tagid);. if
9ae0: 28 20 50 28 7a 4c 61 62 65 6c 29 20 29 7b 0a 20 ( P(zLabel) ){.
9af0: 20 20 20 20 20 40 20 3c 62 72 3e 3c 69 6e 70 75 @ <br><inpu
9b00: 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 t type="checkbox
9b10: 22 20 6e 61 6d 65 3d 22 63 25 64 28 74 61 67 69 " name="c%d(tagi
9b20: 64 29 22 20 63 68 65 63 6b 65 64 3e 0a 20 20 20 d)" checked>.
9b30: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 }else{. @
9b40: 3c 62 72 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d <br><input type=
9b50: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d "checkbox" name=
9b60: 22 63 25 64 28 74 61 67 69 64 29 22 3e 0a 20 20 "c%d(tagid)">.
9b70: 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 6e }. if( strn
9b80: 63 6d 70 28 7a 54 61 67 4e 61 6d 65 2c 20 22 73 cmp(zTagName, "s
9b90: 79 6d 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 ym-", 4)==0 ){.
9ba0: 20 20 20 20 20 40 20 43 61 6e 63 65 6c 20 74 61 @ Cancel ta
9bb0: 67 20 3c 62 3e 25 68 28 26 7a 54 61 67 4e 61 6d g <b>%h(&zTagNam
9bc0: 65 5b 34 5d 29 3c 2f 62 3e 0a 20 20 20 20 7d 65 e[4])</b>. }e
9bd0: 6c 73 65 7b 0a 20 20 20 20 20 20 40 20 43 61 6e lse{. @ Can
9be0: 63 65 6c 20 73 70 65 63 69 61 6c 20 74 61 67 20 cel special tag
9bf0: 3c 62 3e 25 68 28 7a 54 61 67 4e 61 6d 65 29 3c <b>%h(zTagName)<
9c00: 2f 62 3e 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 /b>. }. }.
9c10: 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 3b db_finalize(&q);
9c20: 0a 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a . @ </td></tr>.
9c30: 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73 74 73 . if( db_exists
9c40: 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 ("SELECT 1 FROM
9c50: 74 61 67 78 72 65 66 20 57 48 45 52 45 20 72 69 tagxref WHERE ri
9c60: 64 3d 25 64 20 41 4e 44 20 74 61 67 69 64 3d 25 d=%d AND tagid=%
9c70: 64 20 41 4e 44 20 73 72 63 69 64 3e 30 22 2c 0a d AND srcid>0",.
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9c90: 72 69 64 2c 20 54 41 47 5f 42 52 41 4e 43 48 29 rid, TAG_BRANCH)
9ca0: 3d 3d 30 20 29 7b 0a 20 20 20 20 40 20 3c 74 72 ==0 ){. @ <tr
9cb0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 ><td align="righ
9cc0: 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e t" valign="top">
9cd0: 3c 62 3e 42 72 61 6e 63 68 69 6e 67 3a 3c 2f 62 <b>Branching:</b
9ce0: 3e 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64 ></td>. @ <td
9cf0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 valign="top">.
9d00: 20 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 @ <input type
9d10: 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 ="checkbox" name
9d20: 3d 22 6e 65 77 62 72 22 25 73 28 7a 4e 65 77 42 ="newbr"%s(zNewB
9d30: 72 46 6c 61 67 29 3e 0a 20 20 20 20 40 20 4d 61 rFlag)>. @ Ma
9d40: 6b 65 20 74 68 69 73 20 63 68 65 63 6b 2d 69 6e ke this check-in
9d50: 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 61 20 the start of a
9d60: 6e 65 77 20 62 72 61 6e 63 68 20 6e 61 6d 65 64 new branch named
9d70: 3a 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 :. @ <input t
9d80: 79 70 65 3d 22 74 65 78 74 22 20 77 69 64 74 68 ype="text" width
9d90: 3d 22 31 35 22 20 6e 61 6d 65 3d 22 62 72 6e 61 ="15" name="brna
9da0: 6d 65 22 20 76 61 6c 75 65 3d 22 25 68 28 7a 4e me" value="%h(zN
9db0: 65 77 42 72 61 6e 63 68 29 22 3e 0a 20 20 20 20 ewBranch)">.
9dc0: 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 7d @ </td></tr>. }
9dd0: 0a 0a 20 20 69 66 28 20 69 73 5f 61 5f 6c 65 61 .. if( is_a_lea
9de0: 66 28 72 69 64 29 0a 20 20 20 26 26 20 21 64 62 f(rid). && !db
9df0: 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43 54 20 _exists("SELECT
9e00: 31 20 46 52 4f 4d 20 74 61 67 78 72 65 66 20 22 1 FROM tagxref "
9e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9e20: 20 20 22 20 57 48 45 52 45 20 74 61 67 69 64 3d " WHERE tagid=
9e30: 25 64 20 41 4e 44 20 72 69 64 3d 25 64 20 41 4e %d AND rid=%d AN
9e40: 44 20 74 61 67 74 79 70 65 3e 30 22 2c 0a 20 20 D tagtype>0",.
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
9e60: 41 47 5f 43 4c 4f 53 45 44 2c 20 72 69 64 29 0a AG_CLOSED, rid).
9e70: 20 20 29 7b 0a 20 20 20 20 40 20 3c 74 72 3e 3c ){. @ <tr><
9e80: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 td align="right"
9e90: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 valign="top"><b
9ea0: 3e 4c 65 61 66 20 43 6c 6f 73 75 72 65 3a 3c 2f >Leaf Closure:</
9eb0: 62 3e 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 b></td>. @ <t
9ec0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a d valign="top">.
9ed0: 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 @ <input typ
9ee0: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d e="checkbox" nam
9ef0: 65 3d 22 63 6c 6f 73 65 22 25 73 28 7a 43 6c 6f e="close"%s(zClo
9f00: 73 65 46 6c 61 67 29 3e 0a 20 20 20 20 40 20 4d seFlag)>. @ M
9f10: 61 72 6b 20 74 68 69 73 20 6c 65 61 66 20 61 73 ark this leaf as
9f20: 20 22 63 6c 6f 73 65 64 22 20 73 6f 20 74 68 61 "closed" so tha
9f30: 74 20 69 74 20 6e 6f 20 6c 6f 6e 67 65 72 20 61 t it no longer a
9f40: 70 70 65 61 72 73 20 6f 6e 20 74 68 65 0a 20 20 ppears on the.
9f50: 20 20 40 20 22 6c 65 61 76 65 73 22 20 70 61 67 @ "leaves" pag
9f60: 65 20 61 6e 64 20 69 73 20 6e 6f 20 6c 6f 6e 67 e and is no long
9f70: 65 72 20 6c 61 62 65 6c 65 64 20 61 73 20 61 20 er labeled as a
9f80: 22 3c 62 3e 4c 65 61 66 3c 2f 62 3e 22 2e 0a 20 "<b>Leaf</b>"..
9f90: 20 20 20 40 20 3c 2f 74 64 3e 3c 2f 74 72 3e 0a @ </td></tr>.
9fa0: 20 20 7d 0a 0a 0a 20 20 40 20 3c 74 72 3e 3c 74 }... @ <tr><t
9fb0: 64 20 63 6f 6c 73 70 61 6e 3d 22 32 22 3e 0a 20 d colspan="2">.
9fc0: 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 @ <input type="
9fd0: 73 75 62 6d 69 74 22 20 6e 61 6d 65 3d 22 70 72 submit" name="pr
9fe0: 65 76 69 65 77 22 20 76 61 6c 75 65 3d 22 50 72 eview" value="Pr
9ff0: 65 76 69 65 77 22 3e 0a 20 20 40 20 3c 69 6e 70 eview">. @ <inp
a000: 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 ut type="submit"
a010: 20 6e 61 6d 65 3d 22 61 70 70 6c 79 22 20 76 61 name="apply" va
a020: 6c 75 65 3d 22 41 70 70 6c 79 20 43 68 61 6e 67 lue="Apply Chang
a030: 65 73 22 3e 0a 20 20 40 20 3c 69 6e 70 75 74 20 es">. @ <input
a040: 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 type="submit" na
a050: 6d 65 3d 22 63 61 6e 63 65 6c 22 20 76 61 6c 75 me="cancel" valu
a060: 65 3d 22 43 61 6e 63 65 6c 22 3e 0a 20 20 40 20 e="Cancel">. @
a070: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 40 20 3c </td></tr>. @ <
a080: 2f 74 61 62 6c 65 3e 0a 20 20 40 20 3c 2f 66 6f /table>. @ </fo
a090: 72 6d 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 rm>. style_foot
a0a0: 65 72 28 29 3b 0a 7d 0a er();.}.