Bladeren bron

import-tar: support fifos and blk/chr devices

Thomas Waldmann 4 jaren geleden
bovenliggende
commit
5304693c55
2 gewijzigde bestanden met toevoegingen van 14 en 3 verwijderingen
  1. 12 1
      src/borg/archiver.py
  2. 2 2
      src/borg/testsuite/archiver.py

+ 12 - 1
src/borg/archiver.py

@@ -1789,8 +1789,19 @@ class Archiver:
                 status = 'h'
                 item = tarinfo_to_item(tarinfo, stat.S_IFREG)
                 item.source = tarinfo.linkname
+            elif tarinfo.isblk():
+                status = 'b'
+                item = tarinfo_to_item(tarinfo, stat.S_IFBLK)
+                item.rdev = os.makedev(tarinfo.devmajor, tarinfo.devminor)
+            elif tarinfo.ischr():
+                status = 'c'
+                item = tarinfo_to_item(tarinfo, stat.S_IFCHR)
+                item.rdev = os.makedev(tarinfo.devmajor, tarinfo.devminor)
+            elif tarinfo.isfifo():
+                status = 'f'
+                item = tarinfo_to_item(tarinfo, stat.S_IFIFO)
             else:
-                # TODO: chr and blk devices, fifos? GNUTYPE_SPARSE?
+                # TODO: GNUTYPE_SPARSE?
                 self.print_warning('%s: Unsupported tar type %s', tarinfo.name, tarinfo.type)
                 self.print_file_status('E', tarinfo.name)
                 continue

+ 2 - 2
src/borg/testsuite/archiver.py

@@ -3416,7 +3416,6 @@ id: 2 / e29442 3506da 4e1ea7 / 25f62a 5a3d41 - 02
     def test_import_tar(self):
         self.create_test_files()
         os.unlink('input/flagfile')
-        os.unlink('input/fifo1')  # TODO: not yet supported
         self.cmd('init', '--encryption=none', self.repository_location)
         self.cmd('create', self.repository_location + '::src', 'input')
         self.cmd('export-tar', self.repository_location + '::src', 'simple.tar')
@@ -3431,7 +3430,8 @@ input/dir2
 input/dir2/file2
 input/link1
 input/fusexattr
-input/empty""".splitlines())
+input/empty
+input/fifo1""".splitlines())
 
     def test_detect_attic_repo(self):
         path = make_attic_repo(self.repository_path)