Attachment "patch-hook.txt" to
ticket [77de516a1f]
added by
wolfgang
2010-10-16 15:13:45.
0000: 43 48 41 4e 47 45 44 20 73 72 63 2f 64 62 2e 63 CHANGED src/db.c
0010: 0d 0a 49 6e 64 65 78 3a 20 73 72 63 2f 64 62 2e ..Index: src/db.
0020: 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d c..=============
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0060: 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 72 63 2f ======..--- src/
0070: 64 62 2e 63 0d 0a 2b 2b 2b 20 73 72 63 2f 64 62 db.c..+++ src/db
0080: 2e 63 0d 0a 40 40 20 2d 31 35 32 35 2c 31 30 20 .c..@@ -1525,10
0090: 2b 31 35 32 35 2c 31 36 20 40 40 0d 0a 20 20 20 +1525,16 @@..
00a0: 7b 20 22 68 74 74 70 2d 70 6f 72 74 22 2c 20 20 { "http-port",
00b0: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 0,
00c0: 20 20 20 20 31 36 2c 20 22 38 30 38 30 22 20 20 16, "8080"
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c },
00e0: 0d 0a 20 20 20 7b 20 22 6c 6f 63 61 6c 61 75 74 .. { "localaut
00f0: 68 22 2c 20 20 20 20 20 30 2c 20 20 20 20 20 20 h", 0,
0100: 20 20 20 20 20 20 20 20 20 20 30 2c 20 22 30 22 0, "0"
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0120: 20 20 20 7d 2c 0d 0a 20 20 20 7b 20 22 6d 74 69 },.. { "mti
0130: 6d 65 2d 63 68 61 6e 67 65 73 22 2c 20 30 2c 20 me-changes", 0,
0140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0
0150: 2c 20 22 30 22 20 20 20 20 20 20 20 20 20 20 20 , "0"
0160: 20 20 20 20 20 20 20 20 7d 2c 0d 0a 20 20 20 7b },.. {
0170: 20 22 70 67 70 2d 63 6f 6d 6d 61 6e 64 22 2c 20 "pgp-command",
0180: 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 0,
0190: 20 20 20 33 32 2c 20 22 67 70 67 20 2d 2d 63 6c 32, "gpg --cl
01a0: 65 61 72 73 69 67 6e 20 2d 6f 20 22 20 7d 2c 0d earsign -o " },.
01b0: 0a 20 20 20 7b 20 22 70 72 6f 78 79 22 2c 20 20 . { "proxy",
01c0: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 0,
01d0: 20 20 20 20 20 20 20 20 33 32 2c 20 22 6f 66 66 32, "off
01e0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 "
01f0: 20 20 7d 2c 0d 0a 2b 20 20 7b 20 22 70 75 73 68 },..+ { "push
0200: 2d 68 6f 6f 6b 2d 70 61 74 74 65 72 6e 2d 63 6c -hook-pattern-cl
0210: 69 65 6e 74 22 2c 0d 0a 2b 20 20 20 20 20 20 20 ient",..+
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 0,
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 3
0240: 32 2c 20 22 22 20 20 20 20 20 20 20 20 20 20 20 2, ""
0250: 20 20 20 20 20 20 20 20 20 7d 2c 0d 0a 2b 20 20 },..+
0260: 7b 20 22 70 75 73 68 2d 68 6f 6f 6b 2d 70 61 74 { "push-hook-pat
0270: 74 65 72 6e 2d 63 6d 64 22 2c 0d 0a 2b 20 20 20 tern-cmd",..+
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0290: 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 0,
02a0: 20 20 20 33 32 2c 20 22 22 20 20 20 20 20 20 20 32, ""
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0d },.
02c0: 0a 2b 20 20 7b 20 22 70 75 73 68 2d 68 6f 6f 6b .+ { "push-hook
02d0: 2d 70 61 74 74 65 72 6e 2d 73 65 72 76 65 72 22 -pattern-server"
02e0: 2c 0d 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 ,..+
02f0: 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 0,
0300: 20 20 20 20 20 20 20 20 20 20 33 32 2c 20 22 22 32, ""
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0320: 20 20 20 20 7d 2c 0d 0a 20 20 20 7b 20 22 73 73 },.. { "ss
0330: 68 2d 63 6f 6d 6d 61 6e 64 22 2c 20 20 20 30 2c h-command", 0,
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 3
0350: 32 2c 20 22 22 20 20 20 20 20 20 20 20 20 20 20 2, ""
0360: 20 20 20 20 20 20 20 20 20 7d 2c 0d 0a 20 20 20 },..
0370: 7b 20 22 77 65 62 2d 62 72 6f 77 73 65 72 22 2c { "web-browser",
0380: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 0,
0390: 20 20 20 20 33 32 2c 20 22 22 20 20 20 20 20 20 32, ""
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c },
03b0: 0d 0a 20 20 20 7b 20 30 2c 30 2c 30 2c 30 20 7d .. { 0,0,0,0 }
03c0: 0d 0a 20 7d 3b 0d 0a 20 0d 0a 40 40 20 2d 31 35 .. };.. ..@@ -15
03d0: 39 36 2c 31 30 20 2b 31 36 30 32 2c 32 36 20 40 96,10 +1602,26 @
03e0: 40 0d 0a 20 2a 2a 0d 0a 20 2a 2a 20 20 20 20 70 @.. **.. ** p
03f0: 72 6f 78 79 20 20 20 20 20 20 20 20 20 55 52 4c roxy URL
0400: 20 6f 66 20 74 68 65 20 48 54 54 50 20 70 72 6f of the HTTP pro
0410: 78 79 2e 20 20 49 66 20 75 6e 64 65 66 69 6e 65 xy. If undefine
0420: 64 20 6f 72 20 22 6f 66 66 22 20 74 68 65 6e 0d d or "off" then.
0430: 0a 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 . **
0440: 20 20 20 20 20 20 74 68 65 20 22 68 74 74 70 5f the "http_
0450: 70 72 6f 78 79 22 20 65 6e 76 69 72 6f 6e 6d 65 proxy" environme
0460: 6e 74 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 nt variable is c
0470: 6f 6e 73 75 6c 74 65 64 2e 0d 0a 20 2a 2a 20 20 onsulted... **
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0490: 49 66 20 74 68 65 20 68 74 74 70 5f 70 72 6f 78 If the http_prox
04a0: 79 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 y environment va
04b0: 72 69 61 62 6c 65 20 69 73 20 75 6e 64 65 66 69 riable is undefi
04c0: 6e 65 64 0d 0a 20 2a 2a 20 20 20 20 20 20 20 20 ned.. **
04d0: 20 20 20 20 20 20 20 20 20 20 74 68 65 6e 20 61 then a
04e0: 20 64 69 72 65 63 74 20 48 54 54 50 20 63 6f 6e direct HTTP con
04f0: 6e 65 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e nection is used.
0500: 0d 0a 2b 2a 2a 0d 0a 2b 2a 2a 20 20 20 20 70 75 ..+**..+** pu
0510: 73 68 2d 68 6f 6f 6b 2d 70 61 74 74 65 72 6e 2d sh-hook-pattern-
0520: 63 6c 69 65 6e 74 0d 0a 2b 2a 2a 20 20 20 20 20 client..+**
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
0540: 73 65 74 2c 20 61 20 63 6c 69 65 6e 74 20 70 75 set, a client pu
0550: 73 68 20 77 69 6c 6c 20 73 65 6e 74 20 74 68 69 sh will sent thi
0560: 73 20 6d 65 73 73 61 67 65 20 74 6f 20 74 68 65 s message to the
0570: 0d 0a 2b 2a 2a 20 20 20 20 20 20 20 20 20 20 20 ..+**
0580: 20 20 20 20 20 20 20 73 65 72 76 65 72 2c 20 74 server, t
0590: 6f 20 61 63 74 69 76 61 74 65 20 74 68 65 20 70 o activate the p
05a0: 75 73 68 20 68 6f 6f 6b 20 63 6f 6d 6d 61 6e 64 ush hook command
05b0: 2e 0d 0a 2b 2a 2a 0d 0a 2b 2a 2a 20 20 20 20 70 ...+**..+** p
05c0: 75 73 68 2d 68 6f 6f 6b 2d 70 61 74 74 65 72 6e ush-hook-pattern
05d0: 2d 63 6d 64 0d 0a 2b 2a 2a 20 20 20 20 20 20 20 -cmd..+**
05e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 this
05f0: 69 73 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c is the command l
0600: 69 6e 65 2c 20 74 68 61 74 20 77 69 6c 6c 20 62 ine, that will b
0610: 65 20 61 63 74 69 76 61 74 65 64 0d 0a 2b 2a 2a e activated..+**
0620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0630: 20 20 61 73 20 70 75 73 68 20 68 6f 6f 6b 2e 20 as push hook.
0640: 4f 75 74 70 75 74 20 72 65 64 69 72 65 63 74 73 Output redirects
0650: 20 73 68 6f 75 6c 64 20 62 65 20 61 64 64 65 64 should be added
0660: 20 74 6f 0d 0a 2b 2a 2a 20 20 20 20 20 20 20 20 to..+**
0670: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 63 this c
0680: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 0d 0a 2b 2a ommand line...+*
0690: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 *
06a0: 20 20 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 The complete
06b0: 70 61 74 74 65 72 6e 2c 20 73 65 6e 74 20 62 79 pattern, sent by
06c0: 20 74 68 65 20 63 6c 69 65 6e 74 20 77 69 6c 6c the client will
06d0: 20 62 65 0d 0a 2b 2a 2a 20 20 20 20 20 20 20 20 be..+**
06e0: 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 append
06f0: 65 64 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e ed to the comman
0700: 64 20 6c 69 6e 65 2e 0d 0a 2b 2a 2a 0d 0a 2b 2a d line...+**..+*
0710: 2a 20 20 20 20 70 75 73 68 2d 68 6f 6f 6b 2d 70 * push-hook-p
0720: 61 74 74 65 72 6e 2d 73 65 72 76 65 72 0d 0a 2b attern-server..+
0730: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 **
0740: 20 20 20 20 69 66 20 73 65 74 2c 20 61 6e 64 20 if set, and
0750: 61 20 63 6c 69 65 6e 74 20 73 65 6e 64 20 74 68 a client send th
0760: 69 73 20 70 61 74 74 65 72 6e 20 61 74 20 74 68 is pattern at th
0770: 65 20 65 6e 64 20 6f 66 0d 0a 2b 2a 2a 20 20 20 e end of..+**
0780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
0790: 20 70 75 73 68 2c 20 74 68 65 20 70 75 73 68 20 push, the push
07a0: 68 6f 6f 6b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c hook command wil
07b0: 6c 20 62 65 20 65 78 65 63 75 74 65 64 2e 20 54 l be executed. T
07c0: 68 69 73 0d 0a 2b 2a 2a 20 20 20 20 20 20 20 20 his..+**
07d0: 20 20 20 20 20 20 20 20 20 20 6d 69 67 68 74 20 might
07e0: 62 65 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 be a prefix of t
07f0: 68 65 20 70 61 74 74 65 72 6e 2c 20 73 65 6e 74 he pattern, sent
0800: 20 62 79 20 74 68 65 20 63 6c 69 65 6e 74 2e 0d by the client..
0810: 0a 20 2a 2a 0d 0a 20 2a 2a 20 20 20 20 73 73 68 . **.. ** ssh
0820: 2d 63 6f 6d 6d 61 6e 64 20 20 20 43 6f 6d 6d 61 -command Comma
0830: 6e 64 20 75 73 65 64 20 74 6f 20 74 61 6c 6b 20 nd used to talk
0840: 74 6f 20 61 20 72 65 6d 6f 74 65 20 6d 61 63 68 to a remote mach
0850: 69 6e 65 20 77 69 74 68 0d 0a 20 2a 2a 20 20 20 ine with.. **
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
0870: 68 65 20 22 73 73 68 3a 2f 2f 22 20 70 72 6f 74 he "ssh://" prot
0880: 6f 63 6f 6c 2e 0d 0a 20 2a 2a 0d 0a 20 2a 2a 20 ocol... **.. **
0890: 20 20 20 77 65 62 2d 62 72 6f 77 73 65 72 20 20 web-browser
08a0: 20 41 20 73 68 65 6c 6c 20 63 6f 6d 6d 61 6e 64 A shell command
08b0: 20 75 73 65 64 20 74 6f 20 6c 61 75 6e 63 68 20 used to launch
08c0: 79 6f 75 72 20 70 72 65 66 65 72 72 65 64 0d 0a your preferred..
08d0: 0d 0a 43 48 41 4e 47 45 44 20 73 72 63 2f 78 66 ..CHANGED src/xf
08e0: 65 72 2e 63 0d 0a 49 6e 64 65 78 3a 20 73 72 63 er.c..Index: src
08f0: 2f 78 66 65 72 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d /xfer.c..=======
0900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0920: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0930: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d ============..--
0940: 2d 20 73 72 63 2f 78 66 65 72 2e 63 0d 0a 2b 2b - src/xfer.c..++
0950: 2b 20 73 72 63 2f 78 66 65 72 2e 63 0d 0a 40 40 + src/xfer.c..@@
0960: 20 2d 34 30 2c 31 30 20 2b 34 30 2c 33 32 20 40 -40,10 +40,32 @
0970: 40 0d 0a 20 20 20 69 6e 74 20 6e 44 65 6c 74 61 @.. int nDelta
0980: 52 63 76 64 3b 20 20 20 20 20 2f 2a 20 4e 75 6d Rcvd; /* Num
0990: 62 65 72 20 6f 66 20 64 65 6c 74 61 73 20 72 65 ber of deltas re
09a0: 63 65 69 76 65 64 20 2a 2f 0d 0a 20 20 20 69 6e ceived */.. in
09b0: 74 20 6e 44 61 6e 67 6c 69 6e 67 46 69 6c 65 3b t nDanglingFile;
09c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 /* Number of d
09d0: 61 6e 67 6c 69 6e 67 20 64 65 6c 74 61 73 20 72 angling deltas r
09e0: 65 63 65 69 76 65 64 20 2a 2f 0d 0a 20 20 20 69 eceived */.. i
09f0: 6e 74 20 6d 78 53 65 6e 64 3b 20 20 20 20 20 20 nt mxSend;
0a00: 20 20 20 2f 2a 20 53 74 6f 70 20 73 65 6e 64 69 /* Stop sendi
0a10: 6e 67 20 22 66 69 6c 65 22 20 77 69 74 68 20 70 ng "file" with p
0a20: 4f 75 74 20 72 65 61 63 68 65 73 20 74 68 69 73 Out reaches this
0a30: 20 73 69 7a 65 20 2a 2f 0d 0a 20 7d 3b 0d 0a 20 size */.. };..
0a40: 0d 0a 2b 2f 2a 0d 0a 2b 2a 2a 20 4c 65 74 20 61 ..+/*..+** Let a
0a50: 20 73 65 72 76 65 72 2d 73 69 64 65 20 65 78 74 server-side ext
0a60: 65 72 6e 61 6c 20 61 67 65 6e 74 20 6b 6e 6f 77 ernal agent know
0a70: 20 74 68 61 74 20 61 20 70 75 73 68 20 68 61 73 that a push has
0a80: 20 63 6f 6d 70 6c 65 74 65 64 2e 20 2f 66 61 74 completed. /fat
0a90: 6d 61 6e 0d 0a 2b 2a 2f 0d 0a 2b 76 6f 69 64 20 man..+*/..+void
0aa0: 70 6f 73 74 5f 70 75 73 68 5f 68 6f 6f 6b 28 63 post_push_hook(c
0ab0: 68 61 72 20 63 6f 6e 73 74 20 2a 20 63 6f 6e 73 har const * cons
0ac0: 74 20 7a 50 75 73 68 48 6f 6f 6b 4c 69 6e 65 29 t zPushHookLine)
0ad0: 7b 0d 0a 2b 20 20 2f 2a 0d 0a 2b 20 20 2a 2a 20 {..+ /*..+ **
0ae0: 54 4f 20 44 4f 3a 20 67 65 74 20 74 68 65 20 73 TO DO: get the s
0af0: 74 72 69 6e 67 20 63 6d 64 20 66 72 6f 6d 20 61 tring cmd from a
0b00: 20 63 6f 6e 66 69 67 20 66 69 6c 65 3f 20 4f 72 config file? Or
0b10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6c 6f the database lo
0b20: 63 61 6c 0d 0a 2b 20 20 2a 2a 20 73 65 74 74 69 cal..+ ** setti
0b30: 6e 67 73 2c 20 61 73 20 73 6f 6d 65 6f 6e 65 20 ngs, as someone
0b40: 73 75 67 67 65 73 74 65 64 3f 20 44 69 74 74 6f suggested? Ditto
0b50: 20 6f 75 74 70 75 74 20 61 6e 64 20 65 72 72 6f output and erro
0b60: 72 20 6c 6f 67 73 2e 20 2f 66 61 74 6d 61 6e 0d r logs. /fatman.
0b70: 0a 2b 20 20 2a 2f 0d 0a 2b 20 20 63 6f 6e 73 74 .+ */..+ const
0b80: 20 63 68 61 72 20 2a 7a 43 6d 64 20 3d 20 64 62 char *zCmd = db
0b90: 5f 67 65 74 28 22 70 75 73 68 2d 68 6f 6f 6b 2d _get("push-hook-
0ba0: 70 61 74 74 65 72 6e 2d 63 6d 64 22 2c 20 22 22 pattern-cmd", ""
0bb0: 29 3b 0d 0a 2b 20 20 0d 0a 2b 20 20 69 66 28 20 );..+ ..+ if(
0bc0: 7a 43 6d 64 20 26 26 20 7a 43 6d 64 5b 30 5d 20 zCmd && zCmd[0]
0bd0: 29 7b 0d 0a 2b 20 20 20 20 69 6e 74 20 72 63 3b ){..+ int rc;
0be0: 0d 0a 2b 20 20 20 20 63 68 61 72 20 2a 20 7a 43 ..+ char * zC
0bf0: 61 6c 6c 65 64 43 6d 64 3b 0d 0a 2b 0d 0a 2b 20 alledCmd;..+..+
0c00: 20 20 20 7a 43 61 6c 6c 65 64 43 6d 64 20 3d 20 zCalledCmd =
0c10: 6d 70 72 69 6e 74 66 28 22 25 73 20 25 73 22 2c mprintf("%s %s",
0c20: 7a 43 6d 64 2c 7a 50 75 73 68 48 6f 6f 6b 4c 69 zCmd,zPushHookLi
0c30: 6e 65 29 3b 0d 0a 2b 20 20 20 20 72 63 20 3d 20 ne);..+ rc =
0c40: 73 79 73 74 65 6d 28 7a 43 61 6c 6c 65 64 43 6d system(zCalledCm
0c50: 64 29 3b 0d 0a 2b 20 20 20 20 69 66 20 28 72 63 d);..+ if (rc
0c60: 20 21 3d 20 30 29 20 7b 0d 0a 2b 20 20 20 20 20 != 0) {..+
0c70: 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 54 fossil_print("T
0c80: 68 65 20 70 6f 73 74 2d 70 75 73 68 2d 68 6f 6f he post-push-hoo
0c90: 6b 20 63 6f 6d 6d 61 6e 64 20 5c 22 25 73 5c 22 k command \"%s\"
0ca0: 20 66 61 69 6c 65 64 2e 22 2c 20 7a 43 61 6c 6c failed.", zCall
0cb0: 65 64 43 6d 64 29 3b 0d 0a 2b 20 20 20 20 7d 0d edCmd);..+ }.
0cc0: 0a 2b 20 20 20 20 66 72 65 65 28 7a 43 61 6c 6c .+ free(zCall
0cd0: 65 64 43 6d 64 29 3b 0d 0a 2b 20 20 7d 0d 0a 2b edCmd);..+ }..+
0ce0: 7d 0d 0a 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 54 }.. .. /*.. ** T
0cf0: 68 65 20 69 6e 70 75 74 20 62 6c 6f 62 20 63 6f he input blob co
0d00: 6e 74 61 69 6e 73 20 61 20 55 55 49 44 2e 20 20 ntains a UUID.
0d10: 43 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 Convert it into
0d20: 61 20 72 65 63 6f 72 64 20 49 44 2e 0d 0a 20 2a a record ID... *
0d30: 2a 20 43 72 65 61 74 65 20 61 20 70 68 61 6e 74 * Create a phant
0d40: 6f 6d 20 72 65 63 6f 72 64 20 69 66 20 6e 6f 20 om record if no
0d50: 70 72 69 6f 72 20 72 65 63 6f 72 64 20 65 78 69 prior record exi
0d60: 73 74 73 20 61 6e 64 0d 0a 20 2a 2a 20 70 68 61 sts and.. ** pha
0d70: 6e 74 6f 6d 69 7a 65 20 69 73 20 74 72 75 65 2e ntomize is true.
0d80: 0d 0a 40 40 20 2d 35 39 36 2c 31 30 20 2b 36 31 ..@@ -596,10 +61
0d90: 38 2c 31 33 20 40 40 0d 0a 20 20 20 69 6e 74 20 8,13 @@.. int
0da0: 69 73 43 6c 6f 6e 65 20 3d 20 30 3b 0d 0a 20 20 isClone = 0;..
0db0: 20 69 6e 74 20 6e 47 69 6d 6d 65 20 3d 20 30 3b int nGimme = 0;
0dc0: 0d 0a 20 20 20 69 6e 74 20 73 69 7a 65 3b 0d 0a .. int size;..
0dd0: 20 20 20 69 6e 74 20 72 65 63 76 43 6f 6e 66 69 int recvConfi
0de0: 67 20 3d 20 30 3b 0d 0a 20 20 20 63 68 61 72 20 g = 0;.. char
0df0: 2a 7a 4e 6f 77 3b 0d 0a 2b 20 20 63 6f 6e 73 74 *zNow;..+ const
0e00: 20 63 68 61 72 20 2a 7a 50 75 73 68 48 6f 6f 6b char *zPushHook
0e10: 50 61 74 74 65 72 6e 20 3d 20 64 62 5f 67 65 74 Pattern = db_get
0e20: 28 22 70 75 73 68 2d 68 6f 6f 6b 2d 70 61 74 74 ("push-hook-patt
0e30: 65 72 6e 2d 73 65 72 76 65 72 22 2c 20 22 22 29 ern-server", "")
0e40: 3b 0d 0a 2b 20 20 69 6e 74 20 6c 65 6e 50 75 73 ;..+ int lenPus
0e50: 68 48 6f 6f 6b 50 61 74 74 65 72 6e 20 3d 20 28 hHookPattern = (
0e60: 7a 50 75 73 68 48 6f 6f 6b 50 61 74 74 65 72 6e zPushHookPattern
0e70: 20 26 26 20 7a 50 75 73 68 48 6f 6f 6b 50 61 74 && zPushHookPat
0e80: 74 65 72 6e 5b 30 5d 29 0d 0a 2b 20 20 20 20 20 tern[0])..+
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ea0: 20 20 20 20 20 20 20 3f 20 73 74 72 6c 65 6e 28 ? strlen(
0eb0: 7a 50 75 73 68 48 6f 6f 6b 50 61 74 74 65 72 6e zPushHookPattern
0ec0: 29 20 3a 20 30 3b 0d 0a 20 0d 0a 20 20 20 69 66 ) : 0;.. .. if
0ed0: 28 20 73 74 72 63 6d 70 28 50 44 28 22 52 45 51 ( strcmp(PD("REQ
0ee0: 55 45 53 54 5f 4d 45 54 48 4f 44 22 2c 22 50 4f UEST_METHOD","PO
0ef0: 53 54 22 29 2c 22 50 4f 53 54 22 29 20 29 7b 0d ST"),"POST") ){.
0f00: 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 72 65 . fossil_re
0f10: 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0d 0a direct_home();..
0f20: 20 20 20 7d 0d 0a 20 20 20 6d 65 6d 73 65 74 28 }.. memset(
0f30: 26 78 66 65 72 2c 20 30 2c 20 73 69 7a 65 6f 66 &xfer, 0, sizeof
0f40: 28 78 66 65 72 29 29 3b 0d 0a 40 40 20 2d 36 31 (xfer));..@@ -61
0f50: 37 2c 31 31 20 2b 36 34 32 2c 31 39 20 40 40 0d 7,11 +642,19 @@.
0f60: 0a 20 20 20 29 3b 0d 0a 20 20 20 7a 4e 6f 77 20 . );.. zNow
0f70: 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45 = db_text(0, "SE
0f80: 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 LECT strftime('%
0f90: 25 59 2d 25 25 6d 2d 25 25 64 54 25 25 48 3a 25 %Y-%%m-%%dT%%H:%
0fa0: 25 4d 3a 25 25 53 27 2c 20 27 6e 6f 77 27 29 22 %M:%%S', 'now')"
0fb0: 29 3b 0d 0a 20 20 20 40 20 23 20 74 69 6d 65 73 );.. @ # times
0fc0: 74 61 6d 70 20 25 73 28 7a 4e 6f 77 29 0d 0a 20 tamp %s(zNow)..
0fd0: 20 20 6d 61 6e 69 66 65 73 74 5f 63 72 6f 73 73 manifest_cross
0fe0: 6c 69 6e 6b 5f 62 65 67 69 6e 28 29 3b 0d 0a 20 link_begin();..
0ff0: 20 20 77 68 69 6c 65 28 20 62 6c 6f 62 5f 6c 69 while( blob_li
1000: 6e 65 28 78 66 65 72 2e 70 49 6e 2c 20 26 78 66 ne(xfer.pIn, &xf
1010: 65 72 2e 6c 69 6e 65 29 20 29 7b 0d 0a 2d 20 20 er.line) ){..-
1020: 20 20 69 66 28 20 62 6c 6f 62 5f 62 75 66 66 65 if( blob_buffe
1030: 72 28 26 78 66 65 72 2e 6c 69 6e 65 29 5b 30 5d r(&xfer.line)[0]
1040: 3d 3d 27 23 27 20 29 20 63 6f 6e 74 69 6e 75 65 =='#' ) continue
1050: 3b 0d 0a 2b 20 20 20 20 69 66 28 20 62 6c 6f 62 ;..+ if( blob
1060: 5f 62 75 66 66 65 72 28 26 78 66 65 72 2e 6c 69 _buffer(&xfer.li
1070: 6e 65 29 5b 30 5d 3d 3d 27 23 27 20 29 7b 0d 0a ne)[0]=='#' ){..
1080: 2b 20 20 20 20 20 20 69 66 28 20 20 20 20 6c 65 + if( le
1090: 6e 50 75 73 68 48 6f 6f 6b 50 61 74 74 65 72 6e nPushHookPattern
10a0: 0d 0a 2b 20 20 20 20 20 20 20 20 20 20 26 26 20 ..+ &&
10b0: 30 20 3d 3d 20 6d 65 6d 63 6d 70 28 62 6c 6f 62 0 == memcmp(blob
10c0: 5f 62 75 66 66 65 72 28 26 78 66 65 72 2e 6c 69 _buffer(&xfer.li
10d0: 6e 65 29 2b 31 2c 0d 0a 2b 20 20 20 20 20 20 20 ne)+1,..+
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10f0: 20 20 7a 50 75 73 68 48 6f 6f 6b 50 61 74 74 65 zPushHookPatte
1100: 72 6e 2c 20 6c 65 6e 50 75 73 68 48 6f 6f 6b 50 rn, lenPushHookP
1110: 61 74 74 65 72 6e 29 0d 0a 2b 20 20 20 20 20 20 attern)..+
1120: 29 7b 0d 0a 2b 20 20 20 20 20 20 20 20 70 6f 73 ){..+ pos
1130: 74 5f 70 75 73 68 5f 68 6f 6f 6b 28 62 6c 6f 62 t_push_hook(blob
1140: 5f 62 75 66 66 65 72 28 26 78 66 65 72 2e 6c 69 _buffer(&xfer.li
1150: 6e 65 29 2b 31 29 3b 0d 0a 2b 20 20 20 20 20 20 ne)+1);..+
1160: 7d 0d 0a 2b 20 20 20 20 20 20 63 6f 6e 74 69 6e }..+ contin
1170: 75 65 3b 0d 0a 2b 20 20 20 20 7d 0d 0a 20 20 20 ue;..+ }..
1180: 20 20 78 66 65 72 2e 6e 54 6f 6b 65 6e 20 3d 20 xfer.nToken =
1190: 62 6c 6f 62 5f 74 6f 6b 65 6e 69 7a 65 28 26 78 blob_tokenize(&x
11a0: 66 65 72 2e 6c 69 6e 65 2c 20 78 66 65 72 2e 61 fer.line, xfer.a
11b0: 54 6f 6b 65 6e 2c 20 63 6f 75 6e 74 28 78 66 65 Token, count(xfe
11c0: 72 2e 61 54 6f 6b 65 6e 29 29 3b 0d 0a 20 0d 0a r.aToken));.. ..
11d0: 20 20 20 20 20 2f 2a 20 20 20 66 69 6c 65 20 55 /* file U
11e0: 55 49 44 20 53 49 5a 45 20 5c 6e 20 43 4f 4e 54 UID SIZE \n CONT
11f0: 45 4e 54 0d 0a 20 20 20 20 20 2a 2a 20 20 20 66 ENT.. ** f
1200: 69 6c 65 20 55 55 49 44 20 44 45 4c 54 41 53 52 ile UUID DELTASR
1210: 43 20 53 49 5a 45 20 5c 6e 20 43 4f 4e 54 45 4e C SIZE \n CONTEN
1220: 54 0d 0a 20 20 20 20 20 2a 2a 0d 0a 40 40 20 2d T.. **..@@ -
1230: 39 34 38 2c 31 30 20 2b 39 38 31 2c 31 32 20 40 948,10 +981,12 @
1240: 40 0d 0a 20 20 20 42 6c 6f 62 20 73 65 6e 64 3b @.. Blob send;
1250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a /*
1260: 20 54 65 78 74 20 77 65 20 61 72 65 20 73 65 6e Text we are sen
1270: 64 69 6e 67 20 74 6f 20 74 68 65 20 73 65 72 76 ding to the serv
1280: 65 72 20 2a 2f 0d 0a 20 20 20 42 6c 6f 62 20 72 er */.. Blob r
1290: 65 63 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 ecv;
12a0: 20 20 2f 2a 20 52 65 70 6c 79 20 77 65 20 67 6f /* Reply we go
12b0: 74 20 62 61 63 6b 20 66 72 6f 6d 20 74 68 65 20 t back from the
12c0: 73 65 72 76 65 72 20 2a 2f 0d 0a 20 20 20 58 66 server */.. Xf
12d0: 65 72 20 78 66 65 72 3b 20 20 20 20 20 20 20 20 er xfer;
12e0: 20 20 20 20 20 20 2f 2a 20 54 72 61 6e 73 66 65 /* Transfe
12f0: 72 20 64 61 74 61 20 2a 2f 0d 0a 20 20 20 63 6f r data */.. co
1300: 6e 73 74 20 63 68 61 72 20 2a 7a 53 43 6f 64 65 nst char *zSCode
1310: 20 3d 20 64 62 5f 67 65 74 28 22 73 65 72 76 65 = db_get("serve
1320: 72 2d 63 6f 64 65 22 2c 20 22 78 22 29 3b 0d 0a r-code", "x");..
1330: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
1340: 50 43 6f 64 65 20 3d 20 64 62 5f 67 65 74 28 22 PCode = db_get("
1350: 70 72 6f 6a 65 63 74 2d 63 6f 64 65 22 2c 20 30 project-code", 0
1360: 29 3b 0d 0a 2b 20 20 63 6f 6e 73 74 20 63 68 61 );..+ const cha
1370: 72 20 2a 7a 50 75 73 68 48 6f 6f 6b 50 61 74 74 r *zPushHookPatt
1380: 65 72 6e 20 3d 20 64 62 5f 67 65 74 28 22 70 75 ern = db_get("pu
1390: 73 68 2d 68 6f 6f 6b 2d 70 61 74 74 65 72 6e 2d sh-hook-pattern-
13a0: 63 6c 69 65 6e 74 22 2c 20 22 22 29 3b 0d 0a 2b client", "");..+
13b0: 0d 0a 20 0d 0a 20 20 20 69 66 28 20 64 62 5f 67 .. .. if( db_g
13c0: 65 74 5f 62 6f 6f 6c 65 61 6e 28 22 64 6f 6e 74 et_boolean("dont
13d0: 2d 70 75 73 68 22 2c 20 30 29 20 29 20 70 75 73 -push", 0) ) pus
13e0: 68 46 6c 61 67 20 3d 20 30 3b 0d 0a 20 20 20 69 hFlag = 0;.. i
13f0: 66 28 20 70 75 73 68 46 6c 61 67 20 2b 20 70 75 f( pushFlag + pu
1400: 6c 6c 46 6c 61 67 20 2b 20 63 6c 6f 6e 65 46 6c llFlag + cloneFl
1410: 61 67 20 3d 3d 20 30 20 0d 0a 20 20 20 20 20 20 ag == 0 ..
1420: 26 26 20 63 6f 6e 66 69 67 52 63 76 4d 61 73 6b && configRcvMask
1430: 3d 3d 30 20 26 26 20 63 6f 6e 66 69 67 53 65 6e ==0 && configSen
1440: 64 4d 61 73 6b 3d 3d 30 20 29 20 72 65 74 75 72 dMask==0 ) retur
1450: 6e 3b 0d 0a 20 0d 0a 40 40 20 2d 31 33 33 30 2c n;.. ..@@ -1330,
1460: 31 34 20 2b 31 33 36 35 2c 32 32 20 40 40 0d 0a 14 +1365,22 @@..
1470: 20 20 20 20 20 7d 0d 0a 20 0d 0a 20 20 20 20 20 }.. ..
1480: 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20 /* If this is a
1490: 63 6c 6f 6e 65 2c 20 74 68 65 20 67 6f 20 61 74 clone, the go at
14a0: 20 6c 65 61 73 74 20 74 77 6f 20 72 6f 75 6e 64 least two round
14b0: 73 20 2a 2f 0d 0a 20 20 20 20 20 69 66 28 20 63 s */.. if( c
14c0: 6c 6f 6e 65 46 6c 61 67 20 26 26 20 6e 43 79 63 loneFlag && nCyc
14d0: 6c 65 3d 3d 31 20 29 20 67 6f 20 3d 20 31 3b 0d le==1 ) go = 1;.
14e0: 0a 20 20 20 7d 3b 0d 0a 2b 20 20 69 66 20 28 70 . };..+ if (p
14f0: 75 73 68 46 6c 61 67 20 26 26 20 6e 46 69 6c 65 ushFlag && nFile
1500: 53 65 6e 64 20 3e 20 30 29 20 7b 0d 0a 2b 20 20 Send > 0) {..+
1510: 20 20 69 66 28 20 7a 50 75 73 68 48 6f 6f 6b 50 if( zPushHookP
1520: 61 74 74 65 72 6e 20 26 26 20 7a 50 75 73 68 48 attern && zPushH
1530: 6f 6f 6b 50 61 74 74 65 72 6e 5b 30 5d 20 29 7b ookPattern[0] ){
1540: 0d 0a 2b 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 ..+ blob_ap
1550: 70 65 6e 64 66 28 26 73 65 6e 64 2c 20 22 23 25 pendf(&send, "#%
1560: 73 5c 6e 22 2c 20 7a 50 75 73 68 48 6f 6f 6b 50 s\n", zPushHookP
1570: 61 74 74 65 72 6e 29 3b 0d 0a 2b 20 20 20 20 20 attern);..+
1580: 20 68 74 74 70 5f 65 78 63 68 61 6e 67 65 28 26 http_exchange(&
1590: 73 65 6e 64 2c 20 26 72 65 63 76 2c 20 63 6c 6f send, &recv, clo
15a0: 6e 65 46 6c 61 67 3d 3d 30 20 7c 7c 20 6e 43 79 neFlag==0 || nCy
15b0: 63 6c 65 3e 30 29 3b 0d 0a 2b 20 20 20 20 20 20 cle>0);..+
15c0: 62 6c 6f 62 5f 72 65 73 65 74 28 26 73 65 6e 64 blob_reset(&send
15d0: 29 3b 0d 0a 2b 20 20 20 20 20 20 6e 43 61 72 64 );..+ nCard
15e0: 53 65 6e 74 2b 2b 3b 0d 0a 2b 20 20 20 20 7d 0d Sent++;..+ }.
15f0: 0a 2b 20 20 7d 0d 0a 20 20 20 74 72 61 6e 73 70 .+ }.. transp
1600: 6f 72 74 5f 73 74 61 74 73 28 26 6e 53 65 6e 74 ort_stats(&nSent
1610: 2c 20 26 6e 52 63 76 64 2c 20 31 29 3b 0d 0a 20 , &nRcvd, 1);..
1620: 20 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 fossil_print("
1630: 54 6f 74 61 6c 20 6e 65 74 77 6f 72 6b 20 74 72 Total network tr
1640: 61 66 66 69 63 3a 20 25 64 20 62 79 74 65 73 20 affic: %d bytes
1650: 73 65 6e 74 2c 20 25 64 20 62 79 74 65 73 20 72 sent, %d bytes r
1660: 65 63 65 69 76 65 64 5c 6e 22 2c 0d 0a 20 20 20 eceived\n",..
1670: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 53 65 nSe
1680: 6e 74 2c 20 6e 52 63 76 64 29 3b 0d 0a 20 20 20 nt, nRcvd);..
1690: 74 72 61 6e 73 70 6f 72 74 5f 63 6c 6f 73 65 28 transport_close(
16a0: 29 3b 0d 0a 20 20 20 74 72 61 6e 73 70 6f 72 74 );.. transport
16b0: 5f 67 6c 6f 62 61 6c 5f 73 68 75 74 64 6f 77 6e _global_shutdown
16c0: 28 29 3b 0d 0a 20 20 20 64 62 5f 6d 75 6c 74 69 ();.. db_multi
16d0: 5f 65 78 65 63 28 22 44 52 4f 50 20 54 41 42 4c _exec("DROP TABL
16e0: 45 20 6f 6e 72 65 6d 6f 74 65 22 29 3b 0d 0a 20 E onremote");..
16f0: 20 20 6d 61 6e 69 66 65 73 74 5f 63 72 6f 73 73 manifest_cross
1700: 6c 69 6e 6b 5f 65 6e 64 28 29 3b 0d 0a 20 20 20 link_end();..
1710: 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 db_end_transacti
1720: 6f 6e 28 30 29 3b 0d 0a 20 7d 0d 0a 0d 0a on(0);.. }....