Mercurial > p > roundup > code
annotate roundup/install_util.py @ 8478:ed4ef394d5d6
doc: initial attempt to document setup of pgp support for email.
Used an AI assistant to help write this. Basic gpg commands seem to
work, but I have not tested this totally. Docs basically follow the
setup used for pgp testing in the test suite.
It looks like roundup accepts signed emails as well as encrypted
and signed emails. But it does not generate signed emails.
Also it looks like there is no PGP support for alternate email
addresses. Only primary addresses can do PGP emails.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 15 Nov 2025 16:59:24 -0500 |
| parents | 8e118eb20d86 |
| children |
| rev | line source |
|---|---|
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1 # |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
3 # This module is free software, and you may redistribute it and/or modify |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
4 # under the same terms as Python, so long as this copyright message and |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
5 # disclaimer are retained in their original form. |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
6 # |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
10 # POSSIBILITY OF SUCH DAMAGE. |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
11 # |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
7230
8e118eb20d86
flake8 spacing changes, split multiple imports
John Rouillard <rouilj@ieee.org>
parents:
7016
diff
changeset
|
17 # |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
388
diff
changeset
|
18 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1910
diff
changeset
|
19 """Support module to generate and check fingerprints of installed files. |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
388
diff
changeset
|
20 """ |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1910
diff
changeset
|
21 __docformat__ = 'restructuredtext' |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
22 |
|
7230
8e118eb20d86
flake8 spacing changes, split multiple imports
John Rouillard <rouilj@ieee.org>
parents:
7016
diff
changeset
|
23 import os |
|
8e118eb20d86
flake8 spacing changes, split multiple imports
John Rouillard <rouilj@ieee.org>
parents:
7016
diff
changeset
|
24 import shutil |
|
4982
9ba03348f923
Remove roundup/anypy/hashlib_.py
John Kristensen <john@jerrykan.com>
parents:
4570
diff
changeset
|
25 from hashlib import sha1 |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
26 |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
27 from roundup.anypy.strings import s2b |
|
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
28 |
|
3496
4ee255777c25
clean up digested_file_types [SF#1268303]
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
29 sgml_file_types = [".xml", ".ent", ".html"] |
|
4ee255777c25
clean up digested_file_types [SF#1268303]
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
30 hash_file_types = [".py", ".sh", ".conf", ".cgi"] |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
31 slast_file_types = [".css"] |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
32 |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
33 digested_file_types = sgml_file_types + hash_file_types + slast_file_types |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
34 |
| 6068 | 35 |
|
1910
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
36 def extractFingerprint(lines): |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
37 # get fingerprint from last line |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
38 if lines[-1].startswith(b"#SHA: "): |
|
1910
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
39 # handle .py/.sh comment |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
40 return lines[-1][6:].strip() |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
41 elif lines[-1].startswith(b"<!-- SHA: "): |
|
1910
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
42 # handle xml/html files |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
43 fingerprint = lines[-1][10:] |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
44 fingerprint = fingerprint.replace(b'-->', b'') |
|
1910
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
45 return fingerprint.strip() |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
46 elif lines[-1].startswith(b"/* SHA: "): |
|
1910
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
47 # handle css files |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
48 fingerprint = lines[-1][8:] |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
49 fingerprint = fingerprint.replace(b'*/', b'') |
|
1910
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
50 return fingerprint.strip() |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
51 return None |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
52 |
| 6068 | 53 |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
54 def checkDigest(filename): |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
55 """Read file, check for valid fingerprint, return TRUE if ok""" |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
56 # open and read file |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
57 inp = open(filename, "rb") |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
58 lines = inp.readlines() |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
59 inp.close() |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
60 |
|
1910
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
61 fingerprint = extractFingerprint(lines) |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
62 if fingerprint is None: |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
63 return 0 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
64 del lines[-1] |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
65 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
66 # calculate current digest |
|
4089
eddb82d0964c
Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents:
3496
diff
changeset
|
67 digest = sha1() |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
68 for line in lines: |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
69 digest.update(line) |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
70 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
71 # compare current to stored digest |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
72 return fingerprint == s2b(digest.hexdigest()) |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
73 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
74 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
75 class DigestFile: |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
76 """ A class that you can use like open() and that calculates |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
77 and writes a SHA digest to the target file. |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
78 """ |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
79 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
80 def __init__(self, filename): |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
81 self.filename = filename |
|
4089
eddb82d0964c
Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents:
3496
diff
changeset
|
82 self.digest = sha1() |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
83 self.file = open(self.filename, "wb") |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
84 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
85 def write(self, data): |
|
1910
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
86 lines = data.splitlines() |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
87 # if the file is coming from an installed tracker being used as a |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
88 # template, then we will want to re-calculate the SHA |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
89 fingerprint = extractFingerprint(lines) |
|
d19fd344bd1f
recalculate SHA on template files when installed tracker used as template
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
90 if fingerprint is not None: |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
91 data = b'\n'.join(lines[:-1]) + b'\n' |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
92 self.file.write(data) |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
93 self.digest.update(data) |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
94 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
95 def close(self): |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
96 file, ext = os.path.splitext(self.filename) |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
97 |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
98 if ext in sgml_file_types: |
| 6068 | 99 self.file.write(s2b("<!-- SHA: %s -->\n" % |
| 100 (self.digest.hexdigest(),))) | |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
101 elif ext in hash_file_types: |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
102 self.file.write(s2b("#SHA: %s\n" % (self.digest.hexdigest(),))) |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
103 elif ext in slast_file_types: |
| 6068 | 104 self.file.write(s2b("/* SHA: %s */\n" % |
| 105 (self.digest.hexdigest(),))) | |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
106 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
107 self.file.close() |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
108 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
109 |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
110 def copyDigestedFile(src, dst, copystat=1): |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
111 """ Copy data from `src` to `dst`, adding a fingerprint to `dst`. |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
112 If `copystat` is true, the file status is copied, too |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
113 (like shutil.copy2). |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
114 """ |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
115 if os.path.isdir(dst): |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
116 dst = os.path.join(dst, os.path.basename(src)) |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
117 |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
118 dummy, ext = os.path.splitext(src) |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
119 if ext not in digested_file_types: |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
120 if copystat: |
|
388
2d92f93072f9
Code using copyDigestedFile() that passes unit tests
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
387
diff
changeset
|
121 return shutil.copy2(src, dst) |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
122 else: |
|
388
2d92f93072f9
Code using copyDigestedFile() that passes unit tests
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
387
diff
changeset
|
123 return shutil.copyfile(src, dst) |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
124 |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
125 fsrc = None |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
126 fdst = None |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
127 try: |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
128 fsrc = open(src, 'rb') |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
129 fdst = DigestFile(dst) |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
130 shutil.copyfileobj(fsrc, fdst) |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
131 finally: |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
132 if fdst: fdst.close() |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
133 if fsrc: fsrc.close() |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
134 |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
135 if copystat: shutil.copystat(src, dst) |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
136 |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
137 |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
138 def test(): |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
139 import sys |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
140 |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
141 testdata = open(sys.argv[0], 'rb').read() |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
142 |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
143 for ext in digested_file_types: |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
144 testfile = "__digest_test" + ext |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
145 |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
146 out = DigestFile(testfile) |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
147 out.write(testdata) |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
148 out.close() |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
149 |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
150 assert checkDigest(testfile), "digest ok w/o modification" |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
151 |
|
5427
88cf5614e0f4
Python 3 preparation: use byte strings and binary I/O in roundup/install_util.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4982
diff
changeset
|
152 mod = open(testfile, 'r+b') |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
153 mod.seek(0) |
|
7016
6c7f03902e5a
Backed out changeset 050bcfc801c3
John Rouillard <rouilj@ieee.org>
parents:
7013
diff
changeset
|
154 mod.write('# changed!') |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
155 mod.close() |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
156 |
|
387
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
157 assert not checkDigest(testfile), "digest fails after modification" |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
158 |
|
c066d3c91728
Copy function, and proper handling of unknown file types
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
385
diff
changeset
|
159 os.remove(testfile) |
|
383
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
160 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
161 |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
162 if __name__ == '__main__': |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
163 test() |
|
a213e2a90364
Added install utils (digest calculation)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
164 |
| 1090 | 165 # vim: set filetype=python ts=4 sw=4 et si |
