1 patch for repository davidsarah@dev.allmydata.org:/home/darcs/tahoe/trunk: Fri Dec 31 21:27:45 GMT Standard Time 2010 david-sarah@jacaranda.org * Eliminate direct dependencies of Tahoe-LAFS on pywin32 (updated to trunk post-#1195). refs #1274 New patches: [Eliminate direct dependencies of Tahoe-LAFS on pywin32 (updated to trunk post-#1195). refs #1274 david-sarah@jacaranda.org**20101231212745 Ignore-this: 1a64ebf2ddcd2e7d02a9a86ca2e3aaa9 ] { hunk ./src/allmydata/_auto_deps.py 68 ## # it is going to offer iocp reactor. We currently require process management. It would be ## # better if Twisted would declare that it requires pywin32 if it is going to offer process ## # management. That is twisted ticket #3238 -- http://twistedmatrix.com/trac/ticket/3238 . -## # On the other hand, Tahoe also depends on pywin32 for getting free disk space statistics -## # (although that is not a hard requirement: if win32api can't be imported then we don't -## # rely on having the disk stats). ## install_requires.append('pywin32') if hasattr(sys, 'frozen'): # for py2exe hunk ./src/allmydata/util/fileutil.py 308 # there is always at least one Unicode path component. return os.path.normpath(path) -windows = False -try: - import win32api, win32con -except ImportError: - pass -else: - windows = True - # - win32api.SetErrorMode(win32con.SEM_FAILCRITICALERRORS | - win32con.SEM_NOOPENFILEERRORBOX) + +have_GetDiskFreeSpaceExW = False +if sys.platform == "win32": + try: + from ctypes import WINFUNCTYPE, windll, POINTER, byref, c_ulonglong + from ctypes.wintypes import BOOL, DWORD, LPCWSTR + + # + PULARGE_INTEGER = POINTER(c_ulonglong) + + # + GetDiskFreeSpaceExW = WINFUNCTYPE(BOOL, LPCWSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER)( + ("GetDiskFreeSpaceExW", windll.kernel32)) + + # + GetLastError = WINFUNCTYPE(DWORD)(("GetLastError", windll.kernel32)) + + have_GetDiskFreeSpaceExW = True + except Exception: + import traceback + traceback.print_exc() def get_disk_stats(whichdir, reserved_space=0): """Return disk statistics for the storage disk, in the form of a dict hunk ./src/allmydata/util/fileutil.py 352 filesystem as reserved_space. """ - if windows: - # For Windows systems, where os.statvfs is not available, use GetDiskFreeSpaceEx. - # - # - # Although the docs say that the argument should be the root directory - # of a disk, GetDiskFreeSpaceEx actually accepts any path on that disk - # (like its Win32 equivalent). + if have_GetDiskFreeSpaceExW: + # If this is a Windows system and GetDiskFreeSpaceExW is available, use it. + # (This might put up an error dialog unless + # SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX) has been called, + # which we do in allmydata.windows.fixups.initialize().) hunk ./src/allmydata/util/fileutil.py 358 - (free_for_nonroot, total, free_for_root) = win32api.GetDiskFreeSpaceEx(whichdir) + n_free_for_nonroot = c_ulonglong(0) + n_total = c_ulonglong(0) + n_free_for_root = c_ulonglong(0) + retval = GetDiskFreeSpaceExW(whichdir, byref(n_free_for_nonroot), + byref(n_total), + byref(n_free_for_root)) + if retval == 0: + raise OSError("Windows error %d attempting to get disk statistics for %r" + % (GetLastError(), whichdir)) + free_for_nonroot = n_free_for_nonroot.value + total = n_total.value + free_for_root = n_free_for_root.value else: # For Unix-like systems. # hunk ./src/allmydata/util/fileutil.py 395 used = total - free_for_root avail = max(free_for_nonroot - reserved_space, 0) - return { 'total': total, 'free_for_root': free_for_root, + return { 'total': total, + 'free_for_root': free_for_root, 'free_for_nonroot': free_for_nonroot, hunk ./src/allmydata/util/fileutil.py 398 - 'used': used, 'avail': avail, } + 'used': used, + 'avail': avail, + } def get_available_space(whichdir, reserved_space): """Returns available space for share storage in bytes, or None if no hunk ./src/allmydata/windows/fixups.py 11 return True done = True + import codecs, re + from ctypes import WINFUNCTYPE, windll, POINTER, byref, c_int + from ctypes.wintypes import BOOL, HANDLE, DWORD, UINT, LPWSTR, LPCWSTR, LPVOID + from allmydata.util import log + from allmydata.util.encodingutil import canonical_encoding + + # + SetErrorMode = WINFUNCTYPE(UINT, UINT)(("SetErrorMode", windll.kernel32)) + SEM_FAILCRITICALERRORS = 0x0001 + SEM_NOOPENFILEERRORBOX = 0x8000 + + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX) + original_stderr = sys.stderr # If any exception occurs in this code, we'll probably try to print it on stderr, hunk ./src/allmydata/windows/fixups.py 34 print >>original_stderr, isinstance(message, str) and message or repr(message) log.msg(message, level=log.WEIRD) - import codecs, re - from ctypes import WINFUNCTYPE, windll, POINTER, byref, c_int - from ctypes.wintypes import BOOL, HANDLE, DWORD, LPWSTR, LPCWSTR, LPVOID - from allmydata.util import log - from allmydata.util.encodingutil import canonical_encoding - # Work around . codecs.register(lambda name: name == 'cp65001' and codecs.lookup('utf-8') or None) } Context: [test_storage.py: leave at least 512 MiB free when running test_large_share. refs #1195 david-sarah@jacaranda.org**20101231203215 Ignore-this: b2144c0341c3452b5d4ba219e284ea0e ] [storage: use fileutil's version of get_disk_stats() and get_available_space(), use mockery/fakery in tests, enable large share test on platforms with sparse files and if > 4 GiB of disk space is currently available zooko@zooko.com**20100910173629 Ignore-this: 1304f1164c661de6d5304f993eb9b27b ] [fileutil: copy in the get_disk_stats() and get_available_space() functions from storage/server.py zooko@zooko.com**20100910173520 Ignore-this: 8b15569715f710f4fc5092f7ca109253 ] [Update foolscap version requirement to 0.6.0, to address http://foolscap.lothar.com/trac/ticket/167 david-sarah@jacaranda.org**20101231060039 Ignore-this: 98d2b8086a1a500b9f4565bca5a3810 ] [docs/webapi.rst: typos. david-sarah@jacaranda.org**20101230034422 Ignore-this: d1f5166d72cc711f7e0d9981eac9105e ] [docs/webapi.rst: capitalization, formatting of section on URL character encoding, and a correction about Internet Explorer. david-sarah@jacaranda.org**20101230034049 Ignore-this: b3b9819d2fb264b4cdc5c8afd4e8c48d ] [docs: corrections and clarifications. david-sarah@jacaranda.org**20101227051056 Ignore-this: e33202858c7644c58f3f924b164294b6 ] [docs: more formatting cleanups and corrections. Spell webapi and wapi as web-API. david-sarah@jacaranda.org**20101227050533 Ignore-this: 18b23cbfb780df585d8a722a1ec63e94 ] [docs/debian.rst: bring description of building dependencies from source up-to-date, and change hostname from allmydata.com to tahoe-lafs.org. david-sarah@jacaranda.org**20101212222912 Ignore-this: f38462afc88b4475195610385a28391c ] [docs/architecture.rst: correct rst syntax. david-sarah@jacaranda.org**20101212202003 Ignore-this: 3fbe12feb28bec6f1c63aedbc79aad21 ] [docs/architecture.rst: formatting. david-sarah@jacaranda.org**20101212201719 Ignore-this: 305fa5dfc2939355eaf6d0d2161eb1ff ] [docs: linkification, wording improvements. david-sarah@jacaranda.org**20101212201234 Ignore-this: 4e67287f527a8bc728cfbd93255d2aae ] [docs: formatting. david-sarah@jacaranda.org**20101212201115 Ignore-this: 2e0ed394ac7726651d3a4f2c4b0d3798 ] [docs/configuration.rst: more formatting tweaks; which -> that. david-sarah@jacaranda.org**20101212195522 Ignore-this: a7becb7021854ca5a90edd892b36fdd7 ] [docs/configuration.rst: more changes to formatting. david-sarah@jacaranda.org**20101212194511 Ignore-this: 491aac33e5f5268d224359f1447d10be ] [docs/configuration.rst: changes to formatting (mainly putting commands and filenames in monospace). david-sarah@jacaranda.org**20101212181828 Ignore-this: 8a1480e2d5f43bee678476424615b50f ] [scripts/backupdb.py: more accurate comment about path field. david-sarah@jacaranda.org**20101212170320 Ignore-this: 50e47a2228a85207bbcd188a78a0d4e6 ] [scripts/cli.py: fix missing 'put' in usage example for 'tahoe put'. david-sarah@jacaranda.org**20101212170207 Ignore-this: 2cbadf066fff611fc03d3c0ff97ce6ec ] [docs/frontends/CLI.rst: changes to formatting (mainly putting commands and filenames in monospace), and to command syntax to reflect that DIRCAP/... is accepted. Clarify the syntax of 'tahoe put' and other minor corrections. Tahoe -> Tahoe-LAFS. david-sarah@jacaranda.org**20101212165800 Ignore-this: a123ef6b564aa8624d1e79c97068ea12 ] [docs/frontends/CLI.rst: Unicode arguments to 'tahoe' work on Windows as of v1.7.1. david-sarah@jacaranda.org**20101212063740 Ignore-this: 3977a99dfa86ac33a44171deaf43aaab ] [docs/known_issues.rst: fix title and linkify another URL. refs #1225 david-sarah@jacaranda.org**20101212062817 Ignore-this: cc91287f7fb51c23440b3d2fe79c449c ] [docs/known_issues.rst: fix an external link. refs #1225 david-sarah@jacaranda.org**20101212062435 Ignore-this: b8cbf12f353131756c358965c48060ec ] [Fix a link from uri.rst to dirnodes.rst. refs #1225 david-sarah@jacaranda.org**20101212054502 Ignore-this: af6205299f5c9a33229cab259c00f9d5 ] [Fix a link from webapi.rst to FTP-and-SFTP.rst. refs #1225 david-sarah@jacaranda.org**20101212053435 Ignore-this: 2b9f88678c3447ea860d6b61e8799858 ] [More specific hyperlink to architecture.rst from helper.rst. refs #1225 david-sarah@jacaranda.org**20101212052607 Ignore-this: 50424c768fca481252fabf58424852dc ] [Update hyperlinks between docs, and linkify some external references. refs #1225 david-sarah@jacaranda.org**20101212051459 Ignore-this: cd43a4c3d3de1f832abfa88d5fc4ace1 ] [docs/specifications/dirnodes.rst: fix references to mutable.rst. refs #1225 david-sarah@jacaranda.org**20101212012720 Ignore-this: 6819b4b4e06e947ee48b365e840db37d ] [docs/specifications/mutable.rst: correct the magic string for v1 mutable containers. refs #1225 david-sarah@jacaranda.org**20101212011400 Ignore-this: 99a5fcdd40cef83dbb08f323f6cdaaca ] [Move .txt files in docs/frontends and docs/specifications to .rst. refs #1225 david-sarah@jacaranda.org**20101212010251 Ignore-this: 8796d35d928370f7dc6ad2dafdc1c0fe ] [Convert docs/frontends and docs/specifications to reStructuredText format (not including file moves). david-sarah@jacaranda.org**20101212004632 Ignore-this: e3ceb2d832d73875abe48624ddbb5622 ] [scripts/cli.py: remove the disclaimer in the help for 'tahoe cp' that it does not handle non-ASCII filenames well. (At least, we intend to handle them.) david-sarah@jacaranda.org**20101130002145 Ignore-this: 94c003efaa20b9eb4a83503d79844ca ] [relnotes.txt: fifth -> sixth labor-of-love release zooko@zooko.com**20101129045647 Ignore-this: 21c245015268b38916e3a138d256c09d ] [Makefile: BB_BRANCH is set to the empty string for trunk, not the string 'trunk'. david-sarah@jacaranda.org**20101128233512 Ignore-this: 5a7ef8eb10475636d21b91e25b56c369 ] [relnotes.txt: eleventh -> twelfth release. david-sarah@jacaranda.org**20101128223321 Ignore-this: 1e26410156a665271c1170803dea2c0d ] [relnotes.tst: point to known_issues.rst, not known_issues.txt. david-sarah@jacaranda.org**20101128222918 Ignore-this: 60194eb4544cac446fe4f60b3e34b887 ] [quickstart.html: fix link to point to allmydata-tahoe-1.8.1.zip. david-sarah@jacaranda.org**20101128221728 Ignore-this: 7b3ee86f8256aa12f5d862f689f3ee29 ] [TAG allmydata-tahoe-1.8.1 david-sarah@jacaranda.org**20101128212336 Ignore-this: 9c18bdeaef4822f590d2a0d879e00621 ] Patch bundle hash: 3621174e5b51bf0e0e60b2e0890cb787893bd621