mirror of
				https://github.com/hauke68/Magallanes.git
				synced 2025-11-04 00:50:18 +01:00 
			
		
		
		
	[Nostromo] Symlinking Task
This commit is contained in:
		
							parent
							
								
									136fdd1379
								
							
						
					
					
						commit
						6d5861ec82
					
				
							
								
								
									
										49
									
								
								src/Mage/Task/BuiltIn/FS/LinkTask.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/Mage/Task/BuiltIn/FS/LinkTask.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This file is part of the Magallanes package.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * (c) Andrés Montañez <andres@andresmontanez.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * For the full copyright and license information, please view the LICENSE
 | 
				
			||||||
 | 
					 * file that was distributed with this source code.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Mage\Task\BuiltIn\FS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Symfony\Component\Process\Process;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * File System Task - Symlink a File
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Andrés Montañez <andresmontanez@gmail.com>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class LinkTask extends AbstractFileTask
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function getName()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return 'fs/link';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function getDescription()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return sprintf('[FS] Link "%s" to "%s"', $this->getFile('from'), $this->getFile('to'));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function execute()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $from = $this->getFile('from');
 | 
				
			||||||
 | 
					        $to = $this->getFile('to');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $cmd = sprintf('ln -snf %s %s', $from, $to);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @var Process $process */
 | 
				
			||||||
 | 
					        $process = $this->runtime->runCommand($cmd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $process->isSuccessful();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected function getParameters()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return ['from', 'to'];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -12,6 +12,7 @@ namespace Mage\Tests\Task\BuiltIn;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use Mage\Runtime\Exception\RuntimeException;
 | 
					use Mage\Runtime\Exception\RuntimeException;
 | 
				
			||||||
use Mage\Task\BuiltIn\FS\CopyTask;
 | 
					use Mage\Task\BuiltIn\FS\CopyTask;
 | 
				
			||||||
 | 
					use Mage\Task\BuiltIn\FS\LinkTask;
 | 
				
			||||||
use Mage\Task\BuiltIn\FS\MoveTask;
 | 
					use Mage\Task\BuiltIn\FS\MoveTask;
 | 
				
			||||||
use Mage\Task\BuiltIn\FS\RemoveTask;
 | 
					use Mage\Task\BuiltIn\FS\RemoveTask;
 | 
				
			||||||
use Exception;
 | 
					use Exception;
 | 
				
			||||||
@ -279,4 +280,81 @@ class FileSystemTaskTest extends TestCase
 | 
				
			|||||||
            $this->assertEquals('Parameter "file" is not defined', $exception->getMessage());
 | 
					            $this->assertEquals('Parameter "file" is not defined', $exception->getMessage());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function testLinkTask()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $runtime = new RuntimeMockup();
 | 
				
			||||||
 | 
					        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
				
			||||||
 | 
					        $runtime->setEnvironment('test');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $task = new LinkTask();
 | 
				
			||||||
 | 
					        $task->setOptions(['from' => 'a.txt', 'to' => 'b.txt']);
 | 
				
			||||||
 | 
					        $task->setRuntime($runtime);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->assertContains('a.txt', $task->getDescription());
 | 
				
			||||||
 | 
					        $this->assertContains('b.txt', $task->getDescription());
 | 
				
			||||||
 | 
					        $task->execute();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $ranCommands = $runtime->getRanCommands();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $testCase = array(
 | 
				
			||||||
 | 
					            0 => 'ln -snf a.txt b.txt',
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check total of Executed Commands
 | 
				
			||||||
 | 
					        $this->assertEquals(count($testCase), count($ranCommands));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check Generated Commands
 | 
				
			||||||
 | 
					        foreach ($testCase as $index => $command) {
 | 
				
			||||||
 | 
					            $this->assertEquals($command, $ranCommands[$index]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function testLinkReplaceTask()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $runtime = new RuntimeMockup();
 | 
				
			||||||
 | 
					        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
				
			||||||
 | 
					        $runtime->setEnvironment('test');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $task = new LinkTask();
 | 
				
			||||||
 | 
					        $task->setOptions(['from' => '%environment%.txt', 'to' => 'b.txt']);
 | 
				
			||||||
 | 
					        $task->setRuntime($runtime);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->assertContains('test.txt', $task->getDescription());
 | 
				
			||||||
 | 
					        $this->assertContains('b.txt', $task->getDescription());
 | 
				
			||||||
 | 
					        $task->execute();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $ranCommands = $runtime->getRanCommands();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $testCase = array(
 | 
				
			||||||
 | 
					            0 => 'ln -snf test.txt b.txt',
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check total of Executed Commands
 | 
				
			||||||
 | 
					        $this->assertEquals(count($testCase), count($ranCommands));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check Generated Commands
 | 
				
			||||||
 | 
					        foreach ($testCase as $index => $command) {
 | 
				
			||||||
 | 
					            $this->assertEquals($command, $ranCommands[$index]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function testLinkBadOptionsTask()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $runtime = new RuntimeMockup();
 | 
				
			||||||
 | 
					        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
				
			||||||
 | 
					        $runtime->setEnvironment('test');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $task = new LinkTask();
 | 
				
			||||||
 | 
					        $task->setOptions(['form' => 'a.txt', 'to' => 'b.txt']);
 | 
				
			||||||
 | 
					        $task->setRuntime($runtime);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            $task->execute();
 | 
				
			||||||
 | 
					            $this->assertTrue(false, 'Task did not failed');
 | 
				
			||||||
 | 
					        } catch (Exception $exception) {
 | 
				
			||||||
 | 
					            $this->assertTrue($exception instanceof RuntimeException);
 | 
				
			||||||
 | 
					            $this->assertEquals('Parameter "from" is not defined', $exception->getMessage());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user