mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-03-28 11:12:31 -04:00
git update auto change to edge branch (#3589)
* git update auto change to edge branch For existing installations using automatic git update, checkout *edge* branch if it was still using *master* or *dev*. * One more prune * Fix several small issues * theirs does not work here * Use migration mechanism * Better handling of Migration errors * Test details * Fix tests * Do not use new migration system for now
This commit is contained in:
committed by
GitHub
parent
ffb0e30dde
commit
97ba6261a8
@@ -6,36 +6,76 @@ class FreshRSS_update_Controller extends Minz_ActionController {
|
||||
return is_dir(FRESHRSS_PATH . '/.git/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatic change to the new name of edge branch since FreshRSS 1.18.0.
|
||||
*/
|
||||
public static function migrateToGitEdge() {
|
||||
$errorMessage = 'Error during git checkout to edge branch. Please change branch manually!';
|
||||
|
||||
if (!is_writable(FRESHRSS_PATH . '/.git/')) {
|
||||
throw new Exception($errorMessage);
|
||||
}
|
||||
|
||||
exec('git branch --show-current', $output, $return);
|
||||
if ($return != 0) {
|
||||
throw new Exception($errorMessage);
|
||||
}
|
||||
$line = is_array($output) ? implode('', $output) : $output;
|
||||
if ($line !== 'master' && $line !== 'dev') {
|
||||
return true; // not on master or dev, nothing to do
|
||||
}
|
||||
|
||||
Minz_Log::warning('Automatic migration to git edge branch');
|
||||
unset($output);
|
||||
exec('git checkout edge --guess -f', $output, $return);
|
||||
if ($return != 0) {
|
||||
throw new Exception($errorMessage);
|
||||
}
|
||||
|
||||
unset($output);
|
||||
exec('git reset --hard FETCH_HEAD', $output, $return);
|
||||
if ($return != 0) {
|
||||
throw new Exception($errorMessage);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function hasGitUpdate() {
|
||||
$cwd = getcwd();
|
||||
chdir(FRESHRSS_PATH);
|
||||
$output = array();
|
||||
try {
|
||||
exec('git fetch', $output, $return);
|
||||
exec('git fetch --prune', $output, $return);
|
||||
if ($return == 0) {
|
||||
unset($output);
|
||||
exec('git status -sb --porcelain remote', $output, $return);
|
||||
} else {
|
||||
$line = is_array($output) ? implode('; ', $output) : '' . $output;
|
||||
$line = is_array($output) ? implode('; ', $output) : $output;
|
||||
Minz_Log::warning('git fetch warning:' . $line);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
Minz_Log::warning('git fetch error:' . $e->getMessage());
|
||||
}
|
||||
chdir($cwd);
|
||||
$line = is_array($output) ? implode('; ', $output) : '' . $output;
|
||||
return strpos($line, '[behind') !== false || strpos($line, '[ahead') !== false;
|
||||
$line = is_array($output) ? implode('; ', $output) : $output;
|
||||
return $line == '' ||
|
||||
strpos($line, '[behind') !== false || strpos($line, '[ahead') !== false || strpos($line, '[gone') !== false;
|
||||
}
|
||||
|
||||
public static function gitPull() {
|
||||
$cwd = getcwd();
|
||||
chdir(FRESHRSS_PATH);
|
||||
$output = '';
|
||||
$output = [];
|
||||
$return = 1;
|
||||
try {
|
||||
exec('git fetch', $output, $return);
|
||||
exec('git fetch --prune', $output, $return);
|
||||
if ($return == 0) {
|
||||
unset($output);
|
||||
exec('git reset --hard FETCH_HEAD', $output, $return);
|
||||
}
|
||||
|
||||
self::migrateToGitEdge();
|
||||
} catch (Exception $e) {
|
||||
Minz_Log::warning('Git error:' . $e->getMessage());
|
||||
if ($output == '') {
|
||||
@@ -44,7 +84,7 @@ class FreshRSS_update_Controller extends Minz_ActionController {
|
||||
$return = 1;
|
||||
}
|
||||
chdir($cwd);
|
||||
$line = is_array($output) ? implode('; ', $output) : '' . $output;
|
||||
$line = is_array($output) ? implode('; ', $output) : $output;
|
||||
return $return == 0 ? true : 'Git error: ' . $line;
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ class Minz_Migrator
|
||||
|
||||
if (!$migrator->upToDate()) {
|
||||
// still not up to date? It means last migration failed.
|
||||
return 'A migration failed to be applied, please see previous logs';
|
||||
return trim('A migration failed to be applied, please see previous logs.' . "\n" . implode("\n", $results));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -548,15 +548,25 @@ function getNonStandardShortcuts($shortcuts) {
|
||||
}
|
||||
|
||||
function errorMessage($errorTitle, $error = '') {
|
||||
// Prevent empty <h2> tags by checking if error isn't empty first
|
||||
if ('' !== $error) {
|
||||
$error = htmlspecialchars($error, ENT_NOQUOTES, 'UTF-8');
|
||||
$error = "<h2>{$error}</h2>";
|
||||
}
|
||||
$errorTitle = htmlspecialchars($errorTitle, ENT_NOQUOTES, 'UTF-8');
|
||||
|
||||
$message = '';
|
||||
$details = '';
|
||||
// Prevent empty tags by checking if error isn not empty first
|
||||
if ($error) {
|
||||
$error = htmlspecialchars($error, ENT_NOQUOTES, 'UTF-8');
|
||||
|
||||
// First line is the main message, other lines are the details
|
||||
list($message, $details) = explode("\n", $error, 2);
|
||||
|
||||
$message = "<h2>{$message}</h2>";
|
||||
$details = "<pre>{$details}</pre>";
|
||||
}
|
||||
|
||||
return <<<MSG
|
||||
<h1>{$errorTitle}</h1>
|
||||
{$error}
|
||||
{$message}
|
||||
{$details}
|
||||
<h2>Check the logs</h2>
|
||||
<p>FreshRSS logs are located in <code>./FreshRSS/data/users/*/log*.txt</code></p>
|
||||
<p><em>N.B.:</em> A typical problem is wrong file permissions in the <code>./FreshRSS/data/</code> folder
|
||||
|
||||
@@ -63,8 +63,8 @@ if (!file_exists($applied_migrations_path)) {
|
||||
}
|
||||
|
||||
if ($error) {
|
||||
Minz_Log::error($error);
|
||||
errorMessage('Fatal error');
|
||||
syslog(LOG_INFO, 'FreshRSS Fatal error! ' . $error);
|
||||
Minz_Log::error($error);
|
||||
die(errorMessage('Fatal error', $error));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,9 +310,10 @@ class MigratorTest extends TestCase
|
||||
public function testExecuteFailsIfAMigrationIsFailing() {
|
||||
$migrations_path = TESTS_PATH . '/fixtures/migrations_with_failing/';
|
||||
$applied_migrations_path = tempnam('/tmp', 'applied_migrations.txt');
|
||||
$expected_result = 'A migration failed to be applied, please see previous logs';
|
||||
$expected_result = 'A migration failed to be applied, please see previous logs.';
|
||||
|
||||
$result = Minz_Migrator::execute($migrations_path, $applied_migrations_path);
|
||||
list($result, ) = explode("\n", $result, 2);
|
||||
|
||||
$this->assertSame($expected_result, $result);
|
||||
$versions = file_get_contents($applied_migrations_path);
|
||||
|
||||
Reference in New Issue
Block a user