Collection of themes/skins for the Fossil SCM

⌈⌋ ⎇ branch:  Fossil Skins Extra


Hex Artifact Content

Artifact 1db5c533d9e599feaedf12c1d7f890468d487613:

  • Executable file extroot/hooks — part of check-in [8d85a3869b] at 2021-10-20 21:12:45 on branch trunk — Add experimental hooks admin (not useful yet) (user: mario size: 2996)

0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 70 68 70 2d 63  #!/usr/bin/php-c
0010: 67 69 20 2d 64 63 67 69 2e 66 6f 72 63 65 5f 72  gi -dcgi.force_r
0020: 65 64 69 72 65 63 74 3d 30 0a 3c 3f 70 68 70 0a  edirect=0.<?php.
0030: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 75 74 66 2d  # encoding: utf-
0040: 38 0a 23 20 61 70 69 3a 20 63 67 69 0a 23 20 74  8.# api: cgi.# t
0050: 79 70 65 3a 20 63 6f 6e 66 69 67 0a 23 20 63 61  ype: config.# ca
0060: 74 65 67 6f 72 79 3a 20 61 64 6d 69 6e 0a 23 20  tegory: admin.# 
0070: 74 69 74 6c 65 3a 20 48 6f 6f 6b 73 0a 23 20 64  title: Hooks.# d
0080: 65 73 63 72 69 70 74 69 6f 6e 3a 20 43 6f 6e 66  escription: Conf
0090: 69 67 75 72 65 20 68 6f 6f 6b 73 20 28 65 2e 67  igure hooks (e.g
00a0: 2e 20 77 65 62 20 73 65 72 76 69 63 65 73 29 0a  . web services).
00b0: 23 20 76 65 72 73 69 6f 6e 3a 20 30 2e 30 0a 23  # version: 0.0.#
00c0: 20 73 74 61 74 65 3a 20 62 65 74 61 0a 23 20 63   state: beta.# c
00d0: 6f 6e 66 69 67 3a 20 2d 0a 23 20 64 65 70 65 6e  onfig: -.# depen
00e0: 64 73 3a 20 66 6f 73 73 69 6c 20 28 3d 32 2e 31  ds: fossil (=2.1
00f0: 37 29 0a 23 20 61 63 63 65 73 73 3a 20 61 64 6d  7).# access: adm
0100: 69 6e 0a 23 0a 23 20 54 68 65 20 60 68 6f 6f 6b  in.#.# The `hook
0110: 73 60 20 65 6e 74 72 79 20 69 73 20 61 20 4a 53  s` entry is a JS
0120: 4f 4e 20 6c 69 73 74 2e 20 57 41 52 4e 49 4e 47  ON list. WARNING
0130: 3a 20 6d 69 67 68 74 20 62 65 20 73 75 62 6a 65  : might be subje
0140: 63 74 0a 23 20 74 6f 20 63 68 61 6e 67 65 2e 20  ct.# to change. 
0150: 53 6f 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65  So should not be
0160: 20 75 73 65 64 20 77 69 74 68 6f 75 74 20 76 65   used without ve
0170: 72 69 66 79 69 6e 67 20 63 6f 6d 70 61 74 2e 0a  rifying compat..
0180: 23 0a 0a 23 2d 2d 20 69 6e 69 74 0a 69 6e 63 6c  #..#-- init.incl
0190: 75 64 65 28 22 2e 2f 66 6f 73 73 69 6c 5f 63 6f  ude("./fossil_co
01a0: 6d 6d 6f 6e 2e 70 68 70 22 29 3b 20 20 20 23 20  mmon.php");   # 
01b0: 64 62 28 29 20 65 74 63 2e 0a 69 66 20 28 21 69  db() etc..if (!i
01c0: 73 5f 61 64 6d 69 6e 28 29 29 20 7b 0a 20 20 20  s_admin()) {.   
01d0: 20 64 69 65 28 22 41 64 6d 69 6e 2d 6f 6e 6c 79   die("Admin-only
01e0: 22 29 3b 0a 7d 0a 65 72 72 6f 72 5f 72 65 70 6f  ");.}.error_repo
01f0: 72 74 69 6e 67 28 45 5f 41 4c 4c 29 3b 0a 0a 23  rting(E_ALL);..#
0200: 2d 2d 20 66 6f 73 73 69 6c 20 48 54 4d 4c 20 6f  -- fossil HTML o
0210: 75 74 70 75 74 0a 66 75 6e 63 74 69 6f 6e 20 70  utput.function p
0220: 61 67 65 5f 6d 64 28 24 74 65 78 74 29 20 7b 0a  age_md($text) {.
0230: 20 20 20 20 68 65 61 64 65 72 28 22 43 6f 6e 74      header("Cont
0240: 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68  ent-Type: text/h
0250: 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d 75 74 66  tml; charset=utf
0260: 2d 38 22 29 3b 0a 20 20 20 20 70 72 69 6e 74 20  -8");.    print 
0270: 3c 3c 3c 45 4f 46 0a 3c 64 69 76 20 63 6c 61 73  <<<EOF.<div clas
0280: 73 3d 27 66 6f 73 73 69 6c 2d 64 6f 63 27 20 64  s='fossil-doc' d
0290: 61 74 61 2d 74 69 74 6c 65 3d 27 48 6f 6f 6b 73  ata-title='Hooks
02a0: 20 73 65 74 75 70 27 3e 0a 3c 73 74 79 6c 65 3e   setup'>.<style>
02b0: 0a 20 2e 63 6f 6e 66 69 67 2d 6c 69 73 74 20 6c  . .config-list l
02c0: 61 62 65 6c 20 7b 0a 20 20 20 20 64 69 73 70 6c  abel {.    displ
02d0: 61 79 3a 20 62 6c 6f 63 6b 3b 0a 20 20 20 20 6d  ay: block;.    m
02e0: 61 72 67 69 6e 2d 62 6f 74 74 6f 6d 3a 20 31 30  argin-bottom: 10
02f0: 70 74 3b 0a 20 20 20 20 62 6f 72 64 65 72 2d 6c  pt;.    border-l
0300: 65 66 74 3a 20 33 70 74 20 23 64 64 64 20 73 6f  eft: 3pt #ddd so
0310: 6c 69 64 3b 0a 20 20 20 20 62 6f 72 64 65 72 2d  lid;.    border-
0320: 72 61 64 69 75 73 3a 20 35 70 74 20 30 20 30 20  radius: 5pt 0 0 
0330: 35 70 74 3b 0a 20 20 20 20 70 61 64 64 69 6e 67  5pt;.    padding
0340: 2d 6c 65 66 74 3a 20 31 30 70 74 3b 0a 20 7d 0a  -left: 10pt;. }.
0350: 20 2e 73 61 76 65 2d 62 75 74 74 6f 6e 20 7b 0a   .save-button {.
0360: 20 20 20 20 70 61 64 64 69 6e 67 3a 20 32 70 74      padding: 2pt
0370: 20 33 30 70 74 3b 0a 20 7d 0a 3c 2f 73 74 79 6c   30pt;. }.</styl
0380: 65 3e 0a 24 74 65 78 74 0a 45 4f 46 3b 0a 7d 0a  e>.$text.EOF;.}.
0390: 0a 23 2d 2d 20 70 72 69 6e 74 20 68 6f 6f 6b 20  .#-- print hook 
03a0: 72 6f 77 0a 66 75 6e 63 74 69 6f 6e 20 68 6f 6f  row.function hoo
03b0: 6b 5f 72 6f 77 28 24 69 2c 20 24 72 6f 77 2c 20  k_row($i, $row, 
03c0: 24 72 6f 77 73 3d 31 2c 20 24 68 3d 22 68 22 29  $rows=1, $h="h")
03d0: 20 7b 0a 20 20 20 20 70 72 69 6e 74 20 3c 3c 3c   {.    print <<<
03e0: 45 4e 44 0a 20 20 20 20 3c 74 72 3e 0a 20 20 20  END.    <tr>.   
03f0: 20 20 20 20 20 3c 74 64 3e 24 69 3c 2f 74 64 3e       <td>$i</td>
0400: 0a 20 20 20 20 20 20 20 20 3c 74 64 3e 3c 69 6e  .        <td><in
0410: 70 75 74 20 6c 69 73 74 3d 68 6f 6f 6b 74 79 70  put list=hooktyp
0420: 65 73 20 6e 61 6d 65 3d 22 68 6f 6f 6b 73 5b 74  es name="hooks[t
0430: 79 70 65 5d 5b 24 69 5d 22 20 76 61 6c 75 65 3d  ype][$i]" value=
0440: 22 7b 24 68 28 24 72 6f 77 5b 22 74 79 70 65 22  "{$h($row["type"
0450: 5d 29 7d 22 20 73 69 7a 65 3d 31 33 3e 3c 2f 74  ])}" size=13></t
0460: 64 3e 0a 20 20 20 20 20 20 20 20 3c 74 64 3e 3c  d>.        <td><
0470: 74 65 78 74 61 72 65 61 20 6e 61 6d 65 3d 22 68  textarea name="h
0480: 6f 6f 6b 73 5b 63 6d 64 5d 5b 24 69 5d 22 20 63  ooks[cmd][$i]" c
0490: 6f 6c 73 3d 37 35 20 72 6f 77 73 3d 24 72 6f 77  ols=75 rows=$row
04a0: 73 3e 7b 24 68 28 24 72 6f 77 5b 22 63 6d 64 22  s>{$h($row["cmd"
04b0: 5d 29 7d 3c 2f 74 65 78 74 61 72 65 61 3e 3c 2f  ])}</textarea></
04c0: 74 64 3e 0a 20 20 20 20 20 20 20 20 3c 74 64 3e  td>.        <td>
04d0: 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 22 68 6f 6f  <input name="hoo
04e0: 6b 73 5b 73 65 71 5d 5b 24 69 5d 22 20 76 61 6c  ks[seq][$i]" val
04f0: 75 65 3d 22 7b 24 68 28 24 72 6f 77 5b 22 73 65  ue="{$h($row["se
0500: 71 22 5d 29 7d 22 20 73 69 7a 65 3d 33 3e 3c 2f  q"])}" size=3></
0510: 74 64 3e 0a 20 20 20 20 3c 2f 74 72 3e 0a 45 4e  td>.    </tr>.EN
0520: 44 3b 0a 20 20 20 20 2f 2a 20 20 3c 74 64 3e 7b  D;.    /*  <td>{
0530: 24 68 28 24 69 29 7d 3c 2f 74 64 3e 0a 20 20 20  $h($i)}</td>.   
0540: 20 20 20 20 20 3c 74 64 3e 7b 24 68 28 24 72 6f       <td>{$h($ro
0550: 77 5b 22 74 79 70 65 22 5d 29 7d 3c 2f 74 64 3e  w["type"])}</td>
0560: 0a 20 20 20 20 20 20 20 20 3c 74 64 3e 7b 24 68  .        <td>{$h
0570: 28 24 72 6f 77 5b 22 63 6d 64 22 5d 29 7d 3c 2f  ($row["cmd"])}</
0580: 74 64 3e 0a 20 20 20 20 20 20 20 20 3c 74 64 3e  td>.        <td>
0590: 7b 24 68 28 24 72 6f 77 5b 22 73 65 71 22 5d 29  {$h($row["seq"])
05a0: 7d 3c 2f 74 64 3e 20 20 2a 2f 0a 7d 0a 0a 0a 23  }</td>  */.}...#
05b0: 2d 2d 20 69 74 65 72 61 74 65 20 6f 76 65 72 20  -- iterate over 
05c0: 73 63 72 69 70 74 73 20 66 6f 72 20 64 69 73 70  scripts for disp
05d0: 6c 61 79 0a 70 61 67 65 5f 6d 64 28 22 0a 20 20  lay.page_md(".  
05e0: 3c 64 69 76 20 63 6c 61 73 73 3d 63 6f 6e 66 69  <div class=confi
05f0: 67 2d 6c 69 73 74 3e 0a 20 20 3c 66 6f 72 6d 20  g-list>.  <form 
0600: 6d 65 74 68 6f 64 3d 50 4f 53 54 20 65 6e 63 74  method=POST enct
0610: 79 70 65 3d 27 6d 75 6c 74 69 70 61 72 74 2f 66  ype='multipart/f
0620: 6f 72 6d 2d 64 61 74 61 27 3e 0a 20 20 20 20 3c  orm-data'>.    <
0630: 64 61 74 61 6c 69 73 74 20 69 64 3d 68 6f 6f 6b  datalist id=hook
0640: 74 79 70 65 73 3e 0a 20 20 20 20 20 20 3c 6f 70  types>.      <op
0650: 74 69 6f 6e 20 76 61 6c 75 65 3d 61 66 74 65 72  tion value=after
0660: 2d 72 65 63 65 69 76 65 20 74 69 74 6c 65 3d 27  -receive title='
0670: 61 66 74 65 72 20 65 76 65 72 79 20 63 6f 6d 6d  after every comm
0680: 69 74 20 6f 72 20 70 75 73 68 2f 70 75 6c 6c 27  it or push/pull'
0690: 3e 0a 20 20 20 20 20 20 3c 6f 70 74 69 6f 6e 20  >.      <option 
06a0: 76 61 6c 75 65 3d 62 65 66 6f 72 65 2d 63 6f 6d  value=before-com
06b0: 6d 69 74 3e 0a 20 20 20 20 20 20 3c 6f 70 74 69  mit>.      <opti
06c0: 6f 6e 20 76 61 6c 75 65 3d 63 6f 6d 6d 69 74 2d  on value=commit-
06d0: 6d 73 67 3e 0a 20 20 20 20 20 20 3c 6f 70 74 69  msg>.      <opti
06e0: 6f 6e 20 76 61 6c 75 65 3d 64 69 73 61 62 6c 65  on value=disable
06f0: 64 3e 0a 20 20 20 20 3c 2f 64 61 74 61 6c 69 73  d>.    </datalis
0700: 74 3e 0a 20 20 3c 74 61 62 6c 65 3e 0a 20 20 3c  t>.  <table>.  <
0710: 74 72 3e 20 3c 74 68 3e 23 3c 2f 74 68 3e 20 3c  tr> <th>#</th> <
0720: 74 68 3e 74 79 70 65 3c 2f 74 68 3e 20 3c 74 68  th>type</th> <th
0730: 3e 63 6f 6d 6d 61 6e 64 3c 2f 74 68 3e 20 3c 74  >command</th> <t
0740: 68 3e 73 65 71 3c 2f 74 68 3e 20 3c 2f 74 72 3e  h>seq</th> </tr>
0750: 0a 22 29 3b 0a 24 68 6f 6f 6b 73 20 3d 20 6a 73  .");.$hooks = js
0760: 6f 6e 5f 64 65 63 6f 64 65 28 67 65 74 5f 63 6f  on_decode(get_co
0770: 6e 66 69 67 28 22 68 6f 6f 6b 73 22 2c 20 22 5b  nfig("hooks", "[
0780: 5d 22 29 2c 20 54 52 55 45 29 3b 0a 66 6f 72 65  ]"), TRUE);.fore
0790: 61 63 68 20 28 24 68 6f 6f 6b 73 20 61 73 20 24  ach ($hooks as $
07a0: 69 3d 3e 24 72 6f 77 29 20 7b 0a 20 20 20 20 68  i=>$row) {.    h
07b0: 6f 6f 6b 5f 72 6f 77 28 24 69 2c 20 24 72 6f 77  ook_row($i, $row
07c0: 29 3b 0a 7d 0a 68 6f 6f 6b 5f 72 6f 77 28 63 6f  );.}.hook_row(co
07d0: 75 6e 74 28 24 68 6f 6f 6b 73 29 2c 20 5b 22 74  unt($hooks), ["t
07e0: 79 70 65 22 3d 3e 22 61 66 74 65 72 2d 72 65 63  ype"=>"after-rec
07f0: 65 69 76 65 22 2c 20 22 63 6d 64 22 3d 3e 22 22  eive", "cmd"=>""
0800: 2c 20 22 73 65 71 22 3d 3e 35 30 5d 2c 20 33 29  , "seq"=>50], 3)
0810: 3b 0a 23 70 72 69 6e 74 5f 72 28 24 5f 53 45 52  ;.#print_r($_SER
0820: 56 45 52 29 3b 0a 3f 3e 0a 3c 74 72 3e 3c 74 64  VER);.?>.<tr><td
0830: 20 63 6f 6c 73 70 61 6e 3d 34 20 61 6c 69 67 6e   colspan=4 align
0840: 3d 63 65 6e 74 65 72 3e 3c 69 6e 70 75 74 20 74  =center><input t
0850: 79 70 65 3d 73 75 62 6d 69 74 20 76 61 6c 75 65  ype=submit value
0860: 3d 22 41 64 64 20 2f 20 53 61 76 65 22 20 63 6c  ="Add / Save" cl
0870: 61 73 73 3d 73 61 76 65 2d 62 75 74 74 6f 6e 3e  ass=save-button>
0880: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62  </td></tr>.</tab
0890: 6c 65 3e 0a 3c 2f 66 6f 72 6d 3e 0a 3c 68 33 3e  le>.</form>.<h3>
08a0: 57 65 62 20 68 6f 6f 6b 73 3c 2f 68 33 3e 0a 3c  Web hooks</h3>.<
08b0: 70 3e 0a 41 64 64 20 6f 6e 65 20 6f 66 20 74 68  p>.Add one of th
08c0: 65 20 73 74 61 6e 64 61 72 64 20 77 65 62 68 6f  e standard webho
08d0: 6f 6b 20 73 65 72 76 69 63 65 73 3a 0a 3c 2f 70  ok services:.</p
08e0: 3e 0a 3c 70 3e 0a 3c 73 65 6c 65 63 74 20 69 64  >.<p>.<select id
08f0: 3d 77 65 62 5f 73 65 74 20 6f 6e 63 68 61 6e 67  =web_set onchang
0900: 65 3d 22 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45  e="document.getE
0910: 6c 65 6d 65 6e 74 42 79 49 64 28 27 68 6f 6f 6b  lementById('hook
0920: 5f 63 6d 64 27 29 2e 69 6e 6e 65 72 54 65 78 74  _cmd').innerText
0930: 3d 74 68 69 73 2e 76 61 6c 75 65 22 3e 0a 3c 6f  =this.value">.<o
0940: 70 74 69 6f 6e 20 76 61 6c 75 65 3d 27 27 3e 0a  ption value=''>.
0950: 3c 6f 70 74 69 6f 6e 20 76 61 6c 75 65 3d 27 63  <option value='c
0960: 75 72 6c 20 2d 58 20 50 4f 53 54 20 2d 64 20 22  url -X POST -d "
0970: 62 72 61 6e 63 68 65 73 3d 74 72 75 6e 6b 22 20  branches=trunk" 
0980: 2d 64 20 22 74 6f 6b 65 6e 3d 31 32 33 34 22 20  -d "token=1234" 
0990: 68 74 74 70 73 3a 2f 2f 72 65 61 64 74 68 65 64  https://readthed
09a0: 6f 63 73 2e 6f 72 67 2f 61 70 69 2f 76 32 2f 77  ocs.org/api/v2/w
09b0: 65 62 68 6f 6f 6b 2f 65 78 61 6d 70 6c 65 2d 70  ebhook/example-p
09c0: 72 6f 6a 65 63 74 2f 31 2f 27 3e 52 65 61 64 54  roject/1/'>ReadT
09d0: 68 65 44 6f 63 73 0a 3c 6f 70 74 69 6f 6e 20 76  heDocs.<option v
09e0: 61 6c 75 65 3d 27 77 67 65 74 20 68 74 74 70 73  alue='wget https
09f0: 3a 2f 2f 31 32 37 2e 30 2e 30 2e 31 2f 6a 65 6e  ://127.0.0.1/jen
0a00: 6b 69 6e 73 2f 67 69 74 68 75 62 2d 77 65 62 6f  kins/github-webo
0a10: 6f 6b 27 3e 4a 65 6e 6b 69 6e 73 0a 3c 6f 70 74  ok'>Jenkins.<opt
0a20: 69 6f 6e 20 76 61 6c 75 65 3d 27 77 67 65 74 20  ion value='wget 
0a30: 68 74 74 70 73 3a 2f 2f 6c 6f 63 61 6c 68 6f 73  https://localhos
0a40: 74 3a 38 30 38 30 2f 65 78 74 2f 66 78 5f 6d 65  t:8080/ext/fx_me
0a50: 74 61 27 3e 66 6f 73 73 69 6c 2f 65 78 74 2f 66  ta'>fossil/ext/f
0a60: 78 5f 6d 65 74 61 0a 3c 2f 73 65 6c 65 63 74 3e  x_meta.</select>
0a70: 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 44 6f 63 73 3c  .</p>..<h3>Docs<
0a80: 2f 68 33 3e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 53  /h3>.<ul>.<li> S
0a90: 65 65 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70  ee <a href="http
0aa0: 73 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f  s://fossil-scm.o
0ab0: 72 67 2f 68 6f 6d 65 2f 64 6f 63 2f 74 72 75 6e  rg/home/doc/trun
0ac0: 6b 2f 77 77 77 2f 68 6f 6f 6b 73 2e 6d 64 22 3e  k/www/hooks.md">
0ad0: 68 6f 6f 6b 73 2e 6d 64 3c 2f 61 3e 20 6f 6e 20  hooks.md</a> on 
0ae0: 68 6f 77 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65  how commands are
0af0: 20 72 75 6e 2e 0a 3c 6c 69 3e 20 45 6d 75 6c 61   run..<li> Emula
0b00: 74 65 20 68 74 74 70 73 3a 2f 2f 64 6f 63 73 2e  te https://docs.
0b10: 67 69 74 68 75 62 2e 63 6f 6d 2f 65 6e 2f 64 65  github.com/en/de
0b20: 76 65 6c 6f 70 65 72 73 2f 77 65 62 68 6f 6f 6b  velopers/webhook
0b30: 73 2d 61 6e 64 2d 65 76 65 6e 74 73 2f 77 65 62  s-and-events/web
0b40: 68 6f 6f 6b 73 2f 77 65 62 68 6f 6f 6b 2d 65 76  hooks/webhook-ev
0b50: 65 6e 74 73 2d 61 6e 64 2d 70 61 79 6c 6f 61 64  ents-and-payload
0b60: 73 20 e2 80 a6 0a 3c 6c 69 3e 20 50 72 6f 62 61  s ….<li> Proba
0b70: 62 6c 79 20 6e 65 65 64 73 20 61 20 63 6d 64 6c  bly needs a cmdl
0b80: 69 6e 65 20 68 65 6c 70 65 72 20 3c 63 6f 64 65  ine helper <code
0b90: 3e 66 6f 73 73 69 6c 2d 77 65 62 68 6f 6f 6b 3c  >fossil-webhook<
0ba0: 2f 63 6f 64 65 3e 0a 3c 2f 75 6c 3e 0a 3c 2f 64  /code>.</ul>.</d
0bb0: 69 76 3e 0a                                      iv>.