Exemple #1
0
 def test_moveFileAboveTopLayer(self):
     os.chdir(self.layers[0].path)
     runner = Runner().quiet().applyDefaults()
     testFile = self.filesIn(level=0)[0]
     self.assertFalse(testFile.path.is_symlink())
     runner.run(command=commands.Move, level='up', path=testFile.path)
     self.assertFalse(testFile.path.is_symlink())
Exemple #2
0
    def test_purelyDerivativeDirectoryHandling(self):
        from layers.cli import commands
        runner = Runner().applyDefaults().quiet()

        dirs = self.dirlinks
        dirs = [d for d in dirs if len(d.origin.listdir()) >= 2]
        d = dirs[0]
        testFile = d.origin.listdir()[0]
        originLayer = testFile.layer
        # Take one file from the directory and move it to the symlinked directory
        try:
            testFile.origin.move(inLayer=d.layer)
            # Confirm that it is not not a symlink
            self.assertFalse(d.isSymlink())
            # Move it back
            testFile.origin.move(inLayer=originLayer)
            # The directory is still not a symlink
            # But now contains no files
            self.assertFalse(d.isSymlink())
            # But now, if we sync, the sync function should
            # be able to recognize the fact that the directory
            # can be removed and replaced with a single symlink
            runner.run(command=commands.Sync, target_layer=self.layers[0].path)
            self.assertTrue(d.isSymlink())
        except Exception as e:
            self.printFsStruct()
            raise e
Exemple #3
0
    def setUp(self):
        layers: [Path] = [
            TEST_ENV / layerPath for layerPath in TEST_STRUCT['layers']
        ]

        # Create testenv dir, and go in
        try:
            self._prev_cwd = Path(os.getcwd()).absolute()
        except:
            self._prev_cwd = Path("/")

        if TEST_ENV.exists():
            subprocess.Popen(["rm", "-rf", TEST_ENV]).wait()

        # Make filestructur
        self._mkfs(TEST_ENV, TEST_STRUCT['paths'])

        # Chdir to root of new fs
        os.chdir(TEST_ENV)
        # Make the layers
        for layerPath in layers:
            Runner().quiet().run(command=commands.New,
                                 level=-1,
                                 target_layer=layers[0],
                                 mount=layerPath)
Exemple #4
0
    def test_missingOriginal(self):
        os.chdir(self.layers[0].path)
        runner = Runner().quiet().applyDefaults()

        #There should be a problem
        file = self.filesIn(level=0)[0]

        # Remove the original
        file.path.unlink()

        # Confirm the error
        self.assertTrue(self.verify())

        # Purge
        runner.run(command=commands.Purge)

        # Error running sync
        self.assertFalse(self.verify())
Exemple #5
0
    def test_missingSymlink(self):
        os.chdir(self.layers[0].path)
        runner = Runner().quiet().applyDefaults()

        #There should be no problems
        file = self.filesIn(level=0)[0]

        # Remove a symlink
        file.inLevel(1).path.unlink()

        # Confirm the error
        self.assertTrue(self.verify())

        # Run sync
        runner.run(command=commands.Sync)

        # The error is gone
        self.assertFalse(self.verify())
Exemple #6
0
    def test_renameFile(self):
        os.chdir(self.layers[0].path)
        runner = Runner().quiet().applyDefaults()

        testFile = self.files[0]
        newName = '46031CAD-C9C0-4E79-9BCA-AF9C876C3EC0'

        try:
            runner.run(command=commands.Move,
                       level='bottom',
                       path=testFile.localPath,
                       new_path=testFile.withName(newName).localPath)
        except Exception as e:
            self.printFsStruct()
            raise e

        self.assertFalse(testFile.path.exists())
        self.assertTrue(testFile.withName(newName).path.exists())

        self.assertVerify()
Exemple #7
0
    def test_moveFileToSymlinkedDirectory(self):
        from layers.lib import LayerLocalPath
        # Find the symlinks that point to a directory
        symdirs: [LayerLocalPath] = self.dirlinks
        # Find the ones that themselves contain a directory
        symdirs = [
            s for s in symdirs if [p for p in s.path.glob('*') if p.is_dir()]
        ]
        # And a file
        symdirs = [
            s for s in symdirs if [p for p in s.path.glob('*') if p.is_file()]
        ]
        # Pick any
        symdir = symdirs[0]
        # Fileter for directories
        dirtargets = [
            t for t in symdir.path.resolve().glob('*') if t.resolve().is_dir()
        ]
        # Fileter for files
        filetargets = [
            t for t in symdir.path.resolve().glob('*')
            if t.resolve().is_file()
        ]

        dirtarget = dirtargets[0]
        filetarget = filetargets[0]

        os.chdir(self.layers[0].path)
        runner = Runner().quiet().applyDefaults()
        runner.run(command=commands.Move,
                   path=dirtarget,
                   level=symdir.layer.level)
        runner.run(command=commands.Move,
                   path=filetarget,
                   level=symdir.layer.level)
Exemple #8
0
    def test_moveTopBottom(self):
        runner = Runner().quiet().applyDefaults()
        os.chdir(self.layers[0].path)

        testFile = self.filesIn(level=-1)[0]
        runner.run(command=commands.Move, level='top', path=testFile.path)
        self.assertTrue(testFile.path.is_symlink())
        self.assertFalse(
            testFile.inLayer(layer=self.layers[0]).path.is_symlink())

        testFile = self.filesIn(level=0)[0]
        runner.run(command=commands.Move, level='bottom', path=testFile.path)
        self.assertTrue(testFile.path.is_symlink())
        self.assertFalse(
            testFile.inLayer(layer=self.layers[-1]).path.is_symlink())

        self.assertVerify()
Exemple #9
0
    def test_moveUpDown(self):
        import contextlib
        os.chdir(self.layers[0].path)
        runner = Runner().quiet().applyDefaults()

        testFile = self.filesIn(level=2)[0]

        runner.run(command=commands.Move, level="up", path=testFile.path)
        self.assertTrue(testFile.path.is_symlink())
        self.assertFalse(
            testFile.inLayer(layer=self.layers[1]).path.is_symlink())

        testFile = self.filesIn(level=0)[0]
        runner.run(command=commands.Move, level="down", path=testFile.path)
        self.assertTrue(testFile.path.is_symlink())
        self.assertFalse(
            testFile.inLayer(layer=self.layers[1]).path.is_symlink())

        self.assertVerify()
Exemple #10
0
 def sync(self):
     Runner().quiet().run(command=commands.Sync,
                          target_layer=self.layers[0].path)
     return self.verify()
Exemple #11
0
                  (command + '.py')).resolve().absolute())).load_module()

    subcommandParser = subcommands.add_parser(module.info['name'],
                                              help=module.info['help'])

    loadedCommands[module.info['name']] = module
    loadedCommands[module.info['name']].setup(subcommandParser)

rawArgs = sys.argv[1:]
if (len(rawArgs) == 0):
    rawArgs = ['-h']

args = main.parse_args(rawArgs)
commandModule = loadedCommands[args.command]

runner = Runner()

try:
    vargs = vars(args)
    del vargs['command']
    runner.run(command=commandModule, **vargs)
except Exception as err:
    message = "{0}".format(err)
    if message == "":
        message = "Unknown Error"

    #if args.verbose:
    traceback.print_exc(file=sys.stdout)
    sys.exit(message)

sys.exit(0)