Changeset 119861 in spip-zone


Ignore:
Timestamp:
Jan 20, 2020, 1:53:10 PM (5 weeks ago)
Author:
Cerdic
Message:

commit et push d'un module dans une fonction separee pour plus de lisibilite

Location:
_plugins_/trad-lang/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/trad-lang/trunk

    • Property subgit:lock:0bf209dc4d00f6851146ea94982d0809a6908a7b deleted
    • Property subgit:lock:439bf229c3f541c54f81ac53e5d998b1de1e6aa0 set to 2020-01-20T15:00:31.763
  • _plugins_/trad-lang/trunk/inc/salvatore_pousseur.php

    r119860 r119861  
    6363                // (gestion de tensions sur certains plugins/modules)
    6464
    65                 $file_commit = $dir_module . '/' . $module . '.commit.json';
    6665
    6766                if (file_exists($dir_module . '/.salvatore.ignore.' . $module)) {
    68                         salvatore_log("<info>Module $module ignoré</info>");
     67                        salvatore_log("<comment>Module $module ignoré</comment>");
    6968                }
    7069                else {
    71                         if (!file_exists($file_commit)
    72                           or !$commit_infos = file_get_contents($file_commit)
    73                           or !$commit_infos = json_decode($commit_infos, true)) {
    74                                 salvatore_log("<info>Module $module rien à faire (pas de fichier $file_commit ou fichier invalide)</info>");
     70                        $res = savatore_commit_and_push_module($source, $dir_modules, $dir_depots, $url_gestionnaire);
     71                        if ($res) {
     72                                salvatore_log("Module $module <info>OK</info>\n");
    7573                        }
    76                         else {
    77                                 // on a la liste des fichiers a commit
    78                                 $message_commit = '';
    79                                 if (isset($commit_infos['.message'])) {
    80                                         $message_commit = trim($commit_infos['.message']) . "\n";
    81                                         unset($commit_infos['.message']);
    82                                 }
    83                                 $dir_depot = $dir_depots . $source['dir_checkout'];
    84                                 $subdir = '';
    85                                 if (isset($source['dir'])) {
    86                                         $subdir = $source['dir'] . DIRECTORY_SEPARATOR;
    87                                 }
    88 
    89                                 // reorganiser les fichiers a commit et preparer les messages de commit
    90                                 // - ignorer les fichiers non modifies, ou non versionnes et qui ne doivent pas etre ajoutes
    91                                 // - regrouper par auteur
    92 
    93                                 $commits_todo = array();
    94                                 $salvatore_status_file = "salvatore_" . $source['methode'] . "_status_file";
    95                                 $salvatore_commit_files = "salvatore_" . $source['methode'] . "_commit_files";
    96                                 $salvatore_push_repository = "salvatore_" . $source['methode'] . "_push_repository";
    97 
    98                                 foreach ($commit_infos as $what => $commit_info) {
    99 
    100                                         $file = $commit_info['file_name'];
    101 
    102                                         if ($commit_info['lastmodified'] or $commit_info['must_add']) {
    103                                                 $status = $salvatore_status_file($dir_depots . $source['dir_checkout'], $subdir . $file);
    104 
    105                                                 // fichier nouveau ou modifie (sinon on l'ignore)
    106                                                 if ($status) {
    107                                                         $author = 0;
    108                                                         if (!empty($commit_info['author'])) {
    109                                                                 $author = $commit_info['author'];
    110                                                         }
    111                                                         // si c'est le xml et qu'on a un seul auteur de commit, on lui fait commit aussi le xml
    112                                                         elseif($what === '.xml' and count($commits_todo)===1) {
    113                                                                 $author = array_keys($commits_todo);
    114                                                                 $author = reset($author);
    115                                                         }
    116 
    117                                                         if (!isset($commits_todo[$author])) {
    118                                                                 $commits_todo[$author] = array(
    119                                                                         'files' => array(),
    120                                                                         'message' => []
    121                                                                 );
    122                                                                 if ($message_commit) {
    123                                                                         $commits_todo[$author]['message'][] = $message_commit;
    124                                                                 }
    125                                                         }
    126                                                         $commits_todo[$author]['files'][] = $subdir . $file;
    127                                                         if ($what === '.xml') {
    128                                                                 $message = "[Salvatore] [source:$subdir $module] Mise a jour du bilan depuis $url_gestionnaire";
    129                                                         }
    130                                                         else {
    131                                                                 $message = "[Salvatore] [source:$subdir $module] Export depuis $url_gestionnaire";
    132                                                         }
    133                                                         if (!empty($commit_info['lang'])) {
    134                                                                 $message .= " de la langue " . $commit_info['lang'];
    135                                                         }
    136                                                         if (!empty($commit_info['message'])) {
    137                                                                 $message .= "\n            " . $commit_info['message'];
    138                                                         }
    139                                                         $commits_todo[$author]['message'][] = $message;
    140                                                 }
    141 
    142                                         }
    143 
    144                                 }
    145 
    146                                 // on peut maintenant lancer les commits
    147                                 // ajoutons les credentials dans la source pour pouvoir commit ou push
    148                                 $url_with_credentials = salvatore_set_credentials($source['methode'], $source['url'], $source['module']);
    149                                 $parts = parse_url($url_with_credentials);
    150                                 if (!empty($parts['user']) and !empty($parts['pass'])){
    151                                         $source['user'] = $parts['user'];
    152                                         $source['pass'] = $parts['pass'];
    153                                 }
    154 
    155                                 foreach ($commits_todo as $author => $commit_todo) {
    156                                         if (!$author) {
    157                                                 $author = _SALVATORE_AUTHOR_COMMITS;
    158                                         }
    159                                         $message = implode("\n", $commit_todo['message']);
    160                                         salvatore_log("Commit de <info>$author</info> :" . implode(', ', $commit_todo['files']));
    161                                         salvatore_log("\t" . str_replace("\n", "\n\t", $message));
    162 
    163                                         list($res,$out) = $salvatore_commit_files($dir_depots . $source['dir_checkout'], $commit_todo['files'], $message, $author, empty($source['user']) ? null : $source['user'], empty($source['pass']) ? null : $source['pass']);
    164                                         salvatore_log($out);
    165                                         if (!$res) {
    166                                                 salvatore_fail("[Pousseur] Erreur sur $module", "Erreur lors du commit :\n$out");
    167                                         }
    168                                 }
    169 
    170                                 // tous les commits sont faits
    171                                 // on peut supprimer le fichier qui liste les commits
    172                                 @unlink($file_commit);
    173 
    174                                 // et push si besoin
    175                                 // ne fera rien en svn (deja pushe)
    176                                 list($res,$out) = $salvatore_push_repository($dir_depots . $source['dir_checkout'], empty($source['user']) ? null : $source['user'], empty($source['pass']) ? null : $source['pass']);
    177                                 salvatore_log($out);
    178                                 if (!$res) {
    179                                         salvatore_fail("[Pousseur] Erreur sur $module", "Erreur lors du commit :\n$out");
    180                                 }
    181                         }
    182                 }
    183 
     74                }
    18475        }
    18576
     
    18778}
    18879
     80/**
     81 * Commiter et pusher les modifs sur un module
     82 * @param array $source
     83 * @param string $dir_modules
     84 * @param string $dir_depots
     85 * @param string $url_gestionnaire
     86 * @return bool
     87 * @throws Exception
     88 */
     89function savatore_commit_and_push_module($source, $dir_modules, $dir_depots, $url_gestionnaire) {
     90
     91        $dir_module = $dir_modules . $source['dir_module'];
     92        $module = $source['module'];
     93
     94        $file_commit = $dir_module . '/' . $module . '.commit.json';
     95
     96        if (!file_exists($file_commit)
     97          or !$commit_infos = file_get_contents($file_commit)
     98          or !$commit_infos = json_decode($commit_infos, true)) {
     99                salvatore_log("<comment>Module $module rien à faire (pas de fichier $file_commit ou fichier invalide)</comment>");
     100                return false;
     101        }
     102
     103        // on a la liste des fichiers a commit
     104        $message_commit = '';
     105        if (isset($commit_infos['.message'])) {
     106                $message_commit = trim($commit_infos['.message']) . "\n";
     107                unset($commit_infos['.message']);
     108        }
     109
     110        $subdir = '';
     111        if (isset($source['dir'])) {
     112                $subdir = $source['dir'] . DIRECTORY_SEPARATOR;
     113        }
     114
     115        // reorganiser les fichiers a commit et preparer les messages de commit
     116        // - ignorer les fichiers non modifies, ou non versionnes et qui ne doivent pas etre ajoutes
     117        // - regrouper par auteur
     118
     119        $commits_todo = array();
     120        $salvatore_status_file = "salvatore_" . $source['methode'] . "_status_file";
     121        $salvatore_commit_files = "salvatore_" . $source['methode'] . "_commit_files";
     122        $salvatore_push_repository = "salvatore_" . $source['methode'] . "_push_repository";
     123
     124        foreach ($commit_infos as $what => $commit_info) {
     125
     126                $file = $commit_info['file_name'];
     127
     128                if ($commit_info['lastmodified'] or $commit_info['must_add']) {
     129                        $status = $salvatore_status_file($dir_depots . $source['dir_checkout'], $subdir . $file);
     130
     131                        // fichier nouveau ou modifie (sinon on l'ignore)
     132                        if ($status) {
     133                                $author = 0;
     134                                if (!empty($commit_info['author'])) {
     135                                        $author = $commit_info['author'];
     136                                }
     137                                // si c'est le xml et qu'on a un seul auteur de commit, on lui fait commit aussi le xml
     138                                elseif($what === '.xml' and count($commits_todo)===1) {
     139                                        $author = array_keys($commits_todo);
     140                                        $author = reset($author);
     141                                }
     142
     143                                if (!isset($commits_todo[$author])) {
     144                                        $commits_todo[$author] = array(
     145                                                'files' => array(),
     146                                                'message' => []
     147                                        );
     148                                        if ($message_commit) {
     149                                                $commits_todo[$author]['message'][] = $message_commit;
     150                                        }
     151                                }
     152                                $commits_todo[$author]['files'][] = $subdir . $file;
     153                                if ($what === '.xml') {
     154                                        $message = "[Salvatore] [source:$subdir $module] Mise a jour du bilan depuis $url_gestionnaire";
     155                                }
     156                                else {
     157                                        $message = "[Salvatore] [source:$subdir $module] Export depuis $url_gestionnaire";
     158                                }
     159                                if (!empty($commit_info['lang'])) {
     160                                        $message .= " de la langue " . $commit_info['lang'];
     161                                }
     162                                if (!empty($commit_info['message'])) {
     163                                        $message .= "\n            " . $commit_info['message'];
     164                                }
     165                                $commits_todo[$author]['message'][] = $message;
     166                        }
     167
     168                }
     169
     170        }
     171
     172        // on peut maintenant lancer les commits
     173        // ajoutons les credentials dans la source pour pouvoir commit ou push
     174        $url_with_credentials = salvatore_set_credentials($source['methode'], $source['url'], $source['module']);
     175        $parts = parse_url($url_with_credentials);
     176        if (!empty($parts['user']) and !empty($parts['pass'])){
     177                $source['user'] = $parts['user'];
     178                $source['pass'] = $parts['pass'];
     179        }
     180
     181        foreach ($commits_todo as $author => $commit_todo) {
     182                if (!$author) {
     183                        $author = _SALVATORE_AUTHOR_COMMITS;
     184                }
     185                $message = implode("\n", $commit_todo['message']);
     186                salvatore_log("Commit de <info>$author</info> :" . implode(', ', $commit_todo['files']));
     187                salvatore_log("\t" . str_replace("\n", "\n\t", $message));
     188
     189                list($res,$out) = $salvatore_commit_files($dir_depots . $source['dir_checkout'], $commit_todo['files'], $message, $author, empty($source['user']) ? null : $source['user'], empty($source['pass']) ? null : $source['pass']);
     190                salvatore_log($out);
     191                if (!$res) {
     192                        salvatore_fail("[Pousseur] Erreur sur $module", "Erreur lors du commit :\n$out");
     193                }
     194        }
     195
     196        // tous les commits sont faits
     197        // on peut supprimer le fichier qui liste les commits
     198        @unlink($file_commit);
     199
     200        // et push si besoin
     201        // ne fera rien en svn (deja pushe)
     202        list($res,$out) = $salvatore_push_repository($dir_depots . $source['dir_checkout'], empty($source['user']) ? null : $source['user'], empty($source['pass']) ? null : $source['pass']);
     203        salvatore_log($out);
     204        if (!$res) {
     205                salvatore_fail("[Pousseur] Erreur sur $module", "Erreur lors du commit :\n$out");
     206        }
     207
     208        return true;
     209}
Note: See TracChangeset for help on using the changeset viewer.