@@ -54,9 +54,9 @@ def clean_events(self, extract_dir, events):
5454 source = e .source .replace (extract_dir , '' ),
5555 message = e .message .replace (self .test_data_dir , '' ),
5656 )
57- events_results .append (ne . _asdict () )
58-
59- return events_results
57+ events_results .append (ne )
58+ events_results = sorted ( events_results , key = lambda x : x . source )
59+ return [ dict ( ne . _asdict ()) for ne in events_results ]
6060
6161 def clean_paths (self , extract_dir ):
6262 return sorted ([p .replace (extract_dir , '' ) for p in
@@ -70,45 +70,70 @@ def test_extract_tree_with_colon_in_filenames(self):
7070 expected = (
7171 'colon/libc6:amd64.list' ,
7272 )
73- test_dir = self .get_test_loc ('tar /colon.tar.xz' )
73+ test_dir = self .get_test_loc ('utils /colon.tar.xz' )
7474 extract_dir = self .get_temp_dir ()
7575 events = utils .extract_tar (location = test_dir , target_dir = extract_dir )
7676 check_files (target_dir = extract_dir , expected = expected )
7777 assert not events
7878
7979 def test_extract_tar_relative (self ):
8080 expected = ()
81- test_dir = self .get_test_loc ('tar /tar_relative.tar' )
81+ test_dir = self .get_test_loc ('utils /tar_relative.tar' )
8282 extract_dir = self .get_temp_dir ()
8383 events = utils .extract_tar (location = test_dir , target_dir = extract_dir , as_events = True )
8484 check_files (target_dir = extract_dir , expected = expected )
8585 events = self .clean_events (extract_dir , events )
8686 expected_events = [
87- {'message' : '/tar/tar_relative.tar: skipping unsupported ../a_parent_folder.txt with relative path.' ,
88- 'source' : '../a_parent_folder.txt' ,
89- 'type' : 'warning' },
90- {'message' : '/tar/tar_relative.tar: skipping unsupported ../../another_folder/b_two_root.txt with relative path.' ,
87+ {'message' : '/utils/tar_relative.tar: skipping unsupported ../../another_folder/b_two_root.txt with relative path.' ,
9188 'source' : '../../another_folder/b_two_root.txt' ,
9289 'type' : 'warning' },
93- {'message' : '/tar/tar_relative.tar: skipping unsupported ../folder/subfolder/b_subfolder.txt with relative path.' ,
90+ {'message' : '/utils/tar_relative.tar: skipping unsupported ../a_parent_folder.txt with relative path.' ,
91+ 'source' : '../a_parent_folder.txt' ,
92+ 'type' : 'warning' },
93+ {'message' : '/utils/tar_relative.tar: skipping unsupported ../folder/subfolder/b_subfolder.txt with relative path.' ,
9494 'source' : '../folder/subfolder/b_subfolder.txt' ,
9595 'type' : 'warning' },
9696 ]
9797
9898 assert events == expected_events
9999
100+ def test_extract_tar_relative_with_whiteouts (self ):
101+ expected = (
102+ '.wh..wh..opq' ,
103+ '.wh..wh..plnk' ,
104+ '.wh.foo.txt'
105+ )
106+ test_dir = self .get_test_loc ('utils/tar_relative-with-whiteouts.tar' )
107+ extract_dir = self .get_temp_dir ()
108+ events = utils .extract_tar (location = test_dir , target_dir = extract_dir , as_events = True )
109+ check_files (target_dir = extract_dir , expected = expected )
110+ events = self .clean_events (extract_dir , events )
111+ expected_events = [
112+ {'message' : '/utils/tar_relative-with-whiteouts.tar: skipping unsupported ../../another_folder/.wh..wh..opq with relative path.' ,
113+ 'source' : '../../another_folder/.wh..wh..opq' ,
114+ 'type' : 'warning' },
115+ {'message' : '/utils/tar_relative-with-whiteouts.tar: skipping unsupported ../.wh..wh..opq with relative path.' ,
116+ 'source' : '../.wh..wh..opq' ,
117+ 'type' : 'warning' },
118+ {'message' : '/utils/tar_relative-with-whiteouts.tar: skipping unsupported ../folder/subfolder/.wh..wh..opq with relative path.' ,
119+ 'source' : '../folder/subfolder/.wh..wh..opq' ,
120+ 'type' : 'warning' },
121+ ]
122+
123+ assert events == expected_events
124+
100125 def test_extract_tar_relative_as_strings (self ):
101126 expected = ()
102- test_dir = self .get_test_loc ('tar /tar_relative.tar' )
127+ test_dir = self .get_test_loc ('utils /tar_relative.tar' )
103128 extract_dir = self .get_temp_dir ()
104129 events = utils .extract_tar (location = test_dir , target_dir = extract_dir , as_events = False )
105130 check_files (target_dir = extract_dir , expected = expected )
106131
107132 events = [e .replace (self .test_data_dir , '' ) for e in events ]
108133 expected_events = [
109- 'warning: /tar /tar_relative.tar: skipping unsupported ../a_parent_folder.txt with relative path.' ,
110- 'warning: /tar /tar_relative.tar: skipping unsupported ../../another_folder/b_two_root.txt with relative path.' ,
111- 'warning: /tar /tar_relative.tar: skipping unsupported ../folder/subfolder/b_subfolder.txt with relative path.' ,
134+ 'warning: /utils /tar_relative.tar: skipping unsupported ../a_parent_folder.txt with relative path.' ,
135+ 'warning: /utils /tar_relative.tar: skipping unsupported ../../another_folder/b_two_root.txt with relative path.' ,
136+ 'warning: /utils /tar_relative.tar: skipping unsupported ../folder/subfolder/b_subfolder.txt with relative path.' ,
112137 ]
113138 assert events == expected_events
114139
@@ -117,20 +142,20 @@ def test_extract_tar_absolute(self):
117142 'tmp/subdir/a.txt' ,
118143 'tmp/subdir/b.txt' ,
119144 )
120- test_dir = self .get_test_loc ('tar /absolute_path.tar' )
145+ test_dir = self .get_test_loc ('utils /absolute_path.tar' )
121146 extract_dir = self .get_temp_dir ()
122147 events = utils .extract_tar (location = test_dir , target_dir = extract_dir , as_events = True )
123148 check_files (target_dir = extract_dir , expected = expected )
124149
125150 events = self .clean_events (extract_dir , events )
126151 expected_events = [
127- {'message' : '/tar /absolute_path.tar: absolute path name: /tmp/subdir transformed in relative path.' ,
152+ {'message' : '/utils /absolute_path.tar: absolute path name: /tmp/subdir transformed in relative path.' ,
128153 'source' : '/tmp/subdir' ,
129154 'type' : 'warning' },
130- {'message' : '/tar /absolute_path.tar: absolute path name: /tmp/subdir/a.txt transformed in relative path.' ,
155+ {'message' : '/utils /absolute_path.tar: absolute path name: /tmp/subdir/a.txt transformed in relative path.' ,
131156 'source' : '/tmp/subdir/a.txt' ,
132157 'type' : 'warning' },
133- {'message' : '/tar /absolute_path.tar: absolute path name: /tmp/subdir/b.txt transformed in relative path.' ,
158+ {'message' : '/utils /absolute_path.tar: absolute path name: /tmp/subdir/b.txt transformed in relative path.' ,
134159 'source' : '/tmp/subdir/b.txt' ,
135160 'type' : 'warning' },
136161 ]
0 commit comments