예제 #1
0
파일: rm.py 프로젝트: niutouJust/trash-cli
    def run(self, argv):
        args = argv[1:]
        self.exit_code = 0

        if not args:
            self.print_err('Usage:\n'
                           '    trash-rm PATTERN\n'
                           '\n'
                           'Please specify PATTERN')
            self.exit_code = 8
            return

        trashcan = CleanableTrashcan(FileRemover())
        cmd = Filter(trashcan.delete_trashinfo_and_backup_copy)
        cmd.use_pattern(args[0])

        listing = ListTrashinfos(cmd.delete_if_matches, self.file_reader,
                                 self.unable_to_parse_path)

        scanner = TrashDirsScanner(self.environ, self.getuid,
                                   self.list_volumes,
                                   TopTrashDirRules(self.file_reader))

        for event, args in scanner.scan_trash_dirs():
            if event == TrashDirsScanner.Found:
                path, volume = args
                listing.list_from_volume_trashdir(path, volume)
class TestDescribe_AvailableTrashDirs_when_parent_is_unsticky(unittest.TestCase):
    def setUp(self):
        self.fs = Mock()
        self.scanner = TrashDirsScanner(
            environ={},
            getuid=lambda: 123,
            top_trash_dir_rules=TopTrashDirRules(self.fs),
            list_volumes=lambda: ['/topdir'],
        )
        self.fs.is_sticky_dir.side_effect = (
                lambda path: {'/topdir/.Trash':False}[path])

    def test_it_should_report_skipped_dir_non_sticky(self):
        self.fs.exists.side_effect = (
                lambda path: {'/topdir/.Trash/123':True}[path])

        result = list(self.scanner.scan_trash_dirs())

        self.assertEqual(
            [(TrashDirsScanner.SkippedBecauseParentNotSticky,
              ('/topdir/.Trash/123',)),
             (TrashDirsScanner.Found, ('/topdir/.Trash-123', '/topdir'))],
            result)

    def test_it_shouldnot_care_about_non_existent(self):
        self.fs.exists.side_effect = (
                lambda path: {'/topdir/.Trash/123':False}[path])

        result = list(self.scanner.scan_trash_dirs())

        self.assertEqual(
            [(TrashDirsScanner.Found, ('/topdir/.Trash-123', '/topdir'))],
            result)
예제 #3
0
    def run(self, argv):
        args = argv[1:]
        self.exit_code = 0

        if not args:
            self.print_err('Usage:\n'
                           '    trash-rm PATTERN\n'
                           '\n'
                           'Please specify PATTERN')
            self.exit_code = 8
            return

        trashcan = CleanableTrashcan(FileRemover())
        cmd = Filter(args[0])

        listing = ListTrashinfos(self.file_reader)

        user_info_provider = UserInfoProvider(self.environ, self.getuid)
        scanner = TrashDirsScanner(user_info_provider, self.volumes_listing,
                                   TopTrashDirRules(self.file_reader))

        for event, args in scanner.scan_trash_dirs(self.environ):
            if event == trash_dir_found:
                path, volume = args
                for type, arg in listing.list_from_volume_trashdir(
                        path, volume):
                    if type == 'unable_to_parse_path':
                        self.unable_to_parse_path(arg)
                    elif type == 'trashed_file':
                        original_location, info_file = arg
                        if cmd.matches(original_location):
                            trashcan.delete_trashinfo_and_backup_copy(
                                info_file)
 def setUp(self):
     self.fs = Mock()
     self.scanner = TrashDirsScanner(
         environ={},
         getuid=lambda: 123,
         top_trash_dir_rules=TopTrashDirRules(self.fs),
         list_volumes=lambda: ['/topdir'])
     self.fs.exists.side_effect = (lambda path: {'/topdir/.Trash/123':True}[path])
 def setUp(self):
     self.fs = Mock()
     self.scanner = TrashDirsScanner(
         environ={},
         getuid=lambda: 123,
         top_trash_dir_rules=TopTrashDirRules(self.fs),
         list_volumes=lambda: ['/topdir'],
     )
     self.fs.is_sticky_dir.side_effect = (
             lambda path: {'/topdir/.Trash':False}[path])
예제 #6
0
    def test_scan_trash_dirs(self):
        volumes_listing = Mock(spec=VolumesListing)
        environ = {'HOME': '/home/user'}
        user_info_provider = UserInfoProvider(environ, lambda: 123)
        scanner = TrashDirsScanner(
            user_info_provider,
            volumes_listing=volumes_listing,
            top_trash_dir_rules=Mock(),
        )

        volumes_listing.list_volumes.return_value = ['/vol', '/vol2']
        result = list(scanner.scan_trash_dirs({}))

        self.assertEqual([(trash_dir_found,
                           ('/home/user/.local/share/Trash', '/')),
                          (trash_dir_found, ('/vol/.Trash-123', '/vol')),
                          (trash_dir_found, ('/vol2/.Trash-123', '/vol2'))],
                         result)
 def trashdirs(self):
     result = []
     class FakeTopTrashDirRules:
         def valid_to_be_read(_, _path):
             if self.Trash_dir_is_sticky:
                 return TopTrashDirValidationResult.Valid
             else:
                 return TopTrashDirValidationResult.NotValidBecauseIsNotSticky
     scanner = TrashDirsScanner(
         environ=self.environ,
         getuid=lambda:self.uid,
         top_trash_dir_rules= FakeTopTrashDirRules(),
         list_volumes = lambda: self.volumes,
     )
     for event, args in scanner.scan_trash_dirs():
         if event == TrashDirsScanner.Found:
             path, _volume = args
             result.append(path)
     return result
class TestDescribe_AvailableTrashDirs_when_parent_is_symlink(unittest.TestCase):
    def setUp(self):
        self.fs = Mock()
        self.scanner = TrashDirsScanner(
            environ={},
            getuid=lambda: 123,
            top_trash_dir_rules=TopTrashDirRules(self.fs),
            list_volumes=lambda: ['/topdir'])
        self.fs.exists.side_effect = (lambda path: {'/topdir/.Trash/123':True}[path])

    def test_it_should_skip_symlink(self):
        self.fs.is_sticky_dir.return_value = True
        self.fs.is_symlink.return_value    = True

        result = list(self.scanner.scan_trash_dirs())

        self.assertEqual([
            (TrashDirsScanner.SkippedBecauseParentIsSymlink,
             ('/topdir/.Trash/123',)),
            (TrashDirsScanner.Found, ('/topdir/.Trash-123', '/topdir'))
        ], result)