@@ -147,18 +147,29 @@ def add_archives(self, archives, unpack_wacz=False):
147
147
if invalid_archives :
148
148
logging .warning (f'Invalid archives weren\' t added: { ", " .join (invalid_archives )} ' )
149
149
150
+ def _rename_warc (self , source_dir , warc_basename ):
151
+ dupe_idx = 1
152
+ while True :
153
+ new_basename = f'{ warc_basename } -{ dupe_idx } '
154
+ if not os .path .exists (os .path .join (self .archive_dir , new_basename )):
155
+ break
156
+ dupe_idx += 1
157
+
158
+ return new_basename
159
+
150
160
def _add_warc (self , warc ):
151
- filename = os .path .abspath (warc )
161
+ warc_source = os .path .abspath (warc )
162
+ source_dir , warc_basename = os .path .split (warc_source )
152
163
153
164
# don't overwrite existing warcs with duplicate names
154
- if os .path .exists (os .path .join (self .archive_dir , os . path . basename ( filename ) )):
155
- logging . warning ( f'Warc { filename } wasn \' t added because of duplicate name.' )
156
- return None
157
-
158
- shutil . copy2 ( filename , self .archive_dir )
159
- full_path = os . path . join ( self . archive_dir , filename )
160
- logging .info ('Copied ' + filename + ' to ' + self .archive_dir )
161
- return full_path
165
+ if os .path .exists (os .path .join (self .archive_dir , warc_basename )):
166
+ warc_basename = self . _rename_warc ( source_dir , warc_basename )
167
+ logging . info ( f'Warc { os . path . basename ( warc ) } already exists - renamed to { warc_basename } .' )
168
+
169
+ warc_dest = os . path . join ( self .archive_dir , warc_basename )
170
+ shutil . copy2 ( warc_source , warc_dest )
171
+ logging .info (f 'Copied { warc } to { self .archive_dir } as { warc_basename } ' )
172
+ return warc_dest
162
173
163
174
def _add_wacz_unpacked (self , wacz ):
164
175
wacz = os .path .abspath (wacz )
0 commit comments