From 11aa8a48b12a1e709bbc5136fcdb6a63282c7d2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Thu, 19 Sep 2024 20:34:57 +0200 Subject: [PATCH] correctifs --- .../config/view/autoupdate/autoupdate.php | 126 ++++++++++++------ 1 file changed, 88 insertions(+), 38 deletions(-) diff --git a/core/module/config/view/autoupdate/autoupdate.php b/core/module/config/view/autoupdate/autoupdate.php index c76017b8..69300eab 100644 --- a/core/module/config/view/autoupdate/autoupdate.php +++ b/core/module/config/view/autoupdate/autoupdate.php @@ -2,48 +2,26 @@ // Chemins de travail $repoUrl = 'https://forge.chapril.org/api/v1/repos/ZwiiCMS-Team/ZwiiCMS'; // URL de l'API du dépôt -// Étape 1 : Obtenir la version locale actuelle depuis common::WII_VERSION -// Charger la version locale en incluant le fichier de configuration ou en accédant à la classe appropriée -require_once __DIR__ . '/core/class/common.php'; // Ajustez le chemin selon votre installation -$currentVersion = defined('common::ZWII_VERSION') ? common::ZWII_VERSION : 'v0.0.0'; +// Appels de fonctions +$latestVersion = getLatestTag($repoUrl); -// Étape 2 : Obtenir le dernier tag depuis le dépôt -function getLatestTag() { - global $repoUrl; - $tagsUrl = $repoUrl . '/tags'; - $tags = json_decode(file_get_contents($tagsUrl), true); - - if (!$tags || empty($tags)) { - die('Impossible de récupérer les tags.'); - } - - // Retourne le dernier tag (supposant que le plus récent est en tête) - return $tags[0]['name']; -} - -$latestVersion = getLatestTag(); - -if ($currentVersion === $latestVersion) { - echo "Aucune mise à jour nécessaire. Version actuelle : $currentVersion\n"; +// Comparer la version actuelle avec la dernière version +if (common::ZWII_VERSION === $latestVersion) { + echo "Aucune mise à jour nécessaire. Version actuelle : " . common::ZWII_VERSION . "\n"; exit; } -// Étape 3 : Lister les commits entre les deux versions -function getCommitsBetweenTags($fromTag, $toTag) { - global $repoUrl; - $compareUrl = $repoUrl . "/compare/$fromTag...$toTag"; - $compare = json_decode(file_get_contents($compareUrl), true); +// Récupérer les SHAs des commits associés aux tags +$fromSHA = getCommitSHAFromTag($repoUrl, common::ZWII_VERSION); +$toSHA = getCommitSHAFromTag($repoUrl, $latestVersion); - if (!$compare || empty($compare['files'])) { - die('Impossible de récupérer les commits ou fichiers modifiés.'); - } +// Récupérer les commits entre les deux SHAs +$commits = getCommitsBetweenSHAs($repoUrl, $fromSHA, $toSHA); - return $compare['files']; -} +// Lister les fichiers modifiés pour chaque commit +$modifiedFiles = getModifiedFiles($commits); -$modifiedFiles = getCommitsBetweenTags($currentVersion, $latestVersion); - -// Étape 4 : Télécharger les fichiers modifiés et les mettre à jour +// Télécharger et mettre à jour les fichiers modifiés foreach ($modifiedFiles as $file) { $filePath = $file['filename']; $fileUrl = "https://forge.chapril.org/ZwiiCMS-Team/ZwiiCMS/raw/$latestVersion/$filePath"; @@ -54,8 +32,13 @@ foreach ($modifiedFiles as $file) { mkdir(dirname($localPath), 0755, true); } - // Télécharger et remplacer le fichier - file_put_contents($localPath, file_get_contents($fileUrl)); + // Télécharger et remplacer le fichier, avec gestion des erreurs + $fileContent = file_get_contents($fileUrl); + if ($fileContent === false) { + echo "Erreur lors du téléchargement de : $filePath\n"; + continue; // Passer au fichier suivant en cas d'erreur + } + file_put_contents($localPath, $fileContent); echo "Mise à jour de : $filePath\n"; // Gérer la suppression de fichiers (si marqué comme supprimé dans le commit) @@ -65,6 +48,73 @@ foreach ($modifiedFiles as $file) { } } -// Étape 5 : Mettre à jour la version locale (à ajuster selon votre système) echo "Mise à jour terminée vers la version : $latestVersion\n"; + +// Fonctions +/** + * Récupère le dernier tag du dépôt. + */ +function getLatestTag($repoUrl) { + $tagsUrl = $repoUrl . '/tags'; + $tags = json_decode(file_get_contents($tagsUrl), true); + + if (!$tags || empty($tags)) { + die('Impossible de récupérer les tags.'); + } + + // Retourne le nom du dernier tag + return $tags[0]['name']; +} + +/** + * Récupère le SHA du commit lié à un tag spécifique. + */ +function getCommitSHAFromTag($repoUrl, $tag) { + $tagsUrl = $repoUrl . '/tags'; + $tags = json_decode(file_get_contents($tagsUrl), true); + + if (!$tags || empty($tags)) { + die('Impossible de récupérer les tags.'); + } + + foreach ($tags as $tagInfo) { + if ($tagInfo['name'] === $tag) { + return $tagInfo['commit']['sha']; + } + } + + die('Tag non trouvé : ' . $tag); +} + +/** + * Récupère les commits entre deux SHAs spécifiques. + */ +function getCommitsBetweenSHAs($repoUrl, $fromSHA, $toSHA) { + $compareUrl = $repoUrl . "/compare/$fromSHA...$toSHA"; + $compare = json_decode(file_get_contents($compareUrl), true); + + if (!$compare || !isset($compare['commits']) || empty($compare['commits'])) { + die('Impossible de récupérer les commits ou fichiers modifiés.'); + } + + return $compare['commits']; +} + +/** + * Extrait les fichiers modifiés depuis une liste de commits. + */ +function getModifiedFiles($commits) { + $modifiedFiles = []; + foreach ($commits as $commit) { + $commitUrl = $commit['url']; + $commitDetails = json_decode(file_get_contents($commitUrl), true); + + if (isset($commitDetails['files'])) { + foreach ($commitDetails['files'] as $file) { + $modifiedFiles[] = $file; + } + } + } + return $modifiedFiles; +} ?>