Page MenuHomePhabricator

D13094.diff
No OneTemporary

D13094.diff

diff --git a/src/lint/ArcanistLintMessage.php b/src/lint/ArcanistLintMessage.php
--- a/src/lint/ArcanistLintMessage.php
+++ b/src/lint/ArcanistLintMessage.php
@@ -8,41 +8,33 @@
protected $path;
protected $line;
protected $char;
+ protected $linterName;
protected $code;
protected $severity;
protected $name;
protected $description;
protected $originalText;
protected $replacementText;
- protected $appliedToDisk;
- protected $dependentMessages = array();
- protected $otherLocations = array();
- protected $obsolete;
protected $granularity;
- protected $bypassChangedLineFiltering;
+ protected $otherLocations = array();
+
+ private $appliedToDisk;
+ private $obsolete;
public static function newFromDictionary(array $dict) {
- $message = new ArcanistLintMessage();
-
- $message->setPath($dict['path']);
- $message->setLine($dict['line']);
- $message->setChar($dict['char']);
- $message->setCode($dict['code']);
- $message->setSeverity($dict['severity']);
- $message->setName($dict['name']);
- $message->setDescription($dict['description']);
- if (isset($dict['original'])) {
- $message->setOriginalText($dict['original']);
- }
- if (isset($dict['replacement'])) {
- $message->setReplacementText($dict['replacement']);
- }
- $message->setGranularity(idx($dict, 'granularity'));
- $message->setOtherLocations(idx($dict, 'locations', array()));
- if (isset($dict['bypassChangedLineFiltering'])) {
- $message->bypassChangedLineFiltering($dict['bypassChangedLineFiltering']);
- }
- return $message;
+ return id(new ArcanistLintMessage())
+ ->setPath($dict['path'])
+ ->setLine($dict['line'])
+ ->setChar($dict['char'])
+ ->setLinterName($dict['linterName'])
+ ->setCode($dict['code'])
+ ->setSeverity($dict['severity'])
+ ->setName($dict['name'])
+ ->setDescription($dict['description'])
+ ->setOriginalText($dict['original'])
+ ->setReplacementText($dict['replacement'])
+ ->setGranularity(idx($dict, 'granularity'))
+ ->setOtherLocations(idx($dict, 'locations', array()));
}
public function toDictionary() {
@@ -50,6 +42,7 @@
'path' => $this->getPath(),
'line' => $this->getLine(),
'char' => $this->getChar(),
+ 'linterName' => $this->getLinterName(),
'code' => $this->getCode(),
'severity' => $this->getSeverity(),
'name' => $this->getName(),
@@ -58,17 +51,20 @@
'replacement' => $this->getReplacementText(),
'granularity' => $this->getGranularity(),
'locations' => $this->getOtherLocations(),
- 'bypassChangedLineFiltering' => $this->shouldBypassChangedLineFiltering(),
);
}
+ public function getPath() {
+ return $this->path;
+ }
+
public function setPath($path) {
$this->path = $path;
return $this;
}
- public function getPath() {
- return $this->path;
+ public function getLine() {
+ return $this->line;
}
public function setLine($line) {
@@ -76,8 +72,8 @@
return $this;
}
- public function getLine() {
- return $this->line;
+ public function getChar() {
+ return $this->char;
}
public function setChar($char) {
@@ -85,12 +81,12 @@
return $this;
}
- public function getChar() {
- return $this->char;
+ public function getLinterName() {
+ return $this->linterName;
}
- public function setCode($code) {
- $this->code = $code;
+ public function setLinterName($linter_name) {
+ $this->linterName = $linter_name;
return $this;
}
@@ -98,8 +94,8 @@
return $this->code;
}
- public function setSeverity($severity) {
- $this->severity = $severity;
+ public function setCode($code) {
+ $this->code = $code;
return $this;
}
@@ -107,8 +103,8 @@
return $this->severity;
}
- public function setName($name) {
- $this->name = $name;
+ public function setSeverity($severity) {
+ $this->severity = $severity;
return $this;
}
@@ -116,8 +112,8 @@
return $this->name;
}
- public function setDescription($description) {
- $this->description = $description;
+ public function setName($name) {
+ $this->name = $name;
return $this;
}
@@ -125,8 +121,8 @@
return $this->description;
}
- public function setOriginalText($original) {
- $this->originalText = $original;
+ public function setDescription($description) {
+ $this->description = $description;
return $this;
}
@@ -134,8 +130,8 @@
return $this->originalText;
}
- public function setReplacementText($replacement) {
- $this->replacementText = $replacement;
+ public function setOriginalText($original) {
+ $this->originalText = $original;
return $this;
}
@@ -143,33 +139,33 @@
return $this->replacementText;
}
- /**
- * @param dict Keys 'path', 'line', 'char', 'original'.
- */
- public function setOtherLocations(array $locations) {
- assert_instances_of($locations, 'array');
- $this->otherLocations = $locations;
+ public function setReplacementText($replacement) {
+ $this->replacementText = $replacement;
return $this;
}
- public function getOtherLocations() {
- return $this->otherLocations;
+ public function getGranularity() {
+ return $this->granularity;
}
- public function isError() {
- return $this->getSeverity() == ArcanistLintSeverity::SEVERITY_ERROR;
+ public function setGranularity($granularity) {
+ $this->granularity = $granularity;
+ return $this;
}
- public function isWarning() {
- return $this->getSeverity() == ArcanistLintSeverity::SEVERITY_WARNING;
+ public function getOtherLocations() {
+ // TODO: This should probably be `list<ArcanistLintMessage>`.
+ return $this->otherLocations;
}
- public function isAutofix() {
- return $this->getSeverity() == ArcanistLintSeverity::SEVERITY_AUTOFIX;
+ public function setOtherLocations(array $locations) {
+ assert_instances_of($locations, 'array');
+ $this->otherLocations = $locations;
+ return $this;
}
- public function hasFileContext() {
- return ($this->getLine() !== null);
+ public function getObsolete() {
+ return $this->obsolete;
}
public function setObsolete($obsolete) {
@@ -177,52 +173,40 @@
return $this;
}
- public function getObsolete() {
- return $this->obsolete;
- }
- public function isPatchable() {
- return ($this->getReplacementText() !== null) &&
- ($this->getReplacementText() !== $this->getOriginalText());
+ public function isAutofix() {
+ return $this->getSeverity() == ArcanistLintSeverity::SEVERITY_AUTOFIX;
}
- public function didApplyPatch() {
- if ($this->appliedToDisk) {
- return $this;
- }
- $this->appliedToDisk = true;
- foreach ($this->dependentMessages as $message) {
- $message->didApplyPatch();
- }
- return $this;
+ public function isError() {
+ return $this->getSeverity() == ArcanistLintSeverity::SEVERITY_ERROR;
}
- public function isPatchApplied() {
- return $this->appliedToDisk;
+ public function isWarning() {
+ return $this->getSeverity() == ArcanistLintSeverity::SEVERITY_WARNING;
}
- public function setGranularity($granularity) {
- $this->granularity = $granularity;
- return $this;
- }
- public function getGranularity() {
- return $this->granularity;
+ public function hasFileContext() {
+ return $this->getLine() !== null;
}
- public function setDependentMessages(array $messages) {
- assert_instances_of($messages, __CLASS__);
- $this->dependentMessages = $messages;
+
+ public function didApplyPatch() {
+ if (!$this->appliedToDisk) {
+ $this->appliedToDisk = true;
+ }
+
return $this;
}
- public function setBypassChangedLineFiltering($bypass_changed_lines) {
- $this->bypassChangedLineFiltering = $bypass_changed_lines;
- return $this;
+ public function isPatchable() {
+ return $this->getReplacementText() !== null &&
+ $this->getReplacementText() !== $this->getOriginalText();
}
- public function shouldBypassChangedLineFiltering() {
- return $this->bypassChangedLineFiltering;
+ public function isPatchApplied() {
+ return $this->appliedToDisk;
}
}
diff --git a/src/lint/engine/ArcanistLintEngine.php b/src/lint/engine/ArcanistLintEngine.php
--- a/src/lint/engine/ArcanistLintEngine.php
+++ b/src/lint/engine/ArcanistLintEngine.php
@@ -331,9 +331,7 @@
// path is a directory or a binary file so we should not exclude
// warnings.
- if (!$this->changedLines ||
- $message->isError() ||
- $message->shouldBypassChangedLineFiltering()) {
+ if (!$this->changedLines || $message->isError()) {
return true;
}
diff --git a/src/lint/linter/ArcanistClosureLinter.php b/src/lint/linter/ArcanistClosureLinter.php
--- a/src/lint/linter/ArcanistClosureLinter.php
+++ b/src/lint/linter/ArcanistClosureLinter.php
@@ -47,13 +47,11 @@
continue;
}
- $message = id(new ArcanistLintMessage())
+ $messages[] = id(new ArcanistLintMessage())
->setPath($path)
->setLine($matches[1])
- ->setSeverity(ArcanistLintSeverity::SEVERITY_ERROR)
- ->setCode($this->getLinterName().$matches[2])
+ ->setCode($matches[2])
->setDescription($matches[3]);
- $messages[] = $message;
}
return $messages;
diff --git a/src/lint/linter/ArcanistCoffeeLintLinter.php b/src/lint/linter/ArcanistCoffeeLintLinter.php
--- a/src/lint/linter/ArcanistCoffeeLintLinter.php
+++ b/src/lint/linter/ArcanistCoffeeLintLinter.php
@@ -97,7 +97,6 @@
$message = id(new ArcanistLintMessage())
->setPath($path)
->setLine($report['lineNumber'])
- ->setCode($this->getLinterName())
->setName(ucwords(str_replace('_', ' ', $report['name'])))
->setDescription($report['message'])
->setOriginalText(idx($report, 'line'));
@@ -110,10 +109,6 @@
case 'error':
$message->setSeverity(ArcanistLintSeverity::SEVERITY_ERROR);
break;
-
- default:
- $message->setSeverity(ArcanistLintSeverity::SEVERITY_ADVICE);
- break;
}
$messages[] = $message;
diff --git a/src/lint/linter/ArcanistCppcheckLinter.php b/src/lint/linter/ArcanistCppcheckLinter.php
--- a/src/lint/linter/ArcanistCppcheckLinter.php
+++ b/src/lint/linter/ArcanistCppcheckLinter.php
@@ -81,12 +81,11 @@
$messages = array();
foreach ($errors as $error) {
foreach ($error->getElementsByTagName('location') as $location) {
- $message = new ArcanistLintMessage();
- $message->setPath($location->getAttribute('file'));
- $message->setLine($location->getAttribute('line'));
- $message->setCode('Cppcheck');
- $message->setName($error->getAttribute('id'));
- $message->setDescription($error->getAttribute('msg'));
+ $message = id(new ArcanistLintMessage())
+ ->setPath($location->getAttribute('file'))
+ ->setLine($location->getAttribute('line'))
+ ->setName($error->getAttribute('id'))
+ ->setDescription($error->getAttribute('msg'));
switch ($error->getAttribute('severity')) {
case 'error':
diff --git a/src/lint/linter/ArcanistJSONLintLinter.php b/src/lint/linter/ArcanistJSONLintLinter.php
--- a/src/lint/linter/ArcanistJSONLintLinter.php
+++ b/src/lint/linter/ArcanistJSONLintLinter.php
@@ -68,12 +68,10 @@
if ($match) {
$message = new ArcanistLintMessage();
- $message->setPath($path);
- $message->setLine($matches['line']);
- $message->setChar($matches['column']);
- $message->setCode($this->getLinterName());
- $message->setDescription(ucfirst($matches['description']));
- $message->setSeverity(ArcanistLintSeverity::SEVERITY_ERROR);
+ ->setPath($path)
+ ->setLine($matches['line'])
+ ->setChar($matches['column'])
+ ->setDescription(ucfirst($matches['description']));
$messages[] = $message;
}
diff --git a/src/lint/linter/ArcanistLesscLinter.php b/src/lint/linter/ArcanistLesscLinter.php
--- a/src/lint/linter/ArcanistLesscLinter.php
+++ b/src/lint/linter/ArcanistLesscLinter.php
@@ -165,13 +165,12 @@
$code = $this->getLintCodeFromLinterConfigurationKey($matches['name']);
$message = new ArcanistLintMessage();
- $message->setPath($path);
- $message->setLine($matches['line']);
- $message->setChar($matches['column']);
- $message->setCode($this->getLintMessageFullCode($code));
- $message->setSeverity($this->getLintMessageSeverity($code));
- $message->setName($this->getLintMessageName($code));
- $message->setDescription(ucfirst($matches['description']));
+ ->setPath($path)
+ ->setLine($matches['line'])
+ ->setChar($matches['column'])
+ ->setCode($this->getLintMessageFullCode($code))
+ ->setName($this->getLintMessageName($code))
+ ->setDescription(ucfirst($matches['description']));
$messages[] = $message;
}
diff --git a/src/lint/linter/ArcanistLinter.php b/src/lint/linter/ArcanistLinter.php
--- a/src/lint/linter/ArcanistLinter.php
+++ b/src/lint/linter/ArcanistLinter.php
@@ -361,11 +361,6 @@
return 0;
}
-
- final public function getLintMessageFullCode($short_code) {
- return $this->getLinterName().$short_code;
- }
-
final public function getLintMessageSeverity($code) {
$map = $this->customSeverityMap;
if (isset($map[$code])) {
@@ -403,11 +398,24 @@
return pht('Unknown lint message!');
}
- final protected function addLintMessage(ArcanistLintMessage $message) {
+ final private function addLintMessage(ArcanistLintMessage $message) {
$root = $this->getProjectRoot();
$path = Filesystem::resolvePath($message->getPath(), $root);
$message->setPath(Filesystem::readablePath($path, $root));
+
+ $message->setLinterName($this->getLinterName());
+
+ // If the linter message doesn't have a name, lookup the name
+ // from the linter code.
+ if (!$message->getName()) {
+ $message->setName($this->getLintMessageName($message->getCode()));
+ }
+
+ if ($message->getSeverity() === null && $this->canCustomizeLintSeverities()) {
+ $this->getLintMessageSeverity($message->getCode());
+ }
+
$this->messages[] = $message;
return $message;
}
@@ -428,7 +436,7 @@
->setPath($this->getActivePath())
->setLine($line)
->setChar($char)
- ->setCode($this->getLintMessageFullCode($code))
+ ->setCode($code)
->setSeverity($this->getLintMessageSeverity($code))
->setName($this->getLintMessageName($code))
->setDescription($desc)
diff --git a/src/lint/linter/ArcanistMergeConflictLinter.php b/src/lint/linter/ArcanistMergeConflictLinter.php
--- a/src/lint/linter/ArcanistMergeConflictLinter.php
+++ b/src/lint/linter/ArcanistMergeConflictLinter.php
@@ -27,7 +27,7 @@
public function getLintNameMap() {
return array(
- self::LINT_MERGECONFLICT => pht('Unresolved merge conflict'),
+ self::LINT_MERGECONFLICT => pht('Unresolved Merge Conflict'),
);
}
diff --git a/src/lint/linter/ArcanistNoLintLinter.php b/src/lint/linter/ArcanistNoLintLinter.php
--- a/src/lint/linter/ArcanistNoLintLinter.php
+++ b/src/lint/linter/ArcanistNoLintLinter.php
@@ -11,8 +11,8 @@
public function getInfoDescription() {
return pht(
- 'Allows you to disable all lint messages for a file by putting "%s" in '.
- 'the file body.',
+ 'Allows you to disable all lint messages for a file '.
+ 'by putting "%s" in the file body.',
'@'.'nolint');
}
diff --git a/src/lint/linter/ArcanistPEP8Linter.php b/src/lint/linter/ArcanistPEP8Linter.php
--- a/src/lint/linter/ArcanistPEP8Linter.php
+++ b/src/lint/linter/ArcanistPEP8Linter.php
@@ -58,16 +58,13 @@
foreach ($matches as $key => $match) {
$matches[$key] = trim($match);
}
- $message = new ArcanistLintMessage();
- $message->setPath($path);
- $message->setLine($matches[2]);
- $message->setChar($matches[3]);
- $message->setCode($matches[4]);
- $message->setName('PEP8 '.$matches[4]);
- $message->setDescription($matches[5]);
- $message->setSeverity($this->getLintMessageSeverity($matches[4]));
-
- $messages[] = $message;
+
+ $messages[] = id(new ArcanistLintMessage())
+ ->setPath($path)
+ ->setLine($matches[2])
+ ->setChar($matches[3])
+ ->setCode($matches[4])
+ ->setDescription($matches[5]);
}
return $messages;
diff --git a/src/lint/linter/ArcanistPhpLinter.php b/src/lint/linter/ArcanistPhpLinter.php
--- a/src/lint/linter/ArcanistPhpLinter.php
+++ b/src/lint/linter/ArcanistPhpLinter.php
@@ -68,14 +68,11 @@
$regex = '/^(PHP )?(?<type>.+) error: +(?<error>.+) in (?<file>.+) '.
'on line (?<line>\d+)$/m';
if (preg_match($regex, $stdout, $matches)) {
- $code = $this->getLintCodeFromLinterConfigurationKey($matches['type']);
-
$message = id(new ArcanistLintMessage())
->setPath($path)
->setLine($matches['line'])
- ->setCode($this->getLinterName().$code)
- ->setName($this->getLintMessageName($code))
- ->setSeverity(ArcanistLintSeverity::SEVERITY_ERROR)
+ ->setCode($this->getLintCodeFromLinterConfigurationKey(
+ $matches['type']))
->setDescription($matches['error']);
// `php -l` only returns the first error.
diff --git a/src/lint/linter/ArcanistPhpcsLinter.php b/src/lint/linter/ArcanistPhpcsLinter.php
--- a/src/lint/linter/ArcanistPhpcsLinter.php
+++ b/src/lint/linter/ArcanistPhpcsLinter.php
@@ -103,22 +103,19 @@
continue;
}
- if ($child->tagName == 'error') {
- $prefix = 'E';
- } else {
- $prefix = 'W';
+ $message = id(new ArcanistLintMessage())
+ ->setPath($path)
+ ->setLine($child->getAttribute('line'))
+ ->setChar($child->getAttribute('column'))
+ ->setCode($child->getAttribute('source'))
+ ->setDescription($child->nodeValue);
+
+ switch ($child->tagName) {
+ case 'error':
+ $message->setSeverity(ArcanistLintSeverity::SEVERITY_ERROR);
+ break;
}
- $code = 'PHPCS.'.$prefix.'.'.$child->getAttribute('source');
-
- $message = new ArcanistLintMessage();
- $message->setPath($path);
- $message->setLine($child->getAttribute('line'));
- $message->setChar($child->getAttribute('column'));
- $message->setCode($code);
- $message->setDescription($child->nodeValue);
- $message->setSeverity($this->getLintMessageSeverity($code));
-
$messages[] = $message;
}
}
@@ -127,11 +124,7 @@
}
protected function getDefaultMessageSeverity($code) {
- if (preg_match('/^PHPCS\\.W\\./', $code)) {
- return ArcanistLintSeverity::SEVERITY_WARNING;
- } else {
- return ArcanistLintSeverity::SEVERITY_ERROR;
- }
+ return ArcanistLintSeverity::SEVERITY_WARNING;
}
protected function getLintCodeFromLinterConfigurationKey($code) {
diff --git a/src/lint/linter/ArcanistPuppetLintLinter.php b/src/lint/linter/ArcanistPuppetLintLinter.php
--- a/src/lint/linter/ArcanistPuppetLintLinter.php
+++ b/src/lint/linter/ArcanistPuppetLintLinter.php
@@ -112,7 +112,7 @@
->setPath($path)
->setLine($matches[0])
->setChar($matches[1])
- ->setCode($this->getLinterName())
+ ->setCode($matches[3])
->setName(ucwords(str_replace('_', ' ', $matches[3])))
->setDescription(ucfirst($matches[4]));
diff --git a/src/lint/linter/ArcanistPyFlakesLinter.php b/src/lint/linter/ArcanistPyFlakesLinter.php
--- a/src/lint/linter/ArcanistPyFlakesLinter.php
+++ b/src/lint/linter/ArcanistPyFlakesLinter.php
@@ -67,12 +67,11 @@
$severity = ArcanistLintSeverity::SEVERITY_ERROR;
}
- $message = new ArcanistLintMessage();
- $message->setPath($path);
- $message->setLine($matches[2]);
- $message->setCode($this->getLinterName());
- $message->setDescription($description);
- $message->setSeverity($severity);
+ $message = id(new ArcanistLintMessage())
+ ->setPath($path)
+ ->setLine($matches[2])
+ ->setDescription($description)
+ ->setSeverity($severity);
$messages[] = $message;
}
@@ -80,8 +79,4 @@
return $messages;
}
- protected function canCustomizeLintSeverities() {
- return false;
- }
-
}
diff --git a/src/lint/linter/ArcanistPyLintLinter.php b/src/lint/linter/ArcanistPyLintLinter.php
--- a/src/lint/linter/ArcanistPyLintLinter.php
+++ b/src/lint/linter/ArcanistPyLintLinter.php
@@ -135,7 +135,6 @@
->setLine($matches[0])
->setChar($matches[1])
->setCode($matches[2])
- ->setSeverity($this->getLintMessageSeverity($matches[2]))
->setName(ucwords(str_replace('-', ' ', $matches[3])))
->setDescription($matches[4]);
diff --git a/src/lint/linter/ArcanistRuboCopLinter.php b/src/lint/linter/ArcanistRuboCopLinter.php
--- a/src/lint/linter/ArcanistRuboCopLinter.php
+++ b/src/lint/linter/ArcanistRuboCopLinter.php
@@ -86,12 +86,26 @@
foreach ($file['offenses'] as $offense) {
$message = id(new ArcanistLintMessage())
->setPath($file['path'])
- ->setDescription($offense['message'])
->setLine($offense['location']['line'])
->setChar($offense['location']['column'])
- ->setSeverity($this->getLintMessageSeverity($offense['severity']))
- ->setName($this->getLinterName())
- ->setCode($offense['cop_name']);
+ ->setCode($offense['cop_name'])
+ ->setDescription($offense['message']);
+
+ switch ($code) {
+ case 'convention':
+ case 'refactor':
+ case 'warning':
+ $message->setSeverity(ArcanistLintSeverity::SEVERITY_WARNING);
+ break;
+ case 'error':
+ case 'fatal':
+ $message->setSeverity(ArcanistLintSeverity::SEVERITY_ERROR);
+ break;
+ default:
+ $message->setSeverity(ArcanistLintSeverity::SEVERITY_ADVICE);
+ break;
+ }
+
$messages[] = $message;
}
}
@@ -99,22 +113,4 @@
return $messages;
}
- /**
- * Take the string from RuboCop's severity terminology and return an
- * @{class:ArcanistLintSeverity}.
- */
- protected function getDefaultMessageSeverity($code) {
- switch ($code) {
- case 'convention':
- case 'refactor':
- case 'warning':
- return ArcanistLintSeverity::SEVERITY_WARNING;
- case 'error':
- case 'fatal':
- return ArcanistLintSeverity::SEVERITY_ERROR;
- default:
- return ArcanistLintSeverity::SEVERITY_ADVICE;
- }
- }
-
}
diff --git a/src/lint/linter/ArcanistRubyLinter.php b/src/lint/linter/ArcanistRubyLinter.php
--- a/src/lint/linter/ArcanistRubyLinter.php
+++ b/src/lint/linter/ArcanistRubyLinter.php
@@ -70,13 +70,10 @@
$code = head(explode(',', $matches[3]));
- $message = new ArcanistLintMessage();
- $message->setPath($path);
- $message->setLine($matches[2]);
- $message->setCode($this->getLinterName());
- $message->setName(pht('Syntax Error'));
- $message->setDescription($matches[3]);
- $message->setSeverity($this->getLintMessageSeverity($code));
+ $message = id(new ArcanistLintMessage())
+ ->setPath($path)
+ ->setLine($matches[2])
+ ->setDescription($matches[3]);
$messages[] = $message;
}
diff --git a/src/lint/linter/ArcanistXMLLinter.php b/src/lint/linter/ArcanistXMLLinter.php
--- a/src/lint/linter/ArcanistXMLLinter.php
+++ b/src/lint/linter/ArcanistXMLLinter.php
@@ -44,8 +44,7 @@
->setPath($path)
->setLine($error->line)
->setChar($error->column ? $error->column : null)
- ->setCode($this->getLintMessageFullCode($error->code))
- ->setName(pht('LibXML Error'))
+ ->setCode($error->code)
->setDescription(trim($error->message));
switch ($error->level) {
@@ -61,13 +60,9 @@
case LIBXML_ERR_FATAL:
$message->setSeverity(ArcanistLintSeverity::SEVERITY_ERROR);
break;
-
- default:
- $message->setSeverity(ArcanistLintSeverity::SEVERITY_ADVICE);
- break;
}
- $this->addLintMessage($message);
+ $messages[] = $message;
}
}

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 8, 7:22 PM (2 d, 2 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7384035
Default Alt Text
D13094.diff (24 KB)

Event Timeline