OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright 2007 Google Inc. | 3 # Copyright 2007 Google Inc. |
4 # | 4 # |
5 # Licensed under the Apache License, Version 2.0 (the "License"); | 5 # Licensed under the Apache License, Version 2.0 (the "License"); |
6 # you may not use this file except in compliance with the License. | 6 # you may not use this file except in compliance with the License. |
7 # You may obtain a copy of the License at | 7 # You may obtain a copy of the License at |
8 # | 8 # |
9 # http://www.apache.org/licenses/LICENSE-2.0 | 9 # http://www.apache.org/licenses/LICENSE-2.0 |
10 # | 10 # |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 It is important for Git/Mercurial users to specify a tree/node/branch to diff | 28 It is important for Git/Mercurial users to specify a tree/node/branch to diff |
29 against by using the '--rev' option. | 29 against by using the '--rev' option. |
30 """ | 30 """ |
31 # This code is derived from appcfg.py in the App Engine SDK (open source), | 31 # This code is derived from appcfg.py in the App Engine SDK (open source), |
32 # and from ASPN recipe #146306. | 32 # and from ASPN recipe #146306. |
33 | 33 |
34 import cookielib | 34 import cookielib |
35 import getpass | 35 import getpass |
36 import logging | 36 import logging |
37 import md5 | |
38 import mimetypes | 37 import mimetypes |
39 import optparse | 38 import optparse |
40 import os | 39 import os |
41 import re | 40 import re |
42 import socket | 41 import socket |
43 import subprocess | 42 import subprocess |
44 import sys | 43 import sys |
45 import urllib | 44 import urllib |
46 import urllib2 | 45 import urllib2 |
47 import urlparse | 46 import urlparse |
48 | 47 |
| 48 # Work-around for md5 module deprecation warning in python 2.5+: |
| 49 try: |
| 50 # Try to load hashlib (python 2.5+) |
| 51 from hashlib import md5 |
| 52 except ImportError: |
| 53 # If hashlib cannot be imported, load md5.new instead. |
| 54 from md5 import new as md5 |
| 55 |
49 try: | 56 try: |
50 import readline | 57 import readline |
51 except ImportError: | 58 except ImportError: |
52 pass | 59 pass |
53 | 60 |
54 # The logging verbosity: | 61 # The logging verbosity: |
55 # 0: Errors only. | 62 # 0: Errors only. |
56 # 1: Status messages. | 63 # 1: Status messages. |
57 # 2: Info logs. | 64 # 2: Info logs. |
58 # 3: Debug logs. | 65 # 3: Debug logs. |
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
668 file_too_large = False | 675 file_too_large = False |
669 if is_base: | 676 if is_base: |
670 type = "base" | 677 type = "base" |
671 else: | 678 else: |
672 type = "current" | 679 type = "current" |
673 if len(content) > MAX_UPLOAD_SIZE: | 680 if len(content) > MAX_UPLOAD_SIZE: |
674 print ("Not uploading the %s file for %s because it's too large." % | 681 print ("Not uploading the %s file for %s because it's too large." % |
675 (type, filename)) | 682 (type, filename)) |
676 file_too_large = True | 683 file_too_large = True |
677 content = "" | 684 content = "" |
678 checksum = md5.new(content).hexdigest() | 685 checksum = md5(content).hexdigest() |
679 if options.verbose > 0 and not file_too_large: | 686 if options.verbose > 0 and not file_too_large: |
680 print "Uploading %s file for %s" % (type, filename) | 687 print "Uploading %s file for %s" % (type, filename) |
681 url = "/%d/upload_content/%d/%d" % (int(issue), int(patchset), file_id) | 688 url = "/%d/upload_content/%d/%d" % (int(issue), int(patchset), file_id) |
682 form_fields = [("filename", filename), | 689 form_fields = [("filename", filename), |
683 ("status", status), | 690 ("status", status), |
684 ("checksum", checksum), | 691 ("checksum", checksum), |
685 ("is_binary", str(is_binary)), | 692 ("is_binary", str(is_binary)), |
686 ("is_current", str(not is_base)), | 693 ("is_current", str(not is_base)), |
687 ] | 694 ] |
688 if file_too_large: | 695 if file_too_large: |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1306 file = open(options.description_file, 'r') | 1313 file = open(options.description_file, 'r') |
1307 description = file.read() | 1314 description = file.read() |
1308 file.close() | 1315 file.close() |
1309 if description: | 1316 if description: |
1310 form_fields.append(("description", description)) | 1317 form_fields.append(("description", description)) |
1311 # Send a hash of all the base file so the server can determine if a copy | 1318 # Send a hash of all the base file so the server can determine if a copy |
1312 # already exists in an earlier patchset. | 1319 # already exists in an earlier patchset. |
1313 base_hashes = "" | 1320 base_hashes = "" |
1314 for file, info in files.iteritems(): | 1321 for file, info in files.iteritems(): |
1315 if not info[0] is None: | 1322 if not info[0] is None: |
1316 checksum = md5.new(info[0]).hexdigest() | 1323 checksum = md5(info[0]).hexdigest() |
1317 if base_hashes: | 1324 if base_hashes: |
1318 base_hashes += "|" | 1325 base_hashes += "|" |
1319 base_hashes += checksum + ":" + file | 1326 base_hashes += checksum + ":" + file |
1320 form_fields.append(("base_hashes", base_hashes)) | 1327 form_fields.append(("base_hashes", base_hashes)) |
1321 # If we're uploading base files, don't send the email before the uploads, so | 1328 # If we're uploading base files, don't send the email before the uploads, so |
1322 # that it contains the file status. | 1329 # that it contains the file status. |
1323 if options.send_mail and options.download_base: | 1330 if options.send_mail and options.download_base: |
1324 form_fields.append(("send_mail", "1")) | 1331 form_fields.append(("send_mail", "1")) |
1325 if not options.download_base: | 1332 if not options.download_base: |
1326 form_fields.append(("content_upload", "1")) | 1333 form_fields.append(("content_upload", "1")) |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1364 try: | 1371 try: |
1365 RealMain(sys.argv) | 1372 RealMain(sys.argv) |
1366 except KeyboardInterrupt: | 1373 except KeyboardInterrupt: |
1367 print | 1374 print |
1368 StatusUpdate("Interrupted.") | 1375 StatusUpdate("Interrupted.") |
1369 sys.exit(1) | 1376 sys.exit(1) |
1370 | 1377 |
1371 | 1378 |
1372 if __name__ == "__main__": | 1379 if __name__ == "__main__": |
1373 main() | 1380 main() |
OLD | NEW |