Ignore:
Timestamp:
Apr 21, 2015, 8:28:11 AM (5 years ago)
Author:
marcimat@…
Message:

Changement de tactique pour la synchronisation des répertoires : on demande au serveur la liste complète des fichiers, plutôt que de lui envoyer la sienne dans un POST ; Car s'il y a 40000 fichiers dans le IMG du site destination, le POST envoyé est trop gros !

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/migrateur/dev-by-http/class/Client/Action/SyncDirectory.php

    r88474 r88705  
    5050                $data = array(
    5151                        'directory' => $this->directory,
    52                         'files' => $localFiles,
    5352                );
    5453
    5554                spip_timer('list');
    56                 $reponse = $this->client->ask('SyncDirectory', $data, 'json');
     55                $this->log("Demande de la liste des fichiers");
     56                $reponse = $this->client->ask('ListFiles', $data, 'json');
    5757                $t = spip_timer('list');
    5858
     
    6161                }
    6262
    63                 $files = $reponse['message']['data']['files'];
    64                 $this->log("Réception de la liste des fichiers ($t)");
    65                 $this->log("- " . count($files['new']) . " nouveaux fichiers");
    66                 $this->log("- " . count($files['updated']) . " à mettre à jour");
    67                 $this->log("- " . count($files['deleted']) . " à supprimer");
    68                 $this->log("Estimation des transferts : " . $reponse['message']['data']['downloadSize']);
     63                $distantFiles = $reponse['message']['data']['files'];
     64                $this->log("Réception de la liste de " . count($distantFiles) . " fichiers ($t)");
     65                $this->log("Calcul des différences");
     66
     67
     68                // calcul des différences !
     69                spip_timer('diff');
     70                $newFiles = $updatedFiles = $deletedFiles = array();
     71                $totalSize = 0;
     72
     73                //compare local and remote file list to get updated files
     74                foreach ($distantFiles as $filePath => $info) {
     75                        if (empty($localFiles[$filePath])) {
     76                                $newFiles[$filePath] = $info;
     77                                $totalSize += $info[0];
     78                        } elseif ($localFiles[$filePath] != $info) {
     79                                $updatedFiles[$filePath] = $info;
     80                                $totalSize += $info[0];
     81                        }
     82                        unset($localFiles[$filePath]);
     83                }
     84
     85                // logiquement, ce qui reste, c'est les fichiers supprimés
     86                $deletedFiles = $localFiles;
     87
     88                $t = spip_timer('diff');
     89                $this->log("- " . count($newFiles) . " nouveaux fichiers");
     90                $this->log("- " . count($updatedFiles) . " à mettre à jour");
     91                $this->log("- " . count($deletedFiles) . " à supprimer");
     92
     93                include_spip('inc/filtres');
     94                $this->log("Estimation des transferts : " . ($totalSize ? taille_en_octets($totalSize) : "Rien à faire ! "));
     95
    6996
    7097                // en mode test, on ne fait pas de modifications.
    7198                if (!$this->test) {
    72                         $this->delete($files['deleted']);
    73                         $this->download($files['new'] + $files['updated']);
     99                        $this->delete($deletedFiles);
     100                        $this->download($newFiles + $updatedFiles);
    74101                }
    75102
Note: See TracChangeset for help on using the changeset viewer.