summaryrefslogtreecommitdiffstats
path: root/autopart.py
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2002-04-19 06:28:35 +0000
committerJeremy Katz <katzj@redhat.com>2002-04-19 06:28:35 +0000
commit8e7a9bc91b98a02e41dd6d53e8a2027c482346a8 (patch)
tree1c94bb1caace167e96375666ad0cc9467e83d471 /autopart.py
parent34e94e67312be97452e79939ae7104afae3c041b (diff)
downloadanaconda-8e7a9bc91b98a02e41dd6d53e8a2027c482346a8.tar.gz
anaconda-8e7a9bc91b98a02e41dd6d53e8a2027c482346a8.tar.xz
anaconda-8e7a9bc91b98a02e41dd6d53e8a2027c482346a8.zip
more merging fun from the hampton branch. I'm pretty sure this doesn't
work now, at least in gui. text mode might, though
Diffstat (limited to 'autopart.py')
-rw-r--r--autopart.py26
1 files changed, 19 insertions, 7 deletions
diff --git a/autopart.py b/autopart.py
index 10f6e72d3..d058374e4 100644
--- a/autopart.py
+++ b/autopart.py
@@ -24,6 +24,7 @@ import partRequests
from constants import *
from translate import _, N_
from partErrors import *
+from log import log
PARTITION_FAIL = -1
PARTITION_SUCCESS = 0
@@ -262,7 +263,7 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):
largestPart = (0, None)
drives = getDriveList(request, diskset)
-# print "Trying drives to find best free space out of", free
+# log("Trying drives to find best free space out of", free)
for drive in drives:
# this request is bootable and we've found a large enough
# partition already, so we don't need to keep trying other
@@ -271,11 +272,24 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):
break
# print "Trying drive", drive
disk = diskset.disks[drive]
+ numPrimary = len(partedUtils.get_primary_partitions(disk))
+
+ # if there is an extended partition add it in
+ if disk.extended_partition:
+ numPrimary = numPrimary + 1
+
+ maxPrimary = disk.max_primary_partition_count
for part in free[drive]:
-# print "Trying partition", printFreespaceitem(part)
+ # if this is a free space outside extended partition
+ # make sure we have free primary partition slots
+ if not part.type & parted.PARTITION_LOGICAL:
+ if numPrimary == maxPrimary:
+ continue
+
+# log( "Trying partition %s" % (printFreespaceitem(part),))
partSize = partedUtils.getPartSizeMB(part)
-# print "partSize %s request %s" % (partSize, request.requestSize)
+# log("partSize %s request %s" % (partSize, request.requestSize))
if partSize >= request.requestSize and partSize > largestPart[0]:
if not request.primary or (not part.type & parted.PARTITION_LOGICAL):
largestPart = (partSize, part)
@@ -286,7 +300,7 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):
return PARTITION_FAIL
# raise PartitioningError, "Can't fulfill request for partition: \n%s" %(request)
-# print "largestPart is",largestPart
+# log( "largestPart is %s" % (largestPart,))
freespace = largestPart[1]
freeStartSec = freespace.geom.start
freeEndSec = freespace.geom.end
@@ -348,7 +362,7 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):
raise PartitioningError, "Impossible partition to create"
fsType = request.fstype.getPartedFileSystemType()
-# print "creating newp with start=%s, end=%s, len=%s" % (startSec, endSec, endSec - startSec)
+# log("creating newp with start=%s, end=%s, len=%s" % (startSec, endSec, endSec - startSec))
newp = disk.partition_new (partType, fsType, startSec, endSec)
constraint = disk.constraint_any ()
@@ -754,7 +768,6 @@ def doPartitioning(diskset, requests, doRefresh = 1):
if ret == PARTITION_FAIL:
raise PartitioningError, "Partitioning failed: %s" %(msg)
-
ret = growParts(diskset, requests, newParts)
newParts.reset()
@@ -894,7 +907,6 @@ def doAutoPartition(dir, diskset, partitions, intf, instClass, dispatch):
# XXX only do this if we're dirty
## id.diskset.refreshDevices()
## id.partrequests = PartitionRequests(id.diskset)
-
doClearPartAction(partitions, diskset)
# XXX clearpartdrives is overloaded as drives we want to use for linux