Fix failing operations following paste into existing partition (#746559)

Format, label file system and new UUID operations would fail when
applied in a sequence to the destination partition following a previous
copy-paste operation.

Giving the copy of a file system a new label and a new UUID are the sort
of actions which should be performed when the disk containing the copy
remains attached to the same computer.  This really should work.

Fragment of the failing operation details for a copy and label operation
sequence:

    + Copy /dev/sdb1 to /dev/sdb2
      + calibrate /dev/sdb2
      + calibrate copy of /dev/sdb1
      + calibrate /dev/sdb1
      + check the file system on /dev/sdb1 for errors and (if possible fix them
      + copy file system of /dev/sdb1 to /dev/sdb2
    + Set file system label "small-dst" on copy of /dev/sdb1
      + calibrate copy of /dev/sdb1
          path: /dev/sdb2 (partition)
          ...
      + set file system label to "small-dst" on copy of /dev/sdb1
        + e2label copy of /dev/sdb1 "small-dst"
          Usage: e2label device [newlabel]

This is failing because the file system specific command is passed
"copy of /dev/sdb1" as the device name.  Code sequence:

 1) OperationCopy::OperationCopy() sets the real path name of the
    partition_new object to "copy of /dev/SRC" for display purposes.

 2) GParted_Core::apply_operation_to_disk() calls calibrate_partition()
    on partition_original object, restoring the real path name for
    object partition_original.

 3) apply_operation_to_disk() calls format(), label_filesystem() or
    change_uuid() on the partition_new object, which still has the real
    path name set to "copy of /dev/SRC".  File system specific commands
    fail with this as a path name.

Fix by copying the real path name from object partition_original to
partition_new, as is already done for the resize/move operation.  Also
apply this fix to the name partition operation, because it uses the
partition_new object and so that it displays the real path name in the
operation details.

Bug 746559 - Various operations fail when following paste into existing
             partition
This commit is contained in:
Mike Fleetwood 2015-03-22 16:05:40 +00:00
parent c83e37fe0e
commit d9993c21ba
1 changed files with 8 additions and 0 deletions

View File

@ -764,6 +764,8 @@ bool GParted_Core::apply_operation_to_disk( Operation * operation )
operation ->operation_detail );
break ;
case OPERATION_FORMAT:
// Reset real path in case the name is "copy of ..." from previous operation
operation->partition_new.add_path( operation->partition_original.get_path(), true );
succes = remove_filesystem( operation ->partition_original, operation ->operation_detail ) &&
format( operation ->partition_new, operation ->operation_detail ) ;
break ;
@ -782,12 +784,18 @@ bool GParted_Core::apply_operation_to_disk( Operation * operation )
operation ->operation_detail ) ;
break ;
case OPERATION_LABEL_FILESYSTEM:
// Reset real path in case the name is "copy of ..." from previous operation
operation->partition_new.add_path( operation->partition_original.get_path(), true );
succes = label_filesystem( operation->partition_new, operation->operation_detail );
break ;
case OPERATION_NAME_PARTITION:
// Reset real path in case the name is "copy of ..." from previous operation
operation->partition_new.add_path( operation->partition_original.get_path(), true );
succes = name_partition( operation->partition_new, operation->operation_detail );
break;
case OPERATION_CHANGE_UUID:
// Reset real path in case the name is "copy of ..." from previous operation
operation->partition_new.add_path( operation->partition_original.get_path(), true );
succes = change_uuid( operation ->partition_new, operation ->operation_detail ) ;
break ;
}