Skip to content

Commit 9d1b128

Browse files
committed
refactor: remove unused metadata handling in BackupManager and simplify backup process
1 parent 14e297d commit 9d1b128

File tree

1 file changed

+5
-86
lines changed

1 file changed

+5
-86
lines changed

main.py

Lines changed: 5 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -215,64 +215,6 @@ def _calculate_file_hash(self, file_path: Path) -> str:
215215
sha256_hash.update(chunk)
216216
return sha256_hash.hexdigest()
217217

218-
def _get_file_metadata(self, file_path: Path) -> FileMetadata:
219-
"""Get complete file metadata including ownership and permissions"""
220-
stat = file_path.stat()
221-
try:
222-
# Try to get user/group names, fallback to IDs if not found
223-
try:
224-
owner = pwd.getpwuid(stat.st_uid).pw_name
225-
except KeyError:
226-
owner = str(stat.st_uid)
227-
228-
try:
229-
group = grp.getgrgid(stat.st_gid).gr_name
230-
except KeyError:
231-
group = str(stat.st_gid)
232-
233-
return FileMetadata(
234-
path=str(file_path),
235-
owner=owner,
236-
group=group,
237-
mode=stat.st_mode,
238-
size=stat.st_size,
239-
modified=datetime.fromtimestamp(stat.st_mtime).isoformat(),
240-
checksum=self._calculate_file_hash(file_path)
241-
)
242-
except Exception as e:
243-
logging.warning(f"Error getting metadata for {file_path}: {e}")
244-
# Return basic metadata if detailed lookup fails
245-
return FileMetadata(
246-
path=str(file_path),
247-
owner=str(stat.st_uid),
248-
group=str(stat.st_gid),
249-
mode=stat.st_mode,
250-
size=stat.st_size,
251-
modified=datetime.fromtimestamp(stat.st_mtime).isoformat(),
252-
checksum=self._calculate_file_hash(file_path)
253-
)
254-
255-
def _apply_metadata(self, file_path: Path, metadata: FileMetadata):
256-
"""Apply stored metadata to restored file"""
257-
try:
258-
os.chmod(file_path, metadata.mode)
259-
260-
try:
261-
uid = pwd.getpwnam(metadata.owner).pw_uid
262-
gid = grp.getgrnam(metadata.group).gr_gid
263-
except KeyError:
264-
uid = int(metadata.owner) if metadata.owner.isdigit() else -1
265-
gid = int(metadata.group) if metadata.group.isdigit() else -1
266-
267-
if uid != -1 and gid != -1:
268-
try:
269-
os.chown(file_path, uid, gid)
270-
except PermissionError:
271-
logging.warning(f"Cannot set ownership for {file_path}")
272-
273-
except Exception as e:
274-
logging.error(f"Failed to apply metadata to {file_path}: {str(e)}")
275-
276218
def backup_directory(self, source_dir: Path, backup_dir: Path) -> bool:
277219
"""Create backup of a directory with progress tracking and manifest"""
278220
timestamp = self._get_timestamp()
@@ -296,7 +238,7 @@ def backup_directory(self, source_dir: Path, backup_dir: Path) -> bool:
296238

297239
archive_checksums = [] # For overall manifest checksum
298240

299-
# Get total size for progress tracking
241+
# Get total size for progress tracking
300242
total_size = self._get_dir_size(source_dir)
301243
logging.info(f"Total size to backup: {humanize.naturalsize(total_size)}")
302244

@@ -309,25 +251,15 @@ def backup_directory(self, source_dir: Path, backup_dir: Path) -> bool:
309251

310252
tracker = ProgressTracker(dir_size, "Compression")
311253

312-
# Collect file information for manifest
313-
archive_files = []
314254
file_count = 0
315255

316256
with tarfile.open(archive_path, "w:gz") as tar:
317257
for file_path in dir_path.rglob("*"):
318258
if file_path.is_file():
319-
metadata = self._get_file_metadata(file_path)
259+
file_count += 1
320260
relative_path = str(file_path.relative_to(dir_path))
321-
322-
tar_info = tar.gettarinfo(str(file_path), arcname=relative_path)
323-
tar_info.uid = pwd.getpwnam(metadata.owner).pw_uid if isinstance(metadata.owner, str) else int(metadata.owner)
324-
tar_info.gid = grp.getgrnam(metadata.group).gr_gid if isinstance(metadata.group, str) else int(metadata.group)
325-
tar_info.mode = metadata.mode
326-
327-
with open(file_path, "rb") as f:
328-
tar.addfile(tar_info, f)
329-
330-
tracker.update(metadata.size)
261+
tar.add(str(file_path), arcname=relative_path)
262+
tracker.update(file_path.stat().st_size)
331263

332264
tracker.close()
333265

@@ -344,7 +276,6 @@ def backup_directory(self, source_dir: Path, backup_dir: Path) -> bool:
344276
'compressed_size': compressed_size,
345277
'compression_ratio': ratio,
346278
'file_count': file_count,
347-
'files': archive_files,
348279
'checksum': archive_hash
349280
}
350281
manifest_data['archives'].append(archive_info)
@@ -435,19 +366,7 @@ def restore_directory(self, restore_dir: Path, output_dir: Path) -> bool:
435366
members = tar.getmembers()
436367
for member in members:
437368
tar.extract(member, path=extract_dir)
438-
439369
if member.isfile():
440-
file_path = extract_dir / member.name
441-
metadata = FileMetadata(
442-
path=str(file_path),
443-
owner=str(member.uid), # Use ID directly
444-
group=str(member.gid), # Use ID directly
445-
mode=member.mode,
446-
size=member.size,
447-
modified=datetime.fromtimestamp(member.mtime).isoformat(),
448-
checksum=""
449-
)
450-
self._apply_metadata(file_path, metadata)
451370
tracker.update(member.size)
452371

453372
restored_dirs.add(extract_dir)
@@ -467,7 +386,7 @@ def restore_directory(self, restore_dir: Path, output_dir: Path) -> bool:
467386
except Exception as e:
468387
logging.error(f"Restore failed: {str(e)}")
469388
return False
470-
389+
471390
def setup_logging(log_dir: Path) -> None:
472391
"""Configure detailed logging with both file and console handlers"""
473392
log_dir.mkdir(parents=True, exist_ok=True)

0 commit comments

Comments
 (0)