in src/shipit/repo/ShipItRepoGIT.php [101:144]
private static function parseHeader(string $header): ShipItChangeset {
$parts = Str\split(Str\trim($header), "\n\n", 2);
$envelope = $parts[0];
$message = C\count($parts) === 2 ? Str\trim($parts[1]) : '';
$start_of_filelist = Str\search_last($message, "\n---\n ");
if ($start_of_filelist !== null) {
// Get rid of the file list when a summary is
// included in the commit message
$message = Str\trim(Str\slice($message, 0, $start_of_filelist));
}
$changeset = (new ShipItChangeset())->withMessage($message);
$envelope = Str\replace_every($envelope, dict["\n\t" => ' ', "\n " => ' ']);
foreach (Str\split($envelope, "\n") as $line) {
$colon = Str\search($line, ':');
if ($colon === null) {
continue;
}
list($key, $value) = Str\split($line, ':', 2);
$value = Str\trim($value);
switch (Str\lowercase(Str\trim($key))) {
case 'from':
$changeset = $changeset->withAuthor($value);
break;
case 'subject':
if (Str\starts_with_ci($value, '[PATCH] ')) {
$value = Str\trim(Str\slice($value, 8));
}
$changeset = $changeset->withSubject($value);
break;
case 'date':
$changeset = $changeset->withTimestamp(PHP\strtotime($value));
break;
/* added due to nonexhaustive switch */
default:
break;
}
}
return $changeset;
}