@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at upstream/main 137 lines 3.2 kB view raw
1<?php 2 3abstract class DifferentialChangesetTestRenderer 4 extends DifferentialChangesetRenderer { 5 6 protected function renderChangeTypeHeader($force) { 7 $changeset = $this->getChangeset(); 8 9 $old = nonempty($changeset->getOldFile(), '-'); 10 $current = nonempty($changeset->getFilename(), '-'); 11 $away = nonempty(implode(', ', $changeset->getAwayPaths()), '-'); 12 13 $ctype = $changeset->getChangeType(); 14 $ftype = $changeset->getFileType(); 15 $force = ($force ? '(forced)' : '(unforced)'); 16 17 return "CTYPE {$ctype} {$ftype} {$force}\n". 18 "{$old}\n". 19 "{$current}\n". 20 "{$away}\n"; 21 } 22 23 protected function renderUndershieldHeader() { 24 return null; 25 } 26 27 public function renderShield($message, $force = 'default') { 28 return "SHIELD ({$force}) {$message}\n"; 29 } 30 31 protected function renderPropertyChangeHeader() { 32 $changeset = $this->getChangeset(); 33 list($old, $new) = $this->getChangesetProperties($changeset); 34 35 foreach (array_keys($old) as $key) { 36 if ($old[$key] === idx($new, $key)) { 37 unset($old[$key]); 38 unset($new[$key]); 39 } 40 } 41 42 if (!$old && !$new) { 43 return null; 44 } 45 46 $props = ''; 47 foreach ($old as $key => $value) { 48 $props .= "P - {$key} {$value}~\n"; 49 } 50 foreach ($new as $key => $value) { 51 $props .= "P + {$key} {$value}~\n"; 52 } 53 54 return "PROPERTIES\n".$props; 55 } 56 57 public function renderTextChange( 58 $range_start, 59 $range_len, 60 $rows) { 61 62 $out = array(); 63 64 $any_old = false; 65 $any_new = false; 66 $primitives = $this->buildPrimitives($range_start, $range_len); 67 foreach ($primitives as $p) { 68 $type = $p['type']; 69 switch ($type) { 70 case 'old': 71 case 'new': 72 if ($type == 'old') { 73 $any_old = true; 74 } 75 if ($type == 'new') { 76 $any_new = true; 77 } 78 $num = nonempty($p['line'], '-'); 79 $render = (string)$p['render']; 80 $htype = nonempty($p['htype'], '.'); 81 82 // TODO: This should probably happen earlier, whenever we deal with 83 // \r and \t normalization? 84 $render = str_replace( 85 array( 86 "\r", 87 "\n", 88 ), 89 array( 90 '\\r', 91 '\\n', 92 ), 93 $render); 94 95 $render = str_replace( 96 array( 97 '<span class="bright">', 98 '</span>', 99 '<span class="depth-out">', 100 '<span class="depth-in">', 101 ), 102 array( 103 '{(', 104 ')}', 105 '{<', 106 '{>', 107 ), 108 $render); 109 110 $render = html_entity_decode($render, ENT_QUOTES); 111 112 $t = ($type == 'old') ? 'O' : 'N'; 113 114 $out[] = "{$t} {$num} {$htype} {$render}~"; 115 break; 116 case 'no-context': 117 $out[] = 'X <MISSING-CONTEXT>'; 118 break; 119 default: 120 $out[] = $type; 121 break; 122 } 123 } 124 125 if (!$any_old) { 126 $out[] = 'O X <EMPTY>'; 127 } 128 129 if (!$any_new) { 130 $out[] = 'N X <EMPTY>'; 131 } 132 133 $out = implode("\n", $out)."\n"; 134 return phutil_safe_html($out); 135 } 136 137}