Artifact
38a14bbda9ea0df1c8ec41fbafe584088a9805e5 :
Executable file
parts/unpackskin
— part of check-in
[892c5f4a68]
at
2015-02-12 09:51:55
on branch trunk
— Fix config length field (must include card prefix size).
(user:
mario
size: 1263)
0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 70 68 70 20 2d #!/usr/bin/php -
0010: 71 43 0a 3c 3f 70 68 70 0a 23 0a 23 20 45 78 74 qC.<?php.#.# Ext
0020: 72 61 63 74 20 66 6f 73 73 69 6c 20 63 6f 6e 66 ract fossil conf
0030: 69 67 75 72 61 74 69 6f 6e 20 63 61 72 64 20 2e iguration card .
0040: 74 78 74 20 66 69 6c 65 20 74 6f 20 73 75 62 64 txt file to subd
0050: 69 72 65 63 74 6f 72 79 2e 0a 23 0a 23 20 53 70 irectory..#.# Sp
0060: 6c 69 74 20 75 70 20 69 6e 74 6f 20 69 6e 64 69 lit up into indi
0070: 76 69 64 75 61 6c 20 63 6f 6e 66 69 67 20 73 65 vidual config se
0080: 63 74 69 6f 6e 73 3a 0a 23 20 20 20 20 20 20 75 ctions:.# u
0090: 6e 70 61 63 6b 73 6b 69 6e 20 73 6b 69 6e 2e 74 npackskin skin.t
00a0: 78 74 20 64 69 72 2f 0a 23 0a 23 20 57 6f 75 6c xt dir/.#.# Woul
00b0: 64 20 63 72 65 61 74 65 3a 0a 23 20 20 20 20 20 d create:.#
00c0: 20 2a 20 64 69 72 2f 6e 61 6d 65 2e 68 65 61 64 * dir/name.head
00d0: 65 72 0a 23 20 20 20 20 20 20 2a 20 64 69 72 2f er.# * dir/
00e0: 6e 61 6d 65 2e 66 6f 6f 74 65 72 0a 23 20 20 20 name.footer.#
00f0: 20 20 20 2a 20 64 69 72 2f 6e 61 6d 65 2e 63 73 * dir/name.cs
0100: 73 0a 23 20 20 20 20 20 20 2a 20 64 69 72 2f 6e s.# * dir/n
0110: 61 6d 65 2e 74 68 31 2d 73 65 74 75 70 0a 23 20 ame.th1-setup.#
0120: 20 20 20 20 20 65 74 63 2e 0a 23 0a 23 20 44 6f etc..#.# Do
0130: 65 73 6e 27 74 20 77 6f 72 6b 20 6f 6e 20 72 61 esn't work on ra
0140: 77 20 2d 73 71 6c 20 6f 72 20 2d 73 71 6c 2d 72 w -sql or -sql-r
0150: 65 67 20 63 6f 6e 66 69 67 20 63 61 72 64 20 66 eg config card f
0160: 69 6c 65 73 0a 23 20 28 77 68 69 63 68 20 60 6d iles.# (which `m
0170: 6b 73 6b 69 6e 60 20 63 61 6e 20 63 72 65 61 74 kskin` can creat
0180: 65 20 61 6c 74 65 72 6e 61 74 69 76 65 6c 79 29 e alternatively)
0190: 2e 0a 23 0a 0a 0a 23 20 63 6d 64 20 61 72 67 73 ..#...# cmd args
01a0: 0a 24 66 72 6f 6d 20 3d 20 24 5f 53 45 52 56 45 .$from = $_SERVE
01b0: 52 5b 22 61 72 67 76 22 5d 5b 31 5d 3b 0a 24 73 R["argv"][1];.$s
01c0: 6b 69 6e 5f 6e 61 6d 65 20 3d 20 62 61 73 65 6e kin_name = basen
01d0: 61 6d 65 28 24 66 72 6f 6d 2c 20 22 74 78 74 22 ame($from, "txt"
01e0: 29 3b 0a 24 74 64 69 72 20 3d 20 24 5f 53 45 52 );.$tdir = $_SER
01f0: 56 45 52 5b 22 61 72 67 76 22 5d 5b 32 5d 20 6f VER["argv"][2] o
0200: 72 20 24 74 64 69 72 20 3d 20 22 2e 22 3b 0a 66 r $tdir = ".";.f
0210: 69 6c 65 5f 65 78 69 73 74 73 28 24 74 64 69 72 ile_exists($tdir
0220: 29 20 6f 72 20 6d 6b 64 69 72 28 24 74 64 69 72 ) or mkdir($tdir
0230: 29 3b 0a 0a 23 20 72 65 61 64 0a 24 73 72 63 20 );..# read.$src
0240: 3d 20 66 69 6c 65 5f 67 65 74 5f 63 6f 6e 74 65 = file_get_conte
0250: 6e 74 73 28 24 66 72 6f 6d 29 3b 0a 0a 23 20 65 nts($from);..# e
0260: 78 74 72 61 63 74 20 6d 65 74 61 20 6e 61 6d 65 xtract meta name
0270: 3f 0a 69 66 20 28 70 72 65 67 5f 6d 61 74 63 68 ?.if (preg_match
0280: 28 22 2f 5e 23 5c 56 2b 5c 22 28 5b 5c 77 2e 5c ("/^#\V+\"([\w.\
0290: 68 2d 5d 2b 29 5c 22 2f 6d 22 2c 20 24 73 72 63 h-]+)\"/m", $src
02a0: 2c 20 24 75 75 29 29 20 7b 0a 20 20 20 24 73 6b , $uu)) {. $sk
02b0: 69 6e 5f 6e 61 6d 65 20 3d 20 24 75 75 5b 31 5d in_name = $uu[1]
02c0: 3b 0a 7d 0a 0a 23 20 66 69 6e 64 20 6d 61 74 63 ;.}..# find matc
02d0: 68 69 6e 67 20 63 6f 6e 66 69 67 20 68 65 61 64 hing config head
02e0: 65 72 20 6c 69 6e 65 73 0a 24 72 78 20 3d 20 22 er lines.$rx = "
02f0: 2f 5e 63 6f 6e 66 69 67 20 5c 2f 63 6f 6e 66 69 /^config \/confi
0300: 67 20 28 5c 64 2b 29 5c 6e 22 0a 20 20 20 20 2e g (\d+)\n". .
0310: 20 22 28 5c 64 2b 20 27 28 5b 5c 77 2d 5d 2b 29 "(\d+ '([\w-]+)
0320: 27 20 76 61 6c 75 65 20 29 27 2f 6d 22 3b 0a 70 ' value )'/m";.p
0330: 72 65 67 5f 6d 61 74 63 68 5f 61 6c 6c 28 24 72 reg_match_all($r
0340: 78 2c 20 24 73 72 63 2c 20 24 75 75 2c 20 50 52 x, $src, $uu, PR
0350: 45 47 5f 53 45 54 5f 4f 52 44 45 52 7c 50 52 45 EG_SET_ORDER|PRE
0360: 47 5f 4f 46 46 53 45 54 5f 43 41 50 54 55 52 45 G_OFFSET_CAPTURE
0370: 29 3b 0a 66 6f 72 65 61 63 68 20 28 24 75 75 20 );.foreach ($uu
0380: 61 73 20 24 72 6f 77 29 20 7b 0a 0a 20 20 20 20 as $row) {..
0390: 2f 2f 20 72 78 20 66 69 65 6c 64 73 0a 20 20 20 // rx fields.
03a0: 20 6c 69 73 74 28 24 68 65 61 64 65 72 2c 20 24 list($header, $
03b0: 70 6f 73 29 20 3d 20 24 72 6f 77 5b 30 5d 3b 0a pos) = $row[0];.
03c0: 20 20 20 20 24 6c 65 6e 67 74 68 20 3d 20 24 72 $length = $r
03d0: 6f 77 5b 31 5d 5b 30 5d 3b 0a 20 20 20 20 24 63 ow[1][0];. $c
03e0: 61 72 64 20 3d 20 24 72 6f 77 5b 32 5d 5b 30 5d ard = $row[2][0]
03f0: 3b 0a 20 20 20 20 24 6e 61 6d 65 20 3d 20 24 72 ;. $name = $r
0400: 6f 77 5b 33 5d 5b 30 5d 3b 0a 0a 20 20 20 20 2f ow[3][0];.. /
0410: 2f 20 65 78 74 72 61 63 74 20 76 61 6c 75 65 0a / extract value.
0420: 20 20 20 20 24 76 61 6c 75 65 20 3d 20 73 75 62 $value = sub
0430: 73 74 72 28 24 73 72 63 2c 20 24 70 6f 73 20 2b str($src, $pos +
0440: 20 73 74 72 6c 65 6e 28 24 68 65 61 64 65 72 29 strlen($header)
0450: 2c 20 24 6c 65 6e 67 74 68 20 2d 20 32 20 2d 20 , $length - 2 -
0460: 73 74 72 6c 65 6e 28 24 63 61 72 64 29 29 3b 0a strlen($card));.
0470: 20 20 20 20 24 76 61 6c 75 65 20 3d 20 73 74 72 $value = str
0480: 74 72 28 24 76 61 6c 75 65 2c 20 61 72 72 61 79 tr($value, array
0490: 28 22 27 27 22 3d 3e 22 27 22 29 29 3b 0a 0a 20 ("''"=>"'"));..
04a0: 20 20 20 2f 2f 20 73 61 76 65 20 74 6f 20 66 69 // save to fi
04b0: 6c 65 0a 20 20 20 20 66 69 6c 65 5f 70 75 74 5f le. file_put_
04c0: 63 6f 6e 74 65 6e 74 73 28 22 24 74 64 69 72 2f contents("$tdir/
04d0: 24 73 6b 69 6e 5f 6e 61 6d 65 2e 24 6e 61 6d 65 $skin_name.$name
04e0: 22 2c 20 24 76 61 6c 75 65 29 3b 0a 7d 0a 0a ", $value);.}..