From c68f6c6721fea2041d26ffe7690b85ff13df3cce Mon Sep 17 00:00:00 2001 From: Peng Zhihui Date: Thu, 26 Dec 2013 13:40:11 +0800 Subject: [PATCH] finish the code of the interface of the partition-tool modified: new_partition/interface_partition.py --- new_partition/interface_partition.py | 774 ++++++++++++++++++++++++--- 1 file changed, 712 insertions(+), 62 deletions(-) diff --git a/new_partition/interface_partition.py b/new_partition/interface_partition.py index c1690fb..8ad7558 100755 --- a/new_partition/interface_partition.py +++ b/new_partition/interface_partition.py @@ -8,13 +8,6 @@ screen = SnackScreen() screen.drawRootText(0, 0, "Welcome to Rocky Security OS") screen.pushHelpLine( (" F1-New F2-Delete F3-Boot F4-Raid F12-OK ")) -global count -count = 0 -def DEBUG(): - global count - print 'debug' + str(count) - count = count + 1 - global base_unit base_unit = 'B' @@ -84,18 +77,6 @@ def unit_to_byte(num_unit): num_byte = num*1000*1000*1000 return num_byte -def sort_partition(dev): - list_partition = [] - list_partition_sorted = [] - for partition in p_d.Partition.dict[dev]['partition'].keys(): - list_partition.append(partition) - list_partition_sorted.append(partition) - print list_partition - for partition in list_partition: - sn = p_d.Partition.dict[dev]['partition'][partition]['sn'] - list_partition_sorted[int(sn)-1] = partition - return list_partition_sorted - def showPartitionWindow(): global clb global bb @@ -114,7 +95,6 @@ def showPartitionWindow(): dev_name = dev.split('/dev/')[1] partition_table = p_d.Partition.dict[dev]['partition_table'] dev_size = p_d.Partition.dict[dev]['disk_size'] - #dev_size_pretty = pretty_unit(filter(str.isdigit, dev_size)) clb.append(["%s" %(dev),"","","","",""], \ "dev:%s:%s" %(dev,dev_size), [LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT]) @@ -122,6 +102,11 @@ def showPartitionWindow(): if partition_table == None: continue + if re.search('/cciss/', dev): + pre_partition_name = dev + 'p' + else: + pre_partition_name = dev + list_partition_all_sorted = p_d.sort_partitions(p_d.Partition.dict, dev, "all") for partition in list_partition_all_sorted: start = p_d.Partition.dict[dev]['partition'][partition]['start'] @@ -148,7 +133,7 @@ def showPartitionWindow(): partition_pretty = partition clb.append([" %s" %(partition_pretty),"%s" %(start_pretty),"%s" %(end_pretty),"%s" %(size_pretty),"%s" %(ptype),"%s" %(flags)],\ - "partition:%s:%s:%s:%s:%s:%s:%s" %(partition, dev, size, start, end, partition_table, size_pretty),\ + "partition:%s:%s:%s:%s:%s:%s:%s:%s" %(partition, dev, size, start, end, partition_table, size_pretty, pre_partition_name),\ [LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT]) sg = Grid(2, 3) @@ -224,15 +209,8 @@ def add_partition(ptype='', extended='', label=''): free_space_end = filter(str.isdigit, clb.current().split(":")[5]) free_space_sn = int(p_d.Partition.dict[dev]['partition'][free_space]['sn']) - # 4k assign - #if int(free_space_start) < 2*1000*1000: - # free_space_start_real = free_space_start - # free_space_start = '0%' - size_num = filter(str.isdigit, size) - #size_num = get_size_num(size) unit = filter(str.isalpha, size_pretty) - #size_pretty_num = filter(str.isdigit, size_pretty) size_pretty_num = get_size_num(size_pretty) bb2 = ButtonBar(screen, (("OK", "ok"), ("Cancel", "cancel"))) @@ -285,8 +263,6 @@ def add_partition(ptype='', extended='', label=''): ptype = 'extended' if bb2.buttonPressed(res2) == "ok": - #if ptype == 'extended' and count_extended != 0: - # show_error('An extended partition has existed !You can not create any more !') fs_set = lb_fstype.current() tips = check_size_set(entry_size.value(),size_pretty_num) if tips: @@ -297,7 +273,7 @@ def add_partition(ptype='', extended='', label=''): size_set = str(size_set_num) + base_unit partition_start = free_space_start + base_unit partition_end = str(int(free_space_start) + size_set_num) + base_unit - + flags = '' if cb_boot.value() == 1: if flags == '': @@ -324,28 +300,25 @@ def add_partition(ptype='', extended='', label=''): and p_d.Partition.dict[dev]['partition'][p]['type'] =='logical': partition_num = int(p_d.Partition.dict[dev]['partition'][p]['num']) else: - if label == 'msdos': - for p in list_partition_sorted: - if int(p_d.Partition.dict[dev]['partition'][p]['num']) > partition_num \ - and p_d.Partition.dict[dev]['partition'][p]['type'] != 'logical': - partition_num = int(p_d.Partition.dict[dev]['partition'][p]['num']) - elif label == 'gpt': - if int(p_d.Partition.dict[dev]['partition'][list_partition_sorted[0]]['num']) != 1: - pass - else: - for i in range(len(list_partition_sorted)): - #print int(p_d.Partition.dict[dev]['partition'][sorted(list_partition)[i]]['num']) - if i == len(list_partition_sorted) - 1 or \ - int(p_d.Partition.dict[dev]['partition'][list_partition_sorted[i]]['num']) \ - != int(p_d.Partition.dict[dev]['partition'][list_partition_sorted[i+1]]['num']) - 1: - partition_num = int(p_d.Partition.dict[dev]['partition'][list_partition_sorted[i]]['num']) - break + if int(p_d.Partition.dict[dev]['partition'][list_partition_sorted[0]]['num']) != 1: + pass + else: + for i in range(len(list_partition_sorted)): + if i == len(list_partition_sorted) - 1 or \ + int(p_d.Partition.dict[dev]['partition'][list_partition_sorted[i]]['num']) \ + != int(p_d.Partition.dict[dev]['partition'][list_partition_sorted[i+1]]['num']) - 1: + partition_num = int(p_d.Partition.dict[dev]['partition'][list_partition_sorted[i]]['num']) + break partition_num += 1 - partition = dev + str(partition_num) + #if re.search('/cciss/',dev): + # partition = dev + 'p' + str(partition_num) + #else: + # partition = dev + str(partition_num) + partition = pre_partition_name + str(partition_num) partition_sn = free_space_sn - if size_set_pretty == size_pretty: + if float(get_size_num(size_set_pretty)) == float(get_size_num(size_pretty)): partition_end = free_space_end if len(list_free_sorted) > 1: for p in list_free_sorted: @@ -394,7 +367,8 @@ def add_partition(ptype='', extended='', label=''): p_num = p_d.Partition.dict[dev]['partition'][p]['num'] if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn: if re.search('free', p): - p_d.Partition.dict[dev]['partition']['free '+str(p_num+1)]['sn'] = p_d.Partition.dict[dev]['partition'][p]['sn']+1 + p_d.Partition.dict[dev]['partition']['free '+str(p_num+1)]['sn'] = \ + p_d.Partition.dict[dev]['partition'][p]['sn']+1 p_d.Partition.dict[dev]['partition']['free '+str(p_num+1)]['num'] = p_num + 1 p_d.Partition.dict[dev]['partition']['free '+str(p_num+1)]['start'] =\ p_d.Partition.dict[dev]['partition'][p]['start'] @@ -420,10 +394,10 @@ def add_partition(ptype='', extended='', label=''): p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['start'] = partition_start p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['end'] = partition_end p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['size'] = size_set - p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['type'] = '' - p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['flags'] = '' + p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['type'] = ' ' + p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['flags'] = ' ' -def del_partition(partition,dev): +def del_msdos_partition(partition,dev): bb3 = ButtonBar(screen, (("Cancel", "cancel"), ("Delete", "delete"))) g3 = GridForm(screen, "Del Partition", 1, 3) g3.add(TextboxReflowed(45, 'You are about to delete the partition "%s".' \ @@ -431,17 +405,688 @@ def del_partition(partition,dev): g3.add(Label(""),0,1) g3.add(bb3, 0, 2) res3 = g3.runOnce() + if bb3.buttonPressed(res3) == "delete": - list_partition_all_sorted = p_d.sort_partition(p_d.Partition.dict, dev, "all") - partition_sn = int(p_d.Partition.dict[dev]['partition'][partition]['sn']) + list_partition_all_sorted = p_d.sort_partitions(p_d.Partition.dict, dev, "all") + partition_sn = p_d.Partition.dict[dev]['partition'][partition]['sn'] + partition_num = p_d.Partition.dict[dev]['partition'][partition]['num'] + partition_start = p_d.Partition.dict[dev]['partition'][partition]['start'] + partition_end = p_d.Partition.dict[dev]['partition'][partition]['end'] + partition_size = p_d.Partition.dict[dev]['partition'][partition]['size'] + partition_type = p_d.Partition.dict[dev]['partition'][partition]['type'] + + p_d.delete_one_partition(p_d.Partition.dict, dev, partition) + + if partition_type == 'extended': + del_partition_count = 0 + del_free_count = 0 + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + #for p in list_partition_all_sorted: + p_start = p_d.Partition.dict[dev]['partition'][p]['start'] + p_end = p_d.Partition.dict[dev]['partition'][p]['end'] + if int(filter(str.isdigit, p_start)) >= int(filter(str.isdigit, partition_start)) and \ + int(filter(str.isdigit, p_end)) <= int(filter(str.isdigit, partition_end)): + p_d.delete_one_partition(p_d.Partition.dict, dev, p) + del_partition_count += 1 + if re.search('free', p): + del_free_count += 1 + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + p_sn = p_d.Partition.dict[dev]['partition'][p]['sn'] + if p_sn > partition_sn: + p_d.Partition.dict[dev]['partition'][p]['sn'] = p_sn - del_partition_count + if re.search('free', p): + p_sn = p_d.Partition.dict[dev]['partition'][p]['sn'] + p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + p_start = p_d.Partition.dict[dev]['partition'][p]['start'] + p_end = p_d.Partition.dict[dev]['partition'][p]['end'] + p_size = p_d.Partition.dict[dev]['partition'][p]['size'] + p_d.delete_one_partition(p_d.Partition.dict, dev, p) + p_d.Partition.dict[dev]['partition']['free '+str(p_num-del_free_count)]['num'] = p_num - del_free_count + p_d.Partition.dict[dev]['partition']['free '+str(p_num-del_free_count)]['sn'] = p_sn + p_d.Partition.dict[dev]['partition']['free '+str(p_num-del_free_count)]['start'] = p_start + p_d.Partition.dict[dev]['partition']['free '+str(p_num-del_free_count)]['end'] = p_end + p_d.Partition.dict[dev]['partition']['free '+str(p_num-del_free_count)]['size'] = p_size + p_d.Partition.dict[dev]['partition']['free '+str(p_num-del_free_count)]['type'] = ' ' + p_d.Partition.dict[dev]['partition']['free '+str(p_num-del_free_count)]['flags'] = ' ' + + list_partition_all_sorted = p_d.sort_partitions(p_d.Partition.dict, dev, "all") for p in list_partition_all_sorted: p_sn = p_d.Partition.dict[dev]['partition'][p]['sn'] - if p_sn == partition_sn -1 and re.search('free', p): - p_d.Partition.dict[dev]['partition'][p]['end'] + if p_sn == partition_sn -1: + pre_partition = p + elif p_sn == partition_sn + 1: + next_partition = p + + #if re.search('/cciss/', dev): + # pre_partition_name = dev + 'p' + #else: + # pre_partition_name = dev + + try: + (extended_start, extended_end) = get_extended_start_end(dev) + except: + pass + + if partition_type == 'logical': + # pre_partition must exist + if locals().has_key('next_partition'): + if re.search('free',next_partition) and \ + int(filter(str.isdigit, p_d.Partition.dict[dev]['partition'][next_partition]['end']))\ + <= int(filter(str.isdigit,extended_end)): + if re.search('free', pre_partition): + p_d.Partition.dict[dev]['partition'][pre_partition]['end'] = \ + p_d.Partition.dict[dev]['partition'][next_partition]['end'] + p_d.Partition.dict[dev]['partition'][pre_partition]['size'] = \ + str(int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][next_partition]['end']))-\ + int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['start'])))+\ + base_unit + p_d.delete_one_partition(p_d.Partition.dict, dev, next_partition) + p_d.delete_one_partition(p_d.Partition.dict, dev,partition) + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn + 1: + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 2 + if p_num > partition_num and not re.search('free', p): + p_num -= 1 + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['num'] = \ + p_num + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['sn'] = \ + p_d.Partition.dict[dev]['partition'][p]['sn'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['start'] = \ + p_d.Partition.dict[dev]['partition'][p]['start'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['end'] = \ + p_d.Partition.dict[dev]['partition'][p]['end'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['size'] = \ + p_d.Partition.dict[dev]['partition'][p]['size'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['type'] = \ + p_d.Partition.dict[dev]['partition'][p]['type'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['flags'] = \ + p_d.Partition.dict[dev]['partition'][p]['flags'] + if re.search('free',p): + p_num -= 1 + p_d.Partition.dict[dev]['partition']['free '+ str(p_num)]['num'] = \ + p_num + p_d.Partition.dict[dev]['partition']['free '+ str(p_num)]['sn'] = \ + p_d.Partition.dict[dev]['partition'][p]['sn'] + p_d.Partition.dict[dev]['partition']['free '+ str(p_num)]['start'] = \ + p_d.Partition.dict[dev]['partition'][p]['start'] + p_d.Partition.dict[dev]['partition']['free '+ str(p_num)]['end'] = \ + p_d.Partition.dict[dev]['partition'][p]['end'] + p_d.Partition.dict[dev]['partition']['free '+ str(p_num)]['size'] = \ + p_d.Partition.dict[dev]['partition'][p]['size'] + p_d.Partition.dict[dev]['partition']['free '+ str(p_num)]['type'] = \ + p_d.Partition.dict[dev]['partition'][p]['type'] + p_d.Partition.dict[dev]['partition']['free '+ str(p_num)]['flags'] = \ + p_d.Partition.dict[dev]['partition'][p]['flags'] + + p_num_max = 1 + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "partition"): + if p_d.Partition.dict[dev]['partition'][p]['num'] > p_num_max: + p_num_max = p_d.Partition.dict[dev]['partition'][p]['num'] + if p_num_max > partition_num: + p_d.delete_one_partition(p_d.Partition.dict, dev, pre_partition_name+str(p_num_max)) + f_num_max = 1 + for f in p_d.sort_partitions(p_d.Partition.dict, dev, "free"): + if p_d.Partition.dict[dev]['partition'][f]['num'] > f_num_max: + f_num_max = p_d.Partition.dict[dev]['partition'][f]['num'] + if f_num_max > p_d.Partition.dict[dev]['partition'][next_partition]['num']: + p_d.delete_one_partition(p_d.Partition.dict, dev, pre_partition_name+str(p_num_max)) + + else: + p_d.Partition.dict[dev]['partition'][next_partition]['start'] = partition_start + p_d.Partition.dict[dev]['partition'][next_partition]['sn'] = partition_sn + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn: + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 1 + if p_num > partition_num and not re.search('free', p): + p_num -= 1 + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['num'] = \ + p_num + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['sn'] = \ + p_d.Partition.dict[dev]['partition'][p]['sn'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['start'] = \ + p_d.Partition.dict[dev]['partition'][p]['start'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['end'] = \ + p_d.Partition.dict[dev]['partition'][p]['end'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['size'] = \ + p_d.Partition.dict[dev]['partition'][p]['size'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['type'] = \ + p_d.Partition.dict[dev]['partition'][p]['type'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['flags'] = \ + p_d.Partition.dict[dev]['partition'][p]['flags'] + p_num_max = 1 + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "partition"): + if p_d.Partition.dict[dev]['partition'][p]['num'] > p_num_max: + p_num_max = p_d.Partition.dict[dev]['partition'][p]['num'] + if p_num_max > partition_num: + p_d.delete_one_partition(p_d.Partition.dict, dev, pre_partition_name+str(p_num_max)) + else: + if re.search('free', pre_partition): + p_d.Partition.dict[dev]['partition'][pre_partition]['end'] = partition_end + p_d.Partition.dict[dev]['partition'][pre_partition]['size'] = \ + str(int(filter.isdigit, partition_end) - \ + int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['start'])))+base_unit + else: + free_num = 0 + list_free_sorted = p_d.sort_partitions(p_d.Partition.dict, dev, "free") + if p_d.Partition.dict[dev]['partition'][list_free_sorted[0]]['sn'] > partition_sn: + pass + else: + for i in range(len(list_free_sorted)): + if i == len(list_free_sorted) - 1 or \ + ( p_d.Partition.dict[dev]['partition'][list_free_sorted[i]]['sn'] \ + < partition_sn and p_d.Partition.dict[dev]['partition'][list_free_sorted[i+1]]['sn']\ + >partition_sn): + free_num = int(p_d.Partition.dict[dev]['partition'][list_free_sorted[i]]['num']) + break + for f in p_d.sort_partitions(p_d.Partition.dict, dev, "free")[::-1]: + if p_d.Partition.dict[dev]['partition'][f]['sn'] > partition_sn: + f_num = p_d.Partition.dict[dev]['partition'][f]['num'] + f_num += 1 + p_d.Partition.dict[dev]['partition']['free '+str(f_num)]['num']= \ + f_num + p_d.Partition.dict[dev]['partition']['free '+str(f_num)]['sn']= \ + p_d.Partition.dict[dev]['partition'][f]['sn'] + p_d.Partition.dict[dev]['partition']['free '+str(f_num)]['start']= \ + p_d.Partition.dict[dev]['partition'][f]['start'] + p_d.Partition.dict[dev]['partition']['free '+str(f_num)]['end']= \ + p_d.Partition.dict[dev]['partition'][f]['end'] + p_d.Partition.dict[dev]['partition']['free '+str(f_num)]['size']= \ + p_d.Partition.dict[dev]['partition'][f]['size'] + p_d.Partition.dict[dev]['partition']['free '+str(f_num)]['type']= \ + p_d.Partition.dict[dev]['partition'][f]['type'] + p_d.Partition.dict[dev]['partition']['free '+str(f_num)]['flags']= \ + p_d.Partition.dict[dev]['partition'][f]['flags'] + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "partition"): + p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + if p_d.Partition.dict[dev]['partition'][p]['sn'] >partition_sn \ + and p_num > 4: + p_num -= 1 + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['num']=\ + p_num + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['sn']=\ + p_d.Partition.dict[dev]['partition'][p]['sn'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['start']=\ + p_d.Partition.dict[dev]['partition'][p]['start'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['end']=\ + p_d.Partition.dict[dev]['partition'][p]['end'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['size']=\ + p_d.Partition.dict[dev]['partition'][p]['size'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['type']=\ + p_d.Partition.dict[dev]['partition'][p]['type'] + p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['flags']=\ + p_d.Partition.dict[dev]['partition'][p]['flags'] + p_d.delete_one_partition(p_d.Partition.dict, dev, \ + p_d.sort_partitions(p_d.Partition.dict,dev,"partition")[::-1][0]) + + free_num += 1 + p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['num'] = free_num + p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['sn'] = partition_sn + p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['start'] = partition_start + p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['end'] = partition_end + p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['size'] = partition_size + p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['type'] = ' ' + p_d.Partition.dict[dev]['partition']['free '+str(free_num)]['flags'] = ' ' + + else: + free_num_max = 1 + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "free"): + if p_d.Partition.dict[dev]['partition'][p]['num'] > free_max_num: + free_max_num = p_d.Partition.dict[dev]['partition'][p]['num'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max)]['sn'] = partition_sn + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max)]['num'] = free_max_num + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max)]['start'] = partition_start + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max)]['end'] = partition_end + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max)]['size'] = partition_size + + else: + if locals().has_key('pre_partition') and locals().has_key('next_partition'): + if re.search('free', pre_partition) and re.search('free', next_partition): + if locals().has_key('extended_start') and \ + (int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['start']))\ + >= int(filter(str.isdigit, extended_start)) and \ + int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['end']))\ + <= int(filter(str.isdigit, extended_end))): + p_d.Partition.dict[dev]['partition'][next_partition]['start'] = partition_start + p_d.Partition.dict[dev]['partition'][next_partition]['size'] = \ + str(int(filter(str.isdigit, p_d.Partition.dict[dev]['partition'][next_partition]['end']))-\ + int(filter(str.isdigit, partition_start))) + base_unit + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn: + #if not re.search('free', p): + # p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['num']\ + # = p_num -1 + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['sn']\ + # = p_d.Partition.dict[dev]['partition'][p]['sn']-1 + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['start']\ + # = p_d.Partition.dict[dev]['partition'][p]['start'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['end']\ + # = p_d.Partition.dict[dev]['partition'][p]['end'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['size']\ + # = p_d.Partition.dict[dev]['partition'][p]['size'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['type']\ + # = p_d.Partition.dict[dev]['partition'][p]['type'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['flags']\ + # = p_d.Partition.dict[dev]['partition'][p]['flags'] + #else: + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 1 + #partition_last = p_d.sort_partitions(p_d.Partition.dict,dev,"partition")[::-1][0] + #if p_d.Partition.dict[dev]['partition'][partition_last]['sn'] > partition_sn: + # p_d.delete_one_partition(p_d.Partition.dict,dev,partition_last) + + else: + p_d.Partition.dict[dev]['partition'][pre_partition]['end'] = \ + p_d.Partition.dict[dev]['partition'][next_partition]['end'] + p_d.Partition.dict[dev]['partition'][pre_partition]['size'] = \ + str(int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][next_partition]['end']))-\ + int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['start'])))+\ + base_unit + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn + 1: + if re.search('free', p): + p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['num']\ + = p_num -1 + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['sn']\ + = p_d.Partition.dict[dev]['partition'][p]['sn']-2 + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['start']\ + = p_d.Partition.dict[dev]['partition'][p]['start'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['end']\ + = p_d.Partition.dict[dev]['partition'][p]['end'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['size']\ + = p_d.Partition.dict[dev]['partition'][p]['size'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['type']\ + = p_d.Partition.dict[dev]['partition'][p]['type'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['flags']\ + = p_d.Partition.dict[dev]['partition'][p]['flags'] + else: + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 2 + if len(p_d.sort_partitions(p_d.Partition.dict, dev,"free")) > 1: + free_last = p_d.sort_partitions(p_d.Partition.dict, dev,"free")[::-1][0] + p_d.delete_one_partition(p_d.Partition.dict,dev,free_last) + + elif re.search('free', pre_partition) and not re.search('free', next_partition): + if locals().has_key('extended_start') and \ + (int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['start']))\ + >= int(filter(str.isdigit, extended_start)) or \ + int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['end']))\ + <= int(filter(str.isdigit, extended_end))): + len_free_list = len(p_d.sort_partitions(p_d.Partition.dict, dev, "free")) + free_num_mid = 0 + for i in range(len_free_list)[::-1]: + if p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['sn'] > partition_sn: + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['sn'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['sn'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['num'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['num'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['start'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['start'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['end'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['end'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['size'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['size'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['type'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['type'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['flags'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['flags'] + if p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['sn'] < partition_sn: + free_num_mid = p_d.Partition.dict[dev]['partition']['free '+str(i+1)]['num'] + break + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['sn'] = partition_sn + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['num'] = free_num_mid+1 + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['start'] = partition_start + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['end'] = partition_end + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['size'] = partition_size + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['type'] = ' ' + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['flags'] = ' ' + else: + p_d.Partition.dict[dev]['partition'][pre_partition]['end'] = partition_end + p_d.Partition.dict[dev]['partition'][pre_partition]['size'] = \ + str(int(filter(str.isdigit, partition_end)) - \ + int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['start'])))+\ + base_unit + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn: + #if not re.search('free', p): + # p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['num']\ + # = p_num -1 + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['sn']\ + # = p_d.Partition.dict[dev]['partition'][p]['sn']-1 + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['start']\ + # = p_d.Partition.dict[dev]['partition'][p]['start'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['end']\ + # = p_d.Partition.dict[dev]['partition'][p]['end'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['size']\ + # = p_d.Partition.dict[dev]['partition'][p]['size'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['type']\ + # = p_d.Partition.dict[dev]['partition'][p]['type'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['flags']\ + # = p_d.Partition.dict[dev]['partition'][p]['flags'] + #else: + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 1 + #partition_last = p_d.sort_partitions(p_d.Partition.dict,dev,"partition")[::-1][0] + #p_d.delete_one_partition(p_d.Partition.dict,dev,partition_last) + + elif not re.search('free', pre_partition) and re.search('free',next_partition): + p_d.Partition.dict[dev]['partition'][next_partition]['start'] = partition_start + p_d.Partition.dict[dev]['partition'][next_partition]['size'] = \ + str(int(filter(str.isdigit, p_d.Partition.dict[dev]['partition'][next_partition]['end']))-\ + int(filter(str.isdigit, partition_start))) + base_unit + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn: + #if not re.search('free', p): + # p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['num']\ + # = p_num -1 + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['sn']\ + # = p_d.Partition.dict[dev]['partition'][p]['sn']-1 + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['start']\ + # = p_d.Partition.dict[dev]['partition'][p]['start'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['end']\ + # = p_d.Partition.dict[dev]['partition'][p]['end'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['size']\ + # = p_d.Partition.dict[dev]['partition'][p]['size'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['type']\ + # = p_d.Partition.dict[dev]['partition'][p]['type'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num-1)]['flags']\ + # = p_d.Partition.dict[dev]['partition'][p]['flags'] + #else: + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 1 + #partition_last = p_d.sort_partitions(p_d.Partition.dict,dev,"partition")[::-1][0] + #if p_d.Partition.dict[dev]['partition'][partition_last]['sn'] > partition_sn: + # p_d.delete_one_partition(p_d.Partition.dict,dev,partition_last) + + else: + len_free_list = len(p_d.sort_partitions(p_d.Partition.dict, dev, "free")) + free_num_mid = 0 + for i in range(len_free_list)[::-1]: + if p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['sn'] > partition_sn: + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['sn'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['sn'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['num'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['num']+1 + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['start'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['start'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['end'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['end'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['size'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['size'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['type'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['type'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['flags'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['flags'] + if p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['sn'] < partition_sn: + free_num_mid = p_d.Partition.dict[dev]['partition']['free '+str(i+1)]['num'] + break + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['sn'] = partition_sn + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['num'] = free_num_mid+1 + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['start'] = partition_start + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['end'] = partition_end + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['size'] = partition_size + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['type'] = ' ' + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['flags'] = ' ' + + #for p in p_d.sort_partitions(p_d.Partition.dict, dev, "partition"): + # p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + # p_sn = p_d.Partition.dict[dev]['partition'][p]['sn'] + # if p_sn > partition_sn and p_num < 5: + # p_num -= 1 + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['num'] = p_num + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['sn'] = p_sn + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['start']\ + # = p_d.Partition.dict[dev]['partition'][p]['start'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['end']\ + # = p_d.Partition.dict[dev]['partition'][p]['end'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['size']\ + # = p_d.Partition.dict[dev]['partition'][p]['size'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['type']\ + # = p_d.Partition.dict[dev]['partition'][p]['type'] + # p_d.Partition.dict[dev]['partition'][pre_partition_name+str(p_num)]['flags']\ + # = p_d.Partition.dict[dev]['partition'][p]['flags'] + # p_d.delete_one_partition(p_d.Partition.dict,dev,p) + + + elif locals().has_key('pre_partition') and not locals().has_key('next_partition'): + if re.search('free', pre_partition) and ((locals().has_key('extended_start') and\ + int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['start']))\ + >= int(filter(str.isdigit, extended_end))) or \ + not locals().has_key('extended_start')) : + free = p_d.sort_partitions(p_d.Partition.dict, dev,"free")[::-1][0] + p_d.Partition.dict[dev]['partition'][free]['end'] = partition_end + p_d.Partition.dict[dev]['partition'][free]['size'] = \ + partition_end - p_d.Partition.dict[dev]['partition'][free]['start'] + else: + free_num_max = 0 + for f in p_d.sort_partitions(p_d.Partition.dict, dev, "free"): + f_num = p_d.Partition.dict[dev]['partition'][f]['num'] + if f_num > free_num_max: + free_num_max = f_num + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['num']\ + = free_num_max+1 + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['sn']\ + = partition_sn + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['start']\ + = partition_start + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['end']\ + = partition_end + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['size']\ + = partition_size + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['type']\ + = ' ' + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['flags']\ + = ' ' + + elif not locals().has_key('pre_partition') and locals().has_key('next_partition'): + if re.search('free', next_partition): + for p in p_d.sort_partitions(p_d.Partition.dict, dev,"all"): + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 1 + p_d.Partition.dict[dev]['partition']['free 1']['num'] = partition_num + p_d.Partition.dict[dev]['partition']['free 1']['sn'] = partition_sn + p_d.Partition.dict[dev]['partition']['free 1']['start'] = partition_start + p_d.Partition.dict[dev]['partition']['free 1']['size'] = \ + str(int(filter(str.isdigit, p_d.Partition.dict[dev]['partition']['free 1']['end']))\ + - int(filter(str.isdigit, partition_start))) + base_unit + else: + for f in p_d.sort_partitions(p_d.Partition.dict, dev,"free")[::-1]: + free_num = p_d.Partition.dict[dev]['partition'][f]['num'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['num']\ + = free_num + 1 + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['sn']\ + = p_d.Partition.dict[dev]['partition'][f]['sn'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['start']\ + = p_d.Partition.dict[dev]['partition'][f]['start'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['end']\ + = p_d.Partition.dict[dev]['partition'][f]['end'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['size']\ + = p_d.Partition.dict[dev]['partition'][f]['size'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['type']\ + = p_d.Partition.dict[dev]['partition'][f]['type'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['flags']\ + = p_d.Partition.dict[dev]['partition'][f]['flags'] + p_d.Partition.dict[dev]['partition']['free 1']['num'] = partition_num + p_d.Partition.dict[dev]['partition']['free 1']['sn'] = partition_sn + p_d.Partition.dict[dev]['partition']['free 1']['start'] = partition_start + p_d.Partition.dict[dev]['partition']['free 1']['end'] = partition_end + p_d.Partition.dict[dev]['partition']['free 1']['size'] = partition_size + p_d.Partition.dict[dev]['partition']['free 1']['type'] = ' ' + p_d.Partition.dict[dev]['partition']['free 1']['flags'] = ' ' + + else: + p_d.delete_all_partitions(p_d.Partition.dict, dev) +def del_gpt_partition(partition,dev): + bb3 = ButtonBar(screen, (("Cancel", "cancel"), ("Delete", "delete"))) + g3 = GridForm(screen, "Del Partition", 1, 3) + g3.add(TextboxReflowed(45, 'You are about to delete the partition "%s".' \ + %(partition)), 0, 0) + g3.add(Label(""),0,1) + g3.add(bb3, 0, 2) + res3 = g3.runOnce() + if bb3.buttonPressed(res3) == "delete": + list_partition_all_sorted = p_d.sort_partitions(p_d.Partition.dict, dev, "all") + partition_sn = p_d.Partition.dict[dev]['partition'][partition]['sn'] + partition_num = p_d.Partition.dict[dev]['partition'][partition]['num'] + partition_start = p_d.Partition.dict[dev]['partition'][partition]['start'] + partition_end = p_d.Partition.dict[dev]['partition'][partition]['end'] + partition_size = p_d.Partition.dict[dev]['partition'][partition]['size'] + partition_type = p_d.Partition.dict[dev]['partition'][partition]['type'] - + p_d.delete_one_partition(p_d.Partition.dict, dev, partition) + + list_partition_all_sorted = p_d.sort_partitions(p_d.Partition.dict, dev, "all") + for p in list_partition_all_sorted: + p_sn = p_d.Partition.dict[dev]['partition'][p]['sn'] + if p_sn == partition_sn -1: + pre_partition = p + elif p_sn == partition_sn + 1: + next_partition = p + + if locals().has_key('pre_partition') and locals().has_key('next_partition'): + if re.search('free', pre_partition) and re.search('free', next_partition): + p_d.Partition.dict[dev]['partition'][pre_partition]['end'] = \ + p_d.Partition.dict[dev]['partition'][next_partition]['end'] + p_d.Partition.dict[dev]['partition'][pre_partition]['size'] = \ + str(int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][next_partition]['end']))-\ + int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['start'])))+\ + base_unit + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn + 1: + if re.search('free', p): + p_num = p_d.Partition.dict[dev]['partition'][p]['num'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['num']\ + = p_num -1 + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['sn']\ + = p_d.Partition.dict[dev]['partition'][p]['sn']-2 + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['start']\ + = p_d.Partition.dict[dev]['partition'][p]['start'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['end']\ + = p_d.Partition.dict[dev]['partition'][p]['end'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['size']\ + = p_d.Partition.dict[dev]['partition'][p]['size'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['type']\ + = p_d.Partition.dict[dev]['partition'][p]['type'] + p_d.Partition.dict[dev]['partition']['free '+str(p_num-1)]['flags']\ + = p_d.Partition.dict[dev]['partition'][p]['flags'] + else: + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 2 + if len(p_d.sort_partitions(p_d.Partition.dict, dev,"free")) > 1: + free_last = p_d.sort_partitions(p_d.Partition.dict, dev,"free")[::-1][0] + p_d.delete_one_partition(p_d.Partition.dict,dev,free_last) + elif re.search('free', pre_partition) and not re.search('free', next_partition): + p_d.Partition.dict[dev]['partition'][pre_partition]['end'] = partition_end + p_d.Partition.dict[dev]['partition'][pre_partition]['size'] = \ + str(int(filter(str.isdigit, partition_end)) - \ + int(filter(str.isdigit,p_d.Partition.dict[dev]['partition'][pre_partition]['start'])))+\ + base_unit + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn: + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 1 + elif not re.search('free', pre_partition) and re.search('free',next_partition): + p_d.Partition.dict[dev]['partition'][next_partition]['start'] = partition_start + p_d.Partition.dict[dev]['partition'][next_partition]['size'] = \ + str(int(filter(str.isdigit, p_d.Partition.dict[dev]['partition'][next_partition]['end']))-\ + int(filter(str.isdigit, partition_start))) + base_unit + for p in p_d.sort_partitions(p_d.Partition.dict, dev, "all"): + if p_d.Partition.dict[dev]['partition'][p]['sn'] > partition_sn: + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 1 + else: + len_free_list = len(p_d.sort_partitions(p_d.Partition.dict, dev, "free")) + free_num_mid = 0 + for i in range(len_free_list)[::-1]: + if p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['sn'] > partition_sn: + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['sn'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['sn'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['num'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['num']+1 + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['start'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['start'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['end'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['end'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['size'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['size'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['type'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['type'] + p_d.Partition.dict[dev]['partition'] ['free '+str(i+2)]['flags'] = \ + p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['flags'] + if p_d.Partition.dict[dev]['partition'] ['free '+str(i+1)]['sn'] < partition_sn: + free_num_mid = p_d.Partition.dict[dev]['partition']['free '+str(i+1)]['num'] + break + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['sn'] = partition_sn + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['num'] = free_num_mid+1 + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['start'] = partition_start + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['end'] = partition_end + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['size'] = partition_size + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['type'] = ' ' + p_d.Partition.dict[dev]['partition'] ['free '+str(free_num_mid+1)]['flags'] = ' ' + + elif locals().has_key('pre_partition') and not locals().has_key('next_partition'): + if re.search('free', pre_partition): + free = p_d.sort_partitions(p_d.Partition.dict, dev,"free")[::-1][0] + p_d.Partition.dict[dev]['partition'][free]['end'] = partition_end + p_d.Partition.dict[dev]['partition'][free]['size'] = \ + partition_end - p_d.Partition.dict[dev]['partition'][free]['start'] + else: + free_num_max = 0 + for f in p_d.sort_partitions(p_d.Partition.dict, dev, "free"): + f_num = p_d.Partition.dict[dev]['partition'][f]['num'] + if f_num > free_num_max: + free_num_max = f_num + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['num']\ + = free_num_max+1 + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['sn']\ + = partition_sn + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['start']\ + = partition_start + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['end']\ + = partition_end + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['size']\ + = partition_size + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['type']\ + = ' ' + p_d.Partition.dict[dev]['partition']['free '+str(free_num_max+1)]['flags']\ + = ' ' + + elif not locals().has_key('pre_partition') and locals().has_key('next_partition'): + if re.search('free', next_partition): + for p in p_d.sort_partitions(p_d.Partition.dict, dev,"all"): + p_d.Partition.dict[dev]['partition'][p]['sn'] -= 1 + p_d.Partition.dict[dev]['partition']['free 1']['num'] = partition_num + p_d.Partition.dict[dev]['partition']['free 1']['sn'] = partition_sn + p_d.Partition.dict[dev]['partition']['free 1']['start'] = partition_start + p_d.Partition.dict[dev]['partition']['free 1']['size'] = \ + str(int(filter(str.isdigit, p_d.Partition.dict[dev]['partition']['free 1']['end']))\ + - int(filter(str.isdigit, partition_start))) + base_unit + else: + for f in p_d.sort_partitions(p_d.Partition.dict, dev,"free")[::-1]: + free_num = p_d.Partition.dict[dev]['partition'][f]['num'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['num']\ + = free_num + 1 + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['sn']\ + = p_d.Partition.dict[dev]['partition'][f]['sn'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['start']\ + = p_d.Partition.dict[dev]['partition'][f]['start'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['end']\ + = p_d.Partition.dict[dev]['partition'][f]['end'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['size']\ + = p_d.Partition.dict[dev]['partition'][f]['size'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['type']\ + = p_d.Partition.dict[dev]['partition'][f]['type'] + p_d.Partition.dict[dev]['partition']['free '+str(free_num+1)]['flags']\ + = p_d.Partition.dict[dev]['partition'][f]['flags'] + p_d.Partition.dict[dev]['partition']['free 1']['num'] = partition_num + p_d.Partition.dict[dev]['partition']['free 1']['sn'] = partition_sn + p_d.Partition.dict[dev]['partition']['free 1']['start'] = partition_start + p_d.Partition.dict[dev]['partition']['free 1']['end'] = partition_end + p_d.Partition.dict[dev]['partition']['free 1']['size'] = partition_size + p_d.Partition.dict[dev]['partition']['free 1']['type'] = ' ' + p_d.Partition.dict[dev]['partition']['free 1']['flags'] = ' ' + + else: + p_d.delete_all_partitions(p_d.Partition.dict, dev) p_d.Partition.init_from_os() @@ -481,7 +1126,7 @@ while(1): free_space_start = clb.current().split(":")[4] free_space_end = clb.current().split(":")[5] free_space_size = clb.current().split(":")[3] - + pre_partition_name = clb.current().split(':')[8] (count_primary, count_extended) = count_primary_extended(dev) # add logical partition when an extended partition exists if re.search('extended', str(p_d.Partition.dict[dev])): @@ -489,8 +1134,6 @@ while(1): if int(filter(str.isdigit,free_space_start)) >= int(filter(str.isdigit,extended_start)) \ and int(filter(str.isdigit,free_space_end)) <= int(filter(str.isdigit,extended_end)): ptype = 'logical' - #print 'ptype' - #time.sleep(5) add_partition(ptype, 'extended', 'msdos') elif int(filter(str.isdigit,free_space_start)) >= int(filter(str.isdigit,extended_end)): show_error("Bad partition scheme ! This free space can't be used any more !") @@ -512,16 +1155,23 @@ while(1): free_space_start = clb.current().split(":")[4] free_space_end = clb.current().split(":")[5] free_space_size = clb.current().split(":")[3] + pre_partition_name = clb.current().split(':')[8] add_partition(ptype='primary', extended='', label='gpt') elif re.search("partition:free", clb.current()) == None and \ re.search("dev:", clb.current()) == None and \ bb.buttonPressed(res) == "delete": + msdos_or_gpt = clb.current().split(':')[6] dev = clb.current().split(":")[2] partition = clb.current().split(":")[1] - del_partition(partition, dev) + pre_partition_name = clb.current().split(':')[8] + if msdos_or_gpt == 'msdos': + del_msdos_partition(partition, dev) + elif msdos_or_gpt == 'gpt': + del_gpt_partition(partition, dev) screen.finish() #p_d.pretty(p_d.Partition.dict) p_d.write_to_xml_file() +