mirror of
https://github.com/arsenetar/dupeguru.git
synced 2024-11-05 07:49:02 +00:00
63aad8ca84
--HG-- rename : se/py/LICENSE => se/core/LICENSE rename : se/py/__init__.py => se/core/__init__.py rename : se/py/app_cocoa.py => se/core/app_cocoa.py rename : se/py/data.py => se/core/data.py rename : se/py/fs.py => se/core/fs.py rename : se/py/tests/__init__.py => se/core/tests/__init__.py rename : se/py/tests/fs_test.py => se/core/tests/fs_test.py extra : convert_revision : svn%3Ac306627e-7827-47d3-bdf0-9a457c9553a1/trunk%40273
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Created By: Virgil Dupras
|
|
# Created On: 2009-10-23
|
|
# $Id$
|
|
# Copyright 2009 Hardcoded Software (http://www.hardcoded.net)
|
|
#
|
|
# This software is licensed under the "HS" License as described in the "LICENSE" file,
|
|
# which should be included with this package. The terms are also available at
|
|
# http://www.hardcoded.net/licenses/hs_license
|
|
|
|
import hashlib
|
|
|
|
from hsutil import io
|
|
from hsutil.misc import nonone
|
|
|
|
from dupeguru import fs
|
|
|
|
class Bundle(fs.File):
|
|
"""This class is for Mac OSX bundles (.app). Bundles are seen by the OS as
|
|
normal directories, but I don't want that in dupeGuru. I want dupeGuru
|
|
to see them as files.
|
|
"""
|
|
def _read_info(self, field):
|
|
if field in ('size', 'ctime', 'mtime'):
|
|
files = fs.get_all_files(self.path)
|
|
size = sum((file.size for file in files), 0)
|
|
self.size = size
|
|
stats = io.stat(self.path)
|
|
self.ctime = nonone(stats.st_ctime, 0)
|
|
self.mtime = nonone(stats.st_mtime, 0)
|
|
elif field in ('md5', 'md5partial'):
|
|
# What's sensitive here is that we must make sure that subfiles'
|
|
# md5 are always added up in the same order, but we also want a
|
|
# different md5 if a file gets moved in a different subdirectory.
|
|
def get_dir_md5_concat():
|
|
files = fs.get_all_files(self.path)
|
|
files.sort(key=lambda f:f.path)
|
|
md5s = [getattr(f, field) for f in files]
|
|
return ''.join(md5s)
|
|
|
|
md5 = hashlib.md5(get_dir_md5_concat())
|
|
digest = md5.digest()
|
|
setattr(self, field, digest)
|