Collection of themes/skins for the Fossil SCM

⌈⌋ ⎇ branch:  Fossil Skins Extra


Hex Artifact Content

Artifact 239f728b38f81d339f0091fca0f22131ce489f05:

  • Executable file extroot/project.json — part of check-in [b03092cc52] at 2021-10-19 20:44:00 on branch trunk — Introduce project.json listing (user: mario size: 3031)

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 6f 75 74 70 75 74 0a 23 20 63 61  ype: output.# ca
0060: 74 65 67 6f 72 79 3a 20 61 70 69 0a 23 20 74 69  tegory: api.# ti
0070: 74 6c 65 3a 20 70 72 6f 6a 65 63 74 2e 6a 73 6f  tle: project.jso
0080: 6e 0a 23 20 64 65 73 63 72 69 70 74 69 6f 6e 3a  n.# description:
0090: 20 66 72 65 73 68 63 6f 64 65 2d 73 74 79 6c 65   freshcode-style
00a0: 20 70 72 6f 6a 65 63 74 2e 6a 73 6f 6e 20 77 2f   project.json w/
00b0: 20 63 68 61 6e 67 65 6c 6f 67 0a 23 20 76 65 72   changelog.# ver
00c0: 73 69 6f 6e 3a 20 30 2e 31 0a 23 20 73 74 61 74  sion: 0.1.# stat
00d0: 65 3a 20 62 65 74 61 0a 23 20 64 65 70 65 6e 64  e: beta.# depend
00e0: 73 3a 20 70 68 70 3a 73 71 6c 69 74 65 0a 23 20  s: php:sqlite.# 
00f0: 63 6f 6e 66 69 67 3a 20 2d 0a 23 20 61 63 63 65  config: -.# acce
0100: 73 73 3a 20 70 75 62 6c 69 63 0a 23 0a 23 20 47  ss: public.#.# G
0110: 65 6e 65 72 61 74 65 73 20 61 20 70 72 6f 6a 65  enerates a proje
0120: 63 74 2e 6a 73 6f 6e 20 63 6f 6e 74 61 69 6e 69  ct.json containi
0130: 6e 67 20 67 65 6e 65 72 61 6c 20 64 65 74 61 69  ng general detai
0140: 6c 73 0a 23 20 61 73 20 77 65 6c 6c 20 61 73 20  ls.# as well as 
0150: 61 20 60 72 65 6c 65 61 73 65 73 60 20 63 68 61  a `releases` cha
0160: 6e 67 65 6c 6f 67 20 2b 20 64 6f 77 6e 6c 6f 61  ngelog + downloa
0170: 64 20 6c 69 6e 6b 73 2e 0a 23 0a 0a 0a 23 2d 2d  d links..#...#--
0180: 20 69 6e 69 74 0a 69 6e 63 6c 75 64 65 28 22 2e   init.include(".
0190: 2f 66 6f 73 73 69 6c 5f 63 6f 6d 6d 6f 6e 2e 70  /fossil_common.p
01a0: 68 70 22 29 3b 0a 0a 0a 23 2d 2d 20 63 68 61 6e  hp");...#-- chan
01b0: 67 65 6c 6f 67 0a 66 75 6e 63 74 69 6f 6e 20 72  gelog.function r
01c0: 63 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e  c() {.    return
01d0: 20 64 62 28 22 0a 20 20 20 20 20 53 45 4c 45 43   db(".     SELEC
01e0: 54 20 65 76 65 6e 74 2e 6d 74 69 6d 65 2c 20 74  T event.mtime, t
01f0: 61 67 2e 74 61 67 6e 61 6d 65 2c 20 4d 41 58 28  ag.tagname, MAX(
0200: 74 61 67 2e 74 61 67 69 64 29 2c 20 44 41 54 45  tag.tagid), DATE
0210: 28 65 76 65 6e 74 2e 6d 74 69 6d 65 29 20 41 53  (event.mtime) AS
0220: 20 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   d,.            
0230: 65 76 65 6e 74 2e 63 6f 6d 6d 65 6e 74 20 41 53  event.comment AS
0240: 20 63 6f 6d 6d 65 6e 74 0a 20 20 20 20 20 46 52   comment.     FR
0250: 4f 4d 20 65 76 65 6e 74 0a 20 20 20 20 20 20 4c  OM event.      L
0260: 45 46 54 20 4a 4f 49 4e 20 74 61 67 78 72 65 66  EFT JOIN tagxref
0270: 20 4f 4e 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d   ON event.objid=
0280: 74 61 67 78 72 65 66 2e 72 69 64 0a 20 20 20 20  tagxref.rid.    
0290: 20 20 4c 45 46 54 20 4a 4f 49 4e 20 74 61 67 20    LEFT JOIN tag 
02a0: 4f 4e 20 74 61 67 78 72 65 66 2e 74 61 67 69 64  ON tagxref.tagid
02b0: 3d 74 61 67 2e 74 61 67 69 64 0a 20 20 20 20 20  =tag.tagid.     
02c0: 57 48 45 52 45 20 74 79 70 65 3d 27 63 69 27 0a  WHERE type='ci'.
02d0: 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 6f 62       GROUP BY ob
02e0: 6a 69 64 0a 20 20 20 20 20 4f 52 44 45 52 20 42  jid.     ORDER B
02f0: 59 20 65 76 65 6e 74 2e 6d 74 69 6d 65 20 44 45  Y event.mtime DE
0300: 53 43 0a 20 20 20 20 20 4c 49 4d 49 54 20 31 37  SC.     LIMIT 17
0310: 35 30 0a 20 20 20 20 22 29 20 2b 20 5b 39 39 39  50.    ") + [999
0320: 39 39 3d 3e 5b 22 74 61 67 6e 61 6d 65 22 3d 3e  99=>["tagname"=>
0330: 22 65 6e 64 2d 30 2e 30 22 2c 20 22 64 22 3d 3e  "end-0.0", "d"=>
0340: 22 30 2d 30 2d 30 22 2c 20 22 63 6f 6d 6d 65 6e  "0-0-0", "commen
0350: 74 22 3d 3e 22 2d 22 5d 5d 3b 0a 7d 0a 23 20 67  t"=>"-"]];.}.# g
0360: 75 65 73 73 20 73 74 61 62 69 6c 69 74 79 0a 66  uess stability.f
0370: 75 6e 63 74 69 6f 6e 20 73 74 61 74 65 28 24 76  unction state($v
0380: 65 72 2c 20 24 63 68 61 6e 67 65 73 29 20 7b 0a  er, $changes) {.
0390: 20 20 20 20 69 66 20 28 70 72 65 67 5f 6d 61 74      if (preg_mat
03a0: 63 68 28 22 2f 73 74 61 62 6c 65 7c 62 65 74 61  ch("/stable|beta
03b0: 7c 61 6c 70 68 61 2f 22 2c 20 24 63 68 61 6e 67  |alpha/", $chang
03c0: 65 73 2c 20 24 75 75 29 29 20 7b 0a 20 20 20 20  es, $uu)) {.    
03d0: 20 20 20 20 72 65 74 75 72 6e 20 24 75 75 5b 30      return $uu[0
03e0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73  ];.    }.    els
03f0: 65 69 66 20 28 70 72 65 67 5f 6d 61 74 63 68 28  eif (preg_match(
0400: 22 2f 5c 2e 30 2f 22 2c 20 24 76 65 72 29 29 20  "/\.0/", $ver)) 
0410: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
0420: 20 22 73 74 61 62 6c 65 22 3b 0a 20 20 20 20 7d   "stable";.    }
0430: 0a 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 20 20  .    else {.    
0440: 20 20 20 20 72 65 74 75 72 6e 20 22 64 65 76 65      return "deve
0450: 6c 6f 70 6d 65 6e 74 22 3b 0a 20 20 20 20 7d 0a  lopment";.    }.
0460: 7d 0a 23 20 6a 75 64 67 65 20 66 69 78 2f 63 68  }.# judge fix/ch
0470: 61 6e 67 65 79 6e 65 73 73 0a 66 75 6e 63 74 69  angeyness.functi
0480: 6f 6e 20 73 63 6f 70 65 28 24 76 65 72 2c 20 24  on scope($ver, $
0490: 63 68 61 6e 67 65 73 29 20 7b 0a 20 20 20 20 24  changes) {.    $
04a0: 66 69 78 20 3d 20 70 72 65 67 5f 6d 61 74 63 68  fix = preg_match
04b0: 5f 61 6c 6c 28 22 2f 66 69 78 7c 63 6f 72 72 65  _all("/fix|corre
04c0: 63 74 7c 6d 65 72 67 65 2f 69 22 2c 20 24 63 68  ct|merge/i", $ch
04d0: 61 6e 67 65 73 2c 20 24 75 75 29 3b 0a 20 20 20  anges, $uu);.   
04e0: 20 24 61 64 64 20 3d 20 70 72 65 67 5f 6d 61 74   $add = preg_mat
04f0: 63 68 5f 61 6c 6c 28 22 2f 61 64 64 7c 63 68 61  ch_all("/add|cha
0500: 6e 67 65 7c 69 6e 74 72 6f 2f 69 22 2c 20 24 63  nge|intro/i", $c
0510: 68 61 6e 67 65 73 2c 20 24 75 75 29 3b 0a 20 20  hanges, $uu);.  
0520: 20 20 24 73 20 3d 20 20 28 28 24 66 69 78 20 2b    $s =  (($fix +
0530: 20 24 61 64 64 29 20 3e 20 32 30 29 20 3f 20 22   $add) > 20) ? "
0540: 6d 61 6a 6f 72 20 22 20 3a 20 22 6d 69 6e 6f 72  major " : "minor
0550: 20 22 3b 0a 20 20 20 20 24 73 20 2e 3d 20 28 24   ";.    $s .= ($
0560: 66 69 78 20 3e 20 24 61 64 64 29 20 3f 20 22 62  fix > $add) ? "b
0570: 75 67 66 69 78 22 20 3a 20 22 63 68 61 6e 67 65  ugfix" : "change
0580: 73 22 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 24  s";.    return $
0590: 73 3b 0a 7d 0a 23 20 73 74 61 63 6b 20 72 65 6c  s;.}.# stack rel
05a0: 65 61 73 65 20 6e 6f 74 65 73 20 62 79 20 74 61  ease notes by ta
05b0: 67 2f 76 65 72 73 69 6f 6e 0a 66 75 6e 63 74 69  g/version.functi
05c0: 6f 6e 20 72 65 6c 65 61 73 65 73 28 29 20 7b 0a  on releases() {.
05d0: 20 20 20 20 24 76 65 72 20 3d 20 22 74 72 75 6e      $ver = "trun
05e0: 6b 22 3b 0a 20 20 20 20 24 64 61 74 65 20 3d 20  k";.    $date = 
05f0: 74 69 6d 65 28 29 3b 0a 20 20 20 20 24 63 68 61  time();.    $cha
0600: 6e 67 65 73 20 3d 20 22 22 3b 0a 20 20 20 20 24  nges = "";.    $
0610: 72 65 6c 65 61 73 65 73 20 3d 20 5b 5d 3b 0a 20  releases = [];. 
0620: 20 20 20 66 6f 72 65 61 63 68 28 72 63 28 29 20     foreach(rc() 
0630: 61 73 20 24 72 29 20 7b 0a 20 20 20 20 20 20 20  as $r) {.       
0640: 20 69 66 20 28 70 72 65 67 5f 6d 61 74 63 68 28   if (preg_match(
0650: 22 2f 5c 64 2b 5c 2e 5c 64 2b 2f 22 2c 20 24 72  "/\d+\.\d+/", $r
0660: 5b 22 74 61 67 6e 61 6d 65 22 5d 29 20 61 6e 64  ["tagname"]) and
0670: 20 24 72 5b 22 74 61 67 6e 61 6d 65 22 5d 20 21   $r["tagname"] !
0680: 3d 20 24 76 65 72 29 20 7b 0a 23 20 20 20 20 20  = $ver) {.#     
0690: 20 20 20 20 20 20 20 69 66 20 28 24 76 65 72 20         if ($ver 
06a0: 21 3d 20 22 74 72 75 6e 6b 22 29 0a 20 20 20 20  != "trunk").    
06b0: 20 20 20 20 20 20 20 20 24 72 65 6c 65 61 73 65          $release
06c0: 73 5b 5d 20 3d 20 5b 0a 20 20 20 20 20 20 20 20  s[] = [.        
06d0: 20 20 20 20 20 20 20 20 22 76 65 72 73 69 6f 6e          "version
06e0: 22 20 3d 3e 20 70 72 65 67 5f 72 65 70 6c 61 63  " => preg_replac
06f0: 65 28 22 2f 5e 2e 2b 3f 28 3f 3d 5c 64 2b 5c 2e  e("/^.+?(?=\d+\.
0700: 5c 64 2b 29 2f 22 2c 20 22 22 2c 20 24 76 65 72  \d+)/", "", $ver
0710: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
0720: 20 20 20 22 73 74 61 74 65 22 20 3d 3e 20 73 74     "state" => st
0730: 61 74 65 28 24 76 65 72 2c 20 24 63 68 61 6e 67  ate($ver, $chang
0740: 65 73 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  es),.           
0750: 20 20 20 20 20 22 73 63 6f 70 65 22 20 3d 3e 20       "scope" => 
0760: 73 63 6f 70 65 28 24 76 65 72 2c 20 24 63 68 61  scope($ver, $cha
0770: 6e 67 65 73 29 2c 0a 20 20 20 20 20 20 20 20 20  nges),.         
0780: 20 20 20 20 20 20 20 22 63 68 61 6e 67 65 73 22         "changes"
0790: 20 3d 3e 20 73 75 62 73 74 72 28 24 63 68 61 6e   => substr($chan
07a0: 67 65 73 2c 20 30 2c 20 31 30 32 34 29 2c 0a 20  ges, 0, 1024),. 
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
07c0: 64 6f 77 6e 6c 6f 61 64 22 20 3d 3e 20 22 24 5f  download" => "$_
07d0: 53 45 52 56 45 52 5b 46 4f 53 53 49 4c 5f 53 45  SERVER[FOSSIL_SE
07e0: 4c 46 5d 7a 69 70 3f 6e 61 6d 65 3d 24 76 65 72  LF]zip?name=$ver
07f0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
0800: 20 20 20 22 70 75 62 6c 69 73 68 65 64 22 20 3d     "published" =
0810: 3e 20 24 64 61 74 65 2c 0a 20 20 20 20 20 20 20  > $date,.       
0820: 20 20 20 20 20 5d 3b 0a 20 20 20 20 20 20 20 20       ];.        
0830: 20 20 20 20 24 63 68 61 6e 67 65 73 20 3d 20 22      $changes = "
0840: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  ";.            $
0850: 76 65 72 20 3d 20 24 72 5b 22 74 61 67 6e 61 6d  ver = $r["tagnam
0860: 65 22 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  e"];.           
0870: 20 24 64 61 74 65 20 3d 20 24 72 5b 22 64 22 5d   $date = $r["d"]
0880: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0890: 20 20 20 20 24 63 68 61 6e 67 65 73 20 2e 3d 20      $changes .= 
08a0: 24 72 5b 22 63 6f 6d 6d 65 6e 74 22 5d 20 2e 20  $r["comment"] . 
08b0: 22 5c 6e 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20  "\n";.    }.    
08c0: 72 65 74 75 72 6e 20 24 72 65 6c 65 61 73 65 73  return $releases
08d0: 3b 0a 7d 0a 0a 23 2d 2d 20 6f 75 74 70 75 74 0a  ;.}..#-- output.
08e0: 68 65 61 64 65 72 28 22 6a 73 6f 6e 2f 76 6e 64  header("json/vnd
08f0: 2e 66 72 65 73 68 63 6f 64 65 2e 63 6c 75 62 3b  .freshcode.club;
0900: 20 63 68 61 72 73 65 74 3d 55 54 46 2d 38 22 29   charset=UTF-8")
0910: 3b 0a 70 72 69 6e 74 28 6a 73 6f 6e 5f 65 6e 63  ;.print(json_enc
0920: 6f 64 65 28 5b 0a 20 20 20 20 22 5c 24 66 65 65  ode([.    "\$fee
0930: 64 2d 6f 72 69 67 69 6e 22 20 3d 3e 20 22 24 5f  d-origin" => "$_
0940: 53 45 52 56 45 52 5b 46 4f 53 53 49 4c 5f 53 45  SERVER[FOSSIL_SE
0950: 4c 46 5d 22 2c 0a 20 20 20 20 22 5c 24 66 65 65  LF]",.    "\$fee
0960: 64 2d 6c 69 63 65 6e 73 65 22 20 3d 3e 20 22 43  d-license" => "C
0970: 43 2d 42 59 2d 53 41 20 34 2e 30 22 2c 0a 20 20  C-BY-SA 4.0",.  
0980: 20 20 22 6e 61 6d 65 22 20 3d 3e 20 70 72 65 67    "name" => preg
0990: 5f 72 65 70 6c 61 63 65 28 22 2f 5c 2e 5c 77 2b  _replace("/\.\w+
09a0: 24 2f 22 2c 20 22 22 2c 20 62 61 73 65 6e 61 6d  $/", "", basenam
09b0: 65 28 24 5f 53 45 52 56 45 52 5b 22 46 4f 53 53  e($_SERVER["FOSS
09c0: 49 4c 5f 52 45 50 4f 53 49 54 4f 52 59 22 5d 29  IL_REPOSITORY"])
09d0: 29 2c 0a 20 20 20 20 22 74 69 74 6c 65 22 20 3d  ),.    "title" =
09e0: 3e 20 67 65 74 5f 63 6f 6e 66 69 67 28 22 70 72  > get_config("pr
09f0: 6f 6a 65 63 74 2d 6e 61 6d 65 22 2c 20 22 22 29  oject-name", "")
0a00: 2c 0a 20 20 20 20 22 73 75 6d 6d 61 72 79 22 20  ,.    "summary" 
0a10: 3d 3e 20 73 75 62 73 74 72 28 67 65 74 5f 63 6f  => substr(get_co
0a20: 6e 66 69 67 28 22 70 72 6f 6a 65 63 74 2d 64 65  nfig("project-de
0a30: 73 63 72 69 70 74 69 6f 6e 22 2c 20 4e 55 4c 4c  scription", NULL
0a40: 29 2c 20 30 2c 20 35 30 29 2c 0a 20 20 20 20 22  ), 0, 50),.    "
0a50: 64 65 73 63 72 69 70 74 69 6f 6e 22 20 3d 3e 20  description" => 
0a60: 67 65 74 5f 63 6f 6e 66 69 67 28 22 70 72 6f 6a  get_config("proj
0a70: 65 63 74 2d 64 65 73 63 72 69 70 74 69 6f 6e 22  ect-description"
0a80: 2c 20 22 22 29 2c 0a 20 20 20 20 22 68 6f 6d 65  , ""),.    "home
0a90: 70 61 67 65 22 20 3d 3e 20 67 65 74 5f 63 6f 6e  page" => get_con
0aa0: 66 69 67 28 22 70 72 6f 6a 65 63 74 2d 68 6f 6d  fig("project-hom
0ab0: 65 70 61 67 65 22 2c 20 22 24 5f 53 45 52 56 45  epage", "$_SERVE
0ac0: 52 5b 46 4f 53 53 49 4c 5f 53 45 4c 46 5d 22 29  R[FOSSIL_SELF]")
0ad0: 2c 0a 20 20 20 20 22 6c 69 63 65 6e 73 65 22 20  ,.    "license" 
0ae0: 3d 3e 20 67 65 74 5f 63 6f 6e 66 69 67 28 22 70  => get_config("p
0af0: 72 6f 6a 65 63 74 2d 6c 69 63 65 6e 73 65 22 2c  roject-license",
0b00: 20 22 22 29 2c 0a 20 20 20 20 22 74 61 67 73 22   ""),.    "tags"
0b10: 20 3d 3e 20 67 65 74 5f 63 6f 6e 66 69 67 28 22   => get_config("
0b20: 70 72 6f 6a 65 63 74 2d 74 61 67 73 22 2c 20 22  project-tags", "
0b30: 22 29 2c 0a 20 20 20 20 22 69 6d 61 67 65 22 20  "),.    "image" 
0b40: 3d 3e 20 22 24 5f 53 45 52 56 45 52 5b 46 4f 53  => "$_SERVER[FOS
0b50: 53 49 4c 5f 53 45 4c 46 5d 6c 6f 67 6f 22 2c 0a  SIL_SELF]logo",.
0b60: 20 20 20 20 22 73 75 62 6d 69 74 74 65 72 22 20      "submitter" 
0b70: 3d 3e 20 22 22 2c 0a 20 20 20 20 22 75 72 6c 73  => "",.    "urls
0b80: 22 20 3d 3e 20 5b 5d 2c 0a 20 20 20 20 22 72 65  " => [],.    "re
0b90: 6c 65 61 73 65 73 22 20 3d 3e 20 72 65 6c 65 61  leases" => relea
0ba0: 73 65 73 28 29 2c 0a 5d 2c 20 4a 53 4f 4e 5f 50  ses(),.], JSON_P
0bb0: 52 45 54 54 59 5f 50 52 49 4e 54 7c 4a 53 4f 4e  RETTY_PRINT|JSON
0bc0: 5f 55 4e 45 53 43 41 50 45 44 5f 53 4c 41 53 48  _UNESCAPED_SLASH
0bd0: 45 53 29 29 3b 0a 0a                             ES));..