예제 #1
0
 public static function update($version, $backupBase)
 {
     if (!is_dir($backupBase)) {
         throw new \Exception("Backup directory {$backupBase} is not found");
     }
     set_include_path($backupBase . PATH_SEPARATOR . $backupBase . '/core/lib' . PATH_SEPARATOR . $backupBase . '/core/config' . PATH_SEPARATOR . $backupBase . '/3rdparty' . PATH_SEPARATOR . $backupBase . '/apps' . PATH_SEPARATOR . get_include_path());
     $tempDir = self::getTempDir();
     Helper::mkdir($tempDir, true);
     $installed = Helper::getDirectories();
     $sources = Helper::getSources($version);
     try {
         $thirdPartyUpdater = new Location_3rdparty($installed[Helper::THIRDPARTY_DIRNAME], $sources[Helper::THIRDPARTY_DIRNAME]);
         $thirdPartyUpdater->update($tempDir . '/' . Helper::THIRDPARTY_DIRNAME);
         self::$processed[] = $thirdPartyUpdater;
         $coreUpdater = new Location_Core($installed[Helper::CORE_DIRNAME], $sources[Helper::CORE_DIRNAME]);
         $coreUpdater->update($tempDir . '/' . Helper::CORE_DIRNAME);
         self::$processed[] = $coreUpdater;
         $appsUpdater = new Location_Apps('', $sources[Helper::APP_DIRNAME]);
         $appsUpdater->update($tempDir . '/' . Helper::APP_DIRNAME);
         self::$processed[] = $appsUpdater;
     } catch (\Exception $e) {
         self::rollBack();
         self::cleanUp();
         throw $e;
     }
     // zip backup
     $zip = new \ZipArchive();
     if ($zip->open($backupBase . ".zip", \ZIPARCHIVE::CREATE) === true) {
         Helper::addDirectoryToZip($zip, $backupBase, $backupBase);
         $zip->close();
         \OCP\Files::rmdirr($backupBase);
     }
     return true;
 }
예제 #2
0
 protected function tearDown()
 {
     if ($this->instance) {
         \OCP\Files::rmdirr($this->instance->constructUrl(''));
     }
     parent::tearDown();
 }
예제 #3
0
파일: updater.php 프로젝트: samj1912/repo
 public static function update($version, $backupBase)
 {
     if (!is_dir($backupBase)) {
         throw new \Exception("Backup directory {$backupBase} is not found");
     }
     // Switch include paths to backup
     $pathsArray = explode(PATH_SEPARATOR, get_include_path());
     $pathsTranslated = [];
     foreach ($pathsArray as $path) {
         //Update all 3rdparty paths
         if (preg_match('|^' . preg_quote(\OC::$THIRDPARTYROOT . '/3rdparty') . '|', $path)) {
             $pathsTranslated[] = preg_replace('|^' . preg_quote(\OC::$THIRDPARTYROOT . '/3rdparty') . '|', $backupBase . '/3rdparty', $path);
             continue;
         }
         // Update all OC webroot paths
         $pathsTranslated[] = preg_replace('|^' . preg_quote(\OC::$SERVERROOT) . '|', $backupBase, $path);
     }
     set_include_path(implode(PATH_SEPARATOR, $pathsTranslated));
     $tempDir = self::getTempDir();
     Helper::mkdir($tempDir, true);
     $installed = Helper::getDirectories();
     $sources = Helper::getSources($version);
     try {
         $thirdPartyUpdater = new \OCA\Updater\Location\Thirdparty($installed[Helper::THIRDPARTY_DIRNAME], $sources[Helper::THIRDPARTY_DIRNAME]);
         $thirdPartyUpdater->update($tempDir . '/' . Helper::THIRDPARTY_DIRNAME);
         self::$processed[] = $thirdPartyUpdater;
         $coreUpdater = new \OCA\Updater\Location\Core($installed[Helper::CORE_DIRNAME], $sources[Helper::CORE_DIRNAME]);
         $coreUpdater->update($tempDir . '/' . Helper::CORE_DIRNAME);
         self::$processed[] = $coreUpdater;
         $appsUpdater = new \OCA\Updater\Location\Apps('', $sources[Helper::APP_DIRNAME]);
         $appsUpdater->update($tempDir . '/' . Helper::APP_DIRNAME);
         self::$processed[] = $appsUpdater;
     } catch (\Exception $e) {
         self::rollBack();
         self::cleanUp();
         throw $e;
     }
     // zip backup
     $zip = new \ZipArchive();
     if ($zip->open($backupBase . ".zip", \ZIPARCHIVE::CREATE) === true) {
         Helper::addDirectoryToZip($zip, $backupBase);
         $zip->close();
         \OCP\Files::rmdirr($backupBase);
     }
     return true;
 }
예제 #4
0
파일: TAR.php 프로젝트: GitHubUser4234/core
 /**
  * remove a file or folder from the archive
  *
  * @param string $path
  * @return bool
  */
 function remove($path)
 {
     if (!$this->fileExists($path)) {
         return false;
     }
     $this->fileList = false;
     $this->cachedHeaders = false;
     //no proper way to delete, extract entire archive, delete file and remake archive
     $tmp = \OCP\Files::tmpFolder();
     $this->tar->extract($tmp);
     \OCP\Files::rmdirr($tmp . $path);
     $this->tar = null;
     unlink($this->path);
     $this->reopen();
     $this->tar->createModify(array($tmp), '', $tmp);
     return true;
 }
예제 #5
0
 public function tearDown()
 {
     if ($this->instance) {
         \OCP\Files::rmdirr($this->instance->constructUrl(''));
     }
 }
예제 #6
0
 public function testCheckDataDirectoryValidity()
 {
     $dataDir = \OCP\Files::tmpFolder();
     touch($dataDir . '/.ocdata');
     $errors = \OC_Util::checkDataDirectoryValidity($dataDir);
     $this->assertEmpty($errors);
     \OCP\Files::rmdirr($dataDir);
     $dataDir = \OCP\Files::tmpFolder();
     // no touch
     $errors = \OC_Util::checkDataDirectoryValidity($dataDir);
     $this->assertNotEmpty($errors);
     \OCP\Files::rmdirr($dataDir);
     if (!\OC_Util::runningOnWindows()) {
         $errors = \OC_Util::checkDataDirectoryValidity('relative/path');
         $this->assertNotEmpty($errors);
     }
 }
예제 #7
0
 public function testExtract()
 {
     $dir = \OC::$SERVERROOT . '/tests/data';
     $this->instance = $this->getExisting();
     $tmpDir = \OCP\Files::tmpFolder();
     $this->instance->extract($tmpDir);
     $this->assertEquals(true, file_exists($tmpDir . 'lorem.txt'));
     $this->assertEquals(true, file_exists($tmpDir . 'dir/lorem.txt'));
     $this->assertEquals(true, file_exists($tmpDir . 'logo-wide.png'));
     $this->assertEquals(file_get_contents($dir . '/lorem.txt'), file_get_contents($tmpDir . 'lorem.txt'));
     \OCP\Files::rmdirr($tmpDir);
 }