|
9 | 9 | import os |
10 | 10 | from MACFS import * |
11 | 11 | import MacOS |
| 12 | +import time |
12 | 13 | try: |
13 | 14 | openrf = MacOS.openrf |
14 | 15 | except AttributeError: |
@@ -52,7 +53,18 @@ def mkdirs(dst): |
52 | 53 | mkdirs(head) |
53 | 54 | os.mkdir(dst, 0777) |
54 | 55 |
|
55 | | -def copy(src, dst, createpath=0): |
| 56 | +def touched(dst): |
| 57 | + """Tell the finder a file has changed""" |
| 58 | + file_fss = macfs.FSSpec(dst) |
| 59 | + vRefNum, dirID, name = file_fss.as_tuple() |
| 60 | + dir_fss = macfs.FSSpec((vRefNum, dirID, '')) |
| 61 | + crdate, moddate, bkdate = dir_fss.GetDates() |
| 62 | + now = time.time() |
| 63 | + if now == moddate: |
| 64 | + now = now + 1 |
| 65 | + dir_fss.SetDates(crdate, now, bkdate) |
| 66 | + |
| 67 | +def copy(src, dst, createpath=0, copydates=1): |
56 | 68 | """Copy a file, including finder info, resource fork, etc""" |
57 | 69 | if createpath: |
58 | 70 | mkdirs(os.path.split(dst)[0]) |
@@ -82,13 +94,17 @@ def copy(src, dst, createpath=0): |
82 | 94 | df.Creator, df.Type = sf.Creator, sf.Type |
83 | 95 | df.Flags = (sf.Flags & (kIsStationary|kNameLocked|kHasBundle|kIsInvisible|kIsAlias)) |
84 | 96 | dstfss.SetFInfo(df) |
| 97 | + if copydates: |
| 98 | + crdate, mddate, bkdate = srcfss.GetDates() |
| 99 | + dstfss.SetDates(crdate, mddate, bkdate) |
| 100 | + touched(dstfss) |
85 | 101 |
|
86 | | -def copytree(src, dst): |
| 102 | +def copytree(src, dst, copydates=1): |
87 | 103 | """Copy a complete file tree to a new destination""" |
88 | 104 | if os.path.isdir(src): |
89 | 105 | mkdirs(dst) |
90 | 106 | files = os.listdir(src) |
91 | 107 | for f in files: |
92 | | - copytree(os.path.join(src, f), os.path.join(dst, f)) |
| 108 | + copytree(os.path.join(src, f), os.path.join(dst, f), copydates) |
93 | 109 | else: |
94 | | - copy(src, dst, 1) |
| 110 | + copy(src, dst, 1, copydates) |
0 commit comments