buildframework/helium/sf/python/pythoncore/lib/freedisk.py
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 587 85df38eb4012
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
#============================================================================ 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
#Name        : freedisk.py 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
#Part of     : Helium 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
#All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
#This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
#under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
#which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
#at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
#Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
#Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
#Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
#
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
#Description:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
#===============================================================================
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
""" Checks free space on the disk before the build starts.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
The script is being called from the preparation.ant.xml file
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import getopt, sys
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
HELP_STRING = """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
    -h or --help     : Displays help
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
    -d or --drive    : Requires a drive letter to be checked.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
                     : E.g. -d C: (case insensitive; ':' is optional)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
                     
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
    -s or --space    : Required space to compare with the drive for the free space"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
                     : E.g. -s 2658 (an integer value in MB)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
"""
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
def print_space_report(drive, space_required):
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    42
    """ Compares the required space with current free space on the provided drive.
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
    try:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
        if sys.platform == "win32":
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    46
            import win32file # pylint: disable=F0401
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
            free_bytes = win32file.GetDiskFreeSpaceEx(drive)[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
        elif 'java' in sys.platform:
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    49
            import java.io # pylint: disable=F0401
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
            free_bytes = java.io.File(drive).getFreeSpace()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
        else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
            import os
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
            import statvfs
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    54
            # pylint: disable=E1101
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
            stats = os.statvfs(drive)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
            free_bytes = stats[statvfs.F_BSIZE] * stats[statvfs.F_BAVAIL]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
            
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    58
    except (IOError, win32file.error), err_type:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
        print "ERROR: Either specified drive doesn't exist or an unknown error"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
        print str(err_type)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
        print HELP_STRING
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
        sys.exit(-2)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
    free_space = free_bytes / (1024 * 1024)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    print "drive:", drive
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
    print "Required Space:", space_required
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
    print "Free Space:", free_space
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
    if space_required < free_space:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
        print "Enough free space"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
    else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
        print "Not enough free space, exiting"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
        sys.exit(-1)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
def main():
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    78
    """ Gets and parse options and verifies the option values.
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
    """
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
    try:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
        opts = getopt.getopt(sys.argv[1:], "hs:d:", \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
                                   ["space=", "drive=", "help"])[0]
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
    except getopt.GetoptError:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
        # print help information and exit:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
        print "ERROR: Couldn't parse the command line parameters."
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
        print HELP_STRING
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
        sys.exit(2)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
    drive = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
    required_space = None
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
    for opt, attr in opts:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
        if opt in ("-s", "--space"):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
            required_space = int(attr)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
        if opt in ("-d", "--drive"):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
            drive = attr
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
            
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
        if opt in ("-h", "--help"):
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
            print HELP_STRING
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
            sys.exit()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
    if required_space == None and drive == None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
        print "ERROR: No parameters are defined"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
        print HELP_STRING
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
        sys.exit (-3)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
    if required_space == None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
        print "ERROR: Required Disk Space parameter is not defined to" \
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
              "check space on the disk"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
        print HELP_STRING
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
        sys.exit (-3)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
    if drive == None:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
        print "ERROR: Drive parameter is missing"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
        print HELP_STRING
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
        sys.exit (-3)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
    else:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
        if sys.platform == "win32":
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
            if not ":" in drive:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
                drive = drive + ":"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
    print_space_report(drive, required_space)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
if __name__ == '__main__':
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
    sys.exit(main())